美团Java日常实习一面

1、原理:每个线程维护一个ThreadLocalMap,以ThreadLocal为key存储变量副本,实现线程隔离。问题:内存泄漏(弱引用key被回收但value未清理)、父子线程无法传递。
2、主要用于事务管理(TransactionSynchronizationManager)、请求上下文(RequestContextHolder)、安全上下文等,保证线程安全。
3、冲突解决:ThreadLocalMap用线性探测,HashMap用链表+红黑树;扩容机制:ThreadLocalMap渐进式清理,HashMap一次性rehash;key类型:ThreadLocalMap的key是弱引用
4、corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(空闲时间)、workQueue(任务队列)、threadFactory、rejectedExecutionHandler(拒绝策略)
5、通过ThreadPoolExecutor的setter方法:setCorePoolSize()、setMaximumPoolSize()、setKeepAliveTime()等,结合配置中心实现热更新。
6、监听配置变更→参数校验→调用线程池setter方法→记录变更日志,通常结合Apollo/Nacos等配置中心实现。
7、Zookeeper:强一致性、自动过期、惊群效应Redis:高性能、需手动续期、主从切换可能丢锁
8、原子性(SET NX EX)、锁续期、主从一致性、可重入性、公平性、异常释放等。
9、基于业务执行时间统计(P99耗时 × 2-3倍)+ 网络延迟 + 安全边界,配合自动续期机制。
10、定位:慢查询日志/监控工具 → 分析:EXPLAIN执行计划 → 优化:索引优化/SQL重写/分库分表 → 验证:压测对比 → 监控:持续观察
全部评论

相关推荐

评论
1
2
分享

创作者周榜

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