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