Wie man sich auf ein Vorstellungsgespräch bei Google vorbereitet und es nicht besteht. Zweimal

Wie man sich auf ein Vorstellungsgespräch bei Google vorbereitet und es nicht besteht. Zweimal

Die Überschrift des Artikels klingt nach einem epischen Fehlschlag, aber tatsächlich ist es nicht so eindeutig. Insgesamt endete diese Geschichte jedoch recht positiv, wenn auch nicht bei Google. Aber das ist ein Thema für einen anderen Artikel. In diesem Artikel werde ich über drei Dinge sprechen: wie mein Vorbereitungsprozess ablief, wie die Interviews bei Google verliefen und warum ich der Meinung bin, dass alles nicht so eindeutig ist, wie es scheint.

Wie alles begann

An einem kalten, zypriotischen Winterabend kam mir plötzlich der Gedanke, dass mein Wissen über klassische Informatik ziemlich weit von durchschnittlich entfernt ist und ich etwas dagegen tun muss. Falls jemand noch nicht gelesen hat, warum der Abend zypriotisch und kalt ist, kann er darüber mehr erfahren. hier. Nach einigem Nachdenken wurde beschlossen, zunächst einen Online-Kurs über Algorithmen und Datenstrukturen zu absolvieren. Von einem ehemaligen Kollegen hatte ich von Robert Sedgewicks Kurs auf Coursera gehört. Der Kurs besteht aus zwei Teilen (Teil 1 und Teil 2). Falls sich die Links ändern, kann man immer den Namen des Autors eingeben, um sie zu finden. Jeder Teil dauert 6 Wochen. Zu Beginn der Woche werden Vorlesungen bereitgestellt, und während der Woche müssen außerdem Übungen gemacht werden. Der erste Teil des Kurses behandelt grundlegende Datenstrukturen, verschiedene Sortierarten und die Komplexität von Algorithmen. Der zweite Teil ist bereits fortgeschrittener, beginnt mit Graphen und endet mit Themen wie linearer Programmierung und Unlösbarkeit. Nach all dem obigen Überlegten kam ich zu dem Schluss, dass dies genau das ist, was ich brauche. Der interessierte Leser mag fragen, was Google damit zu tun hat. Und in der Tat war Google bis zu diesem Moment nicht wirklich involviert. Aber ich brauchte ein Ziel, denn es ist etwas schwierig, 12 Wochen abends ohne Ziel zu lernen. Und welches Ziel könnte man beim Erwerb neuer Kenntnisse haben? Natürlich deren praktische Anwendung. Im Alltag ist das ziemlich problematisch, doch bei einem Vorstellungsgespräch in einem großen Unternehmen ist es einfach. Ein schnelles Googlen zeigte, dass Google (bitte entschuldigt die Tautologie) eines der größten Unternehmen in Europa ist (und ich hatte speziell Europa im Blick), wo solche Vorstellungsgespräche durchgeführt werden. Ihr Büro befindet sich in Zürich, Schweiz. Also beschlossen — wir lernen und gehen zu einem Vorstellungsgespräch bei Google.

Vorbereitung für den ersten Versuch

12 Wochen vergingen wie im Flug, und ich habe beide Kurse abgeschlossen. Mein Eindruck von den Kursen ist überaus positiv, und ich kann sie jedem Interessierten empfehlen. Diese Gründe haben mir die Kurse besonders gefallen:

  • Der Dozent spricht ein ausreichend klares Englisch
  • Das Material ist gut strukturiert
  • Wunderschöne Präsentationen, die die inneren Abläufe jedes Algorithmus zeigen
  • Gut ausgewähltes Material
  • Interessante Übungen
  • Die Übungen werden automatisch auf der Website überprüft, danach wird ein Bericht erstellt

Mein Arbeit an den Kursen verlief normalerweise folgendermaßen. Innerhalb von 1-2 Tagen hörte ich mir die Vorlesungen an. Dann absolvierte ich einen kurzen Test zum Wissen des Materials. Den Rest der Woche arbeitete ich an der Übung in mehreren Iterationen. Nach der ersten Runde erzielte ich 30-70%, die folgenden Runden steigerten das Ergebnis auf 97-100%. Die Übung bestand normalerweise darin, einen Algorithmus zu implementieren, zum Beispiel Seam Carving oder bzip.

Nach Abschluss der Kurse wurde mir bewusst, dass viele Kenntnisse viele Sorgen mit sich bringen. Früher wusste ich einfach, dass ich nichts weiß, jetzt begann ich zu verstehen, was genau ich nicht weiß.

