从http://get-that-job-at-google.blogspot.in/中借用了以下文章
编码知识 C / C ++和Java是Google Interviewer首选的编程语言。您必须至少非常了解其中之一。您将需要在电话屏幕访问和现场访问中编写代码。
CS面试的推荐书籍:算法简介-Cormen
节目采访公开
破解编码面试
面试算法
推荐的编码实践网站:InterviewStreet,Topcoder
Big-O这应该是准备算法面试的起点。您绝不能为基本的复杂性分析而苦恼,因为它将保证不会被雇用。您应该熟悉并理解O,Θ和Ω表示法。我建议阅读“数据结构和算法”书中有关复杂性分析的部分。
排序您应该能够轻松编写算法O(n * lgn),例如QuickSort和MergeSort。比较并了解最佳,最差和平均情况下的复杂性。我发现Wiki上的这张表非常方便。它列出了所有排序算法的重要属性。不要忽略像冒泡排序或插入排序这样的基本O(n ^ 2)算法,因为其他算法对此有所改进。访谈更多地是关于改善基本思想的,排序算法将有助于此过程。
哈希表如有疑问,请考虑哈希表。它们在大多数问题中很有用,并经常通过缓存结果来帮助我们改善某些问题的时间复杂性。
树木经历基本的树木构造,遍历和操纵算法。您应该能够基于二进制搜索树实现算法。您应该熟悉平衡树,尽管不希望在面试中为平衡树编写代码:AVL树,红黑树,Trie,n元树等。需要有序,后序和前序遍历的全面知识,因为我们可以通过对这些遍历之一进行简单的修改来解决许多树问题。
图
图是计算机科学中非常重要的概念。练习图形的三种基本表示形式(对象和指针,矩阵和邻接表),并熟悉它们的优缺点。面试的时间不多,所以您不要指望非常复杂的事情。但是,必须使用基本图遍历算法(DFS和BFS),您应该在所有基本表示形式中实现它们。您应该能够实现Dijkstra或Floyd-Warshall算法以及最小生成树算法(Kruskal和Prim)。了解拓扑排序,因为它在许多排序问题中非常有用。
动态编程这可能是最重要的主题,因为实现的规模很小。您应该能够在35-40分钟的时间内实现2-3个动态算法。当您检查此博客或Web上的资源时,您会发现每次面试中至少应涉及一个动态编程问题。
操作系统了解进程,线程和并发问题。了解互斥体,信号量,监视器及其工作方式。了解什么是死锁和活锁,以及如何避免死锁。了解有关上下文切换,调度等的信息。
数学您应该熟悉计数,组合数学和概率。
Google的出版物如果您有时间,请阅读下面列出的Google突破性出版物。Google文件系统
Google Bigtable
Google MapReduce