Ein umfassender Überblick über Python-Interviews. Tipps & Tricks

Hallo allerseits!


Kurz über dich. Ich bin ein Mathematiker von Ausbildung, aber ein Programmierer von Beruf. Im Bereich Entwicklung seit 2006. Obwohl ich in der Schule angefangen habe, Programmieren zu studieren, habe ich angefangen, meine ersten Programme und Spiele in der Schule zu schreiben (ungefähr seit 2003). So kam es, dass ich in mehreren Sprachen lernen und arbeiten musste. Wenn Sie Universitätsvorlesungen zu C, C ++, BASIC, Pascal und Fortran nicht berücksichtigen, habe ich wirklich mit Delphi (mehr als 6 Jahre), PHP (mehr als 5 Jahre), Embedded (Atmel + PIC für ungefähr 2,5 Jahre) gearbeitet. und letztes Mal Python + ein bisschen Scala. Natürlich können Sie auch nicht auf Datenbanken verzichten.


Für wen ist dieser Artikel? Für alle, die wie ich einen anständigen, gut bezahlten Job mit einem interessanten Projekt, einem coolen Team und allerlei Leckereien für sich finden wollten (oder wollen). Und auch für diejenigen, die ihr Wissen und Können verbessern möchten.


Wie ist dieser Artikel entstanden? Nach 3 Wochen Interviews, Suchen, Studien, schlaflosen Nächten (ich habe oft mögliche Ereignisse in meinem Kopf durchlaufen, Antwortoptionen usw.) bekam ich viele Angebote. Die ersten beiden mussten abgelehnt werden, da die Frist für die Entscheidungsfindung abgelaufen war und ich auf Angebote anderer Ämter wartete. Infolgedessen nahm ich mir einen bestimmten Tag Zeit, um mich zu entscheiden, und wartete auf die Ergebnisse der aktuellen und vergangenen Interviews. Ehrlich gesagt war meine Wahl ziemlich kompliziert, weil die Optionen, zwischen denen ich mich entschied, im Allgemeinen sehr attraktiv waren. Im Allgemeinen habe ich beschlossen, die Entwicklungsrichtung und nicht die Bedingungen und das Projekt zu priorisieren. Selbst nachdem die Entscheidung (und der Vorschlag) getroffen worden waren, kamen andere weiter (aber für mich war es bereits unwichtig).


Vor jedem Interview habe ich diese Orte ziemlich gründlich vorbereitet + gezählt, die Antworten auf Fragen, die ich entweder nicht kannte oder an die ich mich nicht erinnerte oder die ich bis zum Ende nicht herausgefunden habe.


Ich schätzte Fragen, die wirklich mein Verständnis (oder Missverständnis) einiger grundlegender Konzepte zeigen könnten. Leider konnten solche Fragen an beiden Fingern gezählt werden.


Am Ende entschied ich, dass es sich lohnt, all diese Erfahrungen zu sammeln und mit anderen zu teilen.


Natürlich erschöpfen diese Fragen nicht das Wissen, das jeder erfahrene Entwickler haben sollte. Es scheint mir, dass einige Dinge in der Praxis sehr selten verwendet werden, um ständig danach zu fragen. Außerdem irre ich mich wahrscheinlich nicht, wenn ich sage, dass 90 +% der Fragen 10 bis 30 Sekunden lang auf elementare Weise gegoogelt werden.


Ich habe einige Fragen zu einer zusammengefasst - um Zeit und Platz zu sparen.
Auch am Ende des Artikels werde ich Links geben, die mir am interessantesten erschienen.


Inhalt


