如何准备软件工程师的系统面试——资料篇
准备系统设计面试该读哪些经典教材:从 DDIA 打根基,到架构权衡、领域建模、可靠性和经典模式,最后读 MIT 分布式系统课程的原始论文。每本书的作者、版本和中文版都已对照出版方页面核实。
本文目录
系统设计面试考的是设计大型软件系统的功夫:数据怎么存,请求怎么分发,机器坏了怎么办,以及每个选择要付出什么代价。这些功夫来自这个领域的经典教材。这篇文章只收教材和经典著作,不收专门讲面试题的书。书单分成六组,最后给出我建议的阅读顺序。
每本书的作者、版本和出版时间,我都在 2026 年 10 月 30 日对照了出版社或作者本人的页面;中文版的信息来自豆瓣读书的书目页和作者本人的页面。书单里有几本出了新版,买书之前最好再确认一下版本。
第一组书讲数据系统和分布式系统的原理

《Designing Data-Intensive Applications》是整份书单的根基
Martin Kleppmann 的《Designing Data-Intensive Applications》,大家习惯简称 DDIA。第二版的目录从数据模型、存储和编码讲起,再讲到复制、分片、事务和分布式系统的种种麻烦。系统设计面试里常被追问的取舍,大多能在这几章里找到原理。
DDIA 现在有两个版本。第二版由 Kleppmann 和 Chris Riccomini 合写,O’Reilly 的页面把出版时间标为 2026 年 2 月,Kleppmann 个人主页的著作列表写的是 2026 年 3 月,两处差一个月。第一版由 Kleppmann 一人撰写,2017 年 3 月出版,中文版《数据密集型应用系统设计》由中国电力出版社在 2018 年 9 月出版,译自第一版。读得惯英文的读者,我建议直接读第二版;只读中文的读者,第一版的中文版仍然够用,书里讲的基本原理没有过时。
《Understanding Distributed Systems》适合先过一遍全局
Roberto Vitillo 的《Understanding Distributed Systems》比 DDIA 薄。作者网站上写着,这本书现在是第二版,共 33 章、328 页,全书分成通信、协调、扩展性、韧性和可维护性五个部分。前两章可以在作者网站上免费阅读。
作者在网站上说,这本书重广度、不重深度。网络协议栈、数据一致性模型、扩展性和可靠性模式、可观测性,后端工程师要用到的知识大致都讲到了。工作经验少、没做过大规模后端的读者,可以先读这本,再啃 DDIA。
《Database Internals》往存储引擎深处再走一步
Alex Petrov 的《Database Internals》由 O’Reilly 在 2019 年 10 月出版。作者网站介绍,全书分为存储引擎和分布式系统两部分:前一部分讲 B 树、LSM 树、预写日志这些数据结构,后一部分讲故障检测、领导者选举、一致性和共识算法。
面试很少问到这么深。但面试官追问“这个数据库为什么写得快”“你选的存储为什么适合这个读写比例”的时候,读过这本书的人能答到数据结构那一层。
第二组书帮读者建立架构权衡的框架

《Fundamentals of Software Architecture》教人系统地比较架构风格
Mark Richards 和 Neal Ford 的《Fundamentals of Software Architecture》已经出到第二版,O’Reilly 在 2025 年 3 月出版,比第一版新增了五章。全书前几章先定义“架构特征”,也就是扩展性、可用性这类功能以外的要求,然后逐一讲微服务、模块化单体、微内核、分层等架构风格。系统设计面试最常见的追问是“为什么选这个方案而不选那个”,这本书给了一套比较方案的词汇和步骤。
《Software Architecture: The Hard Parts》专讲没有标准答案的难题
《Software Architecture: The Hard Parts》的作者有四位:Neal Ford、Mark Richards、Pramod Sadalage 和 Zhamak Dehghani,O’Reilly 在 2021 年 10 月出版。第一章的标题就叫“没有‘最佳实践’的时候怎么办?”。全书讨论服务该拆多细、服务之间的契约怎么管、分布式事务怎么处理,这几样也是面试里容易被追问的地方。
两本讲代码层面设计的书可以选读
下面两本书讲的是模块和代码层面的设计,和分布式系统的关系不大,属于选读。
Robert C. Martin 的《Clean Architecture》由 Pearson 在 2017 年 9 月出版,目录依次是设计原则、组件原则和架构三大部分,其中一章专讲怎么划定边界。中文版叫《架构整洁之道》,电子工业出版社 2018 年出版,孙宇聪翻译。
斯坦福大学教授 John Ousterhout 的《A Philosophy of Software Design》在 2021 年 7 月出了第二版。第二版在两章里新增了几节,专门拿本书的观点和 Robert Martin 的《Clean Code》对比,作者说两人在函数长度和注释的作用这些问题上分歧很大。两本书对照着读,比只读一本更能看清设计取舍。
第三组书讲领域建模和服务拆分

