临近秋招,整理了一下前段时间找实习时被问过的高频八股(多为互联网大厂)+一些自己的补充。这些只是最基础最基础必须全文背诵的八股!答案很简略,基本都是自己的理解,如有勘误还请指出,虚心改正。
一、OSI七层模型?
-
应用层:直接面向用户,为用户提供服务。主要协议:HTTP、FTP、SMTP、POP、Telnet
-
表示层:处理用户信息的表示问题。
-
会话层:组织协调两个会话进程之间的通信。
-
运输层:负责端到端通信。主要协议:TCP、UDP
-
网络层:通过路由选择,将分组选择适当的路径发往目的地。主要协议:IP、ARP、ICMP、IGMP
-
链路层:通过差错控制,使有差错的物理线路变为无差错的数据链路,提供可靠的通过物理介质传输数据的方法。分为MAC和LLC两层。
-
物理层:实现比特流传输。
二、HTTP报文段?(南瑞信通)
-
请求报文:请求行(请求方法、URL、协议版本)、请求头、空行、实体体。
常见头:Host、User-Agent、Connection、Accept-Charset、Accept-Encoding、Accept-Language
-
响应报文:状态行(协议版本、状态码、状态码描述)、响应头、空行、实体体。
常见头:Date、Server、Connection、Cache-Control、Content-Type、Content-Length、Content-Charset、Content-Encoding、Content-Language
请求方法中增删改查分别是:POST、DELETE、PUT、GET
三、POST和PUT区别?
-
PUT是向服务器端发送数据,修改数据的内容,但不会增加数据的种类(更新数据)
-
POST则会改变数据种类等资源,会创建新的内容(创建数据)
四、POST和GET区别?
-
应用场景:GET用于对服务器资源不会产生影响的场景(如请求一个网页的资源);POST相反(如注册)
-
是否缓存:浏览器一般会缓存GET请求,但很少缓存POST请求
-
传参方式:GET通过查询字符串传参,POST通过请求体传参
-
安全性:GET可将请求参数放入URL中向服务器发送,会被保留在历史记录中,不安全
-
请求长度:由于浏览器对URL长度限制,会影响GET发送数据的长度
-
参数类型:GET只允许ASCII字符,而POST连文件、图片都能传
五、HTTP连接方式?
长连接、短连接。
HTTP/1.0中默认使用短连接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
HTTP/1.1起默认使用长连接,请求头会有Connection: keep-alive
六、HTTP状态码?(美团)
1xx:服务器收到请求,需要请求者继续操作
2xx:成功
3xx:资源重定向(301:永久移动;302:临时移动)
4xx:客户端请求出错(404:请求资源不存在)
5xx:服务端出错(500:服务器内部错误)
七、HTTP和HTTPS的区别?
HTTP是明文传输。
HTTPS是HTTP+SSL加密。工作原理:
-
先建立连接,然后服务端发送证书给客户端;确认信任该证书后服务端再要求客户端发送证书并验证(双向身份验证)
-
加密过程:
先非对称加密:客户端发送第一随机数给服务端,服务端发回第二随机数+公钥,客户端用公钥加密得到预主密钥(第三随机数),发往服务端,两端通过第一随机数+第二随机数+预主密钥得到相同的会话秘钥
接下来为对称加密(都用会话秘钥)
八、HTTP连接和socket连接的区别?
HTTP连接=以HTTP协议为通信协议的TCP连接
HTTP协议是应用层的,而socket是对TCP/IP协议的封装和应用,是一个API。
九、HTTP rest是什么?
定义:Web Service架构。通过语义化方式请求资源URL,解决URL膨胀问题(如GET会把各种操作附加到URL)。
作用:通过URL知道要什么资源,通过HTTP method知道要干什么,通过状态码知道结果如何。
优点:风格统一(不会出现乱七八糟的命名)、面向资源、充分利用HTTP本身语义
十、HTTP缓存类型及缓存寿命?
私有缓存(单独用户,常见的浏览器缓存)、共享缓存(多个用户,常用web代理)
缓存寿命计算依据依次为:cache-control>expires>last-modified
十一、HTTP为什么是无状态的?
无状态指的是不会记录客户状态信息,即每个“请求-响应”都独立。传统静态页面,前后请求不需要关联。
如何使HTTP有状态?cookie。
十二、cookie、session和token的区别?
-
cookie是存储在浏览器端的用户数据(随HTTP请求发送给服务端)。
-
session是存储在服务端的,而session id存储在cookie中。第一次创建session时,在cookie里记录session id,以后每次请求把cookie发送到服务器时,服务器看到这个id,就知道客户机来了。
-
token代表一小段字符串,很多地方都有。
十三、IP地址的划分?
-
A类:大型网络,0.0.0.0-127.255.255.255,掩码:255.0.0.0
-
B类:中型网络,128.0.0.0-191.255.255.255,掩码:255.255.0.0
-
C类:小型网络,192.0.0.0-223.255.255.255,掩码:255.255.255.0
※ A、B、C的网络号字段分别为1、2、3个字节长;在网络号字段最前有1、2、3位类别位(0、10、110)
-
D类:广播地址(前4位:1110)
-
E类:保留以后用(前4位:1111)
十四、TCP三次握手和四次挥手?(腾讯、美团、米哈游、招银网络)
TCP建立连接时需要三次握手。
-
第一次握手:客户端发送syn包到服务器,进入SYN_SENT状态,等待服务器确认。
-
第二次握手:服务器收到syn包,向客户端发送syn+ack包,进入SYN_RECV状态。
-
第三次握手:客户端收到syn+ack包,向服务器发送ack,此时两端进入ESTABLISHED状态。
TCP断连需要四次挥手。
-
第一次挥手:客户端想要关闭连接时,会发送一个FIN给服务器,请求关闭连接。此时,客户端进入FIN_WAIT_1状态,等待服务器的确认。
-
第二次挥手:服务器收到FIN后,发送一个ACK回应,表示收到关闭连接的请求。服务器进入CLOSE_WAIT状态。
-
第三次挥手:由于客户端想要关闭连接,服务器可能还有部分数据没有传输完成,所以还需要一段时间传输,等完成后,服务器会再向客户端发送一个FIN,表示数据全部传输完毕,可以关闭连接。
-
第四次挥手:客户端收到FIN后,发送一个ACK作为回应。服务器收到这个ACK后就完成关闭连接。而客户端会再等待2个MSL,以确保服务器收到了ACK包,并且不会出现新旧连接的数据混淆问题。
十五、TCP数据段包括哪些内容?(阿里云)
源端口、目的端口、序列号、确认号、ACK、SYN、FIN等、校验和、窗口大小、可选项(0~40字节)
十六、TCP如何拆包、组装包?UDP需要吗?
拆包、粘包原因:TCP面向字节流,字节流没有明确分界线,TCP底层并不了解数据具体含义,只会根据TCP缓冲区情况进行包划分,因此会出现拆包、粘包现象。
-
拆包:一个包过大,超过缓冲区大小,拆分发送。
-
粘包:两个包小,间隔时间短,合并成一个包。
-
拆包&粘包:Packet1过大,被拆包,而拆出去的部分又与Packet2粘包。
UDP面向消息,没有拆包粘包。因为UDP有消息保护边界(每个UDP包都有消息头,应用程序必须以消息为单位提取数据)
十七、访问一个网址的过程?
先由DHCP获得自己PC的IP地址;然后ARP获取网关路由器MAC地址;接着查询DNS获取域名对应的IP地址;得到IP地址后,建立TCP连接向服务端发送HTTP请求报文;最后服务端解析请求报文,发送HTTP响应报文给客户端。
注意在此过程中,传递报文的打包过程都是:
报文 --放入--> UDP/TCP报文段 --放入--> IP数据报 --放入--> 以太网帧
接收过程就是反过来。
十八、两台机器之间的通讯过程?
-
在同一网段:PC1进行ARP广播,得到PC2的MAC地址。然后PC1封装数据->交换机->PC2
-
不在同一网段:PC1进行ARP广播,得到网关的MAC地址。然后PC1封装数据->交换机->路由->交换机->PC2
十九、TCP和UDP的区别?(腾讯)
-
TCP是面向连接的,UDP是无连接的。
-
TCP提供可靠交付,UDP不保证可靠交付,没有拥塞控制。
-
TCP面向字节流,UDP面向报文。
-
TCP连接是全双工的可靠信道,只能是点对点;而UDP可以一对一、一对多、多对一、多对多。
-
TCP首部开销20字节,UDP只有8字节。
二十、TCP可靠的原因?
-
确认和重传机制
-
数据排序
-
流量控制:发送方维护一个滑动窗口,接收方维护一个接收窗口
-
拥塞控制:慢启动、拥塞避免、快速重传、快速恢复
二十一、搜索敏感词,页面被重置的原理?
第二次握手时ACK改为0,使客户端误以为服务器重置了连接,主动放弃继续请求。
二十二、DNS解析过程?
先检查自身缓存是否有对应IP,如果有,结束。
递归查询:根服务器、顶级域服务器、权威服务器
二十三、什么是跨域?
URL:【http://】【www.baidu.com】【:8080】三个部分分别是协议、主机、端口号
当浏览器从一个域名的网页去请求另一个域名的资源,以上三者任一不同均为跨域。