面灵AI

陌陌后端开发一面面经

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. Java 锁的升级机制是什么?
  2. volatileReentrantLocksynchronized 有什么作用和区别?
  3. 线程池参数如何配置?
  4. 核心线程 20、最大线程 2000、队列容量 2 万的线程池,接口 QPS 从几百升到 8000 时如何优化?
  5. GC 日志通常包含哪些内容?
  6. CMS 垃圾回收器的特点是什么?
  7. 哪些情况会导致事务失效?
  8. 虚拟线程有什么作用?
  9. MySQL 的 B+ 树是什么?
  10. 了解哪些索引类型?
  11. 什么情况下索引会失效?
  12. 为什么两个带通配符的 LIKE 条件可能无法使用索引?
  13. Redis 分布式锁怎么创建?
  14. 释放 Redis 锁时要注意什么?
  15. 线程尚未执行完但锁过期了,如何续期?
  16. 缓存击穿和缓存雪崩分别怎么处理?
  17. Redis 大 Key 如何治理?
  18. HTTP 和 HTTPS 有什么区别?
  19. TCP 三次握手是什么?
  20. 如何把一棵树按顺序遍历并写入数组?
  21. 如何合并两个有序链表?

《参考解析》

锁升级通常从无锁、偏向、轻量级到重量级,目标是在低竞争时减少开销。volatile 保证可见性和禁止特定重排序但不保证复合操作原子性;锁提供互斥和更完整的内存语义。线程池应按任务的 CPU/IO 特征、延迟目标和队列积压量压测调参,不能只按 QPS 放大最大线程数。

事务失效常见于自调用、非 public 方法、异常被吞、代理未生效等。B+ 树适合范围查询和磁盘局部性;对索引列做函数、隐式类型转换、前导 % 或选择性过低都可能导致索引失效。

分布式锁应以唯一值原子加锁并在 Lua 脚本中校验持有者后删除;续期要有看门狗并处理进程失联。击穿可用互斥重建或逻辑过期,雪崩需过期时间打散、限流和多级缓存。算法题分别使用中序遍历与双指针合并即可。