Allgemeine Theorie
  • Die erste Frage in den meisten Interviews lautet: "Was ist FEST?" Ehrlich gesagt konnte ich mich nie an die vollständige Entschlüsselung dieser Abkürzung erinnern, also erklärte ich sie entweder in meinen eigenen Worten oder bat meinen Gesprächspartner, mindestens englische Namen vorzuschlagen, und dann kann ich sie entschlüsseln. Zuerst schien es mir, dass der Gesprächspartner mich verstehen und eine solche Variante von Antworten akzeptieren würde, aber aus irgendeinem Grund entschieden die Jungs in zwei Fällen, dass ich die Antwort auf diese Frage nicht kannte (ich sollte dies besser nicht weiter kommentieren (ein wenig Rubel)). Persönlich habe ich einmal Dependency Injection mit Dependency Inversion verwechselt.


  • Die zweite typische Frage: "Was ist REST?" und dann nach "Was ist Restfull?" oder "Was sind die Grundbedingungen."
    Sie können Ihre Antwort finden. Ich persönlich bevorzuge diese Option .


  • Was ist HTTP? Welche Methoden hat er?


  • Welche HTTP-Methoden sind idempotent und welche nicht?


  • Ich mochte eine Frage zu HTTP, die mir in der Praxis noch nie begegnet war und die ich daher nicht kannte. Angenommen, Sie haben eine ziemlich große Liste von URL-Seiten (z. B. Audio oder Video), die auf die Festplatte heruntergeladen werden müssen. Für jeden von ihnen müssen Sie jedoch überprüfen, ob auf dem Computer genügend Speicherplatz für diese Dateien vorhanden ist. Wie benutzt man HTTP (welche Methoden)?
    Die richtige Antwort ist die HEAD-Methode (lesen Sie darüber). Persönlich gab ich eine Antwort, von der der Gesprächspartner nicht einmal gehört (oder vergessen) hatte, und eine schnelle Suche zeigte, dass ich auch Recht hatte (als Option). Ich gab an, dass ich die GET-Methode verwenden würde, aber um nicht die gesamte Datei herunterzuladen, würde ich den Range-Parameter mit einem minimalen Schritt angeben. Dies funktioniert zwar nur, wenn der Server in der Antwort einen Parameter "Accept-Ranges" ungleich Null sendet. Ich schreibe dies auf die Tatsache, dass diese Frage nur zeigt, ob ich mit einer solchen Aufgabe gearbeitet habe oder nicht. Eine zweite Suche gibt eine vollständige Antwort.


  • Was ist der Unterschied zwischen Authentifizierung und Autorisierung? Ehrlich gesagt stellte ich sofort eine rhetorische Frage: "Warum haben Sie einen anderen Ausweis verpasst?". Auf diese Weise habe ich sorgfältig versucht, dem Gesprächspartner klar zu machen, dass ich mir dieser Probleme bewusst war.


  • Was ist der Unterschied zwischen HTTP und HTTPS?


  • Was ist ein CSRF-Token?


  • Welche Datenformate kennen Sie außer JSON, XML?
    Es gibt zu viele von ihnen, daher werde ich nicht auf eine bestimmte Liste beschränkt sein.


  • Was ist SOAP?
    Verrückte Frage. Ich mag diese nicht. Warum fragen, was einmal in nie oder schon gar nicht in meinem Projekt verwendet wird?


  • Welche Designmuster kennen Sie?
    Google hilft dir;)


  • Bei einem der Interviews zur Entwicklung auf niedriger Ebene wurde viel nach Algorithmen gefragt.
    Im Allgemeinen ist es wünschenswert, bei der Beurteilung der Komplexität von Algorithmen zumindest grob zu verstehen, was O-Big ist. Es ist wahrscheinlich auch wünschenswert, die grundlegenden Algorithmen zu kennen: einfache Suche, binäre Suche, Sortieren, schnelles Sortieren, Arbeiten mit Bäumen (Durchqueren von Breite und Tiefe). Ein Bekannter riet mir, das wundervolle Buch "Grokay-Algorithmen. Aditya Bhargava" zu lesen. Ich hätte nicht gedacht, dass es möglich ist, ziemlich komplizierte Dinge so schön und einfach zu erklären. Es wird in einem Atemzug gelesen (ehrlich)! Ich kann es jedem empfehlen, der sich wie ich nicht als Algorithmusist betrachtet. Nur keine Worte!



