Java 网络面试题解析

1. Http 协议的状态码有哪些?含义是什么?【重点】

200:OK,客户端请求成功。

301:Moved Permanently(永久移除),请求的URL已移走。Response中应该包含一个Location URL,说明资源现在所处的位置。

302:Found,重定向。

400:Bad Request,客户端请求有语法错误,不能被服务器所理解。

401:Unauthorized, 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。

403:Forbidden,服务器收到请求,但是拒绝提供服务。

404:Not Found,请求资源不存在,输入了错误的URL。

405:Not Allowed Method,请求的方式不允许。

500:Internal Server Error,服务器发生不可预期的错误。

503:Server Unavailable,服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

2. Http的请求报文组成?【重点】

请求行:

是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。

请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。

协议名称及版本号。

请求头:

HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。

缓存相关的规则信息,均包含在Header中。

请求体:

报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2 的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。

3. 一次完整的Http请求是怎样的?【了解】

域名解析(DNS)--> 发起TCP的3次握手 --> 建立TCP连接后发起Http请求 --> 服务器响应;

Http请求,浏览器得到Html代码 --> 浏览器解析Html代码,并请求Html代码中的资源(如JS、CSS、图片等)--> 浏览器对页面进行渲染呈现给用户。

4. TCP和UDP的区别?【了解】

TCP是面向连接的协议,UDP是无连接的协议;

TCP是可靠传输,使用流量控制与和拥塞控制,能够保证数据的正确性,UDP是不可靠传输,不使用流量控制与和拥塞控制,可能产生丢失数据包;

TCP支持单播,UDP支持组播与广播;

TCP报文头结构比较复杂,最小占用20个字节,UDP 报文头结构较简单,占用8个字节;

TCP是面向字节流的,UDP是面向报文的;

TCP占用系统资源较多,UDP占用系统资源较少。

5. SSL协议的三个特性?【了解】

私密性:在握手协议定义了会话密钥后,所有的消息都被加密。

确认性:尽管会话的客户端认证是可选的,但是服务器端始终是被认证的。

可靠性:传送的消息包括消息完整性检查。

6. Http与Https的区别?【重点】

HTTP的URL以http://开头,而HTTPS的URL以https://开头;

HTTP是不安全的,而HTTPS是安全的;

HTTP标准端口是80 ,而HTTPS的标准端口是443;

在OSI网络模型中,HTTP工作于应用层,而HTTPS的安全传输机制工作在传输层;

HTTP无法加密,而HTTPS对传输的数据进行加密;

HTTP无需证书,而HTTPS需要CA机构WOSIGN(WOSIGN是唯一支持免费证书的)的颁发的SSL证书。

7. TCP的三次握手与四次断开(四次挥手)?【了解】

三次握手的过程:


第一次握手:客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号(SYN 包:SYN=X)。请求发送后,客户端便进入 SYN-SENT状态。

第二次握手:服务端收到连接请求报文段后(SYN包),如果同意连接,则会发送一个应答(必须确认客户的SYN:ACK=X+1),该应答中也会包含自身的数据通讯初始序号(SYN包(SYN=Y),即SYN+ACK包),发送完成后便进入SYN-RECEIVED状态。

第三次握手:当客户端收到连接同意的应答后(SYN+ACK包),还要向服务端发送一个确认报文(ACK=Y+1)。客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接建立成功。

四次挥手的过程:

第1次挥手:客户端向服务器端发送断开TCP连接请求的 [FIN,ACK]报文,在报文中随机生成一个序列号SEQ=x,表示要断开TCP连接,如图所示。


第2次挥手:当服务器端收到客户端发来的断开TCP连接的请求后,回复发送ACK报文,表示已经收到断开请求。回复时,随机生成一个序列号SEQ=y。由于回复的是客户端发来的请求,所以在客户端请求序列号SEQ=x的基础上加1,得到ACK=x+1,如图所示。


第3次挥手:服务器端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开。服务器端会先确认断开前,所有传输到客户端的数据是否已经传输完毕。确认数据传输完毕后才进行断开,向客户端发送 [FIN,ACK]报文,设置字段值为 1。再次随机生成一个序列号SEQ=z。由于还是对客户端发来的TCP断开请求序列号SEQ=x进行回复,因此ACK依然为x+1,如图所示。


第4次挥手:客户端收到服务器发来的TCP断开连接数据包后将进行回复,表示收到断开TCP连接数据包。向服务器发送ACK报文,生成一个序列号SEQ=x+1。由于回复的是服务器,所以ACK字段的值在服务器发来断开TCP连接请求序列号SEQ=z 的基础上加1,得到ACK=z+1,如图所示。


