Skip to content

面试速答(先看这里)

**一句话结论:**订单的超时关单怎么实现的?

60秒标准回答:

27届,双一流本科,数藏项目,交易链路开发,秒杀,Java

介绍下项目,秒杀下单,订单防重提交、订单超时关单

订单的超时关单怎么实现的?主动关单 & 被动关单。 Xxl-job ,关单扫表扫描条件? 30 分钟是代码中配置的?如果改成 15 分钟,怎么不改代码? SQL 有用到索引吗?状态 + 时间,为什么这么设计?状态区分度不高为什么还建索引?除了 XXL-JOB 还有其他 方案吗? MQ 延时消息

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**27届,双一流本科,数藏项目,交易链路开发,秒杀,Java,
  • **要点2:**介绍下项目,秒杀下单,订单防重提交、订单超时关单。
  • **要点3:**XXL-JOB 扫表有缺点吗?
  • **要点4:**如果 redis 库存扣成功了,数据库扣失败了怎么办?
  • **要点5:**如果redis库存扣成功了,数据库扣失败了怎么办?

**记忆锚点:**redis → STW → Xxl-job → SQL → XXL-JOB → RocketMQ

易错提醒:

  • 手动 set??? 上架、 如果 redis 库存扣成功了,数据库扣失败了怎么办?

加分表达:

  • 如果改成 15 分钟,怎么不改代码?
  • 主动关单和被动关单,如果并发了,怎么办?

追问准备:

  • 订单的超时关单怎么实现的?
  • Xxl-job ,关单扫表扫描条件?
  • 30 分钟是代码中配置的?
  • 如果改成 15 分钟,怎么不改代码?

面试者背景 ​

> 27届,双一流本科,数藏项目,交易链路开发,秒杀,Java, > > 介绍下项目,秒杀下单,订单防重提交、订单超时关单。 > > 订单的超时关单怎么实现的?主动关单**&被动关单。Xxl-job,关单扫表扫描条件?30分钟是代码中配置的?如果改成15分钟,怎么不改代码?SQL有用到索引吗?状态+时间,为什么这么设计?状态区分度不高为什么还建索引?除了XXL-JOB还有其他 方案吗?MQ延时消息。** > > **SQL扫表关单,有做分页吗?没做,那会不会把内存干爆呢?为啥不做分页。如果要做怎么做?** > > XXL-JOB****扫表有缺点吗?被动关单,同步的还是异步的?怎么实现的异步的?虚拟线程, > > 介绍下什么是虚拟线程?守护线程,你这里用守护线程没问题吗? > > 主动关单和被动关单,如果并发了,怎么办?状态机控制、乐观锁版本号,介绍下用乐观锁实现版本号的原理,CAS。关单的幂等怎么做?订单操作流水。主动**&被动用的幂等号是同一个吗?用的订单号。Xxl-job如何确保只有一台实例可以执行任务,DB锁。Select for update,这个方案好吗。 > > Select for update **是乐观锁还是悲观锁,锁的是什么?锁的是哪个索引。name <-> age > > 你的关单任务是单机的还是分布式。单机任务,什么时候会做优化? > > 秒杀的下单和非秒杀下单的难点是什么?数据库热点行更新,超卖问题。什么是超卖? > > **数据库热点行更新存在啥问题?锁等待、死锁检测、数据库链接被占用。耗CPU****,** > > 怎么做的防超卖?redis预扣减、lua脚本做库存判断。Sql 做库存检测。 > > **为啥要在redis搞个库存?流量过滤做限流不行吗?不关心顺序呢?如果做限流器可以用什么方案?限流算法了解么?漏桶&令牌桶,滑动窗口?短信验证码5分钟内只能发一次。** > > **Redis中什么时候做的初始化?手动set???上架、 > > **如果redis库存扣成功了,数据库扣失败了怎么办?一直重试**+人工对账。没办法保证一致性,少卖怎么办?秒杀方案中的MQ的作用是什么?削峰填谷。减少瞬时流程。订单的创建延迟问题怎么处理?怎么提高MQ消费速率,批量消费。MQ异步创单成功之后怎么通知前端,前端通过预生成的订单号轮询,前端一直轮训吗?大量的轮询任务+秒杀用户数多,对数据库造成很大压力?只能靠数据库抗。MQ用的RocketMQ****,RocketMQ如何保证的消息的可靠性的?怎么保证消息不丢。** > > 项目中用过线程池吗?用的哪个线程池,有哪些核心参数?核心线程数、最大线程数、工作队列、时间、拒绝策略。拒绝策略都有哪些?队列可以用哪些队列。ArrayBlockingQueue,LinkedBlockingQueue有啥区别?线程池和虚拟线程之间有必要配合使用么? > > 介绍下AQS?队列为啥用双向链表、 > > G1和CMS区别,ZGC知道么。介绍下垃圾清理的过程。GCRoot **,三色标记法、初始标记、并发标记、重新标记、垃圾清除。哪个过程是STW的?清理需要STW吗?为啥并发标记可以不需要STW?** > > 从1TB的搜索日志,查询出搜索量最高的10个关键词

题目解析 ​

