网络编程高频面试题

  • TCP 和 UDP 有什么区别?并举例其各自的适用场景。

    • TCP (Transmission Control Protocol) : 面向连接可靠 、基于字节流的传输协议。协议头开销大,传输效率低于 UDP。适用于需要高可靠性的场景,如 HTTP(网页浏览)、文件传输(FTP)、邮件(SMTP)等。
    • UDP (User Datagram Protocol) : 无连接不可靠 、基于数据报的传输协议。不保证数据的可靠、有序交付,但协议简单,头部开销小,传输效率高。适用于对实时性要求高,可容忍少量丢包的场景,如视频直播、在线游戏、DNS 域名解析等。
  • 请描述 TCP 的"三次握手"建立连接的过程及原因。

    过程:

    1. 第一次握手 :客户端向服务器发送一个 SYN 报文,请求建立连接。此时客户端进入 SYN_SENT 状态。
    2. 第二次握手 :服务器收到 SYN 后,回复一个 SYN + ACK 报文,表示同意建立连接。此时服务器进入 SYN_RCVD 状态。
    3. 第三次握手 :客户端收到 SYN + ACK 后,再次回复一个 ACK 报文,确认连接建立。此时双方进入 ESTABLISHED 状态,连接正式建立。
      原因 :三次握手主要是为了防止已失效的连接请求报文段突然又传到服务端,因而产生错误。通过第三次握手的确认,可以确保客户端已经准备好,防止服务端在未收到客户端确认的情况下一直等待,从而浪费资源。
  • 请描述 TCP 的"四次挥手"断开连接的过程及原因。

    过程: (假设客户端主动发起关闭)

    1. 第一次挥手 :客户端发送一个 FIN 报文,表示自己数据已发送完毕,请求关闭连接。客户端进入 FIN_WAIT_1 状态。
    2. 第二次挥手 :服务器收到 FIN 后,回复一个 ACK 报文,表示知道对方要关闭了。服务器进入 CLOSE_WAIT 状态;客户端收到后进入 FIN_WAIT_2 状态。
    3. 第三次挥手 :服务器确认自身数据也发送完毕后,发送一个 FIN 报文给客户端,表示可以关闭连接了。服务器进入 LAST_ACK 状态。
    4. 第四次挥手 :客户端收到 FIN 后,回复一个 ACK 报文,然后进入 TIME_WAIT 状态;服务器收到 ACK 后立即关闭连接。客户端等待 2MSL 后也关闭连接。
      原因:TCP 是全双工协议,数据是双向传输的,因此关闭连接需要分别关闭两个方向的数据通道。在收到客户端的 FIN 后,服务端可能还有数据需要发送,不能立即关闭发送通道,因此需要额外的 ACK 和 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 握手流程简析:

    1. 客户端发起请求(Client Hello):客户端发送支持的加密算法等信息给服务端。
    2. 服务器响应(Server Hello) :服务器选择加密算法,并返回数字证书(包含公钥)。
    3. 客户端验证证书并生成密钥 :客户端验证证书合法性后,生成一个随机数(预主密钥),并用证书的公钥加密后发送给服务器。
    4. 服务器解密获得密钥:服务器用私钥解密得到预主密钥。
    5. 后续通信 :双方根据预主密钥生成相同的会话密钥,此后使用对称加密进行通信。
  • Cookie 和 Session 的作用和区别是什么?

    • Cookie :是服务器发送到用户浏览器并保存在本地的一小块数据,会在后续请求中携带并发送给服务器。常用于会话管理 (如登录状态)、个性化设置用户行为追踪。能缓解服务器压力,但数据大小(通常4KB)和数量有限,且存在安全风险。
    • Session :是服务器端存储的、用于保存特定用户会话信息的数据结构。通过在客户端存储一个 Session ID(通常放在 Cookie 中),服务器就能识别并关联起该用户的所有请求。Session 更安全,但会占用服务器内存资源。
相关推荐
码农学院2 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
REDcker9 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
ANSIOT11 小时前
安朔科技蓝牙无感开锁方案,靠近自动解锁
网络·科技·物联网
晏宁科技YaningAI11 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
数智化管理手记16 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发16 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
RD_daoyi16 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
国科安芯17 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信