程序员面试笔试宝典pdf

核心提示第 1 章 面试流程概述 面试题的来源 准备时间表与注意事项 面试评估流程 答题情况 着装规范 十大常见错误 常见问题解答 1.1 概述大多数公司的面试流程其实都大同小异。本章会简述面试流程,以及企业到底想招募什么样的人才。这些信息将指导你

第 1 章 面试流程概述

面试题的来源 准备时间表与注意事项 面试评估流程 答题情况 着装规范 十大常见错误 常见问题解答

1.1 概述大多数公司的面试流程其实都大同小异。

本章会简述面试流程,以及企业到底想招募什么样的人才。这些信息将指导你如何做好面试准备,以及在面试过程中和面试结束后该如何应对。收到面试通知后,你通常得先经历一次筛选面试,一般通过电话进行。顶尖高校的应届毕业生则可能需要参加现场的筛选面试。不要因“筛选面试”这个词儿而掉以轻心,筛选面试也很有可能涉及编码与算法问题,要求不见得比现场面试低。如果不确定它是不是技术筛选面试,不妨问问招聘助理面试官是什么来头,若是工程师,那十有八九会与技术相关。许多公司会在面试中运用在线同步文档编辑系统,但也有可能让你直接在纸上写好代码,然后在电话里念给他们听。有些面试官甚至还会给你留“家庭作业”,或是要求你用电子邮件将写好的代码发给他们。在现场面试之前,通常会有一两轮筛选面试。现场面试大概有4到6轮,其中一轮可能是午餐面试。当然,午餐面试比较随意,面试官一般不会问你技术问题,甚至不会纳入面试评价范畴。但同时,这也是难得的好机会,你可以跟面试官探讨自己感兴趣的问题,了解公司的企业文化。其他几轮面试主要涉及技术问题,包括编码和算法等。此外,你可能还要回答与简历相关的问题。面试结束后,面试官们会聚在一起讨论你的表现,或者提交书面评价。大多数情况下,公司招聘人员都会在一周内给你回复,告知应聘进展。要是已经望穿秋水等了一个多星期,你也可以主动询问进展。就算招聘人员没有回应,也并不表示你被拒了。我再重复一次:没有回应表示你的应聘结果还是未知数。当然,人们都希望招聘方在得出最终结论时,及时通知求职者。拖拖拉拉的情况确实有。等不及的话,不妨问问相关招聘人员,但务请有礼有节。招聘人员和我们一样,他们很忙,有些人会因此容易忘事。

1.2 面试题的来源

求职者经常会问我,某些公司最近都喜欢问哪些面试题?他们总以为面试题会应时而变。实际上,公司本身对面试题并没有什么倾向,这完全取决于面试官的个人喜好。容我解释一下。在大公司里,面试官通常需要先参加一些面试培训课程。在谷歌,担任面试官之前,我先参加了一次由外部公司提供的专门培训。培训课程为期一天,有一半时间侧重于法律层面的事务,比如,面试官不能探问求职者的婚姻状况,不得询问种族,等等。另一半时间则在探讨如何应对“刺头”求职者,比如当问及编码问题或其他令求职者认为是在“羞辱”自己的问题时,要是求职者“暴跳如雷”,该怎么应对。培训过后,我又实地观摩了两次真正的面试,然后就开始独自面试了。就是这样。我们受过的培训也不过如此,其实所有公司都大同小异。根本就不存在什么“谷歌官方面试题清单”,也从来没有人要求我一定要问哪些特定的问题,或者必须避开哪些话题。那我的面试题从何而来呢?其实,来源和大家一样。面试官也当过求职者,他们会借用自己当年被拷问过的题目。又或者,有些面试官也会彼此交换题库。还有些人喜欢上网找问题,比如CareerCup.com网站。有些面试官也可能从上述渠道收集面试题,并或多或少做些调整。就算真有公司给面试官准备好问题清单,这种情况也并不多见。面试官通常也会自行挑选问题,而且大家往往会有五六个常用的备选题目。因此,下次在你想知道谷歌“最近”都问些什么问题的时候,不妨先停下来想一想。谷歌与亚马逊的面试题其实没什么不同,他们需要的都是软件开发人才。至于面试题是不是“最近流行的”也就更无关紧要了。万变不离其宗,因为这本来就得靠面试官自己去把握。当然,总体上,不同的公司在风格上存在差异。互联网公司往往会提些系统设计方面的问题,而那些使用数据库的公司则明显偏爱数据库方面的问题。然而,大部分面试题无外乎就是数据结构和算法之类的,任何公司都会问到。

1.3 准备时间表与注意事项

“台上一分钟,台下十年功”,事实上你的面试表现取决于你的功底——离不开多年的积淀。你需要刚好具备能为公司所用的技术经验,然后还要准备好在面试中解决实际的技术问题。下面的时间表和流程图可以给你一些启发。如果你起步比较晚,也不用担心。“尽人事,知天命”,请安心准备,祝你好运!

1.4 面试评估流程

招聘人员可能会告诉你,他们主要考查四个方面:工作经验、企业文化契合度、编程技能及分析能力。这四个方面相辅相成,但在决定录用与否时,分量最重的通常还是编程技能和分析能力。这也是为什么本书的主要篇幅都在探讨如何提升编程与算法技能。当然,虽说编程与算法技能往往最为重要,但并不表示你可以忽视其他两个方面。一旦进入大型科技公司的面试环节,你之前的工作经验就不是特别重要了,但它可能会左右面试官对你的看法。比如,如果你说起以前写的某个复杂程序的精彩之处,面试官很有可能会想:“哇,她可真聪明!”一旦他认定你智力超群,可能就会下意识地忽略你所犯的小错误。总之,面试并不会十分精确,对某些“软问题”做好充分准备会大有裨益。创业公司比大公司更看重企业文化契合度。举个例子,如果公司的企业文化鼓励员工独立做决定,那么喜欢听从指导的人就不太适合了。此外,求职者因为过于自大、巧辩或抵触而被淘汰的情况也并不少见。我就遇到过,有位求职者对我提问的用词吹毛求疵,并抱怨这导致他解题不太顺利,后来他还对我的引导方式心生不满。这种“抵触心太重”的表现其实也是一个警示,果然,其他面试官对他的感觉也很不好。最后他被淘汰了。谁会愿意跟这种人一起共事呢?所以,你应该注意以下几点。如果人们都认为你骄傲自大、过于狡辩,或有其他负面评价,那你最好在面试中收敛一下。个性不讨喜的话,哪怕你的表现再好,也可能会被拒。 准备一些与简历相关的问题。虽然这不是最重要的因素,但也不能掉以轻心。稍微花点时间准备就能起到很好的效果,做到“四两拨千斤”。 把主要精力用在编程与算法问题上。最后,我还是要再强调一遍,面试并不会十分精确。你的表现可能会有失水准,招聘委员会有时候也会做出错误判断。就像任何群体一样,招聘委员会也可能会被某位主导人物的观点所左右。这也许不公平,但这就是生活。记住——这次被拒绝并不代表永远。一年内你还可以重新应聘,很多求职者都有过失利后再成功的经历。不要气馁,失败是成功之母。

1.5 答题情况

有则谣传流传甚广且颇具迷惑性:求职者必须答对全部问题才会被录用。事实绝非如此。首先,面试题的答案很难用“正确”和“错误”去简单评判。我个人在评估求职者的面试表现时,一般不会只看他们答对了几道题。相反,我会考量其最终解法是否最优,用时多久,代码整洁与否。这不只是单纯的是非判断,还要综合考虑很多因素。其次,你的面试表现还会拿来跟其他求职者作比较。比如说,你用15分钟出色地解决了一道题,而另一个人不到5分钟就搞定了一道比较容易的题,是否就意味着那个人的表现比你好呢?也许是,但也未必。很自然,面试官出的题越简单,他们越是希望你尽快给出最佳答案。但要是题目很难,他们也不会指望你能答得又快又好,毕竟,出点纰漏也是在所难免的。我在谷歌评估过数千名求职者的面试资料,其中只有一位求职者的面试表现堪称“完美无瑕”。其他人,包括最后被录用的几百个幸运儿,都或多或少犯过一些错。

1.6 着装规范

软件工程师一般都穿得比较随意。这一点从面试的着装规范也看得出来。参加面试时,推荐做法是穿得比同级别员工稍好一点。以下是我给软件工程师的面试着装建议,意在让大家找到一个“平衡点”:不要穿得过于正式,也不要太随意。其实,有很多人还是穿着牛仔裤和T恤衫参加创业公司或大公司的面试,也不会有什么问题。毕竟,公司不是看你穿什么,而是看你的编程水平。创业公司 微软、谷歌、亚马逊、Facebook等科技巨头 非科技公司男性 卡其裤、休闲裤或整洁得体的牛仔裤。Polo衫或礼服衬衫 卡其裤、休闲裤或整洁得体的牛仔裤。Polo衫或礼服衬衫 套装,不打领带女性 卡其裤、休闲裤或整洁得体的牛仔裤。大方得体的上衣或毛衣 卡其裤、休闲裤或整洁得体的牛仔裤。大方得体的上衣或毛衣 套装,或得体的休闲裤配整洁的上衣这些只是指导建议,具体还要参考公司的企业文化。此外,如果你应聘的是项目经理、开发主管或其他管理层职位,面试时最好还是穿得正式一点。

1.7 十大常见错误

错误一:只在计算机上练习如果你正准备参加海洋游泳比赛,你会只在泳池里练习吗?应该不会。你得去体验大风大浪及海洋里各种情况带来的影响。所以,你肯定会希望到海洋中实地训练。在计算机上借助编译器演练面试题就像只在泳池里练习一样。抛开这个环境吧,让我们拿出纸和笔。你可以在写好全部代码并做过人工测试之后,再在计算机上用编译器进行验证。

