← 返回博客列表 Stripe VO Round 1 复盘:三道运费定价递进题,节奏快到 5 秒进编码
Stripe

Stripe VO Round 1 复盘:三道运费定价递进题,节奏快到 5 秒进编码

2026-06-09

这场 Stripe VO 是近期节奏最紧的一次。整轮三道题,全部围绕运费场景展开的定价规则题。这种风格对没准备好节奏的同学很不友好——你得在 5 秒内从闲聊切到编码。但对我们来说,这正是训练最多的场景:在面试官不给你过渡的情况下,如何把脑子快速切到「干净、冷静、工程模式」。Stripe 的核心从来不是「你会不会写」,而是「你写得稳不稳、有没有边界意识」。

一、整轮特点

特点 说明
节奏极快 一句话甩需求,不补充、不确认、不给例子
真实业务口吻 像 PM 讲产品需求,不是 LeetCode
递进式 三题层层加码,写死前一题就难接下一题
重边界 区间上界?落在两区间之间?要自己判断

二、Question 1:嵌套 map 算整单运费

面试官一句话甩出来:「一个订单,每个 item 有 country、product type、quantity。再给你一张价格表——基本就是一个嵌套 map:country → product → 单位运费。写个函数算整单总运费。」

说完就看着你,不补充、不确认、不重复,也不给例子。你要自己把这段话迅速整理成能落代码的结构。别急着写,先定结构。

def total_shipping(order: dict, price_table: dict) -> int:
    """price_table: {country: {product: unit_cost}},cost 以最小货币单位存"""
    total = 0
    country = order["country"]
    table = price_table.get(country)
    if table is None:
        raise ValueError(f"unsupported country: {country}")
    for item in order["items"]:
        product, qty = item["product"], item["quantity"]
        if product not in table:
            raise ValueError(f"no price for {product} in {country}")
        total += table[product] * qty
    return total

第一段落笔要稳——面试官就是在看你第一笔写得稳不稳。写完她只点点头:「Okay. Let's move to the second one.」

三、Question 2:阶梯定价(quantity tiers)

她第二题开口更快,几乎一口气说完:「现在运费不再是单一单价了。每个 product type 的费用取决于数量区间。比如 1–10 个一个价,11–30 个另一个价,以此类推。区间按最小数量排序。按这些区间算运费。」

信息量突然变大,但别想复杂,按区间拆就行。tiers 已按最小数量排序,线性扫一遍即可:

def tiered_shipping(product: str, qty: int, tiers: dict) -> int:
    """tiers[product] = [(min_qty, unit_cost), ...] 按 min_qty 升序"""
    rules = tiers[product]
    unit = None
    for min_qty, cost in rules:        # 找 qty 落入的最高满足区间
        if qty >= min_qty:
            unit = cost
        else:
            break                      # 已排序,后面只会更大
    if unit is None:
        raise ValueError(f"qty {qty} below smallest tier")
    return unit * qty

面试官这题特别 Stripe:不给例子、不说边界、不说区间有没有上限、不说数字落在两区间之间怎么办。 她就是把设定甩给你,让你自己判断「该怎么写」。保持线性、不要在区间里绕,结构就定了。她看写法稳,没多问,直接说「Alright, let's do the last one.」

四、Question 3:混合定价(fixed + 按量)

第三题最复杂,面试官的口吻最像真实工作沟通,像 PM 在讲产品需求:「现在定价是混合的。有些区间是固定费用,有些区间按量计费……」

混合定价的关键是把每个区间抽象成一个统一的计费函数,固定费和按量费都能落进同一套接口,主流程不变:

def mixed_shipping(product: str, qty: int, tiers: dict) -> int:
    """tiers[product] = [(min_qty, kind, value), ...]
       kind = 'flat' 固定费 value;kind = 'per_unit' 单价 value"""
    rules = tiers[product]
    chosen = None
    for min_qty, kind, value in rules:
        if qty >= min_qty:
            chosen = (kind, value)
        else:
            break
    if chosen is None:
        raise ValueError(f"qty {qty} below smallest tier")
    kind, value = chosen
    return value if kind == "flat" else value * qty   # 统一接口,分支只在最后

这种把「固定 / 按量」抽象成 (kind, value) 的写法,让第三题在第二题结构上只加一个 kind 字段就接上了——这正是递进题想看到的:前两题不写死,第三题水到渠成。

五、总结

Stripe VO Round 1 三题全是运费定价递进:单价 → 阶梯 → 混合。难点不在算法,而在面试官只甩需求、你要自己补边界,以及前一题别写死、好接下一题。把「先定结构再落笔、用统一接口吸收新规则」练成肌肉记忆,这种快节奏轮就能稳稳拿下。


FAQ

Q1:Stripe VO Round 1 考什么?

三道围绕运费场景的定价递进题:Q1 嵌套 map 算整单运费、Q2 阶梯定价(按数量区间)、Q3 混合定价(固定费 + 按量)。考工程建模和边界意识,不是算法技巧。

Q2:节奏真的有那么快吗?

很快。面试官一句话甩需求,不给例子、不说边界,要你 5 秒内切到编码。建议先花 10 秒定数据结构再落笔,第一笔写得稳是关键评分点。

Q3:阶梯 / 混合定价怎么不写死?

把每个区间抽象成统一计费接口:阶梯用 (min_qty, unit),混合扩成 (min_qty, kind, value),分支只在最后一步。这样第三题在第二题结构上只加一个字段就接上。

Q4:怎么准备 Stripe 这种快节奏轮?

练「先定结构再落笔」和「统一接口吸收新规则」,多做递进式业务题。如需这三题的限时陪练,或 VO代面 / VO辅助 的实时对接,可发岗位 JD 先做题型预测再排练习计划。


正在准备 Stripe 面试?

Stripe VO 节奏快、只甩需求,考工程建模 + 边界意识 + 递进式不写死。oavoservice 提供 Stripe 全流程陪练:运费定价递进题限时模拟、统一接口建模演练、快节奏切换训练,也支持 VO代面 / VO辅助 的实时对接。教练含前大厂资深工程师,熟悉 Stripe「写得稳 + 有边界意识」评分风格。

立即添加微信 Coding0201获取 Stripe 真题与陪练

联系方式