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.mzph.cn/news/714775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

steam++加速问题:出现显示443端口被 vmware-hostd(9860)占用的错误。

目录 前言: 正文: 前言: 使用Steam对GitHub进行加速处理时,建议使用2.8.6版本。 下载地址如下:Release 2.8.6 BeyondDimension/SteamTools GitHub 下载时注意自己的系统位数 正文: 使用GitHub时会使…

NOC2023软件创意编程(学而思赛道)python初中组初赛真题

软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认定的选手所属学段为准。 二、…

Mybatis-Plus+SpringBoot多数据源注解方式@DS

前言 最近接到一个新需求需要处理多数据源的问题 &#xff0c;今天就来和大家一起学习一下。 一、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; <!--配置多数据源--><dependency><groupId>com.baomidou</groupId><artif…

蓝桥杯Java B组历年真题(2013年-2021年)

一、2013年真题 1、世纪末的星期 使用日期类判断就行&#xff0c;这里使用LocalDate&#xff0c;也可以使用Calendar类 答案 2099 使用LocalDate import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 1:无需package // 2: 类名必须Main, 不可修改p…

常见问题和解决方案

OOM overview 发现监控告警 定位日志java.lang.OutOfMemoryError 避免参数配置代码规范 example jvm性能调优实战 -55RPC调用引发的OOM故障-阿里云开发者社区 (aliyun.com) 发现监控告警 定位日志java.lang.OutOfMemoryErrorA rpc BMAT打开堆快照文件分析histogram右击看引…

CentOS7 Hive2.3.8安装

CentOS7 Hive2.3.8 安装 建议从头用我的博客&#xff0c;如果用外教的文件到 一、9)步骤了&#xff0c;就用他的弄完&#xff0c;数据库不一样&#xff0c;在9步骤前还能继续看我的 一、 安装MySQL 0.0&#xff09;查询mariadb,有就去0.1&#xff09;&#xff0c;没有就不管…

python3装饰器

装饰器 它允许你修改函数或类的行为&#xff0c;而不更改其源代码。实质上&#xff0c;装饰器是接受另一个函数作为参数并返回一个包装原始函数的新函数。这样&#xff0c;你可以在不修改原始函数的情况下&#xff0c;添加一些额外的功能或逻辑。 def time_cost(func):"…

排队接水问题

时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 有n个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为Ti&#xff0c;请编程找出这n个人排队的一种顺序&#xff08;若有多种顺序则编号小的在前&#xff09;&#xff0c; 使得n个人的平均时间…

ARCGIS进行视域分析及地形图制作

问题说明 开发商要在本区域建造观景亭,希望在观景亭上能看到优美的景色。根据提供的数据,完成以下要求。 一、 数据说明(见“题目3”文件夹) 1. DEM.tif:研究区域的数据高程模型数据。 2. 观察点.shp:需要建造观景亭的位置。

美团分布式 ID 框架 Leaf 介绍和使用

一、Leaf 在当今日益数字化的世界里&#xff0c;软件系统的开发已经成为了几乎所有行业的核心。然而&#xff0c;随着应用程序的规模不断扩大&#xff0c;以及对性能和可扩展性的需求不断增加&#xff0c;传统的软件架构和设计模式也在不断地面临挑战。其中一个主要挑战就是如…

学生云服务器_学生云主机_学生云数据库_云+校园特惠套餐

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

自注意力机制(Self-Attention)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站&#xff08;【http://www.aideeplearning.cn】&#xff09; Transformer模型中最关键部分就是自注意力&#xff08;Self-Attention&#xff09;机制&#xff0c;正如 Transformer 的论文的标题是“…

【Vue3】函数式编程(h 函数)

h 函数的原理就是 createVNode。可以使用 h 函数封装一些小组件。 <template><table border><tr><th>name</th><th>age</th><th>操作</th></tr><tr v-for"item in list" :key"item.age"&…

shell封装

shift 命令用于对参数的移动(左移)&#xff0c;通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理&#xff08;常见于Linux中各种程序的启动脚本&#xff09; shift(shift 1) 命令每执行一次&#xff0c;变量的个数($#)减一&#xff0c;移动2位可以 执行…

数据结构实现-线性表

顺序存储 #include<iostream> using namespace std; #define MaxSize 50 //静态顺序表 template<typename ElemType> struct sqList{ElemType data[MaxSize];//元素int length;//长度 }; //动态顺序表 #ifdef DEBUG //关闭启用 #define InitSize 100 template<…

嵌入式LINUX移植、配置ssh

编译 https://quantum6.blog.csdn.net/article/details/136299665 编译时指定prefix&#xff0c;产生的文件会自带这个目录。所以直接忽略。 ./configure# 不指定编译路径&#xff0c;手动复制。 复制 编译后的整个目录打包&#xff0c;复制到开发板。写个脚本&#xff0c…

kamacoder13.镂空三角形的C语言解法

13. 镂空三角形 时间限制&#xff1a;1.000S 空间限制&#xff1a;32MB 题目描述 把一个字符三角形掏空&#xff0c;就能节省材料成本&#xff0c;减轻重量&#xff0c;但关键是为了追求另一种视觉效果。在设计的过程中&#xff0c;需要给出各种花纹的材料和大小尺寸的三角…

零拷贝技术深入分析

一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析&#xff0c;但没有举例子&#xff0c;也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中&#xff0c;以文件通过网络传输为例 &#xff0c;一般会经历以…

go语言是如何连接mysql数据库的?

在 Go 语言中连接 MySQL 数据库通常使用第三方库。目前比较流行的 MySQL 客户端库包括 github.com/go-sql-driver/mysql、github.com/go-xorm/xorm、github.com/jmoiron/sqlx 等。下面是一个使用 github.com/go-sql-driver/mysql 库连接 MySQL 数据库的简单示例&#xff1a; 首…

GOPATH set to GOROOT (/usr/local/go) has no effect

这个警告信息指出 GOPATH 环境变量被设置为与 GOROOT 相同的值。GOPATH 环境变量用于指定 Go 工作区的位置&#xff0c;而 GOROOT 指定 Go 安装的位置。将 GOPATH 设置为 GOROOT 表示 Go 工作区和 Go 安装位置位于同一目录&#xff0c;这是不推荐的。为了解决此问题&#xff0c…