错误二:不做行为面试题演练很多求职者将全部时间花在演练技术问题上,而忽视了行为面试题。你猜怎么着?面试官可是两者都会考查的。而且不止于此,你回答行为问题的表现其实还会左右面试官对你技术能力的看法。行为问题的准备工作其实相对比较轻松,而且容易达到事半功倍的效果。用心回顾你以往的项目和经历,然后准备一些小故事。

错误三:不做模拟面试训练假设你要准备一场重大演讲,所有同事和相关人员都将列席,而且它还关乎你的未来。要是只在头脑里无声地练习演讲,到了真正演讲时,你肯定会发狂的。光是纸上谈兵,不做模拟面试也会陷入同样的境地。如果你是一名工程师,肯定认识不少同行。不妨找个朋友帮你做模拟面试。作为回报,你也可以给他当一回面试官。

错误四:试图死记硬背答案死记硬背答案最多只能解决一些特定问题,但是一碰到新的题,你可能就傻眼了。而且,基本上你不太可能碰上出自本书的题目。最靠谱的做法就是,不看答案,先把书里的题全部认真做一遍。这样你才有可能练就各种技能和技巧,从容应对新问题。就算最后你只能大概复习一下为数不多的题,这种做法也会对你很有帮助。质量胜于数量。

错误五:不大声说出你的解题思路透露个秘密:面试官才不会知道你心里想什么。因此,面试时默不作声,我根本无法了解你的思路。假如你沉默时间过长,我还会误以为你毫无进展。你得多出声,没准说着说着就找到了解法。请大声说出解题的思路,这样面试官就会知道你还在处理这个问题,没有卡壳。这么做还有个好处就是不至于跑题,从而有助于你尽快找到解法。当然,最大的作用就是突显你强大的沟通能力。何乐而不为呢?

错误六:过于仓促写程序不是什么竞赛,面试也不是,所以解题时不要太过仓促。代码写得太草率容易出问题,也说明你这个人不够细心。请放慢节奏,有条不紊,多做测试,问题考虑得周全些。这么一来,最终你反而能更高效地给出答案,错误也会少一些。

错误七:代码不够严谨其实每个人都写得出完美的代码,但有时我们还是会在面试中写出错误百出的程序,不是吗?代码冗余、数据结构乱七八糟等等,这些都是常见错误!写代码时,不妨设想一下你是在处理实际问题,要注重可维护性。将代码划分成不同的子程序,并精心设计数据结构来处理相应的数据。

错误八:不做测试在日常工作中,你不可能不做任何测试就提交代码,既然如此,为什么要在面试中省略这一步呢?写完代码后,请“运行”一下程序来验证结果。或者,在处理复杂问题时,你还可以边写代码边测试。

错误九:修正错误漫不经心程序总会有bug,这就是生活或编程的本来面目。只要用心测试你的代码,bug也许就会现出原形。那也不错。不过,重要的是发现bug时,你必须三思而后行,修正之前先确定出错原因。有些求职者看到传入特定参数时函数返回false而不是true,会直接将返回值取反,接着检查问题是否得到修正。当然,偶尔他们也能瞎猫碰上死耗子,但实际上如此仓促行事往往会导致更多的bug,同时也反映出你这个人比较粗心大意。有bug其实很正常,但胡乱修改代码却很严重。

错误十:轻言放弃我知道面试题都很难,但不难怎么显出求职者的水平呢。你会迎难而上还是轻言放弃?态度很重要,面试官都喜欢那些不畏挑战、迎难而上解决问题的求职者。毕竟,面试本来就不简单。所以,碰到棘手的问题请不要惊慌,也不要轻言放弃。

1.8 常见问题解答

碰到熟悉的问题时应该如实相告吗?是的!碰到熟悉的问题,当然要告诉面试官!有些人会觉得这很傻——要是熟悉这个问题,岂不是如虎添翼,对吧?其实,未必如此。我们力荐你如实相告的理由如下。

彰显你的诚实品质。这能反映出你的诚信——可以大大加分!要知道面试官可是在默默地考察你,看你够不够格成为他未来的同事。我不知道你个人怎么想,反正我是喜欢和实在人一起共事。

这个问题可能略有改动。你不会想冒这个险给个错误答案吧?

如果你将正确答案脱口而出,面试官会觉得很可疑。面试官当然知道题目的难度。但如果你佯装磕磕绊绊地答题,则很有可能夸张过度,而显得你这个人很不诚实。该使用哪种编程语言?很多人都会建议说用自己最得心应手的语言,其实理想情况下,你应该使用面试官最熟悉的语言。我一般会推荐使用C、C++或Java,因为大多数面试官都熟悉这三种语言。我个人偏好Java,因为用Java编写程序效率比较高,而且写出来的程序简单易懂,哪怕平时用惯C++的人看Java程序也不会有太大难度。有鉴于此,本书基本上都用Java来解题。面试结束后我没有收到回复,是被拒了吗?不是的。真要被拒的话,公司一般都会给你通知。面试结束后短时间内没有收到回复并不代表什么。你可能表现得很不错,但招聘人员不巧度假去了,没能及时处理。公司可能正在进行部门重组,具体该招多少人尚无定论。又或者,你确实表现得不怎么样,但碰巧遇到了一个办事拖拉或者特别忙的招聘人员,他没能及时答复你。当然,也会有一些奇怪的公司,“嗯,既然我们不打算录用这个求职者,那就没必要给他回复”。所以,一切取决于公司本身。但你可以发邮件或打电话跟踪后续进展。被拒之后我还能重新申请吗?当然可以了,不过通常需要等上一段时间。上一次的糟糕表现一般不会影响下一次面试。很多人都被微软、谷歌拒过,但他们后来还是顺利过关了。

