Heim > Backend-Entwicklung > Python-Tutorial > Vorstellungsgespräche für Softwareentwickler – #EIS CLI

Vorstellungsgespräche für Softwareentwickler – #EIS CLI

Linda Hamilton
Freigeben: 2024-11-29 04:55:10
Original
836 Leute haben es durchsucht

Software Engineer Interviews - #EIS CLI

Einführung

Dies ist der dritte Beitrag der Reihe „Software Engineer Interviews“. Ich habe eine Herausforderung mitgebracht, die ich vor ein paar Jahren gemeistert habe, und tatsächlich die Stelle bekommen – andere technische Vorstellungsgespräche waren beteiligt, beispielsweise ein Screening früherer Erfahrungen.

Wenn Sie die vorherigen Beiträge dieser Serie verpasst haben, finden Sie sie hier.

Die Herausforderung

Diese Herausforderung war auch eine Programmieraufgabe zum Mitnehmen, bei der ich ein CLI-Programm entwickeln musste, das die OEIS (Online-Enzyklopädie ganzzahliger Sequenzen) abfragt und die Gesamtzahl der Ergebnisse sowie den Namen des ersten Ergebnisses zurückgibt Fünf von der Abfrage zurückgegebene Sequenzen.

Glücklicherweise verfügt das OEIS-Abfragesystem über ein JSON-Ausgabeformat, sodass Sie die Ergebnisse erhalten können, indem Sie die URL aufrufen und die Sequenz als Abfragezeichenfolge übergeben.

Beispiel für Eingabe und Ausgabe:

oeis 1 1 2 3 5 7
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Found 1096 results. Showing first five:
1. The prime numbers.
2. a(n) is the number of partitions of n (the partition numbers).
3. Prime numbers at the beginning of the 20th century (today 1 is no longer regarded as a prime).
4. Palindromic primes: prime numbers whose decimal expansion is a palindrome.
5. a(n) = floor(3^n / 2^n).
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Dieses Ergebnis ist veraltet!

Die Herausforderung lösen

Der Plan zur Lösung dieser Herausforderung ist folgender:

  • Beginnen Sie mit einer Python-Datei, die als CLI-Einstiegspunkt dient
    • Es sollte eine Liste von durch Leerzeichen getrennten Zahlen als Argument erhalten
  • Erstellen Sie eine Client-Datei, die für den Abruf von Daten aus dem OEIS-Abfragesystem verantwortlich ist
  • Ein Formatierer, der dafür sorgt, dass die für die Konsole formatierte Ausgabe zurückgegeben wird

Da es sich hierbei um eine Programmierherausforderung handelt, werde ich Poetry verwenden, um die Struktur des Projekts zu erstellen und es jedem zu erleichtern, es auszuführen. Sie können auf ihrer Website nachlesen, wie Sie Poetry installieren und verwenden.

Ich erstelle zunächst das Paket mit:

poetry new oeis
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch wird ein Ordner namens oeis erstellt, der die Konfigurationsdatei der Poetry, einen Testordner und einen Ordner namens oeis enthält, der das Stammverzeichnis unseres Projekts sein wird.

Ich werde außerdem ein optionales Paket namens Click hinzufügen, das beim Erstellen von CLI-Tools hilft. Dies ist nicht erforderlich und kann durch andere native Tools von Python ersetzt werden, wenn auch weniger elegant.

Führen Sie im Projektordner Folgendes aus:

poetry add click
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch wird Click als Abhängigkeit zu unserem Projekt hinzugefügt.

Jetzt können wir zu unserer Einstiegspunktdatei wechseln. Wenn Sie den Ordner oeis/oeis öffnen, sehen Sie, dass dort bereits eine __init__.py-Datei vorhanden ist. Aktualisieren wir es, um Click zu importieren, und eine Hauptfunktion, die mit dem Befehl aufgerufen werden soll:

# oeis/oeis/__init__.py

import click


@click.command()
def oeis():
    pass


if __name__ == "__main__":
    oeis()
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies ist der Ausgangspunkt unserer CLI. Sehen Sie den @click.command? Dies ist ein Wrapper von Click, der uns dabei hilft, oeis als Befehl zu definieren.

