结对编程面试:你会遇到什么以及如何准备
作者 Aaron Cao · 更新于

在结对编程面试中,你会与一位工程师一起编写真实代码,通常在共享编辑器或你自己的IDE中通过共享屏幕完成,任务往往是在真实代码库中修复一个小功能或缺陷。面试官评估的是协作能力、沟通方式以及测试等习惯,而不仅仅是你是否完成了任务。
结对编程面试与算法编程测试有什么不同?
如果你主要是用算法题来准备面试,结对编程环节可能会让你感到陌生。本节将解释两者的区别,以及这如何改变你的准备方式。简单来说,你被评估的身份是未来的团队成员,而不是解题者。
面试环节通常以三种方式之一进行:基于浏览器的共享编辑器、你自己的IDE并共享屏幕,或者是你已经完成的带回家项目的延伸。任务往往接近日常工作,比如添加一条校验规则、修复一个失败的测试,或重构一个函数。有些公司会互换角色,让你在会话中一部分时间担任负责打字的“驾驶员”,另一部分时间担任负责指导的“领航员”。
面试官会评估哪些方面?
- 澄清问题。在写代码之前,你是否确认了需求以及“完成”的标准。
- 边想边说。你的搭档是否无需追问就能跟上你的思路。
- 渐进式推进。是小步且可运行的进展,而不是最后一次性提交一大段改动。
- 测试。你是否编写或运行了测试来证明改动是有效的。
- 阅读代码。你能多快在不是自己写的代码中找到方向。
- 接受反馈。你如何回应搭档给出的提示或不同的想法。
白板、带回家项目和实时算法题等其他编程面试形式,可以在面试类型汇总页中进行比较。
一个好的结对编程环节是什么样的?
一位应聘物流初创公司中级职位的后端工程师,被要求为现有的结算模块添加一条折扣规则。在动手写代码之前,他们先问了折扣是否可以叠加,以及已经处于处理中的订单该如何处理。他们先阅读了现有的测试,为新规则写了一个失败的测试,用最简单的改动让测试通过,然后询问搭档这条规则应该放在定价类中,还是放在一个单独的策略对象里。当面试官提出不同的思路时,他们尝试了这个思路,并解释了其中的取舍。他们没有完成加分项要求,但反馈依然聚焦在他们有多容易合作这一点上。
先澄清需求、先写测试、进行小步改动并讨论设计,这套流程正是大多数结对编程环节想要观察的重点。
应该如何准备?SubcueAI在其中扮演什么角色?
常见问题
结对编程面试中可以查资料吗?
通常可以,比如查文档或语法,但要先问清楚。很多面试官希望你像平时工作一样查资料,更看重你如何使用查到的信息。
结对编程面试中卡住了怎么办?
说明你卡在哪里、已经尝试过什么,然后提出一个具体的问题。结对本来就是协作性的,提出一个好问题也是被评估的一部分。
我需要完成整个任务吗?
不一定。有些任务本来就故意设计得比时间允许的更多。整洁、经过测试的进展和清晰的沟通,通常比完成每一项要求更重要。
我会使用哪种编程语言?
这取决于公司。如果任务基于一个真实的代码库,语言通常是固定的;否则你可能可以自行选择。请查看邀请信息,如果不清楚就询问招聘人员。