第 2 章 面试揭秘

微软面试 亚马逊面试 谷歌面试 苹果面试 Facebook面试 雅虎面试对于多数求职者而言,面试好似一个迷局。你去了,见了几个面试官,答了一堆问题,然后,或两手空空离开,或幸运地拿到录用通知。你有没有想过:面试结果是怎么得出的? 面试官会不会互相交流? 公司最看重哪些方面?好了,不用再挖空心思、再三思索了,我来告诉你。

在本章,我们邀请了来自顶尖科技公司的面试专家来为大家答疑解惑,揭秘面试中的那些事儿。这些专家会让我们了解各家公司的面试流程,帮助还原那些发生在面试会议室之外的事情,以及面试结束后的事项。这些专家还会告诉我们各家公司面试流程的不同之处。比如,亚马逊的“调杆员”①是怎么回事,谷歌的招聘委员会是如何运作的。是的,每家公司各具特色。了解这些“怪癖”会让你更加胸有成竹,不会被突如其来的亚马逊“调杆员”给吓住,也不会对苹果居然同时派出两位面试官来考察你而感到意外。① “bar raiser”的概念来自亚马逊美国总部。这个词原指在跳高比赛中,一次次将杆调高的工作人员。而亚马逊的调杆员则是一群在招聘过程中负责从企业文化以及行为准则的角度考察应聘者,从而维护招聘质量的人。在招聘中,调杆员会用很苛刻的眼光考察应聘者是否在至少一点上高过亚马逊的平均水准,如果是,那么雇用这样的人实际上就等于在提升公司的能力,这就起到了“抬杆”的作用。——编者注此外,这些专家也强调了各家公司的面试重点。尽管这些顶尖公司都喜欢考察求职者的编码能力和算法基础,他们其实也各有侧重。不管这是源自各家公司的技术背景或是历史,至少你知道该如何做好准备。接下来,让我们一起揭开微软、亚马逊、谷歌、苹果、Facebook和雅虎的“面试迷局”吧。

2.1 微软面试

微软喜欢招聪明人,尤其青睐计算机极客。求职者必须对技术满怀热情。微软的面试官不大会问你一些C++ API的个中细节,而是直接让你在白板上写代码。参加面试时,求职者最好在早上约定时间之前赶到微软,先填好一些表格。接着你会和招聘助理碰面,他会给你一个面试样题。招聘助理主要是帮你热热身,不大会问技术问题;就算真的问了几个简单的技术问题,也是想让你放松心情,等到面试真正开始时,你就不会那么紧张了。对招聘助理一定要以礼相待。说不定他们会帮上大忙,在你首轮面试表现欠佳时,他们有可能帮你争取重新面试的机会。夸张地说,他们甚至还能左右你的应聘结果。面试当天你会接受4~5轮面试,面试官一般来自两个团队。许多公司会把面试安排在会议室,而微软的面试一般在面试官的办公室进行。你正好可以借机四处看看,感受一下他们的团队文化。一轮面试过后,不同的团队,做法不一样,面试官可能会根据个人习惯决定是否将你的表现反馈给后续的面试。完成所有面试后,你有可能会见到招聘经理。假如真是这样的话,那可是好兆头,这意味着你通过了某个团队的基本考察。接下来,就要看招聘经理要不要录用你了。快的话,面试当天你就会知道结果,慢的话,则可能要等上一周。要是等了一周还没收到人事部的通知,不妨发封邮件,客气地问一下进展。如果你没有马上收到回应,有可能是因为招聘助理太忙了,这并不代表你就没戏。必要准备事项“你为什么想要加入微软?”提这个问题,微软是想了解你是否对技术满怀热情。一个比较好的答案是:“自打接触计算机以来,我就一直在用微软的软件,贵公司开发的软件产品令人赞不绝口。比如,我最近一直在Visual Studio开发环境中学习游戏编程,它的API实在是太好用了。”注意这个答案是如何展示你对技术满怀热情的。独特之处如果到了招聘经理这一关,说明你面试表现得不错。这可是个好兆头!

2.2 亚马逊面试

