-
TCP 和 UDP 有什么区别?并举例其各自的适用场景。
- TCP (Transmission Control Protocol) : 面向连接 、可靠 、基于字节流的传输协议。协议头开销大,传输效率低于 UDP。适用于需要高可靠性的场景,如 HTTP(网页浏览)、文件传输(FTP)、邮件(SMTP)等。
- UDP (User Datagram Protocol) : 无连接 、不可靠 、基于数据报的传输协议。不保证数据的可靠、有序交付,但协议简单,头部开销小,传输效率高。适用于对实时性要求高,可容忍少量丢包的场景,如视频直播、在线游戏、DNS 域名解析等。
-
请描述 TCP 的"三次握手"建立连接的过程及原因。
过程:
- 第一次握手 :客户端向服务器发送一个 SYN 报文,请求建立连接。此时客户端进入
SYN_SENT状态。 - 第二次握手 :服务器收到 SYN 后,回复一个 SYN + ACK 报文,表示同意建立连接。此时服务器进入
SYN_RCVD状态。 - 第三次握手 :客户端收到 SYN + ACK 后,再次回复一个 ACK 报文,确认连接建立。此时双方进入
ESTABLISHED状态,连接正式建立。
原因 :三次握手主要是为了防止已失效的连接请求报文段突然又传到服务端,因而产生错误。通过第三次握手的确认,可以确保客户端已经准备好,防止服务端在未收到客户端确认的情况下一直等待,从而浪费资源。
- 第一次握手 :客户端向服务器发送一个 SYN 报文,请求建立连接。此时客户端进入
-
请描述 TCP 的"四次挥手"断开连接的过程及原因。
过程: (假设客户端主动发起关闭)
- 第一次挥手 :客户端发送一个 FIN 报文,表示自己数据已发送完毕,请求关闭连接。客户端进入
FIN_WAIT_1状态。 - 第二次挥手 :服务器收到 FIN 后,回复一个 ACK 报文,表示知道对方要关闭了。服务器进入
CLOSE_WAIT状态;客户端收到后进入FIN_WAIT_2状态。 - 第三次挥手 :服务器确认自身数据也发送完毕后,发送一个 FIN 报文给客户端,表示可以关闭连接了。服务器进入
LAST_ACK状态。 - 第四次挥手 :客户端收到 FIN 后,回复一个 ACK 报文,然后进入
TIME_WAIT状态;服务器收到 ACK 后立即关闭连接。客户端等待2MSL后也关闭连接。
原因:TCP 是全双工协议,数据是双向传输的,因此关闭连接需要分别关闭两个方向的数据通道。在收到客户端的 FIN 后,服务端可能还有数据需要发送,不能立即关闭发送通道,因此需要额外的 ACK 和 FIN 来确认各自的关闭动作。
- 第一次挥手 :客户端发送一个 FIN 报文,表示自己数据已发送完毕,请求关闭连接。客户端进入
🔌 Java I/O 模型 (BIO, NIO, AIO)
这部分主要考察你对 I/O 模型的理解,以及在高并发场景下的选型能力。
-
简述 BIO、NIO、AIO 的区别及各自的适用场景。
模型 I/O 模式 处理方式 核心特点 并发能力 适用场景 BIO (同步阻塞) 同步 阻塞 一个连接一个线程,线程在 I/O 操作时被阻塞等待 低 (线程开销大) 连接数固定且较少,但请求处理简单的场景,如单机版小工具 NIO (同步非阻塞) 同步 非阻塞 一个线程通过 Selector(选择器) 轮询多个 Channel(通道),只有 I/O 就绪时才处理 高 (少量线程管理大量连接) 高并发、连接多但每个连接短时间的场景,如聊天服务器、游戏服务器、RPC 框架 AIO (异步非阻塞) 异步 非阻塞 I/O 操作完成后由操作系统通知回调,期间线程可做其他事 最高 高并发且连接时间长的场景,但 Java 实现不够成熟,应用不如 NIO 广泛 -
GET 与 POST 请求有什么区别?
- 参数位置:GET 的参数放在 URL 中,POST 的参数放在请求体中。
- 安全性:GET 请求的参数直接暴露在 URL 中,不适合传输敏感信息;POST 相对更安全。
- 长度限制:GET 请求的长度受限于浏览器或服务器对 URL 长度的限制;POST 请求理论上没有长度限制。
- 幂等性:GET 是幂等的,即多次执行相同请求,结果应相同;POST 非幂等,通常用于提交数据。
- 缓存:GET 请求会被浏览器主动缓存,POST 默认不会。
-
-
HTTP 和 HTTPS 的主要区别是什么?简述 HTTPS 的通信流程。
HTTP 是明文传输,存在信息泄露和篡改的风险。HTTPS 是在 HTTP + SSL/TLS 协议 的基础上构建的,通过加密和身份认证来保证数据传输的安全性。
HTTPS 握手流程简析:- 客户端发起请求(Client Hello):客户端发送支持的加密算法等信息给服务端。
- 服务器响应(Server Hello) :服务器选择加密算法,并返回数字证书(包含公钥)。
- 客户端验证证书并生成密钥 :客户端验证证书合法性后,生成一个随机数(预主密钥),并用证书的公钥加密后发送给服务器。
- 服务器解密获得密钥:服务器用私钥解密得到预主密钥。
- 后续通信 :双方根据预主密钥生成相同的会话密钥,此后使用对称加密进行通信。
-
Cookie 和 Session 的作用和区别是什么?
- Cookie :是服务器发送到用户浏览器并保存在本地的一小块数据,会在后续请求中携带并发送给服务器。常用于会话管理 (如登录状态)、个性化设置 和用户行为追踪。能缓解服务器压力,但数据大小(通常4KB)和数量有限,且存在安全风险。
- Session :是服务器端存储的、用于保存特定用户会话信息的数据结构。通过在客户端存储一个 Session ID(通常放在 Cookie 中),服务器就能识别并关联起该用户的所有请求。Session 更安全,但会占用服务器内存资源。