Stripe SWE OA 面经|支付事件对账、幂等扣款与 API 调试题型解析

作者:

编辑于:

July 19, 2026

阅读时长:

1 minute read
Stripe SWE OA 支付事件对账与幂等扣款面经配图

Stripe SWE OA 的准备重点不在背模板,而在把业务约束翻译成可靠的代码。支付状态会重试,金额不能用浮点数,接口还要扛住重复请求。做题时先把状态和输入边界写清楚,后面会省很多返工。

第一题:支付事件对账

題目描述

给定按时间到达的 authorizecapturerefund 事件,每条记录带有 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,再开始扣款流程。状态用 processingsucceededfailed 表示,并把最终 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 题没有完整框架怎么办?

先声明数据模型和函数边界,再写关键分支。把输入校验、成功路径和异常路径拆开,面试官更容易跟上你的推理。

参考来源

关于 CSOFFERPREP

进 VO 之前,可以找 CSOFFERPREP 做实时面试助攻和备考辅导。导师来自北美一线科技公司,对 Stripe 这类重视工程细节的团队有长期辅导经验。无论是 OA辅助、OA 辅导、VO 辅助、VO 模拟面试、VO 辅助还是系统设计辅助,都可以获得更有针对性的准备方案:CSOFFERPREP · 服务详情