Cate:我是如何准备Google面试的

标签: 程序员 Google 排序算法 面试 | 发表时间:2012-06-04 03:34 | 作者:唐尤华
出处:http://blog.jobbole.com

导读:Cate 是一位加拿大的 软件工程师,目前就职于  Google 。本文是他在 2010 年在 Google 面试后分享的文章。

也许你可能没有参加过谷歌面试(或者没能答出面试中的一些问题),这里我会分享一下上周我的面试经历。我个人感觉良好——至少已经全力以赴了,无论结果如何都会对我有很大的帮助。

由于已经签了保密协议,因此我不会写出面试的问题。然而,我会写一下我是如何得到这个面试机会以及准备面试的过程。

首先,面试的是谷歌。如果没有在Google工作的朋友和我谈起并推荐我,我是不会应聘的。因为我“离得比较近”,因而没有参加 电话面试,直接进行了在线面试。我并不认为渥太华和滑铁卢(加拿大)离得很近(也许这是因为我没有加拿大人的距离感!),但是我确实认为与人面对面的交流会比电话面试好的多。那天我的运气特别的好,因为那天晚上的经历就像是“Ignite! Waterloo”活动,非常酷。

译注:Ignite! Waterloo:加拿大的一个社区活动,在广泛的议题上进行五分钟快速演示,展示了滑铁卢地区的极客文化。

Google interview

 

首先,我和招聘专员简单聊了聊,他/她告诉我可以使用白板,并且介绍了整个面试流程。接下来我和两个软件工程师分别进行了45分钟一对一交流。我惊奇地发现原来面试也可以这么有趣!通常我在面试的时候都会非常紧张,然而这次没有与很弱的人一起扎堆面试,这真的很酷!第一长面试的问题非常简单,第二场虽然难一点但也面得不算太差。最困难的恐怕就是在白板上编程(不能用电脑!)——在白板上很难用TDD( 测试驱动开发)!他们会告诉你不要穿正装,实际上最好也不要这么做——我费了不少时间坐在地板上写白板,身边到处都是各种记号笔。可以想象如果穿裙子会是怎样的情景!

他们提前会发一份面试需要准备的事项列表,这对我非常有帮助。虽然我大学的课程学得很好,但最好还是有针对性地复习一些专题。除了通常的准备,这里还有一些额外可以关注的内容——保持与最新的业界资讯更新,大量使用Google的产品,思考如何使用技术改变生活,撰写博客(是的,最后两项也很有帮助)。与此同时,我已经很好地掌握并运用Java 5扩展,像是 范型枚举for-each等等。

 

下面是我用来准备的相关资料:

• 读《 Effective Java (第二版)》 –——作为一名合格的Java 程序员没有任何理由不推荐这本书。

• 读《 程序员面试攻略》 并运行所有书中的例子——对于回顾类似树、列表这样的数据结构基础概念非常有帮助。我不是很喜欢递归那一章(从我自己使用的角度),我更推荐使用迭代。尽管如此,它真的是一本非常有用的好书。

• 读《 编程人生》 –——这本书中有很多人在谷歌工作,这从另一方面说明了谷歌的文化。书中同样还充满了很多我以前从未注意到的有趣编程故事,还有这些牛人是如何解决问题,讨论API以及增强程序扩展性等内容。

• 复习《 Combinatorial Algorithms: Generation, Enumeration, and Search》中的背包问题(Knapsack),旅行商问题(Traveling salesman)以及NP完全问题(在秋季学期里我学了组合数学并且从头到尾读完了这本书)——坦率的说,我不很喜欢这本书。我感觉这更像是一本数学书。如果你是一名程序员而不是数学家,用实际的代码来解决这一类问题可能会更有帮助,而且Wikipedia读起来肯定更容易理解。

• 做一些《 Java解惑》中的问题,这会帮助锻炼你阅读代码找错的能力。虽然我没有被问到这类问题,但是我确实需要仔细检查自己的代码。IBM在我的手机屏幕上给我出过电子商务的问题,我知道谷歌也会使用这类题目。

