菜鸟直管Java开发二面面经

菜鸟直管 · Java开发工程师 · 二面 · 2026-04

《面试题目》

  1. 自我介绍
  2. 系统稳定支持 2000+ QPS 是上线后就这样,还是经过了优化?架构层面做了哪些优化?
  3. 为什么要做本地缓存,不做行不行?2000 的 QPS 有必要做本地缓存吗?
  4. 索引优化是怎么做的?
  5. 项目里的分布式锁是在什么情况下引入的?为什么要用它?
  6. Java 里操作 Redis 用的是哪个 client?操作锁的 API 用过哪些?
  7. 用过哪些 vibe coding 工具?

《参考解析》

  1. 本地缓存在中等 QPS 场景下的价值:即便 2000 QPS 并不算特别高,本地缓存依然能显著降低对 Redis/数据库的网络往返开销(本地内存访问是纳秒级,网络调用是毫秒级),尤其对于读多写少、数据变化不频繁的热点数据(如配置、字典表),引入本地缓存(如 Caffeine)配合较短的 TTL 或主动失效通知,能以很小的一致性代价换取显著的性能提升。
  2. 分布式锁引入时机的判断:并非所有并发场景都需要分布式锁——只有当多个节点/线程会同时操作同一份共享资源,且该操作不是原子的(比如”查询库存-判断-扣减”这种复合操作)时才需要引入;如果业务允许,优先考虑用数据库乐观锁(版本号/条件更新)或 Redis 原子命令(如 INCR/DECR)替代分布式锁,因为分布式锁会引入额外的网络开销和锁竞争,性能和可用性都不如原子操作。