本文共 5910 字,大约阅读时间需要 19 分钟。
只有光头才能变强
本文力求简单讲清每个知识点,希望大家看完能有所收获
使用多线程时,不是多线程能提升程序的执行速度,使用多线程是为了更好地利用CPU资源!
程序在执行时,多线程是CPU通过给每个线程分配CPU时间片来实现的,时间片是CPU分配给每个线程执行的时间,因时间片非常短,所以CPU通过不停地切换线程执行。
线程不是越多就越好的,因为线程上下文切换是有性能损耗的,在使用多线程的同时需要考虑如何减少上下文切换
一般来说有以下几条经验
协程。在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换
还可以考虑我们的应用是IO密集型的还是CPU密集型的。
参考资料:
或者可以反过来问:已经有IP地址了,为什么需要MAC地址??在zhihu上还蛮多类似的问题的:
我来简单总结一下为什么有了MAC(IP)还需要IP(MAC):
已经有IP地址了,为什么需要MAC地址??
MAC地址已经是唯一了,为什么需要IP地址?
如果有更好的看法,不妨在评论区下留言哦~
参考资料:
TCP 每个状态说一下,TIME-WAIT状态说一下
TCP总共有11个状态,状态之间的转换是这样的:
流程图:
下面我简单总结一下每个状态:
CLOSE_WAIT:对方发了一个FIN报文给自己,回应一个ACK报文给对方。此时进入CLOSE_WAIT状态。
close()
这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接2*MSL
TIME_WAIT状态一般用来处理以下两个问题:
TIME_WAIT过多怎么解决?
如果在高并发,多短链接情景下,TIME_WAIT就会过多。
可以通过调整内核参数解决:vi /etc/sysctl.conf
加入以下内容设置:
我们可以知道TIME_WAIT状态是主动关闭连接的一方出现的,我们不要轻易去使用上边两个参数。先看看是不是可以重用TCP连接来尽量避免这个问题(比如我们HTTP的KeepAlive)~
参考资料:
TCP是一个可靠的传输协议,它要保证所有的数据包都可以到达,这需要重传机制来支撑。
重传机制有以下几种:
滑动窗口可以说是TCP非常重要的一个知识点。TCP的滑动窗口主要有两个作用:
简略滑动窗口示意图:
详细滑动窗口示意图:
接受端控制发送端的图示:
TCP不是一个自私的协议,当拥塞发生的时候,要做自我牺牲。就像交通阻塞一样,每个车都应该把路让出来,而不要再去抢路了
拥塞控制主要是四个算法:
拥塞控制的作用:
拥塞的判断:
强烈建议阅读:
参考资料:
unix/linux环境下
僵尸进程:
wait
或waitId
获取子进程的信息(状态),子进程的描述符仍在系统中。孤儿进程:
僵尸进程危害:
解决僵尸进程的手段:
参考资料:
首先要知道的是:进程和线程的关注点是不一样的:
操作系统进程间通信的方式有哪些?
信号量(semaphore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。
操作系统线程间通信的方式有哪些?(可以直接理解成:线程之间同步的方式有哪些)
线程间的通信目的主要是用于线程同步。
参考资料:
扩展阅读:
操作系统进程调度算法有哪些?
先来先服务算法(FCFS)
短进程/作业优先算法(SJF)
最高响应比优先算法(HRN)
最高优先数算法
基于时间片的轮转调度算法
最短剩余时间优先算法
多级反馈排队算法
参考笔记:
此部分是看别人的博文已经写得很好了,分享给大家~
ConcurrentHashMap中的扩容是否需要对整个表上锁?
总结(摘抄)要点:
参考资料:
什么是一致性Hash算法(原理)?
总结(摘抄)要点:
一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,好处就是提高容错性和可扩展性。
参考资料:
MySQL date、datetime和timestamp类型的区别
总结(摘抄)要点:
datetime和timestamp的区别:
参考资料:
判断一个链表是否有环(实际上就是看看有无遍历到重复的节点),解决方式(3种):
前指针==后指针
的情况参考资料:
判断两个无环链表是否相交,解决方式(2种):
将第一个链表尾部的next指针指向第二个链表,两个链表组成一个链表。
判断两个有环链表是否相交(注:当一个链表中有环,一个链表中没有环时,两个链表必不相交):
参考资料:
参考资料:
如果大家有更好的理解方式或者文章有错误的地方还请大家不吝在评论区留言,大家互相学习交流~~~
如果想看更多的原创技术文章,欢迎大家关注我的微信公众号:Java3y。Java技术群讨论:742919422。公众号还有海量的视频资源哦,关注即可免费领取。
可能感兴趣的链接:
转载地址:http://uqbsl.baihongyu.com/