Foi emprestado o seguinte artigo em http://get-that-job-at-google.blogspot.in/
Conhecimento em codificação C / C ++ e Java são as linguagens de programação preferidas para os entrevistadores do Google. Você deve conhecer pelo menos um deles muito bem. Você deverá escrever código nas entrevistas na tela do telefone e também nas entrevistas no local.
Livros recomendados para entrevistas em CS : Introdução aos algoritmos - por Cormen
Entrevistas de programação expostas
Quebrando as entrevistas de codificação
Algoritmos para entrevistas
Sites recomendados para a prática de codificação : InterviewStreet, Topcoder
Big-O Esse deve ser o ponto de partida na preparação para uma entrevista algorítmica. Você não deve se esforçar com a análise básica de complexidade, pois ela garantirá não ser contratada. Você deve estar familiarizado e entender as notações O, Θ e Ω. Eu recomendo a leitura da seção sobre análise de complexidade do livro Data Structures and Algorithms.
Classificação Você deve poder escrever algoritmos O (n * lgn) como QuickSort e MergeSort com facilidade. Compare e compreenda as melhores, piores e médias complexidades de casos. Achei esta tabela no wiki muito útil; lista propriedades importantes de todos os algoritmos de classificação. Não negligencie os algoritmos O (n ^ 2) básicos, como classificação de bolha ou inserção, pois outros algoritmos melhoram sobre eles. As entrevistas são mais sobre como melhorar uma idéia básica, os algoritmos de classificação ajudarão nesse processo.
Tabelas de hash Em caso de dúvida, pense em tabelas de hash. Eles são úteis na maioria dos problemas e freqüentemente nos ajudam a melhorar a complexidade do tempo de alguns problemas, armazenando em cache os resultados.
Árvores Passa por algoritmos básicos de construção, travessia e manipulação de árvores. Você deve poder implementar algoritmos com base em árvores de pesquisa binária. Você deve estar familiarizado com as árvores balanceadas, embora não seja esperado que você escreva um código para elas na entrevista: árvores AVL, árvores preto-vermelho, árvores Trie, árvores n-árias etc. podemos resolver muitos problemas de árvores, fazendo modificações simples em um desses percursos.
Gráficos Os
gráficos são um conceito muito importante em Ciência da Computação. Pratique as três representações básicas de gráficos (objetos e ponteiros, matriz e lista de adjacências) e familiarize-se com seus prós e contras. Não há muito tempo durante a entrevista, então você não deve esperar algo muito complexo. No entanto, os algoritmos de passagem de gráfico básico (DFS e BFS) são obrigatórios; você deve implementá-los em todas as representações básicas. Você deve poder implementar os algoritmos Dijkstra ou Floyd-Warshall, bem como os algoritmos mínimos de spanning tree (Kruskal e Prim). Aprenda sobre a classificação topológica, pois é surpreendentemente muito útil em muitos problemas de pedidos.
Programação dinâmica Este é provavelmente o assunto mais importante, pois as implementações são pequenas. Você deve implementar 2-3 algoritmos dinâmicos durante um período de 35 a 40 minutos. Ao verificar os recursos deste blog ou da Web, você deve esperar pelo menos uma pergunta de programação dinâmica por entrevista.
Sistemas operacionais Aprenda sobre processos, threads e problemas de simultaneidade. Conheça mutexes, semáforos, monitores e como eles funcionam. Entenda o que são deadlock e livelock e como evitá-los. Aprenda sobre alternância de contexto, programação etc.
Matemática Você deve se familiarizar com a contagem, combinatória e probabilidade.
Publicações do Google Leia as publicações inovadoras do Google listadas abaixo, se você tiver tempo. Sistema de arquivos do Google
Google Bigtable
Google MapReduce