> 订单的超时关单怎么实现的?主动关单**&被动关单。Xxl-job,关单扫表扫描条件?30分钟是代码中配置的?如果改成15分钟,怎么不改代码?SQL有用到索引吗?状态+时间,为什么这么设计?状态区分度不高为什么还建索引?除了XXL-JOB还有其他 方案吗?MQ延时消息。** > > **SQL扫表关单,有做分页吗?没做,那会不会把内存干爆呢?为啥不做分页。如果要做怎么做?** > > XXL-JOB扫表有缺点吗?被动关单,同步的还是异步的?怎么实现的异步的?虚拟线程,

📄 ✅基于XXL-JOB的分片实现分库分表后的扫表

打开文档:✅基于XXL-JOB的分片实现分库分表后的扫表

📄 ✅数据库扫表任务如何避免出现死循环

打开文档:✅数据库扫表任务如何避免出现死循环

📄 ✅定时任务扫表的缺点有什么?

打开文档:✅定时任务扫表的缺点有什么?

> 介绍下什么是虚拟线程?守护线程,你这里用守护线程没问题吗?

📄 ✅JDK21 中的虚拟线程是怎么回事?

打开文档:✅JDK21 中的虚拟线程是怎么回事?

> 主动关单和被动关单,如果并发了,怎么办?状态机控制、乐观锁版本号,介绍下用乐观锁实现版本号的原理,CAS。关单的幂等怎么做?订单操作流水。主动**&**被动用的幂等号是同一个吗?用的订单号。Xxl-job如何确保只有一台实例可以执行任务,DB锁。Select for update,这个方案好吗。 > > Select for update **是乐观锁还是悲观锁,锁的是什么?锁的是哪个索引。**name <-> age > > 你的关单任务是单机的还是分布式。单机任务,什么时候会做优化?

📄 ✅基于状态机+乐观锁解决订单支付和关单的并发问题

打开文档:✅基于状态机+乐观锁解决订单支付和关单的并发问题

📄 ✅乐观锁与悲观锁如何实现?

打开文档:✅乐观锁与悲观锁如何实现?

> 秒杀的下单和非秒杀下单的难点是什么?数据库热点行更新,超卖问题。什么是超卖? > > 数据库热点行更新存在啥问题?锁等待、死锁检测、数据库链接被占用。耗CPU, > > 怎么做的防超卖?redis预扣减、lua脚本做库存判断。Sql 做库存检测。 > > **为啥要在redis搞个库存?流量过滤做限流不行吗?不关心顺序呢?如果做限流器可以用什么方案?限流算法了解么?漏桶&令牌桶,滑动窗口?短信验证码5分钟内只能发一次。** > > **Redis中什么时候做的初始化?手动****set???**上架、 > > 如果redis库存扣成功了,数据库扣失败了怎么办?一直重试+人工对账。没办法保证一致性,少卖怎么办?秒杀方案中的MQ的作用是什么?削峰填谷。减少瞬时流程。订单的创建延迟问题怎么处理?怎么提高MQ消费速率,批量消费。MQ异步创单成功之后怎么通知前端,前端通过预生成的订单号轮询,前端一直轮训吗?大量的轮询任务+秒杀用户数多,对数据库造成很大压力?只能靠数据库抗。MQ用的RocketMQ,RocketMQ如何保证的消息的可靠性的?怎么保证消息不丢。

📄 ✅让你设计一个秒杀系统,你会考虑哪些问题?

打开文档:✅让你设计一个秒杀系统,你会考虑哪些问题?

📄 ✅库存扣减如何避免超卖和少卖?

打开文档:✅库存扣减如何避免超卖和少卖?

📄 ✅为什么不用分布式锁来实现秒杀?

打开文档:✅为什么不用分布式锁来实现秒杀?

📄 ✅RocketMQ如何保证消息不丢失?

打开文档:✅RocketMQ如何保证消息不丢失?

> 项目中用过线程池吗?用的哪个线程池,有哪些核心参数?核心线程数、最大线程数、工作队列、时间、拒绝策略。拒绝策略都有哪些?队列可以用哪些队列。ArrayBlockingQueue,LinkedBlockingQueue有啥区别?线程池和虚拟线程之间有必要配合使用么?

📄 ✅什么是线程池,如何实现的?

打开文档:✅什么是线程池,如何实现的?

📄 ✅线程池有哪些核心参数?

打开文档:✅线程池有哪些核心参数?

📄 ✅为什么虚拟线程不要和线程池一起用?

打开文档:✅为什么虚拟线程不要和线程池一起用?

> 介绍下AQS?队列为啥用双向链表、

📄 ✅如何理解AQS?

打开文档:✅如何理解AQS?

📄 ✅AQS为什么采用双向链表?

打开文档:✅AQS为什么采用双向链表?

> G1和CMS区别,ZGC知道么。介绍下垃圾清理的过程。GCRoot ,三色标记法、初始标记、并发标记、重新标记、垃圾清除。哪个过程是STW的?清理需要STW吗?为啥并发标记可以不需要STW?

📄 ✅G1和CMS有什么区别?

打开文档:✅G1和CMS有什么区别?

📄 ✅介绍下CMS的垃圾回收过程

打开文档:✅介绍下CMS的垃圾回收过程

📄 ✅为什么初始标记和重新标记需要STW,而并发标记不需要?

打开文档:✅为什么初始标记和重新标记需要STW,而并发标记不需要?

> 从1TB的搜索日志,查询出搜索量最高的10个关键词

📄 ✅如何从 1TB 的搜索日志中找出搜索量最高的 10 个关键词?

打开文档:✅如何从 1TB 的搜索日志中找出搜索量最高的 10 个关键词?