Stripe SWE OA 一向是同档位公司里风格最像"日常上班"的题目:题面写得像 PRD,输入数据像生产日志,要求你交付一段自己愿意签 review 的代码。算法复杂度不会卡你,但只要边界少处理一处、变量命名糟糕一点,隐藏测试就会"无声扣分"。本文整理 2026 年最具代表性的 Stripe SWE OA 三道题——交易日志结算、邮箱归一化、速率限制器——给出完整 Python 解法与 Stripe 评分体系下的高分写法。
Stripe SWE OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | HackerRank for Work |
| 时长 | 90-120 分钟 |
| 题量 | 2-3 道,部分题分 4 个 Part |
| 难度 | LeetCode Easy~Medium,但边界 case 多 |
| 隐藏测试 | 12-20 个 |
| 关键评分维度 | 正确性 / 可读性 / 边界处理 / 模块化 |
题型一:交易日志结算(Transaction Logs)
题目描述
给定一组 Stripe 支付系统的交易日志,每条日志格式:
"{user_id} {event_type} {amount}"
event_type 为 credit(入账)或 debit(出账),amount 为整数。统计每个用户最终的余额。
示例输入:
logs = [
"alice credit 100",
"bob debit 50",
"alice debit 30",
"bob credit 20",
]
期望输出:
{"alice": 70, "bob": -30}
解题思路
这道题考的不是算法,而是字符串解析 + 字典累加。Stripe 隐藏测试集会插入以下边界:
amount为 0 的日志- 同用户多次 credit/debit 交替
event_type字符串大小写不一致(小心Credit/CREDIT)- 单条日志中存在多余空格
Python 完整解法
from collections import defaultdict
from typing import Dict, List
def compute_balances(logs: List[str]) -> Dict[str, int]:
balances: Dict[str, int] = defaultdict(int)
for line in logs:
parts = line.strip().split()
if len(parts) != 3:
continue
user_id, event_type, amount_str = parts
amount = int(amount_str)
event = event_type.lower()
if event == "credit":
balances[user_id] += amount
elif event == "debit":
balances[user_id] -= amount
return dict(balances)
时间复杂度:O(n),n 为日志条数
空间复杂度:O(u),u 为用户数
Stripe 评分点
- 用
defaultdict(int)避免显式判空——Stripe 偏好"减少 if 分支"的写法 event_type.lower()是隐藏测试中最容易扣分的细节- 用类型注解(type hints)能在 code review 维度拿到加分
题型二:邮箱归一化(Email Normalization)
题目描述
实现 Stripe 邮件归一化规则:
@之前忽略所有.@之前忽略+后的所有字符@之后保持原样
判断两个邮箱在归一化后是否等价。
示例:
e1 = "[email protected]"
e2 = "[email protected]"
# True
Python 完整解法
def normalize(email: str) -> str:
local, _, domain = email.strip().lower().partition("@")
local = local.split("+", 1)[0].replace(".", "")
return f"{local}@{domain}"
def are_same_email(e1: str, e2: str) -> bool:
return normalize(e1) == normalize(e2)
时间复杂度:O(L),L 为邮箱长度
空间复杂度:O(L)
Stripe 评分点
- 一定要
.strip()和.lower(),否则隐藏 case" [email protected] "会失败 - 用
partition("@")比split("@")更安全——split 在缺@时报错,partition 返回空 domain - 把
normalize拆出来是Stripe code review 的硬指标:单一职责,便于单测
题型三:速率限制器(Sliding Window Rate Limiter)
题目描述
模拟 Stripe API 的速率限制。规则:每个用户在任意 10 秒滑动窗口内最多允许 3 个请求。
输入:一个升序的时间戳数组(单位秒)。
输出:每个请求是否被接受的布尔数组。
示例输入:
requests = [1, 2, 3, 4, 11, 12]
期望输出:
[True, True, True, False, True, True]
(第 4 秒的请求位于窗口 [1,2,3] 之内,被拒绝;第 11 秒后窗口滚动)
Python 完整解法
from collections import deque
from typing import List
def rate_limiter(
requests: List[int],
window_size: int = 10,
max_requests: int = 3,
) -> List[bool]:
q: deque = deque()
results: List[bool] = []
for t in requests:
while q and q[0] <= t - window_size:
q.popleft()
if len(q) < max_requests:
q.append(t)
results.append(True)
else:
results.append(False)
return results
时间复杂度:O(n),每个时间戳最多入队/出队一次
空间复杂度:O(max_requests)
Stripe 评分点
- 用
deque而非list——list.pop(0)是 O(n),过不了大数据量隐藏 case - 注意"滑动窗口"是严格不等式:
q[0] <= t - window_size而不是<,否则边界 case 失败 - 把
window_size、max_requests作为参数化输入,便于 Part 2 扩展为"每用户独立窗口"
Stripe OA 的三个隐藏评分维度
1)代码可读性(35%)
Stripe 内部代码 review 文化非常严苛。OA 中代码越接近"线上代码",得分越高:
- 函数命名:
compute_balances而非solve、func1 - 单一职责:归一化和比较拆成两个函数
- 显式类型注解
2)边界条件覆盖(40%)
Stripe 隐藏测试约 60% 用来卡边界:
- 空输入:
[]、"" - 异常格式:缺字段、多空格、大小写混合
- 数值边界:amount=0、超大时间戳
3)正确性(25%)
正确性反而权重最低——Stripe 的题目"不容易写错主流程",但容易写对了主流程却挂在格式。
FAQ
Stripe SWE OA 通过率怎么样?
整体通过率约 35%-40%。思路对、代码差是最常见的失败模式——尤其在 hidden test 覆盖大小写、空白字符时。建议提交前自查 strip/lower/split 是否做齐。
Stripe OA 用什么平台?是不是和别的公司一样的 HackerRank?
是 HackerRank for Work,但 Stripe 关闭了"运行示例 case"功能,候选人只能用自己写的 assert 验证。本地写完先跑一组完整边界 case 再提交。
Stripe OA 算法考点会很难吗?
不会。Stripe 历年 OA 的算法天花板是 LeetCode Medium,更多是 Easy 级别。但题目很长——Stripe 喜欢把 4 个递进的 Part 串在一道题里,前两个 Part 不容错就能拿超过 70% 的分。
Stripe OA 能用 Python 吗?需要写 Type Hints 吗?
可以用 Python / Java / Go / Ruby / TypeScript。Type Hints 不强制,但会在可读性维度加分。Stripe 内部代码大量使用 mypy,OA 评分人员对 Python 类型注解有偏好。
Stripe OA 之后会进入哪一轮面试?
OA 通过后进入 1 轮 Recruiter Phone Screen,再到 4-5 轮 VO:Integration、Debug、Pair Coding、System Design、Behavioral。整体节奏比 Meta/Google 慢,从 OA 到 Onsite 通常 3-5 周。
正在准备 Stripe SWE OA?
oavoservice 提供 Stripe SWE/SDE 全流程 OA 辅助:拆题、边界 case 归纳、HackerRank 实时协助。我们对 Stripe 的 BIN range、payment reconciliation、subscription billing 等历年题型都有完整复盘资料,可以根据你的目标岗位(NG / Intern / L4)定制练习计划。
立即添加微信:Coding0201,获取 Stripe OA 一对一辅导。
#Stripe #StripeOA #SWE #SDE #支付系统 #OA真题
联系方式
Email: [email protected]
Telegram: @OAVOProxy