Tipps für Kandidaten eines Programmierers, der Interviews auf Facebook führt



Letztes Jahr habe ich unzählige Stunden damit verbracht, Kandidaten für verschiedene Positionen bei Facebook zu interviewen. Und da ich jetzt die Gelegenheit hatte, beide Seiten des Auswahlprozesses zu besuchen, möchte ich Ihnen helfen - Studenten, die versuchen, in ihr erstes Praktikum einzusteigen, erfahrenere Entwickler, die sich auf einen Wechsel zu einem anderen Unternehmen vorbereiten, oder solche, die in die Programmierung einsteigen möchten aus einem völlig anderen beruflichen Umfeld.

In diesem Artikel möchte ich die wichtigsten Lehren skizzieren, die ich aus der Erfahrung mit der Befragung von Programmierern auf Facebook gezogen habe. Ich hoffe, sie werfen ein Licht auf einige Merkmale dieses Prozesses, die sehr, sehr viele sehr anstrengende Nerven haben.

Format


Interviews für Programmierer finden in der Regel in Form eines Gesprächs statt und dauern 45 Minuten. Sie sollen Ihr Wissen über Datenstrukturen und Algorithmen testen. Praktikanten müssen normalerweise nur ein Interview durchlaufen, in dem sie ihre Fähigkeiten zum Schreiben von Code unter Beweis stellen. Übergeordnete Entwickler müssen wahrscheinlich an zwei oder drei Interviews zum Schreiben von Code teilnehmen, an einem oder zwei Interviews, in denen sie ihre Systemdesignfähigkeiten testen, sowie an einem separaten Meeting, um ihre persönlichen Qualitäten zu bewerten. Hier werde ich nur über Code-Interviews sprechen.

Kürzlich wurde ich gefragt: "Was ist, wenn ich nicht sofort eine Lösung für dieses Problem finden kann?" Ich antwortete: "Nun, wenn die Aufgabe richtig gewählt ist, sollten Sie sie nicht sofort finden." Ansonsten, worum geht es? Der Zweck des Interviews ist es zu verstehen, wie gut Sie programmieren können. Informationen, die diese Frage beantworten, werden im Facebook-Team als Signal bezeichnet. Der Interviewer versucht, das Beste aus ihm herauszuholen. Mit anderen Worten, wenn wir verstehen, dass Sie mit der vorgeschlagenen Aufgabe bereits vertraut sind, ist es unsere Verantwortung, Ihnen eine andere zu geben.

Wir müssen sehen, wie Sie mit Schwierigkeiten umgehen. Wenn Sie die Lösung zufällig direkt aus Cracking The Coding Interview auswendig können, wissen wir nichts über Ihre Fähigkeit, Probleme zu lösen.

Best Practices für Vorstellungsgespräche


Die besten der besten Kandidaten werden zur treibenden Kraft für das Interview - sie führen selbst ein Gespräch und brauchen den Mitarbeiter des Unternehmens praktisch nicht, um sie in die richtige Richtung zu lenken. In der Regel tun solche Programmierer aus einer Laune heraus, ohne von außen dazu aufgefordert zu werden, Folgendes:

  1. Stellen Sie klärende Fragen.
  2. Analysieren Sie Lösungsoptionen, ihre Vor- und Nachteile
  3. Codeentwurf
  4. Lösungsimplementierung anzeigen
  5. Testen Sie Ihre Lösung

Verwechseln Sie Initiative nicht mit Eile. Eine aktive Haltung bedeutet nicht, dass Sie sich sofort beeilen sollten, Code zu schreiben. Im Gegenteil, wenn Sie den Code in den ersten fünf Minuten des Gesprächs starten, kann dies den Eindruck erheblich ruinieren. Der erste Schritt zu einem brillanten Vorstellungsgespräch ist die kluge Klärung von Fragen.

Clever Fragen stellen

Bevor Sie eine Entscheidung treffen, müssen Sie das Problem gut verstehen. Ein paar durchdachte Verbesserungen können Ihre Erfolgschancen ernsthaft erhöhen. Hier einige zum Beispiel:

  • Muss dies ohne zusätzlichen Speicher erfolgen?
  • Auf welchen Input sollten wir uns konzentrieren?
  • Was ist wichtiger - Leistung oder geringer Speicherverbrauch?

Auf diese Weise können Sie sich auf das konzentrieren, was wirklich wichtig ist, und alles andere aus Ihrem Kopf bekommen. Zu wissen, woran Sie nicht denken können, ist nicht weniger wertvoll als zu wissen, dass besondere Aufmerksamkeit erforderlich ist.

Denk nicht nach

Sehr oft fügen Kandidaten selbst Spekulationen hinzu (Variablen sind nur positive Zahlen, Arrays können nicht leer sein, alle Eingabedaten sind sicher). Dies ist eine ernsthafte Glocke. Passen Sie die Bedingungen niemals so an, dass Sie bequemer eine Lösung finden. Fragen Sie.

