后端面试整合(一)
网络部分
1. OSI 的七层模型分别是?各自的功能是什么?
- 物理层:底层数据传输,如网线;网卡标准。
- 数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。
- 网络层:定义IP编址,定义路由功能;如不同设备的数据转发。
- 传输层:端到端传输数据的基本功能;如 TCP、UDP。
- 会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。
- 表示层:数据格式标识,基本压缩加密功能。
- 应用层:各种应用软件,包括 Web 应用。
2. 状态码的作用及分类
状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务端是正常处理了请求还是出现了错误。
- 100 继续发送(两次post发完头返回100继续发)
- 200 成功
- 204 No Content
- 206 Partial Content
- 301 永久性重定向,url已变更
- 302临时重定向 希望用户(本次)能使用新的 URI 访问
- 304 Not Modified 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况
- 400 Bad Request客户端请求错误(请求报文中存在语法错误)
- 401 未授权 当浏览器初次接收到
- 401 响应,会弹出认证用的对话窗口
- 403 Forbidden权限不足
- 404未找到
- 500 内部错误
- 502 Bad Gateway 网关无响应 从上游服务器接收到无效的响应
- 503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
- 504 Gateway Time-out 未从上游服务器接收到无效的响应
3. 说一下一次完整的HTTP请求过程包括哪些内容
- 浏览器进行DNS域名解析,得到对应的IP地址
- 根据这个IP,找到对应的服务器建立连接(三次握手)
- 建立TCP连接后发起HTTP请求(一个完整的http请求报文)
- 服务器响应HTTP请求,浏览器得到html代码(服务器如何响应)
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
- 浏览器对页面进行渲染呈现给用户
- 服务器关闭TCP连接(四次挥手)
4. DNS是什么
官方解释 :DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)
通俗的讲:我们更习惯于记住一个网站的名字,比如www.baidu.com,而不是记住它的ip地址,比如:167.23.10.2。
5. DNS的工作原理
- 电脑先查询自身的本地DNS缓存,若未查到接着向下查询。
- 电脑客户端会发出一个 DNS 请求,问 www.baidu.com 的 IP 是啥啊,并发给本地域名服务器 (本地DNS)。那本地域名服务器 (本地 DNS) 是什么呢?如果是通过 DHCP 配置,本地 DNS 由你的网络服务商(ISP),如电信、移动等自动分配,它通常就在你网络服务商的某个机房。
- 本地 DNS 收到来自客户端的请求。你可以想象这台服务器上缓存了一张域名与之对应 IP 地址的大表格。如果能找到 www.baidu.com,它直接就返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器。根域名服务器是最高层次的,全球共有 13 套。它不直接用于域名解析,但能指明一条道路。
- 根 DNS 收到来自本地 DNS 的请求,发现后缀是 .com,说:“哦, www.baidu.com 啊,这个域名是由.com 区域管理,我给你它的顶级域名服务器的地址,你去问问它吧。”
- 本地 DNS 转向问顶级域名服务器:“老二,你能告诉我 www.baidu.com 的 IP 地址吗?”顶级域名服务器就是大名鼎鼎的比如 .com、.net、 .org 这些一级域名,它负责管理二级域名,比如baidu.com,所以它能提供一条更清晰的方向。
- 顶级域名服务器会给你负责 www.baidu.com 区域的权威 DNS 服务器的地址,让你去那里问。
- 本地 DNS 转向问权威 DNS 服务器:“您好, www.baidu.com 对应的 IP 是啥呀?”baidu.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
- 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
6. 为什么域名解析用UDP协议
因为UDP快啊!UDP的DNS协议只要一个请求、一个应答就好了。
而使用基于TCP的DNS协议要三次握手、发送数据以及应答、四次挥手,但是UDP协议传输内容不能超过512字节。
不过客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。
7. 为什么区域传送用TCP协议
- TCP协议可靠性好
- 从主DNS上复制内容啊,你用不可靠的UDP? 因为TCP协议传输的内容大啊,你用最大只能传512字节的UDP协议?万一同步的数据大于512字节,你怎么办?所以用TCP协议比较好!
8. DNS负载均衡是什么策略
当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会崩掉。
处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等。
9. DNS查询方式有哪些
- 递归解析(由你去询问的服务器帮你查)
当局部DNS服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。 - 迭代解析(你询问的服务器返回另一个服务器地址你自己去查)
当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。比如说:baidu.com的服务器ip地址在192.168.4.5这里,你自己去查吧,本人比较忙,只能帮你到这里了。
10. HTTP长连接和短连接的区别
- 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
- 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。
11. 为什么服务器会缓存这一项功能?如何实现的?
原因:
- 缓解服务器压力;
- 降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快。并且缓存服务器在地理位置上也有可能比源服务器来得近,例如浏览器缓存。
实现方法: - 让代理服务器进行缓存;
- 让客户端浏览器进行缓存
12.http请求方法get和post的区别
get 和 post 是 HTTP请求的两种方式,都可实现将数据从浏览器向服务器发送带参数的请求。HTTP请求的底层协议都是 TCP/IP
get 用于获取资源,是默认的HTTP请求方法。不会修改服务器的数据,能被缓存,参数保留在浏览器历史中;
post 用于传输实体主体。能修改服务器上的数据,不饿能缓存,参数不会保存在浏览器历史中。
由于get提交的数据放在 URL 中,而post不会,所以get更不太安全。post也不安全,因为HTTP是明文传输,抓包可获取数据内容,要想安全还需要加密。
13.三次握手的过程
-
客户端请求建立连接,发送一个同步报文,和初始序列号 seq=x
-
服务端收到请求报文,发送同步确认报文(SYN=1, ACK=1),序列号 seq=y,确认号 ack=x+1
-
客户端收到服务端的确认后,发送一个确认报文(ACK=1),确认号 ack=y+1, 序列号 seq=y+1