← 返回部落格列表 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 真題與陪練

聯絡方式