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显示网络连接、路由表等信息
  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InnovatorX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值