面试题精讲:网络

1. TCP 三次握手 (Establishment)

核心考点: 为什么要三次?(确认双方的收发能力均正常,防止失效的连接请求突然到达服务端)。

  • 第一次 (SYN):客户端发送 SYN (seq=x)。服务端确认:客户端发送正常。
  • 第二次 (SYN/ACK):服务端返回 SYN+ACK (seq=y, ack=x+1)。客户端确认:服务端收发均正常。
  • 第三次 (ACK):客户端发送 ACK (ack=y+1)。服务端确认:客户端接收正常。

2. TCP 四次挥手 (Termination)

核心考点: 为什么最后要等待 2MSL?(确保最后的 ACK 能够到达,并让本次连接产生的所有报文从网络中消失)。

  1. FIN:客户端发起,表示不再发送数据。
  2. ACK:服务端确认,但可能还有剩余数据要传。
  3. FIN:服务端传完数据,申请关闭。
  4. ACK:客户端确认,进入 TIME_WAIT 状态。

3. HTTP 核心:GET vs POST

核心考点: 幂等性与安全性。

特性GETPOST
语义获取资源 (Read)提交/创建资源 (Create)
幂等性 (多次调用结果一致) (多次调用会创建多个资源)
参数位置URL Query StringRequest Body
数据长度受 URL 限制 (约 2KB)无限制

道满提醒: 不要说“POST 比 GET 安全”,在 HTTPS 普及的今天,两者在传输层都是加密的,安全性的差异主要在于参数是否暴露在地址栏。


4. 状态管理:Cookie, Session 与 JWT

核心考点: 无状态协议如何识别用户?

  • Cookie:存储在浏览器的小型文本。不安全,易被跨站请求伪造 (CSRF)。
  • Session:存储在服务器。依赖 session_id 匹配。扩展性差(多机部署需同步)。
  • JWT (JSON Web Token)现代主流。服务端不存状态,信息直接编码在 Token 中。适合微服务架构。

5. 负载均衡:Nginx vs Apache

核心考点: 并发模型对比。

  • Nginx异步非阻塞 (epoll)。像一个精明的管理员,一个线程处理上万请求。适合高并发、反向代理。
  • Apache多进程/线程。像一个老派工厂,一个请求占一个坑。胜在极其稳定,模块支持完美。

6. HTTP 状态码速查表

状态码含义场景解析
200OK完美运行
301/302Redirect永久/临时搬家
304Not Modified缓存生效(节省流量神器)
403Forbidden知道你是谁,但就不让你进
404Not Found资源人间蒸发
500Server Error你的 Python 代码抛异常了
502/504Gateway Error后端服务挂了或响应超时

7. Web 安全双子星:XSS 与 CSRF

XSS (跨站脚本)

  • 原理:在页面注入恶意 JS 脚本。
  • 防御:对用户输入进行转义(Escape)、设置 HttpOnly Cookie。

CSRF (跨站请求伪造)

  • 原理:利用用户的登录状态,伪造用户在其它站点的请求。
  • 防御:验证 CSRF Token、检查 Referer 头、使用 SameSite Cookie 属性。

8. 架构演进:RPC 与 RESTful

核心考点: 内部通信 vs 外部接口。

  • RESTful:基于 HTTP 谓词(GET/POST/PUT/DELETE),标准统一,适合前后端分离。
  • RPC (gRPC/Thrift):二进制传输,性能极高。适合微服务内部这种对延迟极度敏感的场景。

9. Python Web 开发必知:WSGI 与 ASGI

  • WSGI:旧时代的残党(Django 2.x/Flask)。一次请求,一个线程,无法处理 WebSocket 和长连接。
  • ASGI:新时代的领航者(FastAPI/Starlette)。原生支持 async/await,支持异步高并发。

10. *NIX 进程间通信 (IPC)

方式速度场景
管道 (Pipe)亲缘进程通信
共享内存最快大量数据共享(需处理锁)
Socket跨机器通信 (分布式基石)
信号量-进程同步与竞争控制