程序员面试金典(第6版)
上QQ阅读APP看书,第一时间看更新

前言

招聘中的问题

讨论完招聘事宜,我们又一次沮丧地走出会议室。那天,我们重新审查了10位“过关”的求职者,但是全都不堪录用。我们很纳闷,是自己太过苛刻了吗?

我尤为失望,因为由我推荐的一名求职者也被拒了。他是我以前的学生,以高达3.73的GPA毕业于华盛顿大学,这可是世界上最棒的计算机专业院校之一。此外,他还完成了大量的开源项目工作。他精力充沛、富于创新、头脑敏锐、踏实能干。无论从哪方面来看,他都堪称真正的极客。

但是,我不得不同意其他招聘人员的看法:他还是不够格。就算我的强力推荐可以让他侥幸过关,但他在后续的招聘环节可能还是会失利,因为他的硬伤太多了。

他尽管十分聪明,但答起题来总是磕磕巴巴的。大多数成功的求职者都能轻松搞定第一道题(这一题广为人知,我们只是略作调整而已),可他却没能想出合适的算法。虽然他后来给出了一种解法,但没有提出针对其他情形进行优化的解法。最后,开始写代码时,他草草地采用了最初的思路,可这个解法漏洞百出,最终还是没能搞定。他算不上表现最差的求职者,但与我们的“录用底线”相去甚远,结果只能铩羽而归。

几个星期后,他给我打电话,询问面试结果。我很纠结,不知该怎么跟他说。他需要变得更聪明些吗?不,他其实智力超群。做个更好的程序员?不,他的编程技能和我见过的一些最出色的程序员不相上下。

与许多积极上进的求职者一样,他准备得非常充分。他研读过Brian W. Kernighan和Dennis M. Ritchie合著的《C程序设计语言》,也学习过麻省理工学院出版的《算法导论》等经典著作。他可以细数很多平衡树的方法,也能用C语言写出各种花哨的程序。

我不得不遗憾地告诉他:光是看这些书还远远不够。这些经典学院派著作能够教会你错综复杂的研究理论,帮助你成为出类拔萃的软件工程师,但是对程序员的面试助益不多。为什么呢?容我稍稍提醒你一下:即使从学生时代起,你的面试官其实都没怎么接触过所谓的红黑树算法。

要顺利通过面试,就得“真枪实弹”地做准备。你必须演练真正的面试题,并掌握它们的解题模式。你必须学会开发新的算法,而不是死记硬背见过的题目。

本书就是我根据自己在顶尖公司积累的第一手面试经验和随后在辅导求职者面试过程中提炼而成的精华。我曾经与数百名求职者有过“交锋”,本书可以说是我面试过几百位求职者后的结晶。同时,我还从成千上万求职者与面试官提供的问题中精挑细选了一部分。这些面试题出自许多知名的高科技公司。可以说,本书囊括了189道世界上最好的程序员面试题,它们都是从数以千计的好问题中挑选出来的。

我的写作方法

本书重点关注算法、编程和设计问题。为什么呢?尽管面试中也会有行为面试题,但是答案会随个人的经历而千变万化。同样,尽管许多公司也会考问细节(例如,“什么是虚函数”),但通过演练这些问题而取得的经验非常有限,更多的是涉及非常具体的知识点。本书只会述及其中一些问题,以便你了解它们“长”什么样。当然,对于那些可以拓展技术技能的问题,我会给出更详细的解释。

我的教学热情

我特别热爱教学。我喜欢帮助人们理解新概念,并提供一些学习工具,从而充分激发他们的学习热情。

我第一次正式的教学经历是在美国宾夕法尼亚大学就读期间,那时我才读大二,同时担任本科计算机科学课程的助教。我后来还在其他一些课程中担任过助教,并最终在宾夕法尼亚大学推出了自己的计算机科学课程。该课程专注于教授一些实际的“动手”技能。

在谷歌担任工程师时,培训和指导新的工程师是我最喜欢的工作之一。后来,我还利用“20%时间”在谷歌,“20% 时间”是指公司允许工程师每个星期花一天时间做与工作无关的项目,详见谷歌官方博客。——译者注在华盛顿大学教授两门计算机科学课程。

多年之后,我仍然继续在教授计算机科学的相关课程,但是这次我的目标是帮助创业公司的工程师准备收购面试。我看到他们犯了不少错误,经历了很多困难,而我正好拥有帮助他们解决这些问题的技巧和策略。

《程序员面试金典》《产品经理面试宝典》《金领简历:敲开苹果、微软、谷歌的大门》和CareerCup都能充分体现我的教学热情。即便是现在,你也会发现我经常出现在CareerCup.com上为用户答疑解惑。

请加入我们的行列吧!

电子书

扫描如下二维码,即可购买本书电子版。