在 Stripe 的全端或後端面試中,"Shipping Cost Calculation" 是一道非常經典的業務邏輯模擬題。它不僅考察候選人對複雜資料結構的處理能力,還重點考察程式碼的可讀性、擴充性以及邊界條件的測試。
題目描述
假設你正在為一個線上硬體商店構建運費計算系統。商店銷售不同尺寸的商品(如滑鼠、筆記型電腦),並且運往不同的國家(如美國 US、加拿大 CA)。
你需要實作一個函數,根據輸入的訂單詳情(Order)和運費價目表(Shipping Cost Matrix),計算總運費。
1. 基礎運費計算
輸入資料結構範例:
// 訂單 Order
{
"country": "US",
"items": [
{"product": "mouse", "quantity": 20},
{"product": "laptop", "quantity": 5}
]
}
// 運費表 Shipping Cost Matrix (單位: cents)
{
"US": [
{"product": "mouse", "cost": 550},
{"product": "laptop", "cost": 1000}
],
"CA": [
{"product": "mouse", "cost": 750},
{"product": "laptop", "cost": 1100}
]
}
任務: 實作 calculate_shipping_cost(order, shipping_cost) 函數。
2. 進階:基於數量的階梯折扣(Tiered Pricing)
在實際業務中,為了鼓勵多買,運費通常會有折扣。題目會引入一個新的運費表結構,包含數量區間。
更新後的運費表範例 (US):
- Mouse: 任意數量 -> 550 cents
- Laptop:
- 0-2 台 -> 1000 cents/台
- 3台及以上 -> 900 cents/台
任務: 更新計算函數以支援階梯定價。
oavoservice 解題思路分析
這道題的核心在於資料結構的轉換與區間匹配邏輯。
- 預處理運費表:原始的運費表通常是 List 結構,搜尋效率為 O(N)。建議將其轉換為 Hash Map(字典),以
country->product為鍵,實作 O(1) 的快速搜尋。 - 階梯定價邏輯:
- 不要硬編碼邏輯。建議封裝一個
get_unit_cost(product, quantity, country_rules)輔助函數。 - 注意區間定義的完整性(例如
maxQuantity: null代表無窮大)。
- 不要硬編碼邏輯。建議封裝一個
- 貨幣計算:始終使用整數(cents)進行計算,避免浮點數精度問題。
程式碼結構建議
def parse_shipping_rules(rules_json):
# 將 JSON 轉換為易於查詢的字典結構
pass
def calculate_tier_cost(item_quantity, tiers):
# 根據數量匹配對應的價格區間
pass
def calculate_shipping_cost(order, rules):
total_cost = 0
country = order['country']
# 遍歷訂單項並累加
return total_cost
面試官常見的 Follow-up
- 全球化擴展:如果支援 100+ 國家,記憶體放不下運費表怎麼辦?(考察資料庫設計/快取)
- 缺省處理:如果訂單中的商品在運費表中不存在,應該拋出異常還是使用預設運費?
- 多幣種支援:如果運費表包含不同幣種,如何計算總價?
需要專業的面試輔助?
oavoservice 團隊專注於為華人工程師提供高品質的 OA/VO 輔助服務。我們擁有深耕業界多年的大牛導師,為您提供從履歷優化、模擬面試到即時輔助的全方位支援。
- 100% 原創程式碼:拒絕雷同,確保安全。
- 即時輔助:VO 面試中提供關鍵思路與程式碼片段,助你流暢作答。
立即聯繫我們 獲取更多 Stripe 面試真題與客製化輔導方案。