用友金融 Java 实习面经:Redis、线程上下文与幂等
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 实习项目做了什么,遇到哪些技术难题和线上故障?
- 文件存储在哪里,项目为什么这样设计?
- Redis 保存哪些数据,容量不足时怎么办?
- Redis 的过期删除和内存淘汰分别如何工作?
- 怎样分析 MySQL 查询性能?
- 父子线程如何传递数据,线程池复用时怎么处理?
- HashMap 与 ConcurrentHashMap 有什么区别?
- G1 与 Parallel GC 有什么区别?
- 接口幂等性如何实现?
- MyBatis 从 Mapper 接口到执行 SQL 经历了什么?
《参考解析》
上下文传递
先区分新建子线程和复用线程池。InheritableThreadLocal 的复制发生在线程创建时,不能把它当成每次提交任务都会传播上下文。任务提交时显式捕获需要的字段,执行前设置、结束后清理或恢复旧值,避免把上一个请求的身份带进下一个请求。
Redis 容量
过期策略处理到期键,淘汰策略处理内存达到限制后的取舍,两者不是一回事。先估算键数量、值大小和过期时间,再决定哪些数据允许淘汰。缓存被淘汰可以回源;任务状态或业务唯一记录若只有这一份,则不能直接套缓存的淘汰规则。
接口幂等
让业务动作携带稳定的请求编号,以唯一约束认领请求,再在事务中完成状态变化。重试要能读到上次的处理结果,不能只是返回一句重复请求。