Skip to content

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 root

3. 后续回响

  • 该推文获得了数万次转发和点赞,甚至有些 LeetCode 题目(如第 226 题)的描述或讨论区中都隐晦地提到了这一事件。
  • 虽然这场辩论推动了部分科技公司改用“结对编程”、“实际项目演练”或“家庭作业”等方式来评估人才,但至今为止,以 LeetCode 为代表的算法面试依然是大厂筛选候选人的主流方式。