亚马逊的招聘流程一般从两轮电话面试开始,期间求职者会接受某个团队的面试。偶尔也会出现面试3轮甚至更多轮的情况,可能是有位面试官对你的评价不高,或是别的团队对你有兴趣。此外,还有其他特殊情况,比如求职者就在亚马逊总部所在地西雅图,或他以前面试过其他职位,也许一次电话面试就够了。在电话面试中,面试你的工程师通常会要求你通过共享文档工具写些简单的代码。他们问的技术问题可谓五花八门,意在探测你究竟熟悉哪些领域。接下来,如有一两个团队根据你的简历和在电话面试中的表现相中你,你就要飞到西雅图接受4到5轮面试。在白板上写代码是少不了的,有些面试官会着重考察你的其他技能。每一轮面试官都会侧重不同的领域,所以他们的提问会大相径庭。在提交自己的评价报告之前,他们看不到其他面试官对你的评价,而且公司也不鼓励面试官在面试过程中互相交流,一切讨论都得等到几轮面试全部结束后。顾名思义,“调杆员”主要负责把控面试质量。他们受过专门训练,并且是从其他团队抽调来的,以减少面试中的主观倾向。在面试中,如果有位面试官风格迥异且要求格外严格,那他可能就是传说中的“调杆员”。这种人不仅面试经验丰富,而且跟招聘经理一样,拥有生杀大权。不过,切记:这一轮面试表现磕磕绊绊,并不等于你的整体表现就很差。面试官会比照其他求职者来评价你的水平,而不是只看你答对多少问题。等到所有面试官提交评价报告后,他们会在一起讨论你的表现,并决定是否录用你。一般来说,亚马逊的招聘团队都会很快给出录用结果,很少有耽搁。要是一周内都没等到结果,建议你发封措辞得当的邮件询问进展。必要准备事项亚马逊是一家互联网公司,这也意味着他们非常关注“扩展性”问题。请做好相应的准备。当然,回答这些问题,并不要求你具备分布式系统方面的知识。具体建议可参看“扩展性与存储限制”一节。此外,亚马逊还会问很多面向对象设计的问题。请参看“面向对象设计”一节,里面有一些样题和建议。独特之处“调杆员”来自其他团队,旨在提高面试标准。他和招聘经理一样重要,请尽量表现得出色一些。

2.3 谷歌面试

业界流传着很多有关谷歌面试的可怕谣传,但多数也只是谣传。谷歌的面试与微软或亚马逊的并无太大区别。谷歌的面试也从电话面试开始,来面试你的人是技术工程师,因此免不了会问些技术难题,求职者切不可掉以轻心。这些问题也可能涉及编程,有时你还要通过共享文档工具写些代码。电话面试的问题和现场面试的类似,要求也一样。现场面试一般有4~6轮,其中一轮为午餐面试。面试官之间不能透露自己的评价报告,因此每一轮面试你都可以从零开始。午餐面试不会有评价报告,你可以借机问些其他环节不方便问的问题。谷歌不会要求面试官侧重不同的领域,也没有所谓的标准流程或结构。每个面试官可以自行决定问哪些问题。面试过后,评价报告会以书面形式提交给由工程师和经理组成的“招聘委员会”,由他们作出录用结论。面试评价报告由分析能力、编程水平、工作经验和沟通能力等四部分组成,最后你会得到总的评分,在1.0到4.0之间。“招聘委员会”里一般不会有你的面试官。就算有,那也纯属巧合。通常,在决定录用与否时,招聘委员会更看重那种有面试官给你打高分的情况,打个比方,如果你的得分是3.6、3.1、3.1 和2.6,效果要好过拿4个3.1。也就是说,每轮面试不一定都要有上佳表现。此外,你在电话面试中的表现一般起不了决定性作用。如果招聘委员会给出的意见是“聘用”,你的材料就会转给“薪酬委员会”及“执行管理委员会”。最终结果可能要等上几周,因为还有不少流程要走,等待多个委员会审批。必要准备事项作为一家互联网公司,谷歌非常看重如何设计可扩展的系统。因此,务必掌握“扩展性与存储限制”一节的问题。此外,谷歌的面试官很喜欢问些涉及“位操作”的问题,也请重点复习这些方面的知识。独特之处面试官不是决策者。他们只提交评价意见供招聘委员会参考。招聘委员会给出录用与否的决定,当然,该决定偶尔也会被谷歌高管否决。

2.4 苹果面试

