
1) 【一句话结论】采用**乐观锁(版本号)+ 多版本并发控制(MVCC)**方案,结合分布式锁或最终一致性机制,通过冲突检测(版本号校验)与重试逻辑,确保跨仓库库存数据实时一致,并有效处理并发更新冲突。
2) 【原理/概念讲解】老师口吻解释核心概念:
库存更新场景类似“抢票”,国内/海外仓库同时扣减库存时,需保证数据正确。
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 乐观锁 | 更新时检查版本号是否匹配 | 低锁竞争,高并发下性能好,失败需重试 | 库存扣减(读多写少)、高并发场景 | 需处理失败重试,可能增加延迟 |
| 悲观锁 | 加锁后更新,独占资源 | 确保数据一致,避免脏读 | 写多读少、金融交易(强一致性) | 锁粒度过大导致性能下降,死锁风险 |
4) 【示例】
warehouse(仓库表):warehouse_id (PK), address, type (国内/海外)inventory(库存表):inventory_id (PK), warehouse_id (FK), product_id, stock_quantity, version (INT,自增)warehouse_id + product_id 上建复合索引,加速查询。-- 乐观锁更新
UPDATE inventory
SET stock_quantity = stock_quantity - 1,
version = version + 1
WHERE warehouse_id = ? AND product_id = ? AND version = ?;
-- 若更新行数为0,说明版本号不一致,重试
冲突处理:乐观锁失败则重试,悲观锁失败则等待锁释放后重试。5) 【面试口播版答案】(约90秒)
“面试官您好,针对跨仓库库存实时一致性问题,我的方案核心是采用乐观锁结合多版本并发控制(MVCC),确保数据一致性并处理并发冲突。首先,表结构设计:仓库表存储国内/海外仓库信息,库存表包含仓库ID、商品ID、库存数量和版本号(用于乐观锁)。索引方面,在仓库ID和商品ID上建复合索引,加速查询。处理并发时,更新操作先读取当前库存和版本号,若乐观锁检查失败(版本号不一致),则重试;若成功则更新。这样既保证库存实时一致,又避免锁竞争导致的性能问题。具体来说,比如国内仓库和海外仓库同时扣减同一商品库存,系统通过版本号检测冲突,失败后重试,最终确保库存数量正确。”
6) 【追问清单】
7) 【常见坑/雷区】