Skip to main content

Behavioral Interview 经验分享

info

抛砖引玉的 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 个故事,你需要几个成功的故事,和一两个失败的故事,然后在这些故事的基础上,我们就可以针对性地准备不同类型的问题。

怎么发现故事

对于有经验的工程师来说,找到一些故事并不难,毕竟有项目经验很多事情都很好说,对于新毕业生来说,可能项目经验较少,有的人没有实习,只有一些小组作业,这样很难准备几个故事,怎么办?很多人就想着编故事了,大部分时候面试官没有时间和经历去鉴别真伪,但是这里我不建议编故事,完全编的故事迟早会露馅的,诚实是一个好品质。

虽然不能编故事,但是可以对你的真实经历进行加工,剪裁,或者移花接木,变成一个适合面试回答的故事。一亩三分地上有一篇文章对这个方法做了介绍,可以参照这里。在后面的技巧介绍中,我会继续使用该文章的例子。

小技巧

在进入正题之前说一个小技巧,被问到比较刁钻的问题,或者是没有准备过的问题的时候,可以:

  1. 重复问题
  2. 说一些无关紧要的话,比如: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),实际上留给服务器的时间只有几百毫秒,这是一个非常有挑战性的项目。然后我首先分析问题,我们知道服务器端响应时间长,要么是获取数据时间长,要么是内存处理运算量过大,然后我从这两个角度来审视代码,发现我们频繁从数据库拿信息,同时,所以我提出了两个方案:

  1. 数据库反范式化 (Denormalization)
  2. 分析载入的数据,对于实时性要求不高的我写了缓存(因为某些限制我们不能用第三方的缓存,所以我自己写了一个)

最后我载入大量数据进行测试,发现通过这两个优化办法,我减少了大量的数据库访问,原来载入一个页面需要 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

Culture Fit 类型

为什么跳槽,为什么来我们这儿面试?

  • Why do you want to leave your current position? Why us?

关于为什么跳槽,有不少经验或者攻略说可以说一些诸如个人、家庭原因所以要跳槽,但是我觉得这种回答是中性的,不好也不坏,能作为答案,但是不能给自己的面试加分。还有一个比较讨巧的回答就是:我想要迎接新的挑战。我认为是可以这么回答的,但是不能就这么直接的甩一句话给面试官,需要结合自身经历,用一些故事或者例子来引出结论,然面试官明白你确实是这么想的,而不是因为看了面试攻略,攻略上说这样回答比较好。

举个例子

我在现在的职位上已经 XX 年了,我参与了很多的项目,在这些项目中我参与了

  • 前端和后端的开发,或者
  • 不同模块的开发,A 模块,B 模块……(针对你的经验说),或者
  • 从需求分析,到数据模型设计,数据库开发,服务器端开发和客户端开发的全过程

通过这些项目我学习到了很多很多东西,我发觉我已经非常熟悉 xxx(和你职位相关)的那些流程/理论/方法,由于

  • 目前职位所限,或者
  • 公司技术栈 (Tech Stack) 所限,或者
  • 公司管理方式所限(比如不能自由换组,只能一直在一个/一类项目上工作)

我觉得继续做下去学到的东西越来越少/我觉得越来越舒服,我个人是喜欢不断挑战/跳出自己的舒适区,所以我就出来寻找不同的机会

我个人认为这样的回答算是中等偏上的回答,首先指明自己经验丰富能胜任工作,然后又体现了自己是勤学好问积极向上的人。至于怎么组织出精炼,就需要各位自己体会了,反复练习找到自己最说的最自然最顺口的句子是最好的,避免使用难长句,这样容易显得自己在背答案。

有些人可能工作几个月就跳槽了,上面的回答方法不太适用,我没有这方面经验不知道这种情况怎么回答,希望大家提出建议

关于为什么选我们(Why us?),我觉得同样有一些套路,原则就是尽量体现自己对这个公司的产品/文化有极强的认同感,同时体现自己与众不同。

假大空的话大家都会说,因为你们公司是行业顶尖的公司,因为你们公司福利很好一日三餐免费,因为你们公司工资给的最高,这些虽然都是实话,但是光说这些是没法通过面试的,我认为这些理由可以提,你可以说:"Be honest, one of the reasons is that..." ,但是简单带过就好。

