Java-Web面试题汇总
一、TCP 和 UDP 的区别
在网络通信中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种常见的协议,它们在多个方面存在显著差异。
(一)连接方式
- TCP:面向连接。进行数据传输前须三次握手建立连接,传输结束后需四次挥手释放连接。
- UDP:无连接。传送数据前无需建立连接,接收方收到报文后也无需确认。
(二)数据传输可靠性
- TCP:提供可靠服务。通过三次握手建立连接,传输时有确认、窗口、重传、拥塞控制等机制保障数据准确完整。
- UDP:不保证可靠传输,尽最大努力交付数据。
(三)服务类型
- TCP:不支持广播或多播服务。
- UDP:在即时通信领域(如 QQ 语音、视频、直播等)有时更有效。
(四)开销
- TCP:为提供可靠连接和多种控制机制,协议首部大,且占用处理机资源多。
- UDP:首部简单,开销小。
(五)应用场景
- TCP:适用于对数据准确性要求高的场景,如文件传输、邮件收发、远程登录等。
- UDP:常用于对实时性要求高、能容忍一定数据丢失的应用,如即时通信中的语音和视频通信。
总之,应根据具体应用需求选择合适的协议,以实现高效可靠的网络通信。
二、TCP 三次握手与四次挥手
(一)三次握手
- 过程
- 第一次:客户端发带有 SYN 标志的数据包给服务端。
- 第二次:服务端发带有 SYN/ACK 标志的数据包给客户端。
- 第三次:客户端发带有 ACK 标志的数据包给服务端。
- 目的
建立可靠通信信道,确保双方发送与接收功能正常。 - 必要性
- 第一次握手后,客户端情况不确定,服务端确认对方发送正常及自己接收正常。
- 第二次握手后,客户端确认自己和对方的发送、接收正常,服务端确认对方发送正常和自己接收正常。
- 第三次握手后,双方均确认自己和对方的发送、接收正常,为可靠通信奠定基础。
(二)四次挥手
- 过程
- 第一次:客户端发 FIN 数据包,关闭到服务器的数据传送。
- 第二次:服务器收到 FIN 后发 ACK 确认,确认序号为收到的序号加 1 。
- 第三次:服务器发 FIN 数据包给客户端,关闭连接。
- 第四次:客户端发 ACK 确认,确认序号为收到的序号加 1 。
- 原因
任何一方数据传送结束后可发连接释放通知,对方确认后进入半关闭状态。另一方无数据发送时再发通知,对方确认后完全关闭连接。
形象举例:A 和 B 打电话,A 说“我没啥要说的了”,B 答“我知道了”,但 B 可能还有话,A 不能要求 B 跟着结束,B 说完“我说完了”,A 答“知道了”,通话结束。
TCP 的三次握手建立连接和四次挥手断开连接机制,保障了网络通信的可靠性和稳定性。
三、HTTP 协议的请求方法
请求方法 | 描述 |
---|---|
GET | 对服务器资源的简单请求 |
POST | 用于发送包含用户提交数据的请求 |
HEAD | 类似于 GET 请求,返回的响应中没有具体内容,用于获取报头 |
PUT | 传说中请求文档的一个版本 |
DELETE | 发出一个删除指定文档的请求 |
TRACE | 发送一个请求副本,以跟踪其处理进程 |
OPTIONS | 返回所有可用的方法,检查服务器支持哪些方法 |
CONNECT | 用于 ssl 隧道的基于代理的请求 |
四、GET 和 POST 的区别
特性 | GET | POST |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-uriencoded | application/x-www-form-uriencoded 或 multipart/form-data.为二进制数据使用多重编码 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度的限制 | 受 URL 长度限制(最大 2048 个字符) | 无限制 |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制,允许二进制数据 |
安全性 | 较差,数据在 URL 中可见 | 更安全,参数不在浏览器历史或服务器日志中 |
可见性 | 数据在 URL 中对所有人可见 | 数据不会显示在 URL 中 |
请求方法 | 描述 | 数据传输位置 | 数据量限制 | 安全性 | 字符集支持 | 缓存性 | 幂等性 | 用途示例 |
---|---|---|---|---|---|---|---|---|
GET | 从服务器获取指定的资源,常用于查询操作 | URL 中(请求行) | 受 URL 长度限制,通常较小 | 较低,请求参数暴露在 URL 中 | 只能支持 ASCII 字符,中文字符可能乱码 | 可缓存 | 幂等 | 搜索、获取文章列表、获取商品信息等 |
POST | 向服务器提交数据,以进行处理和存储,常用于创建、更新操作 | 请求体中 | 较大,理论上无限制 | 较高,数据不在 URL 中显示 | 支持标准字符集,能正确传递中文字符 | 不可缓存 | 非幂等 | 提交表单(注册、登录、发表文章等)、文件上传 |
总结:
GET 方法主要用于获取信息,不会对服务器数据产生副作用,具有幂等性,且可以被缓存,适用于多次重复获取相同结果且不改变服务器状态的场景。
POST 方法通常用于修改服务器上的数据,可能会产生副作用,不具有幂等性,不可被缓存,适用于向服务器发送需要处理和存储的数据的场景。
五、HTTP 中重定向和请求转发的区别
重定向和请求转发有本质区别:
- 性质不同:转发是服务器行为,重定向是客户端行为。
- 特点不同:
- 重定向:两次请求,浏览器地址变,可访问外部资源,数据丢失。
- 请求转发:一次请求,浏览器地址不变,访问自身资源,数据不丢。
六、HTTP 和 HTTPS 的区别
HTTPS 实际上是 HTTP + SSL
,主要区别有:
- HTTPS 有 CA 证书,HTTP 一般无。
- HTTP 信息明文传输,HTTPS 是 SSL 加密传输协议。
- HTTP 默认 80 端口,HTTPS 默认 443 端口。
七、HTTP 请求报文与响应报文格式
- 请求报文:
- 请求行:包含请求方法、URI、HTTP 版本信息。
- 请求首部字段。
- 请求内容实体。
- 响应报文:
- 状态行:包含 HTTP 版本、状态码、状态码的原因短语。
- 响应首部字段。
- 响应内容实体。
八、Cookie 和 Session 的区别
Cookie 是服务器发给浏览器的信息,浏览器在本地为每个服务器存储,再次请求时会发送。
Session 存储在服务器端,为特定用户会话保存属性和配置信息,用户跳转页面时数据仍存在。
主要区别:
- 存在位置:
- Cookie:客户端临时文件夹。
- Session:服务器内存,一个 Session 服务一个用户浏览器。
- 安全性:
- Cookie:明文存客户端,安全性低,可加密。
- Session:存服务器内存,安全性好。
- 网络传输量:
- Cookie:会传消息给服务器。
- Session:本身在服务器,无传输流量。
- 生命周期(以 30 分钟为例):
- Cookie:累计计时,30 分钟后结束。
- Session:间隔计时,30 分钟内未访问则销毁,访问则重新计算。关机结束 Session 生命周期,对 Cookie 无影响。
- 访问范围:
- Cookie:多用户浏览器共享。
- Session:一个用户浏览器独享。
简单来说,Cookie 是客户端保持状态方案,Session 是服务器端保持状态方案,Session 可能借助 Cookie 保存标识。
九、Tomcat 内存调优
在 Tomcat 中,通过在 catalina.sh
中调整 JAVA_OPTS
变量进行内存设置,后续启动参数会将其作为 JVM 启动参数处理。具体如:
JAVA_OPTS="$JAVA_OPTS -Xmx1024m -Xms1024m"
参数含义:
-Xmx3550m
:设置 JVM 最大可用内存为 1024M。
-Xms3550m
:设置 JVM 初始内存为 1024m,可与 -Xmx
相同,避免垃圾回收后重新分配内存。
十、Servlet 中 Request 对象的方法
getAttribute(String name)
:返回由name
指定的属性值。getCookies()
:返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组。getCharacterEncoding()
:返回请求中的字符编码方式。getHeader(String name)
:获得 HTTP 协议定义的文件头信息。getInputStream()
:返回请求的输入流,用于获得请求中的数据。getParameter(String name)
:获得客户端传送给服务器端的由name
指定的参数值。getProtocol()
:获取客户端向服务器端传送数据所依据的协议名称。getQueryString()
:获得查询字符串。getRequestURI()
:获取发出请求字符串的客户端地址。getRemoteAddr()
:获取客户端的 IP 地址。getRemoteHost()
:获取客户端的名字。
十一、过滤器和拦截器的区别
- 原理实现:
- 过滤器基于回调。
- 拦截器基于动态代理。
- 控制粒度:
- 过滤器和拦截器都能拦截请求,但拦截器粒度更细。
- 使用场景:
- 拦截器常用于权限检查、日志记录等。
- 过滤器主要用于过滤无效参数、安全校验。
- 依赖容器:
- 过滤器依赖 Servlet 容器,限于 Web。
- 拦截器依赖 Spring 框架,可使用更多资源,不限于 Web。
- 触发时机:
- 过滤器在 Servlet 前后执行。
- 拦截器在 handler 前后执行,Spring 应用中拦截器更细。
十二、Linux 基本命令
命令 | 英文释义 | 功能描述 |
---|---|---|
cd | change directory | 切换目录 |
pwd | print working directory | 显示当前工作目录的绝对路径 |
ls | list | 查看当前目录下的所有文件夹(只列出文件名或目录名) |
ll | list | 查看当前目录下的所有详细信息和文件夹(结果详细,有时间、是否可读写等信息) |
touch | 创建文件 | |
mkdir | 创建目录,mkdir -p 可创建多层目录 | |
cat | concatenate | 查看文件命令(快捷查看当前文件的内容) |
more | 分页查看文件命令(不能快速定位到最后一页) | |
less | 分页查看文件命令(可以快速定位到最后一页) | |
tail | 查看文件命令(看最后多少行),tail -f 可实时追踪文件尾部更新 | |
cp | copy | 复制文件或目录 |
mv | move | 移动文件或目录、重命名文件 |
rm | remove | 删除文件或文件夹,rm -fr 强制删除 |
find | find | 查找指定文件或目录 |
vi | Visual | 文本编辑器,类似 Windows 的记事本 |
vim | VI IMproved | 改进版文本编辑器 |
tar | 解压、压缩命令 | |
ps | process status | 查看进程状态,类似 Windows 的任务管理器 |
ifconfig | 配置网络接口 | |
ping | 用于检测与目标的连通性,语法:ping IP 地址 | |
free | 显示系统内存 | |
top | 动态显示系统进程信息 | |
netstat | 显示网络连接、路由表等信息 |
相关文章:

Java-Web面试题汇总
一、TCP 和 UDP 的区别 在网络通信中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种常见的协议,它们在多个方面存在显著差…...

数字化技术分别有哪些,数字化技术特点和优势是什么?
随着企业数字化进程的加速,人工智能、工业互联网、低代码等底层技术正全面重塑企业运营生产体系,推动新的生产要素、研发范式和商业模式的建立。 这个变革过程不仅是对原有制造体系的颠覆,而且会影响各行各业的所有细分行业和产业链价值链…...

微服务CI/CD实践(一)环境准备及虚拟机创建
微服务CI/CD实践系列: 微服务CI/CD实践(一)环境准备及虚拟机创建 微服务CI/CD实践(二)gitlabs部署 微服务CI/CD实践(三)nexus3部署 微服务CI/CD实践(四)数据库,redis,n…...

【SpringBoot】优化慢启动应用的用户体验
通过深入分析SpringBoot中WebServer的启动流程,插入自定义的Loading页面展示逻辑,优化软件使用时的用户体验。 背景 Java本身的特点,再加上开发人员能力差,软件开发工程化程度低等等问题,经过一段时间的迭代之后&…...

String str=“i“ 与 String str=new String (“i“) 一样吗?
String str"i" 与 String strnew String ("i") String str"i" 这种形式声明了一个 String 对象,其中 "i" 字符串字面量直接赋值给 str。在 Java 中,字符串字面量会自动放入字符串常量池中,这是一个…...

【数据结构】二叉树链式结构的实现
前置声明:在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉…...

如何有效找到目标客户群体?
在激烈的市场竞争中,找到并锁定目标客户群体是企业成功的关键。以下是几种有效的策略,帮助您精准定位并吸引目标客户。 1. 明确市场定位与客户画像 首先,企业需要明确市场定位,并绘制详细的客户画像,包括年龄、性别、…...

机器学习-混淆矩阵
文章目录 一、混淆矩阵1.混淆矩阵简介2.混淆矩阵图列 二、混淆矩阵指标1. 准确率(Accuracy)2. 精确率(Precision)3. 召回率(Recall)4. F1分数(F1 Score) 三、总结 一、混淆矩阵 1.混…...

数据结构----栈
一丶概念 只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底 二丶特点 先进后出 FILO first in last out 后进先出 LIFO last in first out 三丶顺序栈 逻辑结构&…...

STL六大组件
STL(Standard Template Library,标准模板库)是C标准库的一部分,提供了丰富且高效的数据结构和算法。STL主要由6大组件构成,分别是容器、算法、迭代器、适配器、仿函数和空间配置器。 容器(Containers&#…...

【机器学习】CNN的数学基础
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 CNN的数学基础1. 引言2. 卷积运算2.1 连续卷积2.2 离散卷积2.3 互相关 3. 激活函…...

最小路径和[中等]
优质博文:IT-BLOG-CN 一、题目 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[…...

【题库】——数组 小鱼比可爱
#include<bits/stdc.h> using namespace std; int main() {int n,m,i;cin>>n;int arr[n]; for(i0;i<n;i) {int count 0;cin>>arr[i];for(mi;m>0;m--){if(arr[i]>arr[m])count;} cout<<count<<" "; } return 0; }...

基于飞腾平台的Hbase的安装配置
【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…...

【springboot】springboot接口参数全局解密,解决request内容修改后如何重新设置回去的问题
文章目录 核心思路spring&servelt基础核心接口类核心代码 body解密核心原理讲解get解密核心原理讲解get query请求讲解get pathVariables请求讲解 总结 本文不仅介绍了body内容修改后如何传递,也介绍了get请求 在修改内容后如何继续传递。 【原创作者 csdn: 孟秋…...

yml基本语法
YAML(YAML Ain’t Markup Language)是一种简洁且易读的数据序列化格式,常用于配置文件。Spring Boot 中的 application.yml 文件使用 YAML 来配置应用程序的属性。 YAML 基本语法 1. 键值对 基本的键值对表示形式为:key: value…...

橙色简洁大气体育直播自适应模板赛事直播门户自适应网站源码
源码名称:酷黑简洁大气体育直播自适应模板赛事直播门户网站 源码开发环境:帝国cms 7.5 安装环境:phpmysql 带采集,可以挂着电脑上自动采集发布,无需人工操作! 橙色简洁大气体育直播自适应模板赛事直播门户…...

【启明智显技术分享】工业级HMI芯片Model系列GUI合成到项目中的指南
在工业自动化、智能终端HMI、车载仪表盘等领域,高性能的HMI(人机界面)芯片是不可或缺的核心组件。启明智显推出的Model系列(如Model3C、Model3、Model4)HMI芯片,以其卓越的性能和广泛的应用领域,…...

开源服务器运维工具1Panel
1Panel是杭州飞致云信息科技有限公司推出的一款现代化、开源的Linux服务器运维管理面板。 以下是对1Panel的详细介绍: 一、基本信息 产品名称:1Panel所属公司:杭州飞致云信息科技有限公司编写语言:Golang上线时间:20…...

新版本源2.0大模型发布:Yuan2-2B-July-hf
引言 近日,浪潮信息的新一代基础语言大模型源2.0 迎来了重要更新。浪潮信息正式发布了 Yuan2-2B-July-hf 模型,标志着源2.0系列模型在性能和功能上的进一步提升。这一版本将为开发者和研究人员提供更强大的工具,以满足各种语言处理需求。…...

用python生成GIF动图—用于博客插图或封面等
生成GIF动图🚀 由于目前自己是在做大模型,还有一些树莓派硬件之类的东西,一是大模型的流式输出的例子需要用到GIF,二是做单片机的时候例如一些灯的闪烁和变化需要用到,所以之前也是一直有这个打算所以就记录一下这个生…...

[RCTF2019]draw
下载是一个文本文档,百度AI cs pu lt 90 fd 500 rt 90 pd fd 100 rt 90 repeat 18[fd 5 rt 10] lt 135 fd 50 lt 135 pu bk 100 pd setcolor pick [ red orange yellow green blue violet ] repeat 18[fd 5 rt 10] rt 90 fd 60 rt 90 bk 30 rt 90 fd 60 pu lt 90 f…...

设计模式 - 责任链模式
💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

jpg怎么转换成pdf?6个简单方法,实现jpg转换成pdf
你是否也曾想将jpg图片转换为pdf格式文档呢?亦或者在处理文档或制作报告时,不知道怎么才能更快地将多张图片整合成一个pdf文件呢?如果你正在寻找简单快速的方法,又有哪些工具可以帮助您完成图片转pdf呢?别着急…...

ptrade排坑笔记——使用量化交易的时候有报错提示!
前言 今天要和大家分享一个遇见的问题,有客户反馈,自己在使用量化交易的时候,会有报错!会在后文分享我们是如何解决这个问腿的! 一、问题描述 客户主要遇见的问题是,量化在进行交易的过程中,…...

C#-MemoryMarshal
MemoryMarshal 类是 .NET 中用于处理内存的工具类,它提供了一组静态方法,用于在托管代码中以安全和高效的方式操作内存块。MemoryMarshal 类主要用于处理原始内存数据而不需要进行复制,这对于性能关键的操作非常有用。 MemoryMarshal 类包含…...

Java并发编程的艺术
Java作为一门面向对象的编程语言,自1995年推出以来,一直以其稳定性、跨平台性和丰富的API受到广大开发者的喜爱。在Java的发展历程中,并发编程一直是其重要的特性之一。本文将探讨Java并发编程的艺术,解析其核心概念和常用并发工具…...

华为 OLT 添加 ONU 配置 (SNMP管理模式)
上网业务数据规划 OLT PON口 0/8/0 ONU_ID 0 ONU 序列号 4857544323BE233B 外层 VLAN ID 2012 内层VLAN ID 35 用户 FE 端口 ONU 0/1/1 用户VLAN 35 DBA带宽类型 Type 2 流量模板编号 10 DBA 模板编号 30 ONU线路模板编号 40 T-CONT (网管) 0 T-CONT(业务_ 2 GEM (网管) 0 …...

【JavaScript】[]和{} 的转换
背景 ([])? true:false ({})? true:false ([] true)? true:false ({} true)? true:false ([] true)? true:false ({} true)? true:false分析 [ ]和{ } 都是复杂类型,以上都是三目运算符判断 1.判断[ ]和{ } 是否存在 声明了这些已经分配了内存…...

C#关于多线程的线程问题
using System.Text; namespace 平时练习8._19day06 {internal class Program{static async Task Main(string[] args){Console.WriteLine(Thread.CurrentThread.ManagedThreadId );StringBuilder sb new StringBuilder();for (int i 0; i < 10000; i){sb.Append("…...