面试硅谷创业公司:请把面试官当成你的同事
现在有不少的硅谷公司直接招聘国内的软件工程师到美国工作,这些公司主要是大的互联网企业和中型创业公司(太小的创业公司没有资源申请H-1B签证)。有很多的朋友对此有兴趣并且问我需要准备和注意的地方。 我觉得大部分的技术能力都是靠一定时间的学习和积累的,基本上不能准备;但假设你的技术和经验都很好,面试当场的表现的确可以在短时间内准备和提高。
我每次在面试现场都尽量跟每个应聘的朋友分享一些面试的技巧,让他们放松并且充分准备。现在把这些想法总结一下,我想这些经验主要对创业文化比较强的公司有帮助 (如果招聘的公司是传统文化的大公司,有些建议可能适得其反)。
最最关键的一点: 不要把面试当成学校的考试。这样的场景很常见:面试者走进面试的房间;坐下;被问到任何一个问题,就用一两句话尽量精确的回答;拿到一个实际的问题就尽快写出程序,交给面试官“评审”…… 整个过程跟考试一样,极少的互动。面试结果非常随机:如果你对问题的理解正好是面试官想问的,并且如果你的回答正好是他想要的,并且如果他正好能看懂你的程序,那你就被录取了;以上几个“如果”的任何一个出现任何的偏差,你的面试就失败了。
上面的过程是有不少可以改进的地方的:
1、保持自信:走进面试房间之前,检查一下自己的手心是不是湿的(紧张的时候手心容易出汗),如果是,擦干了再走进去,握手的时候就不会让面试官觉得你非常紧张。 深吸一口气,默默的告诉自己没问题(这样的自我暗示还是挺有用的)。走进房间,主动给面试官打个招呼,给一个有力的握手,留下一个自信的第一印象;
2、保证交流表达的顺畅:不少的朋友觉得自己的英文说得不准确,怕说错,所以很小声;同时紧张起来往往越说越快。对方听起来声音很小、口音不一样、加上语速太快,就很难听明白。所以,说话的时候声音一定要足够大,让对方能听得很清楚(包括的你念错的词也要能听清楚)。同时,你可以主动放慢自己的语速,并且要求对方适当放慢他们的语速,不要害羞担心别人觉得你的英语不够好。在国际范围招聘工程师的公司,东欧和亚洲的非英语工程师都很多,里面的员工是能够理解并且愿意减慢语速的。如果语言交流还有障碍,可以用白板(或者黑板)写下关键的问题和术语;
3、确认双方对问题的理解一致:硅谷的公司面试往往是使用工作里面碰到的实际问题,做一定的简化,改成可以在30分钟之内解决的问题。问题往往不是教科书上看过的;或者,更危险的情况是问题看起来跟教科书上看过的类似,但实际上有本质不同。如果你没有跟面试的同事确认你们俩对问题的理解是一样的,那很容易发生的情况是你按照自己的理解花30分钟写出程序,然后面试官说“这不是我要的答案啊”。 比较稳妥的方法是你主动针对问题提出一些讨论,比如用几个简单而有代表性例子把问题的输入和期待输出都描述清楚,双方都同意这一组输入输出,然后再动手解决;这也自动的给你一组测试例子了;
4、确认对方理解你的解决方案:我见过不少的例子是面试者用很复杂的算法(往往需要一片论文来证明正确性)来得到一定的算法复杂度优化。大部分的工程师并没有那么专注于学术,面试官很可能看不明白。而面试者本人也很难在10分钟内把一片论文的正确性证明说清楚。这样的结果是别人不可能很快的同意你的解决方案(在实际工作里面,就是你的程序很难通过Code Review),而在45分钟的面试里面,面试官就不能赞成录取你。我给面试者的建议是:如果一个算法不能在5分钟之内用英文解释清楚,就不要在45分钟的面试里面用这个算法。
5、最后,最重要的“tip”是把面试官当成你的同事,而不是监考老师。整个面试的过程,技术题目解答(程序)的优劣大概只占一半的权重,同样重要的是你能否从头到尾解决一个实际问题。这是一个过程:理解问题的本质、约束条件、时间和空间的取舍、你们deadline(30~45分钟)和工作量的取舍(复杂的好算法还是简单的“能用的”算法)、 最后你的程序写好了还要能让你的同事看懂并且同意你的解决方案。