脚本宝典收集整理的这篇文章主要介绍了面试-05,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
5. ThreadLocal
ThreadLocal 类的常用方法ThreadLocal() : 创建一个线程本地变量get() : 返回此线程局部变量的当前线程副本中的值inITialValue() : 返回此线程局部变量的当前线程的"初始值"set(T value) : 将此线程局部变量的当前线程副本中的值设置为value
ThreadLocal的原理:如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变 量副本,而不会对其他线程产生影响。即每个线程运行的都是一个副本,也就是说存钱和取钱是两个账户,只是名字相同而已,两个线程间的count没有关系。所以就会发生上面的效果。
ThreadLocal与同步机制a.ThreadLocal与同步机制都是为了解决多线程中相同变量的访问冲突问题b.前者采用以”空间换时间”的方法,后者采用以”时间换空间”的方式
ThreadLocal并不能替代同步机制,两者面向的问题领域不同。1:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式;2:而threadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享变量,这样当然不需要对多个线程进行同步了。
MySQL查询比较慢的话,通过什么方式来优化(情况①:偶尔很慢,可能是数据库在查询脏页,或者没拿到锁情况②:一直很慢,可能是没有索引,或者有索引但没走索引,或者表数据量太大需要分库分表)
1. 对于服务器,每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,就会返回错误。
我们知道操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接?但是事实并不是这样。
我们还知道对于TCP连接是由:原IP,原端口,目的IP,目的端口。但是监听server端TCP连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因为它是固定在本地的端口上去监听,所以最大TCP连接为:客户端ip数×客户端port数
2. 而对于客户端,网络通信过程中服务端监听一个固定的端口,客户端主动发起连接请求后要经过三次握手才能与服务器建立起一个TCP连接.客户端每次发起一个TCP连接时,系统会随机选取一个空闲的端口,该端口是独占的不能与其他TCP连接共享,因此理论上一台机器有多少空闲的端口,就能对外发起多少个TCP连接。根据TCP/IP协议,端口port使用16位无符号整数unsigned short来存储,因此本地端口一共有2^16=65536个,即0-65535,其中0~1023是预留端口,0有特殊含义不能使用,1024以下端口都是超级管理员用户(如root)才可以使用,因此就算使用root权限,一台机器最多能使用的端口也只有65535个。但是一台机器最多只能利用28232个端口。具体的细节解释可以看这里https://www.jianshu.com/p/c77e7026531a
怎么做拥塞控制?
怎么进程间通信?
管道:Linux下一切皆文件这我们必须牢记,所以管道就是一份文件,进程A能看到进程B也能够看到,同时进程A往管道中写数据进程B就可以从另一端读数据了。管道又分为匿名管道和命名管道,匿名管道用piPE()创建,只能用于有亲缘关系的进程间通信,而命名管道则是用于任意进程。最后我们可以说一下命名管道的特点:1、适用于任意进程2、面向字节流3、半双工通信(当然想要实现全双工通信,只要两个管道就可以了)4、生命周期随进程5、内置同步与互斥机制。
消息队列:说白了消息队列就是一个链表,进程A可以向队列中写数据(写满则不能写了,因为消息队列是固定的),队列中有数据了进程B就可以开始读数据了,读完了数据就不能读了(这也就能说明消息队列面向数据报)
消息队列的特点:1、适用于任意进程2、面向数据报3、全双工通信(只要进程有读写权限就可以双向通信)4、生命周期随内核5、内置同步与互斥机制。
共享内存:共享内存就是一块内存,我们知道内存有随机访问的优势,所以共享内存就成为了进程间通信最快的方式。具体通信原理就是这一块物理内存在映射的时候会映射不同的虚拟地址空间,不同的虚拟地址空间就代表着不同的进程那么就可以让多个进程都看到这块内存,然后进行读写操作。
共享内存的特点:1、适用于任意进程2、全双工通信3、生命周期随内核
信号量:信号量准确的来说就没有通信,他可以理解为是一个计数器加上等待队列,它主要侧重了同步于互斥,因为有时候多个进程同时访问临界资源就会产生死锁,那么就需要信号量记录可申请的资源的数量,每申请一次信号量减1,用完释放就加1,等待队列就是资源被申请完了(信号量为0),在申请就会信号量<0,那么此时就会将进程加入等待队列,一旦有资源释放,就可以立马申请到。
信号量的特点就是同步于互斥!!!其实我个人觉得信号也应该属于进程间通信的一种方式,为什么呢?因为进程控制也是进程间通信的目的之一,那一个进程给另外一个进程发送个9号信号就可以杀死这个进程。
线程池+拒绝策略https://bLOG.csdn.net/suifeng629/article/details/98884972
以上是脚本宝典为你收集整理的面试-05全部内容,希望文章能够帮你解决面试-05所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。