进军硅谷
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1 面试流程

我们以某人的Facebook面试流程为例,透视硅谷公司是如何面试程序员的。

第一轮电话面试

输入一个字符串数组,有些字串是同位词(Anagrams),分组输出这些Anagrams。

第二轮电话面试

实现两个长的数字串相乘。

现场面试(onsite)

一共四个面试官,每场面试45分钟,中途除了40分钟午饭时间之外,没有其他任何休息时间。

第一个面试官,编程题目(Coding Question)。给定一个函数,可从文件中读取固定大小;实现函数,根据指定的大小读取文件。

第二个面试官,设计题目(Design Question)。一位经理加上一位旁听者。主要问switch infrastructure相关的东西,算是泛泛而谈。

第三个面试官,行为考察(Behavior Question)。主要问:为什么要跳槽?为什么要来Facebook?在你做过的所有项目中最得意的是什么?等等。

第四个面试官,编程题目(Coding Question)。又有一个旁听者。实现一个固定容量的pipe。于是悲剧发生了,事后忍不住免冠徒跣以头抢地。忘了这个是要求考虑循环数组的。写完后,在面试官的冷眼下惶恐修补,但是还是超时了。因为“可恶”的Facebook文化,一定要留出时间来问问题。

加上电话面试总共6轮,其中4轮是编程面试,1轮是技术设计,剩下1轮是行为考察。目前在硅谷程序员面试里,编程面试占绝大比例,并逐步取代基于项目经验的面试。这有很多原因,其中最大的原因之一是之前很多印度人求职时简历作假,项目作假,如果公司光是考核项目,很难甄别候选者,所以不管三七二十一,都要求候选者在白板上写程序。还有个原因是不少硅谷公司认为只要招到足够聪明的人就行,项目经验可以慢慢培养。我们会在下一个章节介绍如何准备编程面试。

当然,项目经验也很重要,几乎每轮有5到10分钟时间来讨论你的项目经验。如果我们从面试官的角度来考察候选者,我们会在意候选者的经验以及解决问题的能力。

➣ 经验

面试中,我们会问这些问题:你遇到最难的问题是什么?是如何解决的?你是怎么设计这个系统的?是怎么调试和测试你的程序的?你是怎么做性能调优的?什么样的代码是好的代码?等等。重要的是你对知识的运用和驾驭,对做过的事情的反思和总结。最好是能让面试官从你的经验中受益。

➣ 解决问题的能力

我们会出很难的题目,难到我们自己也没有解决方案,所以我们想从候选者那里得到的不是那个解题的答案,而是解题的思路和方法。在面试官看来,解难题的过程更重要,通过解题过程来考察应聘者的思路、运用知识的广度和深度、应聘者是否有经验、沟通是否顺畅等。当然,最终是要找到题目的答案。通常从面试官的角度,他们会考察应聘者如下几个方面。

● 应聘者在解算法题时会不会分解或简化这个难题?

● 应聘者在解算法题时会不会使用一些基础知识,如数据结构和基础算法?

● 在讨论的过程中应聘者有没有钻研能力?进一步优化解决方案?

● 应聘者是否有畏难情绪?是否能承受一定压力?

● 应聘者是否有和我们交流的能力?如果以后成为同事,能否较快融入现有的团队里?