行为面(Behavioral Interviews)
什么是行为面?
行为面考察你的软技能和人际能力,而不是技术功底。几乎所有公司都有行为面环节。原因很合理:
- 没人想跟"难处的人"共事
- 工程师常常要应对模糊不清的局面
- 公司希望工程师在压力下也能有好表现
近年来公司还越来越多地在评估你的情商和共情能力。他们想知道你能不能换位思考、能不能处理复杂的人际关系。
资源提示
我最喜欢的行为面资源之一是 Jeff Sipe 的 YouTube 频道。他是前 Google recruiter,把科技公司想要看到的共情和人际能力讲得非常透。强烈推荐看几个他的视频。
题目类型
我遇到过的行为面试题主要有两类:
- 过去经历类(Past experience):通常以"Tell me about a time..."开头。面试官期望你给出工作(或学业)历史中真实发生过的例子。
- 假设题(Hypotheticals):面试官给出一个虚构情境,问你会怎么处理。这类题目期望你不要举过去例子,而是针对面试官提供的问题给出解决方案。
知道你被问的是哪一类很重要!太多人答错类型。拿不准?直接问面试官!
"你想要我讲一个我过去工作中的例子,还是你更想听我未来碰到这种情况会怎么解决?"
接下来我会分别讲怎么准备这两类题。
准备过去经历类
我最喜欢的方法是做一张表。行为面里反复出现的主题数量有限:
- 挑战 Challenges
- 成功 Successes
- 失败 Failures
- 享受的事 Things you enjoyed
- 领导力 Leadership
- 冲突 Conflicts
它们成为表的行。列则是你想拿出来讲的不同项目。我尽量为每行 × 每列填一个例子。下面是一张虚构的填好的表:
| 主题 | 项目 A | 项目 B | 项目 C |
|---|---|---|---|
| Challenges | 部署流程一团糟。我帮团队上 CD。 | 团队士气低。我组织社交活动 + 1:1 通话。 | 复杂、嵌套的表单逻辑要在多个客户端共用。我实现了 JSON Schema 让多方消费并用于校验数据。 |
| Successes | 平均请求时间从 1.5s 降到 750ms。 | 应对应用指数级增长,从每天 1,000 请求到 50,000 请求。 | 产品 Beta 以 1,000 用户上线。 |
| Failures | 我把日期格式化错误的代码推上了生产,导致一个 API 端点每次请求都失败。 | N/A | 没处理好我们和合作技术团队的关系,导致一些合作方退出。 |
| Enjoyed | 给开发者讲 CD。 | 第一次接触 CDN 和快速扩容,对这一领域学习得很投入。 | 有机会旁听用户调研,看到用户真正怎么使用软件,很有意思。 |
| Leadership | 我得向 CTO 汇报我对更好工程实践的设想。 | 当时没人是基础设施专家,所以我主动站出来 own 了这一块。 | N/A |
| Conflicts | 一些 senior engineer 反对我提的变更,我得通过 1:1 和 demo 一一说服他们。 | N/A | 团队成员对数据 schema 的校验方式无法达成一致,我推动了一个用结构化设计文档来达成共识的流程。 |
STAR 方法
STAR 是回答过去经历类题目的常用框架。STAR 代表:
- Situation(情境):铺好故事背景。你在哪家公司?什么项目?什么角色?还有谁参与?
- Task(任务):故事发生时面对的任务是什么?
- Action(行动):你个人采取了什么行动改善局面?(如果是讲错误,那这个错误是什么?)
- Result(结果):结果是什么?你的行动如何让事情回到正轨?或者说,你的错误带来了什么?
如果情境合适,最后再补一句你学到了什么。公司喜欢有反思与自我提升能力的候选人。
量化!
成功必须量化。很多组织是数据驱动的,期待你也是。如果可以,把你的成功直接挂钩到产生的营收;做不到的话,挂钩到已知与营收相关的指标。一些常用指标:
- 营收
- 用户数
- 应用性能指标
- 可用性
- 代码质量指标
- 团队 velocity
小心讲负面故事
讲所有问题和挑战都要带共情。比如,如果你不得不应对一个不满情绪的同事,不要把那个人形容成"坏人",而是说他们当时大概在经历困难期。我不是让你撒谎,但我强烈建议你永远不要说前雇主或前同事的坏话。
谈"教训"
公司很可能会问你的失败和错误。我们都犯过错,但不是每个人都从中学到东西。每次讲错误,确保也讲你从中学到了什么;如果你当时还做了 corrective action,也讲一下。
过去经历类题目示例
下列例子取自 Tech Interview Handbook(MIT 协议)。强烈推荐你也去看这份关于行为面(以及面试通用)的优秀资料!
- 讲一次你和同事发生冲突的经历。
- 讲一次你卷入冲突并需要影响他人的经历。
- 你做过最有趣的项目是什么?它们与本公司的业务环境有怎样的关联?
- 讲一次你和经理意见不一致的经历。
- 谈一谈你最有热情的项目,或者你做得最好的项目。
- 在过去的项目中,有什么是你必须坚持推动的?
- 你职业生涯中收到过最有建设性的反馈是什么?
- 你坚持做了几个月才完成的事是什么?
- 讲一次你完成紧急 deadline 的经历。
- 讲一次你和同事相处出了问题的经历。
准备假设题
我的经验里,假设题比过去经历类更难——因为它们模糊。前面提到的 Jeff Sipe 给了一个绝妙建议:先问 clarifying questions(很像在做 coding interview!),把你和情境的关系搞清楚。
举个例子:
面试官:"你会怎么处理一个看起来对工作不投入、没有承担起团队责任的同事?"
错误做法是直接开始回答——你信息不够!更好的做法是先问:
- 我和这个人是什么关系?我是他的经理?同事?下属?
- 这种状态什么时候开始的?是最近?还是已经持续一段时间?
- 是否有某个事件触发了这种行为?
面试官有时会回答"由你决定",这完全没问题!这意味着你可以自己决定澄清条件,再以最适合你的方式回答。
人际问题的解法
很多假设题会涉及和某人的冲突。这里共情很重要。你的方案要把对方当作人对待。要展示你能和这个人协作地解决问题。比如上面那个员工不投入的例子,你可能会建议先做个 1:1 探明原因,然后共同制定让他回到正轨的行动计划。
假设题示例
下面是我多年来听过的一些假设题:
- 你会怎么处理一个看起来对工作不投入、没有承担起团队责任的同事?
- 如果你的经理打算采用一个你不认同的技术方案,你会怎么做?
- 你会怎么说服一位同事接受你的技术方案更好?
- 团队里有一位 junior engineer 被排除在团队活动之外。你会怎么改善这个情况?
- 如果你意识到团队会赶不上 deadline,你会怎么做?
- 另一个团队的经理知道你是优秀的工程师,找你帮忙但故意绕开你的直属经理。你会怎么做?
看 Jeff Sipe 的视频
我再次提到 Jeff 的视频,因为它对我真的很重要。一旦你有了经历矩阵,Jeff 会教你如何用公司想听到的方式讲出这些经历——带着共情和开放心态。他还会讲很多怎么识别公司具体在问什么的小窍门。
走出舒适区
行为面,尤其是涉及人际关系的部分,对工程师来说可能完全在舒适区之外。这很难——一边要我们反转链表,一边又要我们处理"行为问题"。正因为很多人在行为面上不擅长,如果你认真准备,这反而是你脱颖而出的机会。
🎓 Frontend Interview Prep
One of the pioneers in the software interview prep space, Yangshun Tay, is now offering an extremely comprehensive frontend resource full of coding questions, knowledge challenges, system design problems, and more.
You can sign up for as low as $10/mo, which is an amazing deal if you consider the impact a new job can have on your compensation.
I'd strongly encourage any frontend engineers looking for new jobs to sign up! If you use the following link, I'll get a small referral bonus:
Check out GreatFrontEnd now »