← 返回部落格列表 Stripe 軟體工程師面試全流程:電話初篩到 Onsite + Accept-Language 真題
Stripe

Stripe 軟體工程師面試全流程:電話初篩到 Onsite + Accept-Language 真題

2026-06-09

作為全球領先的支付技術公司,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"]

關鍵點:

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 題,它表面是字串解析,實質考的是:

四、總結

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 真題與陪練

聯絡方式