Python
  • Was ist PEP8? Wie fühlst du dich mit ihm?


  • Welche Programmiermuster kennen Sie und wie können sie implementiert werden?


  • Welche Möglichkeiten gibt es, um die Singleton-Vorlage in Python zu implementieren?
    Ich rate Ihnen auch, die Nachteile der Implementierung durch den Dekorateur zu verstehen (insbesondere zum Testen). Der eleganteste und vielseitigste Weg natürlich durch Metaklassen.


  • Dekorateure.
    Ich denke, es wird nützlich sein zu lesen und zu verstehen:



  • Wie implementiert Python öffentliche, private und statische Methoden?


  • Was sind Metaklassen?
    Ich rate Ihnen, dies oder jenes vollständig zu lesen.


  • Sie haben nicht gefragt, aber ich empfehle, über die grundlegenden Unterschiede zwischen der 2. und 3. Version (mindestens 2.7 und 3.4) zu lesen.


  • Was ist neu ()? Und wie unterscheidet es sich von init ()? In welcher Reihenfolge werden sie ausgeführt?


  • Welche Programme kennen Sie zur Überprüfung des Codestils? Was sind die Vor- und Nachteile von ihnen?
    Persönlich habe ich mit Pylint, Pychecker gearbeitet, aber ich habe drei Hauptnamen genannt: Pychecker, Pylint, Pyflakes, weil ich vorher darüber gelesen hatte =) Übrigens, hier ist die neueste Version, in der die Tools zur Analyse von Python-Code beschrieben sind .


  • Wie testest du den Code? Was ist Spott?
    Persönlich benutze ich Gift, Unittest, Nase oder beobachte, was Travis sagt. Über Mock Google besser.


  • In Bezug auf die Tests mochte ich die folgenden Fragen:


    • Was tun, wenn die zu testende Funktion eine Remoteverbindung zu externen Diensten verwendet, bei der manchmal ein Timeout-Fehler 404 und dergleichen auftritt?
    • Was ist, wenn die zu testende Funktion viel Zeit benötigt, um darin wiederholte Operationen auszuführen? Zum Beispiel ist innerhalb des Zyklus von 1..1000000, wo etwas gelesen, geschrieben, berechnet wird.
      Ich rate Ihnen, über das Patchen zu lesen.

  • Was wissen Sie über Datenstrukturen in Python? Welche sind veränderlich / unveränderlich?
    Persönlich weiß ich jetzt, dass es viele von ihnen gibt. Lesen Sie zusätzlich zu den typischen (Diktat, Liste, Satz, Tupel) auch Informationen zu Frozen_Set, Standard_Dikt, Bestellt_Dikt (es ist für neue Versionen nicht mehr relevant) und was sonst noch im Büro sein wird. Dock (ja, fangen Sie damit an).


  • Wie funktioniert eine Hash-Tabelle (Wörterbuch)? Was sind Kollisionen und wie geht man damit um?
    Ich denke, dass es für hohe Positionen sinnvoll ist, dies zu wissen.


  • Wo wird die Suche schneller sein und wo ist die Suche und warum: diktieren, auflisten, setzen, tupeln?


  • Wie werden Argumentwerte an eine Funktion oder Methode übergeben?


  • Was ist ein Generator? Wie unterscheidet es sich von einem Iterator?
    Es gibt kürzere Artikel, aber mir hat dieser gefallen. Es gibt viele Dinge, die in kurzen Stackoverflow-Antworten nicht vollständig offenbart werden können.


  • Was ist Listen- / Diktatverständnis?


  • Ich kann keine bestimmte Frage formulieren, daher empfehle ich Ihnen, etwas über Selbstbeobachtung zu lesen (mit dir (), dir , hasattr (), getattr ()) und Name Mangling.


  • Was ist der Unterschied zwischen einfachen (_) und doppelten (__) Unterstrichen?
    Eine ausführliche Antwort finden Sie hier .


  • Was ist eine GIL? Welche Probleme hat er?


  • Was ist MRO? Was ist der Unterschied zwischen MRO2 und MR3 (Diamantproblem)?
    Starten Sie Google und Sie selbst werden alles verstehen.


  • Was ist und was ist der Unterschied zwischen Klassen im alten und neuen Stil?


  • Was weißt du über Threading? Threading vs Multiprocessing?
    Ich rate Ihnen, es selbst zu lesen und zu versuchen - http://effbot.org/zone/thread-synchronization.htm . Der Artikel ist etwas alt, aber er gibt ein gutes Verständnis.


  • Hast du mit asyncio gearbeitet? Was ist seine Funktion?
    Ich empfehle, Artikel über asynchrones Python zu lesen und es selbst zu fühlen.


  • Was ist Garbage Collector (GC)? Was sind ihre Vor- und Nachteile?
    Ich denke, alles, was für eine Antwort benötigt wird, wird hier beschrieben.


  • Warum brauchst du Sellerie?


  • Was ist asynchron / warten, wofür sind sie da und wie werden sie verwendet?


  • Es gibt eine Funktion:


    def f(sum, l=[]): l.append(sum) print(l) 

    Was wird auf dem Bildschirm angezeigt:


     l = [1] f(10) // [10] f(10) // [10, 10] f(10, l) // [1, 10] f(10) // [10, 10, 10] print(l) // [1, 10] 