面试题一旦涉及“这个系统要拆成哪几个服务”,就要用到领域建模的概念。
Eric Evans 的《Domain-Driven Design》由 Addison-Wesley 在 2003 年 8 月出版,Evans 任教的培训公司 Domain Language 把这本书称作“蓝皮书”(The Big Blue Book)。通用语言(Ubiquitous Language)、聚合(Aggregate)、限界上下文(Bounded Context)这些面试里常听到的概念,书里都有专门的章节。中文版《领域驱动设计:软件核心复杂性应对之道》由人民邮电出版社出版,豆瓣上的版本是 2016 年 6 月。
Vaughn Vernon 的《Implementing Domain-Driven Design》由 Addison-Wesley 在 2013 年 2 月出版,讲的是怎么在项目里落实 Evans 提出的概念。中文版《实现领域驱动设计》由电子工业出版社在 2014 年出版,滕云翻译。
Sam Newman 的《Building Microservices》第二版由 O’Reilly 在 2021 年 8 月出版。作者说第二版是对第一版的完全重写,第一章可以在作者网站上免费下载。中文版《微服务设计(第2版)》由人民邮电出版社在 2024 年 4 月出版。
第四组书讲可靠性和上线运维

Google 免费公开了三本 SRE 的书
Google 的《Site Reliability Engineering》第一版由 O’Reilly 在 2016 年 4 月出版。Google 在 sre.google 上免费公开了这本书的全文,同样可以在线读全文的还有配套的《The Site Reliability Workbook》和《Building Secure & Reliable Systems》。服务等级目标(SLO)、前端和数据中心的负载均衡、过载处理这些面试常见话题,书里都有专门的章节。
Google 现在又推出了完全重写的第二版。sre.google 书目页上,第二版只给了 Google Books 的购买链接,没有在线阅读的入口;免费公开的仍然是第一版。第一版的中文版叫《SRE:Google运维解密》,电子工业出版社 2016 年出版,孙宇聪翻译。
《Release It!》讲系统在生产环境里怎么出故障
Michael Nygard 的《Release It!》第二版由 Pragmatic Bookshelf 在 2018 年 1 月出版。书里有一章专讲稳定性模式,包括超时、断路器和舱壁隔离。面试时被问到“下游服务挂了怎么办”,这一章的模式可以直接拿来回答。
第五组书是经典的模式目录,适合查阅

这三本书出版时间都在二十年以上,书里的技术例子比较老。我把它们当成工具书:遇到不熟悉的模式名,再翻到对应的章节去读。
Martin Fowler 的《Patterns of Enterprise Application Architecture》出版于 2002 年。Fowler 介绍,这本书前一部分是约 100 页的教程,其余部分是四十个左右模式的参考,主题包括企业应用怎么分层、怎么组织领域逻辑、怎么把领域逻辑接到关系数据库上。
Gregor Hohpe 和 Bobby Woolf 的《Enterprise Integration Patterns》由 Addison-Wesley 在 2003 年 10 月出版,收录了 65 个集成模式,讲的是系统之间怎么通过消息传递协作。网站上的模式目录列有发布订阅通道、死信通道和幂等接收者等模式,面试里设计消息队列时常用到这些概念。
Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合写的《Design Patterns》由 Addison-Wesley 在 1994 年 10 月出版。这本书讲面向对象代码层面的模式,对系统设计面试帮助有限。中文版《设计模式:可复用面向对象软件的基础》由机械工业出版社在 2000 年出版。
第六组资料是公开课程和原始论文

