Ha preso in prestito il seguente articolo dal link
Conoscenza delle codifiche C / C ++ e Java sono i linguaggi di programmazione preferiti per Google Interviewers. Devi conoscerne almeno uno veramente bene. Dovrai scrivere il codice anche nelle interviste sullo schermo del telefono e nelle interviste sul posto.
Libri consigliati per interviste CS :
Introduzione agli algoritmi - Di Cormen
Interviste di programmazione esposte
Cracking the Coding Interviews
Algoritmi per interviste
Siti web consigliati per la pratica della codifica : InterviewStreet, Topcoder
Big-O Questo dovrebbe essere il punto di partenza nella preparazione di un colloquio algoritmico. Non devi lottare con l'analisi di complessità di base, poiché garantirà che non vengano assunti. Dovresti essere familiare e capire le notazioni O, Θ e Ω. Consiglio di leggere la sezione sull'analisi della complessità dal libro Data Structures and Algorithms.
Ordinamento Dovresti riuscire a scrivere gli algoritmi O (n * lgn) come QuickSort e MergeSort con facilità. Confrontare e comprendere le complessità del caso migliore, peggiore e medio. Ho trovato questa tabella su wiki molto utile; elenca importanti proprietà 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 si concentrano maggiormente sul miglioramento di un'idea di base, gli algoritmi di ordinamento aiuteranno in questo processo.
Tabelle hash in caso di dubbio, pensa alle tabelle hash. Sono utili nella maggior parte dei problemi e spesso ci aiutano a migliorare la complessità temporale di alcuni problemi memorizzando i risultati nella cache.
Alberi Passa attraverso gli algoritmi di costruzione dell'albero, traversal e manipolazione di base. Dovresti essere in grado di implementare algoritmi basati su alberi di ricerca binari. Dovresti avere familiarità con gli alberi bilanciati anche se non ti è richiesto di scrivere il codice per loro nell'intervista: alberi AVL, alberi Red-Black, alberi Trie, n-ary ecc. È necessaria una conoscenza approfondita degli attraversamenti inorder, postorder e preordinati, perché siamo in grado di risolvere molti problemi ad albero eseguendo semplici modifiche a uno di questi attraversamenti.
Grafici
I grafici sono un concetto molto importante in Informatica. Pratica le tre rappresentazioni di base dei grafici (oggetti e puntatori, matrice e lista di adiacenza) e familiarizza con i loro pro e amp; cons.
Non c'è molto tempo durante l'intervista, quindi non dovresti aspettarti qualcosa di molto complesso. Tuttavia, gli algoritmi di attraversamento grafico di base (DFS e BFS) sono un must, dovresti 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). Scopri l'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 durante 35-40 minuti. Come verificherete le risorse su questo blog o sul web, troverete che dovreste aspettarvi almeno una domanda di programmazione dinamica per colloquio.
Sistemi operativi Informazioni su processi, thread e problemi di concorrenza. Conoscere mutex, semafori, monitor e come funzionano. Comprendi cosa sono deadlock e livelock e come evitarli. Ulteriori informazioni sul cambio di contesto, la pianificazione ecc.
Matematica dovresti familiarizzare con il conteggio, la combinatoria e la probabilità.
Pubblicazioni di Google Leggi le pubblicazioni di Google che descrivono i tuoi problemi sotto elencati se hai tempo.
Google File System
Google Bigtable
Google MapReduce