• 复习并发问题—— 死锁 活锁互斥量信号量等等。在Java中什么时候使用 synchronized关键字?你怎么样避免死锁和活锁?

• 复习 树的遍历 ——前序遍历、中序遍历和后续遍历, 深度优先搜索 vs 广度优先搜索A*算法Dijkstra算法等等。

• 复习 平衡二叉树—— 红黑树AVL树伸展树(Splay-tree)

• 复习 ——图的表示, 最小生成树,图的搜索等等。

算法复杂度分析

• 编程实现 6 种 排序算法——包括算法复杂度为O(n log n)的那些算法,使用TDD风格编程(我使用的测试用例可以 参考这篇博客)。

• 编程实现 哈西表,要求只能使用数组。支持包括:范型,动态数组,延迟初始化,要求测试优先。

• 练习所有手头上能够找到的问题——搜索“Google interview questions”,不用有什么顾虑,可以看看 这些问题。有时候我用Eclipse写代码,但也会用Google docs。我会找一个朋友审查我的代码并向我提问。

• 经常找在谷歌工作的朋友聊天,问 很多问题。他非常棒,并且全力帮助我准备面试。不仅如此,通过理解他为什么认为我适合在谷歌工作,我也更深入地理解了自己想去谷歌工作的理由(是的,这的确有点迂腐。但是正如我的导师告诉我的,即使是谷歌,挑选你喜欢的公司和公司挑选你也是同样重要)。

 

虽然我自己认为只是准备充分,但在谷歌工作的朋友戏称我准备得“几近完美”。除了这些准备之外,我还能做些什么呢?

• 更多的代码分析实战 —— 尽可能多地找代码去分析。

• 计算数列的和。例如,你如何计算数字1-n的和?请给出证明。回顾我在第二场面试中的分析,我给出的答案是: (n-1)(n-2) + (n-2)(n-3) + … + (3)(2) + (2)(1)。当然,我没有及时地给出答案,所以我的时间复杂度上限是O(n³)。

• 复习Java函数库,数据结构。这个时候,我会认真地回答:“我知道有这样的数据结构不会接收重复的值,只是现在记不起来叫什么名字了”。实际上只要实现 Set接口就可以做到,这个我也是下午才刚学会。

• 复习函数库中的某些关键点—— ArraysStrings非常有用。

• 练习在白板或者纸上编程。你可能想当然地想在白板上插入一行或者进行 重构,这可是非常困难。同样地,在白板上写代码很容易忘记写return语句。Eclipse从来不会让我自己写这些声明和reurn语句,并且会把我的代码放在函数的中间,而白板可做不到!

 

接下来该做什么?

• 等待。

• 等待。

• 等待!

• 无论结果如何,我都希望能得到一些反馈。

• 把面试的问题写成代码(同时写好测试用例!)

• 完成《 Java解惑》中的问题。

• 整理面试经历——我花了很多时间准备这次面试,相信你可能已经收藏了这些面试题目。

• 寻找其它的机会。我对IBM特别感兴趣,找一些在那里工作的朋友看看有没有什么合适的机会。

• 和导师们谈谈这次面试经历。

 

英文原文: Cate  编译: 伯乐在线 –  唐尤华

【如需转载,请标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

 

相关文章

相关 [cate google 面试] 推荐:

Cate:我是如何准备Google面试的

- - 博客 - 伯乐在线
导读:Cate 是一位加拿大的 软件工程师,目前就职于  Google. 本文是他在 2010 年在 Google 面试后分享的文章. 也许你可能没有参加过谷歌面试(或者没能答出面试中的一些问题),这里我会分享一下上周我的面试经历. 我个人感觉良好——至少已经全力以赴了,无论结果如何都会对我有很大的帮助.

Google的面试题

- Far Soul - 东西
在Google找工作应该是一件非常困难的事. 据统计,Google每年接收的简历有超过100万份,其中只有0.01%-0.04%的人会被录取. Google录取员工的流程有九项:评审筛选、电话筛选、在线面试、面试反馈、录取会议、中层领导复审、薪酬会议、中层领导再最终复审、录取通知书. 这其中每一项都是经过大家投票决定的.

140个Google的面试题

- 大狗 - 酷壳 - CoolShell.cn
来源:http://blog.seattleinterviewcoach.com/2009/02/140-google-interview-questions.html(墙). 某猎头收集了140多个Google的面试题,都张到他的Blog中了,主要是下面这些职位的,因为被墙,且无任何敏感信息,所以,我原文搬过来了.

Google 的面试流程是怎样的?有什么面试心得分享?

- - 知乎每日精选
如果是你投简历到 Google 的话,据说先需要经过算法筛选,通过的才能到 HR 筛选;通不过的话,你的简历没被人肉眼看到就直接被拒绝了. 因此,听说也有人是专门提供简历优化服务的,类似 SEO,让你的简历能通过算法这一关. 如果 HR 挑选到你的话,会主动联系你. 最基本的,要确认你不是个捏造简历来浑水摸鱼的人,为此 HR 会了解一下你的经验,看看你是否真的是个工程师.

一篇关于google招聘员工的文章:关于brainteaser、面试官、GPA等

- - 美国留学申请与就业找工作咨询博客|Warald|一亩三分地论坛
NYTimes刚发了一篇访谈录,google的SVP of People Operation(google人力资源部)接受记者访谈,讲了很多有意思的东西. 首先是承认brainteaser(比如飞机里能放进多少个高尔夫球. 曼哈顿有多少个加油站)纯粹是浪费时间,这类问题无法预测任何东西,纯粹是让面试官拿来虐别人,觉得自己更NB心理爽.

想成为Google工程师?先回答这15个面试问题

- - 搜索引擎技术博客
挑战: 这是一个相当开放性的问题,设计初衷是看看工程师是否会定义参数. 是:那么你得摆手起家开发出一套基本运算来. 否则的话:那就简单了,只需将数字套进去即可,因为大部分语言均支持数学运算. 挑战: 这类问题是Google面试问题的一个共同趋势:找出解决问题的有效办法. 合并两条链表是一般会在链表之间发生“冲突”(因为它们各自有特定的次序,而你的合并会把次序搞乱).

谷奥: Google = Google+

- 吞佛 - 谷奥聚合——谷奥主站+谷安 aggregator
在上周举办的Google Zeitgeist 2011大会上,John Battelle问Larry Page:在Google大部分的历史里,人们会想到搜索,那么Google品牌=搜索. 但在随后Google的发展史里,Google品牌会等于什么. Larry Page并未直面回答这个问题,至少没有从市场角度来回答.

Google宣布Google CDN

- way - Solidot
Google宣布了最新的帮助加快互联网速度的工具Page Speed Service,加快静态网页的载入速度,不支持动态网页. 在开发者注册该服务之后,可将网站的DNS入口记录指向Google,然后Page Speed Service从服务器上抓取内容,采用最佳的Web性能方案重写网页,通过Google在全球部署的服务器将内容展示给终端用户,加快网页载入速度.

Google将关闭Google Labs

- yifan - Solidot
Google宣布将关闭Google实验室,搜索巨人表示此举将帮助他们将精力集中在优先的产品项目上. Google称,关闭Google实验室意味着大部分试验项目将会被放弃,但不是每一个项目都会被抛弃. Google会将部分试验项目整合到其它产品中. Android应用程序如Google Goggles和Google Listen,则将会继续留在Android Market中.

當Google Docs遇上Google Finances

- 沒有暱稱 - 海芋小站
Google Finances是由Google所推出的一個財經服務,裡面記錄了全球的財經資訊,而如果我們要在Google文件中插入這些財經資訊,如某支股票的收盤價,開盤價等資訊,那要怎麼辦到呢. Google其實提供了非常簡單的函式,怎麼用就往下看啦. 其實在Google文件的試算表中,以插入股票為例,只要輸入「=GoogleFinance("股票代碼.tw"; "參數")」就可以了,以鴻海為例,代碼就是「2317」,記得一定要加變成「2317.tw」才可以.