Wie ich mich auf mein Google-Interview vorbereitet habe

Jeder Softwareentwickler ist bestrebt, die Menschen mit seinen technischen Fähigkeiten zu beeindrucken. Die Technologiegiganten dieser Welt sind ein großartiger Ort, um für Techniker zu arbeiten, die Dienstleistungen für Milliarden von Benutzern erbringen können. In meinem letzten Interview gab es mehrere Runden, ich bekam Angebote von Google und Amazon. In den letzten Jahren hat mir die Online-Community bei der Vorbereitung auf Interviews sehr geholfen. In diesem Beitrag werde ich alles über meinen Weg zum Interview erzählen und den Beitrag der Community zu meinem Lernen zurückbringen.








Interview SWE



Der Prozess beginnt normalerweise damit, dass der Personalvermittler eine Liste potenzieller Kandidaten zusammenstellt. Der Kandidat durchläuft dann ein erstes Screening oder Screenings, bei denen festgestellt wird, ob er für den Job geeignet ist. Sobald dies klar ist, wird ein typisches SWE-Interview durchgeführt, das die folgenden Schritte umfasst:



  • Programmierung - von 3 bis 5 Runden;

  • Systemdesign - 1 Runde;

  • Führungsprinzipien - Runde 1.



Ich werde mich auf die Vorbereitung des Codierungszyklus konzentrieren, da er den größten Teil des Interviews in Anspruch nimmt. In den folgenden Abschnitten werden wir uns jedoch kurz mit Systemdesign und Führungsqualitäten befassen.



A. Programmierung



Softwareentwickler befinden sich häufig in schwierigen Situationen, z. B. wenn sie mit Mehrdeutigkeiten und unklaren Anforderungen arbeiten, komplexe Aufgaben in Unteraufgaben aufteilen, Randfälle bearbeiten, die Arbeit an einem Kompromiss mit Kompromissen beenden usw. Programmierinterviews sind eine Möglichkeit, sich ein Bild zu machen dieser Fähigkeiten.



Der Einfachheit halber konzentrieren sich die Programmierschritte auf die Lösung von Problemen mithilfe von Datenstrukturen und Algorithmen. Diese Fragen sind im Allgemeinen komplex und bieten wertvolle Einblicke in die analytischen Fähigkeiten eines Kandidaten.



Lernen Sie, Probleme mithilfe von Algorithmen und Datenstrukturen zu lösen. Diese Fähigkeit wird im Laufe der Zeit erworben, es gibt keine Abkürzung dazu; Die einzig wahre Formel ist Konsistenz. Üben, üben und üben Sie, bis Sie Ihre natürliche Fähigkeit zur Problemlösung entwickelt haben.



Vorbereitungsstrategie



1. Schätzung der Vorbereitungszeit



Die Zeitschätzung wird oft ignoriert und nicht als notwendig erachtet. Ich schlage vor, zu kalibrieren, wie gut Sie Probleme mit Algorithmen und Datenstrukturen lösen können. Ich untersuchte meine Stärken und Schwächen und schätzte die Vorbereitungszeit grob ein. Diese Einschätzung half mir, mich auf ein langfristiges (und kurzfristiges) Ziel vorzubereiten, und motivierte mich.



„Gib dir genug Zeit, um dich vorzubereiten. Immer. Es ist besser, zu gut vorbereitet zu sein als nicht ausreichend vorbereitet **.


Die gesamte Vorbereitungszeit kann je nach Erfahrung variieren. Im Allgemeinen habe ich die Ausbildungsstufen wie folgt aufgeteilt:



  • Ein Anfänger kann bequem Code in mindestens einer Programmiersprache schreiben. Ihm fehlen Grundkenntnisse in DS und Algorithmen. Schwierigkeiten, einfache Probleme zu lösen oder sich Zeit zu nehmen.

  • Durchschnittlich. Die Person kennt Datenstrukturen und Algorithmen gut. Kein Problem mit leichten Schwierigkeiten. Kann die meisten Probleme von durchschnittlicher Komplexität lösen. Kämpft hart.

  • Fortgeschrittene. Kein Problem mit mittlerem Schwierigkeitsgrad. Kann die komplexesten Probleme lösen.