Django / Flasche
  • Wie funktioniert der Serializer im Django REST Framework?
  • Wofür ist Meta im Serializer verantwortlich?
  • Was ist der Leistungsunterschied zwischen Django und Flask (und warum)?
  • Was ist der Zweck dieser Frameworks?
  • Wie funktioniert die Authentifizierung in Django?
  • Wie behandelt (und generiert) Django CSRF-Token?

Frontend
  • Was sind Cookies? Warum sind sie, wie arbeiten sie mit ihnen und wo werden sie aufbewahrt?
  • Kann ein Server Cookies ändern (hinzufügen, löschen)?
  • Was ist JWT (JSON Web Token)?

SDLC
  • Agile \ scrum: alles was Sie wissen müssen
  • Was ist der Unterschied zwischen CI und CD? Für diejenigen im Tank: CI - kontinuierliche Integration, CD - kontinuierliche Lieferung
  • Was ist der Unterschied zwischen Scrum und Kanban?
  • Welche Arten von Tests kennen Sie?
    Google beiseite: Unit-Tests, Integrationstests, Abnahmetests usw.
  • Frage an die Teamleiter (höchstwahrscheinlich): Was werden Sie tun, wenn es keine Tests für das Projekt gibt und der Kunde keine Zeit und kein Geld für seine Entwicklung aufwenden möchte?
    Persönlich appelliere ich an die Rentabilität für das Geschäft des Kunden.
  • Was ist Code Debt und wie geht man damit um (leben, lieben, kämpfen)?

Git, Versionierung, Refactoring
  • Welche Versionskontrollsysteme kennen Sie (verwenden)?
  • Was ist Git Flow?
    Ich rate Ihnen, es einfach zu lesen , da dies eine dokumentierte Sache ist.
  • Was ist Git Rebase?
  • Was ist ein Git Cherry Pick?
  • Welche Tools verwenden Sie für die Codeüberprüfung?
    Persönlich bin ich ein Fan des Github-Webclients (er ist voller interessanter und praktischer Extras). Aber mein Gesprächspartner entschied, dass ich eine Klette war und gab mir ein Minus. Ich habe zu Hause gegoogelt und festgestellt, dass es eine Menge spezialisierter Software gibt, die zu ähnlich ist wie die, die ich seit mehr als 3 Jahren verwendet habe. Software als Software - für einen Amateur.
    P.S. Ich mochte diesen Moment nicht, da ich lange genug Erfahrung mit der Codeüberprüfung hatte + ich ständig Commits von 500 bis 3000 Längenänderungen lesen musste (ja, bei einem meiner Hauptprojekte waren solche Commits normal), und die Leute entschieden das seitdem Ich kenne keine anderen Dienstprogramme - es bedeutet Klette.
  • Was ist Zwangsschub?
  • Was ist eine Vorabprüfung?
  • Was ist Code-Kohäsion und Code-Kopplung?

