《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面经实录》- Servlet面试题
1.Servlet的生命周期?
(1)web Client 向servlet服务器,发出Http请求
(2)servlet接受web Client的请求
(3) servlet容器创建一个HttpRequest 对象,将Web Client请求的信息封装到这个对象中
(4)servlet容器创建一个HttpResponset对象
(5)servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet对象
(6)HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
(7)HttpServlet调用HttpResponst 对象的有关方法,生成响应数据
(8) Servlet容器把 HttpServlet的响应结果给Web Client
简单的说:init service destroy
2.Servlet是线程安全的吗?
Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。
解决的办法是尽量不要在实现servlet接口的类中定义实例变量,而是要把变量分别定义在doGet()和doPost()方法内。虽然使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。
注意:多线程的并发的读写Servlet类属性会导致数据不同步。但是如果只是并发地读取属性而不写入,则不存在数据不同步的问题。因此Servlet里的只读属性最好定义为final类型的。
3.get和post请求的区别?
(1)get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
(2)get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
(3)get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式;
(4)使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
(5)get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。
4.转发和重定向的区别?
(1)重定向访问服务器两次,转发只访问服务器一次。
(2)转发页面的URL不会改变,而重定向地址会改变
(3)转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径。
(4)转发相当于服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页 共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和 request.getAttribute()。而重定向会产生一个新的request,不能共享request域信息与请求参数。
(5)由于转发相当于服务器内部方法调用,所以转发后面的代码仍然会执行(转发之后记得return);重定向代码执行之后是方法执行完成之后进行重定向操作,也就是访问第二个请求,如果是方法的最后一行进行重定向那就会马上进行重定向(重定向也需要return)。
(6)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中移除。
可以这么理解:转发相当于,张三向你借钱,但是你兜里没钱,所以你去找李四借到钱之后借给张三。对于张三而言并不知道你的钱是和李四借的;重定向相当于,张三向你借钱,你兜里没钱,你告诉他李四有钱,所以张三再次去找李四借钱。
5.jsp九大内置对象?
request:封装客户端的请求,其中包含来自GET或POST请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:Web应用的配置对象;
page:JSP页面本身(相当于Java程序中的this);
exception:封装页面抛出异常的对象。
6.jsp的四大域对象?
JSP中的四种作用域包括page、request、session和application,具体来说:
page代表与一个页面相关的对象和属性。
request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
7.jsp和Servlet的区别?
(1)jsp的本质是Servlet ,jvm只能识别java的类,不能识别jsp的代码。
(2) jsp更擅长表现与页面显示,Servlet更擅长与逻辑控制。
(3) servlet中没有内置对象,jsp中有九大内置对象。
三、《JAVA面经实录》- XML/JSON面试题
1.XML是什么?
XML 即可扩展标记语言(Extensible Markup language),你可以根据自己的需要扩展 XML。XML 中可以轻松定义<books>, <orders>等自定义标签,而在 HTML 等其他标记语言中必须使用预定义的标签,比如<p>,而不能使用用户定义的标签。使用 DTD 和 XML Schema 标准化XML 结构。XML 主要用于从一个系统到另一系统的数据传输,比如企级应用的客户端与服务端。
2.解析 XML 文档有哪几种方式?
解析方式:有 DOM,SAX,STAX 等:
● DOM:处理大型文件时其性能下降的非常厉害。这个问题是由 DOM 的树结构所造成的,这种结构占用的内存较多,而且 DOM 必须在解析文件之前把整个文档装入内存,适合对 XML 的随机访问;
● SAX:不同于 DOM,SAX 是事件驱动型的 XML 解析方式。它顺序读取 XML 文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访问;
● STAX:Streaming API for XML (StAX)。
3.项目中的哪些地方用到xml?
(1)在做数据交换平台时,将不能数据源的数据组装成 XML 文件,然后将 XML 文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同 XML 文件中还原相关信息进行处理。
(2)在做软件配置时,利用 XML 可以很方便的进行,软件的各种配置参数都存贮在 XML 文件中。
4.什么是JSON?
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力不差,网络传输数据将减少更多的流量从而加快速度,是一种轻量级的数据交换格式。
5.JSON和XML之间的区别?
(1)JSON是JavaScript Object Notation;XML是可扩展标记语言。
(2)JSON是基于JavaScript语言;XML源自SGML。
(3)JSON是一种表示对象的方式;XML是一种标记语言,使用标记结构来表示数据项。
(4)JSON不提供对命名空间的任何支持;XML支持名称空间。
(5)JSON支持数组;XML不支持数组。
(6)XML的文件相对难以阅读和解释;与XML相比,JSON的文件非常易于阅读。
(7)JSON不使用结束标记;XML有开始和结束标签。
(8)JSON的安全性较低;XML比JSON更安全。
(9)JSON不支持注释;XML支持注释。
(10)JSON仅支持UTF-8编码;XML支持各种编码。
四、《JAVA面经实录》- Cookie/Session面试题
1.会话是什么?
会话:客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。
http协议是“无状态”协议,不能保存用户信息,需要判断是否是同一个用户,需要会话跟踪。cookies和session都是用来跟踪浏览器用户身份的会话方式,但两者应用场景不一样。
2.Session和Cookie的概念?
Cookie 是Web 服务器发送给客户端(浏览器)的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将 Cookie 发送到客户端,在客户端可以进行保存,以便下次使用。
Session 代表着服务器和客户端一次会话的过程。每一个用户都有一个不同的 session,各个用户之间是不能共享的,是每个用户所独享的,在 session 中可以存放信息。Session 的实现依赖于 Cookie,如果 Cookie 被禁用,那么 session 也将失效。
3.Cookie禁止掉,Session还能用吗?
第一种,在每次请求中都携带一个 SessionID 的参数放入URL
第二种,Token 机制。Token 的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。随机且无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。
4.Cookie的生存周期?
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
5.Cookie和Session的区别?
(1)存在的位置:
Cookie存在于客户端,临时文件夹中; Session存在于服务器的内存中,一个Session域对象为一个用户浏览器服务。
(2)安全性
Cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放; Session存放于服务器的内存中,所以安全性好。
(3)网络传输量
Cookie会传递消息给服务器; Session本身存放于服务器,不会有传送流量。
(4)生命周期(以20分钟为例)
Cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,Cookie生命周期结束;
session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问Session,那么Session生命周期被销毁。但是,如果在20分钟内(如在第19分钟时)访问过Session,那么,将重新计算Session的生命周期。关机会造成Session生命周期的结束,但是对Cookie没有影响。
(5)访问范围
Cookie为多个用户浏览器共享; Session为一个用户浏览器独享。
#java面试#全网少有的真实 Java 面经合集,持续更新大厂原题、高频考点、手写答案与思路复盘。 无论是校招还是社招,无论是中级还是冲击架构岗,这里都有你面试时真正会被问到的内容。关注不迷路,备战 Java 面试,看这一份就够。
查看11道真题和解析