Vor dem Interview habe ich mich auf die mittlere Ebene gestellt.





Schätzung der Vorbereitungszeit



2. Plattformen, auf denen Sie das Programmieren lernen



Ich habe hauptsächlich mit LeetCode , InterviewBit und GFG programmiert . Vor dem Interview habe ich ungefähr 320 LeetCode-Probleme, 80 InterviewBit- und 30 GFG-Fragen gelöst.





Wie die Aufgaben verteilt wurden Aufgaben mit



mittlerem Schwierigkeitsgrad sind sehr wichtig: Die meisten Interviewfragen sind mit mittlerem Schwierigkeitsgrad. Das Lösen von Problemen mit mittlerem Schwierigkeitsgrad beschleunigt Sie und verbessert Ihre Fähigkeiten zur Problemlösung.



Es ist wichtig, frühzeitig mit einfachen bis mittleren Fragen zu beginnen. Beginnen Sie mit herausfordernden Aufgaben, sobald Sie sich ausreichend sicher fühlen. Bleiben Sie motiviert, wenn Sie schwierige Probleme nicht lösen können. Es kann länger dauern, als Sie erwartet hatten, um die Lösung durchzuarbeiten und zu verbessern. Immer wenn ich mich überfordert fühlte, um meine Motivation zu steigern, kehrte ich zu einfachen Aufgaben zurück.



Behalten Sie eine Wachstumsphilosophie bei. Jedes Problem, das Sie nicht lösen können, ist eine Gelegenheit, etwas Neues zu lernen.



  • LeetCode: , . LeetCode — . . , LeetCode Premium; .

  • InterviewBit: . . , ( ). InterviewBit .

  • GFG: Ich habe diese Plattform genutzt, um Probleme und Artikel über die Grundlagen von Algorithmen und Datenstrukturen zu finden. Die Erklärungen zu den Themen und deren Implementierungen sind wirklich gut. Die GFG hat auch eine Reihe von Aufgaben in Bezug auf bestimmte Unternehmen und Themen.



Ich habe mich nicht ausschließlich auf eine Ressource verlassen. Jeder gab mir neue Ideen. Ich führte ein Tagebuch und erweiterte ständig mein Wissen.



  • Spezialisierung auf Algorithmen auf Coursera : Dieser Coursera-Track ist fantastisch! Insgesamt gibt es 4 Kurse, die alle grundlegenden und einige fortgeschrittene Themen der Datenstrukturen und Algorithmen abdecken. Ideal für Anfänger.

  • Youtube: . . ( , , THNLGf019nRo) — ! BackToBack SWE.

  • CTCI EPI:   . . , . .

  • CLRS:   , . , .



Last but not least die Artikel über BaseCS von Vaidehi Joshi . Sie schreibt intuitive und einfache Erklärungen zu verschiedenen Themen von Algorithmen und Datenstrukturen.



3. Starten Sie den Timer



Da die Dauer der Interviews immer kürzer wird, ist es sehr wichtig, daran zu arbeiten, wie Sie Probleme lösen. In der Regel dauert ein Programmierinterview 45 bis 50 Minuten, und es wird erwartet, dass der Kandidat zwei mittelschwere, ein schweres oder ein leichtes und ein schweres Problem löst.



Selbst wenn Sie die ursprüngliche Frage hätten lösen können, aber mehr Zeit aufgewendet haben, bedeutet dies, dass Sie nicht genug Zeit haben, um die zweite zu lösen.



Ich habe einen Timer eingestellt, um die Zeit herunterzuzählen, die zur Lösung von Problemen benötigt wurde:



  • Durchschnittliche Aufgabe: 20 Minuten.

  • Schwierige Aufgabe: 40-45 Minuten.



Anfänger können die Zeit ignorieren: Für sie ist es offensichtlich wichtiger, die richtige Lösung zu finden.



4. Simuliertes Interview



