Java面试题———web篇

啵啵薯条 2024-08-27 15:33:02 阅读 81

目录

1、TCP 和 UDP 区别?

2、了解 TCP 三次握手四次挥手吗?!

3、HTTP 协议包括哪些请求?

4、Get 和 Post 的区别?

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

6、HTTP 和 HTTPS 的区别?

7、HTTP 请求报文与响应报文格式?

8、Cookie 和 Session 的区别?

9、Tomcat 如何进行内存调优?

11、过滤器和拦截器的区别?

12、Linux 基本命令


1、TCP 和 UDP 区别?

传输控制协议 TCP(Transmission Control Protocol)–提供面向连接的,可靠的数据传输服务。TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(!TCP 的可靠体现在 TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。

用户数据协议 UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 却是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频、直播等等。

2、了解 TCP 三次握手四次挥手吗?!

三次握手

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送

与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的

客户端–发送带有 SYN 标志的数据包–一次握手–服务端

服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端

客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端为什么需要三次握手?

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双发收发功能都正常,缺一不可。!

4.四次挥手

断开一个 TCP 连接则需要“四次挥手”:

客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送

服务器-收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加1 。和 SYN

一样,一个 FIN 将占用一个序号

服务器-关闭与客户端的连接,发送一个 FIN 给客户端

客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

为什么需要四次挥手?

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

3、HTTP 协议包括哪些请求?

GET:对服务器资源的简单请求

POST:用于发送包含用户提交数据的请求

HEAD:类似于 GET 请求,不过返回的响应中没有具体内容,用于获取报头

PUT:传说中请求文档的一个版本

DELETE:发出一个删除指定文档的请求

TRACE:发送一个请求副本,以跟踪其处理进程

OPTIONS:返回所有可用的方法,检查服务器支持哪些方法

CONNECT:用于 ssl 隧道的基于代理的请求

4、Get 和 Post 的区别?

GET:

get 重点是从服务器上获取资源

get 传输数据是通过 URL 请求,以 field(字段)= value 的形式,置于 URL 后,并用“?”连接,多个请求数据间用“&”连接

get 传输数据量小,因为受 URL 长度限制,但是效率高

get 是不安全的,因为 URL 是可见的,可能会泄漏私密信息

get 方式只能支持 ASCII 字符,向服务器传的中文字符可能会乱码

POST:

post 重点是向服务器发送数据。

post 传输数据是通过 HTTP 的 post 机制。将字段和对应值封存在请求实体中发送给服务器。这个过程用户是不可见的

post 可以传输大量数据,所以上传文件时只能用 post

post 支持标准字符集,可以正确传递中文字符

post 较 get 安全性高

总结:

GET 用于获取信息,无副作用,幂等,且可缓存

POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存

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

本质区别:

转发是服务器行为

重定向是客户端行为!

重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失。请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。

6、HTTP 和 HTTPS 的区别?

HTTPS = HTTP + SSL

https 有 ca 证书,http 一般没有

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

http 默认80 端口,https 默认443 端口

7、HTTP 请求报文与响应报文格式?

请求报文: a、请求行:包含请求方法、URI、HTTP 版本信息 b、请求首部字段 c、请求内容实体

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

8、Cookie 和 Session 的区别?

Cookie:是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie。 Session:是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

区别:①存在的位置

cookie 存在于客户端,临时文件夹中;

session 存在于服务器的内存中,一个 session 域对象为一个用户浏览器服务

②安全性

cookie 是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放;

session 存放于服务器的内存中,所以安全性好!

③网络传输量

cookie 会传递消息给服务器;

session 本身存放于服务器,不会有传送流量

④生命周期(以30 分钟为例)

cookie 的生命周期是累计的,从创建时,就开始计时,30 分钟后,cookie 生命周期结束;

session 的生命周期是间隔的,从创建时,开始计时如在30 分钟,没有访问 session,那么 session 生命周期被销毁。但是,如果在30 分钟内(如在第29 分钟时)访问过 session,那么,将重新计算 session 的生命周期。关机会造成 session 生命周期的结束,但是对 cookie 没有影响。

⑤访问范围

cookie 为多个用户浏览器共享;

session 为一个用户浏览器独享

简单来说 cookie 机制采用的是在客户端保持状态的方案,而 session 机制采用的是在服务器端保持状态的方案。由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以 session 机制可能需要借助于 cookie 机制来达到保存标识的目的。

9、Tomcat 如何进行内存调优?

内存方式的设置是在 catalina.sh 中,调整一下 JAVA_OPTS 变量即可,因为后面的启动参数会把 JAVA_OPTS 作为 JVM 的启动参数来处理。具体设置如下:

JAVA_OPTS=“$JAVA_OPTS -Xmx1024m -Xms1024m”其各项参数如下:-Xmx3550m:设置 JVM 最大可用内存为1024M。

-Xms3550m:设置 JVM 初始内存为1024m。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存。

11、过滤器和拦截器的区别?

原理实现上:过滤器基于回调实现,而拦截器基于动态代理。!

控制粒度上:过滤器和拦截器都能够实现对请求的拦截功能,但是在拦截的粒度上有较大的差异,拦截器对访问控制的粒度更细。

使用场景上:拦截器往往用于权限检查、日志记录等,过滤器主要用于过滤请求中无效参数,安全校验。

依赖容器上:过滤器依赖于 Servlet 容器,局限于 web,而拦截器依赖于 Spring 框架,能够使用 Spring 框架的资源,不仅限于 web。

触发时机上:过滤器在 Servlet 前后执行,拦截器在 handler 前后执行,现在大多数 web 应用基于 Spring,拦截器更细。

12、Linux 基本命令

cd (change directory:英文释义是改变目录)切换目录pwd (print working directory:显示当前工作目录的绝对路径)ls (ls:list的缩写,查看列表)查看当前目录下的所有文件夹(ls 只列出文件名或目录名)ll (ll:list的缩写,查看列表详情)查看当前目录下的所有详细信息和文件夹(ll 结果是详细,有时间, 是否可读写等信息)touch (touch:创建文件)创建文件mkdir (mkdir:创建目录) 创建目录 mkdir -p /aaa/bbbcat (concatenate:显示或把多个文本文件连接起来)查看文件命令(可以快捷查看当前文件的内 容)more (more:更多的意思)分页查看文件命令(不能快速定位到最后一页)less (lese:较少的意思)分页查看文件命令(可以快速定位到最后一页)tail(尾巴) 查看文件命令(看最后多少行) tail -fcp(copy单词缩写,复制功能)mv(move单词缩写,移动功能,该文件名称功能)rm(remove:移除的意思)删除文件,或文件夹 rm -frfind (find:找到的意思)查找指定文件或目录vi (VIsual:视觉)文本编辑器 类似win的记事本 (操作类似于地下的vim命令,看底下vim 的操 作)vim (VI IMproved:改进版视觉)改进版文本编辑器 (不管是文件查看还是文件编辑 按 Shift + 上或 者下可以上下移动查看视角)tar (解压 压缩 命令)ps (process status:进程状态,类似于windows的任务管理器)ifconfig命令ping (用于检测与目标的连通性)语法:ping ip地址free 命令 (显示系统内存)top 命令netstat 命令



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。