8. 为什么连接的时候是三次握手,关闭的时候却是四次握手?【了解】

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN 报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

9. 什么是Http协议无状态协议?怎么解决Http协议无状态协议?【重点】

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个“老用户”。

可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是“老用户”。

10. HTTPS工作原理?【重点】

首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;

客户端如果校验通过后,就根据证书的公钥的有效,生成随机数,随机数使用公钥进行加密(RSA加密);

消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;

发送给服务端,此时只有服务端(RSA 私钥)能解密。

解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。

11. 如果已经建立了连接,但是客户端突然出现故障了怎么办?【了解】

TCP 设有一个保持计时器(keepalive),如果客户端出现故障,服务器不能一直等下去,白白浪费资源。

服务器每收到一次客户端的请求后都会重置这个计时器,计时器默认超时时间为7200秒(2小时),若默认超时时间内没有收到客户端的任何数据,服务器就会发送一个探测报文,以后每隔75秒钟发送一次,若连续发送10次探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/423075.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Thinkphp框架漏洞--->5.0.23 RCE

1.Thinkphp ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化 企业应用开发而诞生的。 2.漏洞原理及成因 该漏洞出现的原因在于 ThinkPHP5框架底层对控制器名过滤不严 ,从而让攻击者可以通过…

QoS简单配置案例

