本文来自于问答网站Quora,由在线支付创业公司Stripe的CTO Greg Brockman亲自作答。
我们对面试过程经过了数次重新设计,最近的一次是在今年5月,由Siddarth Chandrasekaran、Evan Broder和我共同设计完成。我们会尝试在面试中模拟你每天所做的工作,我们不会问你任何纯算法的问题,你如果需要求助Google或是面试官,都是没问题的。
首先我们会通过Skype对你进行编程面试,我们会要求你现场编程,你可以使用你擅长的编辑器和语言。我们所问的问题主要是为了测试你“将想法转变为代码”的能力,换句话说,想到解决问题的思路并不难,难的是要写出干净的、可维持的代码来实现相关的功能。单单写出正确的代码是不够的——我们要的是优秀的代码,而很多人做不到这一点,这也是他们面试失败的主要原因。
线上面试由以下几个部分组成:
设计和实施(90-120分钟)。我们会要求你设计一些系统(如一个API、网页界面,或是一个分布式系统),然后递交一个你设计的系统的原型。我们这样做是为了观察你如何点对点解决问题:在读透题目要求(无论用户要求还是技术要求)的前提下,找到一个解决方案,并成功实施。你需要好像它要投入生产一样对待它:对代码的质量而非数量进行优化,视情况编写测试等等。如果你做到了以上要求,没完成也没问题。
排查漏洞(45-60分钟)。我们会给你一个热门的开源项目,里面有些未被成功排除的漏洞。你的任务就是尽可能地修补这些漏洞,我们这里主要是想看看你如何驾驭一个你不熟悉的代码库,并对他人的代码进行漏洞修补。
重构(45-60分钟)。我们会给你一个急需改善的应用,要求你改善它的结构。这里我们主要是想了解你对优秀代码的想法。
Pair Programming(30-45分钟)。我们给你一份小型的独立的项目,我们需要你写出干净的可维持的代码来实施它。这里我们想了解你在清楚知悉限制的情况下编码的能力。
在对你做技术评估的同时,我们还想了解与你一起工作是怎样一个情况。所以我们希望面试过程能通过流畅的网络进行,确保沟通愉快。
在面试的结尾,我们还会进行一些小测试:
Sunday test。如果在一个周日,有一个人独自在办公室工作,你会放弃休息,去陪陪TA么?这当然只是假设——这是为了看是否这个人足够有魅力来让其他人乐意与TA为伴。
Excitement test。雇佣这个人,会让你对在Stripe工作感到更加兴奋吗?我们雇佣的每一个人都应该在某种层面上让公司更好。单单维持公司之前的水平还不足以让人兴奋——这个人需要能为公司带来日常工作之外的价值。
Velocity test。这个人在加入Stripe的前6个月内能做到自立吗?我们会雇用多种工程师,其中有些工作多年,有些则初出茅庐,无论哪种,我们都想给予同等的辅导,我们也想确保每一个员工都有能力完成自己的工作。如果在头六个月里,我们觉得你没法做到这一点,那我们就会认为你无法达到我们要求的速度。
我们会要求每一个Stripe员工都参与招聘决策,招聘会议对公司所有人开放(虽然通常只有面试官会参加),每个人都由否决权。这样的话,所有人不仅参与了雇佣新人的过程,也能对雇人结果负责。衡量一个过程进行得是否成功,颇为重要。长期来看,我们关心的重点是我们是否建立了一支伟大的团队。我们无法对此作出绝对的评估,但我们所进行的测试是为了了解人们是否因为喜爱团队的伙伴而加入进来。让面试者与公司的一群可爱员工一起吃午饭,是我们目前最有效的“勾引”手段,如果这一招百试不爽,那就证明了我们正在建立一支正确的队伍。