# 《程序员面试金典》只适合一部分 FDE 编程面试

> Google 的 45 分钟算法面试正是这本书的主场；OpenAI 的 60 分钟生产级构建只需精读几章。

原文: https://fdetimes.net/zh/books-courses/cracking-coding-interview-fde-what-to-read/

距离前线部署工程师（FDE）面试还有一个月，桌上放着一本 708 页的书。时间不够全读完，问题在于该读哪几章。

答案取决于编程面试的类型。有的公司考的是这本书讲得最透的经典算法题；有的公司考的是生产级构建，这时真正有用的只有几章。

## 内容比书名更多

作者是 Gayle Laakmann McDowell。根据出版商的信息，第 6 版由 CareerCup 于 2015 年 7 月 1 日出版，共 708 页，ISBN 为 978-0-9847828-5-7。官网上这一版的书名仍是“150 Programming Interview Questions and Solutions”，书中实际收录 189 道题，每道题都附有提示。

作者网站称，这一版比上一版的内容多 70%。这本书出版已久，但核心内容没有过时：在面试官面前遇到陌生问题时该怎么思考。

难点在于，FDE 编程面试没有统一模板。Educative 关于 Google FDE 面试的课程介绍，编程面试是标准的数据结构与算法面试，时长约 45 分钟，一到两道题，这正是这本书的主场。

至于 OpenAI，Exponent 的指南介绍，现场面试是一轮 60 分钟的生产级构建。题目可能拆成连续的几个部分，做出第一版后还会追加新需求。同一本书，不同面试需要不同的读法。

## 精华在第 1 题之前

在 189 道题之前，书里有几章开篇内容：面试流程、行为面试准备、Big O，以及一章讲技术问题、介绍 5 种算法思路。很多读者直接跳到习题，这是个错误。开篇几章教的是方法，习题只是练习方法的地方。

Big O 一章讲时间和空间复杂度、均摊时间、log N 在什么情况下出现，以及如何推算递归函数的运行时间。其中“Multi-Part Algorithms: Add vs. Multiply”一节值得细读。

假设先遍历订单列表 A，再遍历客户列表 B。两个循环先后执行，复杂度是 O(A + B)；把循环 B 嵌套在循环 A 里，就变成 O(A × B)。

有 10,000 个订单和 1,000 个客户时，两者的差别是 11,000 步和 10,000,000 步。

在敲代码之前，先练习把这个计算说出来。一句“两个循环先后执行，所以是 O(A + B)”，就足以让面试官看出你理解自己要写的代码。

## 有名称的技巧胜过死记答案

技巧一章讲授各有名称的解题方法，比如 BUD、Base Case and Build 和 Data Structure Brainstorm，还讲了好代码应该是什么样。有名称的技巧容易记住。卡住时，手里有一份清单可以逐项尝试，而不是干坐着沉默。

对 OpenAI 的构建面试来说，“好代码”这部分更加重要。第 30 分钟第二个需求到来时，命名清晰、函数拆分合理的代码几分钟就能改好；只求能跑、匆忙写出的代码可能要推倒重写。

**要点:** 不只要练到得出答案，还要练习在题目中途变化时修改代码。

## 不同面试，按什么顺序读？

189 道题按主题分组：数组与字符串、链表、栈与队列、树与图、递归与动态规划、排序与查找、面向对象设计、数据库、线程与锁、测试，以及其他几个主题。所以可以挑章节读，不必从头读到尾。

如果编程面试是约 45 分钟的算法题，先读 Big O 和技巧两章，然后依次做数组与字符串、树与图、排序与查找，最后是递归。

如果编程面试是生产级构建，读完开篇两章后，接着读面向对象设计、可扩展性与内存限制、线程与锁。这三章最接近这类面试所模拟的实际工作。

假设任务是写一个读取日志、按服务统计错误数的工具，之后追加两个需求：日志文件比内存还大，以及多个线程同时写入。这时，讲内存限制和锁的章节正好派上用场。

## 把练习变成简历上的证据

Educative 建议请招聘方确认面试形式，这应该是第一件要做的事。提前发一封邮件，就可能省下两周时间，不必为一轮根本不考动态规划的面试苦刷这类题。

然后，把练习成果变成别人看得见的东西。一个小仓库，提交历史展示你如何经过两三次需求变更扩展代码，并附有复杂度说明，比简历上一句“刷了 300 道 LeetCode”更能说明你的能力。

《Cracking the Coding Interview》仍是准备编程面试的扎实基础。对 FDE 来说，高效的读法是精读开篇两章，再根据招聘方确认的面试形式选读其余章节。

**本周动手试试:**

- 问招聘方编程面试是算法题还是多部分构建，再根据回答选择章节
- 读完 Big O 一章，再做数组与字符串一章的 5 道题，敲代码前先把复杂度说出来
- 设一个 60 分钟计时器构建一个小工具，在第 30 分钟给自己追加一个新需求，然后修改代码满足它

## 信源

- [Cracking the Coding Interview (official site)](https://www.crackingthecodinginterview.com/)

- [Cracking the Coding Interview – Schweitzer Online (bookseller listing)](https://www.schweitzer-online.de/en/buch/McDowell/Cracking-Coding-Interview/9780984782857/A32906375/)

- [Cracking the Coding Interview – Book Content Detail](https://www.crackingthecodinginterview.com/contents.html)

- [OpenAI Forward Deployed Engineer Interview Guide (Exponent / aced.io)](https://www.aced.io/guides/openai-forward-deployed-engineer-interview)

- [The Coding Round – Google Forward Deployed Engineer Interview (Educative)](https://www.educative.io/courses/google-forward-deployed-engineer-interview/R1qBD3XXLx0)
