跳转至

27届,数藏项目,交易链路开发,秒杀

面试者背景

:::warning 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用的RocketMQRocketMQ如何保证的消息的可靠性的?怎么保证消息不丢。

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

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

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

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


:::

题目解析

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

SQL扫表关单,有做分页吗?没做,那会不会把内存干爆呢?为啥不做分页。如果要做怎么做?

XXL-JOB扫表有缺点吗?被动关单,同步的还是异步的?怎么实现的异步的?虚拟线程,

:::

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

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

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

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

:::

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

:::color4 主动关单和被动关单,如果并发了,怎么办?状态机控制、乐观锁版本号,介绍下用乐观锁实现版本号的原理,CAS。关单的幂等怎么做?订单操作流水。主动&被动用的幂等号是同一个吗?用的订单号。Xxl-job如何确保只有一台实例可以执行任务,DB锁。Select for update,这个方案好吗。

Select for update 是乐观锁还是悲观锁,锁的是什么?锁的是哪个索引。name <-> age

你的关单任务是单机的还是分布式。单机任务,什么时候会做优化?

:::

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

25_✅乐观锁与悲观锁如何实现?

:::color4 秒杀的下单和非秒杀下单的难点是什么?数据库热点行更新,超卖问题。什么是超卖?

数据库热点行更新存在啥问题?锁等待、死锁检测、数据库链接被占用。耗CPU

怎么做的防超卖?redis预扣减、lua脚本做库存判断。Sql 做库存检测。

为啥要在redis搞个库存?流量过滤做限流不行吗?不关心顺序呢?如果做限流器可以用什么方案?限流算法了解么?漏桶&令牌桶,滑动窗口?短信验证码5分钟内只能发一次。

Redis中什么时候做的初始化?手动set???上架、

如果redis库存扣成功了,数据库扣失败了怎么办?一直重试+人工对账。没办法保证一致性,少卖怎么办?秒杀方案中的MQ的作用是什么?削峰填谷。减少瞬时流程。订单的创建延迟问题怎么处理?怎么提高MQ消费速率,批量消费。MQ异步创单成功之后怎么通知前端,前端通过预生成的订单号轮询,前端一直轮训吗?大量的轮询任务+秒杀用户数多,对数据库造成很大压力?只能靠数据库抗。MQ用的RocketMQ,RocketMQ如何保证的消息的可靠性的?怎么保证消息不丢。

:::

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

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

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

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

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

:::

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

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

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

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

:::

24_✅如何理解AQS?

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

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

:::

17_✅G1和CMS有什么区别?

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

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

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

:::

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