Behavioral Interview 经验分享
抛砖引玉的 Behavioral Interview 经验与总结分享
Behavior Interview
现在很多公司都有一轮专门问行为问题,一般叫做 Behavior Interview, 也有叫 Cross Functional Interview,也有叫 Host Manager Interview。不管怎么叫,问的内容都差不错,大致就是了解你过去的经历(Past Experience),是否适合公司的文化(Culture Fit),你个人的兴趣(Personal Interest/Technical Taste/Your Interest)和找工作的动机(Motivation)。
刚开始准备面试的时候我觉得这些问题很难,尤其是对于应届毕业生(New Graduate),各个方面经历不是很丰富,所以往往很难回答,毕竟有些事情真的是没有经历过,这时候就考验临场应变能力了。但是我认为临场应变得再好也不如事先准备好,然后从容地回答,毕竟我们都不是把英语当做母语的人。我希望通过介绍一些套路,能完全没有思路的人一些提示,但是我也认为,套路并不是最佳的答案,希望本文能给你一些启发,从而帮助你找到最适合自己的答案。
其实网上有很多准备方法,比较经典的就是所谓的STAR 原则,即 Situation(情景)、Task(任务)、Action(行动)和 Result(结果),首先使用这个原则准备 3-5 个故事,你需要几个成功的故事,和一两个失败的故事,然后在这些故事的基础上,我们就可以针对性地准备不同类型的问题。
怎么发现故事
对于有经验的工程师来说,找到一些故事并不难,毕竟有项目经验很多事 情都很好说,对于新毕业生来说,可能项目经验较少,有的人没有实习,只有一些小组作业,这样很难准备几个故事,怎么办?很多人就想着编故事了,大部分时候面试官没有时间和经历去鉴别真伪,但是这里我不建议编故事,完全编的故事迟早会露馅的,诚实是一个好品质。
虽然不能编故事,但是可以对你的真实经历进行加工,剪裁,或者移花接木,变成一个适合面试回答的故事。一亩三分地上有一篇文章对这个方法做了介绍,可以参照这里。在后面的技巧介绍中,我会继续使用该文章的例子。
小技巧
在进入正题之前说一个小技巧,被问到比较刁钻的问题,或者是没有准备过的问题的时候,可以:
- 重复问题
- 说一些无关紧要的话,比如:Ah, it's very common that.... This is a good question!
比如:Tell me about a time you disagreed/have conflict with a coworker, and finally you agree with your coworker?
一般来说面试都是让你说说以前和同事冲突的经历,往往面试者会准备一个故事,说有冲突,然后最后自己说服了对方。这个问题反过来问,说你的同事说服了你。那么遇到这种情况当然就是把准备好的故事反过来说,但是有的时候需要稍微组织一下语言,所以就可以先假装确认问题,重复问题:
We have conflict and finally I agree with them? Ah, It's very common that we have disagreement on a certain topic , usually it's because we see problems in different perspectives. Sometimes I win the debate, sometimes I don't...
脱口而出上面那堆废话,同时脑子里在组织后面的答案。其实托福口语也是这么一回事。但是注意一两句就适可而止,说多了就是废话了。
Past Experience 类型问题
自我介绍
Brief Introduction on yourself.
一般在面试刚开始几分钟作为热身问题,让面试官和面试者互相了解。这类问题一般都是标准模板,相信所有人都会准备,总之就是事先准备好比较长的介绍,可以超过 3 分钟,然后在面试的前几天,针对你要面试的公司和职位,专门裁剪一下答案,突出自己适合这类工作。比如面试职位要求有一定的 Web Services 经验,你就可以在介绍中说自己不少项目都开发或者使用过 REST API。
具体可以参考一亩三分地的这篇 Crack the Behavior Questions——关于 Behavior Question 的碎碎念
介绍简历项目
如果仅仅是从简历上挑一个项目让你介绍,那么最好的方法就是根据上面提到的 STAR 原则来介绍。往往简历上项目细节中会介绍一些成就,比如你简历上写了你做了一些事情,提高系统运行效率,那 么就可以这样介绍:
Situation(情景):我们需要开发一个新项目/我们某个功能出问题了。
Our product have serious performance issue. A single page take minute to load.
Task(任务):我觉得这个机会很好,自告奋勇来解决 xxx 问题。
同时体现下自己契合公司的文化,比如说你面试 Facebook,脸书比较看重你工作的 Impact,你就可以说: If the page is slow, users will be unsatisfied with our product. I believe improving the performance will have huge impact on our product. So I take this job to investigate the issue.
Action(行动):我分析了一下产品需求/问题症结,研究了一下目前的代码和业界通用的代码,我觉得问题出在 xxx。然后我写了一些脚本对整个生命周期进行分析,做了大量测试,发现确实问题在 xxx,一般针对这种问题,我们有几种解决办法,考虑到我们的情况,我做了 xxxx, xxxx 改进。
Result(结果):最后速度是以前的 xx 倍,而且我的方案作为 best practice 被大家认可,推广。
如果没有这么完美的故事怎么办?请参照前文“怎么发现故事”。其他内容也可以参考一亩三分地的这篇 Crack the Behavior Questions——关于 Behavior Question 的碎碎念_
最有挑战性的项目
- What's your most challenging project / project you are most proud of ?
有的人可能经验比较少,或者觉得目前的学习/工作上接触的项目都太简单,实在没有什么好说的。我一开始也是这么觉得的, 但是后来经过一段时间研究和实践,我发现其实这类问题都可以用类似的套路来解决,总的回答框架还是 STAR 原则,介绍问题的时候终点突出问题的严重性(比如:我们一个页面要好几分钟才能加载完成),我们要提高到 1 秒以内,考虑到网络延时(Network Latency),实际上留给服务器的时间只有几百毫秒,这是一个非常有挑战性的项目。然后我首先分析问题,我们知道服务器端响应时间长,要么是获取数据时间长,要么是内存处理运算量过大,然后我从这两个角度来审视代码,发现我们频繁从数据库拿信息,同时,所以我提出了两个方案:
- 数据库反范式化 (Denormalization)
- 分析载入的数据,对于实时性要求不高的我写了缓存(因为某些限制我们不能用第三方的缓存,所以我自己写了一个)
最后我载入大量数据进行测试,发现通过这两个优化办法,我减少了大量的数据库访问,原来载入一个页面需要 100 次,现在只要 5 次。大大提高了速度。
上面这个例子很简单直接,但是我认为是一个比较好的回答,其实很多时候讲有挑战性的项目并不需要讲什么高大上的东西,甩一大堆目前流行的概念,比如说页面访问慢我就搞分布式,多加机器并行计算之类的,很多时候你可以通过一个很简单的例子来阐述,我认为重点应该是思维方式,突出你是一个愿意发现问题,愿意刨根问底,愿意积极解决问题的人。
如果你觉得自己经验少,找不到值得介绍的项目,请参考上面提到的文章:看看这篇文章参考人家怎么把一件小事包装成富有挑战性的故事
领导能力
- Tell me about a time when you demonstrated leadership skills.
对于有经验的面试来说有的时候会考察领导力(Leadership),对于应届毕业生也有可能会问到,问题也很简单,就是让你说说你领导的经历,很多人实际上都没有领导的经验,毕竟这样的机会不多,我觉得可以有种化解方法:把上面提到的最有挑战性的项目转化成你带领几个组员一起做,然后在这个过程中你怎么体现领导力,重点放在领导上面而不是技术细节。
职业生涯
- What's do you see yourself in 5 years?
- What's your career path? Is there anything change in the past few years?
如果不是 General Hire, 面试前看看职位要求,然后自己介绍未来计划的时候可以多,如果是 General Hire,那么面试前可以稍微了解一下公司的的常见的 Career Path(如果网上找不到,可以问面试官)。遇到这类问题表达结构清晰一些,像写 GRE 作文,比如可以说:首先,我希望在技术上有所提高,成为某方面的的专家... 其次,我希望能体现出领导力(Leadership)...
TBD