国内互联网大厂计算机网络高频八股题
我主要筛选了字节跳动、腾讯、美团、阿里云、蚂蚁、京东、拼多多等公司的后端面经。这里的“热点题目”不是根据某一篇题库判断,而是根据不同公司、不同年份的面经中反复出现的题目归纳。
从筛选结果来看,优先级最高的是:
TCP 三次握手与四次挥手、TCP 可靠性、TCP/UDP 区别、TIME_WAIT/CLOSE_WAIT、HTTP/HTTPS、TLS、DNS、输入 URL 后发生什么、HTTP 版本区别、HTTP 状态码。
近几年明显增加的题目是:
HTTP/2、HTTP/3、QUIC、WebSocket、CORS、TCP 粘包拆包、select/poll/epoll。
例如,字节面经直接出现了粘包、HTTPS 改造、DNS/TCP/HTTP 请求全过程;腾讯面经出现了 HTTP/1.1、HTTP/2、HTTP/3、QUIC、TLS 1.3、拥塞控制;近期多家公司汇总中仍然反复出现 URL 全过程、epoll、TCP 可靠性、TIME_WAIT、CLOSE_WAIT 和 SYN Flood。(牛客网)
面经属于候选人的个人记录,并不是公司官方题库,因此不能保证每场面试都会问;但用来判断重复出现的高频知识点非常合适。
一、网络模型与基础流程
1. OSI 七层模型和 TCP/IP 模型分别是什么?
面试回答:
OSI 七层模型从上到下是:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP 四层模型是:
- 应用层:HTTP、DNS、SMTP
- 传输层:TCP、UDP
- 网际层:IP、ICMP
- 网络接口层:以太网、Wi-Fi 等
面试中也经常使用“五层模型”,即把网络接口层拆成数据链路层和物理层。
数据发送时会不断封装:
应用数据 ↓TCP 段 / UDP 数据报 ↓IP 数据包 ↓以太网帧 ↓比特流接收端按照相反顺序解封装。TCP/IP 标准体系通常划分为应用层、传输层、网际层和链路层。(RFC 编辑器)
2. TCP 和 UDP 有什么区别?
面试回答:
TCP 是面向连接、可靠、有序、全双工的字节流协议;UDP 是无连接、尽力而为、保留报文边界的数据报协议。
主要区别如下:
| 对比项 | TCP | UDP |
|---|---|---|
| 是否连接 | 需要建立连接 | 不需要建立连接 |
| 可靠性 | 有确认、重传、排序 | 协议本身不保证 |
| 数据形式 | 字节流,没有消息边界 | 数据报,有消息边界 |
| 顺序 | 保证有序 | 不保证有序 |
| 流量控制 | 有 | 没有内置 |
| 拥塞控制 | 有 | 没有内置 |
| 开销 | 较大 | 较小 |
| 常见场景 | HTTP/1.1、HTTP/2、MySQL、Redis | 实时音视频、游戏、DNS、QUIC |
一个常见错误是说“UDP 一定不可靠”。更准确的说法是:
UDP 协议本身不提供可靠性,但应用层可以基于 UDP 实现可靠传输,例如 QUIC 就在 UDP 之上实现了确认、重传、流量控制和拥塞控制。
TCP 提供可靠、按序、面向连接的字节流服务;UDP 提供最小化的、非保证交付的数据报服务。(RFC 编辑器)
二、TCP 核心高频题
3. TCP 是怎么保证可靠传输的?
面试回答:
TCP 主要通过以下机制保证可靠性:
- 连接管理:三次握手建立连接。
- 序列号:每个字节都有序列号,用来排序和去重。
- 确认机制 ACK:接收方告诉发送方已经收到哪些数据。
- 校验和:发现数据在传输过程中是否损坏。
- 超时重传:长时间没有收到 ACK,就重新发送。
- 快速重传:收到多个重复 ACK 时,不等待超时就重传。
- SACK:告诉发送方哪些不连续的数据块已经收到。
- 滑动窗口:允许批量发送,提高吞吐量。
- 流量控制:避免发送方把接收方缓冲区打满。
- 拥塞控制:避免发送速度超过网络承载能力。
- 有序重组和重复数据丢弃。
需要注意:
TCP 的“可靠”是指数据尽量完整、有序、不重复地到达,不代表数据经过了加密,也不代表绝对不会断开连接。
TCP 标准定义了可靠、有序的字节流传输;RTO 根据 RTT 和波动动态计算,SACK 可以报告已经收到的不连续数据块。(RFC 编辑器)
4. TCP 三次握手的过程是什么?
假设客户端初始序列号是 x,服务端初始序列号是 y。
客户端 服务端
SYN=1, seq=x ------------------------------>
SYN=1, ACK=1 seq=y, ack=x+1 <------------------------------
ACK=1, seq=x+1, ack=y+1 ------------------------------>具体过程:
- 客户端发送
SYN,进入SYN_SENT。 - 服务端收到后发送
SYN + ACK,进入SYN_RECEIVED。 - 客户端发送
ACK,双方进入ESTABLISHED。
三次握手不仅是建立连接,还会同步双方的初始序列号。(RFC 编辑器)
5. 为什么 TCP 建立连接需要三次握手,不能两次?
核心原因是:
双方都需要确认自己的发送能力和接收能力正常,并同步双方的初始序列号。
两次握手之后:
- 客户端知道:自己能发、自己能收、服务端能收、服务端能发。
- 服务端只知道:自己收到了客户端的 SYN,并且自己发出了 SYN+ACK。
- 服务端不知道:客户端是否成功收到自己的 SYN+ACK。
第三次 ACK 能让服务端确认客户端确实收到了服务端的初始序列号。
三次握手还可以降低历史失效 SYN 导致错误建连的风险。假如网络中延迟很久的旧 SYN 到达服务端,服务端返回 SYN+ACK,但当前客户端不会为这条旧连接发送正确 ACK,因此连接无法建立。
至于为什么不需要四次,是因为第三次 ACK 已经完成了双方确认;如果 ACK 也必须被再次确认,就会产生无限确认问题。
6. 第三次握手的 ACK 丢失会怎么样?
客户端发送第三次 ACK 后,客户端通常已经认为连接建立成功,但服务端仍处于 SYN_RECEIVED。
服务端没有收到 ACK,会重新发送 SYN+ACK:
客户端收到重传的 SYN+ACK ↓再次发送 ACK ↓服务端进入 ESTABLISHED如果客户端直接发送了携带有效 ACK 的业务数据,服务端也可能根据该 ACK 完成连接建立。
如果服务端始终收不到有效 ACK,经过多次重传和超时后,就会清理这条半连接。TCP 三次握手及 SYN/ACK 重传行为由 TCP 状态机和重传机制共同完成。(RFC 编辑器)
7. TCP 为什么是四次挥手?
TCP 是全双工通信,两个方向必须分别关闭。
客户端 服务端
FIN ------------------------------>
ACK <------------------------------
服务端处理完剩余数据 调用 close()
FIN <------------------------------
ACK ------------------------------>过程是:
- 主动关闭方发送 FIN,表示自己不再发送数据。
- 被动关闭方返回 ACK,但它可能还有数据没有发送完。
- 被动关闭方处理完数据后,再发送 FIN。
- 主动关闭方返回 ACK。
为什么通常比握手多一次?
因为服务端收到 FIN 后,只能立即确认“我知道你不发了”,但服务端自己可能还没有发送完数据,所以 ACK 和 FIN 通常分开发送。
如果服务端收到 FIN 后也立即关闭,ACK 和 FIN 可以合并,因此抓包时有可能看到三次报文完成关闭,并不是所有连接都严格表现为四个独立报文。(RFC 编辑器)
10. TCP 流量控制和拥塞控制有什么区别?
流量控制
解决的是:
接收方处理不过来怎么办?
接收方通过 TCP 头中的接收窗口 rwnd 告诉发送方自己还能接收多少数据,防止接收缓冲区被打满。
拥塞控制
解决的是:
网络中间链路承载不过来怎么办?
发送方维护拥塞窗口 cwnd,根据丢包、ACK、RTT 等信息调整发送速度。
发送方实际能发送的数据量受二者共同限制:
实际发送窗口 = min(rwnd, cwnd)记忆:
rwnd:保护接收方cwnd:保护整个网络TCP 的拥塞窗口和接收窗口共同限制发送量。(RFC 编辑器)
14. HTTP 长连接、TCP Keepalive 和应用心跳有什么区别?
HTTP 长连接
表示多个 HTTP 请求复用同一条 TCP 或 QUIC 连接,减少重复建连开销。
TCP Keepalive
是操作系统 TCP 层的探测机制。连接长时间空闲后发送探测包,判断对端是否已经消失。
它通常:
- 需要显式开启。
- 默认探测时间可能很长。
- 只能判断 TCP 对端是否仍有响应。
- 不能证明业务线程一定正常。
应用层心跳
应用主动定期发送业务心跳,例如:
PINGPONG它可以更快发现:
- 网络中断。
- 服务进程卡死。
- 业务线程不响应。
- 网关或 NAT 清理空闲连接。
所以实际长连接服务经常同时使用 TCP Keepalive 和应用层心跳。Linux 的 TCP Keepalive 通过空闲时间、探测间隔和探测次数等参数控制。(man7.org)
15. 什么是 SYN Flood?
攻击者向服务端发送大量 SYN,但不完成第三次握手:
攻击者:大量 SYN服务端:创建半连接并返回 SYN+ACK攻击者:不返回 ACK大量伪造半连接会占满半连接队列,使正常用户无法建立连接。
常见防御:
- SYN Cookie。
- SYN Cache。
- 限制单 IP 建连速率。
- 防火墙、负载均衡器清洗流量。
- 合理增加半连接队列。
- 减少 SYN+ACK 重试时间和次数。
- 源地址过滤。
SYN Flood 的核心就是利用大量伪造半连接占满 backlog。(RFC 编辑器)
16. TCP 和 UDP 可以使用相同端口吗?
可以。
例如,一个程序可以同时监听:
TCP 53UDP 53因为操作系统区分连接时不仅看端口,还会看传输层协议:
协议 + 本地 IP + 本地端口 + 远端 IP + 远端端口TCP 和 UDP 有各自独立的端口空间。
但是在同一种协议下,两个 Socket 通常不能随意绑定到完全相同的本地 IP 和端口,除非使用特定的地址复用选项并满足操作系统规则。
这个问题曾直接出现在阿里云后端面经中。(牛客网)
三、DNS、ARP 与访问网站全过程
18. DNS 域名解析过程是什么?
假设访问:
www.example.com常见流程是:
-
浏览器检查自己的缓存。
-
操作系统检查 DNS 缓存和 hosts 文件。
-
客户端的 Stub Resolver 向递归 DNS 服务器查询。
-
递归 DNS 如果有缓存,直接返回。
-
没有缓存时,递归 DNS 依次查询:
- 根 DNS。
- 顶级域 DNS,例如
.com。 - 权威 DNS。
-
权威 DNS 返回 A、AAAA 或 CNAME 等记录。
-
递归 DNS 根据 TTL 缓存结果并返回客户端。
需要注意:
DNS 并没有固定的“必须经过五级缓存”。浏览器、操作系统、递归解析器、企业网关等是否缓存,取决于具体实现。
DNS 经典体系由递归解析器、根服务器、顶级域服务器、权威服务器和缓存共同完成。(RFC 编辑器)
19. ARP 是什么?访问不同网段的服务器时 ARP 谁?
ARP 用来根据 IPv4 地址查询同一链路上的 MAC 地址。
目标和自己在同一个网段
客户端 ARP 查询目标服务器的 MAC:
目标 IP → 目标 MAC目标和自己不在同一个网段
客户端不会 ARP 查询远程服务器的 MAC,而是查询默认网关的 MAC:
默认网关 IP → 默认网关 MAC然后把数据帧发送给网关。
跨路由器传输时:
- 目标 IP 通常仍然是最终服务器 IP,忽略 NAT 情况。
- 源 MAC 和目标 MAC 会在每一跳重新封装和变化。
记忆:
IP 地址负责端到端定位MAC 地址负责当前这一跳的链路传输ARP 标准描述了协议地址到以太网地址的映射过程。(RFC 编辑器)
20. 浏览器输入 URL 后发生了什么?
这是最重要的综合题之一。
以 HTTPS 网站为例,可以按下面的顺序回答。
第一步:解析 URL
浏览器解析:
协议、域名、端口、路径、查询参数并检查:
- 浏览器缓存。
- Service Worker。
- HSTS。
- 已有连接是否可以复用。
第二步:DNS 解析
将域名解析成服务器或 CDN 节点的 IP 地址。
第三步:确定下一跳
操作系统根据路由表判断数据发给:
- 同网段目标。
- 默认网关。
然后通过 ARP 获取下一跳 MAC 地址。
第四步:建立传输连接
根据协议不同:
HTTP/1.1、HTTP/2:TCP 三次握手 → TLS 握手
HTTP/3:QUIC + TLS 1.3 握手第五步:发送 HTTP 请求
请求中包含:
请求方法路径请求头Cookie/Token可选请求体第六步:服务端处理
请求可能经过:
CDN→ 负载均衡→ Nginx / 网关→ 后端服务→ Redis / MySQL / RPC第七步:返回 HTTP 响应
包含状态码、响应头和响应体。
第八步:浏览器渲染
大致过程:
解析 HTML 构建 DOM解析 CSS 构建 CSSOM生成渲染树布局绘制合成同时还会下载 JavaScript、CSS、图片等子资源。
回答时最好补充:
实际过程中,DNS、TCP、TLS 都可能因为缓存和连接复用而被跳过;使用 HTTP/3 时也不存在传统 TCP 三次握手。
URL 全过程、DNS、TCP、HTTP、HTTPS 是字节、京东、美团和近期后端面经中反复出现的组合题。(牛客网)
四、HTTP 与 HTTPS 高频题
21. HTTP 和 HTTPS 有什么区别?
HTTPS 本质上是:
HTTP + TLSHTTP 负责请求方法、状态码、请求头、响应体等语义;TLS 负责:
- 机密性:防止内容被窃听。
- 完整性:防止内容被篡改。
- 身份认证:通常验证服务端身份。
常见默认端口:
HTTP:80HTTPS:443但端口只是默认约定,并不是协议本质。
HTTPS 不能解决所有安全问题,例如:
- 用户访问的本身就是钓鱼网站。
- 服务端已经被入侵。
- 客户端主动忽略证书错误。
- Token 或密码在应用层被泄露。
TLS 1.3 的设计目标包括防窃听、防篡改和防消息伪造。(RFC 编辑器)
22. HTTPS 的 TLS 1.3 握手过程是什么?
可以使用下面这个简化版本回答。
客户端 服务端
ClientHello版本、加密套件、随机数、key_share、SNI、ALPN ------------------------------>
ServerHello 选择参数和 key_share <------------------------------
双方计算共享密钥,后续握手开始加密
EncryptedExtensions Certificate CertificateVerify Finished <------------------------------
Finished ------------------------------>
开始传输加密的 HTTP 数据主要步骤:
-
客户端发送
ClientHello。 -
服务端发送
ServerHello,双方根据临时密钥交换计算共享密钥。 -
服务端发送证书和证书签名证明。
-
客户端验证:
- 证书链。
- CA 签名。
- 域名。
- 有效期。
-
双方发送 Finished,确认握手没有被篡改。
-
使用对称 AEAD 算法加密业务数据。
需要纠正一个过时的八股答案:
现代 TLS 1.3 通常不是“服务端给 RSA 公钥,客户端生成对称密钥并用 RSA 加密”。TLS 1.3 通常通过临时的 ECDHE 等方式协商共享密钥,证书主要用于身份认证和签名证明,业务数据再使用高效的对称加密算法保护。
TLS 1.3 标准定义了 ClientHello、ServerHello、Certificate、CertificateVerify 和 Finished 等握手消息,并将大部分握手内容加密。(RFC 编辑器)
23. 如何把 HTTP 服务升级为 HTTPS?
面试可以回答下面几步:
- 申请可信 CA 签发的证书。
- 安全保存私钥和完整证书链。
- 在 Nginx、负载均衡器或应用服务器配置 TLS。
- 监听 HTTPS 端口。
- 将 HTTP 请求重定向到 HTTPS。
- 清理页面中的 HTTP 混合内容。
- 配置证书自动续期。
- 服务稳定后再考虑 HSTS。
- 禁用过时 TLS 版本和弱密码套件。
- 保证内部回源、网关和服务间调用的安全策略一致。
字节后台面经曾直接询问“如何把 HTTP 服务器升级成 HTTPS”。(牛客网)
24. HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3 有什么区别?
HTTP/1.0
- 通常一个连接处理一个请求。
- 大量请求需要频繁建立连接。
- 长连接主要依赖扩展方式实现。
HTTP/1.1
- 默认支持持久连接。
- 增加
Host。 - 支持分块传输。
- 支持管线化,但响应顺序会造成应用层队头阻塞。
- 浏览器通常通过建立多个 TCP 连接提升并发。
HTTP/2
- 二进制分帧。
- 一个 TCP 连接内建立多个 Stream。
- 多路复用。
- HPACK 头部压缩。
- 解决 HTTP/1.1 应用层的队头阻塞。
- 仍然存在 TCP 层队头阻塞。
HTTP/3
- 基于 QUIC。
- QUIC 基于 UDP 承载。
- 集成 TLS 1.3。
- 使用 QPACK。
- 不同流之间相对独立。
- 支持连接迁移。
- 降低建连延迟和跨流队头阻塞。
腾讯后台面试曾直接要求从 HTTP/1.1 一直讲到 HTTP/3,并继续追问 HPACK、QPACK、TLS 1.3 和 QUIC。(牛客网)
25. HTTP/2 是否彻底解决了队头阻塞?
没有。
HTTP/1.1 的队头阻塞
同一条管线中,前面的响应没有完成,后面的响应不能越过它返回,这是应用层队头阻塞。
HTTP/2 做了什么?
HTTP/2 将请求拆成帧,不同 Stream 的帧可以交错发送,因此解决了 HTTP 层面的请求响应顺序阻塞。
为什么还存在 TCP 队头阻塞?
HTTP/2 的多个流共用一条 TCP 连接。
如果某个 TCP 报文段丢失,由于 TCP 必须按序向上层交付,后面已经到达的数据也要等待这个缺失报文重传。因此一个 TCP 丢包可能暂时阻塞多个 HTTP/2 Stream。
HTTP/3 使用 QUIC 的独立流,使一个流的数据丢失通常不会阻塞其他无关流;但同一个流内部仍然需要保证有序交付。HTTP/2 标准明确说明,它解决了应用层队头阻塞,但没有解决 TCP 层队头阻塞。(RFC 编辑器)
27. GET 和 POST 有什么区别?
不要只回答“GET 参数在 URL、POST 参数在请求体”,这只是常见使用方式,不是最本质区别。
语义区别
GET:
获取目标资源的表示,语义上是只读的。
POST:
让目标资源处理所携带的内容,例如创建订单、提交表单、执行某项操作。
安全性和幂等性
GET 是安全方法,也是幂等方法。
安全方法表示客户端没有请求服务端改变资源状态;幂等表示相同请求执行一次和执行多次,预期效果相同。
POST 默认既不是安全方法,也不保证幂等。
参数位置
- GET 参数通常放在 URL 查询字符串。
- POST 数据通常放在请求体。
- HTTP 规范并没有用这一点来定义 GET 和 POST 的本质区别。
- GET 携带请求体没有通用明确语义,很多服务器和中间件也不会支持,因此一般不要这样设计。
安全性误区
POST 并不天然比 GET 安全。
在 HTTP 明文传输下,两者都可能被看到;在 HTTPS 下,请求路径、请求头和请求体通常都受到 TLS 保护,但域名、IP、流量特征等元数据未必全部隐藏。
RFC 9110 将 GET 等方法定义为安全方法,将安全方法以及 PUT、DELETE 定义为幂等方法。(RFC 编辑器)
28. 常见 HTTP 状态码有哪些?
2xx:请求成功
200 OK:请求成功。201 Created:资源创建成功。204 No Content:成功,但没有响应体。
3xx:重定向和缓存
301 Moved Permanently:永久重定向。302 Found:临时重定向。304 Not Modified:缓存内容没有变化。307 Temporary Redirect:临时重定向,并保持原请求方法和请求体。308 Permanent Redirect:永久重定向,并保持原请求方法和请求体。
301、302 在历史客户端中可能把 POST 改为 GET;307、308 明确要求保持请求方法和请求体。
4xx:客户端相关问题
400 Bad Request:请求格式或参数错误。401 Unauthorized:没有完成身份认证。403 Forbidden:服务端理解请求,但拒绝授权访问。404 Not Found:资源不存在。405 Method Not Allowed:请求方法不允许。409 Conflict:资源状态冲突。429 Too Many Requests:请求频率过高。
5xx:服务端或上游问题
500 Internal Server Error:服务端内部错误。502 Bad Gateway:网关从上游收到无效响应。503 Service Unavailable:服务暂时不可用或过载。504 Gateway Timeout:网关等待上游超时。
腾讯微信面经直接从 301、302 一路追问到三次握手、四次挥手和 TIME_WAIT。(牛客网)
29. HTTP 请求和响应报文由什么组成?
以 HTTP/1.1 为例。
请求报文
POST /orders HTTP/1.1Host: example.comContent-Type: application/jsonContent-Length: 18
{"productId":100}包含:
- 请求行。
- 请求头。
- 空行。
- 可选请求体。
响应报文
HTTP/1.1 200 OKContent-Type: application/jsonContent-Length: 15
{"status":"ok"}包含:
- 状态行。
- 响应头。
- 空行。
- 可选响应体。
HTTP/2 和 HTTP/3 使用二进制帧传输,不再按照 HTTP/1.1 的纯文本格式直接在网络上传输,但请求方法、状态码和字段等 HTTP 语义仍然保留。(RFC 编辑器)
30. HTTP 为什么是无状态协议?Cookie、Session、Token 有什么关系?
HTTP 无状态表示:
协议本身不要求服务端必须记住前一次请求的信息,每个请求都可以被独立理解。
Cookie
Cookie 是浏览器保存并自动携带小段状态数据的机制:
服务端:Set-Cookie浏览器:保存后续请求:CookieCookie 可以保存 Session ID,也可以保存其他信息。
Session
Session 通常表示服务端保存用户状态:
Session ID → 用户登录信息客户端通常只保存 Session ID,服务端根据 ID 查询 Session 数据。
Token
Token 是客户端携带的访问凭证。服务端可以通过查询数据库、Redis,或者验证签名来判断 Token 是否有效。
JWT 是一种 Token 格式,但需要注意:
- JWT 不等于绝对无状态。
- JWT 泄露后仍可能被冒用。
- JWT 仍要处理过期、续期、注销和撤销。
- 如果服务端维护黑名单,系统仍然保存了状态。
一句话区分:
Cookie:浏览器保存和发送数据的机制Session:服务端保存的会话状态Token:用于证明身份或权限的凭证HTTP Cookie 标准定义了通过 Set-Cookie 和 Cookie 实现状态管理的机制。(RFC 编辑器)
五、近几年明显升温的题目
32. WebSocket 和 HTTP 长连接有什么区别?
HTTP 长连接只是复用连接:
客户端请求 → 服务端响应客户端请求 → 服务端响应它仍然主要遵循请求—响应模型。
WebSocket 在握手阶段通常先发送 HTTP Upgrade 请求,升级成功后变成独立的双向帧协议:
客户端 ⇄ 服务端特点:
- 全双工。
- 服务端可以主动推送。
- 长时间保持连接。
- 使用帧区分消息。
- 支持 Ping/Pong。
- 适合聊天、实时通知、协同编辑、游戏等。
长轮询则是服务端暂时不返回 HTTP 响应,等有数据或超时后再响应,然后客户端重新发起下一次请求。它依旧是 HTTP 请求响应模式,不等同于 WebSocket。
腾讯和美团面经中都出现了 WebSocket 与 HTTP、HTTP 长连接的区别。(牛客网)
33. 什么是跨域?什么是 CORS 预检请求?
浏览器同源通常要求以下三项全部相同:
协议 + 主机 + 端口例如:
https://a.example.comhttps://b.example.com主机不同,因此是跨域。
CORS 是服务端通过响应头告诉浏览器,允许哪些来源读取响应:
Access-Control-Allow-Origin: https://a.example.comAccess-Control-Allow-Methods: GET, POSTAccess-Control-Allow-Headers: Authorization对于非 CORS Safelist 范围内的方法、请求头或内容类型,浏览器通常先发送 OPTIONS 预检:
OPTIONS 预检 ↓服务端允许 ↓发送真实请求需要注意:
- CORS 主要是浏览器安全机制,后端服务之间调用、curl 通常不受浏览器同源策略约束。
- CORS 不是身份认证机制。
- CORS 也不能代替 CSRF 防护。
- 对于不触发预检的跨域请求,请求可能已经到达服务端,只是浏览器不允许 JavaScript 读取响应。
Fetch 标准定义了预检请求、允许方法、允许请求头和预检缓存等行为。(Fetch Specification)
35. CDN 的基本原理是什么?
CDN 的核心是:
把内容缓存到离用户更近的边缘节点,减少访问延迟和源站压力。
常见流程:
用户访问域名 ↓DNS / CDN 调度系统选择合适边缘节点 ↓用户请求边缘节点 ↓缓存命中:直接返回缓存未命中:向源站回源 ↓边缘节点缓存并返回结果CDN 的收益:
- 降低网络延迟。
- 减少源站带宽。
- 降低源站 QPS。
- 缓解突发流量。
- 提高静态资源可用性。
- 可以承担 DDoS 清洗、TLS 终止等功能。
适合缓存:
- 图片。
- CSS。
- JavaScript。
- 视频分片。
- 安装包。
- 不经常变化的接口结果。
不适合直接公共缓存:
- 用户个人订单。
- 强实时库存。
- 带隐私数据的响应。
- 每个用户结果都不同的动态接口。
DNS、CDN、QUIC 和完整访问链路在字节及拼多多相关面经中都有出现;CDN 缓存行为仍要遵守具体的 HTTP 缓存和鉴权策略。(牛客网)
六、对应的大厂面经链接
下面优先列真实候选人记录,同时保留少量汇总帖用于判断重复频率。
| 类型 | 公司与面经 | 其中出现的网络问题 |
|---|---|---|
| 个人面经 | 字节跳动后台 2025 暑期实习面经 | select/poll/epoll、粘包、HTTPS 改造、DNS/TCP/HTTP 全流程、中间人攻击 |
| 个人面经 | 字节跳动后端三面面经 | DNS、CDN、ARP、默认路由、QUIC、poll/epoll |
| 深挖面经 | 腾讯 IEG 后台开发面试 | WebSocket、HTTP/1.1/2/3、HPACK、QPACK、QUIC、TLS 1.3、拥塞控制、epoll |
| 个人面经 | 腾讯微信实习后端面经 | 301/302、HTTP 状态码、三次握手、四次挥手、TIME_WAIT |
| 个人面经 | 蚂蚁数字支付一面 | 五层网络模型、TCP/UDP、HTTP/HTTPS、UDP 应用 |
| 个人面经 | 美团秋招一面 | WebSocket 使用场景、HTTP 长连接和 WebSocket |
| 个人面经 | 阿里云实习面经 | TCP 和 UDP 能否使用同一个端口 |
| 汇总帖 | 京东 Java 后端 2025 面经合集 | 输入 URL 全过程、DNS 缓存、301/302、状态码 |
| 汇总帖 | 拼多多面试真题 | QUIC 可靠传输、TCP 握手、CORS、访问页面全过程、CDN |
| 近期汇总 | 27 届后端高频面试题汇总 | URL 全过程、epoll、TCP 可靠性、少一次握手、TIME_WAIT、CLOSE_WAIT、SYN Flood |
| 复习路线 | 阿里云后端校招经验与复习方向 | HTTP 请求响应、HTTP 版本、HTTPS、TCP/UDP、握手挥手、丢包重传 |
七、建议背诵顺序
第一轮先把下面这些背到能够完整回答:
TCP/UDP→ TCP 可靠性→ 三次握手→ 四次挥手→ TIME_WAIT/CLOSE_WAIT→ 流量控制/拥塞控制→ HTTP/HTTPS→ TLS→ DNS→ 输入 URL 全过程第二轮学习:
HTTP 状态码→ GET/POST→ HTTP 缓存→ HTTP/1.1、2、3→ HTTP/2 队头阻塞→ QUIC→ WebSocket第三轮补充:
TCP 粘包拆包→ select/poll/epoll→ SYN Flood→ ARP→ CORS→ CDN→ 中间人攻击面试回答统一使用这个结构最稳:
先说定义→ 再讲工作流程→ 再解释为什么这样设计→ 最后补充异常情况和常见误区