
Stripe SWE OA 的准备重点不在背模板,而在把业务约束翻译成可靠的代码。支付状态会重试,金额不能用浮点数,接口还要扛住重复请求。做题时先把状态和输入边界写清楚,后面会省很多返工。
第一题:支付事件对账
題目描述
给定按时间到达的 authorize、capture、refund 事件,每条记录带有 payment_id、金额和事件时间。输出每笔支付的最终余额,并找出 capture 金额超过 authorize 金额、refund 超过已 capture 金额的记录。输入规模达到百万级,事件并不按 payment_id 连续排列。
解題思路
用哈希表维护每个 payment_id 的授权额、已扣款额和退款额,金额统一保存为最小货币单位的整数。处理 capture 前先验证剩余额度,处理 refund 前验证已扣款减退款后的可退额度。错误事件不要中断整个流,而是记录事件序号和原因。面试里可以继续追问乱序事件:按时间排序成本太高时,把每笔支付的事件暂存到小数组,结束后再按时间核算。複雜度:单次扫描时间 O(n),状态空间 O(k),k 为支付单数量。
第二题:幂等扣款接口
題目描述
實現 POST /charges 的核心逻辑。请求包含 idempotency_key、客户 ID 和金额;网络超时后客户端会原样重试。接口必须保证同一个 key 只创建一笔扣款,并且并发请求不能各自写入成功结果。
解題思路
先以 idempotency_key 查询持久化记录。已有完成结果时直接返回缓存响应;首次请求用数据库唯一索引抢占该 key,再开始扣款流程。状态用 processing、succeeded、failed 表示,并把最终 HTTP 响应与状态一起落库。并发请求遇到 processing 时轮询短暂等待或返回可重试状态,不能再次发起扣款。这个题的关键是把唯一约束放在存储层,而不是只依赖进程内锁;多实例部署时,内存锁没有保护力。
第三题:Webhook 签名与重放窗口
題目描述
收到第三方 webhook 后,校验请求体、时间戳和 HMAC 签名。旧消息被重放时必须拒绝,同时允许几分钟以内的网络延迟。函数要返回明确的校验失败原因,方便调用方记录日志。
解題思路
用原始字节串拼接时间戳后计算 HMAC,采用常量时间比较避免把签名差异暴露给攻击者。时间戳超出五分钟窗口就拒绝;通过校验后,把事件 ID 放进带 TTL 的去重存储。先验签、再解析 JSON,避免无效请求消耗更多 CPU。若面试官要求支持密钥轮换,可以按 key version 依次验证当前密钥和上一把密钥,并记录命中的版本。
做题过程与备考建议
Stripe OA 里写金额时不要直接上 double,接口题也别只画 happy path。建议在白板上先列出状态表:哪些操作能转换、哪些操作必须报错、重复请求返回什么。可以参考 Stripe SWE 面试流程说明 把算法题和工程表达一起练:30 分钟写主流程,10 分钟补边界,最后 5 分钟口述并发和失败恢复。
FAQ
Stripe SWE OA 要准备哪些基础?
哈希表、排序、队列和字符串解析要写得熟练;同时要能解释事务、唯一索引、幂等 key 和 webhook 重放保护。
API 题没有完整框架怎么办?
先声明数据模型和函数边界,再写关键分支。把输入校验、成功路径和异常路径拆开,面试官更容易跟上你的推理。
参考来源
- Interview Query:Stripe Software Engineer interview guide
- Exponent:Stripe Software Engineer interview guide
- Glassdoor:Stripe Software Engineer interview questions
关于 CSOFFERPREP
进 VO 之前,可以找 CSOFFERPREP 做实时面试助攻和备考辅导。导师来自北美一线科技公司,对 Stripe 这类重视工程细节的团队有长期辅导经验。无论是 OA辅助、OA 辅导、VO 辅助、VO 模拟面试、VO 辅助还是系统设计辅助,都可以获得更有针对性的准备方案:CSOFFERPREP · 服务详情