Datenbanken

Zu meiner Überraschung schienen mir die Fragen zu diesem Thema zu einfach (genau wie für die Schule), außer buchstäblich 2-3.


  • Was ist eine Transaktion? Welche Eigenschaften hat sie?
  • Was sind Transaktionsisolationsstufen? Wie sind sie?
    Ich rate Ihnen, dies sorgfältig zu lesen, da dies grundlegende Dinge sind .
  • Was sind verschachtelte Transaktionen?
  • Was ist ein Cursor und warum wird er benötigt?
  • Was ist der Unterschied zwischen PostgreSQL und MySQL?
  • Was ist VACUUM in PostgreSQL?
  • Was ist EXPLAIN? Was ist der Unterschied zwischen EXPLAIN ANALYZE?

Big Data

Leider erinnerte ich mich an einige Fragen, da meine bisherigen Erfahrungen in der Softwareentwicklung und im Umgang mit Datenbanken für meinen Gesprächspartner wichtig waren (ich finde das sehr klug).


  • Was ist Hadoop? ... und HDFS?
  • Was ist MapReduce und wie funktioniert es?
  • Ist es möglich, viele Mapper und Reducer zu erstellen (oder deren Anzahl anzugeben)?
  • Was ist der Unterschied zwischen Hive und HBase?
  • Ist es möglich, einen Index in HBase zu erstellen?
  • Was ist Aufteilung?
  • Was ist der Unterschied zwischen Aufteilung und Verschmelzung?
    Sehr einfach und erschwinglich hier beschrieben.
  • Was ist eine Meisterwahl in Zookeeper?

Die Aufgaben

Überraschenderweise wurde ich nur bei einem von einem Dutzend Interviews gebeten, Code zu schreiben. Wahrscheinlich, weil alle anderen den Code nach dem theoretischen Teil überprüfen wollten. Und da die Interviews mindestens eine Stunde dauerten (die längste - drei Stunden!) Und alle Fragen nie gestellt wurden, hatten die Jungs einfach physisch keine Zeit, den Code zu überprüfen.
Neben dem Üben werde ich nichts anderes raten.


  1. Es gibt eine Datei, die Wörter enthält, die durch ein Leerzeichen getrennt sind. Zum Beispiel: "abba com Mutter Rechnung Mutter com abba Hund abba Mutter com". Es ist notwendig, die drei Wörter zu finden und abzuleiten, die am häufigsten zusammen vorkommen (Reihenfolge spielt keine Rolle). Das heißt, in meinem Beispiel sind die drei Wörter "abba com Mutter", "com Mutter Rechnung", "Mutter Rechnung Mutter" usw. Die richtige Antwort sollte "abba com mom" sein (Häufigkeit - 3 mal).
  2. Schreiben Sie eine Funktion, um den Baum in der Tiefe (in der Breite) zu durchlaufen.
    Damit Sie keine Zeit verschwenden - ich werde einen Link geben, bei dem beide Funktionen sehr schön und einfach sind.
    Es gab noch eine andere einfache Aufgabe: einen Generator zu schreiben.

Fragen und Links von mir

