当前位置: 首页 > news >正文

Java-Web面试题汇总

一、TCP 和 UDP 的区别

在网络通信中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种常见的协议,它们在多个方面存在显著差异。

(一)连接方式

  1. TCP:面向连接。进行数据传输前须三次握手建立连接,传输结束后需四次挥手释放连接。
  2. UDP:无连接。传送数据前无需建立连接,接收方收到报文后也无需确认。

(二)数据传输可靠性

  1. TCP:提供可靠服务。通过三次握手建立连接,传输时有确认、窗口、重传、拥塞控制等机制保障数据准确完整。
  2. UDP:不保证可靠传输,尽最大努力交付数据。

(三)服务类型

  1. TCP:不支持广播或多播服务。
  2. UDP:在即时通信领域(如 QQ 语音、视频、直播等)有时更有效。

(四)开销

  1. TCP:为提供可靠连接和多种控制机制,协议首部大,且占用处理机资源多。
  2. UDP:首部简单,开销小。

(五)应用场景

  1. TCP:适用于对数据准确性要求高的场景,如文件传输、邮件收发、远程登录等。
  2. UDP:常用于对实时性要求高、能容忍一定数据丢失的应用,如即时通信中的语音和视频通信。

总之,应根据具体应用需求选择合适的协议,以实现高效可靠的网络通信。

二、TCP 三次握手与四次挥手

(一)三次握手

  1. 过程
    • 第一次:客户端发带有 SYN 标志的数据包给服务端。
    • 第二次:服务端发带有 SYN/ACK 标志的数据包给客户端。
    • 第三次:客户端发带有 ACK 标志的数据包给服务端。
  2. 目的
    建立可靠通信信道,确保双方发送与接收功能正常。
  3. 必要性
    • 第一次握手后,客户端情况不确定,服务端确认对方发送正常及自己接收正常。
    • 第二次握手后,客户端确认自己和对方的发送、接收正常,服务端确认对方发送正常和自己接收正常。
    • 第三次握手后,双方均确认自己和对方的发送、接收正常,为可靠通信奠定基础。

(二)四次挥手

  1. 过程
    • 第一次:客户端发 FIN 数据包,关闭到服务器的数据传送。
    • 第二次:服务器收到 FIN 后发 ACK 确认,确认序号为收到的序号加 1 。
    • 第三次:服务器发 FIN 数据包给客户端,关闭连接。
    • 第四次:客户端发 ACK 确认,确认序号为收到的序号加 1 。
  2. 原因
    任何一方数据传送结束后可发连接释放通知,对方确认后进入半关闭状态。另一方无数据发送时再发通知,对方确认后完全关闭连接。

形象举例:A 和 B 打电话,A 说“我没啥要说的了”,B 答“我知道了”,但 B 可能还有话,A 不能要求 B 跟着结束,B 说完“我说完了”,A 答“知道了”,通话结束。

TCP 的三次握手建立连接和四次挥手断开连接机制,保障了网络通信的可靠性和稳定性。

三、HTTP 协议的请求方法

请求方法描述
GET对服务器资源的简单请求
POST用于发送包含用户提交数据的请求
HEAD类似于 GET 请求,返回的响应中没有具体内容,用于获取报头
PUT传说中请求文档的一个版本
DELETE发出一个删除指定文档的请求
TRACE发送一个请求副本,以跟踪其处理进程
OPTIONS返回所有可用的方法,检查服务器支持哪些方法
CONNECT用于 ssl 隧道的基于代理的请求

四、GET 和 POST 的区别