Denken Sie daran, dass wir die Zahlenfolge, getrennt durch ein Leerzeichen, empfangen müssen? Wir müssen dies als Argument hinzufügen. Click hat dafür eine Option:

oeis 1 1 2 3 5 7
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch wird ein Argument namens „sequence“ hinzugefügt, und die Option „nargs=-1“ weist an, dass es durch Leerzeichen getrennt wird. Ich habe einen Ausdruck hinzugefügt, damit wir testen können, ob das Argument korrekt übergeben wird.

Um Poetry mitzuteilen, dass wir einen Befehl haben, müssen wir pyproject.toml öffnen und die folgenden Zeilen hinzufügen:

Found 1096 results. Showing first five:
1. The prime numbers.
2. a(n) is the number of partitions of n (the partition numbers).
3. Prime numbers at the beginning of the 20th century (today 1 is no longer regarded as a prime).
4. Palindromic primes: prime numbers whose decimal expansion is a palindrome.
5. a(n) = floor(3^n / 2^n).
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hiermit wird ein Skript namens oeis hinzugefügt, das die oeis-Funktion im oeis-Modul aufruft. Jetzt führen wir Folgendes aus:

poetry new oeis
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Damit können wir das Skript aufrufen. Probieren wir es aus:

poetry add click
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Perfekt, wir haben den Befehl und die Argumente wie erwartet analysiert! Kommen wir zum Kunden. Erstellen Sie im Ordner „oeis/oeis“ einen Ordner namens „clients“, eine Datei namens „__init__.py“ und eine Datei namens „oeis_client.py“.

Wenn wir in diesem Projekt andere Clients erwarten würden, könnten wir eine Basis-Client-Klasse entwickeln, aber da wir nur diesen einzigen haben werden, könnte dies als Over-Engineering angesehen werden. In der OEIS-Client-Klasse sollten wir eine Basis-URL haben, also die URL ohne die Pfade, die wir zur Abfrage verwenden werden:

# oeis/oeis/__init__.py

import click


@click.command()
def oeis():
    pass


if __name__ == "__main__":
    oeis()
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie Sie sehen können, importieren wir das Anforderungspaket. Wir müssen es zu Poetry hinzufügen, bevor wir es verwenden können:

# oeis/oeis/__init__.py

import click


@click.command()
@click.argument("sequence", nargs=-1)
def oeis(sequence: tuple[str]):
    print(sequence)


if __name__ == "__main__":
    oeis()
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt hat der Client eine Basis-URL, die sich nicht ändert. Lassen Sie uns in die anderen Methoden eintauchen:

  • build_url_params
    • Empfangt die als Argument von der CLI übergebene Sequenz und wandelt sie in eine durch Komma getrennte Zahlenfolge um
    • Erstellt ein Diktat mit den Parametern, wobei q die Abfrage ist, die wir ausführen werden, und fmt das erwartete Ausgabeformat ist
    • Zuletzt geben wir die URL-codierte Version der Parameter zurück, was eine gute Möglichkeit ist, sicherzustellen, dass unsere Zeichenfolge mit URLs kompatibel ist
  • query_results
    • Empfangt die als Argument von der CLI übergebene Sequenz und erstellt die URL-codierten Parameter über die Methode build_url_params
    • Erstellt die vollständige URL, die zum Abfragen der Daten verwendet wird
    • Fahrt mit der Anfrage an die erstellte URL fort und löst jeden HTTP-Status aus, den wir nicht erwartet haben
    • Gibt die JSON-Daten zurück

Wir müssen auch unsere Hauptdatei aktualisieren, um diese Methode aufzurufen:

# oeis/pyproject.toml

[tool.poetry.scripts]
oeis = "oeis:oeis"
Nach dem Login kopieren
Nach dem Login kopieren

Hier erstellen wir jetzt eine Client-Instanz außerhalb der Methode, damit nicht jedes Mal, wenn der Befehl aufgerufen wird, eine Instanz erstellt wird, und rufen sie innerhalb des Befehls auf.

Dies führt zu einer sehr, sehr langen Antwort, da das OEIS Tausende von Einträgen hat. Da wir nur die Gesamtgröße und die fünf besten Einträge kennen müssen, können wir Folgendes tun:

poetry install
Nach dem Login kopieren

Das Laufen ist jetzt schon viel besser als zuvor. Wir drucken nun die Gesamtgröße und die fünf obersten Einträge (falls vorhanden) aus.

Aber das alles brauchen wir auch nicht. Lassen Sie uns einen Formatierer erstellen, um unsere Ausgabe korrekt zu formatieren. Erstellen Sie einen Ordner namens formatters, der eine __init__.py-Datei und eine oeis_formatter.py-Datei enthält.

oeis 1 1 2 3 5 7
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Datei formatiert im Wesentlichen die fünf besten Ergebnisse in das, was wir für die Ausgabe wünschen. Verwenden wir es in unserer Hauptdatei:

Found 1096 results. Showing first five:
1. The prime numbers.
2. a(n) is the number of partitions of n (the partition numbers).
3. Prime numbers at the beginning of the 20th century (today 1 is no longer regarded as a prime).
4. Palindromic primes: prime numbers whose decimal expansion is a palindrome.
5. a(n) = floor(3^n / 2^n).
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie diesen Code ausführen, erhalten Sie jetzt Folgendes:

poetry new oeis
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es kehrt jetzt mit dem von uns erwarteten Format zurück. Beachten Sie jedoch, dass dort angezeigt wird, dass 10 Ergebnisse gefunden wurden. Das ist falsch. Wenn Sie auf der OEIS-Website suchen, werden Sie feststellen, dass es viel mehr Ergebnisse gibt. Leider gab es ein Update der OEIS-API und das Ergebnis gibt keine Zählung mehr mit der Anzahl der Ergebnisse zurück. Diese Zahl wird jedoch weiterhin in der textformatierten Ausgabe angezeigt. Wir können damit wissen, wie viele Ergebnisse es gibt.

Dazu können wir die URL ändern, um fmt=text und einen regulären Ausdruck zu verwenden, um den gewünschten Wert zu finden. Aktualisieren wir den Client-Code, um die Textdaten abzurufen, und den Formatierer, um diese Daten zu verwenden, damit wir sie ausgeben können.

poetry add click
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie Sie sehen können, haben wir zwei neue Methoden hinzugefügt:

  • get_count
    • Erstellt die Parameter für die Text-API und übergibt sie an die Methode, die Regex verwendet, um die gesuchte Nummer zu finden
  • get_response_count
    • Verwendet den in der Klasseninitialisierung integrierten regulären Ausdruck, um eine Suche durchzuführen und die erste Gruppe abzurufen
# oeis/oeis/__init__.py

import click


@click.command()
def oeis():
    pass


if __name__ == "__main__":
    oeis()
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In dieser Datei haben wir nur einen neuen Parameter für die Methode hinzugefügt und ihn anstelle der Länge des Abfrageergebnisses verwendet.

# oeis/oeis/__init__.py

import click


@click.command()
@click.argument("sequence", nargs=-1)
def oeis(sequence: tuple[str]):
    print(sequence)


if __name__ == "__main__":
    oeis()
Nach dem Login kopieren
Nach dem Login kopieren

Hier rufen wir einfach die neue Methode auf dem Client auf und übergeben die Informationen an den Formatierer. Eine erneute Ausführung führt zu der erwarteten Ausgabe:

# oeis/pyproject.toml

[tool.poetry.scripts]
oeis = "oeis:oeis"
Nach dem Login kopieren
Nach dem Login kopieren

Der Code ist grundsätzlich fertig. Aber für eine echte Herausforderung denken Sie daran, nach Möglichkeit Git zu verwenden, kleine Commits durchzuführen und natürlich Unit-Tests, Code-Formatierungsbibliotheken, Typprüfer und alles, was Sie sonst noch für nötig halten, hinzuzufügen.

Viel Glück!

Das obige ist der detaillierte Inhalt vonVorstellungsgespräche für Softwareentwickler – #EIS CLI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage