《JAVA面经实录》- Web后端面试题

《JAVA面经实录》- HTTP面试题

1.HTTP协议是什么?

HTTP是一个基于TCP/IP通信协议来传递数据,包括html文件、图像、结果等,即是一个客户端和服务器端请求和应答的标准。基本上用到的就是GET和POST,充其量再遇到个option请求。

2.http和https有什么区别?

对比维度

HTTP

HTTPS

全称

HyperText Transfer Protocol

HTTP + SSL/TLS 加密传输

安全性

明文传输,易被窃听、篡改、劫持

加密传输,防窃听、防篡改、防冒充

端口号

80

443

连接方式

直接建立 TCP 连接

TCP + TLS 握手后再通信

缓存

普通缓存

缓存机制一致,但需证书有效

SEO / 搜索引擎

不优先

谷歌、百度优先收录

性能

开销小,速度快

多一次 TLS 握手,略慢但可优化

证书

不需要

需要 CA 颁发的数字证书

应用场景

内部系统、纯静态页面

官网、登录、支付、小程序、APP

(1)https 需要申请、配置数字证书,用于身份验证,http一般没有;

(2)http是超文本传输协议,信息是明文传输,不安全。https则是具有安全性的ssl加密传输协,更安全;

(3)http默认80端口,https默认443端口。

(4)HTTPS 在 TCP 之上多了一层 TLS/SSL 加密

(5)HTTPS 性能略低一点,但现在优化后几乎无感。

HTTPS 解决了哪三个问题?

  • 保密性:内容加密,中间人看不到明文
  • 完整性:数据被篡改会立即被发现
  • 身份认证:证书验证服务器身份,防止钓鱼网站

3.http协议有什么特点?

(1)http无连接:限制每次连接只处理一个请求,服务端完成客户端的请求后,即断开连接。(传输速度快,减少不必要的连接,但也意味着每一次访问都要建立一次连接,效率降低);

(2)http无状态:对于事务处理没有记忆能力。每一次请求都是独立的,不记录客户端任何行为;

(3)客户端/服务端模型:客户端支持web浏览器或其他任何客户端;

(4)简单快速\灵活:可以传输任何类型的数据。

4.什么是http协议无状态协议?怎么解决http协议无状态协议?

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。

状态协议解决办法:1、cookie 2、通过session会话保存。

5.说一下http协议中302状态?

http协议中,返回状态码302表示重定向。这种情况下,服务器返回的头部信息中会包含一个Location字段,内容是重定向到的url。

6.http协议什么组成?

请求报文包含三部分:请求行:包含请求方法、URI、HTTP版本信息;请求首部字段;请求内容实体。

响应报文包含三部分:状态行:包含HTTP版本、状态码、状态码的原因短语;响应首部字段;响应内容实体。

7.http协议中有那些请求方式?

GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。

POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。

PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。

HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。

DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

OPTIONS:查询相应URI支持的HTTP方法。

8.TCP和UDP的区别?

对比维度

TCP

UDP

1. 连接性

面向连接(先建连再传输)

:三次握手建立、四次挥手释放

无连接,发完即走:直接发报文

2. 可靠性

可靠传输:序列号 + ACK + 重传 → 可靠、有序、不丢不重

不可靠,Best-Effort:可能丢、乱序、重复,不保证送达

3. 拥塞控制

有(慢启动、拥塞避免等)

4. 流量控制

有(滑动窗口)

5. 传输效率

低(握手 + 确认 + 重传)

高(开销小、速度快)

6. 数据顺序

保证有序

不保证顺序

7. 头部开销

大(最少 20 字节)

小(固定 8 字节)

8. 双工模式

全双工(可同时收发)

支持一对一 / 一对多广播

9. 应用场景

文件、网页、接口、支付

直播、游戏、语音、视频、DNS

10. 典型协议

HTTP/HTTPS、FTP、SMTP、SSH

DNS、DHCP、RTP (音视频)、QUIC

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。

9.http的长连接和短连接区别?

HTTP协议有HTTP/1.0版本和HTTP/1.1版本。HTTP1.1默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。

在 HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。从HTTP/1.1起,默认使用的是长连接,用以保持连接特性。

10.什么是 CSRF 攻击,如何避免?

CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

11.什么是 XSS 攻击,如何避免?

XSS攻击又称CSS,全称Cross Site Script  (跨站脚本攻击),其原理是攻击者向有XSS漏洞的网站中输入恶意的 HTML 代码,当用户浏览该网站时,这段 HTML 代码会自动执行,从而达到攻击的目的。XSS 攻击类似于 SQL 注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。 XSS是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式。

XSS防范的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码。

12.说一说OSI网络模型。

网络的七层架构从下到上主要包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

①物理层:物理层主要定义物理设备标准,主要作用是传输比特流,具体做法是在发送端将1、0转化为电流强弱来进行传输,在到达目的地之后再将电流强弱转化为1、0,也就是我们常说的模数转换与数模转换,这一层的数据叫做比特。

②数据链路层:数据链路层主要用于对数据包中的MAC地址进行解析和封装。这一层的数据叫做帧,在这一层工作的设备是网卡、网桥、交换机。

③网络层:网络层主要用于对数据包中的IP地址进行封装和解析,这一层的数据叫做数据包。在这一层工作的设备有路由器、交换机、防火墙等。

④传输层:传输层定义了传输数据的协议和端口号,主要用于数据的分段、传输和重组。在这一层工作的协议有TCP和UDP等。TCP是传输控制协议,传输效率低,可靠性强,用于传输对可靠性要求高,数据量大的数据,比如支付宝转账业务;UDP是用户数据报协议,用于传输可靠性要求不高,数据量小的数据,例如抖音等视频服务。

⑤会话层:会话层在传输层的基础上建立连接和管理会话,具体包括登陆验证、断点续传、数据粘包与分包等。在设备之间需要互相识别的可以是IP,也可以是MAC或者主机名。

⑥表示层:表示层主要对接收的数据进行解释、加密、解密、压缩、解压缩等,即把计算机能够识别的内容转换成人能够识别的内容(图片、声音、文字等)。

⑦应用层:基于网络构建具体应用,例如FTP上传文件下载服务、Telnet服务、HTTP服务、DNS服务、SNMP邮件服务等。

13.说一说TCP/IP的网络模型。

TCP/IP不是指TCP和IP这两个协议的合称,而是指因特网的整个TCP/IP协议簇。从协议分层模型方面来讲,TCP/IP由4个层次组成:网络接口层、网络层、传输层和应用层。

①网络接口层:定义了主机间网络连通的协议,具体包括Echernet、FDDI、ATM等通信协议。

②网络层:主要用于数据的传输、路由及地址的解析,以保障主机可以把数据发送给任何网络上的目标。数据经过网络传输,发送的顺序和到达的顺序可能发生变化。在网络层使用IP协议和ARP地址解析协议。

③传输层:使源端和目的端的机器上的对等实体可以基于会话相互通信。在这一层定义了两个端到端的协议TCP和UDP。TCP是面向连接的协议,提供可靠的报文传输和对上层应用的连接服务,除了基本的数据传输,它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。UDP是面向无连接的不可靠传输的协议,主要用于不需要TCP的排序和流量控制等功能的应用程序。

④应用层:负责具体应用层协议的定义,包括Telnet虚拟终端协议、FTP文件传输协议、SMTP简单电子邮件传输协议、DNS域名解析服务、NNTP网上新闻传输协议和HTTP超文本传输协议等。

14.简述TCP的三次握手过程,为什么不是两次或四次?

①服务端创建传输控制块TCB,进入LISTEN状态,准备接收客户端的请求。客户端同样先创建TCB,然后当准备建立连接时向服务端发送连接请求报文(SYN=1,seq=x),然后进入SYN-SENT状态。

②服务端收到后向客户端发送确认报文(SYN=1,ACK=1,ack=x+1,seq=y),进入SYN-RCVD状态。

③客户端接收到确认后,再向服务端发送一个确认报文(ACK=1,ack=y+1,seq=x+1),然后进入ESTABLISHED状态,服务端接收后也进入ESTABLISHED状态。

④不是两次的原因是为了避免无效的连接请求突然发送到服务端,而此时客户端已关闭,服务端误以为客户端将要发送数据会白白浪费资源。

⑤不是四次的原因是将服务端的SYN和ACK报文拆分成两次发送和一次的效果是相同的,没有意义。

15.简述TCP的四次握手过程,为什么不是三次?

①当客户端准备关闭连接时,向服务端发送连接终止报文(FIN=1,seq=u),进入FIN-WAIT-1状态。

②服务端接收后向客户端发送确认报文(ACK=1,ack=u+1,seq=v),进入CLOSE-WAIT状态,客户端收到后进入FIN-WAIT-2状态,此时TCP连接处于半关闭状态。

③当服务端也发送完全部数据准备断开连接时,向客户发送连接终止报文(FIN=1,ACK=1,ack=u+1,seq=w),进入LAST-ACK状态。

④客户端接收到该报文后,发送一个确认报文(ACK=w+1,ack=1,seq=u+1),进入TIME-WAIT状态,然后等待2MSL时间后关闭。服务端收到后关闭,时间将略早于客户端。

⑤不是三次的原因第一是为了保证客户端发送的最后一个报文可以到达服务端,如果该报文丢失那么服务端会超时重传之前的FIN+ACK报文,客户端可以在2MSL内收到,第二是防止已失效的报文发送到客户端,在2MSL后客户端在本连接时间内发出的所有报文都将从网络中消失。

16.从「敲下一个 URL」到「页面出现在屏幕」整条链路全景

(1). URL解析与浏览器预处理 (地址栏解析)

• 核心:将用户输入的URL字符串,拆解为可识别的网络请求目标;

• 具体操作:解析协议(http/https)、域名、路径、查询参数、默认端口(http:80、https:443);

• 额外检查:HSTS协议校验(强制使用HTTPS,避免HTTP降级);

• 缓存优先:检查本地缓存(Memory Cache内存缓存 / Disk Cache磁盘缓存),命中且未过期则直接渲染,跳过后续网络请求。

(2). DNS域名解析(域名→IP)(DNS 解析)

• 解析方式:采用「递归查询 + 迭代查询」结合,逐级查找,提升效率;

• 查询顺序(从近到远,优先缓存):

浏览器缓存 → 系统缓存(本地hosts文件) → 路由器缓存 → 运营商DNS缓存 → 根域名服务器 → 顶级域服务器(.com/.cn等) → 权威DNS服务器;

• 结果处理:解析成功后,IP地址会被各级缓存记录(由TTL控制缓存有效期),后续同类请求可直接复用。

(3). TCP连接建立(可靠传输通道)(建立连接)

• 核心:通过TCP三次握手,确认双方收发能力正常,建立稳定连接;

• 三次握手流程:

1. 客户端 → 服务器:发送SYN包,告知“我想建立连接,序列号为X”;

2. 服务器 → 客户端:返回SYN+ACK包,告知“收到请求,同意连接,我的序列号为Y”;

3. 客户端 → 服务器:发送ACK包,告知“收到确认,连接正式建立”。

• HTTPS额外步骤(TLS握手):

1. 服务器下发数字证书(含公钥、域名、有效期、CA签名);

2. 客户端验证证书合法性(是否过期、域名是否匹配、CA是否可信);

3. 双方协商加密套件,生成会话密钥;

4. 后续所有网络数据,均通过会话密钥加密传输,防止窃听、篡改。

(4). 发送HTTP请求(应用层通信)(发送请求)

• 请求结构:由请求行、请求头、请求体三部分组成(GET请求无请求体);

• 核心内容:

- 请求行:请求方法(GET/POST等)、请求路径、HTTP协议版本;

- 请求头:携带元数据(Host目标主机、User-Agent客户端信息、Cookie身份凭证、Accept可接受数据类型等);

- 请求体:POST请求时,提交表单、JSON等数据(GET请求通过查询参数传递数据)。

(5). 服务器处理请求 (服务器响应)

• 处理流程(从外到内):

1. 反向代理(Nginx/Apache):接收请求,进行负载均衡、限流,静态资源(图片、CSS)直接返回;