Vor dem eigentlichen Interview habe ich viel simuliert. Ein Scheininterview kann sehr hilfreich sein. Ein frühzeitiger Fehler in einer Testumgebung bietet nützliche Informationen. Es wird Ihnen helfen, Lücken in Ihrem Denkprozess zu erkennen. Versuchen Sie, jeden Fehler zu beheben und mit jedem falschen Interview besser zu werden.



"Wenn Sie die Simulationen mehrmals bestehen, nehmen Sie es als gutes Zeichen."



Kostenlos:



  • Nachahmung auf LeetCode .

  • [Kostenloses Peer-to-Peer-Schema] Pramp .

  • [Kostenloses Peer-to-Peer] InterviewBit .



Bezahlte Scheininterviews sind von Vorteil. Zum Beispiel enthält das Feedback nach dem Vorstellungsgespräch viele Details darüber, was der Personalvermittler erwartet hat.



  • [Bezahlt] ExpertMitra .

  • [Bezahlt] Mocki .

  • [Bezahlt] Technisches Testinterview .



5. Bereiten Sie einen Aktionsplan vor



Bisher haben wir viel über die verschiedenen Elemente der Vorbereitung gesprochen. Versuchen wir nun, alles zusammenzustellen und einen Werbeplan zu erstellen! Schauen Sie sich einen Monat vor dem Interview einen Screenshot meines Kalenders an.





Vorbereitungsplan



Ich habe alle Vorbereitungen in Aufgaben unterteilt. Legen Sie Ziele für jeden Tag in den Wochen (und sogar Monaten) vor dem Interview fest. Dies half mir, Chaos zu vermeiden und mich auf dem Weg zum Ziel nicht zu verlaufen.



  • An Wochentagen konnte ich ein paar Stunden einplanen, weil ich Büroarbeit machte. Ich habe die Lösung von Problemen für diese Zeit geplant.

  • Ich habe an Wochenenden Theorie gelesen, wenn ich viel Zeit darauf verwenden konnte.

  • Näher am Interview plante ich Nachahmungen. In den letzten Wochen habe ich die Anzahl der Programmiersitzungen reduziert und mich auf das Lesen von CTCI und EPI konzentriert.







Wöchentliche Zeitverteilung



Ich weiß, dass viele von uns familiäre Verpflichtungen und Vollzeitjobs haben. Nicht alles und läuft nicht immer nach Plan. Aber die Idee ist, eine Gewohnheit zu bilden. Verfolgen Sie Ihren Fortschritt und was noch nicht abgeschlossen ist. Passen Sie den Zeitplan an, bis Sie einen geeigneten gefunden haben.



B. Systemdesign



Diese Runde testet die technischen Designfähigkeiten. Es kann in Low-Level-Design (LLD) und High-Level-Design (HLD) unterteilt werden. Das Wissen in diesem Bereich wächst mit der Erfahrung in der Branche.



Versuchen Sie, Kenntnisse über Konzepte wie verteilte Systeme, Lastausgleich, Netzwerkprotokolle, konsistentes Hashing, CAP-Theorem, Replikation, Sharding usw. zu erlangen.





C. Grundsätze der Führung. Verhalten



Im Gegensatz zu früheren Runden ist dieser Abschnitt nicht technisch. Das Unternehmen erwartet, mit seinen Worten mehr über den Kandidaten zu erfahren. Das Unternehmen könnte interessiert sein an:

  • Persönlichkeit des Kandidaten.

  • Frühere Projekte und Berufserfahrung.

  • Was haben Sie in schwierigen Situationen getan?

  • Wie haben Sie auf gute und schlechte Bewertungen reagiert?



Die Hauptsache ist, transparent zu bleiben und einfach du selbst zu sein.

Ich werde den in der CTCI erwähnten Abschnitt über das SAR-Modell (Situation, Maßnahme, Ergebnis) hervorheben . Die Idee ist, wichtige wichtige Diskussionen zu identifizieren, indem Geschichten aus dem vorherigen Job verteilt werden. Hier ist eine Karte der Community-Fähigkeiten (auch bekannt als Soft Skills), damit Sie mehr über sie erfahren können.





SAR





  • LeetCode Codeforces. , , .

  • «Shuffle» LeetCode. . .

  • IDE, Google Docs, CollabEdit, .

  • . , .

  • , . , , . , .





Q1. Auf welche Themen von Datenstrukturen und Algorithmen sollten Sie sich konzentrieren? Auf welche Ressourcen haben Sie verlinkt?

Die zuvor genannten Lernressourcen sind hilfreich. Ich habe nicht für jedes Thema eine eigene Ressource hinzugefügt. Dadurch wird der Beitrag zu groß.



Themen in keiner bestimmten Reihenfolge:

Verknüpfte Listen, Bitmanipulationen, Stapel und Warteschlangen, Binäre Suche, Heaps, Greedy-Algorithmen, Dynamische Programmierung, Vektoren / ArrayList, Big O-Notation, Zeit und Raum, Sortierungen, Zeiger, TCP / IP-Fenster, Systeme disjunkt Sets, String-Operationen, Diagramme und Bäume, Aufrechterhaltung der Systemstabilität, Breitensuche und Tiefensuche, Rekursion, Backtracking, Hashing, Syntaxbaum, Bereinigen von Bäumen und indizierten Binärbäumen.



Q2. Welche Programmiersprachen haben Sie gelernt?

Lerne eine Sprache von innen und außen; Meiner Meinung nach ist das genug. Ich bevorzuge Java.



Q3. Woher wissen Sie, welche Aufgaben zum Üben geeignet sind, um alle Probleme zu lösen?

Es ist fast unmöglich, alle Probleme zu lösen. Es gibt jedoch maximal 12-15 Themen aus dem Bereich Datenstrukturen und Algorithmen. Versuchen Sie, jedes Thema besser zu meistern, indem Sie thematische Probleme lösen. Mit etwas Übung können Sie die gewünschte Datenstruktur und den gewünschten Algorithmus bestimmen. Fokus auf Qualität statt Quantität.



Q4. Habe ich eine Chance, wenn ich nicht an Wettbewerben teilnehme?

Ja absolut. Die Programmierung für Wettbewerbe in diesem Zusammenhang ist optional.



  • Wettbewerbsprogrammierung ist eine Sportart, deren Aufgabenbereich breiter ist als die Produktionsprogrammierung. Plattformen wie CodeChef und Codeforces neigen eher zu dieser Art der Programmierung.

  • Natürlich gibt es Bereiche, in denen sich wettbewerbsfähige Programmierung mit Produktionsprogrammierung überschneidet und nützlich sein kann: Zum Beispiel hilft es, die Aufmerksamkeit eines Personalvermittlers auf Ihr Profil, Ihre Fähigkeiten zur Problemlösung usw. zu lenken.



Die Codierungsrunden stellen jedoch eine ganz andere Phase dar und haben unterschiedliche Prioritäten.



Q5. Wie bekomme ich eine Einladung zu einem Vorstellungsgespräch? Wie haben Sie sich beworben?

Der Personalvermittler hat mich direkt über LinkedIn kontaktiert. Ich weiß nicht, wie die Kandidaten ausgewählt werden. Aber ich habe ein paar Vorschläge.



  • Konzentrieren Sie sich als Student auf Ihr Studium. Nehmen Sie an Wettbewerben und Hackathons teil und arbeiten Sie an interessanten und innovativen Projekten. Versuchen Sie, zu einem Open Source-Projekt beizutragen. Es gibt unzählige Möglichkeiten, Ihr Profil hervorzuheben.



Am wichtigsten ist, genießen Sie Ihre Reise. Sei fleißig in deiner Arbeit. Haben Sie Geduld, Respekt und bemühen Sie sich immer, heute besser als gestern zu sein, und vergessen Sie nicht den speziellen HABR-Promo-Code, der den Rabatt auf das Banner um 10% erhöht. Der Rest wird folgen.






Bild






Andere Berufe und Kurse


















All Articles