
Der Artikelüberschrift mag wie ein epischer Fehlschlag klingen, doch die Realität ist vielschichtiger. Insgesamt endete diese Geschichte recht positiv, wenn auch nicht bei Google. Aber das ist ein Thema für einen anderen Artikel. In diesem Artikel werde ich drei Dinge besprechen: wie mein Vorbereitungprozess verlief, wie die Interviews bei Google abliefen und warum alles meiner Meinung nach nicht so eindeutig ist, wie es scheint.
Wie alles begann
An einem kalten winterlichen Abend in Zypern kam mir plötzlich der Gedanke, dass mein Wissen in klassischer Informatik weit von durchschnittlich entfernt ist, und ich musste etwas dagegen unternehmen. Falls jemand nicht bereits gelesen hat, warum der Abend in Zypern kalt ist, kann dies hier nachgelesen werden. . Nach einigem Überlegen entschied ich mich, zunächst einen Online-Kurs über Algorithmen und Datenstrukturen zu belegen. Von einem ehemaligen Kollegen hatte ich von dem Kurs von Robert Sedgewick auf Coursera gehört. Der Kurs besteht aus zwei Teilen ( und ). Wenn sich die Links ändern, kann man immer den Namen des Autors googeln. Jedes der Teile dauert 6 Wochen. Zu Beginn der Woche werden Vorlesungen gehalten, und während der Woche müssen zusätzlich Ü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 reiflicher Überlegung bin ich zu dem Schluss gekommen, dass dies genau das ist, was ich brauche. Hier könnte ein neugieriger Leser fragen, was Google damit zu tun hat. Und das ist berechtigt, denn bis zu diesem Punkt hatte es überhaupt nichts damit zu tun. Aber ich brauchte ein Ziel, da es etwas schwierig ist, 12 Wochen abends ohne Ziel zu lernen. Und welches Ziel kann es bei dem Erwerb neuen Wissens geben? Natürlich ihre praktische Anwendung. Im Alltag gestaltet sich das recht problematisch, aber bei einem Vorstellungsgespräch in einem großen Unternehmen ist es problemlos möglich. Eine schnelle Google-Suche zeigte, dass Google (bitte entschuldigen Sie die Tautologie) eines der größten Unternehmen in Europa ist (und ich hatte speziell Europa im Blick), in dem solche Vorstellungsgespräche abgehalten werden. Ihr Büro befindet sich in Zürich, Schweiz. Also steht fest – wir lernen und bewerben uns bei Google.
Vorbereitung auf den ersten Versuch
12 Wochen sind wie im Flug vergangen, und ich habe beide Kurse abgeschlossen. Mein Eindruck von den Kursen ist durchweg positiv, und ich kann sie jedem Interessierten empfehlen. Ich mochte die Kurse aus folgenden Gründen:
- Der Dozent spricht ein deutliches Englisch
- Das Material ist gut strukturiert
- Fantastische Präsentationen, die die Funktionsweise jedes Algorithmus veranschaulichen
- Sorgfältige Auswahl des Materials
- Interessante Übungen
- Die Übungen werden automatisch auf der Website überprüft, danach wird ein Bericht erstellt
Meine Arbeit an den Kursen verlief in der Regel folgendermaßen: Ich hörte die Vorlesungen innerhalb von 1-2 Tagen. Danach absolvierte ich einen kurzen Test, um mein Wissen zu überprüfen. Den Rest der Woche arbeitete ich an der Übung in mehreren Iterationen. Nach der ersten Runde erzielte ich 30-70 %, die folgenden Runden brachten mein Ergebnis auf 97-100 %. Die Übung bestand normalerweise darin, einen Algorithmus zu implementieren, zum Beispiel oder .
Nach dem Abschluss der Kurse wurde mir bewusst, dass Wissen oft mit vielen Sorgen verbunden ist. Während ich früher nur wusste, dass ich nichts weiß, beginne ich nun zu erkennen, was genau ich nicht weiß.
Da es erst Mai war und ich das Interview für den Herbst geplant hatte, entschied ich mich, meine Ausbildung fortzusetzen. Nach der Durchsicht der Anforderungen der Stelle traf ich die Entscheidung, parallel in zwei Bereichen weiterzumachen: Ich wollte mein Wissen über Algorithmen vertiefen und einen Grundkurs im Bereich maschinelles Lernen absolvieren. Für das erste Ziel entschied ich mich, von Kursen zu einem Buch zu wechseln und wählte das monumentale Werk von Steven Skiena 'Algorithmen. Handbuch zur Entwicklung' (The Algorithm Design Manual). Nicht so monumentales wie das von Knuth, aber dennoch beeindruckend. Für das zweite Ziel ging ich erneut zu Coursera und meldete mich für den Kurs von Andrew Ng an. .
Drei Monate später hatte ich den Kurs und das Buch abgeschlossen.
Fangen wir mit dem Buch an. Das Lesen war ziemlich interessant, wenn auch nicht einfach. Im Prinzip würde ich das Buch empfehlen, aber nicht sofort. Insgesamt bietet das Buch eine tiefere Analyse dessen, was ich in den Kursen gelernt habe. Darüber hinaus habe ich mir (formal betrachtet) Dinge wie Heuristik und dynamische Programmierung erschlossen. Natürlich habe ich sie früher verwendet, aber ich wusste nicht, wie sie heißen. In dem Buch gibt es auch einige Anekdoten aus dem Leben des Autors (War Story), die die akademische Darstellungsweise etwas auflockern. Die zweite Hälfte des Buches kann man übrigens überspringen, da es eher eine Beschreibung bestehender Probleme und Lösungen darstellt. Es ist nützlich, wenn man es regelmäßig in der Praxis anwendet, ansonsten vergisst man es sofort.
Der Kurs hat mich mehr als erfreut. Der Dozent weiß offensichtlich, wovon er spricht, und erklärt die Inhalte spannend. Zudem hatte ich einen Großteil des Stoffes, insbesondere die lineare Algebra und die Grundlagen neuronaler Netze, noch aus der Universität im Gedächtnis, weshalb ich keine besonderen Schwierigkeiten hatte. Die Struktur des Kurses ist recht standardmäßig. Er ist in Wochen gegliedert. In jeder Woche beginnen die Lektionen, abwechselnd mit kurzen Tests. Nach den Vorlesungen wird eine Aufgabe gestellt, die man erledigen und einreichen muss, und sie wird automatisch überprüft. Kurz gesagt, die Themen, die im Kurs behandelt werden, sind folgende:
— Kostenfunktion
— lineare Regression
— Gradientabstieg
— Merkmalsnormalisierung
— normale Gleichung
— logistische Regression
— Mehrklassenklassifikation (one vs all)
— neuronale Netze
— Rückpropagation
— Regularisierung
— Bias/Varianz
— Lernkurven
— Fehlerkennzahlen (Präzision, Recall, F1)
— Support Vector Machines (large margin classification)
— K-means
— Hauptkomponentenanalyse
— Anomalieerkennung
— kollaboratives Filtern (Empfehlungssystem)
— stochastische, Mini-Batch- und Batch-Gradientabstiege
— Online-Lernen
— MapReduce
— Deckelanalyse
Nach dem Abschluss des Kurses hatte ich ein Verständnis für all diese Themen. Nach zwei Jahren habe ich jedoch fast alles vergessen. Ich empfehle ihn für diejenigen, die mit maschinellem Lernen nicht vertraut sind und ein gutes Verständnis der grundlegenden Konzepte für den weiteren Fortschritt erhalten möchten.
Erster Versuch
Es war bereits September und es wurde Zeit, über Vorstellungsgespräche nachzudenken. Da es nicht einfach war, sich über die Website zu bewerben, begann ich, nach Bekannten zu suchen, die bei Google arbeiten. Ich entschied mich für , 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 mir vorschlug, einen Slot in seinem Kalender für das erste Gespräch zu buchen. Ein paar Tage später fand der Anruf statt. Wir versuchten, über Hangouts zu kommunizieren, aber die Qualität war schrecklich, also wechselten wir zum Telefon. Zuerst besprachen wir schnell die standardmäßigen Fragen, wie, warum und wozu, dann gingen wir zu dem technischen Screening über. Dieses bestand aus einer Reihe von Fragen wie „Was ist die Komplexität eines Inserts in eine Hashmap?“ und „Welche balancierten Bäume kennen Sie?“ Nicht schwer, wenn man ein grundlegendes Wissen über diese Themen hat. Das Screening verlief gut, und aufgrund der Ergebnisse beschlossen wir, in etwa einer Woche ein erstes Interview zu organisieren.
Das Interview fand ebenfalls über Hangouts statt. Zunächst haben wir etwa 5 Minuten über mich gesprochen, dann sind wir zu der Aufgabe übergegangen. Die Aufgabe betraf Graphen. Ich habe schnell verstanden, was zu tun war, aber ich wählte nicht den richtigen Algorithmus. Als ich anfing, den Code zu schreiben, wurde mir das klar und ich wechselte zu einer anderen Methode, die ich dann auch vollendete. Der Interviewer stellte einige Fragen zur Komplexität des Algorithmus und fragte, ob es schneller ginge. Irgendwie hatte ich einen Aussetzer und konnte nicht weiterhelfen. Damit war die Zeit um und wir verabschiedeten uns. Etwa 10 Minuten später kam mir der Gedanke, dass man in dieser speziellen Aufgabe anstelle des verwendeten Dijkstra-Algorithmus auch die Breitensuche hätte einsetzen können, was schneller gewesen wäre. Nach einer Weile rief der Recruiter an und sagte, das Interview sei insgesamt gut gelaufen und dass ein weiteres organisiert werden sollte. Wir haben uns auf nächste Woche geeinigt.
Diesmal lief es schlechter. Während der erste Interviewer freundlich und gesprächig war, war der zweite etwas düster. Ich konnte die Aufgabe sofort nicht ganz erkennen, obwohl die Ideen, die ich nannte, grundsätzlich zu einer Lösung führen konnten. Nach ein paar Hinweisen des Interviewers kamen mir schließlich die richtigen Gedanken. Wieder handelte es sich um eine Breitensuche, aber aus mehreren Punkten. Ich schrieb die Lösungen, hielt mich an die Zeitvorgabe, aber vergaß die Grenzfälle. Nach einer Weile rief der Recruiter an und informierte mich, dass der Interviewer diesmal unzufrieden war, da ihm meine Antworten seiner Meinung nach zu viele Hinweise (3 oder 4 Stück) benötigten und ich während des Schreibens ständig den Code änderte. Nach zwei Interviews wurde entschieden, den Prozess nicht fortzusetzen und das nächste Interview auf ein Jahr zu verschieben, falls ich das Bedürfnis habe. Daraufhin verabschiedeten wir uns.
Aus dieser Geschichte habe ich einige Lehren gezogen:
- Theorie ist gut, aber man muss schnell damit umgehen können.
- Theorie ohne Praxis hilft nicht. Man muss Probleme lösen und das Programmieren zur Gewohnheit machen.
- Viel hängt vom Interviewer ab. Daran kann man nichts ändern.
Vorbereitung auf den zweiten Anlauf
Nach reiflicher Überlegung habe ich beschlossen, es in einem Jahr erneut zu versuchen und das Ziel leicht zu überarbeiten. Während zuvor das Hauptziel das Lernen war und das Interview bei Google wie eine weit entfernte Karotte erschien, war nun das Bestehen des Interviews das Ziel, und das Lernen ein Mittel zum Zweck.
Daher wurde ein neuer Plan entwickelt, der folgende Punkte umfasste:
- Die Theorie weiterhin durch das Lesen von Büchern und Artikeln zu vertiefen.
- Algorithmische Aufgaben in einer Anzahl von 500 bis 1000 zu lösen.
- Die Theorie weiterhin durch das Ansehen von Videos zu vertiefen.
- Die Theorie weiterhin durch Kurse zu vertiefen.
- Die Erfahrungen anderer Menschen beim Bestehen von Interviews bei Google zu studieren.
Ich habe den Plan innerhalb eines Jahres umgesetzt. Im Folgenden 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 genau sagen, ich habe sie sowohl auf Russisch als auch auf Englisch gelesen. Die nützlichste Seite war wohl . Hier sind viele interessante Algorithmen mit Beispielcode zusammengetragen.
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). Diese lassen sich in zwei Kategorien einteilen. Die erste umfasst die Bücher von Sedgewick und Cormen: das ist Theorie. Die anderen sind Vorbereitung auf Interviews. Sedgewick erklärt in seinem Buch ungefähr dasselbe wie in seinen Kursen – nur schriftlich. Es macht keinen besonderen Sinn, es genau zu lesen, wenn man den Kurs besucht hat, aber ein Überfliegen ist auf jeden Fall sinnvoll. Wenn man den Kurs nicht besucht hat, lohnt es sich, es zu lesen. Cormen fand ich etwas zu langweilig. Um ehrlich zu sein, hatte ich damit Mühe. Ich habe nur herausbekommen, dass , und ein paar selten verwendete Datenstrukturen (Fibonacci-Heap, van Emde Boas-Baum, Radix-Heap).
Es ist ratsam, mindestens ein Buch zur Vorbereitung auf Interviews zu lesen. Sie folgen alle einem ähnlichen Prinzip. Sie beschreiben den Interviewprozess in großen Technologieunternehmen, geben grundlegende Informationen aus der Informatik, Aufgaben zu diesen Grundlagen, Lösungen und Erklärungen der Lösungen. Von den drei genannten würde ich wahrscheinlich "Cracking the Coding Interview" als Hauptwerk empfehlen, die anderen sind optional.
Algorithmusaufgaben
Das war wahrscheinlich der interessanteste Punkt in meiner Vorbereitung. Natürlich kann man einfach Aufgaben bearbeiten. Dafür gibt es viele verschiedene Webseiten. Ich habe hauptsächlich drei verwendet: , und . Auf CodeChef sind die Aufgaben nach Schwierigkeitsgrad unterteilt, aber nicht nach Themen. Auf Hackerrank sind sie sowohl nach Schwierigkeitsgrad als auch nach Themen sortiert.
Doch wie ich schnell für mich herausfand, gibt es eine interessantere Möglichkeit. Und das sind Wettbewerbe (Programming-Challenges oder Programmierwettbewerbe). Alle drei Websites bieten diese an. Das Problem bei LeetCode ist jedoch die ungünstige Zeitzone. Daher habe ich an dieser Plattform nicht teilgenommen. Hackerrank und CodeChef bieten eine recht große Anzahl verschiedener Wettbewerbe an, die von 1 Stunde bis zu 10 Tagen dauern. Verschiedene Formate haben unterschiedliche Regeln, und darüber könnte man lange sprechen. Der Hauptgrund, warum Wettbewerbe vorteilhaft sind, ist die Integration eines wettbewerbsorientierten (ja, das ist wieder eine tautologische Aussage) Elements in den Lernprozess.
Insgesamt habe ich an 37 Wettbewerben auf Hackerrank teilgenommen. Davon waren 32 wettbewerbsfähig, während 5 entweder gesponsert (ich habe sogar 25$ in einem von ihnen erhalten) oder nur aus Spaß waren. In den wettbewerbsfähigen Wettbewerben war ich 10 Mal in den Top 4%, 11 Mal in den Top 12% und 5 Mal in den Top 25%. Meine besten Ergebnisse waren 27/1459 in einem dreistündigen und 22/9721 in einem einwöchigen Wettbewerb.
Zu CodeChef bin ich gewechselt, als die Wettbewerbe auf Hackerrank seltener stattfanden. Insgesamt konnte ich an 5 Wettbewerben teilnehmen. Mein bestes Ergebnis war 426/5019 in einem zehn Tage dauernden Wettbewerb.
Insgesamt habe ich bei Wettbewerben und einfach so über 1000 Aufgaben gelöst, was in meinen Plan passte. Jetzt habe ich leider keine freie Zeit mehr, um meine Wettkampfaktivitäten fortzusetzen, ebenso fehlt mir das Ziel, für das ich meine freie Zeit opfern könnte. Aber es hat Spaß gemacht. Ich empfehle allen, die daran interessiert sind, Gleichgesinnte zu finden. Zu zweit oder in einer Gruppe macht es viel mehr Spaß. Ich habe das mit einem Freund gemacht, sodass es vielleicht auch deshalb so gut lief.
Video ansehen
Nachdem ich das Buch von Skiena gelesen habe, habe ich grundsätzlich Interesse an dem geweckt, 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. . Ich kann nicht sagen, dass es mir sehr gefallen hat. Erstens war die Videoqualität nicht besonders gut. Zweitens habe ich die Aufgaben, die im Kurs behandelt werden, nicht selbst versucht zu lösen. Daher war mein Engagement nicht sehr hoch.
Außerdem bin ich während des Lösens der Aufgaben 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 , wo er Analysen verschiedener Algorithmen veröffentlicht. Zum Zeitpunkt dieses Artikels enthält der Kanal 103 Videos. Und man muss sagen, die Analysen sind wirklich gut gemacht. Ich habe versucht, andere Autoren zu sehen, aber das hat mir irgendwie nicht gefallen. Daher kann ich diesen Kanal auf jeden Fall empfehlen.
Durchführung von Kursen
Hier habe ich mich nicht besonders beschäftigt. Ich habe Videos aus dem Android Developer Nanodegree von Google angesehen und einen Kurs von ITMO absolviert. . Der Nanodegree ist ganz in Ordnung, obwohl ich natürlich nichts Neues daraus gelernt habe. Der Kurs von ITMO war theoretisch etwas abrupt, aber die Aufgaben waren interessant. Ich würde nicht empfehlen, damit anzufangen, aber die Zeit dafür war in der Tat nicht verschwendet.
Erfahrungen anderer lernen
Natürlich haben viele Menschen versucht, zu Google zu kommen. Manche haben es geschafft, andere nicht. Einige haben darüber Artikel geschrieben. Aus interessanten Dingen würde ich wahrscheinlich und . Im ersten Fall hat die Person eine Liste erstellt, was sie lernen muss, um Software Engineer zu werden und zu Google zu kommen. Am Ende kam sie zu Amazon, aber das ist nicht so wichtig. Das zweite Handbuch wurde von der Google-Ingenieurin Larissa Agarova geschrieben (). Neben diesem Dokument kann man auch .
Es ist sinnvoll, die Bewertungen zu Vorstellungsgesprächen auf Glassdoor zu lesen. Sie sind alle mehr oder weniger ähnlich, aber es kann nützliche Informationen geben, die man herausholen kann.
Ich werde keine Links zu anderen kleinen Artikeln bereitstellen, Sie können diese selbst gut in Google finden.
Zweite Runde
Und hier ist ein Jahr vergangen. Es war ein ziemlich intensives Jahr in Bezug auf das Lernen. Aber ich habe mich dem neuen Herbst mit viel tiefgründigeren theoretischen Kenntnissen und bewährten praktischen Fähigkeiten genähert. Bis zum Ablauf des mir gesetzten Vorbereitungsjahres blieben noch einige Wochen, als plötzlich eine E-Mail von einem Recruiter von Google in meinem Posteingang landete, in der er fragte, ob ich immer noch Interesse hätte, bei Google zu arbeiten, und ob ich bereit sei, mit ihm zu sprechen. Natürlich war ich nicht dagegen. Wir haben vereinbart, in einer Woche zu telefonieren. Auch wurde ich um einen aktualisierten Lebenslauf gebeten, zu dem ich eine kurze Beschreibung dessen, was ich im letzten Jahr bei der Arbeit und generell gemacht habe, hinzugefügt habe.
Nach einem Gespräch über das Leben haben wir beschlossen, dass in einer Woche ein Hangouts-Interview stattfinden wird, ganz wie im letzten Jahr. Eine Woche verging, es war Zeit für das Interview, aber der Interviewer erschien nicht. Zehn Minuten vergingen, ich begann 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 ihm wurde kurzfristig ein Ersatz zugewiesen. Die Person war sowohl bei der Computer-Einrichtung als auch bei der Durchführung des Interviews nicht ganz vorbereitet. Aber dann lief alles gut. Ich löste die Aufgabe schnell, beschrieb, wo mögliche Fallstricke liegen könnten und wie man diese umgehen kann. Wir diskutierten verschiedene Lösungsansätze der Aufgabe und die Komplexität des Algorithmus. Danach haben wir noch fünf Minuten geplaudert, der Ingenieur berichtete von seinen Eindrücken aus der Arbeit in München (in Zürich konnte offenbar kein schneller Ersatz gefunden werden), und damit trennten wir uns.
Am selben Tag kontaktierte mich ein Recruiter und teilte mir mit, dass das Interview hervorragend verlaufen ist und sie bereit sind, mich zu einem Vorstellungsgespräch ins Büro einzuladen. Am nächsten Tag führten wir ein Gespräch über Hangouts und besprachen die Einzelheiten. Da ich ein Visum benötigte, beschlossen wir, das Interview in einem Monat anzusetzen.
Während ich die Unterlagen vorbereitete, diskutierte ich gleichzeitig mit dem Recruiter über das bevorstehende Interview. Ein Standardinterview bei Google besteht aus vier algorithmischen Aufgaben und einer Systemdesign-Frage. Da ich mich jedoch als Android-Entwickler bewarb, wurde mir gesagt, dass ein Teil des Interviews spezifisch für Android sein wird. Welche Aspekte genau behandelt werden und inwiefern die Spezifika bestehen, konnte ich vom Recruiter nicht herausfinden. Soweit ich verstanden habe, wurde das relativ neu eingeführt, und er war selbst nicht sehr informiert darüber. Außerdem wurde ich für zwei Trainingseinheiten angemeldet: eine zum Thema algorithmisches Interview und eine zum Systemdesign-Interview. Die Sitzungen waren von mittlerem Nutzen. Auch dort konnte mir niemand genau sagen, welche Fragen Android-Entwickler gestellt bekommen. Daher bestand meine Vorbereitung in diesem Monat darin,
- eine Flipchart zu kaufen und darauf aus dem Gedächtnis 2-3 Dutzend der bekanntesten Algorithmen zu notieren. Jeden Tag 3-5 Stück. Insgesamt wurden alle mehrere Male aufgeschrieben.
- mein Gedächtnis über verschiedene Informationen zu Android aufzufrischen, die ich nicht täglich verwende.
- einige Videos über Big Scale und Ähnliches anzusehen.
Wie ich bereits erwähnt habe, habe ich parallel dazu die Dokumente für die Reise vorbereitet. Zuerst wurden meine Daten angefordert, um das Einladungsschreiben zu erstellen. Dann habe ich lange versucht herauszufinden, wer auf Zypern Visa für die Schweiz ausstellt, da die Schweizer Botschaft sich nicht darum kümmert. Wie sich herausstellte, ist das Konsulat von Österreich dafür zuständig. Ich habe dort angerufen und einen Termin vereinbart. Dort wurden eine Menge Dokumente angefordert, aber nichts wirklich Aufregendes. Foto, Reisepass, Aufenthaltsgenehmigung, eine Menge verschiedener Bescheinigungen und natürlich das Einladungsschreiben. In der Zwischenzeit kam das Schreiben einfach nicht an. Letztlich bin ich mit einem einfachen Ausdruck gefahren und das hat gut funktioniert. Das eigentliche Schreiben kam dann nach etwa 3 Tagen an, und der zypriotische FedEx konnte meine Adresse nicht finden, sodass ich selbst dorthin fahren musste. Dabei habe ich auch ein Paket bei FedEx abgeholt, das sie mir ebenfalls nicht zustellen konnten, weil sie die Adresse nicht fanden, und das seit Juni (5 Monate, Carl) dort lag. Da ich nichts davon wusste, habe ich natürlicherweise auch nicht angenommen, dass sie es bei sich hatten. Ich habe das Visum rechtzeitig erhalten, danach wurde mir ein Hotel reserviert und ich bekam Flugvorschläge. Diese habe ich so angepasst, dass es bequemer war. Direkte Flüge waren schon ausgebucht, also bin ich über Athen dorthin und über Wien zurückgeflogen.
Nachdem alle Formalitäten für die Reise geklärt waren, vergingen noch ein paar Tage, und ich bin schließlich nach Zürich geflogen. Ich kam ohne Zwischenfälle an. Vom Flughafen fuhr ich bequem und schnell mit dem Zug in die Stadt. Nach einigem Umherirren fand ich mein Hotel und checkte ein. Da das Hotel ohne Verpflegung gebucht war, aß ich in der Nähe zu Abend und fiel ins Bett, da mein Flug am Morgen 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. In Zürich hat Google mehrere Büros. Mein Vorstellungsgespräch fand nicht im zentralen Büro statt. Insgesamt sah das Büro recht gewöhnlich aus, sodass ich nicht die ganzen Annehmlichkeiten eines „normalen“ Google-Büros sehen konnte. Ich registrierte mich beim Empfang und wartete. Nach einer Weile kam ein Recruiter heraus und erklärte mir den Tagesablauf, danach führte er mich in den Raum, in dem die Interviews stattfinden sollten. Insgesamt waren 3 Interviews, ein Mittagessen und noch 2 Interviews geplant.
Interview Nummer eins
Das erste Interview drehte sich um Android und hatte überhaupt nichts mit Algorithmen zu tun. Eine Überraschung, aber naja, so ist es eigentlich gewohnter. Sie haben mich gebeten, ein bestimmtes UI-Element zu erstellen. Zuerst haben wir besprochen, was und wie. Ich schlug vor, eine Lösung mit RxJava zu entwickeln und erklärte, was ich tun würde und warum. Sie sagten, das sei zwar gut, aber lass uns die Funktionen des Android-Frameworks nutzen. Und gleichzeitig sollten wir den Code an die Tafel schreiben. Und nicht nur für das Komponente, sondern für die ganze Activity, die dieses Element verwendet. Darauf war ich nicht vorbereitet. Es ist eine Sache, einen Algorithmus mit 30-50 Zeilen an die Tafel zu schreiben, aber etwas ganz anderes, Android-Code zu schreiben, auch wenn ich die Teile und Kommentare weglasse mit dem Gedanken „Das muss ich nicht hinschreiben, das ist offensichtlich“. Das Ergebnis war ein totaler Mischmasch auf 3 Tafeln. Ich habe die Aufgabe zwar gelöst, aber es sah unordentlich aus.
Interview Nummer zwei
Das Interview drehte sich dieses Mal um Algorithmen und es waren zwei Interviewer anwesend. Einer war der Hauptinterviewer und der andere ein junger Padawan (shadow interviewer). Wir sollten eine Datenstruktur mit bestimmten Eigenschaften entwerfen. Zuerst diskutierten wir wie gewohnt das Problem. Ich stellte verschiedene Fragen, und der Interviewer antwortete. Nach einer gewissen Zeit wurde ich gebeten, mehrere Methoden der erdachten Struktur an die Tafel zu schreiben. Diesmal lief es ganz gut, obwohl ich ein paar kleinere Fehler machte, die ich mit den Hinweisen des Interviewers korrigierte.
Interview Nummer drei
Diesmal ging es um Systemdesign, das sich überraschenderweise ebenfalls um Android drehte. Wir mussten eine App mit bestimmten Funktionen entwickeln. Wir besprachen die Anforderungen an die App, den Server und das Kommunikationsprotokoll. Danach begann ich zu beschreiben, welche Komponenten oder Bibliotheken ich beim Aufbau der App verwenden würde. Als dann der Job Scheduler zur Sprache kam, gab es jedoch eine kleine Hürde. Die Sache ist die: Ich habe ihn in der Praxis nie verwendet, da ich zu dem Zeitpunkt, als er herauskam, gerade auf die Unterstützung von Apps umgestellt hatte, bei denen es keine Aufgaben für seine Anwendung gab. Bei der Entwicklung der nächsten Apps war es dasselbe. Ich weiß also theoretisch, was das ist, wann und wie es angewendet wird, aber ich habe keine praktische Erfahrung damit. Und das schien dem Interviewer nicht besonders zu gefallen. Danach wurde ich gebeten, Code zu schreiben. Ja, bei der Entwicklung einer App muss man sofort Code schreiben. Wieder einmal Android-Code an der Tafel. Es sah wieder nicht so gut aus.
Mittagessen
Es sollte noch eine Person kommen, doch sie erschien nicht. Auch Google hat seine Pannen. Letztendlich ging ich zum Mittagessen mit dem vorherigen Interviewer, ihrer Kollegin, und kurz darauf gesellte sich der nächste Interviewer dazu. Das Mittagessen war ziemlich ordentlich. Da dies nicht das Hauptbüro in Zürich war, sah die Kantine ziemlich gewöhnlich aus, obwohl sie sehr einladend war.
Interview Nummer vier
Endlich reine Algorithmen. Die erste Aufgabe konnte ich recht schnell und effizient lösen, obwohl ich einen Grenzfall übersehen habe. Doch mit dem Hinweis des Interviewers (er nannte diesen Grenzfall) fand ich das Problem und behob es. Natürlich musste ich den Code auf der Tafel schreiben. Dann erhielt ich eine ähnliche, aber schwierigere Aufgabe. Dafür fand ich ein paar suboptimale Lösungen und kam fast auf eine optimale, ich hätte nur 5–10 Minuten gebraucht, um den Gedanken abzuschließen. Für den Code hatte ich dann keine Zeit mehr.
Interview Nummer fünf
Und wieder ein Android-Interview. Interessant, warum habe ich das ganze Jahr über Algorithmen gelernt?
Zuerst gab es einige einfache Fragen. Dann schrieb der Interviewer Code an die Tafel und bat mich, Probleme darin zu finden. Ich fand sie, erklärte und korrigierte sie. Wir diskutierten darüber. Danach kamen einige unerwartete Fragen, wie „Was macht die Methode Y in der Klasse X?“, „Was passiert in der Methode Y?“, und „Was macht die Klasse Z?“. Ich konnte einige Fragen beantworten, gestand aber, dass ich in letzter Zeit nicht mit diesen Themen gearbeitet habe und daher nicht mehr genau wusste, wer, was und wie im Detail macht. Danach erkundigte sich der Interviewer, was ich derzeit mache. Und die Fragen bewegten sich in diesem Bereich. Hier konnte ich schon viel besser antworten.
Nach dem letzten Interview wurde mir der Ausweis abgenommen, man wünschte mir viel Glück und schickte mich auf den Weg. Ich habe ein wenig in der Stadt spaziert, zu Abend gegessen und bin dann in das Hotel gegangen, wo ich schnell schlafen musste, da mein Flug am nächsten Morgen wieder früh ging. Am nächsten Tag kam ich problemlos auf Zypern an. Auf Anfrage des Recruiters habe ich ein Feedback zum Interview geschrieben und ein Formular in einem speziellen Service für die Rückerstattung der Ausgaben ausgefüllt. Von allen Ausgaben bezahlt Google direkt nur die Flugtickets. Unterkunft, Essen und Transport müssen vom Kandidaten selbst getragen werden. Dann füllen wir das Formular aus, fügen die Quittungen bei und senden es an die zuständige Stelle. Diese bearbeiten es und überweisen das Geld relativ schnell auf das Konto.
Die Bearbeitung der Interviewergebnisse dauerte anderthalb Wochen. Danach wurde mir mitgeteilt, dass ich „ein wenig unter dem Niveau“ war. Das heißt, ich habe nicht ganz gereicht. Genauer gesagt, 2 Interviews liefen gut, 2 liefen nicht so gut, und das Systemdesign war sehr schlecht. Wenn wenigstens 3 gut gelaufen wären, hätte ich eine Chance gehabt, aber so sieht es schlecht aus. Man bot mir an, es in einem Jahr erneut zu versuchen.
Zunächst war ich natürlich enttäuscht, da ich viel Mühe in die Vorbereitung gesteckt hatte und ich bereits überlegte, Zypern zu verlassen, als das Interview stattfand. Ein Job bei Google und ein Umzug in die Schweiz schienen eine hervorragende Option zu sein.
Fazit
Hier kommen wir zum Abschluss des Artikels. Ja, ich habe das Interview bei Google zweimal nicht bestanden. Das ist bedauerlich. Es wäre wahrscheinlich interessant gewesen, dort zu arbeiten. Aber man kann die Situation auch aus einer anderen Perspektive betrachten.
- In anderthalb Jahren habe ich eine enorme Menge an Wissen über Softwareentwicklung gewonnen.
- Ich hatte großen Spaß daran, an Programmierwettbewerben teilzunehmen.
- Ich habe ein paar Tage in Zürich verbracht. Wann werde ich das nächste Mal dorthin kommen?
- Ich habe interessante Erfahrungen in einem der größten IT-Unternehmen der Welt gesammelt.
Daher kann alles, was in den letzten anderthalb Jahren passiert ist, einfach als Ausbildung oder Training betrachtet werden. Die Ergebnisse dieses Trainings sind deutlich geworden. Der Gedanke, Zypern zu verlassen, reifte in mir (bedingt durch familiäre Umstände), und nach mehreren erfolgreichen Vorstellungsgesprächen bei einem anderen bekannten Unternehmen bin ich nach 8 Monaten umgezogen. Aber das ist eine ganz andere Geschichte. Trotzdem denke ich, dass ich Google sowohl für diese anderthalb Jahre, in denen ich an mir gearbeitet habe, als auch für die 2 interessanten Tage in Zürich danken sollte.
Was kann ich abschließend sagen? Wenn Sie im IT-Bereich arbeiten, bereiten Sie sich auf ein Vorstellungsgespräch bei Google (Amazon, Microsoft, Apple usw.) vor. Möglicherweise haben Sie irgendwann die Gelegenheit, dort hinzukommen. Selbst wenn Sie nicht möchten, wird Ihnen diese Vorbereitung auf jeden Fall zugutekommen. In dem Moment, in dem Sie erkennen, dass Sie (wenn auch nur bei einem glücklichen Zufall) ein Interview bei einem dieser Unternehmen bestehen können, öffnen sich Ihnen viele mehr Möglichkeiten, als zu Beginn Ihrer Vorbereitung. Alles, was Sie auf diesem Weg benötigen, ist ein Ziel, Beharrlichkeit und Zeit. Ich wünsche Ihnen viel Erfolg 🙂
Quelle: habr.com
