首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
迷途_小书童
西安电子科技大学 Java
关注
已关注
取消关注
@走好|每一步:
秒杀项目的面试问题记录,求助及欢迎讨论
烫
该帖子在秋招时写的,现在楼主已经上岸了。整理一下答案。 但如果牛友点进来,是想找秒杀项目做。 那我必须说:请不要做秒杀项目。 人均秒杀导致的,不只是简历大量重复。其实真正的问题是:面试官问的问题,已经有很多人回答过,那他肯定听过更好的答案,那你的答案即使原本是合格线的,在面试官看来,也就不及格了。那这样,你就只有提出更好的回答。或者面试官提出难度更高的问题,然后这样一个死循环。 楼主是建议自己去做一些轮子,这里可以推荐另一个牛友的帖子,一个RPC框架。 一个简易的rpc框架实现完整教程 再次提示,做秒杀,三思而后行。 如果牛友是来讨论秒杀的问题、答案,可以继续往后看了。 首先先总结一下我的简历中秒杀项目的知识点 Redis分布式缓存的实现 Redis预减库存 内存标记(HashMap)标记是否已结束 RabbitMQ入队 上面都是基础点了,我额外有 RabbitMQ可靠性传输的实现 (发送方,broker , 接收方)三方 RabbitMQ的消息幂等性实现 Jmeter进行的压测 对异常消息的入库记录及Redis对预减库存的补偿 秒杀代码的逻辑就是 1.查看内存标记HashMap,看是否已结束2.判断这个秒杀订单形成没有,避免重复秒杀3 setnx,判断该用户是否请求过,返回提示"等待结果"4 Lua脚本,判断Redis是否有库存,有就扣。没有设置HashMap已结束5 正常入队MQ 我也写了博客,记录相关的实现,有需要的可以看一下,跳转 (有些问题,博客还没来得及更新,谨慎参考) 先指出个本质设计上的问题: 如果库存为N,其实Redis不应该放N,而应该是2N、3N等。 因为放N,若有X条异常消息,无法正常消费 会出现少卖:有库存,买不到 如果回补库存,则设计内存标识的重新开放。 虽然可以通过MQ实现,但其实有延迟,而且成本大 而对于秒杀场景,关键就是前几秒,因此MQ的延迟实现意义不大。 (而且这样处理后,其实异常数据就不需要回补了,因为你设置的并不是N,少量的异常数据不会导致少卖) (此处需要呼吁大佬们提供一下解决思路,挺多问题都没解决的) 面试问题 针对单个商品,有10w+的库存,怎么优化Redis? 综合下评论区老哥的答案。 大概想法是多个相互独立的Redis集群。 比如10w个库存,10个Redis集群,一个集群分1w。 存在的问题:某个集群卖完了,但实际其他集群还有。 楼主认为类似上述的放x倍N的思想,每个集群放2W或3W,再 配合nginx的最少访问负载策略,能很大程度解决这个问题。 但感觉并不是最优解。 如何保证不超卖的情况下,提高效率 推荐阅读:写的很好,秒杀系统优化方案(上)吐血整理 项目本身是否多线程 这里说的不是多线程访问,而是指程序本身是否多线程。 答了无额外处理,依靠springboot的调度。 楼主查阅资料,只有一个跟多线程扯上的。 是一位牛友告知的,队列泄洪的概念。 我感觉跟常规的理解有点区别。 这种用的是多线程来限制访问,表象上看反而是降低了访问速度,但可能是出于大量请求等导致的崩溃的问题,这块不太清楚。因此具体请百度 二、内存标识HashMap的相关问题 对Redis库存进行补充后(异常或退款),如何反馈到内存标记 上面已经说了,已经放X倍的N,来避免这种情况。 当然,该问题的答案是: 单机环境下,把HashMap的范围改为public,补充库存后,直接重置HashMap为true。 集群环境下,就把补充的消息推送到MQ,各个节点进行监听,修改本地的HashMap。或者直接依靠集群的同步机制完成。 直接依靠定时任务,根据redis的库存定时更新HashMap的值。 这种方法缺点也很明显,定时间隔长了,实时性不强。间隔短,性能低 HashMap的问题 线程安全问题:不安全,但不影响。因为后续还是会经过Redis库存判断。 为了线程安全换ConcurrentHashMap之类的,反而不值得 OOM问题:采用Guava,利用其自带的LRU解决。 三、压测相关: load average高,不一定是CPU资源紧张,如何排查 磁盘IO问题,相关命令: vmstat、iostat (仍然没思路的↓) 如何检测、定位项目的性能瓶颈在哪 答了把方法细拆,分别压测对应方法。但反应不理想 除了CPU占用率外,还有什么能判断是否到底瓶颈?
点赞 44
评论 37
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-14 22:26
北京邮电大学 Java
百度二面
8.5你简单做个自我介绍。你是下半年研二是吧?学校是三年的是吧?专硕还是学硕啊?实习的时间这块有预期没有?那个项目是你自己做的、为了学习搞的,还是实验室导师推动一起搞的?你的研究方向是啥?今天有准备好一些大模型相关的知识吗?有启动项目没?你在这个项目里面承担什么角色?通过技术手段解决了哪些核心问题?这个项目的理想态是啥?做成理想态应该要解决哪些技术难点?如果通过 AI(大模型)来解,能承担哪些模块的角色?你在抢票里面的核心做了哪些技术?抢票这块如果是高并发,这个项目最后有没有投入到线上被用户访问到?这个项目要做成什么样的状态?发布是放到哪一个公司里面去应用还是什么?有没有做过一些反爬技术?针对...
点赞
评论
收藏
分享
08-13 14:30
门头沟学院 Java
快手测评
不用开摄像头一共三轮,逻辑、计算、推理,都是北森题库的整体难度不大据说快手是卡测评分数的做完立马出分
投递快手等公司10个岗位
点赞
评论
收藏
分享
06-24 17:38
已编辑
哈尔滨工业大学 产品经理
26硕找实习找了三个月,至今0offer
我愿称为实习悖论➡️大公司实习经历不够➡️小公司说我稳定性差(实习时长我只能3个月,还要回尔滨秋招)求大佬帮看看简历🙏求推荐的岗位🙏工资一点要求都没有,自费实习我都愿意全国可飞,租房子实习
vicky_023:
先说能干六个月进去了再润呗 太老实啦
0offer是寒冬太冷还...
点赞
评论
收藏
分享
08-14 22:22
北京邮电大学 Java
百度一面
7.29你先自我介绍一下吧?你这考研的专业课有哪些?你先说一下你的项目,详细地介绍一下。从打开浏览器到页面完全呈现,中间发生了什么?尽量详细。你这个项目是用 Java Web TOKEN 做登录的,对吧?那你可以具体说一下中间是怎么登录、怎么验证的吗?分布式锁是怎么实现的?缓存里面为什么需要空对象和随机的过期时间?你这个项目里面为什么需要 Nginx 去做反向代理?你用 Rabbitmq 的时候,它本身有一些队列的设置,比如队列怎么绑定交换机等,这些你有去配置过吗?Exchange 在绑定队列的时候是怎么绑定的?你这个项目用的 Rabbitmq 交换机有好几种类型,你用的是哪一种?MySQL ...
查看22道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
给26届小伙伴们一些建议
1.0W
2
...
半夜12点都叫提前下班了?
7217
3
...
大家辛辛苦苦秋招 结果你作弊拿到了字节算法sp
6423
4
...
面试不要紧张,人生的容错率高的可怕
6199
5
...
字节三面-会赢吗
5856
6
...
如何提高秋招面试成功率?
5671
7
...
26前端校招 腾讯wxg 3面 面经
4556
8
...
秋招第一个offer 附tl
4456
9
...
8.14 腾讯TEG-云架构平台部-后台开发一面凉经
4217
10
...
个人对八股的认识
3882
创作者周榜
更多
正在热议
更多
#
你怎么看待AI面试
#
7209次浏览
89人参与
#
我的省钱小妙招
#
22657次浏览
371人参与
#
实习需要主动找活干吗?
#
7851次浏览
86人参与
#
移动求职进展汇总
#
5830次浏览
50人参与
#
转正答辩报告怎么写
#
4170次浏览
42人参与
#
你觉得技术面多长时间合理?
#
104799次浏览
750人参与
#
业务面应该做哪些准备
#
3241次浏览
91人参与
#
大厂面试问八股多还是项目多?
#
5326次浏览
92人参与
#
小米硬件提前批进度交流
#
175203次浏览
1542人参与
#
面试太紧张了怎么办?
#
8151次浏览
176人参与
#
你有没有为省钱「拼过命」
#
3411次浏览
68人参与
#
你是如何祛除班味的
#
2950次浏览
49人参与
#
机械专业只有考研才有出路吗
#
124318次浏览
890人参与
#
你被mentor骂过吗?
#
14418次浏览
89人参与
#
机械人,你最希望上岸的公司是?
#
175594次浏览
1874人参与
#
我想去国央企的原因
#
62991次浏览
397人参与
#
kpi面有什么特征
#
64748次浏览
437人参与
#
小米提前批笔试难吗
#
37267次浏览
366人参与
#
饿了么求职进展汇总
#
67549次浏览
654人参与
#
秋招投递记录
#
36388次浏览
399人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务