菜鸟直管Java开发二面面经
《面试题目》
- 自我介绍
- 系统稳定支持 2000+ QPS 是上线后就这样,还是经过了优化?架构层面做了哪些优化?
- 为什么要做本地缓存,不做行不行?2000 的 QPS 有必要做本地缓存吗?
- 索引优化是怎么做的?
- 项目里的分布式锁是在什么情况下引入的?为什么要用它?
- Java 里操作 Redis 用的是哪个 client?操作锁的 API 用过哪些?
- 用过哪些 vibe coding 工具?
《参考解析》
- 本地缓存在中等 QPS 场景下的价值:即便 2000 QPS 并不算特别高,本地缓存依然能显著降低对 Redis/数据库的网络往返开销(本地内存访问是纳秒级,网络调用是毫秒级),尤其对于读多写少、数据变化不频繁的热点数据(如配置、字典表),引入本地缓存(如 Caffeine)配合较短的 TTL 或主动失效通知,能以很小的一致性代价换取显著的性能提升。
- 分布式锁引入时机的判断:并非所有并发场景都需要分布式锁——只有当多个节点/线程会同时操作同一份共享资源,且该操作不是原子的(比如”查询库存-判断-扣减”这种复合操作)时才需要引入;如果业务允许,优先考虑用数据库乐观锁(版本号/条件更新)或 Redis 原子命令(如
INCR/DECR)替代分布式锁,因为分布式锁会引入额外的网络开销和锁竞争,性能和可用性都不如原子操作。