进阶一点的套话就是:

  • 我了解到你们公司文化开放,我很喜欢;
  • 我喜欢给员工提供教育机会;
  • 你们公司贡献了很多开源项目,我也一直希望能回报开源社区;
  • 你们是一个小公司,我希望能和公司一起成长;
  • 你们是一个大公司,有很多机会,在不同的项目中增强我的视野;
  • 我特别敬仰你们 CEO,我读了他的文章收到鼓舞;
  • 等等......

实际上网上很多面试指导提供的答案都是这些进阶套话,因为这样套话多多少少向面试官展示了面试者是了解他们公司的,但是我认为这样的套路已经不能满足面试官了,所以这些套话依然是可以说,但要做到尽量简洁!

剩下的时间我认为应该说与众不同的理由,让面试官觉得你是真心实意想来的,就是我自己归纳的**“以小见大”法则**:通过一个小故事小功能 (feature),讲大道理,而不是泛泛而谈。

例子:比如你去面试 Facebook。大家都知道脸书的文化中有 move fast,你单单说:“我喜欢你们 move fast 的文化, 因为我就是一个这样的人。”,是不够的。你可以说:“我很欣赏脸书的文化,其中特别喜欢 move fast,我记得巴黎恐怖袭击的时候,脸书很快就上线了 Safety Check,想想一下如果当时我在巴黎,我朋友家人肯定担心我,如果通过这,从这一个小例子我就发现脸书确实是 move fast,而且还是一个有人文关怀的公司,当时我就想这是我的理想公司。”

我个人觉得这样回答是不错的,首先体现了你一直在关注这个公司的产品,然后透过这个产品你观察到了什么,最后再升华成大道理,很像写高考作文。所以在面试之前,多了解公司的产品,有条件的话多使用几次(如果公司是做 B2B 的产品,用不到怎么办?那么多看看新闻,找找线索),然找到属于自己的那个“特殊理由”,让自己能与众不同,脱颖而出。

总结:为什么选我们 = 常用套话/进阶套话 + 自己的闪光点

你怎么解决冲突?

Describe a situation... / Tell me about a time, conflict with co-worker/manager

这个问题也是非常常见的面试题了,主要目的就是考察面试者是不是一个能和别人合作的人,算是一个比较容易回答的问题。回答的要点在于不要假设,而是讲故事。如果你觉得找不到一个比较合适的故事,或者是实在没有那种真的算得上冲突的经历,可以这么思考:不要把冲突想成很大的事情,冲突可以是两个人对某个问题有不同的看法,尤其是遇到 Design Decision 这种没有标准答案的情况,肯定会有意见不统一的时候。

还是上面的例子,我们的产品页面响应时间很慢,我和另外一个同事/同学负责改进。我的想法是我们的数据库 Table 设计不合理,导致过多的请求,拖慢的速度,所以我们应该重新设计。我同事的想法是修改数据库会导致很多代码需要修改,有潜在风险,所以应该引入缓存。我们都觉得自己说的有理,无法说服对方。时间紧任务重,所以我就跟对方提出,我们都想让产品变好,光这样分析很难,不如我们合作,一起花半天时间把两种方法都写个简化版,然后测试一下,最后选更好的方案。对方同意了我的提议,最后经过综合分析,觉得我的方案好,然后同事/同学也理解了我的思路,当然我也理解了他的思路,在这个基础上,两个人合作的效率变得更高了,而且以后两个人合作也更顺手了。

当然你也可以有其他的故事,比如客户对产品不满意,非常生气怪罪到你头上,之后就不配合你工作之类的,总之对待这种问题就需要发掘自己过去经历中发生冲突的时刻,然后做适当包装。回答中要注意的是:

  • 对事不对人,任何时候不能说别人坏话;
  • 不要做假设性回答,讲故事;
  • 不能说我和别人相处的很好没有冲突;
  • 在说你怎么处理问题时候体现你专业素养,是一个好的 team player,是愿意沟通的人,是努力想让项目成功的人。

