Einführung

auf der Suche für einen Python-job? Wahrscheinlich müssen Sie beweisen, dass Sie mit Python arbeiten können. Hier sind ein paar Fragen, die eine breite Basis von Fähigkeiten abdecken, die mit Python verbunden sind. Der Fokus liegt auf der Sprache selbst und nicht auf einem bestimmten Paket oder Framework. Jede Frage wird mit einem geeigneten Tutorial verknüpft, falls vorhanden. Einige Fragen werden mehrere Themen umfassen.,

Ich habe nicht wirklich einen Interview-Test ganz so hart wie dieser gegeben worden,wenn Sie bequem zu den Antworten bekommen können, dann gehen Sie sich einen Job.

Was Ist Dieses Tutorial Nicht

Dieses tutorial ist nicht das Ziel, die für jeden verfügbar, der Arbeitskultur – verschiedene Arbeitgeber-wird Sie bitten, verschiedene Fragen in unterschiedlicher Weise; Sie Folgen unterschiedliche Konventionen; Sie schätzen verschiedene Dinge. Sie werden Sie auf verschiedene Arten testen., Einige Arbeitgeber werden Sie vor einen Computer setzen und Sie bitten, einfache Probleme zu lösen; Einige werden Sie vor einem weißen Brett aufstehen und ähnliches tun; Einige werden Ihnen einen Test mit nach Hause nehmen, um ihn zu lösen; Einige werden nur ein Gespräch mit Ihnen führen.

Der beste test für einen Programmierer ist eigentlich Programmierung. Dies ist eine schwierige Sache mit einem einfachen Tutorial zu testen. Stellen Sie also für Bonuspunkte sicher, dass Sie die in den Fragen gezeigte Funktionalität tatsächlich nutzen können., Wenn Sie tatsächlich verstehen, wie Sie gut genug zu den Antworten kommen, damit Sie die demonstrierten Konzepte tatsächlich nutzen können, gewinnen Sie.

In ähnlicher Weise ist der beste Test für einen Software-Ingenieur tatsächlich Engineering. In diesem Tutorial geht es um Python als Sprache. Die Möglichkeit, effiziente, effektive und wartbare Klassenhierarchien zur Lösung von Nischenproblemen zu entwerfen, ist großartig und wunderbar und eine Reihe von Fähigkeiten, die es wert sind, verfolgt zu werden, die jedoch weit über den Rahmen dieses Textes hinausgehen.

Eine andere Sache, die dieses Tutorial nicht ist, ist PEP8-konform., Dies ist beabsichtigt, da, wie bereits erwähnt, verschiedene Arbeitgeber unterschiedliche Konventionen befolgen werden. Sie müssen sich an die Kultur des Arbeitsplatzes anpassen. Weil Praktikabilität Reinheit schlägt.

Eine andere Sache, die dieses Tutorial nicht ist, ist prägnant. Ich möchte nicht nur Fragen und Antworten auf Sie werfen und hoffen, dass etwas klebt. Ich möchte, dass Sie es bekommen, oder zumindest gut genug bekommen, dass Sie in der Lage sind, selbst nach weiteren Erklärungen für Problemthemen zu suchen.

Möchten Sie Ihr technisches Interview ass? Planen Sie jetzt eine technische Interview-Übungssitzung mit einem Experten!,

Frage 1

Was ist Python wirklich? Sie können (und werden ermutigt) Vergleiche mit anderen Technologien in Ihrer Antwort

Antwort

Hier sind einige wichtige Punkte:

  • Python ist eine interpretierte Sprache. Das bedeutet, dass Python im Gegensatz zu Sprachen wie C und seinen Varianten nicht kompiliert werden muss, bevor es ausgeführt wird. Andere interpretierte Sprachen sind PHP und Ruby.

  • Python wird dynamisch typisiert, dies bedeutet, dass Sie die Variablentypen nicht angeben müssen, wenn Sie sie deklarieren oder ähnliches., Sie können Dinge wie x=111 und dann x="I'm a string" ohne Fehler

  • Python eignet sich gut für objektorientierte Programmierung, da es die Definition von Klassen zusammen mit Komposition und Vererbung ermöglicht. Python hat keine Zugriffsspezifizierer (wie C++’s public, private), die Begründung für diesen Punkt ist gegeben als „Wir sind alle Erwachsene hier“

  • In Python sind Funktionen erstklassige Objekte., Dies bedeutet, dass sie Variablen zugewiesen, von anderen Funktionen zurückgegeben und an Funktionen übergeben werden können. Klassen sind auch erstklassige Objekte

  • Das Schreiben von Python-Code ist schnell, aber das Ausführen ist oft langsamer als kompilierte Sprachen. Glücklicherweise erlaubt Python die Einbeziehung von C-basierten Erweiterungen, so dass Engpässe weg optimiert werden können und oft sind., Dasnumpy Paket ist ein gutes Beispiel dafür, es ist wirklich ziemlich schnell, weil ein Großteil der Anzahl Knirscht es nicht wirklich von Python

  • Python findet Verwendung in vielen Bereichen-Web-Anwendungen, Automatisierung, wissenschaftliche Modellierung, Big-Data-Anwendungen und vieles mehr. Es wird auch oft als „Klebecode“ verwendet, um andere Sprachen und Komponenten zum Spielen zu bringen.

  • Python macht schwierige Dinge einfach, sodass Programmierer sich eher auf das Überschreiben von Algorithmen und Strukturen als auf Details auf niedriger Ebene konzentrieren können.,

Warum Dies wichtig:

bewerben Sie sich für eine Python-position, sollten Sie wissen, was es ist und warum es so gosh-darn cool. Und warum ist es nicht o. O

Frage 2

Füllen Sie den fehlenden Code aus:

def print_directory_contents(sPath): """ This function takes the name of a directory and prints out the paths files within that directory as well as any files contained in contained directories. This function is similar to os.walk. Please don't use os.walk in your answer. We are interested in your ability to work with nested structures. """ fill_this_in

Antwort

Achten Sie besonders auf

  • Seien Sie konsistent mit Ihren Namenskonventionen. Wenn in einem Beispielcode eine Namenskonvention enthalten ist, halten Sie sich daran. Auch wenn es nicht die Namenskonvention ist, die Sie normalerweise verwenden
  • Rekursive Funktionen müssen rekursiv und beenden., Stellen Sie sicher, dass Sie verstehen, wie dies geschieht, damit Sie bodenlose Callstacks vermeiden
  • Wir verwenden das Modul os, um plattformübergreifend mit dem Betriebssystem zu interagieren. Man könnte sagen sChildPath = sPath + '/' + sChild aber das würde unter Windows nicht funktionieren
  • Die Vertrautheit mit Basispaketen lohnt sich wirklich, aber brechen Sie sich nicht den Kopf, wenn Sie versuchen, sich alles zu merken, Google ist Ihr Freund am Arbeitsplatz!
  • Stellen Sie Fragen, wenn Sie nicht verstehen, was der Code tun soll
  • KISS! Halte es einfach, dumm!,

Warum Dies wichtig:

  • Zeigt die Kenntnisse der Betriebs-system-Interaktion stuff
  • Rekursion ist nützlich, hella

Aufgabe 3

Blick auf den code unten, schreiben Sie die endgültigen Werte von A0, A1, …An.

Wenn Sie nicht wissen, was zip ist nicht stress aus. Kein vernünftiger Arbeitgeber wird erwarten, dass Sie sich die Standardbibliothek merken. Hier ist die Ausgabe von help(zip).

Wenn das keinen Sinn ergibt, nehmen Sie sich ein paar Minuten Zeit, um es herauszufinden, wie Sie es möchten.,

Antwort

Warum Diese Fragen

  1. List comprehension ist eine wunderbare Zeit sparen und eine große Hürde für viele Leute
  2. Wenn können Sie Sie Lesen, können Sie wahrscheinlich schreiben Sie Sie
  3. Einige der in diesem code gemacht wurde, bewusst komisch. Möglicherweise müssen Sie mit einigen seltsamen Leuten arbeiten

Frage 4

Python und Multithreading. Ist es eine gute Idee? Listen Sie einige Möglichkeiten auf, um Python-Code parallel auszuführen.

Antwort

