1. ThreadLocal
原因及优化
引用链 : currentThread ++> threadLocalMap <Key,Value> --> ThreadLocal
一旦 ThreadLocal 不被强引用,就会被清除;相应的 Key也无法命中 (因为key是ThreadLocal的实例) ,导致 value无法清除;
优化 : 将ThreadLocal作为static常量,这时候 所有线程共享同一个Key
引用链 : main Thread (应用主进程) ++> ThreadLocal
currentThread (web 请求进程) ++> threadLocalMap <Key,Value> --> ThreadLocal
Key永远不会被清除,想删就能删value.
java 四种引用
直接引用 User user = new User();
softRefer (软引用): User softUser = user; user = null; System.gc(); // 可能根据不同gc策略决定 softUser 是否为null;
weakRefer(弱引用) : WeakReference<People> reference = new WeakReference<People>(new People("zhouqian",20)); System.gc(); // reference变为null了
2. 收集器
四个阶段 , STW在哪阶段
初始标记 STW
并发标记
最终标记 STW
清除
G1 CMS 对比
CMS 劣势 : 用的复制有碎片 STW 时间长 优势 : 吞吐量大
G1 劣势 : 吞吐量小,内存占用大 优势 : 局部整理 STW 时间短
GC root 有哪些
常量 ,栈(方法栈,JVM栈)引用的堆中内容
STW 怎么实现
safepoint 标志位
3. redis 重哈希(渐进式哈希)
字典表 dict 引用 h[0] (老的Hashtable) 和 h[1] (新的Hashtable),并有一个字段 rehashIndex
每次第一次访问 h[0] 的元素,顺带会将该元素 复制一份到 h[1],同时rehashIndex ++
直到rehashIndex == h[0].length,说明rehash结束了, rehashIndex 被置为 -1;
4. 杂项
mysql 隔离级别
linux 查询关键字日志 不区分大小写 ,前后2行
字节码加载过程
https://blog.csdn.net/qq_20610631/article/details/82709187
5. k8s
有哪些资源
deployment 发定义 发布,补偿 资源
pod 定义 算力,存储 资源
service 定义 网络发现 资源
...
k8s master node 组件分布
master : apiserver ,etcd 等
node : kube-proxy(监听 etcd中service的变化,底层劫持iptables实现局部DNS )
kubelet(监听etcd 中deployment变化,随时调用docker操作pod)
pod,container ... ...
评论区