← 返回部落格列表 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]

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