苹果的面试流程与公司本身的风格非常相符,是最没官僚味儿的。苹果的面试官很看重技术功底,但求职者对应聘职位和公司的热情也非常重要。虽然成为Mac用户并不是应聘苹果的先决条件,但你至少要对该系统有一定了解。在苹果的面试流程中,招聘助理会先给你打电话了解一些基本情况,接下来团队成员会对你进行一连串的技术电话面试。当你受邀去参加现场面试时,招聘助理会出面接待你,并介绍面试的大致流程。然后,你要接受招聘团队成员6~8轮的面试,其中这个团队的重要人物也会来面试你。苹果的面试形式是一对一或二对一。请做好在白板上写代码的准备,交流的时候一定要把自己的思路表达清楚。你可能会跟未来的上司共进午餐,这看似随意,但其实也是一次面试。每个面试官都会侧重不同的领域,面试官之间一般不会过问彼此的面试情况,除非他们想让后续面试官就求职者某一方面多挖掘点内容。当天所有面试结束后,面试官会在一起商议你的表现。如果大家都认为你表现不错,接下来会由你应聘部门的主管或副总来面试你。能见到主管也不见得你一定会被录用,不过总归是个好兆头。让不让你见主管的决定对你是不公开的,如果你落选了,他们只是默默送你离开公司,也不会透露你为什么落选了。如果你得以进入主管或副总面试环节,面过你的面试官会聚到会议室正式表决录用意见。副总通常不会列席,但如果你没能打动他们,他们照样可以直接否决。招聘人员通常会在几天后联系你,要是等不及的话,你也可以主动联系。必要准备事项如果你知道哪个团队会来面试你,务必先熟悉他们的产品。你喜欢该产品的哪些方面?你觉得有哪些可以改进的地方?给出独到见解可以有力展示你对这份工作的激情。独特之处在苹果的面试中,二对一的形式司空见惯,不过也不用太紧张——这跟一对一面试并无分别。此外,苹果的员工都是超级果粉,在面试中,你最好也能展现出同样的热情。

2.5 Facebook面试

Facebook的在线工程难题1曾引发热议,其实这无非又是吸引眼球的手段之一。除了解答这些难题,你还可以通过传统渠道申请该公司的职位,比如提交在线职位申请,或者参加校园招聘会。1 感兴趣的读者可以访问页面Facebook Engineering Puzzles:www.facebook.com/careers/puzzles.php。——译者注一旦被Facebook挑中,求职者一般至少要接受两轮电话面试。不过,公司所在地2的求职者可以少一轮。电话面试主要涉及技术问题,求职者通常要用Etherpad或其他共享文档工具写些代码。2 Facebook总部位于美国加利福尼亚州的门罗帕克市,地址为黑客路1号。——译者注如果你还在上学,在学校接受面试,那你还要写代码。面试官会要求你在白板或白纸上写代码。现场面试时,主要由其他软件工程师来面试你,不过,招聘经理有空的话也会参与。所有面试官都受过专业面试培训,他们只提供意见,对你的应聘结果不作决断。现场面试的每个面试官都各有侧重,以确保大家不会重复提问,并全面考察求职者的能力水平。面试问题主要分为算法、编程水平、软件架构/设计能力等几大块,同时,面试官也会考察你能否适应Facebook快节奏的开发环境。面试过后,在交流你的表现之前,面过你的面试官会先提交书面评价报告。这么做是为了确保各位面试官能对你的表现作出相对独立的评价。一旦收到所有的评价报告,面试小组和招聘经理便会商讨你的面试结果。他们会先达成统一意见,然后提交给招聘委员会。Facebook很看重“忍术”——也就是使用任何语言快速构建优雅、可扩展解决方案的能力。懂PHP并不会显得特别突出,因为Facebook也有很多后台工作要用到C++、Python、Erlang和其他语言。必要准备事项作为网络科技的新贵及“当红炸子鸡”,Facebook也更青睐那些富有创业精神的开发人员。在面试过程中,你要展现出自己热衷创造新事物的激情。独特之处Facebook由公司统一招聘员工,而不是专门针对某个团队。面试成功并入职后,你会先参加为期6周的“新兵训练营”,帮你快速适应大规模的代码库。资深工程师会担任你的导师,辅导你掌握最佳实践和必备技能,最终让你可以游刃有余地加入自己喜欢的项目组。

2.6 雅虎面试

雅虎往往只招美国排名前20的高校毕业生,不过其他求职者仍可通过雅虎公开招聘渠道得到面试机会。取得面试资格后,你会先接受一轮电话面试。对你进行电话面试的一般是资深员工,比如技术主管或经理。在现场面试中,一般由来自同一团队的六七个人来面试你,每轮面试时长45分钟。每个面试官都会侧重不同的领域。比如,有的面试官可能侧重于数据库知识,而有的面试官则会关注你对计算机体系结构的理解。每轮面试的时间安排大致如下。开头5分钟:一般对话。比如,自我介绍,聊聊项目经历等。 中间20分钟:编程问题。比如,实现归并排序。 最后20分钟:系统设计问题。比如,设计一个大型分布式缓存系统。这些问题往往与你以往的项目经历或面试官当前在做的工作有关。当天面试结束后,你可能还会跟项目经理或其他人面谈一次。内容包括产品展示、你对雅虎的疑虑以及你手上有无其他公司的录用通知,等等。这次面谈旨在增进双方了解,通常不会影响你的面试结果。与此同时,之前的面试官会讨论你的表现并尝试作出结论。最终录用与否由招聘经理决定,他会综合考虑面试官对你的正面及负面评价。如果你的表现不错,有可能当天就会收到口头录用通知。但也不一定。也许他们要过几天才通知你,个中原因不一,比如,你应聘的团队可能还想再面试几个人看看。必要准备事项雅虎面试少不了系统设计问题,几乎成了惯例,所以,还请做好相应的准备。他们想要确认你不仅会写代码,而且还能设计软件。要是没有这方面的知识,也不要紧,你仍然可以给出自己的设计思路。独特之处雅虎的电话面试一般由拥有决定权的人负责,比如招聘经理。此外,雅虎往往会在当天给出面试结果,这一点很特别。在你进行最后一轮面试的同时,其他面试官也正在讨论你的表现。

