JAVA面试题大全(七)

发布于:2024-05-23 ⋅ 阅读:(29) ⋅ 点赞:(0)

1、http 响应码 301 和 302 代表的是什么?有什么区别?

当客户端发送一个请求到服务器时,服务器会根据请求的 URL 进行处理,并返回一个响应码。301 和 302 都是常见的重定向状态码,它们的含义和区别如下:

  1. 301 Moved Permanently(永久性重定向):表示请求的资源已经被永久移动到新的位置。当服务器返回 301 响应码时,它还会在响应头中包含一个Location字段,指定新的资源位置。客户端在接收到 301 响应后,应该将所有对原始 URL 的请求重定向到新的位置。301 重定向通常用于网站的改版、域名变更或资源的永久迁移等情况。

  2. 302 Found(临时性重定向):表示请求的资源暂时被移动到了新的位置。与 301 不同,302 重定向是临时性的,客户端在接收到 302 响应后,应该将对原始 URL 的请求重定向到新的位置,但客户端下次再请求原始 URL 时,服务器可能会返回 200 响应码,即表示资源已经恢复到原始位置。302 重定向通常用于临时维护、服务器负载均衡或临时 URL 变更等情况。

总的来说,301 和 302 重定向的主要区别在于它们的永久性和临时性。301 重定向表示资源已经永久移动,客户端应该将所有对原始 URL 的请求重定向到新的位置;而 302 重定向表示资源只是暂时移动,客户端在下次请求原始 URL 时,服务器可能会返回不同的响应码。

2、forward 和 redirect 的区别?

forwardredirect是 Web 应用程序中常用的两种页面跳转方式,它们的主要区别在于:

  1. 请求转发(Forward)

    • 发生在服务器内部,由服务器端直接将请求转发到另一个页面。
    • 浏览器地址栏不会发生变化,用户在浏览器中看到的仍然是原始的 URL。
    • 由于请求是在服务器内部处理的,因此效率较高。
    • 可以在一个 Web 应用程序内部的多个页面之间进行跳转。
  2. 重定向(Redirect)

    • 发生在客户端,服务器通过发送一个特殊的响应头,告诉浏览器重新请求另一个页面。
    • 浏览器地址栏会发生变化,显示新的 URL。
    • 由于需要发送一个新的 HTTP 请求,因此效率相对较低。
    • 通常用于从一个网站跳转到另一个网站,或者在不同的应用程序之间进行跳转。

3、简述 tcp 和 udp的区别? 

  • TCP是面向连接的,TCP提供可靠的服务,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达。
    UDP是无连接的,没有可靠性,但是速度快,操作简单,要求系统资源较少,可以实现广播发送。
  • TCP是面向字节流的,UDP是面向报文的;TCP是全双工的可靠信道,UDP是不可靠信道。

 4、tcp 为什么要三次握手,两次不行吗?为什么?

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在 TCP 连接建立过程中,三次握手是一个重要的步骤,它的主要目的是确保连接的可靠性和双方都能准备好发送和接收数据。

以下是 TCP 三次握手的过程:

  1. 第一次握手:客户端向服务器发送一个 SYN(同步)包,请求建立连接。这个包中包含了客户端的初始序列号(ISN)。
  2. 第二次握手:服务器收到 SYN 包后,向客户端发送一个 SYN+ACK(同步确认)包。这个包中包含了服务器的初始序列号(ISN)和确认号(ACK),确认号的值是客户端的 ISN+1。
  3. 第三次握手:客户端收到 SYN+ACK 包后,向服务器发送一个 ACK(确认)包。这个包中包含了确认号,确认号的值是服务器的 ISN+1。

通过三次握手,双方可以确定以下信息:

  1. 双方都能知道对方的初始序列号,从而可以为后续的通信建立可靠的序号系统。
  2. 双方都能确认对方已经收到了自己的初始序列号,从而可以避免重复发送数据。
  3. 双方都能确认对方已经准备好发送和接收数据。

如果只进行两次握手,可能会出现以下问题:

  1. 无法建立全双工通信:如果只有两次握手,那么客户端只能知道服务器已经准备好接收数据,但服务器无法知道客户端是否已经准备好发送数据。这可能会导致服务器在接收到客户端的数据后,无法及时发送确认包,从而影响通信效率。
  2. 无法避免历史连接的干扰:如果只有两次握手,那么客户端可能会在发送 SYN 包后,因为网络延迟等原因,导致服务器在一段时间内没有收到 SYN 包。此时,客户端可能会重新发送 SYN 包,从而建立一个新的连接。但是,服务器可能仍然在等待第一个 SYN 包的确认包,这就会导致服务器无法处理新的连接请求,从而影响通信效率。

因此,为了确保连接的可靠性和双方都能准备好发送和接收数据,TCP 协议采用了三次握手的方式。

