一、TCP和UDP
1、什么是TCP和UDP?
- TCP是面向连接的协议,发送数据前要建立连接,TCP提供的是可靠传输
- UDP是无连接的协议,发送数据前不需要建立连接,是不可靠传输
2、TCP和UDP的区别?
- TCP是面向连接的协议,发送数据前要建立连接,提供的是可靠传输
- UDP是无连接的协议,发送数据前不需要建立连接,是不可靠的传输
- TCP通信就像打电话,接通了,确认身份后,才开始通信
- UDP通信就像广播
- TCP只支持点对点通信
- UDP支持一对一、一对多、多对一和多对多
- TCP是面向字节流的
- UDP是面向报文的
3、TCP和UDP的应用场景?
- TCP要求输出的内容可靠,多用在文件传输、邮件传输等
- UDP一般用于实时性要求较高的情况,比如游戏、直播、视频等
4、形容TCP和UDP?
- TCP:张三在微信上问李四方便打电话吗,李四说方便你打吧,张三说好那我打了(建立连接),然后再打电话
- UDP:广播站:各位同学操场集合
5、TCP的三次握手协议?
- 客户端对服务器端说:方便打电话吗
- 服务器端说:方便,打吧
- 客户端:好,那我打了(连接建立)
6、TCP建立连接可以两次握手吗?为什么?
- 不可以。如果只有两次握手协议,服务器端接收到客户端的连接请求后,就会立刻建立连接,等待客户端发送数据,而此时客户端并不发送数据,就会造成服务器端的资源浪费
- 例:服务器端接收到已经失效的连接请求(第一个连接请求停滞,第二个连接请求成功且完成传输),就立刻连接等待客户端发送数据
7、TCP的四次挥手?
四次挥手断开连接是为了确定数据全部传输完成
- 客户端对服务器端说:我们分手吧。
- 服务器端说:好,我知道了。(服务器端说一些感慨的话)
- 服务器端确定没有话想跟客户端说了,就说:删微信吧。
- 客户端说:好,删吧。
8、TCP断开连接可以三次挥手吗?为什么?
即服务器端同时发送确认信号和断开连接请求。
- 第一次挥手表示客户端已经发送完数据,但是服务器端这个时候可能还有数据没有发送完成,所以先给客户端发送一个确认信息,等待全部数据发送完成后才向客户端发送断开连接请求,表示自己的数据也已发送完成。
- 如果采用“三次挥手”,客户端就可能不能完整地接收来自服务器端的数据,不能保证可靠传输。
二、HTTP协议
1、什么是HTTP协议?
- HTTP协议是对浏览器和服务器之间实现可靠传输的超文本数据(包括文本、声音、图像等各种多媒体文件)的协议,简称“超文本传输协议”(超文本即不只是文本)
- HTTP协议属于应用层
2、Socket和HTTP的区别和应用场景?
- Socket连接即所谓的长连接,客户端与服务器端的连接一旦建立将不会主动断开
- Socket应用场景:网络游戏、直播等持续交互
- HTTP连接即所谓的短链接,客户端向服务器端发送一次请求,服务器端响应后即会断开等待下次请求
- HTTP应用场景:网站
3、HTTP和HTTPS的区别?
HTTPS(超文本传输安全协议)就是在HTTP上加了加密处理+认证+完整性保护
- HTTP 是明文传输,HTTPS 通过 SSL/TLS 进行了加密
- 端口不同,HTTP 的端口号是 80,HTTPS 是 443
- HTTPS 需要到 CA 申请证书,要钱
- 连接方式不同,HTTPS 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
4、HTTP请求的步骤?
- 建立TCP连接
- 浏览器向服务器发送请求行
- 浏览器发送请求头(通知服务器头消息发送完毕)
- 服务器应答
- 服务器发送应答头
- 服务器向浏览器发送数据
- 服务器关闭TCP连接
5、常用的HTTP状态码和分类?
- HTTP状态码表示客户端HTTP请求的返回结果
- 状态码的分类:
类别 | 描述 |
1xx: | 提示信息-表示请求已接收,正在处理 |
2xx: | 成功-表示请求已被成功接收、理解、接受 |
3xx: | 重定向-要完成请求必须进行更进一步的操作 |
4xx: | 客户端错误-请求又语法错误或请求无法实现 |
5xx: | 服务器端错误-服务器未能实现合法的请求 |
- 常见的状态码:
状态码 | 描述 |
200: | 请求被正常处理 |
204: | 请求被受理,但没有资源返回 |
301: | 永久性重定向 |
302: | 临时重定向 |
400: | 请求报文语法有误,服务器无法识别 |
401: | 请求需要认证 |
403: | 请求的对应资源禁止被访问 |
404: | 服务器无法找到对应资源 |
500: | 服务器内部错误 |
503: | 服务器正忙 |
6、HTTP协议中有哪些请求方式?
请求方式 | 描述 |
get: | 用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器 |
post: | 用于传输信息给服务器,主要功能与get类似,但一般推荐使用post |
put: | 传输文件,报文主体中包含文件内容,保存到对应URL位置 |
head: | 获取报文首部,与get类似,但不返回报文主体,一般用于验证URL是否有效 |
patch: | 客户端向服务器传送的数据取代指定的文档内容(部分取代) |
trace: | 回显客户端请求服务器的原始请求报文,用于“回环”诊断 |
delete: | 删除文件,与put相反,删除对应URL位置的文件 |
options: | 查询相应URL支持的HTTP方法 |
7、get方法和post方法的区别?
- get重点是从服务器上获取资源;post重点是向服务器发送数据
- get传输的数据量小,因为受到URL长度限制;post可以传输大量数据
- get不安全,请求的数据在URL上是可见的;post是放在请求头部的,是安全的
8、Cookie和Session对于HTTP的作用?
- HTTP协议本身无法判断用户身份,所以需要Cookie或Session
- 什么是Cookie?
- Cookie是由服务器保存在用户浏览器上的文件,可以包含用户的相关信息
- 什么是Session?
- 浏览器和服务器会话过程中,服务器会分配一块存储空间给Session。会话期间创建的一些变量可以存储在Session对象中
- Cookie和Session的区别?
- Cookie数据存放在客户端上,安全性较差;Session数据存放在服务器端上,安全性相对更高
- Cookie的生命周期可以自行定义;Session的生命周期在页面关闭就结束
- Cookie保存的数据大小有限制;Session基本无限制
三、进程和线程
1、什么是进程和线程?
- 进程:程序的一次执行过程。每个进程都有自己独立的内存空间,一个进程可以有多个线程
- 线程:进程中的一个执行任务,是程序执行的最小单元。多个进程共享一片内存空间,可共享数据
2、进程和线程的区别?
- 进程是操作系统资源分配的基本单位;线程是处理器任务调度和执行的基本单位
- 每个进程都有独立的内存空间;同一类线程共享一片内存空间,每个线程有自己独立的运行栈和程序计数器
- 进程之间切换开销较大;线程之间切换开销较小
- 一个进程内可包含多个线程,且多个线程是共同执行的;线程是进程的一部分,被称为轻量级进程
- 一个进程崩溃后,对其他进程没有影响;一个线程崩溃后,整个进程都会崩溃
3、什么是多进程和多线程?
- 多进程:操作系统中同时运行的多个程序,一般是同时运行多个软件
- 多线程:同一个进程中同时有多个线程正在执行
- 在一个程序中,有很多的操作是非常耗时的,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作
注:多线程是异步的,但这不代表多线程真的是几个线程是在同时进行,实际上是系统不断地在各个线程之间来回的切换(因为系统切换的速度非常的快,所以给我们在同时运行的错觉)
4、多线程与多进程,选择谁?
- 单进程单线程:一个人在一张桌子上吃饭
- 单进程多线程:多个人在同一张桌子上一起吃饭
- 多进程单线程:多个人各自在自己的桌子上吃饭
- 多线程的问题是:一道菜在一时刻只允许一个人吃,多个人同时吃一道菜就会发生争抢,此时就必须等一个人夹一口之后,再给另外一个人夹,也就是说资源共享就会发生冲突争抢
- 对于 Windows 系统来说,加桌子(创建进程)的时间开销很大,因此 Windows 鼓励大家在一张桌子上吃饭。Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题
- 对于 Linux 系统来说,加桌子(创建进程)的时间开销很小,因此 Linux 鼓励大家尽量每个人都在自己的桌子上吃饭。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法