摘要: jdk1.7,hashmap才用的是头插法,虽然hashmap并不是线程安全的容器,但是在并发情况下,使用hashmap会带来一个问题: 并发情况下,如果插入元素的两个线程都调用了rehash方法,即扩容方法,会导致链表成环的问题。 hashmap成环原因的代码出现在transfer代码中,也就是扩 阅读全文
posted @ 2020-03-16 22:06 九角冰山 阅读(706) 评论(0) 推荐(0) 编辑
摘要: TCP 是传输层协议 + 基于连接(点对点) 传输数据前需要建立好连接,然后在传输 + 双工通信 TCP连接一旦建立,就可以在连接上进行双向的通信 + 基于字节流而非报文 将数据按字节大小进行编号,接收端通过ACK来确认收到的数据编号,通过这种机制能够保证TCP协议的有序性和完整性,因此TCP能够提 阅读全文
posted @ 2020-03-16 19:26 九角冰山 阅读(1741) 评论(0) 推荐(0) 编辑
摘要: 第一次握手 客户端主动发送 syn=1,随机产生sql number = x 的数据包到服务器(服务器由SYN=1知道客户端要求建立连接) 第二次握手 服务器收到请求后要确认联机信息,向客户端发送SYN=1,ACK=1,随机产生seq number=y, ack number = 客户端的 seq 阅读全文
posted @ 2020-03-16 16:33 九角冰山 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 新建 就绪 运行 阻塞 死亡 阅读全文
posted @ 2020-03-16 16:04 九角冰山 阅读(131) 评论(0) 推荐(1) 编辑
摘要: 主要在于 线程切换需要借助内核完成,意味着 用户态 内核态 用户态, 而协程切换 只在用户态就可以完成, 用户态 用户态 用户态和内核态的切换 是一部分的开销 切换频率,线程切换频率比协程切换的频率高很多, 因为协程库大多都在 IO 阻塞才切换 还有 协程是串行的,线程是并行的,协程是自主让渡执行时 阅读全文
posted @ 2020-03-16 15:59 九角冰山 阅读(800) 评论(0) 推荐(0) 编辑
摘要: 提一嘴上下文切换 ,上下文切换是一个过程 ,从任务保存到再加载的过程就是一次上下文切换 线程和进程上下文切换的区别 进程切换需要分两步 1.切换页目录以使用新的地址空间 2.切换内核栈和硬件上下文 对于linux来说,线程和进程的最大区别就在于地址空间。 对于线程切换,第一步是不需要做的,第二步是进 阅读全文
posted @ 2020-03-16 15:50 九角冰山 阅读(1983) 评论(0) 推荐(0) 编辑
摘要: 看这位老哥是怎么解释的 假如说你订了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度,但是,配送员送外卖是不等人的,到了你这儿没人取的话,就直接走人了。所以你只能苦苦等着,时不时去门口看看外卖送到没,而不能干其他事情。 不过呢,如果在订外卖的时候,你就跟配送员约定好,让他送到后给你 阅读全文
posted @ 2020-03-16 15:22 九角冰山 阅读(1580) 评论(0) 推荐(0) 编辑