特性GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-uriencodedapplication/x-www-form-uriencoded 或 multipart/form-data.为二进制数据使用多重编码
历史参数保留在浏览器历史中参数不会保存在浏览器历史中
对数据长度的限制受 URL 长度限制(最大 2048 个字符)无限制
对数据类型的限制只允许 ASCII 字符没有限制,允许二进制数据
安全性较差,数据在 URL 中可见更安全,参数不在浏览器历史或服务器日志中
可见性数据在 URL 中对所有人可见数据不会显示在 URL 中
请求方法描述数据传输位置数据量限制安全性字符集支持缓存性幂等性用途示例
GET从服务器获取指定的资源,常用于查询操作URL 中(请求行)受 URL 长度限制,通常较小较低,请求参数暴露在 URL 中只能支持 ASCII 字符,中文字符可能乱码可缓存幂等搜索、获取文章列表、获取商品信息等
POST向服务器提交数据,以进行处理和存储,常用于创建、更新操作请求体中较大,理论上无限制较高,数据不在 URL 中显示支持标准字符集,能正确传递中文字符不可缓存非幂等提交表单(注册、登录、发表文章等)、文件上传

总结:
GET 方法主要用于获取信息,不会对服务器数据产生副作用,具有幂等性,且可以被缓存,适用于多次重复获取相同结果且不改变服务器状态的场景。
POST 方法通常用于修改服务器上的数据,可能会产生副作用,不具有幂等性,不可被缓存,适用于向服务器发送需要处理和存储的数据的场景。

五、HTTP 中重定向和请求转发的区别

重定向和请求转发有本质区别:

  1. 性质不同:转发是服务器行为,重定向是客户端行为。
  2. 特点不同:
    • 重定向:两次请求,浏览器地址变,可访问外部资源,数据丢失。
    • 请求转发:一次请求,浏览器地址不变,访问自身资源,数据不丢。

六、HTTP 和 HTTPS 的区别

HTTPS 实际上是 HTTP + SSL ,主要区别有:

  1. HTTPS 有 CA 证书,HTTP 一般无。
  2. HTTP 信息明文传输,HTTPS 是 SSL 加密传输协议。
  3. HTTP 默认 80 端口,HTTPS 默认 443 端口。

七、HTTP 请求报文与响应报文格式

  1. 请求报文:
    • 请求行:包含请求方法、URI、HTTP 版本信息。
    • 请求首部字段。
    • 请求内容实体。
  2. 响应报文:
    • 状态行:包含 HTTP 版本、状态码、状态码的原因短语。
    • 响应首部字段。
    • 响应内容实体。

八、Cookie 和 Session 的区别

Cookie 是服务器发给浏览器的信息,浏览器在本地为每个服务器存储,再次请求时会发送。

Session 存储在服务器端,为特定用户会话保存属性和配置信息,用户跳转页面时数据仍存在。

主要区别:

  1. 存在位置:
    • Cookie:客户端临时文件夹。
    • Session:服务器内存,一个 Session 服务一个用户浏览器。
  2. 安全性:
    • Cookie:明文存客户端,安全性低,可加密。
    • Session:存服务器内存,安全性好。
  3. 网络传输量:
    • Cookie:会传消息给服务器。
    • Session:本身在服务器,无传输流量。
  4. 生命周期(以 30 分钟为例):
    • Cookie:累计计时,30 分钟后结束。
    • Session:间隔计时,30 分钟内未访问则销毁,访问则重新计算。关机结束 Session 生命周期,对 Cookie 无影响。
  5. 访问范围:
    • 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 对象的方法

  1. getAttribute(String name):返回由 name 指定的属性值。
  2. getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组。
  3. getCharacterEncoding():返回请求中的字符编码方式。
  4. getHeader(String name):获得 HTTP 协议定义的文件头信息。
  5. getInputStream():返回请求的输入流,用于获得请求中的数据。
  6. getParameter(String name):获得客户端传送给服务器端的由 name 指定的参数值。
  7. getProtocol():获取客户端向服务器端传送数据所依据的协议名称。
  8. getQueryString():获得查询字符串。
  9. getRequestURI():获取发出请求字符串的客户端地址。
  10. getRemoteAddr():获取客户端的 IP 地址。
  11. getRemoteHost():获取客户端的名字。