5、说一下 tcp 粘包是怎么产生的? 

TCP 粘包的产生主要有以下原因:

  1. 应用程序写入数据的字节大小大于套接字发送缓冲区的大小:当应用程序写入的数据字节大小大于套接字发送缓冲区的大小时,会导致数据被分成多个数据包发送。
  2. 进行 MSS 大小的 TCP 分段:当数据包的大小超过 MSS 时,TCP 会对数据包进行分段,将其分成多个小数据包发送。
  3. 以太网帧的payload 大于 MTU(Maximum Transmission Unit,最大传输单元):当以太网帧的 payload 大于 MTU 时,会导致数据包被分成多个小数据包发送。

TCP 粘包可能会导致数据丢失、数据错乱等问题,因此在进行 TCP 编程时,需要对 TCP 粘包进行处理,以确保数据的正确性和完整性。

6、OSI 的七层模型都有哪些?

OSI 七层模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  1. 物理层:物理层是 OSI 模型的最低层,它负责在物理媒介上传输二进制数据位(0 和 1)。物理层定义了硬件接口和传输介质的特性,例如电缆类型、连接器类型和信号电平。
  2. 数据链路层:数据链路层负责在物理层上建立、维护和释放数据链路连接。它将数据分成帧,并在帧头添加控制信息,例如源地址和目标地址,以确保数据的可靠传输。
  3. 网络层:网络层负责在不同的网络之间进行路由选择和数据包转发。它使用 IP 地址来标识网络中的设备,并根据目标 IP 地址选择最佳路径将数据包发送到目的地。
  4. 传输层:传输层提供端到端的可靠数据传输服务。它负责将数据分割成适当大小的段,并在段头添加端口号等信息,以确保数据能够正确地发送到目标应用程序。
  5. 会话层:会话层建立、维护和管理应用程序之间的会话连接。它负责在通信双方之间建立、维护和终止会话,并提供会话控制和同步功能。
  6. 表示层:表示层负责数据的格式转换和加密/解密。它将应用程序的数据转换为网络可以传输的格式,并在传输过程中对数据进行加密和解密。
  7. 应用层:应用层是 OSI 模型的最高层,它为用户提供各种网络应用服务,例如文件传输、电子邮件、Web 浏览等。

OSI 七层模型是一个理想化的模型,实际的网络通信可能并不完全遵循这个模型。在实际应用中,通常会使用 TCP/IP 协议栈,它是 OSI 模型的一个子集,包含了网络层、传输层、应用层等主要协议。

7、get 和 post 请求有哪些区别?

  • get是从服务器上获取数据;post是向服务器传送数据
  • get请求通过URL直接请求数据,数据信息可以在URL中看到;post请求是放在请求头中的,用户看不到;
  • get传送的数据量小,有限制,不能大于2kb,post传送的数据可以没有限制
  • get安全性比较低,post相对较安全

8、如何实现跨域? 

  • 使用JSONP,利用了script不受同源策略的限制;
  • 代理跨域请求;
  • HTML5 postMessage方法;
  • 修改document.domain跨子域;
  • 基于HTML5 websocket协议

9、说一下 JSONP 实现原理? 

以下是 JSONP 的实现原理:

  1. 创建回调函数:在客户端(浏览器)创建一个回调函数,该函数将在接收到服务器返回的数据时被调用。
  2. 发送请求:使用<script>标签向服务器发送一个请求,请求中包含要调用的回调函数的名称。
  3. 服务器处理请求:服务器接收到请求后,根据请求中的回调函数名称,将数据作为参数传递给该函数,并将结果以 JavaScript 代码的形式返回。
  4. 执行回调函数:客户端接收到服务器返回的 JavaScript 代码后,会将其作为脚本执行。由于回调函数已经在客户端定义,所以执行代码时会调用该回调函数,并将服务器返回的数据作为参数传递给它。

通过以上步骤,JSONP 实现了跨域数据访问。需要注意的是,JSONP 只能用于 GET 请求,并且由于它使用<script>标签发送请求,所以存在安全风险,例如 XSS(跨站脚本攻击)。

10、单工、半双工、全双工

  1. 单工(Simplex):数据只能在一个方向上传输,即只能从发送方流向接收方。例如,广播电台发送广播信号,听众只能接收信号,而不能向电台发送信息。
  2. 半双工(Half Duplex):数据可以在两个方向上传输,但在同一时刻只能在一个方向上进行。例如,对讲机在同一时刻只能有一方讲话,另一方只能接听。
  3. 全双工(Full Duplex):数据可以在两个方向上同时传输,发送方和接收方可以同时进行发送和接收操作。例如,电话通话中双方可以同时说话和倾听。

网站公告

今日签到

点亮在社区的每一天
去签到