第 3 章 特殊情况

有工作经验的求职者 测试人员及SDET 项目经理与产品经理 技术主管与部门经理创业公司的面试

3.1 有工作经验的求职者

只要你仔细读过之前的章节,遇到以下情况应该也不会太惊讶:在面试中,对于有工作经验的求职者和初出茅庐的新手,面试官会问同样的问题,而且面试标准差别也不大。你可能知道,大多数面试题都是些涉及数据结构与算法的常见问题。多数公司认为这是检验个人能力的上佳手段,故而对所有求职者一视同仁。有些面试官可能会对有工作经验的求职者稍稍提高标准和要求。毕竟,他们有多年的工作经验,理应比新手表现得更出色,不是吗?不过,也有一些面试官持相反的看法。有工作经验的求职者离开学校太久了,可能毕业后就没怎么接触过这些基本概念。他们忘记其中一些细节也在情理之中,所以我们应该稍微降低标准。总体来看,两者相抵。所以,如果你是有工作经验的求职者,碰到的问题和面试标准基本上与新手相差无几。不同之处在于系统设计和架构方面以及与你简历相关的问题。一般来说,学生在系统架构方面没有什么积累,这类经验只有通过实践才能获得。因此,面试官会根据你的经验水平来评估你在这些问题上的表现。当然,在校生和应届毕业生也会被问及这方面的问题,总之都要竭尽全力做好准备。此外,对于“说说你碰到过的最棘手的bug?”之类的问题,面试官往往期待有工作经验者给出更加深入、让人印象深刻的答案。你拥有更丰富的经验,回答自当不同凡响。

3.2 测试人员及SDET软件开发测试工程师

这个职位确实比较复杂。作为SDET,不仅要写得一手好代码,还得是优秀的测试人员。建议大家从以下几点入手准备SDET的面试。准备核心测试问题:例如,怎么测试一只灯泡?一支笔?一台收银机?抑或是微软的Word软件?参看本书“测试”一节,有助于你在这些问题上准备得更充分。练习编程问题:应聘SDET被拒的最大原因就是编程能力不足。尽管这个职位对编程能力的要求比SDE略低,但面试官还是期待SDET具备很强的编程能力和算法功底。准备过程中,不妨拿针对普通开发人员的编程和算法题来练手。练习测试编码问题:对SDET来说,这类问题的常见问法是“写代码实现X功能”,紧接着就是,“好,请测试你写的代码”。就算面试官没有提这个要求,你也应该问问自己:“我该如何测试这段代码?”切记:SDET可能碰到任何问题!对测试人员来说,具备良好的沟通能力也非常重要,因为这份工作要求你跟各种各样的人打交道。因此,不要对行为面试题掉以轻心,可参看“行为面试题”一章。职业生涯建议最后,提几点职业生涯建议:如果你跟许多求职者一样,认为应聘SDET职位是进入一家公司的“捷径”,那就必须想清楚,从SDET转开发岗位可不轻松。假如你有此意图,务必加强自己的编程能力和算法功底,并尽可能在一两年内转岗。否则,“温水煮青蛙”,拖得越久,你的目标就越难以实现。总之,常写代码,以防手生。

3.3 项目经理与产品经理