十一、过滤器和拦截器的区别

  1. 原理实现:
    • 过滤器基于回调。
    • 拦截器基于动态代理。
  2. 控制粒度:
    • 过滤器和拦截器都能拦截请求,但拦截器粒度更细。
  3. 使用场景:
    • 拦截器常用于权限检查、日志记录等。
    • 过滤器主要用于过滤无效参数、安全校验。
  4. 依赖容器:
    • 过滤器依赖 Servlet 容器,限于 Web。
    • 拦截器依赖 Spring 框架,可使用更多资源,不限于 Web。
  5. 触发时机:
    • 过滤器在 Servlet 前后执行。
    • 拦截器在 handler 前后执行,Spring 应用中拦截器更细。

十二、Linux 基本命令

命令英文释义功能描述
cdchange directory切换目录
pwdprint working directory显示当前工作目录的绝对路径
lslist查看当前目录下的所有文件夹(只列出文件名或目录名)
lllist查看当前目录下的所有详细信息和文件夹(结果详细,有时间、是否可读写等信息)
touch创建文件
mkdir创建目录,mkdir -p 可创建多层目录
catconcatenate查看文件命令(快捷查看当前文件的内容)
more分页查看文件命令(不能快速定位到最后一页)
less分页查看文件命令(可以快速定位到最后一页)
tail查看文件命令(看最后多少行),tail -f 可实时追踪文件尾部更新
cpcopy复制文件或目录
mvmove移动文件或目录、重命名文件
rmremove删除文件或文件夹,rm -fr 强制删除
findfind查找指定文件或目录
viVisual文本编辑器,类似 Windows 的记事本
vimVI IMproved改进版文本编辑器
tar解压、压缩命令
psprocess 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的安装配置

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

【springboot】springboot接口参数全局解密,解决request内容修改后如何重新设置回去的问题

文章目录 核心思路spring&servelt基础核心接口类核心代码 body解密核心原理讲解get解密核心原理讲解get query请求讲解get pathVariables请求讲解 总结 本文不仅介绍了body内容修改后如何传递&#xff0c;也介绍了get请求 在修改内容后如何继续传递。 【原创作者 csdn: 孟秋…...

yml基本语法

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

橙色简洁大气体育直播自适应模板赛事直播门户自适应网站源码

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

【启明智显技术分享】工业级HMI芯片Model系列GUI合成到项目中的指南

在工业自动化、智能终端HMI、车载仪表盘等领域&#xff0c;高性能的HMI&#xff08;人机界面&#xff09;芯片是不可或缺的核心组件。启明智显推出的Model系列&#xff08;如Model3C、Model3、Model4&#xff09;HMI芯片&#xff0c;以其卓越的性能和广泛的应用领域&#xff0c…...

开源服务器运维工具1Panel

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

新版本源2.0大模型发布:Yuan2-2B-July-hf

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

用python生成GIF动图—用于博客插图或封面等

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

[RCTF2019]draw

下载是一个文本文档&#xff0c;百度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格式文档呢&#xff1f;亦或者在处理文档或制作报告时&#xff0c;不知道怎么才能更快地将多张图片整合成一个pdf文件呢&#xff1f;如果你正在寻找简单快速的方法&#xff0c;又有哪些工具可以帮助您完成图片转pdf呢&#xff1f;别着急&#xf…...

ptrade排坑笔记——使用量化交易的时候有报错提示!

前言 今天要和大家分享一个遇见的问题&#xff0c;有客户反馈&#xff0c;自己在使用量化交易的时候&#xff0c;会有报错&#xff01;会在后文分享我们是如何解决这个问腿的&#xff01; 一、问题描述 客户主要遇见的问题是&#xff0c;量化在进行交易的过程中&#xff0c;…...

C#-MemoryMarshal

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

Java并发编程的艺术

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

华为 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分析 [ ]和{ } 都是复杂类型&#xff0c;以上都是三目运算符判断 1.判断[ ]和{ } 是否存在 声明了这些已经分配了内存&#xf…...

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("…...