上海某小厂Java后端一面面经
《面试题目》
- 自我介绍,有没有学校里面比赛的经历
- 简历上的项目介绍,缓存的使用
- Redis 解决缓存雪崩、缓存穿透、缓存击穿问题的方法
- 项目中关于并发的解决措施
- Redis 中分布式锁解决并发安全问题的方法与思路
- 关于读写一致性的问题的解决办法,项目中是如何解决的
- 有没有具体测试过项目的性能,项目还能怎样改进
- 个人的优点与缺点
《参考解析》
- 缓存穿透/击穿/雪崩:穿透(查询不存在的数据)用布隆过滤器或缓存空值预防;击穿(单个热点 key 过期瞬间大量请求打到数据库)用互斥锁重建缓存或逻辑过期方案;雪崩(大量 key 同时过期)用过期时间加随机值打散、结合多级缓存与限流降级。
- Redis 分布式锁:核心是
SET key value NX EX保证加锁的原子性,value 用唯一标识(如 UUID)防止误删他人的锁,释放锁用 Lua 脚本保证”判断+删除”的原子性;生产环境可用 Redisson 的看门狗机制自动续期,避免业务未执行完锁提前过期。 - 读写一致性:常见方案是”Cache Aside”——更新数据库后删除缓存(而非直接更新缓存),并结合延迟双删应对主从同步延迟导致的脏读;对一致性要求更高的场景可监听 binlog(如 Canal)异步更新缓存。