不同公司的PM职位大相径庭,甚至在同一家公司都可能大不相同。例如,微软有些PM职位其实相当于“口碑传道者”,职责是面向客户推广公司产品,有点接近市场营销。然而,微软内部的其他PM则可能每天要花大量时间编写代码。后一种PM在面试中很可能会被问到编码问题,因为这是其工作职责的重要部分。大体上,求职者应聘PM职位时,面试官主要考察以下几个方面。处理含糊情况:虽然它不是面试中最重要的考察面,但你要明白面试官的确很看重此技能。他们想看到你面对含糊情况不会手忙脚乱、不知所措;希望看到你迎难而上,比如寻找新的信息、优先考虑最重要的模块,并以有条理的方式解决问题。面试官一般不会直接考察你这方面的能力,不过他们可能会根据你在处理问题时的表现对你进行评估。以客户为中心:面试官希望看到你能做到以客户为中心。你是会照搬自己的经验主观臆测客户使用产品的方式,还是会站在客户的立场来了解他们希望如何使用产品?诸如“为盲人设计一款闹钟”的面试题考查的正是这个方面。当你听到这类面试题时,务必多提问题以了解产品主要面向哪些客户,以及他们会如何使用该产品。本书“测试”一节有很多相关内容可供参考。以客户为中心:有些团队做的产品功能非常复杂,要求PM求职者必须充分掌握相关产品,因为等到工作时再上手是来不及的。欲在MSN Messenger团队中谋得PM一职,也许不一定要精通即时通讯工具,而从事Windows Security工作则可能要求你具备扎实的计算机安全功底。因此,除非掌握了必备技能,否则在面试之前你还是三思而后行吧!**多层次交流能力:**PM需要跟公司内各个级别、跨部门跨职能人士打交道。所以,面试官会希望你具备多层次交流能力。这方面的考查非常直接,比如,面试官会抛出类似“向你的祖母解释什么叫TCP/IP”的问题。当然,从你如何描述此前的项目经历,他们也能看出你的沟通能力。对技术的热情:快乐工作的员工往往是高产员工,所以公司要确保你喜欢并享受这份工作。在你的回答中,应该处处展示自己对技术的热情,同时,要是能对公司或团队充满热情就更好了。面试官可能会直接问你:“为什么想来微软工作?”此外,他们也乐于见到你充满激情地描述自己此前的工作经历和遇到过的挑战。面试官喜欢那些不惧挑战并迎难而上的求职者。团队合作/领导能力:这大概是PM面试中最重要的方面,无疑也是这份工作本身的关键所在。所有面试官都会评估你能否与其他人合作无间。他们常会提出这类问题:“说说你怎么处理团队成员没能按进度完成工作的情况。”此外,面试官也想了解你能否妥善处理冲突、是否积极主动、是否了解你身边的人,以及人们喜不喜欢与你共事。你在“行为问题”上所做的准备在这里就显得尤为重要。以上这些方面都是PM的必备技能,因此也是面试的重点。各个方面的权重大致取决于你应聘的PM职位以及该职位具体看重哪些方面。

3.4 技术主管与部门经理

基本上,技术主管职位都要求具备很强的编程技能,部门经理职位往往也不例外。如果这份工作需要编写代码,那你就必须具备很强的编码技能和算法功底——要求不比普通开发人员低。特别是谷歌,在编程上,对部门经理的要求很高。此外,你还要做好以下准备。团队合作/领导能力:任何担任管理类角色的人都必须懂得团队合作,并能领导员工。面试官会或明或暗地考察你是否具备这些能力。一方面,他们会直接询问你在此前工作中是如何处理冲突的,比如你与主管意见相左的时候;另一方面,面试官也会暗中观察你怎么与他们互动。如果你的态度过于傲慢或太顺从,那他们就会认为你不太适合当管理人员。把握轻重缓急:管理人员经常要面对层出不穷的状况,比如怎样才能确保团队在即将到来的截止期前完成工作。你需要充分展示你在一个项目中分得清轻重缓急,砍掉无足轻重的部分。把握轻重缓急意味着要通过正确的提问来掌握哪些方面至关重要,以及合理预估出都能实现哪些方面。沟通能力:管理人员不仅需要与上下级沟通,而且可能还会与客户或其他不太懂技术的人进行交流。面试官希望看到你具备与各种人打交道的能力,跟他们沟通起来游刃有余。实际上,面试官也是在拐弯抹角地评估你的个性。“把事情做好”的能力:经理与主管最重要的职责也许就是“把事情做好”。这意味着你要在项目准备和具体实施之间达成适当的平衡。你需要掌握如何组织项目,以及如何激励员工,从而达成团队目标。最终,这些方面大都会跟你的过往经验和个性关联起来。务必利用“面试准备表格”做好充分准备。

3.5 创业公司的面试

创业公司的职位申请和面试流程千差万别。我们没办法述及每一家创业公司的情况,好在还能列举一些共通之处。不过,也请理解,实际情况可能会有所不同。职位申请很多创业公司都会在网上发布招聘启事,但对于那些最热门的创业公司,最好的申请方式是通过内部推荐。这个推荐人不必非得是你的密友或同事。你可以四处撒网,向认识的人表达自己的意向,然后也许有人会拿起你的简历看看你是不是合适人选。签证与工作许可很遗憾,美国大多数小型创业公司没有能力为你申请工作签证。他们跟你一样痛恨劳工部教条的制度,可还是无能为力。如果你没有合法身份,同时又想到创业公司工作,也许最好的选择就是找一家为创业公司输送人才的专业人力资源代理机构,又或者,你可以盯着那些规模较大的初创公司。简历筛选因素创业公司需要的工程师不仅要聪明过人,会写代码,而且同时也能在创业环境中卖力地工作。你的简历应该展示这些特质。此外,你还必须充满干劲,积极做到最好;这些创业公司急需立马能上手干活的员工。面试流程与大公司注重你在软件开发上的整体职业素养相比,创业公司更注重你的个性契合度、技术技能和此前的工作经验。个性契合度:面试官会通过你与他们的互动来评估你的个性契合度。请注意,与面试官交流时要友善、专注,这会给人留下好印象,从而获得更多工作机会。技术技能:创业公司需要立马能上手干活的人,因此非常看重你在特定编程语言上的能力。如果你恰好掌握该公司使用的编程语言,请务必好好准备与此相关的各种细节问题。以往经验:创业公司会问你很多以往工作经验有关的问题,请特别关注“行为面

 
友情链接
鄂ICP备19019357号-22