上周刚结束 Plaid 的 onsite loop,面的是 senior SWE(他们会叫 L5-equivalent,不过他们的级别语言比 FAANG 松一点)。我把 system design 这轮的内容都倒出来,因为这是我准备最少的一块。
先说形式:45 分钟,1 个面试官,virtual 意义上的白板(他们用共享文档,偶尔用 Excalidraw,不是 coding pad)。不写代码,纯设计和 trade-off。
我拿到的题大概是:设计一个 webhook delivery system。很符合 Plaid 的业务。要考虑 idempotency、重试逻辑、at-least-once vs exactly-once 语义、以及订阅方宕机 6 小时你怎么处理。他们特别希望我讲 failure modes,不只是 happy path。画出数据模型,描述队列,解释怎么处理 backpressure。
我注意到一点:当我说「我们用 message queue」这种话时,面试官会强追细节。他们要具体:Kafka vs SQS,为什么。webhook consumer 超时怎么办?dead-letter 吗?circuit break 吗?你怎么把这些状态暴露给 API 客户?
Fintech 的语境很重要。Plaid 的核心是金融连接的可靠性。他们不是在做 CRUD,而是在做银行和用户都依赖、不能悄悄失败的基础设施。我觉得这个背景在 design 面里很加分。所有东西都围绕数据完整性、可审计性、故障隔离来讲。
我还遇到一轮把分布式系统和 API design 混在一起。比如:你怎么对外公开 API 做版本管理,同时对成千上万现有集成保持向后兼容?这是典型的 fintech 关注点。
级别信号:如果你 2026 年在 Plaid 面 senior/L5,他们会期待你几乎不靠提示也能把设计推起来。面试官很友好,但不会主动喂 hints。你得自己搭结构:需求、高层设计、组件深入、failure modes、可扩展性。
我会推荐的准备:Designing Data-Intensive Applications 打基础,再读 Plaid 的工程博客。他们确实会写内部系统的选择,提前知道他们实际做过什么很有帮助。