作為全球領先的支付技術公司,Stripe 對軟體工程師的招聘流程極其嚴謹且系統化。無論你是剛開始準備簡歷,還是已經拿到 Stripe 面試邀請,這篇全流程拆解都能幫你把節奏對齊、把準備做扎實。下面先講四個階段,再放一道 Onsite 高頻真題。
一、Stripe 招聘四階段
| 階段 | 形式 | 重點 |
|---|---|---|
| Recruiter 電話初篩 | 電話 / 視訊,非技術 | 背景、動機、對 Stripe 的了解、溝通與文化契合 |
| Behavioral Assessment | 線上測評 / 問卷 15–30 min | 團隊協作傾向、工作風格、情境題 |
| Technical Phone | 技術電面 | 演算法、資料結構、系統設計,即時寫程式碼 |
| Onsite | 多輪 | 程式設計、系統設計、行為,深度評估 |
1)Recruiter 電話初篩
招聘流程的第一步,主要做初篩。Recruiter 會透過電話或視訊,聊你簡歷上的經歷、職業目標,以及你對 Stripe 的興趣。這部分通常是非技術的,主要評估溝通能力和文化契合度。
2)Behavioral Assessment
通常是一個線上測試或問卷,用來評估候選人的行為特質和團隊協作能力。目的在於了解你在團隊中的表現,以及是否具備 Stripe 看重的特質。題目可能是情境題,比如「你如何處理團隊衝突?」「在壓力下如何保持高效?」也可能是性格測試。整段一般 15–30 分鐘,相對輕鬆但很關鍵。
3)Technical Phone
考察技術能力和解決問題的思路,通常包括演算法、資料結構、系統設計等,可能要求即時寫程式碼或解題。
4)Onsite
對技術能力、團隊協作和文化契合做深度評估,通常包括多輪:程式設計、系統設計、行為。程式設計輪考程式碼能力和程式碼品質,通常要你解決一道涉及演算法、資料結構或真實應用場景的題。
二、Onsite 獨家真題:解析 Accept-Language header
在 HTTP 請求中,Accept-Language header 描述了請求方希望返回內容所使用的語言列表,形式是逗號分隔的 language tag 列表。例如:
Accept-Language: en-US, fr-CA, fr-FR
表示讀者願意接受:美式英語(最偏好)、加拿大法語、法國法語。
我們的伺服器需要根據這個 header 返回可接受的語言。伺服器目前不支持所有可能被請求的語言,但有一個支持集合。
Part 1:按偏好順序匹配支持的語言
寫一個函式,接收兩個參數:Accept-Language header 的值字串,以及一個支持語言的集合;返回適合該請求的 language tag 列表,按偏好降序(與它們在 header 中出現的順序相同)。
parse_accept_language(
"en-US, fr-CA, fr-FR",
["fr-FR", "en-US"]
)
# Returns: ["en-US", "fr-FR"]
parse_accept_language("fr-CA, fr-FR", ["en-US", "fr-FR"])
# Returns: ["fr-FR"]
parse_accept_language("en-US", ["en-US", "fr-CA"])
# Returns: ["en-US"]
實現思路很直接:按 header 順序遍歷,保留在支持集合裡的 tag。用集合做 O(1) 查找,順序天然由遍歷保證:
from typing import List
def parse_accept_language(header: str, supported: List[str]) -> List[str]:
supported_set = set(supported)
result = []
for tag in (t.strip() for t in header.split(",")):
if tag in supported_set and tag not in result:
result.append(tag)
return result
複雜度 O(n),n 為 header 中的 tag 數量。注意去重——同一 tag 在 header 中可能重複出現。
Part 2:支持 q 權重與通配 *
Accept-Language 通常還會帶不區分地區的 tag,比如 fr 表示「任意 French 變體」,以及帶 q= 權重和通配 *。擴展你的函式支持這些:
# Example 1
parse_accept_language(
"fr-FR;q=1, fr-CA;q=0, fr;q=0.5",
["fr-FR", "fr-CA", "fr-BG"]
)
# Returns: ["fr-FR", "fr-BG", "fr-CA"]
# Example 2
parse_accept_language(
"fr-FR;q=1, fr-CA;q=0, *;q=0.5",
["fr-FR", "fr-CA", "fr-BG", "en-US"]
)
# Returns: ["fr-FR", "fr-BG", "en-US", "fr-CA"]
# Example 3
parse_accept_language(
"fr-FR;q=1, fr-CA;q=0.8, *;q=0.5",
["fr-FR", "fr-CA", "fr-BG", "en-US"]
)
# Possible order: ["fr-FR", "fr-CA", "en-US", "fr-BG"]
關鍵點:
- 每個 header 項可帶
;q=權重,缺省視為q=1; - 裸語言 tag(如
fr)匹配該語言的所有變體(fr-FR、fr-CA、fr-BG…); *匹配所有未被顯式匹配的支持語言;- 最終按 q 權重降序排,權重相同時保持 header 內出現順序作為穩定 tiebreak。
from typing import List
def parse_accept_language(header: str, supported: List[str]) -> List[str]:
# 1) 解析每一項為 (tag, q),缺省 q=1
rules = []
for i, item in enumerate(t.strip() for t in header.split(",")):
if not item:
continue
if ";q=" in item:
tag, q = item.split(";q=")
q = float(q)
else:
tag, q = item, 1.0
rules.append((tag.strip(), q, i)) # i 作為出現順序,穩定 tiebreak
# 2) 為每個支持語言求出它能拿到的最高優先級 (q, order)
scored = {}
for lang in supported:
base = lang.split("-")[0]
best = None
for tag, q, order in rules:
if tag == lang: matched = (q, order) # 精確匹配
elif tag == base: matched = (q, order) # 裸語言匹配變體
elif tag == "*": matched = (q, order) # 通配
else: continue
if best is None or matched > best:
best = matched
if best is not None and best[0] > 0: # q=0 表示明確拒絕
scored[lang] = best
# 3) 按 q 降序、出現順序升序排序
return sorted(scored, key=lambda l: (-scored[l][0], scored[l][1]))
注意 q=0 的語義是明確拒絕——fr-CA;q=0 意味著即使被 * 命中也不應返回(實現時讓精確匹配優先級覆蓋通配即可)。
三、為什麼 Stripe 愛出這種題
parse_accept_language 是 Stripe 的經典 Onsite 題,它表面是字串解析,實質考的是:
- 真實協議建模:你要讀懂 RFC 風格的規則,而不是套模板;
- 優先級與 tiebreak:q 權重、出現順序、精確 vs 通配的覆蓋關係,邊界很多;
- 可擴展實現:Part 1 到 Part 2 是遞進的,寫死了 Part 1 就很難接 Part 2。
四、總結
Stripe 面試整體嚴謹:Recruiter → Behavioral → Technical Phone → Onsite 四階段層層篩選。Onsite 程式設計輪偏真實工程題(如 Accept-Language 解析),重點不在演算法技巧,而在協議理解、優先級處理與可擴展實現。把遞進式題目當成「先跑通再加規則」的練習,最穩。
FAQ
Q1:Stripe 面試一共幾輪?
四階段:Recruiter 電話初篩、Behavioral Assessment 線上測評、Technical Phone 技術電面、Onsite 多輪(程式設計 + 系統設計 + 行為)。
Q2:Behavioral Assessment 要準備嗎?
它是線上測評 / 問卷,15–30 分鐘,考團隊協作傾向與工作風格。不用刷題,但要保持回答一致、貼合 Stripe 看重的協作與正直特質。
Q3:Accept-Language 這題難點在哪?
不在解析本身,而在 Part 2 的優先級處理:q 權重降序、q=0 表示拒絕、裸語言 tag 匹配所有變體、* 兜底,以及權重相同時按出現順序穩定排序。
Q4:怎麼準備 Stripe Onsite 程式設計輪?
練「先跑通 Part 1,再增量加規則」的遞進式解題;多做協議 / 規則類題(解析、匹配、優先級)。如需這道題的限時陪練與變體訓練,可以發崗位 JD 先做題型預測。
正在準備 Stripe 面試?
Stripe Onsite 偏真實工程題,考協議理解、優先級處理與可擴展實現。oavoservice 提供 Stripe 全流程陪練:Accept-Language 等經典題的限時模擬、遞進式解題訓練、系統設計與行為演練。教練含前大廠資深工程師,熟悉 Stripe 評分風格。
立即添加微信 Coding0201,獲取 Stripe 真題與陪練。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy