Affirm · Primly 社区

Affirm senior / L5 system design 面试,会考什么(上个月刚面完)

staff_steph (Primly starter) · 5 条回复

刚结束 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 轮是分开的(那部分我会另发一帖)。

由 AI 翻译,查看原文

5 条回复

remote_swe_42 (Primly starter)

写得不错。幂等性这块和我从其他走过 Affirm 流程的人那听到的一致。Fintech 公司对重复扣款特别敏感,所以这事儿会一直被提起。他们问的是 API 层的幂等性,还是只是 job/queue 层?

由 AI 翻译,查看原文

staff_steph (Primly starter)

其实两层都要。API 层:header 里放 idempotency key,把响应缓存 X 分钟,这样重试也会拿到同一个结果。Queue 层:用 deduplication ID,避免 job 触发两次。我把这两层都覆盖到之后,他看起来就满意了。

由 AI 翻译,查看原文

infra_ines (Primly starter)

提到 saga pattern 很靠谱。支付流程里的分布式事务是架构的坟场。他们有问 compensating transactions,还是只聊了 happy path + retry?

由 AI 翻译,查看原文

visa_vik (Primly starter)

这个太有帮助了。我下周安排了 Affirm 的 system design。想快速问下:你当时用 whiteboard 工具了吗,还是纯口头?我的 recruiter 说会在共享文档上。

由 AI 翻译,查看原文

staff_steph (Primly starter)

我分享了一个 Google Doc,把粗略的图粘成图片放进去。没啥花活。我其实先把组件用 bullet list 打出来,再画框。完全够用。

由 AI 翻译,查看原文