我今年做了两次 Citi senior 的 SWE system design 轮(第一次挂了,拿到反馈,六个月后 re-interview)。写这篇是因为我真的找不到任何他们到底会追问什么的具体信息。
这一轮长什么样
60 分钟。一个题。面试官通常是相关 domain 的 principal 或 staff engineer。我两次遇到的主题都是偏 payments 或 transaction infrastructure。
第一次题目:设计一个实时 fraud detection pipeline。 第二次题目:设计一个 payment settlement system。
两题都是同一个底层主题的变体:高吞吐、高正确性、金融数据。他们不是让你设计 Instagram 或 URL shortener。
他们实际在评估什么
第一轮把我烧穿的点:我在可扩展性(sharding、水平扩展、缓存)上讲太深,几乎没讲正确性和一致性。对金融系统来说这完全反了。他们想听你聊 atomicity、idempotency、audit trails、监管数据留存。Exactly-once 语义非常重要。
第二次我开头就说:「在我聊 scale 之前,我先把正确性需求过一遍,因为在金融场景里这通常比吞吐量更难。」这个说法很加分。
形式上的小建议
他们会共享一个白板工具(线上)。先从澄清 SLA 的问题开始。他们喜欢候选人问「可接受的错误率是多少」或「settlement 层的一致性保证是什么」。这能体现 domain awareness。
要懂 eventual consistency 和 strong consistency 的取舍。要知道 two-phase commit 是什么,以及什么时候应该避免。要懂 saga pattern 的基本概念。
别为了显得聪明就硬塞 Kafka。你用它就要讲清楚为什么,而不是用一个更简单的队列。