记录一次不算面试的面试

2026年4月10日
1.Mybatis缓存 老八股了 又问了问对于Mybatis源码设计的理解
2.Redis多线程 为什么由单线程转而设计多线程 由此延伸出对于操作系统多线程问题 哲学家进餐问题 页表 
3.Docker容器的个人理解 和K8S的异同,在云原生下怎么运用比较合适
4. Vibe Coding的理解 用过哪些AI IDE 平时怎么写提示词 现在流行的国内外模型跑分怎么样 哪个更好 
5. Agent的理解 最近炒的很热的OpenClaw怎么看待
6. 商城订单场景题 超发问题和分布式一致性 幂等
7. 对于业务的理解 
8.个人生涯规划 给我详细拆解哪些可行,哪些有些空
全部评论

相关推荐

04-19 20:28
已编辑
门头沟学院 Java
只背了threadLocal的存储特点和底层原理,以及内存泄露原因,结果被问异步的线程怎么访问子线程?直接懵了 现在来补充这块盲区。Java 主线程中存储的 ThreadLocal 数据,异步子线程、线程池为什么获取不到?有哪些解决方案?各自优缺点?答:1. 原生 ThreadLocal 底层限制每个线程独立拥有自己的  ThreadLocalMap ,天然线程隔离;主线程的 Map 与异步/子线程 Map 完全独立,因此异步线程直接  get()  拿到  null 。解决方案:2. 方案一:InheritableThreadLocal(JDK 原生)- 原理:Thread 类内部存在  inheritableThreadLocals  集合,新建子线程时会浅拷贝父线程该集合数据,实现父子线程传递。- 致命缺点:拷贝逻辑只执行在线程构造方法;线程池、@Async 线程长期复用,不会重复拷贝,导致上下文失效、出现脏数据,生产不推荐。3. 方案二:临时简易方案(无依赖)主线程提前手动  get()  取出 ThreadLocal 数据,转为有效final局部变量,直接传给异步 Lambda/内部类使用;拓展:方法内局部变量被异步引用,必须为有效final(不可二次赋值),成员变量、静态变量无此限制。4. 方案三:生产最终方案(TransmittableThreadLocal 阿里 TTL)- 核心原理:在异步任务提交时刻主动捕获主线程上下文,任务执行时绑定到复用线程,执行完毕自动清理。- 优势:完美兼容线程池、@Async、CompletableFuture 所有异步场景;无需手动传参,彻底摆脱  final  限制,是企业级上下文传递标准方案。其他问题追问1:InheritableThreadLocal 线程池失效的根本原因?线程池线程提前初始化、长期复用,拷贝逻辑只在线程创建时执行一次,无法同步主线程最新的 ThreadLocal 数据。追问2:TTL 与 InheritableThreadLocal 核心区别?InheritableThreadLocal 是线程创建时拷贝;TTL 是任务提交时拷贝,专门适配线程复用场景。追问3:异步代码里,为什么主线程局部变量必须要有效final?局部变量存储在线程栈,异步线程无法跨栈访问;底层会进行值拷贝,语法禁止二次赋值,防止多线程数据错乱。
发面经攒人品
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务