转转
- 时间
- 2026-08
- 来源
- 牛客网
《面试题目》
- 时间:8月11日
- 形式:一面,50分
- 先聊做过的支付后台,然后问
- 同一件二手商品怎么防止两个人同时下单?
- 订单重复提交怎么保证幂等?
- 支付成功后卖家取消商品怎么办?
- 延迟消息关单失败怎么补?
- Redis分布式锁为什么不能只设SETNX?
- MySQL间隙锁什么时候出现?
- JVM频繁Full GC怎么定位?
- 商品并发下单追得最细。我先答Redis锁,面试官问缓存挂了是不是就能卖两次。后面补了数据库条件更新,只有在售状态才能改成已锁定,再用唯一订单号挡重复创建。LRU用了LinkedHashMap,口述了手写双向链表的做法。反问了交易链路归哪个团队。
《参考解析》
- Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
- MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
- 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。