jdy 后端 一面:AI 编程、Caffeine 缓存与线程池
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍。
- 为什么转专业?自学和考研计划如何安排?
- 平时如何使用 AI 编程?先生成方案还是直接生成代码?如何提高准确性、减少反复澄清?
- 常用什么大模型,具体版本是什么?
- 实习项目拷打。
- 多级匹配、多级配额分别解决什么问题?
- Caffeine 本地缓存中的脏数据如何处理?多实例返回的缓存结果不一致怎么办?
- Caffeine 和 Redis 如何选型?调用量不高时使用本地缓存的依据是什么?两者分别有哪些开销?QPS 达到什么量级才可能影响 Redis?
- 批量异步任务是否需要独立线程池?线程池的线程数如何确定?
《参考解析》
AI 编程:效率最高的顺序是「先让模型复述需求和约束,再出方案,再改代码」,而不是直接生成一大段。上下文要给全:相关文件、接口契约、错误日志、验收标准;任务要小,一次只改一个点;生成后跑测试、看 diff、做 code review。减少反复澄清的办法是提前写清输入输出、边界、不能动的东西和完成标准,并让模型先提问。
本地缓存与多实例:Caffeine 是进程内缓存,速度快、无网络开销,但多实例之间天然不一致,重启即失效。脏数据靠「更新数据库后删除本地缓存 + 广播失效」处理,广播可以用 Redis Pub/Sub、MQ 或配置中心;对一致性要求高的数据不要放本地,或者把 TTL 设得很短。多实例结果不一致时,先确认是缓存旧值、还是不同实例读到了不同主从/快照,再加版本号或读时校验。调用量不高时用本地缓存的依据是减少 Redis 网络往返和热点 key 压力,但代价是内存占用和一致性维护。
线程池:批量异步任务建议独立线程池,避免和在线请求争抢核心线程,也便于隔离故障和做监控。线程数按任务类型定:CPU 密集接近核数,I/O 密集按等待时间比例估算,再压测;队列要有界,拒绝策略要结合业务,不能默认无界队列。QPS 到多少会影响 Redis 没有固定答案,要看命令复杂度、单核吞吐、网络 RTT 和是否 pipeline;用压测和监控说话,别背一个数字。