Da es erst Mai war und ich das Vorstellungsgespräch auf den Herbst geplant hatte, beschloss ich, meine Ausbildung fortzusetzen. Nach Durchsicht der Anforderungen der Stelle wurde die Entscheidung getroffen, parallel in zwei Richtungen weiterzumachen: das Studium der Algorithmen fortzusetzen und einen Basiskurs zum maschinellen Lernen zu absolvieren. Für ersteres beschloss ich, von den Kursen auf ein Buch umzusteigen und wählte das monumentale Werk von Steven Skiena „Algorithmen. Anleitung zur Entwicklung“ (The Algorithm Design Manual). Nicht so monumental wie das von Knuth, aber trotzdem. Für das zweite Ziel ging ich erneut zu Coursera und meldete mich für den Kurs von Andrew Ng Machine Learning.

Es vergingen weitere 3 Monate, und ich beendete den Kurs und das Buch.

Lass uns mit dem Buch anfangen. Das Lesen war ziemlich interessant, auch wenn es nicht einfach war. Im Grunde würde ich das Buch empfehlen, aber nicht sofort. Insgesamt bietet das Buch eine tiefere Analyse dessen, was ich in den Kursen gelernt habe. Außerdem habe ich für mich (aus formaler Sicht) Dinge wie Heuristiken und dynamische Programmierung entdeckt. Natürlich hatte ich sie früher genutzt, aber ich wusste nicht, wie sie heißen. Außerdem enthält das Buch eine gewisse Anzahl von Anekdoten aus dem Leben des Autors (War Story), die die akademische Darstellung etwas auflockern. Die zweite Hälfte des Buches kann man übrigens skippen, dort geht es eher um die Beschreibung bestehender Probleme und deren Lösungsansätze. Nützlich, wenn man es regelmäßig in der Praxis anwendet, sonst vergisst man es sofort.

Der Kurs hat mich mehr als erfreut. Der Autor weiß offensichtlich, was er tut, und erklärt es interessant. Außerdem hatte ich einen beträchtlichen Teil, konkret die lineare Algebra und die Grundlagen der neuronalen Netze, noch aus der Universität im Gedächtnis, daher hatte ich keine besonderen Schwierigkeiten. Die Struktur des Kurses ist recht standardisiert. Der Kurs ist in Wochen unterteilt. Jede Woche gibt es zuerst Vorlesungen gemischt mit kurzen Tests. Nach den Vorlesungen wird eine Aufgabe gestellt, die man erledigen, einreichen muss, und die wird automatisch überprüft. Kurz gesagt, die Themen, die im Kurs behandelt werden, sind folgende:
— Kostenfunktion
— lineare Regression
— Gradientenabstieg
— Merkmals-Skalierung
— normale Gleichung
— logistische Regression
— Multiklassenklassifikation (eine gegen alle)
— neuronale Netze
— Rückpropagation
— Regularisierung
— Bias/Varianz
— Lernkurven
— Fehlermessungen (Präzision, Rückruf, F1)
— Support Vector Machines (Klassifikation mit großem Margen)
— K-Means
— Hauptkomponentenanalyse
— Anomalieerkennung
— kollaborative Filterung (Empfehlungssystem)
— stochastischer, Mini-Batch, Batch Gradientabstieg
— Online-Lernen
— Map Reduce
— Deckenanalyse
Nach dem Kursverlauf war das Verständnis all dieser Themen vorhanden. Nach 2 Jahren hatte ich jedoch bereits fast alles vergessen. Ich empfehle es jenen, die mit maschinellem Lernen nicht vertraut sind und ein gutes Verständnis der grundlegenden Dinge für den weiteren Fortschritt erlangen möchten.

Erster Versuch

Es war bereits September und es war Zeit, über ein Vorstellungsgespräch nachzudenken. Da es recht schwierig ist, über die Website zu bewerben, habe ich mich auf die Suche nach Bekannten begeben, die bei Google arbeiten. Die Wahl fiel auf datacompboy, da er der Einzige war, den ich direkt kannte (wenn auch nicht persönlich). Er stimmte zu, meinen Lebenslauf weiterzuleiten, und bald erhielt ich eine Nachricht vom Recruiter, die anbot, einen Termin in seinem Kalender für das erste Gespräch zu buchen. Nach ein paar Tagen fand das Telefonat statt. Wir versuchten, über Hangouts zu kommunizieren, aber die Qualität war schrecklich, also wechselten wir zum Telefon. Zunächst besprachen wir schnell die Standards wie, warum und wieso, und dann gingen wir zum technischen Screening über. Es bestand aus einem Dutzend Fragen wie „Wie schwierig ist das Einfügen in eine Hash-Map?“ und „Welche balancierten Bäume kennen Sie?“. Nicht schwer, wenn man grundlegendes Wissen über diese Dinge hat. Das Screening verlief gut, und anschließend beschlossen wir, in einer Woche ein erstes Interview zu organisieren.

Das Interview fand ebenfalls über Hangouts statt. Zuerst haben wir etwa 5 Minuten über mich gesprochen, dann gingen wir zur Aufgabe über. Die Aufgabe bezog sich auf Graphen. Ich verstand schnell, was zu tun war, wählte aber den falschen Algorithmus. Als ich anfing, den Code zu schreiben, merkte ich das und wechselte zu einer anderen Option, die ich dann auch fertigstellte. Der Interviewer stellte einige Fragen zur Komplexität des Algorithmus und fragte, ob es schneller ginge. Ich war irgendwie blockiert und konnte es nicht. Damit war die Zeit abgelaufen, und wir verabschiedeten uns. Nach etwa 10 Minuten kam mir der Gedanke, dass anstelle des Dijkstra-Algorithmus, den ich verwendet hatte, in dieser speziellen Aufgabe eine Breitensuche schneller hätte sein können. Nach einiger Zeit rief der Recruiter an und sagte, dass das Interview insgesamt gut verlaufen sei und wir ein weiteres organisieren sollten. Wir vereinbarten ein weiteres Gespräch in einer Woche.

Diesmal lief es schlechter. Wenn der Interviewer beim ersten Mal freundlich und gesprächig war, war er dieses Mal irgendwie düster. Ich konnte die Aufgabe sofort nicht lösen, obwohl die Ideen, die ich vorgebracht habe, grundsätzlich zu einer Lösung führen konnten. Letztendlich kam ich nach mehreren Hinweisen des Interviewers zur Lösung. Diesmal war es wieder eine Breitensuche, nur aus mehreren Punkten. Ich habe die Lösungen geschrieben, die Zeit eingehalten, aber die Randfälle vergessen. Nach einer Weile rief der Recruiter an und teilte mit, dass der Interviewer diesmal unzufrieden war, da er der Meinung war, dass ich zu viele Hinweise (3 oder 4) gebraucht habe und ich ständig den Code während des Schreibens geändert habe. Nach den Ergebnissen der beiden Vorstellungsgespräche wurde beschlossen, nicht weiterzumachen und das nächste Interview um ein Jahr zu verschieben, falls ich das wünsche. Damit verabschiedeten wir uns.

Und aus dieser Geschichte habe ich einige Schlussfolgerungen gezogen:

  • Theorie ist gut, aber man muss sich schnell darin zurechtfinden.
  • Theorie ohne Praxis hilft nicht. Man muss die Aufgaben lösen und das Codieren automatisieren.
  • Vieles hängt vom Interviewer ab. Daran kann man nichts ändern.

Vorbereitung für den zweiten Versuch

Nachdem ich die Situation überdacht hatte, beschloss ich, es in einem Jahr noch einmal zu versuchen. Ich habe das Ziel leicht angepasst. Früher war das Hauptziel das Lernen, und das Interview bei Google wie eine ferne Karotte, jetzt war das Bestehen des Interviews das Ziel, und das Lernen das Mittel.
Also wurde ein neuer Plan entwickelt, der folgende Punkte umfasste:

  • Die Theorie durch das Lesen von Büchern und Artikeln weiter zu studieren.
  • Algorithmische Aufgaben in einer Anzahl von 500-1000 Stück zu lösen.
  • Die Theorie durch das Ansehen von Videos weiter zu studieren.
  • Die Theorie durch Kurse weiter zu studieren.
  • Die Erfahrungen anderer Menschen beim Bestehen von Interviews bei Google zu studieren.

Der Plan wurde von mir innerhalb eines Jahres erfüllt. Danach werde ich beschreiben, was genau ich zu jedem Punkt gemacht habe.

Bücher und Artikel

Die Anzahl der gelesenen Artikel kann ich gar nicht mehr erinnern, ich habe sie sowohl auf Russisch als auch auf Englisch gelesen. Die nützlichste Webseite war wahrscheinlich diese hier.Hier sind eine große Anzahl interessanter Algorithmen mit Codebeispielen gesammelt.

Ich habe 5 Bücher gelesen: Algorithms, 4. Auflage (Sedgewick, Wayne), Introduction to Algorithms, 3. Auflage (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview, 4. Auflage (Gayle Laakmann), Programming Interviews Exposed, 2. Auflage (Mongan, Suojanen, Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Sie lassen sich in 2 Kategorien einteilen. In die erste fallen die Bücher von Sedgewick und Cormen. Das ist Theorie. Die anderen sind Vorbereitung auf Interviews. Sedgewick erklärt in seinem Buch ungefähr das Gleiche wie in seinen Kursen. Einfach in schriftlicher Form. Es macht nicht viel Sinn, genau zu lesen, wenn man den Kurs besucht hat, aber einen Blick sollte man trotzdem werfen. Wenn man den Kurs nicht gesehen hat, macht es Sinn, zu lesen. Cormen erschien mir etwas zu langweilig. Ich habe es ehrlich gesagt nur mit Mühe geschafft. Ich habe nur das Master-Theorem, ja, ein paar selten verwendete Datenstrukturen (Fibonacci-Haufen, van Emde Boas-Baum, Radix-Haufen).

Ein Buch zur Vorbereitung auf Interviews sollte man zumindest eines lesen. Sie sind alle nach einem ähnlichen Prinzip aufgebaut. Sie beschreiben den Interviewprozess in großen Technologieunternehmen, geben grundlegende Dinge aus der Informatik, Aufgaben zu diesen grundlegenden Dingen, Lösungen für die Aufgaben und eine Analyse der Lösungen. Von den drei genannten würde ich wahrscheinlich Cracking the Coding Interview als Hauptbuch empfehlen, die anderen nach Wunsch.

Algorithmische Aufgaben

Das war wahrscheinlich der interessanteste Punkt in der Vorbereitung. Man kann natürlich einfach sitzen und stumpf Aufgaben lösen. Dafür gibt es viele verschiedene Websites. Ich habe hauptsächlich drei verwendet: Hackerrank, CodeChef und LeetCode. Auf CodeChef sind die Aufgaben nach Schwierigkeit sortiert, aber nicht nach Themen. Auf Hackerrank sind sie sowohl nach Schwierigkeit als auch nach Themen sortiert.

Aber wie ich gleich für mich herausgefunden habe, gibt es eine interessantere Methode. Und das sind Wettkämpfe (Programming Challenges oder Programming Contests). Alle drei Websites bieten die an. Das Problem mit LeetCode ist jedoch die ungünstige Zeitzone. Deshalb habe ich auf dieser Seite nicht teilgenommen. Hackerrank und CodeChef bieten eine große Anzahl verschiedener Wettbewerbe an, die von 1 Stunde bis zu 10 Tagen dauern. Verschiedene Formate haben unterschiedliche Regeln, naja, darüber könnte man lange reden. Das Hauptprinzip, warum Wettbewerbe gut sind, ist die Einführung eines wettbewerbsorientierten (und nochmals tautologischen) Elements in den Lernprozess.

Insgesamt habe ich an 37 Wettbewerben auf Hackerrank teilgenommen. Davon waren 32 bewertete Wettbewerbe und 5 entweder gesponsert (ich habe sogar 25 $ bei einem davon erhalten) oder aus Spaß. Bei den bewerteten Wettbewerben war ich 10 Mal unter den Top 4 %, 11 Mal unter den Top 12 % und 5 Mal unter den Top 25 %. Die besten Ergebnisse waren 27/1459 in einem 3-Stunden-Wettbewerb und 22/9721 in einem wöchentlichen Wettbewerb.

Ich bin zu CodeChef gewechselt, als die Wettbewerbe auf Hackerrank seltener stattfanden. Insgesamt habe ich an 5 Wettbewerben teilgenommen. Das beste Ergebnis war 426/5019 in einem zehn-tägigen Wettbewerb.

Insgesamt habe ich bei Wettbewerben und einfach so etwas über 1000 Aufgaben gelöst, was in meinen Plan passte. Leider habe ich zurzeit keine freie Zeit, um meine wettbewerbliche Tätigkeit fortzusetzen, ebenso wenig wie ein Ziel, für das ich meine nicht freien Zeiten opfern könnte. Aber es hat Spaß gemacht. Ich empfehle jedem, der sich dafür interessiert, Gleichgesinnte zu finden. Zu zweit oder in einer Gruppe macht es viel mehr Spaß. Ich habe mich mit einem Freund damit beschäftigt, deshalb lief es auch so gut.

Videos ansehen

Nachdem ich das Buch von Skiena gelesen hatte, interessierte ich mich im Prinzip für das, was er macht. Wie Sedgwick ist er Professor an einer Universität. Daher findet man im Internet Videoaufzeichnungen seiner Kurse. Ich habe beschlossen, den Kurs anzusehen COMP300E — Programmierherausforderungen — 2009 HKUST. Ich kann nicht sagen, dass es mir besonders gefallen hat. Erstens war die Videoqualität nicht besonders gut. Zweitens habe ich nicht versucht, die im Kurs behandelten Aufgaben selbst zu lösen. Daher war mein Engagement nicht besonders hoch.
Außerdem bin ich beim Lösen von Aufgaben, während ich versuchte, den richtigen Algorithmus zu finden, auf Videos von Tushar Roy gestoßen. Er hat bei Amazon gearbeitet und arbeitet jetzt bei Apple. Wie ich später für mich herausfand, hat er einen YouTube-Kanal, auf dem er verschiedene Algorithmen erläutert. Zum Zeitpunkt des Schreibens enthält der Kanal 103 Videos. Ich muss sagen, dass die Erklärungen in seiner Ausführung sehr ordentlich gemacht sind. Ich habe versucht, andere Autoren anzusehen, aber es hat irgendwie nicht geklappt. Daher kann ich diesen Kanal auf jeden Fall empfehlen.

Kursteilnahme

Hier habe ich nicht wirklich viel gemacht. Ich habe die Videos des Android Developer Nanodegree von Google angesehen und den Kurs von ITMO absolviert Wie man Coding-Wettbewerbe gewinnt: Geheimnisse der Champions. Der Nanodegree ist ganz in Ordnung, auch wenn ich natürlich nichts Neues von dort gelernt habe. Der Kurs von ITMO ist hinsichtlich der Theorie etwas zusammengefasst, aber die Aufgaben waren interessant. Ich würde nicht empfehlen, damit zu beginnen, aber die Zeit dafür war im Grunde nicht umsonst.

Die Erfahrungen anderer Menschen studieren

Offensichtlich haben viele Menschen versucht, zu Google zu kommen. Einige haben es geschafft, andere nicht. Manche haben darüber Artikel geschrieben. Interessante Dinge, die ich vielleicht erwähnen möchte, sind das hier und das hier. Im ersten Fall hat die Person eine Liste erstellt, was sie lernen muss, um Software Engineer zu werden und bei Google zu arbeiten. Letztendlich kam sie zu Amazon, aber das ist nicht so wichtig. Das zweite Handbuch wurde von einer engen Ingenieurin bei Google, Larisa Agarova, geschrieben (Larrr). Neben diesem Dokument kann man auch ihren Blog lesen.

Es lohnt sich, die Bewertungen über Vorstellungsgespräche auf Glassdoor zu lesen. Sie sind mehr oder weniger ähnlich, aber man kann nützliche Informationen herausziehen.

Ich werde keine Links zu anderen kleinen Artikeln angeben, ihr könnt sie selbst gut bei Google finden.

Zweiter Versuch

Ein Jahr ist vergangen. Es war sehr intensiv in Bezug auf das Studium. Aber auf den neuen Herbst ging ich mit deutlich tieferem theoretischen Wissen und ausgefeilten praktischen Fähigkeiten zu. Bis zum Ende der mir gesetzten Zeit für die Vorbereitung des Jahres blieben noch ein paar Wochen, als plötzlich eine E-Mail von einem Recruiter bei Google in meinem Posteingang landete, in der er mich fragte, ob ich immer noch Lust hätte, bei Google zu arbeiten und ob ich bereit wäre, mit ihm zu sprechen. Natürlich war ich nicht abgeneigt. Wir einigten uns darauf, in einer Woche zu telefonieren. Außerdem wurde ich um einen aktualisierten Lebenslauf gebeten, den ich mit einer kurzen Beschreibung dessen, was ich im Jahr bei der Arbeit gemacht habe, ergänzte.

Nach einem lockeren Austausch über das Leben wurde beschlossen, dass in einer Woche ein Hangouts-Interview stattfinden würde, alles wie im letzten Jahr. Eine Woche verging, es war Zeit für das Interview, aber der Interviewer erschien nicht. Nach 10 Minuten begann ich nervös zu werden, als plötzlich jemand in den Chat eintrat. Wie sich später herausstellte, konnte mein Interviewer aus irgendeinem Grund nicht erscheinen, und man fand schnell einen Ersatz für ihn. Die Person war sowohl in Bezug auf die Computerkonfiguration als auch auf die Durchführung des Interviews nicht gut vorbereitet. Aber danach lief alles gut. Ich löste die Aufgabe schnell, beschrieb, wo mögliche Fallstricke liegen und wie man sie umgehen kann. Wir diskutierten verschiedene Variationen der Aufgabe, die Komplexität des Algorithmus. Danach plauderten wir noch 5 Minuten, der Ingenieur erzählte von seinen Eindrücken von der Arbeit in München (in Zürich scheint man keinen dringenden Ersatz gefunden zu haben), und so trennten wir uns.

Am selben Tag kontaktierte mich ein Recruiter und teilte mit, dass das Interview gut gelaufen sei und sie bereit seien, mich zu einem Vorstellungsgespräch ins Büro einzuladen. Am nächsten Tag telefonierten wir über Hangouts und besprachen die Einzelheiten. Da ich ein Visum benötigte, entschieden wir, das Interview in einem Monat anzusetzen.

Während ich die Unterlagen vorbereitete, besprach ich parallel mit dem Recruiter das bevorstehende Interview. Ein Standardinterview bei Google besteht aus 4 algorithmischen und einem Systemdesign-Interview. Da ich mich als Android-Entwickler bewarb, wurde mir gesagt, dass ein Teil des Interviews spezifisch auf Android ausgerichtet sein würde. Welche Aspekte genau und inwiefern die Spezifikationen liegen würden, konnte ich vom Recruiter nicht herausbekommen. Soweit ich verstanden habe, wurde das relativ neu eingeführt und er war selbst nicht wirklich im Bilde. Außerdem wurde ich für zwei Trainingssitzungen angemeldet: wie man ein algorithmisches Interview und wie man ein Systemdesign-Interview besteht. Die Sitzungen waren von mittlerem Nutzen. Auch dort konnte mir niemand sagen, was bei Android-Entwicklern gefragt wird. Daher bestand meine Vorbereitung in diesem Monat aus Folgendem:

  • Dem Kauf eines Whiteboards und dem visuellen Festhalten von 2-3 Dutzend der beliebtesten Algorithmen aus dem Gedächtnis. Täglich 3-5 Stück. Insgesamt wurde jeder mehrere Male aufgeschrieben.
  • Auffrischung meines Wissens über verschiedene Informationen zu Android, die ich nicht täglich nutze.
  • Dem Ansehen mehrerer Videos über Big Scale und ähnliches.

Wie ich bereits sagte, habe ich parallel dazu die Dokumente für die Reise vorbereitet. Zunächst wurden meine Daten angefordert, um ein Einladungsschreiben zu erstellen. Dann habe ich lange versucht herauszufinden, wer in Zypern Visa für die Schweiz ausstellt, da die Schweizer Botschaft sich darum nicht kümmert. Wie sich herausstellte, ist das zuständige Konsulat das der Österreich. Ich habe angerufen und einen Termin vereinbart. Dort wurde eine Menge Dokumente verlangt, aber nichts wirklich Interessantes. Foto, Reisepass, Aufenthaltsgenehmigung, eine Menge verschiedener Bescheinigungen und natürlich das Einladungsschreiben. Währenddessen kam das Schreiben aber immer noch nicht an. Letztendlich bin ich mit einem normalen Ausdruck gegangen und das hat ganz gut funktioniert. Das schriftliche Dokument kam dann nach etwa 3 Tagen an, wobei der zyprische FedEx meinen Adress nicht finden konnte, und ich musste selbst hinfahren, um es abzuholen. Gleichzeitig habe ich ebenfalls bei FedEx ein Paket abholt, das sie mir auch nicht zustellen konnten, weil sie die Adresse nicht fanden und das seit Juni dort lag (5 Monate, Karl). Da ich nicht darüber informiert war, wusste ich natürlich auch nicht, dass sie es bei sich haben. Das Visum erhielt ich rechtzeitig, danach wurde ein Hotel für mich reserviert und mir wurden Flugoptionen angeboten. Die Optionen habe ich angepasst, um sie bequemer zu gestalten. Direkte Flüge gab es keine mehr, also bin ich über Athen hin und über Wien zurück geflogen.

Nachdem alle Formalitäten für die Reise geregelt waren, vergingen noch ein paar Tage und ich bin schließlich nach Zürich geflogen. Ich bin ohne Zwischenfälle angekommen. Vom Flughafen in die Stadt bin ich mit dem Zug gefahren – schnell und bequem. Nach einigem Umherirren in der Stadt fand ich das Hotel und checkte ein. Da das Hotel ohne Verpflegung gebucht war, habe ich in der Nähe zu Abend gegessen und bin ins Bett gefallen, da mein Flug früh morgens war und ich müde war. Am nächsten Tag frühstückte ich im Hotel (gegen Aufpreis) und machte mich auf den Weg ins Google-Büro. Insgesamt hat Google in Zürich mehrere Büros. Mein Vorstellungsgespräch fand nicht im zentralen Büro statt. Insgesamt sah das Büro ziemlich gewöhnlich aus, sodass ich nicht die Chance hatte, alle Annehmlichkeiten eines „normalen“ Google-Büros zu sehen. Ich habe mich beim Administrator registriert und gewartet. Nach einer Weile kam ein Recruiter heraus und erklärte mir den Tagesablauf, bevor er mich in den Raum führte, in dem die Interviews stattfinden sollten. Insgesamt waren 3 Interviews, eine Mittagspause und noch 2 Interviews geplant.

Interview Nummer eins

Das erste Interview war genau über Android. Und es hatte überhaupt nichts mit Algorithmen zu tun. Eine Überraschung, allerdings. Na gut, so ist es sogar vertrauter. Sie baten mich, einen bestimmten UI-Komponenten zu erstellen. Zuerst haben wir besprochen, was und wie. Ich schlug vor, eine Lösung mit RxJava zu entwickeln und erklärte, was ich genau machen würde und warum. Sie sagten, dass dies natürlich gut sei, aber lass uns doch die Mittel des Android-Frameworks verwenden. Und nebenbei schreiben wir den Code an die Tafel. Es ging nicht nur um die Komponente, sondern um die gesamte Activity, die diese Komponente verwendet. Darauf war ich nicht vorbereitet. Es ist eine Sache, einen Algorithmus mit 30-50 Zeilen an die Tafel zu schreiben, und eine andere Sache, Android-Code zu produzieren, auch wenn ich Abkürzungen und Kommentare in der Art wie „Nun, das lasse ich weg, da es offensichtlich ist“ benutze. Es wurde eine Art Mischmasch auf drei Tafeln. Das heißt, ich habe die Aufgabe gelöst, aber es sah schrecklich aus.

Interview Nummer zwei

Dieses Mal war das Interview über Algorithmen. Und es waren zwei Interviewer dabei. Einer war der eigentliche Interviewer und der andere ein junger Padawan (shadow interviewer). Es musste eine Datenstruktur mit bestimmten Eigenschaften entwickelt werden. Zuerst haben wir wie gewohnt das Problem diskutiert. Ich stellte verschiedene Fragen, der Interviewer antwortete. Nach einiger Zeit baten sie mich, ein paar Methoden der erfundenen Struktur an die Tafel zu schreiben. Diesmal gelang es mehr oder weniger, allerdings mit einigen kleinen Fehlern, die ich mit dem Hinweis des Interviewers korrigierte.

Interview Nummer drei

Diesmal ging es um Systemdesign, das sich ebenfalls als Android herausstellte. Ich musste eine Anwendung mit bestimmten Funktionen entwickeln. Wir haben die Anforderungen an die Anwendung, den Server und das Kommunikationsprotokoll besprochen. Dann begann ich zu beschreiben, welche Komponenten oder Bibliotheken ich beim Aufbau der Anwendung verwenden würde. Als ich dann den Job Scheduler erwähnte, gab es einen gewissen Stau. Der Punkt ist, dass ich ihn nie praktisch verwendet habe, da ich zu dem Zeitpunkt, als er herauskam, gerade auf die Unterstützung von Anwendungen umgeschaltet hatte, für die es keine Aufgaben zu seiner Anwendung gab. Bei der Entwicklung der nachfolgenden war es dasselbe. Das heißt, theoretisch weiß ich, was es ist, wann und wie es angewendet wird, aber ich habe keine praktische Erfahrung. Und dem Interviewer schien das nicht besonders zu gefallen. Dann baten sie mich, den Code zu schreiben. Ja, bei der Entwicklung einer Anwendung muss man sofort den Code schreiben. Wieder einmal Android-Code an die Tafel. Es sah wieder schrecklich aus.

Mittagessen

Es hätte noch eine Person kommen sollen, aber sie ist nicht erschienen. Auch Google hat manchmal Fehlschläge. Letztendlich bin ich mit dem vorherigen Interviewer, ihrer Kollegin, zum Mittagessen gegangen, und ein wenig später kam der nächste Interviewer dazu. Das Mittagessen war ganz annehmbar. Auch wenn es sich nicht um das Hauptbüro in Zürich handelte, sah die Cafeteria recht gewöhnlich aus, war aber sehr angenehm.

Interview Nummer vier

Endlich reine Algorithmen. Die erste Aufgabe habe ich ziemlich schnell und effizient gelöst, allerdings bin ich mit einem Grenzfall daneben gelegen. Aber auf Hinweise des Interviewers (er hatte den besagten Grenzfall gegeben) konnte ich das Problem finden und beheben. Natürlich musste ich den Code an der Tafel schreiben. Dann wurde mir eine ähnliche, aber schwierigere Aufgabe gestellt. Für die fand ich ein paar suboptimale Lösungen und war kurz davor, eine optimale zu finden, aber es fehlten mir 5-10 Minuten, um den Gedanken zu Ende zu bringen. Den Code dafür konnte ich nicht mehr rechtzeitig schreiben.

Interview Nummer fünf

Und wieder ein Android-Interview. Ich frage mich, warum ich das ganze Jahr über Algorithmen gelernt habe.
Zuerst gab es ein paar einfache Fragen. Dann hat der Interviewer einen Code an die Tafel geschrieben und mich gebeten, darin Probleme zu finden. Ich fand sie, erklärte und korrigierte sie. Wir haben darüber diskutiert. Danach kamen einige unerwartete Fragen in der Art von ‚Was macht die Methode Y in der Klasse X?‘, ‚Was steckt in der Methode Y?‘, ‚Was macht die Klasse Z?‘. Einiges wusste ich natürlich zu beantworten, aber dann habe ich gesagt, dass ich in letzter Zeit in meiner Arbeit nicht mit diesen Themen beschäftigt war und daher natürlich nicht mehr erinnere, wer was und wie im Detail macht. Danach hat der Interviewer gefragt, was ich aktuell mache. Die Fragen gingen dann in diese Richtung. Da habe ich schon viel besser geantwortet.

Nach dem letzten Interview wurde mir der Ausweis abgenommen, ich wurde beglückwünscht und konnte gehen. Ich habe ein wenig durch die Stadt gebummelt, zu Abend gegessen und bin ins Hotel gegangen, wo ich eingeschlafen bin, da der Flug wieder früh am Morgen war. Am nächsten Tag bin ich wohlbehalten nach Zypern gekommen. Auf Bitte des Recruiters habe ich ein Feedback zum Interview geschrieben und in einem speziellen Service das Formular für die Rückerstattung der Ausgaben ausgefüllt. Von allen Kosten übernimmt Google direkt nur die Tickets. Hotel, Essen und Transport müssen vom Kandidaten bezahlt werden. Dann füllen wir das Formular aus, fügen die Belege bei und senden es an eine spezielle Stelle. Sie bearbeiten das und überweisen das Geld ziemlich schnell auf das Konto.

Es hat anderthalb Wochen gedauert, die Ergebnisse der Interviews zu bearbeiten. Danach wurde mir mitgeteilt, dass ich "ein wenig unter dem Niveau" lag. Das heißt, ich habe etwas versagt. Genauer gesagt haben 2 Interviews gut abgeschnitten, 2 waren okay und das Systemdesign war sehr schwach. Wenn wenigstens 3 gut gewesen wären, hätte ich eine Chance gehabt, aber so hatte ich keine. Man hat mir angeboten, es in einem Jahr erneut zu versuchen.

Zunächst war ich natürlich enttäuscht, da ich viel Energie in die Vorbereitung gesteckt hatte, und zu dem Zeitpunkt des Interviews hatte ich bereits darüber nachgedacht, Zypern zu verlassen. Eine Stelle bei Google und ein Umzug in die Schweiz schienen eine ausgezeichnete Option zu sein.

Fazit

Und hier kommen wir zum abschließenden Teil des Artikels. Ja, ich habe zweimal das Interview bei Google nicht bestanden. Das ist traurig. Es wäre wahrscheinlich interessant gewesen, dort zu arbeiten. Aber man kann die Situation auch von einer anderen Seite betrachten.

  • In anderthalb Jahren habe ich eine riesige Menge an Wissen über Softwareentwicklung erworben.
  • Ich habe viel Freude daran gefunden, an Programmierwettbewerben teilzunehmen.
  • Ich habe ein paar Tage in Zürich verbracht. Wann werde ich dort wieder hingehen?
  • Ich habe interessante Erfahrung bei einem Interview in einem der größten IT-Unternehmen der Welt gesammelt.

Alles, was in diesen anderthalb Jahren passiert ist, kann man einfach als Lernen oder Übung betrachten. Und die Ergebnisse dieser Übung sind deutlich sichtbar. Mein Gedanke, Zypern zu verlassen, reifte (aus bestimmten familiären Gründen), ich habe erfolgreich mehrere Interviews bei einem anderen bekannten Unternehmen bestanden und bin nach 8 Monaten umgezogen. Aber das ist eine ganz andere Geschichte. Dennoch denke ich, dass ich Google sowohl für diese anderthalb Jahre, die ich an mir gearbeitet habe, als auch für 2 interessante Tage in Zürich danken sollte.

Was kann ich abschließend sagen? Wenn Sie in der IT arbeiten, bereiten Sie sich auf Interviews bei Google (Amazon, Microsoft, Apple usw.) vor. Vielleicht haben Sie irgendwann die Chance, dort einen Platz zu ergattern. Selbst wenn Sie es nicht wollen, wird Ihnen diese Vorbereitung nicht schaden. In dem Moment, in dem Sie erkennen, dass Sie (sei es auch nur bei günstigem Verlauf) das Interview bei einem dieser Unternehmen bestehen können, eröffnet sich Ihnen viel mehr Wege, als zu Beginn Ihrer Vorbereitung. Und alles, was Sie auf diesem Weg benötigen, ist ein Ziel, Durchhaltevermögen und Zeit. Ich wünsche Ihnen viel Erfolg 🙂

Quelle: habr.com

60GB SSD 8Gb DDR4