在 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 面试真题与定制化辅导方案。