Python erlaubt kein Multithreading im wahrsten Sinne des Wortes., Es hat ein Multithreading-Paket, aber wenn Sie Ihren Code mit mehreren Threads beschleunigen möchten, ist es normalerweise keine gute Idee, ihn zu verwenden. Python hat ein Konstrukt namens Global Interpreter Lock (GIL). Die GIL stellt sicher, dass nur einer Ihrer „Threads“ gleichzeitig ausgeführt werden kann. Ein Thread erwirbt die GIL, macht ein wenig Arbeit und leitet die GIL dann an den nächsten Thread weiter. Dies geschieht sehr schnell, sodass es für das menschliche Auge so aussieht, als würden Ihre Threads parallel ausgeführt, aber sie verwenden wirklich nur abwechselnd denselben CPU-Kern. All diese GIL-Passing fügt Overhead zur Ausführung hinzu., Dies bedeutet, dass die Verwendung des Threading-Pakets häufig keine gute Idee ist, wenn Sie Ihren Code schneller ausführen möchten.

Es gibt Gründe, Pythons Threading-Paket zu verwenden. Wenn Sie einige Dinge gleichzeitig ausführen möchten und Effizienz kein Problem darstellt, ist dies völlig in Ordnung und praktisch. Oder wenn Sie Code ausführen, der auf etwas warten muss (wie einige IO), könnte dies sehr sinnvoll sein. Mit der Threading-Bibliothek können Sie jedoch keine zusätzlichen CPU-Kerne verwenden.,

Multithreading kann an das Betriebssystem ausgelagert werden (durch Mehrfachverarbeitung), an eine externe Anwendung, die Ihren Python-Code aufruft (z. B. Spark oder Hadoop), oder an Code, den Ihr Python-Code aufruft (z. B. Sie könnten Ihren Python-Code eine C-Funktion aufrufen lassen, die das teure Multithread-Zeug ausführt).

Warum Diese Fragen

Da die GIL ist Ein a-Loch. Viele Leute verbringen viel Zeit damit, Engpässe in ihrem ausgefallenen Python-Multithread-Code zu finden, bevor sie lernen, was die GIL ist.,

Frage 5

Wie verfolgen Sie verschiedene Versionen Ihres Codes?

Antwort:

Versionskontrolle! An diesem Punkt sollten Sie aufgeregt handeln und ihnen sagen, wie Sie sogar Git (oder was auch immer Ihr Favorit ist) verwenden, um die Korrespondenz mit Oma zu verfolgen. Git ist mein bevorzugtes Versionskontrollsystem, aber es gibt andere, zum Beispiel Subversion.

Warum das wichtig ist:

Weil Code ohne Versionskontrolle wie Kaffee ohne Tasse ist., Manchmal müssen wir einmalige Wegwerfskripte schreiben, und das ist in Ordnung, aber wenn Sie mit einer erheblichen Menge an Code zu tun haben, wird ein Versionskontrollsystem ein Vorteil sein. Versionskontrolle hilft dabei, zu verfolgen, wer welche Änderungen an der Codebasis vorgenommen hat; herauszufinden, wann Fehler in den Code eingeführt wurden; Versionen und Releases Ihrer Software verfolgen; den Quellcode unter Teammitgliedern verteilen; Bereitstellung und bestimmte Automatisierungen. Es ermöglicht Ihnen, Ihren Code zurück zu rollen, bevor Sie es brach, die auf eigene Faust groß ist. Viel Zeug. Es ist einfach großartig.,

Frage 6

Was gibt dieser Code aus:

def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)

Antwort

Hu?

Der erste Funktionsaufruf sollte ziemlich offensichtlich sein, die Schleife hängt 0 und dann 1 an die leere Liste an, l. l ist ein Name für eine Variable, die auf eine im Speicher gespeicherte Liste verweist.
Der zweite Aufruf beginnt mit dem Erstellen einer neuen Liste in einem neuen Speicherblock. l verweist dann auf diese neue Liste. Anschließend werden 0, 1 und 4 an diese neue Liste angehängt. Das ist also großartig.,
Der dritte Funktionsaufruf ist der seltsame. Es verwendet die ursprüngliche Liste, die im ursprünglichen Speicherblock gespeichert ist. Deshalb beginnt es mit 0 und 1.

Probieren Sie dies aus, wenn Sie es nicht verstehen:

Frage 7

Was ist Affenpatching und ist es jemals eine gute Idee?

Antwort

Das Patchen von Affen ändert das Verhalten einer Funktion oder eines Objekts, nachdem es bereits definiert wurde. Zum Beispiel:

import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)

Die meiste Zeit ist es eine ziemlich schreckliche Idee – es ist normalerweise am besten, wenn die Dinge klar definiert sind. Ein Grund, Patch zu installieren, wäre das Testen., Das Mock-Paket ist zu diesem Zweck sehr nützlich.

Warum Diese Fragen

Es zeigt, dass Sie verstehen, ein wenig über Methoden in unit-Tests. Ihre Erwähnung der Affenvermeidung zeigt, dass Sie nicht zu den Codierern gehören, die ausgefallenen Code gegenüber wartbarem Code bevorzugen (sie sind da draußen und sie saugen daran, damit zu arbeiten). Erinnern Sie sich an das Prinzip des KUSSES? Und es zeigt, dass Sie ein wenig darüber wissen, wie Python auf einer niedrigeren Ebene funktioniert, wie Funktionen tatsächlich gespeichert und aufgerufen werden und dergleichen.

PS: Es lohnt sich wirklich, ein wenig über Mock zu lesen, wenn Sie es noch nicht getan haben. Es ist ziemlich nützlich.,

Frage 8

Was bedeutet dieses Zeug: *args, **kwargs? Und warum sollten wir es benutzen?

Antwort

Verwenden Sie *args wenn wir nicht sicher sind, wie viele Argumente an eine Funktion übergeben werden sollen oder wenn wir eine gespeicherte Liste oder ein Tupel von Argumenten an eine Funktion übergeben möchten. **kwargs wird verwendet, wenn wir nicht wissen, wie viele Schlüsselwortargumente an eine Funktion übergeben werden, oder es kann verwendet werden, um die Werte eines Wörterbuchs als Schlüsselwortargumente zu übergeben., Die Bezeichner args und kwargs sind eine Konvention, Sie könnten auch *bob und **billy aber das wäre nicht klug.

Hier ist eine kleine Illustration:

Warum kümmern?

Manchmal müssen wir eine unbekannte Anzahl von Argumenten oder Schlüsselwortargumenten an eine Funktion übergeben. Manchmal möchten wir Argumente oder Schlüsselwortargumente für die spätere Verwendung speichern. Manchmal ist es nur eine Zeitersparnis.,

Frage 9

Was bedeuten diese für Sie: @classmethod, @staticmethod, @property?

Hintergrundwissen beantworten

Dies sind Dekorateure. Ein Dekorator ist eine spezielle Art von Funktion, die entweder eine Funktion und eine Funktion zurückgibt oder eine Klasse und eine Klasse zurückgibt. Das@ Symbol ist nur syntaktischer Zucker, mit dem Sie etwas auf eine leicht lesbare Weise dekorieren können.,

@my_decoratordef my_func(stuff): do_things

Entspricht

def my_func(stuff): do_thingsmy_func = my_decorator(my_func)

Hier finden Sie ein Tutorial zur allgemeinen Funktionsweise von Dekorateuren.

Tatsächliche Antwort

Die Dekoratoren @classmethod, @staticmethod und @property werden für in Klassen definierte Funktionen verwendet. Hier ist, wie sie sich verhalten:

Frage 10

Betrachten Sie den folgenden Code, was wird er ausgeben?

Antwort

Die Ausgabe wird in den Kommentaren im folgenden Segment angegeben:

Warum kümmern wir uns?,

Da die OO-Programmierung ist wirklich, wirklich wichtig. Wirklich. Die Beantwortung dieser Frage zeigt Ihr Verständnis der Vererbung und der Verwendung der Funktion super von Python. Meistens spielt die Reihenfolge der Auflösung keine Rolle. Manchmal hängt es von Ihrer Anwendung ab.

Frage 11

Betrachten Sie den folgenden Code, was wird ausgegeben?

Antwort

oRoot.print_all_1() Druck:

oRoot.print_all_2() Druck:

Warum machen wir uns sorgen machen?

Weil Komposition und Objektkonstruktion das sind, worum es bei Objekten geht., Objekte bestehen aus Dingen und müssen irgendwie initialisiert werden. Dies bindet auch einige Dinge über Rekursion und Verwendung von Generatoren.

Generatoren sind großartig. Sie hätten eine ähnliche Funktionalität wie print_all_2 erreichen können, indem Sie einfach eine große lange Liste erstellen und dann den Inhalt drucken. Eines der schönen Dinge an Generatoren ist, dass sie nicht viel Platz im Speicher beanspruchen müssen.

Es ist auch erwähnenswert, dass print_all_1 den Baum zuerst in der Tiefe durchquert, während print_all_2 zuerst in der Breite ist., Stellen Sie sicher, dass Sie diese Begriffe verstehen. Manchmal ist eine Art von Durchquerung angemessener als die andere. Aber das hängt sehr stark von Ihrer Anwendung ab.