2. 应用服务器(Tomcat/Node.js/Python等):接收动态请求,执行业务逻辑;

3. 业务处理:路由匹配、参数校验、数据库CRUD(增删改查)、调用第三方服务;

4. 生成响应:拼接HTML字符串、JSON数据或二进制文件,封装为HTTP响应报文。

(6). 浏览器解析与渲染(核心环节)(浏览器渲染)

• 核心逻辑:将服务器返回的字节流,逐步转换为屏幕可见的像素,流水线并行处理;

• 具体步骤:

1. 解析HTML → 生成DOM树(Document Object Model):字节流解码→字符串分词→语法分析,构建页面节点结构;(注意:遇到<script>标签会暂停解析,等待JS下载执行,除非添加async/defer);

2. 解析CSS → 生成CSSOM树(CSS Object Model):解析内联、外链、默认样式,生成所有样式的计算规则(CSSOM为只读);

3. 合成渲染树(Render Tree):将DOM树与CSSOM树合并,只保留可见节点(过滤display:none、<head>等不可见元素);

4. 布局(Layout/Reflow):计算每个渲染节点的几何信息(坐标、宽高、边距、位置),首次渲染必触发,修改几何属性会再次触发;

5. 分层(Layer):将复杂页面(3D变换、视频、Canvas)拆分为独立图层,避免全局重绘,提升性能;

6. 绘制(Paint/Repaint):将每个图层拆分为绘制指令(填充颜色、描边、文字、图片),由合成线程调度,GPU光栅化生成位图;

7. 合成(Composite):将所有图层位图按z-index顺序合成,输出到屏幕缓冲区,最终显示在屏幕上。

(7). 后续流程(页面交互与连接管理)(关闭连接)

• 子资源加载:解析HTML时,发现<img>、<link>、<script>等标签,异步发起新请求下载资源;

• JS执行:执行下载完成的JS,可能修改DOM/CSS,触发重排→重绘→合成;同时绑定点击、滚动等交互事件;

• 加载完成事件:DOMContentLoaded(DOM树就绪,无需等待图片等资源)、load(所有资源加载完毕);

• TCP连接关闭:HTTP/1.1默认开启keep-alive复用连接,空闲时通过TCP四次挥手关闭连接。

17.HTTP 常见状态码有哪些?

一、按分类速记

分类

含义

1xx

信息性,临时响应,很少用

2xx

成功响应,请求正常处理

3xx

重定向,需要进一步操作

4xx

客户端错误,前端 / 用户问题

5xx

服务端错误,后端 / 服务器问题

二、状态码完整表格

状态码

英文名称

中文含义 & 面试场景

100

Continue

继续,客户端可继续发送数据(多用于大文件上传)

101

Switching Protocols

切换协议,如 HTTP 升级为 WebSocket

200

OK

请求成功,正常返回数据(最常用)

201

Created

创建资源成功(POST 新增接口)

204

No Content

请求成功,但无响应体(删除 / 更新接口常用)

301

Moved Permanently

永久重定向,地址已废弃,会被缓存

302

Found

临时重定向,本次跳转,不缓存

304

Not Modified

资源未修改,使用本地缓存(缓存优化核心)

400

Bad Request

请求参数错误、格式非法

401

Unauthorized

未登录 / 认证失败,需要身份验证

403

Forbidden

已登录但权限不足,拒绝访问

404

Not Found

资源 / 接口不存在

405

Method Not Allowed

请求方法不支持(如接口只支持 POST)

429

Too Many Requests

请求频率过高,被限流

500

Internal Server Error

服务器代码异常、报错

502

Bad Gateway

网关错误,后端服务不可用

503

Service Unavailable

服务过载 / 维护中,暂时不可用

504

Gateway Timeout

网关超时,后端响应过慢

#java面试#
全部评论
同学,拼多多投了嘛,最近急招人,岗位多 简历优先筛选,核心部门,hc充足,一对一帮忙跟进进度 服务端研发实习生:https://careers.pddglobalhr.com/campus/intern/detail?t=cIZaQ3ghs7
点赞 回复 分享
发布于 今天 11:12 上海

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务