上个月走了 Affirm 的 virtual onsite,面的是 mid-level backend 职位。一天四轮,强度挺大,但节奏上其实还行。
recruiter screen 20 分钟,常规。然后是一个 take-home coding problem,这点让我有点意外,因为现在大多数公司都做 live coding 了。题目是一个简化版的 payment ledger:给定 transactions 和 reversals,算最终余额。要处理 duplicates 和 idempotency keys。听起来很基础,但边界情况很快就堆起来。
after that:一轮 DSA(两道 medium,graph traversal 和一道 heap 题),一轮 system design(设计一个 payment events 的 notification service,他们很在意 at-least-once vs exactly-once delivery),以及一轮明确按 Affirm values 来的 behavioral。
system design 这轮和我预期不一样。 面试官一直追问下游服务挂了会怎样、你怎么恢复、consumer 会看到什么。payments 场景显然会影响他们看待失败的方式。不只是「how does your system handle load(你的系统如何处理负载)」,还有「how does it stay financially correct when things go wrong.(出问题时怎么保证财务上依然正确)」
behavioral 挺标准的 STAR。他们问我一次我不同意某个技术决策的经历以及后来发生了什么。还问了一个失败的项目以及我学到了什么。
最后没拿到 offer。说是 system design 那轮的 HC 不够强。不过 recruiter 给了确实有用的反馈,这种情况……很少见。