← 返回博客列表 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 真题与陪练

联系方式