java内容比较宽广,相对来说涉及的知识点比较多,为了满足一定的面试需求,所以写的就比较松散。
1、死锁必备的四要素
①互斥条件:即在某一段时间内资源只能由一个进程占有,当这段时间内有其他进程对该资源进行请求时只能等待。
②不可剥夺条件:进程占有的资源不能够被其他进程强行夺走,只能自主释放。
③请求和保持条件:进程已经保持至少一个资源,但又提出新的资源请求,而该资源被其他进程占有,此时请求进程阻塞,但对自己获得的资源保持不放。
④循环等待条件:存在一种进程资源的循环等待链,链中每一个进程所持有的进程被链中下一个进程所请求。
2、有关TCP、UDP
TCP首部:源端口、目的端口、序号、确认号、数据偏移、保留、相应的标志位、窗口、检验和、紧急指针。
UDP首部:伪首部(源IP地址,目的IP地址,0,,1,UDP长度)、UDP首部(源端口、目的端口、长度、检验和)。
TCP和UDP的区别?
①TCP面向连接,UDP面向非连接。
②TCP使用字节流进行数据发送,UDP使用报文段进行数据发送。
③TCP是点对点的连接,UDP可以一对一、一对多、多对一、多对多进行连接。
④TCP首部开销为20个字节,UDP首部开销为8个字节。
⑤TCP是全双工可靠通道通信,UDP是不可靠信道。
3、TCP三次握手
①客户端向服务器端发送请求,过程为发送同步位SYN=1,以及序号为seq=x(序号为该报文首字节+1)。
②服务器收到客户端的请求,给予回应,该过程为发送同步位SYN=1,确认为ACK=1,ack=x+1,seq=y。
③客户端需要再次的确认连接,过程为发送确认为ACK=1,ack=y+1,seq=x+1.
这样TCP连接就建立了,但是为什么不能二次握手就建立连接了呢?
原因是:在客户端向服务器第一次发送连接请求的时候,若存在网络延迟的情况,使得第一次的请求没有到服务器,这时客户端又继续发送第二次请求并建立连接且完成相应的任务之后断开连接了,这时候第一次发送的连接请求才发送到服务器上,这时服务器又会发送确认请求连接信号,由于客户端已经完成了请求任务便会不予理睬,而服务器会一直等待着连接,造成服务器的资源浪费。
4、TCP四次挥手
①首先由客户端发送断开连接信号,过程为发送FIN=1,seq=u(该序号为该报文最后一个字节+1)。
②服务器收到该报文,会先发送确认位ACK=1,ack=u+1,seq=v(该序号为服务器最后发送数据最后一个字节码+1)。
③接着服务器还需要发送FIN=1,ack=u+1,seq=w(可能又发送数据的最后一个字节码+1)。
④客户端收到服务器的断开连接信号,需要给予回应,发送确认号ACK=1,ack=w+1,seq=u+1。