人生第一场面试:小厂Java面经
《面试题目》
- 自我介绍
- 项目最大的亮点是什么?(秒杀场景的一人一单与防超卖设计)
- Redisson 实现分布式锁时,关键参数有哪些?key 代表什么?哪些参数有默认值?
- Redisson 分布式锁有什么缺陷和优点?有没有更灵活的实现方式?
- Redis 持久化的两种方式是什么?有什么区别?
- Redis 的淘汰策略有哪些?
- HashMap 的底层数据结构、put 方法的过程、扩容机制,以及负载因子为什么是 0.75?
- 手写 HashMap 的头插法和尾插法
- SQL 如何调优?慢查询如何排查?
- 索引失效的几种情况
- 字节流和字符流的区别
- Redis 批处理相关的优化手段
- JVM 的内存模型
《参考解析》
- Redisson 分布式锁的核心机制:加锁时通过 Lua 脚本保证”判断锁是否存在 + 设置锁 + 记录持有者”这一组操作的原子性;支持可重入(用 hash 结构记录同一线程的重入次数);通过看门狗(Watchdog)机制在锁未释放前每隔一段时间自动续期,避免业务未执行完锁却提前过期导致的并发问题。
- HashMap 负载因子为什么是 0.75:这是时间和空间成本的折中——负载因子过高(接近 1)会导致哈希冲突概率显著上升,链表变长影响查询效率;负载因子过低则会频繁扩容、浪费内存空间。0.75 结合了泊松分布下哈希冲突概率的理论测算,是一个较优的平衡点。
- Redis 两种持久化方式的区别:RDB 是某个时间点的全量内存快照,恢复速度快但可能丢失最后一次快照之后的数据;AOF 记录每一条写命令,通过重写机制压缩体积,数据完整性更高但恢复速度相对较慢,生产环境常见做法是两者结合使用以兼顾恢复速度与数据安全性。