Preso in prestito il seguente articolo da http://get-that-job-at-google.blogspot.in/
Conoscenza del codice C / C ++ e Java sono i linguaggi di programmazione preferiti per Google Interviewer. Devi conoscerne almeno uno davvero bene. Ti verrà richiesto di scrivere codice nelle interviste sullo schermo del telefono e anche nelle interviste in loco.
Libri consigliati per interviste CS : Introduzione agli algoritmi - Di Cormen
Interviste di programmazione esposte
Cracking the Coding Interviews
Algoritmi per le interviste
Siti Web consigliati per la pratica della programmazione : InterviewStreet, Topcoder
Big-O Questo dovrebbe essere il punto di partenza nella preparazione di un'intervista algoritmica. Non devi lottare con l'analisi della complessità di base, in quanto garantirà di non essere assunto. Dovresti avere familiarità e comprendere le notazioni O, Θ e Ω. Consiglio di leggere la sezione sull'analisi della complessità dal libro Strutture di dati e algoritmi.
Ordinamento Dovresti essere in grado di scrivere algoritmi O (n * lgn) come QuickSort e MergeSort con facilità. Confronta e comprendi le complessità del caso migliore, peggiore e medio. Ho trovato questa tabella su wiki molto utile; elenca le proprietà importanti di tutti gli algoritmi di ordinamento. Non trascurare gli algoritmi di base O (n ^ 2) come Bubble sort o Insertion sort, poiché altri algoritmi migliorano su questi. Le interviste riguardano principalmente il miglioramento di un'idea di base, gli algoritmi di ordinamento aiuteranno questo processo.
Tabelle hash In caso di dubbi, pensa alle tabelle hash. Sono utili nella maggior parte dei problemi e spesso ci aiutano a migliorare la complessità temporale di alcuni problemi memorizzando nella cache i risultati.
Alberi Esegui algoritmi di base per la costruzione degli alberi, l'attraversamento e la manipolazione. Dovresti essere in grado di implementare algoritmi basati su alberi di ricerca binari. Dovresti avere familiarità con gli alberi bilanciati anche se non devi scrivere codice per loro nell'intervista: alberi AVL, alberi Rosso-Nero, alberi Trie, n-ary ecc. È necessaria una conoscenza approfondita degli attraversamenti inorder, postorder e preorder, perché possiamo risolvere molti problemi agli alberi facendo semplici modifiche a uno di questi attraversamenti.
Grafici I
grafici sono un concetto molto importante in Informatica. Esercitati con le tre rappresentazioni di base dei grafici (oggetti e puntatori, matrice ed elenco di adiacenza) e familiarizza con i loro pro e contro. Durante l'intervista non c'è molto tempo, quindi non dovresti aspettarti qualcosa di molto complesso. Tuttavia, gli algoritmi di attraversamento dei grafici di base (DFS e BFS) sono indispensabili, è necessario implementarli in tutte le rappresentazioni di base. Dovresti essere in grado di implementare gli algoritmi Dijkstra o Floyd-Warshall e gli algoritmi di spanning tree minimi (Kruskal e Prim). Informazioni sull'ordinamento topologico, poiché è sorprendentemente molto utile in molti problemi di ordinamento.
Programmazione dinamica Questo è probabilmente l'argomento più importante in quanto le implementazioni sono piccole. Dovresti essere in grado di implementare 2-3 algoritmi dinamici per un tempo di 35-40 minuti. Man mano che controlli le risorse su questo blog o sul Web, scoprirai che dovresti aspettarti almeno una domanda di programmazione dinamica per intervista.
Sistemi operativi Informazioni su processi, thread e problemi di concorrenza. Conosci mutex, semafori, monitor e come funzionano. Scopri cosa sono deadlock e livelock e come evitarli. Informazioni sul cambio di contesto, sulla pianificazione, ecc.
Matematica Dovresti familiarizzare con il conteggio, la combinatoria e la probabilità.
Pubblicazioni di Google Leggi le pubblicazioni innovative di Google elencate di seguito se hai tempo. File system di Google
Google Bigtable
Google MapReduce