Appearance
Max Howell: 谷歌面试与反转二叉树
原始链接
推文内容与翻译
英文原推
"Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off."
中文翻译
"谷歌:我们 90% 的工程师都在使用你写的软件 (Homebrew),但你不能在白板上反转二叉树,所以滚蛋吧。"
作者与背景
- 作者介绍:Max Howell (@mxcl),知名开源软件开发者,macOS/Linux 下最流行的包管理器 Homebrew 的主要创作者。
- 背景事件:2015 年 6 月,Max Howell 去谷歌总部面试软件工程师职位。面试过程中,面试官要求他在白板上写出“反转二叉树”(Invert a Binary Tree)的算法。Max 没能写出符合要求的代码,随后收到了谷歌的拒信。愤懑之下,他在推特上发表了这条充满讽刺意味的推文。
行业分析与启示
1. 经典“白板面试”的弊端与争议
这条推文自发布以来,成为了全球程序员反思、调侃和声讨大厂“白板算法面试”(Whiteboard Interview)的标志性事件:
- 脱离实际开发:许多资深开发人员指出,在白板上手写八股算法(如反转二叉树、红黑树等)和实际开发高质量、高可用性的软件产品(如 Homebrew)所需要的工程技能有很大的鸿沟。
- 面试焦虑与高压:在面试官的注视下在墙上用白板笔手写代码,往往会引发极大的精神压力,导致优秀的开发者在平时手到擒来的问题上失手。
- 评价尺度的单一化:将应聘者的价值等同于解 LeetCode 题目的速度,忽略了其开源贡献、团队协作、架构设计和产品交付的实际成果。
2. 什么是“反转二叉树”?
“反转二叉树”(Invert a Binary Tree)在 LeetCode 上是第 226 题。其核心思想是:对于二叉树中的每一个节点,将其左子树和右子树进行对调。
以下是使用 Python 递归实现的“反转二叉树”算法:
python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def invertTree(root: TreeNode) -> TreeNode:
if not root:
return None
# 递归反转左右子树
left = invertTree(root.left)
right = invertTree(root.right)
# 交换当前节点的左右子节点
root.left = right
root.right = left
return root3. 后续回响
- 该推文获得了数万次转发和点赞,甚至有些 LeetCode 题目(如第 226 题)的描述或讨论区中都隐晦地提到了这一事件。
- 虽然这场辩论推动了部分科技公司改用“结对编程”、“实际项目演练”或“家庭作业”等方式来评估人才,但至今为止,以 LeetCode 为代表的算法面试依然是大厂筛选候选人的主流方式。