|
基本信息面试流程 一面通过 → 二面通知 → 参加视频面试 → 项目深度追问 → 系统设计题 → 进阶技术问答 → 算法进阶题 → 反问环节 → 退场。 面试问题及参考回答
一、系统设计题
1. 如何设计一个秒杀系统? 参考回答:秒杀系统的关键在于流量削峰和防止超卖。方案: 前端限流:按钮置灰、验证码、倒计时 网关层限流:Nginx限流、令牌桶算法 Redis预扣库存:使用Lua脚本原子操作 消息队列削峰:将请求写入MQ,异步处理订单 数据库乐观锁:防止超卖,使用版本号更新 兜底策略:库存预热、降级熔断
2. 如何设计一个短链接系统? 参考回答:短链接系统核心功能:长链接转短链接、短链接重定向。
3. 如何设计一个高并发计数器系统? 参考回答:考虑使用Redis的INCR命令实现原子递增,多副本部署。如果需要持久化,可以异步写入数据库。也可以使用分段计数器方案,减少锁竞争。对于超高并发场景,可以使用本地缓存批量聚合后上报。
二、项目深度追问
4. 你在项目中使用Redis解决了什么问题?遇到过什么坑? 参考回答:在[项目名称]中,使用Redis缓存热点数据,减少数据库压力。遇到的问题:缓存穿透、缓存雪崩、缓存一致性。解决方案:使用布隆过滤器防止穿透,随机过期时间防止雪崩,更新时先更新数据库再删除缓存。
5. 你的项目如何保证消息队列的消息不丢失? 参考回答:保证消息不丢失需要从三个方面考虑: 生产者:使用同步发送+确认机制,重试机制 Broker:消息持久化到磁盘,多副本存储 消费者:手动确认消费,消费成功后提交offset
同时要做好幂等设计,防止重复消费。
6. 你的项目中遇到过什么技术难题?是如何解决的? 参考回答:(按STAR原则回答)在[项目名称]中,我们遇到了[具体问题]。原因是[分析原因]。我通过[查阅资料/方案对比/多轮实验],最终采用了[解决方案],使[性能指标]提升了XX%。
三、进阶技术
7. MySQL的索引结构为什么使用B+树? 参考回答:B+树的优点:
8. 什么是MVCC?MySQL中如何实现? 参考回答:MVCC是多版本并发控制,通过保存数据的多个版本实现非锁定读。MySQL InnoDB通过隐藏列(事务ID、回滚指针)和Undo Log实现。每个事务开始时获取一个ReadView,根据可见性规则判断数据版本是否可见,从而实现可重复读和读已提交隔离级别。
9. Redis的持久化方式有哪些? 参考回答:Redis有两种持久化方式:
|