這場 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