"Gehen wir davon aus, dass alle Werte positiv sind?"

Nirgendwo ist es einfacher. Wenn sie ja sagen, ist das großartig. Es sind keine zusätzlichen Überprüfungen erforderlich. Wenn nicht, reicht eine einzige Bedingungsanweisung aus, um Ihren Code vor jeder Chance zu schützen. Oft können Sie mithilfe solcher Fragen einen Hinweis darauf erhalten, in welche Richtung Sie sich bewegen müssen.

Lösungsoptionen

Interviewer sind sehr angetan, wenn Kandidaten mehrere Lösungen hervorheben. Dies zeigt, dass Sie verstehen: Sie können jede Aufgabe aus verschiedenen Blickwinkeln angehen, und was noch wichtiger ist, es zwingt den Befragten, es Ihnen ohne direkte Anfragen von Ihnen zu sagen. Yeeee!

Wir können nicht einfach die richtige Antwort für Sie finden. Wenn Sie jedoch zwei Optionen vorschlagen, A und B, und fragen: „Welcher Ansatz ist Ihrer Meinung nach hier besser geeignet?“, Dann werden wir mit Sicherheit auswählen, was eher dem gewünschten entspricht.

Erstellen Sie Ihre Lösung in Codeform

Bei technischen Interviews ist meistens das Schreiben an die Tafel erforderlich. Dementsprechend funktioniert es nicht, Operatoren einzufügen, wann und wo immer sie wollen. Sie sollten eine gute Vorstellung davon haben, was Sie tun werden, bevor Sie mit dem Schreiben beginnen.

Atmen Sie tief ein und planen Sie Ihren Code. Es kann ein Codeentwurf sein, es kann ein Schema sein, die Hauptsache ist, dass Sie wissen, welche Datenstrukturen in ihnen verwendet werden und welche Variablen für Sie von Interesse sind. Ich denke, niemand möchte, dass das Ergebnis seiner Arbeit ungefähr so ​​aussieht:



Schreiben Sie die Implementierung

Zu diesem Zeitpunkt bleibt normalerweise alles stehen, obwohl dies auf gute Weise nicht der Fall sein sollte. Theoretisch ist die Implementierung der Lösung am einfachsten. Sie haben kluge Fragen gestellt, verschiedene Ansätze in Betracht gezogen, den Algorithmus durchdacht - alles, was bleibt, ist, alles zu malen. Vergessen Sie in der Zwischenzeit nicht ...

Kommunikation!

Sprich laut. Es ist ziemlich schwierig, Sie an den richtigen Punkt zu bringen, wenn ich überhaupt nicht weiß, was Sie denken. Wenn Sie Sie irgendwo am falschen Ort tragen, werde ich eingreifen. Wenn Sie sich in die richtige Richtung bewegen, werde ich Sie höchstwahrscheinlich nicht niederschlagen.

Es muss jedoch eine Einschränkung gemacht werden: Der persönliche Interviewstil entscheidet viel. Jemand greift aktiver in die Entscheidung ein, jemand bleibt lieber weg.

Testen

Seltsamerweise wird dieser Schritt am häufigsten vernachlässigt. Ich würde sagen, dass 98% der Entwickler, die an meinen Interviews teilgenommen haben, mehr auf die Überprüfung ihrer Entscheidungen achten sollten.

Zu Beginn des Interviews erhält der Kandidat in der Regel zusammen mit der Aufgabe eine Testoption. Nach Abschluss der Arbeit an der Lösung führen sie den Code durch den entsprechenden Test. Es gibt jedoch ein Problem: Wir bieten Ihnen die primitivste Testoption. Es wirkt sich in der Regel nicht auf Grenzfälle aus und ermöglicht es nicht, den Code ordnungsgemäß zu überprüfen. Mit diesen Parametern liefert Ihr Algorithmus die gewünschte Ausgabe, bei anderen möglicherweise nicht.

Der einfachste Weg, sich bei einem technischen Interview zu präsentieren, besteht darin, Tests zu schreiben. Je mehr desto besser. Je schwieriger desto besser. Je umfassender, desto besser. In den meisten Fällen können Sie so Fehler erkennen, bevor ich darauf hinweise. Und solche Dinge sprechen zu Ihren Gunsten.

Was tun, wenn Sie nicht wissen, was zu tun ist?


Was sollten Sie also tun, wenn Sie eine Aufgabe erhalten und nicht sofort eine Lösung finden können?
Fahren Sie schrittweise fort. Denken Sie daran: Vielleicht erscheint Ihnen die Aufgabe ähnlich wie die, die Sie zuvor gelöst haben. Viele der Aufgaben, die ich in den Interviews vorgeschlagen habe, waren grundlegende Aufgaben, die in allen Kursen, in denen Algorithmen und Datenstrukturen untersucht werden, zerlegt werden - jedoch mit einem Subvert.