有的时候会反过来考你,让你说说有冲突而且你失败的故事,那么你就可以把上面的故事反过来说,同样在说的过程中体现出你是愿意倾听别人意见,愿意承认错误并且配合的人。

Negative Experience 类型

失败的经历/后悔的决定/如果再做一次你会改变什么

  • What's your biggest failure?
  • What's your most regretful decision in your work?

这种负面问题是最讨厌的,很容易一不小心说多了给面试官留下坏印象,又不能太油滑回避问题。回答原则就是实话实说,说说你过去的失败经历,你犯的错误造成的后果,以及你学到了什么,比如说你可以这样:我曾经领导一个项目(可以是 course project, 或者是工作上的项目),带着一堆人,起初我觉得大家都是优秀的工程师,所以开始就简单的做一个计划, 分配好任务就开始做了,做到后面慢慢发现当我们把大家的东西整合到一起的时候,我们发现了很多问题,比如有人默认其他人已经 handle 好了 exception,他就没有再做检查等等。最后我们浪费了不少时间在 debug 上面。如果让我再做一次,我会花更多的时间在分析上,明确好每个人的责任,定好 interface 等等再分配任务,这样就能避免很多问题。

我觉得这个例子一般,暂时想不到更好的回答。我在面试中遇到过这个问题,我的回答是结合我自身经历来说的,并不通用,但是回答结构和上面的例子差不多。之后如果有看到更好的例子,会再做补充。

Question to Ask 类型

无论什么面试最后一般都会留时间让你问问题,虽然很多时候只是走过场,但是并不代表这个环节不会挂人(Mitbbs 的帖子也提到了:behavior question 要认真准备)。

最后这个环节很简单,肯定是要体现出对面试的职位的渴望,对面试公司的热爱。一些经典的提问:

  • What are you working on? (如果之前面试官没有介绍的话)
  • What does a typical day in this role look like?
  • What are the trainings I will receive if I am hired?
  • What do you enjoy most about working here?
  • What's the biggest challenges I will face if I am hired?
  • Does the company encourge us to work on different projects/teams?

这些问题其实都非常笼统,我认为可以在此基础上优化一下,我叫它“对症下药法一般面试开始前面试官都会做自我介绍,可以仔细听听面试官都来自哪些组,做什么项目,最后问问题的时候可以问一些针对性的问题,比如面试官是做某个功能的,你可以说我觉得开发这个功能的 challenge 在这里这里,你认为是什么?比如面试官介绍说原来在 A 公司工作,现在来了这,你就可以问你觉得两个公司工作上、文化上有什么区别?比如面试官是一个经理,你可以问问他怎么看待员工换组的问题,怎么给员工提供继续教育的问题。其实问题还是上面列出来那些问题,只是你换了一种方式来问。万一面试官是一个很喜欢说话的人,可能这一个问题他就能说很久,如果面试官说的不多,你可以继续针对他的回答再追加问题,这样可以在一个话题上讨论很久,而且显得你尊重面试官,有认真听并且有思考。

反例

在面试的过程中一定要随机应变,哪怕你不认同面试官的观点,一定不要顶撞,没事稍微恭维几句但是不要谄媚,否则在一些不必要的地方失分,就功亏一篑了。给大家说一个我听过的反例,某公司面试流程中有一轮是午饭,一般来说午饭就是让来面试的人放松放松,聊聊天就行,但是作为面试官还是要提供反馈的,正常情况下,不管面试者是内向还是外向,只要表现正常都是通过的。偏偏有一个候选人,在明知道和他吃饭的工程师是前端工程师的情况下,还不断发表鄙视前端的言论 ("front-end engineers are not real engineers"),结果可想而知,他挂在午饭这一轮。

总结

当你熟悉了 Behavior 问题的套路之后,并且经过提前准备和反复练习,相信你的回答在内容上已经不会有什么问题了,剩下的就是看面试官和你是否合得来了。 所以面试过程中一定要自信!和面试官眼神交流!所有回答大声地说出来!同时观察面试官的反应随机应变,做到和面试官谈笑风生,做到这些肯定能得到一个较高的分数。