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]
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 內部 code 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