《对线面试官》| 高频计算机网络面试题 pt.2


在面试中,计算机网络是面试官最喜欢考察的内容之一

下面是我整理的一些高频计算机网络常问面试题,只要掌握了,分分钟拿捏面试官

pt.1 链接在这:《对线面试官》| 高频计算机网络面试题

11、Get与POST的区别

  • GET 一般用来从服务器上获取资源,POST 一般用来创建资源
  • GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的。GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变
  • 请求参数形式上看,GET 请求的数据会附在 URL 之后,以 ”?“分割 URL 和传输数据,参数之间以 ”&“ 连接;而 POST 请求会把提交的数据则放置在是HTTP请求报文的 body 中
  • POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而 POST 请求参数则被包装到请求体中,相对更安全
  • GET 请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的

12、Session、Cookie 的区别

  • session 在服务器端,cookie 在客户端(浏览器)
  • session 默认被存储在服务器的一个文件里(不是内存)
  • session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  • session 可以放在文件、数据库、或内存中都可以

13、简单聊聊 HTTP 协议吧

HTTP 是一种超文本传输协议 (Hypertext Transfer Protocol),主要内容分为三部分,超文本(Hypertext)、传输(Transfer)、协议(Protocol)

超文本指的是HTML,css,JavaScript和图片等,HTTP的出现是为了接收和发布HTML页面,经过不断的发展也可以用于接收一些音频,视频,文件等内容

HTTP协议是用于客户端和服务器端之间的通信,用于客户端和服务器端之间的通信有HTTP协议和TCP/IP协议族在内的其他众多的协议。

请求访问文本或图片等资源的一方,我们叫做客户端;负责接收,提供响应的一方称为服务器端

14、URI 和 URL 的区别

  • URI

统一资源标识符(uniform resource identifier)用来唯一标识一个资源

  • URL

统一资源定位符(uniform resource locator)

在这里插入图片描述

15、GET 和 POST 方法都是安全和幂等的吗?

先说明下安全和幂等的概念:

  • 在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源。
  • 所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的

那么很明显 GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等

16、说说 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?

HTTP/1.1 相比 HTTP/1.0 性能上的改进:

  • 使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
  • 支持 管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间

但 HTTP/1.1 还是有性能瓶颈:

  • 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
  • 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;
  • 没有请求优先级控制;
  • 请求只能从客户端开始,服务器只能被动响应

17、那上面的 HTTP/1.1 的性能瓶颈,HTTP/2 做了什么优化?

HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的

HTTP/2 相比 HTTP/1.1 性能上的改进:

  • 头部压缩

HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复部分

这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度

  • 二进制格式

HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式

头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧

在这里插入图片描述
这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率

  • 数据流

HTTP/2 的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应

每个请求或回应的所有数据包,称为一个数据流(Stream)

每个数据流都标记着一个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数

客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求

在这里插入图片描述

  • 多路复用

HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应

移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率

举例来说,在一个 TCP 连接里,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分

  • 服务器推送

HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息

举例来说,在浏览器刚请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待,也就是服务器推送(Server Push,也叫 Cache Push)

18、说说 TCP 三次握手和四次挥手吧

TCP 三次握手和四次挥手也是面试题的热门考点,它们分别对应 TCP 的连接和释放过程

下面就来简单认识一下这两个过程,在了解具体的流程前,我们需要先认识几个概念

消息类型描述
SYN初始化和建立连接
ACK帮助对方确认收到的 SYN 消息
SYN-ACK本地的 SYN 消息和较早的 ACK 数据包
FIN断开连接
  • SYN:它的全称是 Synchronize Sequence Numbers,同步序列编号。是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立 TCP 连接时,首先会发送的一个信号。客户端在接收到 SYN 消息时,就会在自己的段内生成一个随机值 X。
  • SYN-ACK:服务器收到 SYN 后,打开客户端连接,发送一个 SYN-ACK 作为答复。确认号设置为比接收到的序列号多一个,即 X + 1,服务器为数据包选择的序列号是另一个随机数 Y。
  • ACK:Acknowledge character, 确认字符,表示发来的数据已确认接收无误。最后,客户端将 ACK 发送给服务器。序列号被设置为所接收的确认值即 Y + 1

TCP三次握手