1、两边两个方向做相同的配置:入口复杂流分类用mqc方式配置,ds内设备入口配简单流分类。 2、两边两个方法做拥塞管理配置,拥塞管理配置思路: 拥塞管理的两种配置方法(全部用一种也可以,这里学习就用了两种…

Vue3 条件渲染 v-if

v-if 指令&#xff1a;用于控制元素的显示或隐藏。 执行条件&#xff1a;当条件为 false 时&#xff0c;会将元素从 DOM 中删除。 应用场景&#xff1a;适用于显示隐藏切换频率较低的场景。 语法格式&#xff1a; <div v-if"数据">内容</div> 基础用…

解决 MySQL 未运行但锁文件存在的问题

查看mysql状态时&#xff0c;显示错误信息"ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists"。 解决步骤 1、检查 MySQL 进程是否正在运行 在继续之前&#xff0c;我们首先需要确定 MySQL 进程是否正在运行。我们可以使用以下命令检查…

离线数仓(四)【数仓数据同步策略】

前言 今天来把数仓数据同步解决掉&#xff0c;前面我们已经把日志数据到 Kafka 的通道打通了。 1、实时数仓数据同步 关于实时数仓&#xff0c;我们的 Flink 直接去 Kafka 读取即可&#xff0c;我们在学习 Flink 的时候也知道 Flink 提供了 Kafka Source&#xff0c;所以这里不…

前端学习第二天-html提升

达标要求 了解列表的分类 熟练掌握列表的用法 熟练掌握表格的结构构成 合并单元格 表单的组成 熟练掌握表单控件分类的使用 1.列表 1.1 无序列表 <ul>&#xff1a;定义无序列表&#xff0c;并且只能包含<li>子元素。 <li>&#xff1a;定义列表项&a…

【kubernetes VPA】记录一次安装 VPA 相关组件的报错解决过程

文章目录 1. 问题描述2. 问题原因3. 解决办法4. 参考链接 1. 问题描述 在执行 ./hack/vpa-up.sh脚本命令时&#xff0c;提示有报错。名为vpa-admission-controller的容器状态一直停留在ContainerCreating&#xff0c;从该Pod详细描述中得知&#xff0c;volume "tls-certs…

【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记

《自动驾驶技术概论》学习笔记 致谢&#xff1a;作者&#xff1a;王建、徐国艳、陈竞凯、冯宗宝 本书主要介绍汽车构造和无人驾驶汽车的基本概念&#xff0c;从基础开始&#xff0c;由浅入深地了解无人驾驶的历史由来、国内外自动驾驶产业现状及技术发展、自动驾驶汽车的技术架…

2025张宇考研数学,百度网盘视频课+36讲PDF讲义+真题

张宇老师的课属于幽默生动&#xff0c;会让一个文科生爱上数学&#xff0c;但是有的同学不知道在哪看&#xff0c;可以看一下&#xff1a;2025张宇考研数学全程网盘 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 可以粘贴在浏览器 张宇30讲作为一本基础讲义&#xff1a;和教材…

【第二十五课】动态规划:完全背包问题(acwing-3 / 公式推导 / 思路理解 / 优化 / c++代码)

目录 思路 朴素代码 优化 公式推导上 二维代码 一维代码 公式理解上 在开始看完全背包问题之前&#xff0c;可能需要先了解01背包及其解决办法。 指路&#x1f447; 【第二十五课】动态规划&#xff1a;01背包问题(acwing-2 / 思路 / 含一维数组优化 / c代码) 思路 …

代码随想录算法刷题训练营day30:LeetCode(332)重新安排行程、LeetCode(51)n-皇后、LeetCode(37)解数独

代码随想录算法刷题训练营day30&#xff1a;LeetCode(332)重新安排行程、LeetCode(51)n-皇后、LeetCode(37)解数独 LeetCode(332)重新安排行程 题目 代码 //第二次刷题---在刷--高难度---注意超时---该代码照着代码随想录卡哥编写的代码写的&#xff0c;题目难度过大&#…

【随记】分享第1期(2024.03.02)

记录这段时间&#xff0c;看到的有趣/有用/值得分享的东西 灵感来源&#xff1a;分类&#xff1a;周刊 - 阮一峰的网络日志 (ruanyifeng.com) 文章目录 大佬博客实用工具文章文摘 大佬博客 云风的 BLOG (codingnow.com) 美团技术团队 (meituan.com) 计算机科学 – 刘未鹏 | Mi…

19.2 DeepMetricFi:基于深度度量学习改进Wi-Fi指纹定位

P. Chen and S. Zhang, "DeepMetricFi: Improving Wi-Fi Fingerprinting Localization by Deep Metric Learning," in IEEE Internet of Things Journal, vol. 11, no. 4, pp. 6961-6971, 15 Feb.15, 2024, doi: 10.1109/JIOT.2023.3315289. 摘要 Wi-Fi RSSI指纹定位…

批次大小对ES写入性能影响初探

问题背景 ES使用bulk写入时每批次的大小对性能有什么影响&#xff1f;设置每批次多大为好&#xff1f; 一般来说&#xff0c;在Elasticsearch中&#xff0c;使用bulk API进行批量写入时&#xff0c;每批次的大小对性能有着显著的影响。具体来说&#xff0c;当批量请求的大小增…

Sqli-labs靶场第13关详解[Sqli-labs-less-13]

Sqli-labs-Less-13 #手工注入 post传参了 根据题目看&#xff0c;像一个登录页面&#xff0c;尝试使用布尔型盲注测试能否登录网站 1. Username输入a 测试是否会有报错&#xff0c;burp抓包 报错&#xff1a;syntax to use near a) and password() LIMIT 0,1 at line 1 分…

【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑

之前跟着《MetaGPT智能体开发入门课程》学了一些MetaGPT的知识和实践&#xff0c;主要关注在MetaGPT入门和单智能体部分&#xff08;系列文章附在文末&#xff0c;感兴趣的可以看下&#xff09;。现在新的教程来了&#xff0c;新教程主要关注多智能体部分。 本系列文章跟随《M…

mysql学习--binlog与gtid主从同步

基础环境 基于centOS7-MySQL8.0.35版本 我们先准备一台主服务器两台从服务器来实现我们主从同步的诉求 Master&#xff1a;192.168.75.142 slave1:192.168.75.143 slave&#xff1a;192.168.75.145 binlog主从同步 主库配置 #我们需要在主从库中都需要添加server_id&am…

[C++]AVL树怎么转

AVL树是啥 一提到AVL树&#xff0c;脑子里不是旋了&#xff0c;就是悬了。 AVL树之所以难&#xff0c;并不是因为结构难以理解&#xff0c;而是因为他的旋转。 AVL树定义 平衡因子&#xff1a;对于一颗二叉树&#xff0c;某节点的左右子树高度之差&#xff0c;就是该节点的…

STM32 串口通信

串口发原理 在stm32每个串口内部有发送寄存器和发送移位寄存器。 当调用HAL_UART_Transmit 时&#xff0c;cpu会将发送的数据放入发送寄存器中。发送移位寄存器会将数据转换成电平的高低&#xff0c;从TX发出。 1、轮询模式配置、发送与接收 轮询模式时cpu会不断检测发送数…

【MATLAB源码-第150期】基于matlab的开普勒优化算法(KOA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 开普勒优化算法&#xff08;Kepler Optimization Algorithm, KOA&#xff09;是一个虚构的、灵感来自天文学的优化算法&#xff0c;它借鉴了开普勒行星运动定律的概念来设计。在这个构想中&#xff0c;算法模仿行星围绕太阳的…
最新文章