近期两场小厂后端Java面经

《面试题目》

奇妙思维后端一面

  1. 自我介绍
  2. 通过Redis加Lua实现高并发库存扣减,为什么选Lua?对比Java加锁如何?
  3. 如何用Caffeine及Redis构建二级缓存?
  4. 分片上传和断点续传的设计实现?
  5. 抽奖场景(扣除宝石->抽奖->打包入库)存在的问题?
  6. 有无使用AI Coding/全栈经验?
  7. 生成前端的全流程?
  8. Claude模型版本选择及看法?
  9. 对Codex的评价?
  10. 各种AI编程模型的编码能力对比?
  11. 使用AI Coding的完整流程?(追问:拿到大需求如何用AI解决)

嘉为科技Java后端一面

  1. 自我介绍
  2. Redis是单线程吗?多线程优点及为何快?
  3. 项目中Redis的具体应用?
  4. 项目中分片上传和断点续传的实现?
  5. 缓存击穿的解决方案?
  6. 项目中最难的问题?
  7. 对转全栈或测试的想法?
  8. 定位慢SQL的方法及优化手段?
  9. 平时使用的LLM?
  10. AI是否会取代程序员?

《参考解析》

  1. Redis+Lua扣减库存:Lua脚本保证了操作的原子性,避免了网络开销和应用锁(如synchronized/ReentrantLock)在集群环境下失效的问题,性能更高。
  2. 二级缓存(Caffeine+Redis):Caffeine做本地缓存(一级),Redis做分布式缓存(二级)。查询时先查本地,未命中查Redis,再未命中查DB,最后回填。
  3. 抽奖场景一致性:核心是分布式事务问题。建议使用消息队列异步处理扣减与发货,或引入TCC/本地消息表确保数据最终一致,防止超卖或漏发。
  4. 缓存击穿:是指热点Key失效导致大量请求直达数据库。解决方案:加互斥锁(如Redis分布式锁),或设置逻辑过期时间,由异步线程更新缓存。
  5. 定位慢SQL:查看慢查询日志(slow_query_log),使用Explain分析执行计划(重点关注type、key、rows),优化索引结构或改写复杂SQL。