阿里控股一面面经(秒挂版)

零手撕

项目(点评)提问
说一下登录模块的设计
ThreadLocal是用来干什么的
ThreadLocal可能有什么风险,如何避免
子线程能看到父线程的ThreadLocal值吗(不能,因为ThreadLocal线程私有)
那子线程需要用到父线程ThreadLocal里面的数据怎么办(我理解问的是线程之间如何通信,但下来查了一下可以用InheritableThreadLocal设置子线程的ThreadLocal)

详细解释一下超卖问题
说一下Redis分布式锁+lua脚本(这部分讨论了很多。为什么要使用分布式锁实现一人一单,面试官说Redis里面保存可购买数,用户每次去判断这个数据就行了,不需要加锁实现一人一单。这部分项目确实没吃透,还得沉淀)

JVM用的什么垃圾回收器(说的默认的G1)
G1优缺点
G1每个region的大小一般怎么确定
说一下CMS

Sentinel实现机制了解过吗
上游有大量请求要发到多个下游,请求量时高时低,要均匀的下发到下游服务器(假设每个服务器处理能力相同)如何使用消息队列实现

无反问环节

#牛客AI配图神器#
全部评论
点评那个视频里面最后一部分秒杀优化那里就直接用了redis+lua脚本完成了超卖和一人一单不需要用分布式锁了
2 回复 分享
发布于 03-05 20:51 湖北
1 回复 分享
发布于 03-06 14:21 上海
传奇耐挂王
1 回复 分享
发布于 03-05 20:35 四川
你是怎么知道自己挂的
点赞 回复 分享
发布于 03-27 07:38 美国
为啥这么快挂,不接着问
点赞 回复 分享
发布于 03-15 01:36 陕西
秒挂+1
点赞 回复 分享
发布于 03-11 21:03 天津
考虑下淘天呀同学
点赞 回复 分享
发布于 03-07 13:29 浙江
哪个组uu 啥部门
点赞 回复 分享
发布于 03-06 22:15 四川
xd,控股不是有笔试嘛,咋直接开面了
点赞 回复 分享
发布于 03-05 23:31 甘肃
佬只有一个项目吗
点赞 回复 分享
发布于 03-05 23:29 四川

相关推荐

08-13 21:43
已编辑
门头沟学院 Java
但是被发现没有完整实现怎么办?大家 帮我看看。实现秒杀以及一人一单的策略:1:Redis层面的分布式锁首先将分布式锁的粒度降低,将用户Id与商品Id进行绑定,借助LUA脚本(原子性),先判断是否存在购买标识(幂等性1),没买过就去尝试获取分布式锁,获取成功之后然后再次判断是否存在购买标识,再判断库存是否足够,最后再扣减库存,两次判断减少锁竞争的消耗2:数据库层面的数据修改第一种:开启事务,对数据库的数据进行修改,扣减库存以及添加用户的购买记录,然后在Redis中添加唯一标识可以借助Set进行存储,也可以借助string进行存储。string结构可以实现更加精准的存储,可以存储相关的任务状态,比如已完成,未完成,完成中,同时还可以对过期时间进行单独指定,但是呢,当海量数据下会造成高频的内存碎片,与集群跨槽访问开销Set结构可以以更加高效的查询效率去实现检索判断,约为string的30%,但是呢,无法存储任务状态,存在大Key问题,以及对过期时间只能全局Set的设定无法单个元素的设定。第二种:RabbitMQ提高并发能力(幂等性,可靠性的保证)如果说需要想提高并发能力,可以借助RabbitMQ去异步将数据同步数据库,只在Redis去执行业务的决策,此时RabbitMQ当中只是去对数据进行修改,可以保证最终的一致性,无法保证全局的一致性。1 保证幂等性2,将用户id与商品id创建唯一索引或者唯一约束,避免重复消费添加,添加失败导致事务回退2 保证幂等性3,创建全局唯一Id,可以在Redis业务决策结束后生成,后续与用户id商品id一起传入RabbitMQ,当消息被消费者正常消费后,将唯一id存储到Set当中,消费者消费前对判断Set当中是否存在这个唯一标识id,存在代表以及消费过不存在则未消费过或者将这唯一id借助string类型进行存储,消费者消费前判断string是否可以获取成功,成功则代表已经消费过,不成功则未消费3:定时任务进行校验最后还可以借助xxl-job对Redis数据与数据库数据进行校验改进:1 Redis 持久化与高可用: 需要配置 RDB+AOF 和 Redis Sentinel/Cluster 防止数据丢失和服务中断。2 冷启动/预热: 秒杀开始前,需要将商品库存和必要信息加载到 Redis。
我的AI电子员工
点赞 评论 收藏
分享
评论
12
75
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务