- 0
- 0
- 约1.36万字
- 约 32页
- 2026-03-20 发布于未知
- 举报
2026年软件开发工程师招聘笔试预测题及答案
一、基础理论题(每题10分,共50分)
1.编程语言与并发
Java中`ThreadLocal`的内存泄漏问题是如何产生的?实际开发中应如何避免?Go语言的`goroutine`调度与Java的线程调度有何本质区别?
答案:
Java的`ThreadLocal`内存泄漏源于其内部`Entry`的设计:`Entry`继承自`WeakReferenceThreadLocal?`,即`ThreadLocal`实例作为弱引用的key,而value是强引用。当外部对`ThreadLocal`的强引用被回收后,key会被GC回收,但value仍被`Entry`强引用,若当前线程未结束(如线程池中的线程),value无法被回收,导致内存泄漏。
避免方法:
-显式调用`ThreadLocal.remove()`释放value;
-尽量使用`static`修饰`ThreadLocal`,延长其生命周期与线程绑定;
-在线程池场景中,确保任务执行前后清理`ThreadLocal`。
Go的`goroutine`调度基于GMP模型(Goroutine-Machine-Processor),与Java线程调度的本质区别:
-调度层级:Java线程是内核级线程(KLT),由OS内核调度,上下文切换涉及用户态与内
原创力文档

文档评论(0)