我遇到过的最好的工程面试题
对 memcached “Mult” 面试任务的总体看法
- 许多人认为这是一个扎实、现实的工程练习:修改一个真实的 C 代码库,增加一个类似现有功能的新特性,并展示你能读懂并扩展生产风格的代码。
- 也有人觉得它在技术上有点乏善可陈(“温吞”),基本上就是把
incr复制粘贴一下,把+改成*,几乎没有什么“洞见”。
这个问题实际上在测试什么
- 支持者说它测试的是:
- 快速熟悉一个陌生代码库的能力。
- 复用现有模式,而不是过度设计。
- 编写能够编译、运行,并符合周围风格的代码。
- 批评者认为它也在隐含测试:
- 环境搭建能力(C 工具链、构建系统)。
- 为了速度而忽略合理顾虑(加锁、溢出、性能)的能力。
- 也有人强调,很多候选人甚至连“最低要求”都做不到,所以这是一个很好的筛选器。
过度设计 vs 务实(“Type 1 vs Type 2”)
- 一派认为“Type 1”(深入分析锁、竞态、设计)是好的工程,而“复制粘贴再微调”是糟糕的做法,尤其是在像 memcached 这样的高性能系统里。
- 另一派认为“Type 1”是分析瘫痪,而“Type 2”(克隆
incr/decr,改操作符,补测试)才是务实、资深工程师式的行为。 - 争议集中在溢出和非交换性等问题上;有人坚持必须处理这些问题,另一些人则回应说
add/sub/append/set/delete也已有类似注意事项,而这道题的范围本来就故意很窄。
时间、压力与报酬
- “三个小时”这个说法争议很大:
- 有人说这只是 30–60 分钟的任务,三个小时已经很宽松了。
- 也有人不会做任何 3 小时以上的无偿练习,尤其是在同时申请多家公司的情况下。
- 有人呼吁为这类深度工作的评估付费;也有人回应说,只要有足够多人接受,公司就不会改变。
与其他面试风格和职业的比较
- 对喜欢现实工作样本的人来说,它比 LeetCode/脑筋急转弯更受欢迎。
- 批评者指出,它仍然会放大面试压力,并可能筛掉那些不擅长计时单人任务的优秀工程师。
- 也有人把它和其他职业相比:许多职业使用学位、执照或实际演示,而不是临时拼凑的编码测试;软件行业缺乏标准化认证,因此公司只能依赖这类练习。