整理了 3 道 Stripe 电面 Coding 真题。面试使用 HackerRank,题目均围绕真实业务场景展开,每道题包含多个 Part,随着题目推进逐步增加规则。下面按题目顺序整理题目要求和解题思路,重点分析后续追问中容易出错的地方,包括匹配优先级、边界情况和业务规则处理。

一、发票对账系统
这道题要求实现一个发票对账系统,将一笔独立付款(Payment)匹配到对应的未结清发票(Invoice)。根据付款记录中的 memo 或到账金额,找到需要偿还的发票,并按照要求格式化输出匹配结果。
Part 1:Memo 精确匹配
题目要求: 付款记录中包含一行 memo,格式固定为 Paying off: {invoiceID}。需要从 memo 中解析出 invoice ID,找到对应的发票,并输出 paymentID pays off 金额 for invoiceID due on 日期。
解题思路: 这是一个简单的字符串解析与查找问题。注意,金额使用 USD minor unit 表示,即 1.00 = 100,不需要进行单位换算。另外,memo 中冒号后有一个空格,使用 split 解析时需要注意空格的处理。
Part 2:金额匹配
题目要求: 当 memo 变成任意描述(例如 Bank transfer)时,无法再通过 invoice ID 直接匹配,需要根据付款金额查找欠款金额完全相同的发票。如果有多张发票符合条件,则选择到期日最早的一张。
解题思路: 遍历发票列表,筛选出欠款金额与到账金额相等的发票,再根据到期日选择最早的一张。这里还需要注意边界情况,可以主动向面试官确认:如果没有任何发票匹配这笔付款,应该返回什么结果。
Part 3:Forgiveness 宽容区间
题目要求: 考虑到银行转账可能产生手续费,付款金额可能与发票欠款金额存在一定差异。例如,客户支付 12,实际到账只有 10。给定 forgiveness = F,只要到账金额落在发票金额 I 的 [I-F, I+F] 区间内,就可以认为匹配成功。
解题思路: 在 Part 2 的基础上,将严格相等的判断放宽为区间匹配。需要特别注意匹配优先级:如果一笔付款既能严格匹配某张发票,也能通过 forgiveness 匹配其他发票,应优先选择不需要 forgiveness 的发票。因此,应该先执行严格金额匹配,只有没有找到结果时,才进行宽容区间匹配,避免直接放宽条件而选错发票。
二、打印任务与文档匹配
题目要求将打印任务记录与文档列表进行核对。打印任务的格式为 id,pages,note,其中 note 的格式为 Printing: {DOC};文档记录的格式为 id,save_date,pages。需要根据 note 中的文档 ID 找到对应文档,并按照要求格式化输出打印任务与文档信息。
Part 1:按文档 ID 匹配打印记录
题目:输入打印任务记录和文档列表。打印记录格式为 id,pages,note,文档格式为 id,save_date,pages。note 为 Printing: {DOC},需要提取其中的文档 ID,匹配对应文档,并按要求格式化输出打印任务和文档信息。
解答思路:解析输入,从 note 中提取文档 ID,找到对应文档后生成输出。将匹配逻辑与输出格式分开,方便后续修改。
Part 2:支持按页数和保存日期匹配
题目:note 若以 Printing: 开头,仍按文档 ID 匹配;如果是普通描述,则匹配页数相同、保存日期最早的文档。没有符合条件的文档时,返回空字符串。
解答思路:保留原有的一重循环,在遍历过程中完成筛选和候选更新。按页数匹配时,只有找到保存日期更早的文档才替换结果;日期相同则保留列表中先出现的文档。
Part 3:未指定 note 时,支持页数容差
题目:当打印任务未指定 note 时,允许在给定容差范围内匹配文档页数。多个候选中,优先选择页数完全一致的文档,其次按保存日期选择。使用容差匹配时,需要在输出中标注。
解答思路:遍历时依次比较“是否完全匹配”和“保存日期”,更新最佳候选。日期也相同则保留先出现的文档。容差是否包含边界,以及“容差抵扣”的具体含义,需要先确认。
追问 1:拆成两次扫描有什么问题?
如果先筛选候选,再扫描候选选择最早日期,会增加一次遍历;保存候选列表还会占用额外空间。两次线性扫描仍然是 O(n),但可以在原有的一重循环里同时完成筛选和更新,减少重复逻辑。
追问 2:还可以补充哪些测试用例?
- 指定文档 ID 存在或不存在。
- 普通描述匹配到零条、一条或多条同页数文档。
- 文档输入顺序与保存日期顺序相反。
- 页数和保存日期都相同,验证是否保留先出现的文档。
- note 为空、文档列表为空。
- 完全匹配与容差匹配同时存在,验证完全匹配优先。
- 页数差刚好到容差边界,以及超过容差范围。
追问 3:给出验证保存日期相同的单行测试
{"print":{"id":"P1","pages":10,"note":"Monthly report"},"docs":[{"id":"D1","save_date":"2026-09-01","pages":10},{"id":"D2","save_date":"2026-09-01","pages":10}],"expected_doc_id":"D1"}两条文档的页数和保存日期完全相同。更新条件使用严格小于 <,第二条不会替换第一条,因此保留 D1。
三、Stripe 交易手续费计算
Part 1:计算不同交易类型的手续费
题目要求:Stripe 每天在全球处理数百万笔不同类型的交易,包括付款(Payments)、退款(Refunds)和争议(Disputes)。每笔交易都会产生相应的手续费,手续费由固定费用和可变费用两部分组成。现在给定一个包含交易记录的 CSV 字符串,需要计算每笔交易对应的手续费。请编写一个函数或方法 calculate_fees(transaction_csv),接收交易记录组成的 CSV 字符串作为输入,并按照下方指定的格式返回每笔交易的手续费。
解题思路:先明确不同交易类型或状态对应的手续费计算规则,例如固定费用、按交易金额比例收取的可变费用,以及争议相关费用。然后解析 CSV 字符串,提取每笔交易的状态、支付渠道、金额等关键信息,根据对应规则计算手续费,并按照题目要求的格式返回结果。
Part 2:根据买家所在国家计算支付手续费
题目要求:在上一部分中,所有支付交易的可变手续费率都是固定的。本部分中,可变手续费率将根据不同条件动态变化。固定手续费仍为 30 美分,可变手续费率则根据以下两个条件确定:payment_provider(支付提供商) 和 buyer_country(买家所在国家)。
解题思路:构建支付渠道(payment_provider)与买家国家(buyer_country)对应的可变手续费率映射表。遍历交易记录,对支付完成的交易,根据支付渠道和买家所在国家查找对应的费率,并结合 30 美分的固定手续费计算总费用;其他交易状态则继续按照 Part 1 的规则处理。
Part 3:基于交易总量的阶梯式支付手续费
题目要求:部分商户在 Stripe 处理的交易量较大,因此 Stripe 会根据商户的累计交易总额提供更低的手续费率。本部分在 Part 2 的基础上引入交易总额阈值。对于每种支付渠道(payment_provider)与买家所在国家(buyer_country)的组合,分别设定对应的交易总额阈值和优惠费率。当商户在某一组合下的累计交易总额超过指定阈值后,该组合下的后续支付交易将适用更低的可变手续费率。累计交易总额不受交易日期限制。
解题思路:按商户、支付渠道和买家国家对交易进行分组,分别累计各组的交易总额。根据累计交易总额判断是否超过对应阈值,超过则应用优惠费率,否则使用正常费率,最后计算支付完成交易的手续费。
Part 4:阶梯式交易手续费与争议手续费
题目要求:支付手续费的计算逻辑与 Part 3 完全相同,无任何变化。本部分新增争议手续费(Dispute Fee),根据商户在某一支付渠道下的争议率计算:dispute_rate = (total_disputed_amount / total_payment_amount) * 100其中: – total_payment_amount = 指定商户在某一 payment_provider 下所有支付交易金额之和 – total_disputed_amount = 该商户在同一 payment_provider 下所有发生争议的交易金额之和(不论争议最终结果如何)再根据 dispute_rate 匹配对应的争议费率表(例如 Klarna 在争议率 < 50% 时争议费为 15)。
解题思路:按商户、支付渠道和买家国家对交易进行分组,累计各组的交易总额。根据累计交易总额与对应阈值的关系,判断后续支付交易应采用优惠费率还是正常费率,再计算相应的支付手续费。
总结
这三道题考的不只是基本的编码能力,更多是在规则不断叠加的情况下,你能不能把逻辑理清楚、把代码写得好改。发票对账要处理精确匹配、金额匹配和容差三层关系;打印任务匹配重点是怎么把多种匹配规则合到一起,以及边界测试;手续费计算则逐步引入动态费率、累计金额和争议率。
准备的时候,建议多练习把业务规则拆成清晰的判断条件,再选合适的数据结构去存匹配关系和统计数据。面对追问时,也要主动想到多个候选结果、匹配优先级、特殊输入和测试覆盖,这样规则一加,代码也不会乱。
如果你正在准备Stripe或其他大厂的 OA 或面试,除了刷题,也可以结合真实面经熟悉常见题型和考察方向。InterviewShow 整理了 Microsoft、Amazon、Google、Stripe、TikTok 等科技公司的面试资料,可领取相关公司的 OA/VO 真题,帮助你了解常见考点和面试形式。我们也提供 OA 辅助和面试辅助服务,覆盖 Coding、System Design 和 BQ。你可以查看服务介绍,或直接联系我们了解详情。
FAQ
Stripe 电面一般考什么?
Stripe 电面(Technical Phone Screen)通常是一道贴近实际业务的编程任务,使用 HackerRank,重点考察候选人理解需求、拆解业务规则和处理边界情况的能力。
Stripe 电面的题难在哪里?
难点主要在于业务规则不断叠加,以及新增需求后如何调整原有代码。例如,发票对账需要处理精确匹配、金额匹配和 forgiveness 容差;文档匹配涉及多种匹配条件和候选结果的选择;手续费计算则需要处理动态费率、累计交易金额和争议率。除了实现基本功能,还要确保新增规则不会破坏已有逻辑。
准备 Stripe 电面应该重点练习什么?
建议重点练习字符串与 CSV 解析、字典和集合的使用、多条件匹配、分组统计、金额计算以及边界测试。相比只练习独立的算法题,还应多练习分阶段实现需求的题目,确保在新增条件后能够复用已有代码,并通过测试验证旧功能是否仍然正确。