ThreadLocal 源码解析
TreadLocal ThreadLocal解决的是线程内部变量的问题,并不是为了解决并发与共享变量的问题。 堆中有两个引用指向ThreadLocal,一个是ThreadLocal本身(强引用),一个ThreadLocalMap中Entry的key(弱引用)。 ThreadLocal的缺点? ThreadLocal内部使用的线性探测法解决hash冲…
HashMap源码解析(未完待续。。。)
数据结构 Node数组+链表 当链表长度大于8并且数组长度大于64时,链表转变为红黑树。 树退化成链表时机 resize()扩容时,红黑树拆分的树节点小于等于6则退化成链表 remove()移除元素时,如果红黑树根 root 为空,或者 root 的左子树/右子树为空,root.left.left 根的左子树的左子树为空,都会发生红黑树退化成链表 …
AOP过程源码分析
一些概念 Advice:一段具体的切面逻辑,例如:目标方法执行前需要执行的那段代码就是advice Advisor:它内部需要指定一个 Advice,Advisor 决定该拦截哪些方法,拦截后需要完成的工作还是内部的 Advice 来做 Pointcut:切入点,用于定义哪些方法需要被增强或者说需要被拦截 Aspect:一般会定义一堆Pointcu…
多版本并发控制协议(MVCC)
1、事务隔离级别 两次转账 转账前:A:11 B:2 总和:13 转账后:A:6 B:12 总和:18 违反了一致性 1.1 事务并发遇到的不一致性问题: w=write c=commit a=abort w1=事务T1写 x,y初始值为0 脏写:一个事务修改了另一个未提交事务修改过的数据 w1[x=1]w2[x=2]w2[y=2]c2w1[y=1…
容器网络虚拟化
参考资料:深入理解Linux网络 相关实际问题 1、容器中的eth0和母机上的eth0是一个东西吗? 2、veth设备是什么,它是如何工作的? 3、Linux是如何实现虚拟网络环境的? 4、Linux如何保证同宿主机上多个虚拟网络环境中的路由表可以独立工作? 5、同一宿主机上多个容器之间是如何通信的? 6、Linux上的容器如何和外部机器通信? v…
深入理解MVCC
事务隔离级别 两次转账 转账前:A:11 B:2 总和:13 转账后:A:6 B:12 总和:18 违反了一致性 事务并发遇到的不一致性问题: w=write c=commit a=abort w1=事务T1写 x,y初始值为0 脏写:一个事务修改了另一个未提交事务修改过的数据 w1[x=1]w2[x=2]w2[y=2]c2w1[y=1]c1 最终…
深入理解TCP链接建立过程
参考资料:深入理解Linux网络 为什么服务端程序都需要先listen一下? 半链接队列和全连接队列长度如何确定? “Cannot assign requested address”这个报错你知道是怎么回事吗? 一个客户端接口可以同时用在两条链接上吗? 服务端半/全链接队列满了会怎么样? 新连接的socket内核对象是什么时候建立的? 建立一条TC…
HTTPS的’S’
几个问题 关闭浏览器tab页面能不能断开tcp连接,tcp连接的断开时机? 为什么一个http(s)请求会建立两条tcp连接? 多次http(s)请求会复用同一条tcp连接吗? 为什么服务器发起断开连接后,客户端不发送FIN? https建立连接需要几次握手? tls的加密算法/对称加密秘钥是由客户端还是服务端确定的? tls是怎么防止中间人攻击的…