一、网络作用(基础认知)
核心作用 :实现不同设备之间的数据传输与通信,支撑互联网应用(网页、APP、游戏、视频等)。
-
信息传递:客户端 ↔ 服务器
-
资源共享:文件、数据库、计算资源
-
分布式协作:微服务、云计算、分布式系统
二、协议和标准(面试核心板块)
1. URL(统一资源定位符)
-
格式:
协议://域名:端口/路径?查询参数#锚点 -
示例:
https://www.example.com:8080/api/user?id=123#profile -
作用:标识网络中资源的唯一位置
2. HTTP协议(超文本传输协议)
✅ 请求/响应格式
-
请求格式:
请求行(方法 URL 协议版本) 请求头(Host, Cookie, User-Agent等) 空行 请求体(POST数据) -
响应格式:
状态行(协议版本 状态码 状态描述) 响应头(Content-Type, Set-Cookie等) 空行 响应体(HTML/JSON等)
✅ 请求方法(GET / POST / PUT / DELETE / HEAD / OPTIONS)
-
GET:获取资源,幂等,参数在URL,长度受限,可被缓存
-
POST:提交数据,非幂等,参数在请求体,无长度限制,不可缓存
-
PUT:更新资源,幂等
-
DELETE:删除资源,幂等
-
HEAD:只获取响应头,用于检查资源是否存在或缓存有效性
-
OPTIONS:获取服务器支持的方法
✅ 响应状态码
-
2xx 成功:200 OK, 201 Created, 204 No Content
-
3xx 重定向:301 Moved Permanently, 302 Found, 304 Not Modified
-
4xx 客户端错误:400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed
-
5xx 服务端错误:500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
✅ 请求/响应头(常见字段)
-
Content-Type:请求/响应体的媒体类型(如 application/json) -
Set-Cookie:服务器设置客户端Cookie -
Cookie:客户端发送给服务器的Cookie -
User-Agent:浏览器/客户端标识 -
Accept:客户端可接受的响应类型 -
Cache-Control:缓存控制策略
✅ Cookie + Session
-
Cookie:存储在客户端,随每次请求发送,有大小限制(4KB),可设置过期时间
-
Session:存储在服务端(内存/Redis),通过Cookie中的SessionID关联客户端
-
区别:
-
存储位置:Cookie在客户端,Session在服务端
-
安全性:Session更安全(数据不暴露)
-
性能:Cookie轻量,Session消耗服务端资源
-
分布式:Session需共享(Redis/JWT)
-
3. UDP协议(用户数据报协议)
-
特点:无连接、不可靠、面向报文、速度快、开销小
-
应用场景:视频直播、语音通话、DNS查询、游戏实时交互
-
报头结构:源端口、目的端口、长度、校验和
-
传输方式:直接发送,不保证到达或顺序
4. TCP协议(传输控制协议)→ 面试最高频
✅ 报头结构(重点)
-
源端口、目的端口
-
序列号、确认序列号
-
标志位(URG/ACK/PSH/RST/SYN/FIN)
-
窗口大小(流量控制)
-
校验和、紧急指针等
✅ 可靠性机制
-
确认应答(ACK):接收方收到数据后发送ACK确认
-
超时重传:发送方未收到ACK则重发
-
序列号+确认号:保证数据有序、无丢失、无重复
-
面向连接:建立连接后才传输数据
-
面向字节流:数据按字节流传输,不保留边界
✅ 连接管理(三次握手 + 四次挥手)
-
三次握手(建立连接):
-
客户端 → 服务器:SYN=1, seq=x
-
服务器 → 客户端:SYN=1, ACK=1, seq=y, ack=x+1
-
客户端 → 服务器:ACK=1, seq=x+1, ack=y+1
-
目的:同步初始序列号,确保双方都能收发数据
-
**为什么不能两次?** 防止历史连接占用资源(旧SYN包被新连接误认)
-
-
-
四次挥手(断开连接):
-
客户端 → 服务器:FIN=1, seq=u
-
服务器 → 客户端:ACK=1, ack=u+1
-
服务器 → 客户端:FIN=1, ACK=1, seq=v, ack=u+1
-
客户端 → 服务器:ACK=1, ack=v+1
- TIME_WAIT状态:客户端等待2MSL(最大段生命周期),确保最后一个ACK被服务器收到,同时避免旧数据包干扰新连接
-
-
状态转移图(面试常考):
CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
(服务器端同理)
✅ 流量控制 & 拥塞控制
-
流量控制:通过滑动窗口机制,接收方告诉发送方自己还能接收多少数据(窗口大小)
-
拥塞控制:
-
慢启动:窗口指数增长
-
拥塞避免:窗口线性增长
-
快重传:收到3个重复ACK立即重传
-
快恢复:窗口减半后线性增长
-
-
MSS(Maximum Segment Size):TCP报文段最大数据长度,避免IP分片
5. IP协议(网际协议)
-
报头结构:版本、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间(TTL)、协议、首部校验和、源IP、目的IP
-
IP地址分类:
-
A类:1.0.0.0 ~ 126.255.255.255(默认掩码255.0.0.0)
-
B类:128.0.0.0 ~ 191.255.255.255(默认掩码255.255.0.0)
-
C类:192.0.0.0 ~ 223.255.255.255(默认掩码255.255.255.0)
-
D类:组播地址(224.0.0.0 ~ 239.255.255.255)
-
E类:保留地址(240.0.0.0 ~ 255.255.255.255)
-
-
IP路由:根据目的IP地址选择下一跳路径
-
IP分片:当数据大于MTU(最大传输单元)时,分片传输,接收端重组
6. ARP协议(地址解析协议)
-
作用:将IP地址解析为MAC地址
-
过程:
-
主机A广播ARP请求:"谁有192.168.1.1?请告诉我你的MAC"
-
主机B收到后单播ARP响应:"我是192.168.1.1,MAC是XX:XX:XX:XX:XX:XX"
-
主机A缓存ARP表,后续通信直接使用MAC地址
-
7. DNS协议(域名系统)
-
作用 :将域名(如 www.example.com)解析为IP地址
-
解析过程(递归+迭代):
-
本地DNS缓存 → 本地hosts文件
-
递归查询:本地DNS服务器 → 根DNS → 顶级域DNS(.com)→ 权威DNS服务器
-
返回IP地址给客户端
-
-
常用记录类型:A(IPv4)、AAAA(IPv6)、CNAME(别名)、MX(邮件交换)、TXT(文本验证)
8. 浏览器从输入URL到看到最终效果,发生了什么?(综合大题)
完整流程:
-
DNS解析:将域名解析为IP地址
-
TCP连接:建立TCP三次握手
-
HTTP请求:发送HTTP请求报文
-
服务器处理:Web服务器接收请求,调用后端服务(如Servlet)
-
服务器响应:生成HTTP响应报文(状态码、响应头、响应体)
-
浏览器渲染:解析HTML/CSS/JS,构建DOM树、CSSOM树、渲染树,布局绘制
-
TCP断开:四次挥手关闭连接
-
缓存机制:浏览器可能缓存资源(Cache-Control, ETag)
三、广域网 vs 局域网
| 维度 | 广域网(WAN) | 局域网(LAN) |
|---|---|---|
| 覆盖范围 | 城市、国家、全球 | 办公室、校园、家庭 |
| 传输速率 | 较低(早期56K,现在光纤可达Gbps) | 较高(百兆/千兆/万兆以太网) |
| 设备 | 路由器、调制解调器、广域网链路 | 交换机、集线器、无线AP |
| 协议 | PPP、HDLC、Frame Relay | Ethernet、Wi-Fi(802.11) |
| 成本 | 高 | 低 |
-
设备:
-
交换机:工作在数据链路层,根据MAC地址转发帧
-
路由器:工作在网络层,根据IP地址转发数据包
-
四、网络分层(OSI vs TCP/IP)
1. OSI七层模型(理论模型)
| 层级 | 功能 | 协议/设备示例 |
|---|---|---|
| 物理层 | 比特流传输 | 网线、光纤、集线器 |
| 数据链路层 | 帧传输、MAC地址、差错检测 | 交换机、PPP、HDLC |
| 网络层 | 路由、IP地址 | 路由器、IP、ICMP |
| 传输层 | 端到端通信、可靠性 | TCP、UDP |
| 会话层 | 建立、管理、终止会话 | RPC、NetBIOS |
| 表示层 | 数据格式转换、加密解密 | JPEG、SSL/TLS、ASCII |
| 应用层 | 用户接口 | HTTP、FTP、SMTP、DNS |
2. TCP/IP四层模型(实际应用)
| 层级 | 对应OSI层 | 协议/设备示例 |
|---|---|---|
| 应用层 | 7+6+5层 | HTTP、FTP、DNS、SMTP |
| 传输层 | 4层 | TCP、UDP |
| 网际层(网络层) | 3层 | IP、ICMP、ARP |
| 网络接口层 | 1+2层 | 以太网、Wi-Fi、交换机 |
五、Servlet应用(Java Web核心)
1. 什么是Servlet?
-
Java编写的服务器端程序,用于处理HTTP请求,生成动态响应
-
运行在Servlet容器(如Tomcat、Jetty)中
-
实现了
javax.servlet.Servlet接口
2. Servlet项目的创建
-
使用IDEA/Eclipse创建Dynamic Web Project
-
添加Servlet API依赖(如
javax.servlet-api) -
继承
HttpServlet类,重写doGet()/doPost()方法
3. Servlet项目的部署
-
Windows部署:
-
配置Tomcat环境变量
-
将项目打包为WAR,放入
webapps目录 -
启动Tomcat,访问
http://localhost:8080/项目名
-
-
Linux部署:
-
安装JDK、Tomcat
-
上传WAR包至
/opt/tomcat/webapps -
启动Tomcat:
bin/startup.sh -
访问:
http://服务器IP:8080/项目名
-
4. Servlet的生命周期(面试必考)
-
init():Servlet初始化时调用一次(构造器后)
-
service() :每次请求时调用,根据请求方法分发到
doGet()/doPost() -
destroy():Servlet销毁前调用(服务器关闭时)
- 注意:Servlet是单例多线程的,不要在Servlet中使用实例变量(线程安全问题)
5. 常见API
-
HttpServletRequest (req):
-
getParameter():获取请求参数 -
getHeader():获取请求头 -
getSession():获取Session -
getCookies():获取Cookie -
getMethod():获取请求方法(GET/POST)
-
-
HttpServletResponse (resp):
-
setContentType():设置响应类型(如text/html) -
setCharacterEncoding():设置字符编码 -
getWriter():获取输出流,写入响应体 -
sendRedirect():重定向到另一个URL -
addCookie():添加Cookie到响应
-
🎯 面试/笔试高频总结(必背)
| 模块 | 高频考点 |
|---|---|
| HTTP | GET/POST区别、状态码、Cookie/Session、请求/响应头 |
| TCP | 三次握手/四次挥手、可靠性机制、滑动窗口、拥塞控制、MSS、TIME_WAIT |
| IP/ARP/DNS | IP地址分类、ARP解析过程、DNS解析流程 |
| 网络分层 | OSI vs TCP/IP、各层功能、对应设备 |
| Servlet | 生命周期(init/service/destroy)、req/resp常用方法、多线程安全、部署流程 |
📌 学习建议
-
先理解原理,再背面试题:比如TCP三次握手,先理解"为什么要同步序列号",再背步骤。
-
画图记忆:三次握手、四次挥手、网络分层、浏览器请求流程,建议手绘流程图。
-
动手实践:用Java写一个简单的Servlet,部署到Tomcat,观察日志和网络抓包。
-
刷真题:针对字节、阿里、腾讯等大厂的真题,反复练习"从输入URL到页面显示发生了什么"这类综合题。
✅ 最终结论 :这张思维导图覆盖了Java后端面试中网络+Servlet的90%核心考点。掌握这些内容,足以应对绝大多数互联网公司的笔试和一面。