Frage 12

Beschreiben Sie Pythons Garbage Collection-Mechanismus kurz.

Antwort

Hier kann viel gesagt werden. Es gibt einige Hauptpunkte, die Sie erwähnen sollten:

  • Python verwaltet die Anzahl der Verweise auf jedes Objekt im Speicher., Wenn eine Referenzzählung auf Null geht, ist das zugehörige Objekt nicht mehr aktiv und der diesem Objekt zugewiesene Speicher kann für etwas anderes freigegeben werden
  • Gelegentlich passieren Dinge, die als „Referenzzyklen“ bezeichnet werden. Der Garbage Collector sucht regelmäßig nach diesen und bereinigt sie. Ein Beispiel wäre, wenn Sie zwei Objekte o1 und o2, so dass o1.x == o2 und o2.x == o1. Wenn o1 und o2 von nichts anderem referenziert werden, sollten sie nicht live sein., Aber jeder von ihnen hat eine Referenzanzahl von 1.
  • Bestimmte Heuristiken werden verwendet, um die Garbage Collection zu beschleunigen. Zum Beispiel sind kürzlich erstellte Objekte eher tot. Wenn Objekte erstellt werden, weist der Garbage Collector sie Generationen zu. Jedes Objekt erhält eine Generation, und jüngere Generationen werden zuerst behandelt.

Diese Erklärung ist CPython-spezifisch.

Frage 13

Platzieren Sie die folgenden Funktionen in der Reihenfolge ihrer Effizienz unten. Sie alle nehmen eine Liste von Zahlen zwischen 0 und 1 auf. Die Liste kann ziemlich lang sein., Eine Beispieleingabeliste wäre . Wie würden Sie beweisen, dass Ihre Antwort richtig ist?

Antwort

Am wenigsten effizient: f2, f1, f3. Um zu beweisen, dass dies der Fall ist, möchten Sie Ihren Code profilieren. Python hat ein schönes Profiling-Paket, das den Trick machen sollte.

import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')

Um der Fertigstellung willen, hier ist, was das obige Profil ausgibt:

Warum kümmern?

Das Auffinden und Vermeiden von Engpässen lohnt sich oft., Eine Menge Codierung für Effizienz kommt auf den gesunden Menschenverstand an – im obigen Beispiel ist es offensichtlich schneller, eine Liste zu sortieren, wenn es sich um eine kleinere Liste handelt, also wenn Sie die Wahl haben, vor einer Sortierung zu filtern, ist es oft eine gute Idee. Das weniger offensichtliche Zeug kann immer noch mit den richtigen Werkzeugen lokalisiert werden. Es ist gut, über diese Werkzeuge Bescheid zu wissen.

Frage 14

Etwas, an dem Sie versagt haben?

Falsche Antwort

Ich scheitere nie!

Warum Dies Wichtig Ist:

Zeigt, dass Sie in der Lage sind, Fehler zuzugeben und Verantwortung für Ihre Fehler und lernen Sie aus Ihren Fehlern., All diese Dinge sind verdammt wichtig, wenn Sie nützlich sein werden. Wenn Sie tatsächlich perfekt sind, dann schade, Sie müssen hier vielleicht kreativ werden.

Frage 15

haben Sie persönliche Projekte?

Wirklich?

Dies zeigt, dass Sie bereit sind, mehr zu tun, als das absolute minimum in Bezug auf halten Sie Ihre Fertigkeiten auf dem neuesten Stand. Wenn Sie an persönlichen Projekten und Codes außerhalb des Arbeitsplatzes arbeiten, sehen Arbeitgeber Sie eher als einen Vermögenswert, der wächst. Selbst wenn sie diese Frage nicht stellen, finde ich es nützlich, das Thema anzusprechen.,

Schlussfolgerung

Diese Fragen berührten absichtlich viele Themen. Und die Antworten waren absichtlich ausführlich. In einem Programmierinterview müssen Sie Ihr Verständnis demonstrieren, und wenn Sie es auf prägnante Weise tun können, dann tun Sie das auf jeden Fall. Ich habe versucht, in den Antworten genügend Informationen zu geben, damit Sie von ihnen eine Bedeutung gewinnen können, auch wenn Sie noch nie von einigen dieser Themen gehört hatten. Ich hoffe, Sie finden das nützlich bei Ihrer Jobsuche.

Hol sie dir Tiger.

Articles

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.