1. 项目背景与核心价值
黑马点评作为Java技术栈的经典实战项目,已经成为中高级Java开发者面试中的"必考题库"。这个基于SpringBoot+Redis+MySQL的本地生活服务平台,涵盖了秒杀、分布式锁、缓存一致性等高频考点。我在辅导学员和参与技术面试的过程中,发现80%的Java岗位面试都会围绕该项目衍生出各种深度问题。
很多候选人在项目描述环节能流畅说出技术架构,一旦被追问"为什么选用Redisson而不是ZooKeeper实现分布式锁"、"如何解决缓存穿透与雪崩的组合问题"这类场景题时,往往暴露出对技术原理理解不深的问题。这份总结正是为了帮助开发者突破"知道但说不透"的瓶颈,从面试官视角拆解每个技术决策背后的思考逻辑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高频必问题深度解析
2.1 分布式锁实现方案对比
典型问题:
"你们项目用Redis实现分布式锁时,为什么选择Redisson而不是setnx?遇到过锁失效的情况吗?"
标准答案:
- 基础方案对比:
- setnx+expire:存在原子性问题,可能设置锁后未设置过期时间就宕机
- Redisson:通过Lua脚本保证原子性,内置看门狗自动续期,提供可重入、公平锁等特性
- 锁失效场景:
- 业务执行时间超过锁有效期(Redisson通过异步续期解决)
- 主从切换导致锁丢失(RedLock算法可缓解但不完全解决)
- 最佳实践:
java复制// Redisson典型用法 RLock lock = redissonClient.getLock("orderLock"); try { if(lock.tryLock(3, 30, TimeUnit.SECONDS)) { // 业务逻辑 } } finally { lock.unlock(); }
加分回答:
- 提及CAP理论下Redis锁属于AP实现,对比ZooKeeper的CP特性
- 讨论业务容忍度:秒杀场景允许少量超卖时可选用Redis,金融场景建议ZK/Etcd
- 展示对Redisson源码的理解:如看门狗通过TimerTask实现续期