Wenn Ihnen nichts einfällt, geraten Sie nicht in Panik. Alles ist gut. Machen Sie sich keine Sorgen, wenn Sie sofort versuchen, die effektivste Lösung zu finden - beginnen Sie mit der einfachsten. Denken Sie dann an einen Ausgangspunkt: Was sind die Engpässe hier? Was erfordert Optimierung am meisten? Wie kann dies optimiert werden?

Reduzieren Sie Systemschwächen mit Stärken der Datenstrukturen. Wenn Sie einen Algorithmus effizienter gestalten müssen, helfen Datenstrukturen häufig (wenn auch nicht immer). Jeder von ihnen hat seine eigenen Vor- und Nachteile (die Hash-Tabelle gibt die Geschwindigkeit der Datensuche an, der binäre Suchbaum sortiert sie usw.). Die besten Lösungen werden erzielt, wenn Sie aufgrund der Stärke der einen oder anderen Datenstruktur einen Engpass schließen können.

Nun, zum Beispiel haben Sie eine Aufgabe:

Berechnen Sie anhand eines Vorschlags, wie oft jeder Buchstabe des Alphabets darin vorkommt.

Wenn Sie die umfassende Suchmethode verwenden, müssen Sie jeden Buchstaben nacheinander zählen und die Daten dann zum Endergebnis zusammenfassen. Die Ineffizienz der Methode liegt in der Notwendigkeit, Informationen zu speichern und zu suchen: Wir speichern die Daten, die wir für jeden Brief erhalten haben, und extrahieren sie dann, um ein Gesamtergebnis zu erhalten. Wenn Sie sich die verfügbaren Datenstrukturen ansehen, werden Sie feststellen, dass sich eine in der von uns benötigten Weise von den anderen abhebt:

  • Binärer Suchbaum
  • Array
  • Hash-Tabelle
  • AVL-Baum
  • Stapel
  • Warteschlange

Die Hash-Tabelle speichert und ruft Daten am effektivsten ab. Wenn Sie es verwenden, müssen Sie den Vorschlag nicht sechsundzwanzig Mal analysieren - nur eines reicht aus.

Suchen Sie nach einem Hinweis


Oft wird ein Hinweis in Programmieraufgaben eingeführt, der den Weg zu einer bequemeren Lösung ebnet. Normalerweise ist dies eine Art Kleinigkeit, eine ungewöhnliche Bedingung, aufgrund derer Sie effizienter handeln können als mit anderen anfänglichen. Überprüfen Sie, ob Ihre Aufgabe so etwas enthält.

Sagen wir:

Bei zwei sortierten Arrays vom Typ Integer, A und B; es ist erforderlich, B von A zusammenzuführen. Es wird angenommen, dass A alle Elemente von B aufnehmen kann; Die Anzahl der initialisierten Elemente in Arrays beträgt m bzw. n.

Die Aufgabe stammt direkt aus dem Buch How To Crack the Coding Interview. Einen Hinweis bemerkt? Wir könnten nur zwei Arrays zum Zusammenführen erhalten, aber nein: In unserem Szenario ist eines vollständig im anderen platziert. Davon spreche ich. Wenn Sie solche Vorbehalte bemerken, beachten Sie, dass sie nicht versehentlich enthalten sind.

Hier bietet Ihnen der freie Speicherplatz die Möglichkeit, den Fusionsprozess zu optimieren. Die komplette Lösung finden Sie hier .

Bitten Sie um Hilfe


Manchmal kommt es vor, dass Sie alle Schritte durchlaufen haben, aber in einer Sackgasse geblieben sind. In diesem Fall müssen Sie nur die Interviewer um Hilfe bitten.

Durch die Tatsache, dass wir zehn Minuten lang still sitzen werden, wird es für niemanden einfacher. Wenn Sie ernsthaft keine Ahnung haben, was Sie tun sollen, ist es der beste Ausweg, nach Hinweisen zu fragen. Jeder von uns braucht von Zeit zu Zeit Tipps. Alles entscheidet darüber, wie Sie es verwenden können.

Abschließend


Ein technisches Interview ist der gleiche standardisierte Test wie der, den wir aus dem Abschluss und der Einschreibung an einer Universität kennen. Aufgaben unterscheiden sich in Details, aber die grundlegenden Konzepte und Lösungsstrategien bleiben mehr oder weniger Standard.

Viele Kandidaten sind von sehr einfachen Dingen abgeschnitten: Sie denken sich ihre eigenen Bedingungen aus, sprechen den Gedankengang nicht aus und testen ihre Entscheidung schlecht. All diese Fehler können korrigiert werden und "definitiv nicht" kann zu einem "Take" werden. Verwenden Sie das System, das ich in diesem Artikel skizziert habe, und Sie werden in guter Verfassung sein.

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


All Articles