OA辅助 / 面试训练复盘

Stripe SDE OA 面试复盘|一题三段:交易状态机和撤销记录如何处理

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

Stripe SDE OA 面试复盘|一题三段:交易状态机和撤销记录如何处理主题图解
训练主题配图 · 非客户现场证明

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

第一题:商户交易状态流

题目描述

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

解题思路

优先把每笔交易放进 Map<transactionId, TransactionState> ,状态里保存金额、是否已争议、是否已撤销和最后一次处理的事件序号。处理 DISPUTE 时只在交易存在且尚未撤销时累加;处理 WITHDRAW 时,把此前计入商户的争议金额扣回。这样不需要在每一段重新扫描原始事件。汇总层另设 Map<merchantId, long> ,最后只对金额大于零的商户排序。 重复的 DISPUTE 不能再次加钱,撤销先于争议到达也不能留下脏数据。把状态迁移写成单独函数,再为每种非法迁移补一个测试,比在主循环里堆条件判断更稳。 复杂度 :处理 n 条事件为 O(n),最终输出排序为 O(m log m),m 为入选商户数。

做题过程

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

备考建议

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

FAQ

Stripe OA 要准备很多算法吗?

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

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

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

联系 VOPathway

如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。

  • 微信:Coding0201
  • 邮箱:[email protected]
  • Telegram:@OAVOProxy
  • WhatsApp:+86 178 6396 8105

可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。

每一步,都更接近准备充分的自己。

本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。

预约一次训练复盘 ↗