Für allgemeine Bildungszwecke lohnt es sich, die folgenden Artikel zu lesen:


  • "Python-Interviewfragen." Ich habe verschiedene gelesen, aber aus irgendeinem Grund habe ich nur diese beiden zu den Lesezeichen hinzugefügt - 1 und 2 . Aber ich rate Ihnen, mehr zu googeln.
  • Likbez über das Tippen in Programmiersprachen .
  • Es ist schade, dass es bei der Diskussion der Datenbanken keine Fragen zum CAP-Theorem gab. Hier erfahren Sie mehr.
  • Ich weiß nicht, warum das Thema Microservices nicht angesprochen wurde. Ich kann nur davon ausgehen, dass diejenigen, die mich interviewt haben, wenig mit ihnen gearbeitet oder ihnen gebührende Aufmerksamkeit geschenkt haben. Wenn Sie jedoch interessiert sind, finden Sie hier einen guten Artikel .
  • Zu meiner Überraschung stellte auch niemand Fragen zu Virtualisierung, Docker, Containern und Kubernetes. Ich rate Ihnen, sich zumindest mit dem Docker zu befassen, da es jetzt viele einfache Schritt-für-Schritt-Anleitungen mit Erklärungen gibt.
  • Super nützliche Python-Links .
  • Zen Python in den Beispielen .
  • Ich denke, jeder, der mit Python arbeitet, sollte über coole Innovationen Bescheid wissen.
  • Nur wenige der Gesprächspartner wussten von den Wörterbüchern in Python, die der Co-Autor selbst hier erzählt.
  • Niemand fragte nach Lambda in Python, aber es ist besser zu verstehen, was es ist und womit es gegessen wird.
  • Typen und Tricks in Python. Der Artikel ist alt, aber die meisten "Tricks" sind jetzt relevant.
  • Übrigens für Pythonliebhaber - eine Zusammenfassung der neuesten Nachrichten und anderer Materialien .
  • Auf der Vorderseite empfehle ich Ihnen, einen kurzen Vortrag über die Ereignisschleife in JavaScript zu lesen. Ich glaube nicht, dass Sie wissen, wie es wirklich funktioniert. Ich kann es nur empfehlen .
  • In Bezug auf die Serverseite ist es ratsam, den Unterschied zwischen Nginx und Apache zu verstehen. Das Internet ist voller Artikel. Wenn es wirklich interessant ist, was ist der Unterschied unter der Haube - hier ist ein Artikel mit Beispielen .

Ratschläge für alle, die wirklich Meister werden wollen - seien Sie nicht faul, den Code in der Konsole zu wiederholen (egal ob Python, DB oder andere Dinge). NICHT kopieren, nämlich wiederholen. Dies bedeutet natürlich neues Material und nicht das, das Sie schon lange blind geschrieben haben.


Tatsächlich gab es 3-4 mal mehr Fragen. Etwas ist vergessen. Aber ich habe die wichtigsten mitgebracht.


Sie haben wahrscheinlich bemerkt, dass es auf der Vorderseite praktisch keine Fragen gab. Das liegt daran, dass wir entweder keine Zeit hatten, sie zu erreichen, oder dass es so wenige gab, dass ich sie vergessen habe.


Hier finden Sie übrigens eine gute Kompetenzmatrix in verschiedenen Bereichen der IT. Wenn Sie die Möglichkeit haben, ein Interview zu führen, empfehle ich Ihnen, zumindest zu verstehen, was Sie fragen müssen und auf welcher Ebene, und nicht alle unter derselben Leiste zu rudern (wie dies jetzt häufig der Fall ist) - es haben sich zu viele verschiedene Bereiche angesammelt. Persönlich verstehe ich nicht, warum ich vom Senior-Front-End ein hervorragendes Verständnis der Datenbank oder vom Senior-Back-End ein tiefes Verständnis der Browser-Engine oder der Interaktion der Ereignisschleife mit dem Browser-Renderer oder vom Tester verlangen muss - die Fähigkeit, den kürzesten Weg in ausgewogener Weise zu finden Grafik usw. Wenn Sie sich diese Matrix ansehen, verstehen Sie hoffentlich, was ich meine.


Ich wünsche allen, die sich für eine Konsolidierung entscheiden und anderen ihr Wissen demonstrieren, viel Erfolg, um ein gutes interessantes Angebot zu erhalten!


UPD:
Hier können Sie das Interview üben, wenn 4to - pramp.com. Danke an non_smile für den Link.

Source: https://habr.com/ru/post/de439576/


All Articles