Stripe SDE OA 面经|一题三段:交易状态机和撤销记录怎么处理

Stripe OA 在线笔试面经配图

Stripe 的 OA 不太像刷完两道数组题就结束的笔试,更像在 60 分钟里把一段业务规则写完整。这次题目从交易事件开始,后面连续加上争议、撤销和汇总输出。第一段能跑不难,真正拉开差距的是第二、三段加入新事件后,旧状态会不会被错误覆盖。

第一题:商户交易状态流

题目描述

输入是一串按时间到达的 CHARGEDISPUTEWITHDRAW 事件。每条记录带有交易 ID、商户 ID、金额与事件时间。需要找出仍处于争议状态的商户,并按争议金额、商户 ID 输出结果。后两段继续加入重复事件、无效事件和撤销事件。

解题思路

先把每笔交易放进 Map<transactionId, TransactionState>,状态里保存金额、是否已争议、是否已撤销和最后一次处理的事件序号。处理 DISPUTE 时只在交易存在且尚未撤销时累加;处理 WITHDRAW 时,把此前计入商户的争议金额扣回。这样不需要在每一段重新扫描原始事件。汇总层另设 Map<merchantId, long>,最后只对金额大于零的商户排序。

重复的 DISPUTE 不能再次加钱,撤销先于争议到达也不能留下脏数据。把状态迁移写成单独函数,再为每种非法迁移补一个测试,比在主循环里堆条件判断更稳。复杂度:处理 n 条事件为 O(n),最终输出排序为 O(m log m),m 为入选商户数。

做题过程

建议先问清楚三件事:同一交易的事件是否保证时序、撤销是否只撤销一次、金额是否用分而不是浮点数。编码时先交付能处理 CHARGEDISPUTE 的最小版本,再把撤销逻辑收口到状态迁移里。一个关于分段交易风控题的讨论也提到了后续部分建立在同一份状态上的写法,初始化的数据模型决定了后面改动的成本。

备考建议

做 Stripe OA 前,练两类题就够用:事件流模拟和字符串/CSV 解析。事件流题要刻意写重复消息、缺失主记录、撤销重复调用这几组用例;解析题则把字段校验与业务判断拆开。不要一上来为了省行数把所有状态塞进一个字典,面试官很容易顺着可读性和测试性继续追问。

FAQ

Stripe OA 要准备很多算法吗?

图、堆、哈希表仍要会,但这道题更看重状态建模、输入校验和持续扩展代码的能力。刷题时可以选带多阶段规则的模拟题,练习先搭可扩展骨架再补规则。

交易金额为什么要用整数?

金额转换成最小货币单位后再相加,能避开浮点数累计误差。输出前再按题目要求格式化即可。

关于 CSINTERVIEWHELP

进 VO 之前,可以找 CSINTERVIEWHELP 做实时面试助攻和备考辅导。CSINTERVIEWHELP 深耕北美 IT 行业多年,已帮助万余名学生进入全球 500 强企业。导师来自一线大厂资深工程师和面试官,对 Stripe 这类注重工程文化的公司的面试套路很熟悉。无论是 OA 题型解析、OA 辅导、VO 辅助、VO 模拟面试、VO 面试陪练还是系统设计辅助,都可以获得更有针对性的准备方案:CSINTERVIEWHELP · 服务详情

参考来源