两周前刚过了 MongoDB senior 的 SWE loop,拿到了 Atlas 团队的 offer。分享一下 system design 轮的笔记,因为它和典型的 FAANG 备考套路差异挺大,我真希望进去前就有人告诉我这些。
System design 是 60 分钟,一个面试官。不写代码。他们会给一个很模糊的题目,比如「design a change data capture pipeline(设计一个变更数据捕获 pipeline)」或「design a multi-region document store sync mechanism(设计一个多 region 的 document store 同步机制)」,然后希望你主导。他们不只是找「正确答案」,更想看你怎么在模糊里推进:怎么问澄清问题、怎么明确 trade-off。
我注意到几件事:
MongoDB 的特定语境很重要。他们真的希望你把设计落在 document model 的概念上。提 sharding 策略、replica sets、基于 oplog 的同步、或者 Atlas Search 的 relevance 都不会扣分。我在解释一个写优化时提了 WiredTiger storage engine 的特性,面试官明显点头。要知道你的听众是谁。
不再是老式的白板。我们用的是共享 Excalidraw。要确保自己能很快画出 box-and-arrow 图,因为视频里你画图不说话会很尴尬。
他们会 push back。至少有一次在中途他们说「what if your message queue is unavailable?(如果你的消息队列不可用怎么办?)」。感觉有点对抗,但其实是在 probe 深度。保持冷静,说你会加一个带 exponential backoff 的重试,并解释为什么。他们想看你能适应,不是直接崩。
深度比广度更重要。我一开始想覆盖太多子系统,面试官反而把我按慢了。他们希望我选一个组件往深里挖。我觉得 60 分钟确实不够设计一个完整分布式系统,所以挑重点就是能力。
准备建议:看看 MongoDB 文档里的 change streams,搞清 Atlas 怎么做跨 region 复制,并且专门练习在 document-store 语境下讲 CAP theorem 的 trade-off。LeetCode 的 system design 题只能算起点,但没有 MongoDB 的味道。Designing Data-Intensive Applications(Kleppmann)里关于 replication 的章节是很扎实的背景。
总共 5 轮:phone screen、online assessment、system design、两轮 behavioral。我会另发一帖写 OA。也欢迎提问 system design 轮。