← 返回博客列表 Stripe SWE OA 通关指南:交易日志 + 邮箱归一化 + 速率限制三道高频题|2026
Stripe

Stripe SWE OA 通关指南:交易日志 + 邮箱归一化 + 速率限制三道高频题|2026

2026-05-14

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_typecredit(入账)或 debit(出账),amount 为整数。统计每个用户最终的余额。

示例输入

logs = [
    "alice credit 100",
    "bob debit 50",
    "alice debit 30",
    "bob credit 20",
]

期望输出

{"alice": 70, "bob": -30}

解题思路

这道题考的不是算法,而是字符串解析 + 字典累加。Stripe 隐藏测试集会插入以下边界:

  1. amount 为 0 的日志
  2. 同用户多次 credit/debit 交替
  3. event_type 字符串大小写不一致(小心 Credit / CREDIT
  4. 单条日志中存在多余空格

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 评分点

题型二:邮箱归一化(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 评分点

题型三:速率限制器(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 评分点

Stripe OA 的三个隐藏评分维度

1)代码可读性(35%)

Stripe 内部代码 review 文化非常严苛。OA 中代码越接近"线上代码",得分越高:

2)边界条件覆盖(40%)

Stripe 隐藏测试约 60% 用来卡边界:

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