Stripe 的 OA 在 2026 春招新一輪發放,仍然是「給你一個真實業務場景,寫出可讀、可擴展、可測試的程式碼」。和 Optiver / HRT 這種純演算法 OA 不同,Stripe 偏「工程師 OA」:題面長、抽象、要求你做合理的介面設計與邊界處理。
Stripe OA 概覽(2026)
| 維度 | 詳情 |
|---|---|
| 平台 | 自研線上 IDE(HackerRank 簡化版) |
| 時長 | 2 小時 |
| 題量 | 1–2 道(多 part 形式) |
| 難度 | LC Medium 節奏 + 業務封裝 |
| 評分 | 自動測試 + 程式碼品質 review |
題型一:支付狀態機
class ChargeStateMachine:
TRANSITIONS = {
'pending': {'authorize', 'void'},
'authorized': {'capture', 'void'},
'captured': {'refund'},
'voided': set(),
'refunded': set(),
}
NEXT = {
('pending', 'authorize'): 'authorized',
('pending', 'void'): 'voided',
('authorized', 'capture'): 'captured',
('authorized', 'void'): 'voided',
('captured', 'refund'): 'refunded',
}
def __init__(self):
self.state = {}
def apply(self, charge_id, event):
cur = self.state.get(charge_id, 'pending')
if event not in self.TRANSITIONS[cur]:
raise ValueError(f'illegal: {cur} → {event}')
self.state[charge_id] = self.NEXT[(cur, event)]
return self.state[charge_id]
def process(events):
sm = ChargeStateMachine()
out = {}
for cid, ev in events:
try:
out[cid] = sm.apply(cid, ev)
except ValueError:
pass
return out
評分關注點:非法轉換是否拋出、是否對未知 charge_id 預設 pending、是否提供清晰的 transition 表。
題型二:詐欺偵測(滑動視窗聚合)
from collections import deque, defaultdict
def first_fraud_idx(events, threshold=1000, window_sec=600):
qs = defaultdict(deque)
sums = defaultdict(float)
for i, (uid, amt, ts) in enumerate(events):
q, s = qs[uid], sums
q.append((ts, amt))
s[uid] += amt
while q and ts - q[0][0] > window_sec:
_, old_amt = q.popleft()
s[uid] -= old_amt
if s[uid] >= threshold:
return i
return -1
時間複雜度:O(n) amortized。
題型三:API 解析
import json
def parse(payload, money_fields=('amount', 'amount_captured', 'amount_refunded')):
obj = json.loads(payload) if isinstance(payload, str) else payload
result = {
'type': obj.get('type'),
'id': obj.get('data', {}).get('object', {}).get('id'),
}
def walk(node):
if isinstance(node, dict):
for k, v in node.items():
if k in money_fields and isinstance(v, int):
node[k] = v / 100.0
else:
walk(v)
elif isinstance(node, list):
for v in node:
walk(v)
walk(obj)
result['cleaned'] = obj
return result
Stripe 的 webhook payload 可能巢狀 5+ 層,必須遞迴遍歷,不能假設結構。
7 天衝刺方案
| 天數 | 任務 |
|---|---|
| D1 | 狀態機模板:3 道經典題(訂單 / 訂閱 / charge) |
| D2 | 滑動視窗聚合:10 分鐘、滾動、滑動中位數 |
| D3 | JSON 巢狀解析 + 遞迴 / 迭代 |
| D4 | LC 1095 / 705 / 706 + 介面設計 |
| D5 | 寫一道 mock Stripe OA(2 小時計時) |
| D6 | 複盤 mock,針對薄弱點補 2 題 |
| D7 | 看 stripe.com/docs API 風格再寫一道介面題 |
真題特徵
- 題面長(200+ 行說明),先讀完再動手
- 強測試覆蓋:自動測試 + 人工 review 兩道關
- 偏好「能跑、清晰、可擴展」三個標籤 — 不要寫炫技程式碼
- 時間緊但不會逼到極限:一般 60–80% 時間能完成主線
FAQ
Stripe OA 用什麼語言?
可選 Python / Java / Go / Ruby / TypeScript。社區面經反饋:70% Python,15% Go,~10% Java。
題量是 1 道還是 2 道?
按職位定。Backend / API SDE 通常 1 道多 part;Infra / Payments 偶爾 2 道。
Stripe OA 自動判 + 人工 review 怎麼平衡?
自動測試要全過;review 看程式碼可讀性、命名、是否復用、是否有合理錯誤處理。
沒過冷卻期?
通常 6 個月。換 team(Payments → Atlas)不一定算同一池,但簡歷會被推薦人重新評估。
正在準備 Stripe OA / VO?
這次很高興幫這批同學順利通過 Stripe OA。很多同學反饋,自己刷 LeetCode 時根本碰不到「200 行說明 + 介面設計 + 自動測試 + 人工 review」這種四重壓力,到 OA 當天容易方寸大亂。
如果你也在準備 Stripe、Plaid、Brex、Mercury 這類支付 / FinTech SDE 的 OA / VO,感覺一個人複習方向模糊、節奏不穩,歡迎聯絡 oavoservice。我們會根據你的具體水平和弱點,提供專業的 OA 實戰輔助服務和一對一指導,把狀態機、詐欺偵測、API 解析三套模板完整打通。
👉 立即加微信:Coding0201,獲取 Stripe 高頻題與備考方案。
聯絡方式
Email: [email protected]
Telegram: @OAVOProxy