刚结束 Affirm 的 senior SWE loop。system design 这一轮 60 分钟,只有一个面试官,没有 co-interviewer shadow。下面是我实际遇到的情况。
题目大概是:设计一个支付处理系统,要支持分期排期、扣款失败后的重试,并把实时状态展示到商家 dashboard。经典 fintech 领域。
他们真正关注的点:
先看可靠性和失败模式。 我刚开始画 happy path,面试官就直接问了「okay, what happens when the charge fails?(扣款失败会怎样?)」(扣款失败会怎样?),我队列都还没画完。这一下就定调了。在 Affirm 这很合理。BNPL 的成败就靠能不能正确跟踪支付状态。
幂等性。 这点被明确问到了。我说「在重试 job 上用 idempotency key」,面试官明显点头。如果你还没认真想过支付流程里的幂等性,现在就该去补。
数据模型问题。 不只是服务图。他问我会怎么建模分期计划 vs 放款 vs 账本条目。区分运营数据(计划了什么)和财务数据(结算了什么)很关键。
规模是次要的,不是第一优先级。 我也经历过那种前 5 分钟就让你估 QPS 的 loop。但这里他们更在意正确性而不是纯吞吐。最后也聊到 scale,不过是在把状态机理顺之后。
按级别的说明:对于 senior(相当于 L5),他们希望你带着面试往前走,而不是等提示。我前 15 分钟有点太被动,面试官甚至说了「what would you do next?(你接下来会怎么做?)」(你接下来会怎么做?)把我从卡住里拉出来。在 staff+ 估计他们希望你不用提示就能主动预判 tradeoff。
有用的准备:专门练支付系统设计,而不是泛泛的「design Twitter(设计 Twitter)」(设计 Twitter)题。重点想这些:幂等性、at-least-once vs exactly-once 投递、分布式事务的 saga pattern、对账/reconciliation jobs。
system design 这一轮没有 leetcode。coding 轮是分开的(那部分我会另发一帖)。