MIT 的分布式系统课程 6.5840(原课号 6.824)把课表、阅读材料和实验都公开在网上。2026 年春季学期的课表要求学生课前读 GFS(2003)、Raft(2014)和 Spanner(2012)等论文,实验要动手实现 MapReduce 和 Raft。想知道 DDIA 里那些原理出自哪篇论文,可以照着这份课表去读原文。
我建议按这个顺序读
- 先读 DDIA 打根基。 工作经验少的读者,可以先用《Understanding Distributed Systems》过一遍全局,再读 DDIA。
- 再读《Fundamentals of Software Architecture》,建立比较架构方案的框架。 读完之后,回答“为什么选这个方案”就有了章法。
- 按需选读领域驱动设计、微服务和 SRE 的书。 目标岗位偏业务系统,多读 Evans、Vernon 和 Newman;偏基础设施,多读 SRE 的书、《Release It!》和《Database Internals》。
- 最后照着 MIT 6.5840 的课表读原始论文。 读 GFS、Raft、Spanner 这些论文的时候,回头对照 DDIA 的相应章节,弄清楚书里的结论从哪里来。
第五组的模式书不必通读,遇到不熟悉的模式名再去查。时间紧的读者,最少读 DDIA 和《Fundamentals of Software Architecture》;时间充裕的读者,再做几个 MIT 课程的实验,面试时说起复制和共识会更有底气。
参考来源
出版社页面、作者本人的页面和课程主页是一手来源。豆瓣读书是书目数据库,只用来核实中文版信息。
数据系统和分布式系统
- O’Reilly — Designing Data-Intensive Applications, 2nd Edition,书目信息:“by Martin Kleppmann, Chris Riccomini”,“February 2026”,672 页 — fetched 2026-10-30
- O’Reilly — Designing Data-Intensive Applications, 2nd Edition,目录,第 3 至 9 章:“Data Models and Query Languages”“Storage and Retrieval”“Encoding and Evolution”“Replication”“Sharding”“Transactions”“The Trouble with Distributed Systems” — fetched 2026-10-30
- O’Reilly — Designing Data-Intensive Applications(第一版),书目信息:“by Martin Kleppmann”,“March 2017”,616 页 — fetched 2026-10-30(无存档)
- Martin Kleppmann 个人主页 — 著作列表,原文:“Designing Data-Intensive Applications, 2nd Edition. O’Reilly Media, March 2026.” — fetched 2026-10-30
- dataintensive.net — DDIA 译本列表,Chinese (Simplified) 一项,原文:“数据密集型应用系统设计 ISBN: 9787519821968” — fetched 2026-10-30
- 豆瓣读书 — 《数据密集型应用系统设计》书目,出版社:中国电力出版社,出版年:2018-9-1,原作名:Designing Data-Intensive Applications — fetched 2026-10-30
- Roberto Vitillo — Understanding Distributed Systems 官网,版本说明,原文:“2nd edition with 33 packed chapters and 328 pages in PDF and EPUB format” — fetched 2026-10-30
- Roberto Vitillo — Understanding Distributed Systems 官网,全书结构,原文:“The book is divided into 5 parts: communication, coordination, scalability, resiliency, and maintainability.” — fetched 2026-10-30
- Roberto Vitillo — Understanding Distributed Systems 官网,试读,原文:“Read the first two chapters for free” — fetched 2026-10-30
- Roberto Vitillo — Understanding Distributed Systems 官网,适合的读者,原文:“As an expert, you are likely looking for depth rather than breadth, and this book focuses more on the latter”;同页:“you need to be familiar with the network stack, data consistency models, scalability and reliability patterns, observability best practices, and much more” — fetched 2026-10-30
- O’Reilly — Database Internals,书目信息:“by Alex Petrov”,“October 2019”,370 页 — fetched 2026-10-30
- Alex Petrov — Database Internals 官网,全书结构,原文:“The book consists of two parts: Storage Engines and Distributed Systems” — fetched 2026-10-30
软件架构
- O’Reilly — Fundamentals of Software Architecture, 2nd Edition,书目信息:“by Mark Richards, Neal Ford”,“March 2025”,546 页 — fetched 2026-10-30
- O’Reilly — Fundamentals of Software Architecture, 2nd Edition,内容简介,原文:“This updated edition provides a comprehensive overview of software architecture’s many aspects, with five new chapters covering the latest insights from the field.” — fetched 2026-10-30
- O’Reilly — Fundamentals of Software Architecture, 2nd Edition,内容简介,原文:“Architecture styles and patterns: Microservices, modular monoliths, microkernels, layered architectures, and many more”;目录第 4 章:“Architectural Characteristics Defined” — fetched 2026-10-30
- O’Reilly — Software Architecture: The Hard Parts,书目信息:“by Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani”,“October 2021”,462 页 — fetched 2026-10-30
- O’Reilly — Software Architecture: The Hard Parts,目录第 1 章,原文:“1. What Happens When There Are No ‘Best Practices’?” — fetched 2026-10-30
- O’Reilly — Software Architecture: The Hard Parts,内容简介,原文:“they examine everything from how to determine service granularity, manage workflows and orchestration, manage and decouple contracts, and manage distributed transactions” — fetched 2026-10-30
- InformIT(Pearson)— Clean Architecture: A Craftsman’s Guide to Software Structure and Design,书目信息:“By Robert C. Martin”,“Published Sep 10, 2017 by Pearson” — fetched 2026-10-30
- InformIT(Pearson)— Clean Architecture,目录,原文:“Part III: Design Principles”“Part IV: Component Principles”“Part V: Architecture”,以及章节“Boundaries: Drawing Lines” — fetched 2026-10-30
- 豆瓣读书 — 《架构整洁之道》书目,译者:孙宇聪,出版社:电子工业出版社,出版年:2018-9,原作名:Clean Architecture — fetched 2026-10-30
- John Ousterhout — Software Design Book 页面,原文:“In July of 2021 I released the Second Edition of A Philosophy of Software Design.”页眉署名:“John Ousterhout, Professor, Department of Computer Science” — fetched 2026-10-30
- John Ousterhout — Software Design Book 页面,与 Clean Code 的比较,原文:“we have significant differences of opinion on topics such as the length of methods and the role of comments” — fetched 2026-10-30
领域建模和服务拆分
- InformIT(Addison-Wesley)— Domain-Driven Design: Tackling Complexity in the Heart of Software,书目信息:“By Eric Evans”,“Published Aug 20, 2003 by Addison-Wesley Professional” — fetched 2026-10-30
- InformIT(Addison-Wesley)— Domain-Driven Design,目录,目录中的小节:“UBIQUITOUS LANGUAGE”“AGGREGATES”“BOUNDED CONTEXT” — fetched 2026-10-30
- Domain Language — DDD Resources,原文:“The Big Blue Book. Domain-Driven Design, by Eric Evans, provides a broad framework for making design decisions”;同页:“In addition to offering training, Eric Evans and the other instructors are active speakers and writers” — fetched 2026-10-30
- 豆瓣读书 — 《领域驱动设计》书目,译者:赵俐、盛海艳、刘霞,出版社:人民邮电出版社,出版年:2016-6-1 — fetched 2026-10-30
- InformIT(Addison-Wesley)— Implementing Domain-Driven Design,书目信息:“By Vaughn Vernon”,“Published Feb 6, 2013 by Addison-Wesley Professional” — fetched 2026-10-30
- 豆瓣读书 — 《实现领域驱动设计》书目,译者:滕云,出版社:电子工业出版社,出版年:2014-3 — fetched 2026-10-30
- O’Reilly — Building Microservices, 2nd Edition,书目信息:“by Sam Newman”,“August 2021”,612 页 — fetched 2026-10-30
- Sam Newman — Building Microservices, 2nd Edition 页面,原文:“The 2nd edition is a complete rewrite of the previous best selling edition” — fetched 2026-10-30
- Sam Newman — Building Microservices, 2nd Edition 页面,免费章节,原文:“The first chapter of the book is available for free.” — fetched 2026-10-30
- 豆瓣读书 — 《微服务设计(第2版)》书目,译者:钟健鑫、张沙沙、智伟,出版社:人民邮电出版社,出版年:2024-4-15 — fetched 2026-10-30
可靠性和运维
- O’Reilly — Site Reliability Engineering(第一版),书目信息:“by Niall Richard Murphy, Betsy Beyer, Chris Jones, Jennifer Petoff”,“April 2016” — fetched 2026-10-30
- Google — Site Reliability Engineering 在线全文目录,第 4 章“Service Level Objectives”、第 19 章“Load Balancing at the Frontend”、第 20 章“Load Balancing in the Datacenter”、第 21 章“Handling Overload” — fetched 2026-10-30
- Google — The Site Reliability Workbook 在线全文目录,第 2 章“Implementing SLOs” — fetched 2026-10-30
- Google — sre.google 书目页,Building Secure & Reliable Systems 一项,该项附有“Read online”链接 — fetched 2026-10-30
- Google — sre.google 书目页,第二版,原文:“In this completely rewritten edition, we explore current SRE practices and how they’ve evolved in the decade since the book’s initial publication”;该项只附有“Buy from Google Books”链接 — fetched 2026-10-30
- 豆瓣读书 — 《SRE:Google运维解密》书目,译者:孙宇聪,出版社:电子工业出版社,出版年:2016-10-1,原作名:Site Reliability Engineering: How Google Runs Production Systems — fetched 2026-10-30
- The Pragmatic Bookshelf — Release It! Second Edition,书目信息:“by Michael Nygard”,Pages: 376,Published: January 2018 — fetched 2026-10-30
- The Pragmatic Bookshelf — Release It! Second Edition,目录,章节“Stability Patterns”下列有“Timeouts”“Circuit Breaker”“Bulkheads” — fetched 2026-10-30
经典模式
- Martin Fowler — Patterns of Enterprise Application Architecture 书籍页,书目信息:“by Martin Fowler, with Dave Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, and Randy Stafford”,“2002” — fetched 2026-10-30
- Martin Fowler — Patterns of Enterprise Application Architecture 书籍页,全书结构,原文:“The first part is a short (100 page) tutorial on enterprise application architecture. The bulk of the book is the reference to forty or so patterns.” — fetched 2026-10-30
- Martin Fowler — Patterns of Enterprise Application Architecture 书籍页,主题,原文:“The main topic areas are: how to layer an enterprise application, how to organize domain logic, how to tie that logic to a relational database” — fetched 2026-10-30
- InformIT(Addison-Wesley)— Enterprise Integration Patterns,书目信息:“By Gregor Hohpe, Bobby Woolf”,“Published Oct 10, 2003 by Addison-Wesley Professional” — fetched 2026-10-30
- Gregor Hohpe — Enterprise Integration Patterns 网站,原文:“This pattern language consisting of 65 integration patterns helps developers design and build distributed applications or integrate existing ones.” — fetched 2026-10-30
- Gregor Hohpe — Enterprise Integration Patterns 模式目录,目录中列有“Publish-Subscribe Channel”“Dead Letter Channel”“Idempotent Receiver” — fetched 2026-10-30
- InformIT(Addison-Wesley)— Design Patterns: Elements of Reusable Object-Oriented Software,书目信息:“By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides”,“Published Oct 31, 1994 by Addison-Wesley Professional” — fetched 2026-10-30
- 豆瓣读书 — 《设计模式:可复用面向对象软件的基础》书目,译者:李英军等,出版社:机械工业出版社,出版年:2000-9 — fetched 2026-10-30
公开课程
- MIT — 6.824 课程主页,Spring 2022,页面标题:“6.824: Distributed Systems” — fetched 2026-10-30
- MIT 6.5840 — Spring 2026 课表,第 3 讲,原文:“LEC 3 (fk): GFS. Preparation: Read GFS (2003)” — fetched 2026-10-30
- MIT 6.5840 — Spring 2026 课表,第 6 讲,原文:“LEC 6 (fk): Fault Tolerance: Raft (1). Preparation: Read Raft (extended) (2014)” — fetched 2026-10-30
- MIT 6.5840 — Spring 2026 课表,第 12 讲,原文:“LEC 12 (rtm): Spanner. Preparation: Read Spanner (2012)” — fetched 2026-10-30