笔者之前在LinkedIn做技术工作同时,也花了不少时间在招聘上,成为了当时LinkedIn前三的面试官,包括挖掘候选人、参与校园招聘、草拟面试题、电话面试、Onsite面试、填写反馈,和最后决定是否发放Offer,都有完整的流程和经历。
在本文中,我按问答形式给大家借鉴。这里也推荐一下我的新书:程序员面试白皮书(An Ultimate Guide to Coding Interviews).
问题:硅谷公司的招人的渠道有哪些,跟国内有何不同?
一般公司都有自己的Refer和面试系统,HR人员寻找候选人,在LinkedIn上就有丰富全面的简历库,通过对毕业学校,就职公司的过滤去挖掘潜在员工。还有一些高水平的学术会议,工业界愿意支持和参与,像SIGMOD,VLDB顶级数据库大会;也喜欢举办公开技术讲座,邀请社会各界参加,注册时留下联系方式。或者写一些技术博客,开源产品,通过他们做的有意思的项目来间接吸引人才。有时也举办一些hackathon比赛,24小时做出一个小产品原型,欢迎各类技术人才挑战。当时我也参加LinkedIn的编程马拉松,每人发一件T-shirt,写着 Eat, Code, No Sleep。我记得内部统计表示,2/3的人都是通过内部推荐进来的。
其实国内的思路更厉害,比如最近雅虎北京一裁员,忙坏了各路IT公司,某创业公司也凑热闹一起去抢人,派出2个高级工程师去面试,结果,负责面试的2个员工都被人挖走。
问题:硅谷公司招聘流程是什么,跟国内有和不同?
我刚好在国内外都工作过,我可以做个对比。
国内:如果是在校生,一般都要有个笔试,通过率也不高,可能就百分之几,然后在校园里面试3轮左右,分别对技术,基本功,价值观的考察。然后就会大规模发offer,一些大公司如百度,阿里一年招上千人是很常见的。
硅谷公司:一般是没有笔试。如果HR发现简历的一些关键字和背景符合职位需求,简单介绍公司,安排1,2轮电面,如果通过,邀请onsite面试,里面会有4-7轮,里面涉及到不少白板编程,虽然很多人争议,但目前为止还是有些无奈的选拔手段。
LinkedIn会花很大代价去组织,包括报销来回机票,吃穿住行,赠送小礼物,给候选人一种非常受尊重的感觉。比如附带礼物中有一个inMap, 把你在LinkedIn上面的联系人聚类可视化呈现出来。非常酷。
这里面成功率非常低,真的是千里挑一,虽然代价很大,但很多公司都是强调人才是第一位的,在宣传企业文化和价值上也是起到积极作用。然后就是收集反馈,一般是2个面试官back to back同时给出评价,按1-4打分,最后取平均分,Yes = 3.0 ; Very Yes = 3.5; No = 2.5 招聘委员会通过投票和辩论来确定是否发放Offer。
我记得印象深刻的面试:面试者岁数大些,当时我面的时候也没出众,我准备给他一个一般的分,但他回去马上给我写了一篇长信,解释当时我问的问题,给出详细参考,我对他的回答非常佩服,至少态度很积极,也许是当场没有发挥好,我立马改变了印象,给他很高评价,但其中有个初级面试官居然给他1分,什么概念
Produce a system that is clean, elegant, well thought
Explain why you choose this implementation
Be familiar with your experience level to make decisions
Answer in high level of scale and complexity
其实大家大可不必追求完美,在真正的面试中,没有人能对答如流,往往面试官也会给出善意的提示,就算你没回答某个子问题,在面试后的评价中也会综合衡量,跟其他的面试者比较,最终打出一个分数。很多人在2到3分左右,目标是尽量在3分以上。
问题:我不是算法大牛,不是ACM队员,听说Google,Facebook有很多牛人才能进,那我怎么能拿到好Offer?
首先要是要有信心,算法不是想象那么难。
第一:因为面试常见的算法就那么几种。只有你努力去总结归类相似题目,才能只做很少的题就可以会很多的题。不要盲目关注数字。做题质量非常重要。标准是:你做过的题目,让你再做一次,你就能“完美解决”。
第二:即使你知道一题的解法,你未必能写好。因为你可能每次写出来的程序都很随性,这样会漏洞百出。程序员是一个非常讲究严谨性的职业,如果你在总结题目的时候能够找到这些题目的模板,你把模板提炼好,碰到类似的题目,可以一边写模板,一边想想怎么在模板上做一点简单的改动。这样节省时间又保证不会出错。
问题:如果本科不是学计算机的,又想转行该怎么准备?
1、让自己更Professional。比如你的简历只能放和计算机有关的东西,其他东西再牛也不能发挥用处如果Resume还是很空,就多去做项目。在Github上面多去follow项目,然后参与到感兴趣的当中。
2、在某一方面达到工程师实力。临时转行时间短,找一个容易入手的准备,如果你以前做的事情跟数据有关,就申请Data Analyst。本来就会一些基本技术的,可以做前端,JavaScript, HTML, CSS,去真正做一个自己博客。如果对产品感兴趣,就玩Django, ROR这样的网站框架,了解一个网站是怎么搭建起来的。如果对Mobile感兴趣,就用IOS或者Android写2个APP。这样做的好处是,简历不空,如果问到,可以驾轻就熟。如果不相关,坦诚相见,说由于我是转行的我这方面不熟悉,可以尝试猜猜看。也可以直接告诉面试官,我是转行的,我对计算机很感兴趣,做了这么这么几个项目。于是面试官不会问你难题。结果你早就准备好了,超出面试官预期,就是一个高分!
问题:面试时候如何表现自己体现沟通能力?
首先你要站在面试官的角度,面试官招你进去当同事,他希望同事是怎么样的人就决定了他的立场。学会换位思考。
让面试官时刻明白你的意图,不要闭着眼睛不停写。对于面试官来说,他根本不知道你的解题进行到哪一步了。你可以反复和面试官交流自己的想法,得到面试官认可以后再动手写。可以讲讲你怎样想到这个思路的。记住,你并不是要说服他接受你的想法,而是要把你的想法解释给他听。面试官提出质疑的时候,第一,不要觉得面试官什么都不懂,怎么这都不知道,第二,面试官比你经验丰富得多,很有可能就是你犯错了,赶紧想想是不是真的有问题。
问题:面试中出了Bug怎么办?
BUG Free很重要,这个需要我们平时不断的练习,按照我们方法的准备,还是可以避免一些坑。但碰巧你可能不在状态,写出了BUG被面试官指出,是不是就挂了呢?
别担心,出BUG很正常,也许面试官来面你之前正在DEBUG:( 衡量一个程序员能力的标准,并不是他能想出多牛的算法而是当遇到问题的时候,程序员去分析和解决问题的能力。而出BUG的时候,正是展现你是否是一个合格程序员的时候。
DEBUG流程:
通过TEST CASE定位BUG所在位置。
不要立即修改代码,重新梳理逻辑。因为很有可能还有其他BUG。
走完所有逻辑之后,心里有数怎么改了,再动手开始改。
用TEST CASE再走一次新的代码。
在整个过程中,不停的告诉面试官你在干嘛。
这样,成功排解BUG,不但不会减分,还会因为你优秀的DEBUG能力和与此同时展现出来的沟通能力而加分。
最后希望大家在找工作方面能有所收获,不用多久,就会升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰~想想还有点小激动呢,嘿嘿~~ 同学,梦醒了么,该去搬砖了。
本文参考资料:
How to Conduct a Better Coding Interview
In Defense of Whiteboard Coding
像谈恋爱那样去招顶级程序员吧!