面灵AI

用友金融 Java 实习面经:Redis、线程上下文与幂等

时间
2026-09
来源
牛客网

《面试题目》

  1. 实习项目做了什么,遇到哪些技术难题和线上故障?
  2. 文件存储在哪里,项目为什么这样设计?
  3. Redis 保存哪些数据,容量不足时怎么办?
  4. Redis 的过期删除和内存淘汰分别如何工作?
  5. 怎样分析 MySQL 查询性能?
  6. 父子线程如何传递数据,线程池复用时怎么处理?
  7. HashMap 与 ConcurrentHashMap 有什么区别?
  8. G1 与 Parallel GC 有什么区别?
  9. 接口幂等性如何实现?
  10. MyBatis 从 Mapper 接口到执行 SQL 经历了什么?

《参考解析》

上下文传递

先区分新建子线程和复用线程池。InheritableThreadLocal 的复制发生在线程创建时,不能把它当成每次提交任务都会传播上下文。任务提交时显式捕获需要的字段,执行前设置、结束后清理或恢复旧值,避免把上一个请求的身份带进下一个请求。

Redis 容量

过期策略处理到期键,淘汰策略处理内存达到限制后的取舍,两者不是一回事。先估算键数量、值大小和过期时间,再决定哪些数据允许淘汰。缓存被淘汰可以回源;任务状态或业务唯一记录若只有这一份,则不能直接套缓存的淘汰规则。

接口幂等

让业务动作携带稳定的请求编号,以唯一约束认领请求,再在事务中完成状态变化。重试要能读到上次的处理结果,不能只是返回一句重复请求。