这场 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 真题与陪练。
联系方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy