Den folgenden Artikel von http://get-that-job-at-google.blogspot.in/ ausgeliehen
Coding Knowledge C / C ++ und Java sind die bevorzugten Programmiersprachen für Google Interviewer. Sie müssen mindestens einen von ihnen wirklich gut kennen. Es wird erwartet, dass Sie Code in die Telefon-Bildschirm-Interviews und in die Vor-Ort-Interviews schreiben.
Empfohlene Bücher für CS-Interviews : Einführung in Algorithmen - Von Cormen
Programmierung Interviews ausgesetzt
Cracking the Coding Interviews
Algorithmen für Interviews
Empfohlene Websites für die Codierungspraxis : InterviewStreet, Topcoder
Big-O Dies sollte der Ausgangspunkt für die Vorbereitung eines algorithmischen Interviews sein. Sie müssen sich nicht mit grundlegenden Komplexitätsanalysen herumschlagen, da dies garantiert, dass Sie nicht eingestellt werden. Sie sollten mit den Bezeichnungen O, Θ und Ω vertraut sein und sie verstehen. Ich empfehle, den Abschnitt zur Komplexitätsanalyse aus dem Buch Datenstrukturen und Algorithmen zu lesen.
Sortieren Sie sollten in der Lage sein, mit Leichtigkeit Algorithmen O (n * lgn) wie QuickSort und MergeSort zu schreiben. Vergleichen und verstehen Sie die besten, schlechtesten und durchschnittlichen Komplexitäten. Ich fand diese Tabelle im Wiki sehr praktisch; Es listet wichtige Eigenschaften aller Sortieralgorithmen auf. Vernachlässigen Sie nicht die grundlegenden O (n ^ 2) -Algorithmen wie Bubble-Sortierung oder Insertion-Sortierung, da sich andere Algorithmen gegenüber diesen verbessern. In Interviews geht es mehr um die Verbesserung einer Grundidee. Sortieralgorithmen helfen dabei.
Hash-Tabellen Wenn Sie Zweifel haben, denken Sie an Hash-Tabellen. Sie sind bei den meisten Problemen hilfreich und helfen uns häufig, die zeitliche Komplexität einiger Probleme durch Zwischenspeichern von Ergebnissen zu verbessern.
Bäume Führen Sie grundlegende Baumkonstruktions-, Traversal- und Manipulationsalgorithmen durch. Sie sollten in der Lage sein, Algorithmen basierend auf binären Suchbäumen zu implementieren. Sie sollten mit ausgeglichenen Bäumen vertraut sein, obwohl nicht erwartet wird, dass Sie Code für sie im Interview schreiben: AVL-Bäume, rot-schwarze Bäume, Trie-Bäume, N-Bäume usw. Grundlegende Kenntnisse über Inorder-, Postorder- und Preorder-Traversals sind erforderlich, da Wir können viele Baumprobleme lösen, indem wir eine dieser Traversen einfach modifizieren.
Grafiken
Grafiken sind ein sehr wichtiges Konzept in der Informatik. Üben Sie die drei grundlegenden Darstellungen von Diagrammen (Objekte und Zeiger, Matrix und Adjazenzliste) und machen Sie sich mit deren Vor- und Nachteilen vertraut. Da während des Interviews nicht viel Zeit bleibt, sollten Sie nicht mit etwas sehr Komplexem rechnen. Grundlegende Graph-Traversal-Algorithmen (DFS und BFS) sind jedoch ein Muss. Sie sollten sie in allen grundlegenden Darstellungen implementieren. Sie sollten in der Lage sein, die Dijkstra- oder Floyd-Warshall-Algorithmen sowie die Minimum-Spanning-Tree-Algorithmen (Kruskal und Prim) zu implementieren. Informieren Sie sich über die topologische Sortierung, da sie bei vielen Bestellproblemen überraschend hilfreich ist.
Dynamische Programmierung Dies ist wahrscheinlich das wichtigste Thema, da die Implementierungen klein sind. Sie sollten in der Lage sein, 2-3 dynamische Algorithmen innerhalb von 35-40 Minuten zu implementieren. Wenn Sie die Ressourcen in diesem Blog oder im Web überprüfen, sollten Sie mindestens eine dynamische Programmierfrage pro Interview erwarten.
Betriebssysteme Erfahren Sie mehr über Prozesse, Threads und Parallelitätsprobleme. Kennen Sie Mutexe, Semaphoren, Monitore und deren Funktionsweise. Verstehe, was Deadlock und Livelock sind und wie man sie vermeidet. Erfahren Sie mehr über Kontextwechsel, Zeitplanung usw.
Mathematik Sie sollten sich mit Zählen, Kombinatorik und Wahrscheinlichkeit vertraut machen.
Googles Veröffentlichungen Lesen Sie die unten aufgeführten wegweisenden Veröffentlichungen von Google, wenn Sie Zeit haben. Google-Dateisystem
Google Bigtable
Google MapReduce