“FLAG”公司(Facebook, LinkedIn, Apple/Amazon, Google)是美国硅谷公司的四家大公司。如何进入这些顶尖公司?其招聘流程又有何不同?
本文作者曾是LinkedIn高级软件工程师/面试官。他完整地参与过校招、电面、现场面试等一系列硅谷招聘流程(https://www.haolietou.com/news/news-show.php?id=14210 )。他将以问答方式为大家放送满满的干货。
硅谷公司招聘流程是什么
跟国内有何不同?
我刚好在国内外都工作过,我可以做个对比。
国内:如果是在校生,一般都要有个笔试,通过率也不高,可能就百分之几,然后在校园里面试3轮左右,分别对技术,基本功,价值观的考察。然后就会大规模发offer,一些大公司如百度,阿里一年招上千人是很常见的。
硅谷公司:一般是没有笔试。如果HR发现简历的一些关键字和背景符合职位需求,简单介绍公司,安排1,2轮电面,如果通过,邀请onsite面试,里面会有4-7轮,里面涉及到不少白板编程,虽然很多人争议,但目前为止还是有些无奈的选拔手段。
他们会花很大代价去组织,包括报销来回机票,吃穿住行,赠送小礼物,给候选人一种非常受尊重的感觉。这里面成功率非常低,真的是千里挑一,虽然代价很大,但很多公司都是强调人才是第一位的,在宣传企业文化和价值上也是起到积极作用。
以LinkedIn为例。除了报销来回机票、吃穿住行、赠送小礼物之外,LinkedIn的附带礼物中还有一个inMap,把你在LinkedIn上面的联系人聚类可视化呈现出来。非常酷。
然后就是收集反馈,一般是2个面试官back to back同时给出评价,按1-4打分,最后取平均分,Yes = 3.0; Very Yes = 3.5; No= 2.5招聘委员会通过投票和辩论来确定是否发放Offer。
我记得印象深刻的面试:面试者岁数大些,当时我面的时候也没出众,我准备给他一个一般的分,但他回去马上给我写了一篇长信,解释当时我问的问题,给出详细参考。
我对他的回答非常佩服,至少态度很积极,也许是当场没有发挥好。我立马改变了印象,给他很高评价;但其中有个初级面试官居然给他1分,什么概念(if you hire him, I will go),这样就把他平均分给拉下来,我觉得这样不公正,就在招聘会议上为他说话。最后他也拿到Offer顺利来到公司,事实证明这是一个挺优秀的技术人员。
简历怎么写
才能规范并吸引人呢?
简历是一个提供信息,展示自己的平台。对于刚毕业,没有什么工作经验的人来说,简历一般控制在一页为宜,如果是PhD需要适当列举一些相关的文章发表信息,那么简历可以扩展至两页。
这里就给一个示例,他在一页纸的长度精炼地描述了他的教育背景,实习经历、技能和专业背景:
一个很好学习方法就是去LinkedIn上看一些优秀人士的个人主页,特别是你想去的公司的工程师的背景。一般都会很清晰地构建他的目标和过去经历——不需要照搬内容,但可以给你启发。当你去投这些公司,你就知道什么样的简历更容易被他们欣赏。
下面这个是很有趣的程序员是如何读简历的:
面试中不同人考察什么
内容都有哪些?
给一张表大家可以了解:
面试时候如何表现自己
体现沟通能力?
首先你要站在面试官的角度,面试官招你进去当同事,他希望同事怎么样的人就决定了他的立场。学会换位思考。
让面试官时刻明白你的意图,不要闭着眼睛不停写。对于面试官来说,他根本不知道你的解题进行到哪一步了。你可以反复和面试官交流自己的想法,得到面试官认可以后再动手写。可以讲讲你怎样想到这个思路的。记住,你并不是要说服他接受你的想法,而是要把你的想法解释给他听。
面试官提出质疑的时候,第一,不要觉得面试官什么都不懂,怎么这都不知道(其实他只是看一下你是否真的懂);第二,面试官比你经验丰富得多,很有可能就是你犯错了,赶紧想想是不是真的有问题。
技能之外,还重点考察什么
哪些特点不能被接受?
√重点考察的:
首先,看背景是否符合职位的需求。比如做分布式计算的工程师,对系统底层,大数据架构就要有一些涉猎。
第二,聪明。如果我交流的时候发现他们能很快意识到我说的意思甚至补充我心里想的,这种人非常讨喜。如思路异与常人,很快给出最优解,能挑战一些难度大的问题。
第三,好奇和热情。如果面试者说不清为啥要申请,或者没啥主动提问的,我会觉得对公司兴趣不大,没有好好做功课,态度上不够积极,而就算最后技术很出色,在评价上也是要打折扣。另外如果他技术面很狭隘,技术兴趣不广泛,可能也要考虑是否能胜任创业公司(https://www.haolietou.com/news/news-show.php?id=14238 )不断变化的环境。
×不能接受的:
不愿意学习。对他说的或者写的很自大,但却不虚心接受其他人指出的问题和建议。
企业文化不合。对公司的使命和价值观有一些偏差,这个比技术功底更致命,主要是找志同道合的。
硅谷公司选拔技术人才
是怎样进行的?
硅谷公司对基础架构很重视,注重基本功、员工素质和价值观认可。
技术人员还是需要关注生产力的,其实也很难短时间考察,公司也考虑过是否通过一些做小项目,直接上机模拟真实环境来评价,但真正实施又难度很大。
LinkedIn 有个专门负责招聘Staff Engineer Jacob Kessler写过文章阐述面试理念:Interviews are not Exams主要是想保持自然,一起应对一天工作中场景。
我总结成3C(Culture, Communication, Curiosity),下面也展开一些重点。
技术:平常扎实的技术积累,包括系统知识点、不同编程语言、开源工具、团队合作工具,比如Restful架构有哪些特点、动态语言的优劣等。
基本功:代码简洁优美没有bug,常见算法的应用,优化技巧,比如如何把一个O(n^2)的算法优化成线性。好的编程习惯一定要坚持,格式:缩进可以良好排版,括号要对齐,变量名起的有意义。边界检查,参数检查,异常处理,单元测试。主动写出合理的Test case,一些常见的null检查。不管你之前做过多少年,只要申请工程师职位都要经历过编程的基本考核。
交流:实技术人员用到的英文都比较浅显,听和读应该问题不大,但最好在说和写方面下大功夫,这能突破一些天花板,更多融入团队交流。
系统设计:包括设计大型系统的架构选型,各种不同组件的tradeoff,数据库系统,网络系统,分布式系统。比如什么时候适合用NoSQL,如何做一个推送系统,缓存系统如何搭建。
如果本科不是学计算机的
想转行该怎么准备?
第一,让自己更Professional。比如你的简历只能放和计算机有关的东西,其他东西再牛也不能发挥用处(比如学生会主席)。如果Resume还是很空,就多去做项目。在Github上面多去follow项目,然后参与到感兴趣的当中。
第二,在某一方面达到工程师实力。临时转行时间短,找一个容易入手的准备,如果你以前做的事情跟数据有关,就申请Data Analyst。
本来就会一些基本技术的,可以做前端(JavaScript, HTML, CSS),去真正做一个自己的博客。
如果对产品感兴趣,就玩Django, ROR这样的网站框架,了解一个网站是怎么搭建起来的。
如果对Mobile感兴趣,就用IOS或者Android写两个APP。
这样做的好处是,简历不空,如果问到,可以驾轻就熟。
如果不相关,坦诚相见,说由于我是转行的我这方面不熟悉,可以尝试猜猜看。也可以直接告诉面试官,我是转行的,我对计算机很感兴趣,做了这么这么几个项目。于是面试官不会问你难题。结果你早就准备好了,超出面试官预期,就是一个高分
结语
方法论比解答更重要
其实我不希望讨论很多具体的面试题,因为题目千变万化,在网上也可以找到讨论,大家去Glassdoor, Geeksforgeeks, Careercup, Csdn blog上面都可以搜到,这里就不做“泄密”了;但方法论比具体的解答更重要,在工作中也很难遇到你之前背过的“答案”,如果你只是死记硬背还是不能进行创新和解决问题。
最后预祝大家都能顺利进入自己心仪的公司。