← 返回部落格列表 Stripe SWE VO 三環節複盤:可疑交易滑動窗口 + 退款服務冪等設計 + 行為面 STAR
Stripe

Stripe SWE VO 三環節複盤:可疑交易滑動窗口 + 退款服務冪等設計 + 行為面 STAR

2026-06-09

Stripe 作為全球最受歡迎的支付公司之一,VO 節奏緊湊且實用性強,重點考察編程能力、系統設計思維以及與公司文化的契合度。這次分享一次 Stripe Software Engineer Virtual Onsite 的完整體驗。Stripe 的面試風格和傳統大廠不太一樣:題目不炫技,但非常看重工程思維、邊界意識和溝通能力。如果你在準備 Stripe、Fintech 或偏工程導向的 SDE 面試,這篇很有參考價值。

一、VO 概覽

VO 時長約 60 分鐘,分三部分:

環節 時長 重點
Coding 30 min 1~2 道中等題,多與業務相關(交易驗證、字串映射)
System Design 20 min 常見支付場景(退款系統、風控、冪等性)
Behavioral 10 min team collaboration + ownership,重文化匹配

二、Coding:可疑交易檢測

題目

Given a list of credit card transactions (user_id, amount, timestamp), detect suspicious users who have more than 3 transactions in a 1-minute window.

思路演進

剛拿到題,下意識用最直觀的暴力解:遍歷每筆交易,再檢查前後所有可能的時間區間,複雜度 O(n²)。寫到一半就感覺不對——資料量一大肯定扛不住。

正確解法是 sliding window + hashmap:用 hashmap 存每個用戶的交易時間戳(有序),再用滑動窗口快速判斷當前一分鐘內的交易數量,複雜度降到 O(n)

from collections import defaultdict, deque

def find_suspicious(transactions: list[tuple], window: int = 60, limit: int = 3) -> set:
    """transactions: [(user_id, amount, timestamp), ...],timestamp 單位秒"""
    by_user = defaultdict(list)
    for uid, _amt, ts in sorted(transactions, key=lambda t: t[2]):
        by_user[uid].append(ts)

    suspicious = set()
    for uid, times in by_user.items():
        dq = deque()                       # 維護當前窗口內的時間戳
        for t in times:
            dq.append(t)
            while dq and t - dq[0] >= window:   # 移出窗口外的舊交易
                dq.popleft()
            if len(dq) > limit:            # 1 分鐘內 > 3 筆 -> 可疑
                suspicious.add(uid)
                break
    return suspicious

寫出來跑測試樣例全過,面試官點頭的瞬間心裡石頭才落地。

三、System Design:Payment Refund Service

設計題是 退款服務,要求支持高並發、保證冪等性、實現 eventual consistency

樸素方案(不夠)

一開始我只想到簡單的 API + DB:

但沒考慮失敗重試分布式環境下的意外。面試官追問:「那如果網絡抖動呢?如果用戶多次點擊退款按鈕呢?」

完整方案

補上 message queue + retry 機制,結合冪等 key 避免重複退款,再加日誌監控dead-letter queue

模組 設計
冪等控制 每個退款請求帶唯一 idempotency key,重複請求直接返回首次結果
異步處理 退款入 message queue,worker 消費,失敗自動 retry
最終一致 退款狀態機(pending → processing → done / failed),異步對帳
容錯 多次重試失敗進 dead-letter queue,人工 / 補償處理
可觀測 全鏈路日誌 + 監控告警

補完這些,面試官態度明顯積極,還誇了句「good catch」——從「差點掛」到「穩住局面」的反轉。

四、Behavioral:STAR 化解衝突

經典題:「Tell me about a time you had to resolve a conflict within your team.」

一開始我答得籠統(團隊有分歧、最後達成一致),面試官明顯覺得不夠具體。改用 STAR 結構後就清晰了:

結構化講完,面試官表情明顯舒展,反饋正面。Stripe 行為面更偏向:你是否對結果負責、如何在不確定資訊下決策、如何與 PM / Infra / 風控協作。

五、總結

Stripe SWE VO 三環節:Coding(業務題,O(n²)→O(n) 的滑動窗口優化)、System Design(退款服務的冪等 + MQ + retry + DLQ)、Behavioral(STAR)。核心是最優解意識 + 把樸素方案補成完整方案 + 結構化表達。三環節我都有過「差點掉坑」的瞬間,關鍵在於及時往「正確資料結構 / 完整設計 / 清晰結構」上靠。


FAQ

Q1:Stripe SWE VO 考哪幾塊、多長?

約 60 分鐘三部分:Coding(30 min,業務題)、System Design(20 min,支付場景)、Behavioral(10 min,文化匹配)。

Q2:可疑交易題怎麼從 O(n²) 優化?

按用戶分組、時間戳排序,對每個用戶用滑動窗口(deque)維護當前一分鐘內的交易,超過閾值即標記。整體 O(n),遠優於暴力枚舉區間的 O(n²)。

Q3:退款服務設計要點是什麼?

冪等 key 防重複退款、message queue + retry 處理失敗、退款狀態機做最終一致、dead-letter queue 兜底、全鏈路日誌監控。先講樸素方案再按追問補全更自然。

Q4:怎麼準備 Stripe SWE VO?

Coding 練「先想最優資料結構」,Design 練「樸素 → 完整」的補全套路(冪等 / MQ / 一致性 / 容錯),Behavioral 用 STAR 備好衝突故事。如需各環節限時陪練,或 VO代面 / VO輔助 的即時對接,可發崗位 JD 先做題型預測再排練習計劃。


正在準備 Stripe 面試?

Stripe SWE VO 考最優解意識 + 完整系統設計 + 結構化表達。oavoservice 提供 Stripe 全流程陪練:可疑交易 / 滑動窗口題限時模擬、退款服務冪等設計推演、behavioral STAR 演練,也支持 VO代面 / VO輔助 的即時對接。教練含前大廠資深工程師,熟悉 Stripe「工程思維 + 邊界意識」評分風格。

立即添加微信 Coding0201獲取 Stripe 真題與陪練

聯絡方式