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:
- API 接受退款請求;
- 資料庫記錄退款狀態。
但沒考慮失敗重試和分布式環境下的意外。面試官追問:「那如果網絡抖動呢?如果用戶多次點擊退款按鈕呢?」
完整方案
補上 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 結構後就清晰了:
- Situation:項目 deadline 很緊,團隊在架構方案上產生爭執;
- Task:作為主要開發之一,我需要推動盡快形成共識;
- Action:組織短會,把各方觀點放白板上逐一分析 pros/cons,引入資料指標支撐決策;
- Result:達成折中方案,按時交付且性能超預期。
結構化講完,面試官表情明顯舒展,反饋正面。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 真題與陪練。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy