这是我参与「第五届青训营 」伴学笔记创作活动的第 23 天
1. 请你说说TCP和UDP的区别
TCP是面向对象连接;而UDP是无面向对象连接 2.TCP确保所传输的数据一定会到达目的地,但时间却不能保证;而UDP不确保数据会按原来顺序到达,但具有实时性 3.TCP的使用场景是不在意传输数据速度,但在意传输数据准确;而UDP的使用场景则是对实时性要求较高 4.TCP的首部开销大,占用20字节;而UDP的首部开销小,只占用8个字节 5.TCP只支持点对点的数据传输;而UDP支持一对一、一对多、多对多等各种场景 6.TCP有拥塞控制和流量控制来确保数据的安全性,但如果网络拥塞的话,速度会比较慢;UDP即使在网络拥塞的时候,传输速度也不会慢
2. 请你说说 TCP 三次握手四次挥手过程
tcp 的三次挥手:作用是保证 通信双方都能够正常的收发信息;
三次握手的发生阶段是在客户端连接服务器的connect阶段开始的,
三次握手:
第一次是客户端向服务器端发送请求连接报文,包含自己的字段。
第二次握手是服务器端接受到连接请求后,如果同意便向客户端发送应答,包含自己的字段。
第三次握手客户端接受到应答并向服务器端发送确认报文,此时建立起了长连接。
首先客户端发送一个syn=1,ack给服务器,服务器接收到之后将ack+1,syn=1,ACK包给客户端,这时候,客户端在将ACK+1,ack +1包发送给服务器,这样服务器收到之后就能够,服务器客户端就能够双方都知道可以相互通信,三次握手完成可以开始传输数据。
tcp 的四次挥手:作用是将服务器和客户端的连接安全的断开,四次挥手是发生在客户端或者服务器断开连接的时候,客户端向服务器发送一个fin=1,ack包,服务器收到之后将ack+1包发送给客户端,这时候,服务器会讲传输的数据传输完,之后再发一个fin的包给客户端,客户端收到之后发送一个ACK=1,ack+1包给服务器,这样四次挥手就完成了,服务器和客户端双方都断开了链接。
3. 请你说说 GET 和 POST 的区别
1. 用法: get主要用来获取数据,而post是提交或修改数据。
2. 参数长度:get有长度限制(2048字节)而post没有。
3. 参数显隐性:get的参数是显式的,而post是隐式的。
get是明文传输,可以直接通过url看到参数信息,post是放在请求体中,除非用工具才能看到。
get请求会被浏览器主动缓存,而post不会,除非手动设置
get请求只能进行url编码,而post支持多种编码方式((img,text,application等等)。
get请求的参数数据类型只接受ASCII字符,而post没有限制。
4. 简述一下 C++ 中的多态
c++的多态分为静态多态和动态多态,静态多态在编译期实现,包括函数重载、运算符重载和泛型编程,而动态多态在运行期实现,主要由虚函数实现,就是基类指针指向派生类对象,从而使用基类指针调用派生类函数。
5. 请你介绍一下死锁,产生的必要条件,产生的原因,怎么预防死锁
1. 死锁 两个或两个以上的进程在执行过程中,因争夺共享资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。这些永远在互相等待的进程称为死锁进程。
2. 产生死锁的必要条件 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件:
- 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放;
- 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放;
- 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放;
- 环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合 {P0,P1,P2,···,Pn} 中的 P0 正在等待一个 P1 占用的资源;P1 正在等待 P2 占用的资源,……,Pn 正在等待已被 P0 占用的资源。
3. 产生死锁的原因 - 竞争资源 - 进程间推进顺序非法
4. 预防死锁 - 有序资源分配法 - 银行家算法