Ich schreibe über die Wahrheit, nicht über Tipps und Tricks
Aktualisierung: Nachdem ich den unten geschriebenen Ratschlägen gefolgt bin, habe ich Angebote von Google, Microsoft, Amazon, Quantcast und Bloomberg erhalten.
Dies ist ein umfassender Leitfaden, der alles enthält, was Sie über das Coding-Interview wissen müssen. Er erklärt gründlich, was man lernen muss, wie man lernt und vor allem, wie man die Lösung während des Interviews präsentiert.
Wenn Sie das Coding Interview bestehen wollen, haben Sie den richtigen Artikel gefunden. Nachdem du diesen Artikel gelesen hast, bist du vielleicht versucht, nach anderen Artikeln zum gleichen Thema zu suchen, denn „vielleicht finde ich noch mehr Tipps und Tricks, die mir helfen“.
Hör auf, nach Tipps und Tricks zu suchen, das ist es, was dich von deinem Traumjob fernhält.
Es gibt keine Tipps und Tricks, um diesen Job zu bekommen. Es ist nur harte Arbeit, Punkt. Wenn du also wirklich das Vorstellungsgespräch gewinnen willst, dann übe, nachdem du diesen Artikel gelesen hast.
Der Artikel besteht aus drei Teilen & drei Videos und man braucht etwa 30 Minuten, um ihn zu lesen.
- Was ist ein Vorstellungsgespräch für Programmierer?
- Wie bereitet man sich auf ein Vorstellungsgespräch für Programmierer vor?
- Wie gibt man sein Bestes beim Vorstellungsgespräch für Programmierer?
Zunächst möchte ich mich vorstellen, damit Sie wissen, dass ich weiß, wovon ich spreche.
Mein Name ist Andrei und ich bin seit fünf Jahren Wettkampfprogrammierer. Ich habe am Weltfinale von Google HashCode teilgenommen, dem größten von Google organisierten Algorithmenwettbewerb, und davor habe ich drei Goldmedaillen bei der Computerolympiade in Rumänien gewonnen. Mit dieser Erfahrung habe ich den Online-Kurs „Einführung in Algorithmen und Datenstrukturen in C++“ veröffentlicht, der mehr als 8000 Studenten aus 135 Ländern bei ihren ersten Schritten in diesem Bereich geholfen hat.
Jetzt studiere ich Informatik am University College London und entwickle einen Kurs, der Studenten und jungen Berufstätigen dabei helfen soll, sich auf das Vorstellungsgespräch in großen Technologieunternehmen vorzubereiten. Daher möchte ich in diesem Artikel meine Erfahrungen mit dem Coding-Interview teilen und dir den einfachsten Weg zeigen, wie du es bestehen kannst. Du kannst mich hier erreichen.
Lass mich dir eine Frage stellen: Hast du jemals davon geträumt, in einem großen Technologieunternehmen wie Microsoft zu arbeiten? Wenn ja, dann sind Sie sicher, dass die meisten von uns das auch getan haben. Und weil die Nachfrage nach ein paar Dutzend Stellen so groß ist, brauchen sie eine Möglichkeit, um zu sehen, welche Bewerber besser vorbereitet sind.
Bevor Sie zu einem Vorstellungsgespräch eingeladen werden, müssen Sie sich auf die Stelle bewerben und einen Lebenslauf vorlegen, der unter den anderen glänzt. In diesem Artikel spreche ich über das eigentliche Coding-Interview und darüber, wie Sie sich darauf vorbereiten können, und nicht über den Bewerbungsprozess für die Stelle.
Bei den meisten Tech-Unternehmen besteht das Coding-Interview aus Algorithmen & Datenstrukturproblemen. Stellen Sie sich diese Fragen als Problemlösungsfragen vor, bei denen der Interviewer Ihre Fähigkeit beurteilen will, ein Problem zu lösen, das Sie noch nie gesehen haben. Ein Vorstellungsgespräch dauert etwa 45 Minuten, und Ihnen werden ein oder zwei Codierungsprobleme gestellt. Der Interviewer erwartet von Ihnen, dass Sie die optimale Lösung finden, sie kodieren und erklären, was Sie gerade kodiert haben.
Zuletzt haben Sie die Möglichkeit, ihm einige Fragen über das Unternehmen oder alles, was Sie interessiert, zu stellen. Auf all diese Schritte werden wir im letzten Teil dieses Artikels ausführlich eingehen.
Wie bereitet man sich auf das Vorstellungsgespräch vor?
Ich möchte Ihnen von Anfang an klar machen, dass es keine Abkürzung oder einen Trick gibt, um das Gespräch zu bestehen. Der einzige Weg, optimale Lösungen für algorithmische Probleme zu finden, besteht darin, zu üben und so viele Probleme wie möglich zu lösen.
In zwei Worten: Es ist harte Arbeit.
Das mag Ihnen vielleicht nicht gefallen und Sie suchen woanders nach einem Trick, um zu verstehen, wie man Interviewfragen löst, aber den gibt es nicht. Wenn es einen solchen Trick gäbe, warum würde ihn dann nicht jeder anwenden und das Vorstellungsgespräch bestehen?
Sie müssen also verstehen, dass die einzige Variable für das Bestehen des Vorstellungsgesprächs darin besteht, wie viel Sie vorher geübt haben. Ihre Erfahrung, Ihre Intelligenz und alles andere ist bereits festgelegt. Daher wird die Zeit, die Sie für das Üben aufwenden, den Unterschied zwischen den Bewerbern ausmachen, die bestehen und die nicht bestehen.
Das Vorstellungsgespräch ist ein Kampf mit sich selbst, und die einzige Möglichkeit, ihn zu gewinnen, ist, viel zu üben.
Der erste Schritt besteht darin, sich mit einer gängigen Programmiersprache wie C/C++, Java oder Python vertraut zu machen. Einige Unternehmen akzeptieren auch andere Sprachen, aber die große Mehrheit hält sich an diese drei Sprachen. Wählen Sie die Sprache, die Ihnen am besten gefällt, und bleiben Sie dabei. Entscheiden Sie nicht auf halber Strecke der Vorbereitung, dass Sie die Sprache wechseln wollen! Für den Rest des Artikels gehe ich davon aus, dass Sie sich für eine Sprache entschieden haben und deren Syntax gut kennen.
Nun geht es im Vorstellungsgespräch für Programmiersprachen normalerweise um Algorithmen und Datenstrukturen. Dazu gehören einige grundlegende Themen, die Sie gründlich verstehen müssen, und Sie sollten nicht einmal in Erwägung ziehen, zum Vorstellungsgespräch zu gehen, wenn Sie sich damit nicht auskennen.
Unten finden Sie eine Liste der Algorithmen und Datenstrukturen, die Sie kennen müssen. Ich habe sie in der Reihenfolge ihrer Wichtigkeit aufgeschrieben, und das ist der beste Lernweg.
1) Big-O-Komplexität: Sie ist ein Muss und bildet die Grundlage für Ihr algorithmisches Denken. Verstehen Sie, was es bedeutet, und kommen Sie zu dem Punkt, an dem Sie die Komplexität eines grundlegenden Algorithmus allein durch Anschauen bestimmen können.
2) Arrays: An dieser Stelle sollten Sie mit dem Konzept von Arrays vertraut sein. Dieses Thema bezieht sich auf Probleme, bei denen das Array nur zur Speicherung verwendet wird und die Lösung grundlegende Techniken beinhaltet, wie z.B. die Iteration mit zwei Zeigern. Ein klassisches Problem ist die Prüfung, ob ein gegebenes Array eine Permutation ist.
3) Strings: Sie sollten wissen, wie Sie Strings in Ihrer Sprache manipulieren können, und mit Problemen vertraut sein, bei denen es darum geht, sie zu verketten oder zu rotieren.
4) Verknüpfte Listen: Es ist üblich, dass man im Vorstellungsgespräch auf ein Problem mit verknüpften Listen stößt. Hier müssen Sie besonders auf die Eckfälle achten. Überlegen Sie, was passiert, wenn die verknüpfte Liste leer ist? Oder sie nur ein einziges Element hat? Oder Sie wollen bis zum letzten Element iterieren? Wenn Sie ein Problem mit verknüpften Listen lösen, denken Sie zweimal über die Eckfälle nach.
5) Hash-Tabellen: Grundlegende Datenstruktur, die in den meisten Interviews vorkommt. Wenn Sie sich in ein Thema vertiefen, wählen Sie Hash-Tabellen. Machen Sie sich mit der Hash-Tabellen-Bibliothek Ihrer Sprache vertraut und üben Sie mindestens fünf Probleme. Stellen Sie sich am Ende dieser Aufgabe: Wie würden Sie das längste Unterarray mit eindeutigen Einträgen finden?
6) Stapel: Machen Sie sich mit der Idee vertraut, dass Sie nur ein Ende des Stapels manipulieren können. Lösen Sie diese Aufgabe: Implementieren Sie einen Stack mit einer MAX-API, d.h. Sie können zu jedem Zeitpunkt fragen, welches das maximale Element im Stack ist.
7) Warteschlangen: Verwechsle sie nicht mit Stapeln, denn sie haben zwei Enden. Implementieren Sie das klassische Problem, eine Warteschlange mit zwei Stapeln zu simulieren.
8) Gierig: Diese Technik ist recht einfach und Sie verwenden sie wahrscheinlich jeden Tag. Im Grunde genommen geht es darum, die bestmögliche Entscheidung zu einem bestimmten Zeitpunkt zu treffen, ohne die zukünftigen Konsequenzen zu berücksichtigen. Üben Sie einige Probleme, und glauben Sie nicht, dass jedes Problem mit Greedy gelöst werden kann.
9) Primitive Typen: Hier geht es hauptsächlich um Bitmanipulation und Grundoperationen mit Zahlen. Einige Probleme können jedoch recht knifflig werden. Wie kann man die Anzahl der 1en in einer binären Darstellung zählen?
10) Binäre Bäume: Konzentrieren Sie sich auf Traversalen, gemeinsame Vorfahren und rekursive Iteration durch die Bäume.
11) Heaps: Sie sind in der realen Welt weit verbreitet, also machen Sie sich mit Heaps vertraut! Üben Sie so lange, bis Sie sicher sind, wann Sie einen Min-Heap oder einen Max-Heap verwenden können. Wie würden Sie die fünf größten Elemente einer Zahlenfolge ausgeben? Verwendet man einen Min-Heap oder einen Max-Heap?
12) Suchen: Das Suchen ist ein Kernthema, das jeder kennen sollte. Übe also mindestens drei Aufgaben mit binärer Suche.
13) Sortieren: Seien Sie sicher, dass Sie mergesort und quicksort implementieren können. Kennen Sie sehr gut deren beste, durchschnittliche und schlechteste Komplexität. Wenn Sie Zeit haben, lernen Sie auch Heapsort.
14) Binäre Suchbäume: Sie werden häufig im Vorstellungsgespräch abgefragt, und Sie müssen in der Lage sein, alle grundlegenden Operationen, einschließlich des Löschens eines Elements, durchzuführen!
15) Backtracking: Es bedeutet im Grunde, alle möglichen Lösungen zu generieren und diejenige zu nehmen, die Ihren Anforderungen entspricht. Implementieren Sie einen Generator der Potenzmenge der Menge und das n-Queen-Problem.
16) Graphen: Sie sind wahrscheinlich die am häufigsten verwendete Datenstruktur in der Informatik. Wusstest du, dass jedes soziale Netzwerk nur ein riesiger Graph ist? Üben Sie, eine Kopie des Graphen im Speicher zu erstellen und Zyklen in Graphen zu erkennen.
17) Dynamische Programmierung: Die dynamische Programmierung wird von den meisten als das gruseligste Thema angesehen. Aber es ist das schönste, wenn man den Gedanken dahinter versteht. Üben Sie also die fünf häufigsten Fragen und bleiben Sie bei ihnen, bis Sie verstehen, woher die Wiederholungen kommen.
In dem Kurs, den ich jetzt erstelle, erkläre ich jedes Thema in dieser Reihenfolge. Ich arbeite noch an dem Kurs, aber du kannst einen frühen Zugang zu einigen der Lektionen bekommen und mir auch mit deinem Feedback helfen, indem du der Facebook-Gruppe des Kurses beitrittst.
Wenn dir viele Themen unbekannt sind, bedeutet das, dass du gleich nach diesem Artikel mit dem Üben beginnen musst. Suchen Sie nicht mehr im Internet nach anderen Leitfäden, sondern üben Sie einfach los. Denken Sie daran, dass das Vorstellungsgespräch ein Kampf mit sich selbst ist: Je mehr Sie üben, desto größer sind Ihre Chancen zu gewinnen. Es liegt an dir, deine Komfortzone zu vergrößern.
Wie gibst du dein Bestes beim Vorstellungsgespräch?
Das Vorstellungsgespräch besteht aus fünf Teilen, die wir ausführlich besprechen werden. Sieh dir die Erklärungsvideos für echte Beispiele an.
1) Einleitung
Dieser Teil leitet das Gespräch ein und dauert etwa drei bis fünf Minuten. Der Gesprächspartner möchte mehr über Sie erfahren und gibt Ihnen die Möglichkeit, sich zu präsentieren. In der Regel interessiert er sich dafür, an welchen Projekten Sie bisher gearbeitet haben und welches das beeindruckendste war. Das ist Ihre Chance zu glänzen, also vergeuden Sie sie nicht!
Versuchen Sie nicht, schmeichelhaft zu sein. Es ist leicht, eine falsche Persönlichkeit zu erkennen, die versucht, dich zu täuschen. Ich und alle anderen hassen solche Leute, also sei sicher, dass du deine wahre Persönlichkeit zeigst.
Du musst im Voraus wissen, was du über dein Lieblingsprojekt sagen wirst, also bereite es vor dem Gespräch vor. Die meisten Leute sagen nur zwei kurze Sätze, was schlecht ist. Welche Antwort gefällt Ihnen besser?
1) „Ich habe an einer Webanwendung gearbeitet, um Patienten in Krankenhäusern besser zu verwalten. Ich habe das Backend in Node.js geschrieben.“
Die Art und Weise, wie du dich präsentierst, ist wirklich wichtig
2) „Ein Projekt, das mir wirklich Spaß gemacht hat, war die Erstellung einer Webanwendung für die nationalen Gesundheitsdienste des Vereinigten Königreichs, um ihnen zu helfen, die Patienten im Krankenhaus besser zu verwalten. Es war Teil des Lehrplans der Universität, dauerte zwei Monate und ich war der Leiter eines dreiköpfigen Teams.
Wir haben das Projekt von einer grundlegenden Idee in eine echte Anwendung verwandelt. Ich war für die Codierung des Backends in Node.js und der Datenbank in MongoDB verantwortlich. Es war die erste Anwendung, die ich jemals für einen Kunden erstellt habe, und ich war mit den Webtechnologien nicht vertraut. Der Entwicklungsprozess war iterativ, und wir haben unterwegs einige Fehler gemacht.
Am Ende haben wir viele Funktionen übererfüllt, und mein Favorit ist, dass die Benutzer die Zimmer des Krankenhauses aktualisieren können, anstatt hart kodiert zu sein.
Ich habe viele Dinge aus diesem Projekt gelernt, vor allem, wie man im Team arbeitet. Es gab einige Momente, in denen technische oder Team-Probleme auftraten, aber am Ende ist alles gut gelaufen und wir haben die beste Note des Jahres bekommen!“
Nutzen Sie diese Präsentation zu Ihrem Vorteil! Der Gesprächspartner ist wirklich daran interessiert, mehr über Sie zu erfahren, also beginnen Sie mit einer kurzen Vorstellung des Projekts und erklären Sie, worum es geht. Sagen Sie dann, was Ihr Beitrag war (wenn Sie dem Team mit einer pfiffigen Idee geholfen haben, sagen Sie es!) und was Sie aus dem Entwicklungsprozess gelernt haben. Sie können auch erwähnen, welchen Unterschied Sie für die Benutzer gemacht haben.
Sie sollten ein bis zwei Minuten über Ihr Projekt sprechen.
2) Verstehen Sie das Problem
Der Interviewer wird Ihnen kurz das Problem nennen, das Sie lösen müssen. Ich sagte „kurz“, weil er Ihnen nicht viele Details über die Einschränkungen, Eckfälle oder die Art und Weise, wie Sie die Daten erhalten, mitteilen wird. Es gehört zu Ihrer Aufgabe, nach allem zu fragen, was Sie zur Lösung des Problems benötigen. Wiederholen Sie die Aussage laut, um sicherzugehen, dass Sie sie richtig verstanden haben.