在这里插入图片描述

  • 第一次握手:客户端发送一个SYN包给服务端,然后进入到SYN_SENT状态
  • 第二次握手:处在监听状态的服务端收到客户端的SYN包后进行回应:发送一个ACK包给客户端,同时发送一个SYN包给客户端,然后进入到SYN_RCVD状态
  • 第三次握手:客户端在收到服务端的SYN包后发送一个ACK包进行确认,然后进入到
    ESTABLISHED(连接成功状态)。服务端在收到ACK包后也进入ESTABLISHED(连接成功状态)

TCP四次挥手
在这里插入图片描述

  • 第一次挥手:客户端先发送一个 FIN 包给服务端,然后进入到 FIN_WAIT1(终止等待1)状态
  • 第二次挥手:服务端收到 FIN 包之后对其进行回应:发送一个 ACK 包给客户端,然后进入到 close_wait(关闭等待)状态。这时候服务端处于半关闭状态。
  • 第三次挥手:同时服务端也请求关闭连接,发送一个 FIN 包给客户端,然后进入
    LAST_ACK(最后确认)状态
  • 第四次挥手:客户端在收到服务端发送的ACK包之后进入到 FIN_WAIT2(终止等待2)状态,对服务端发来的 FIN 包进行回应:发送一个 ACK包 给服务端,然后进入到TIME_WAIT(时间等待)状态,等待 2MSL(最长报文段寿命)后进入关闭状态,服务端在收到客户端发来的 ACK 包之后立即进入关闭状态

19、简单聊聊HTTP 工作原理

  • 客户端与 web 服务器建立连接(TCP 三次握手)
  • 客户端发送 HTTP 请求
  • 服务端接收请求并返回 HTTP 响应
  • 释放 TCP 连接
  • 客户端浏览器解析 HTML 内容

20、什么是无状态协议,HTTP 是无状态协议吗,怎么解决无状态带来的问题

无状态协议(Stateless Protocol) 就是指浏览器对于事务的处理没有记忆能力。举个例子来说就是比如客户请求获得网页之后关闭浏览器,然后再次启动浏览器,登录该网站,但是服务器并不知道客户关闭了一次浏览器

HTTP 就是一种无状态的协议,他对用户的操作没有记忆能力。可能大多数用户不相信,他可能觉得每次输入用户名和密码登录一个网站后,下次登录就不再重新输入用户名和密码了。这其实不是 HTTP 做的事情,起作用的是一个叫做 Cookie 的机制。它能够让浏览器具有记忆能力

当你向服务端发送请求时,服务端会给你发送一个认证信息,服务器第一次接收到请求时,开辟了一块 Session 空间(创建了Session对象),同时生成一个 session id ,并通过响应头的 Set-Cookie:JSESSIONID=XXXXXXX 命令,向客户端返回要求设置 Cookie 的响应;

客户端收到响应后,在本机客户端设置了一个 JSESSIONID=XXXXXXX 的 Cookie 信息,该 Cookie 的过期时间为浏览器会话结束

在这里插入图片描述

接下来客户端每次向同一个网站发送请求时,请求头都会带上该 Cookie信息(包含 session id ),然后,服务器通过读取请求头中的 Cookie 信息,获取名称为 JSESSIONID 的值,得到此次请求的 sessionId。这样,你的浏览器才具有了记忆能力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
尚硅谷大数据技术之高频面试题8.0.9.docx是一份大数据技术的面试题集合。这份文档包含了大数据领域的高频面试题,对于准备面试或者想要了解大数据技术的人来说是一份非常有价值的资料。 文档中的问题涵盖了大数据的各个方面,包括Hadoop、Spark、Hive、HBase、Flume、Kafka等大数据技术工具和框架。这些问题不仅考察了对这些技术的基本概念和原理的理解,还包括实际应用和常见问题的解决方法。 例如,文档中可能包含有关如何配置和使用Hadoop集群,如何在Spark中使用RDD和DataFrame进行数据处理,如何在Hive中执行SQL查询,如何在HBase中创建和管理表,如何使用Flume和Kafka进行数据采集和流处理等问题。 大数据技术的发展和应用已成为当今互联网和信息技术领域的热点,对于从业人员来说,具备相关技术的知识和能力将有助于在竞争激烈的市场中脱颖而出。而这份面试题文档则是一个很好的参考资料,可以帮助人们系统性地学习和掌握大数据技术,增加应对实际面试的成功几率。 总而言之,尚硅谷大数据技术之高频面试题8.0.9.docx是一份非常有价值的大数据技术面试题集合,将大大提升读者的面试准备能力和对大数据技术的了解。通过仔细阅读和思考这份文档中的问题,读者将能够更好地应对面试,并在大数据领域有更好的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼Linux运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值