java架构师面试题——网络篇

2020年Java架构师全套面试题集锦(含答案),让你的面试之路畅通无阻! 2020年Java架构师全套面试题集锦(含答案),让你的面试之路畅通无阻!,因为有了它,足以应对目前市面上绝大部分的 Java 面试了,因为这篇文章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了。 包含的模块 本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、M 阅读详情

1,HTTP 响应码有哪些?分别代表什么含义?

200:成功,Web 服务器成功处理了客户端的请求。

301:永久重定向,当客户端请求一个网址的时候,Web 服务器会将当前请求重定向到另一个

网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。

302:临时重定向,搜索引擎会抓取重定向后网页的内容而保留旧的网址,因为搜索引擎认为

重定向后的网址是暂时的。

400:客户端请求错误,多为参数不合法导致 Web 服务器验参失败。

404:未找到,Web 服务器找不到资源。

500:Web 服务器错误,服务器处理客户端请求的时候发生错误。

503:服务不可用,服务器停机。

504:网关超时。

2,Forward 和 Redirect 的区别?

浏览器 URL 地址:Forward 是服务器内部的重定向,服务器内部请求某个 servlet,然后获取

响应的内容,浏览器的 URL 地址是不会变化的;Redirect 是客户端请求服务器,然后服务器给

客户端返回了一个 302 状态码和新的 location,客户端重新发起 HTTP 请求,服务器给客户端

响应 location 对应的 URL 地址,浏览器的 URL 地址发生了变化。

数据的共享:Forward 是服务器内部的重定向,request 在整个重定向过程中是不变的,

request 中的信息在 servlet 间是共享的。Redirect 发起了两次 HTTP 请求分别使用不同的

request。

请求的次数:Forward 只有一次请求;Redirect 有两次请求。

3, Get 和 Post 请求有哪些区别?

用途:

get 请求用来从服务器获取资源

post 请求用来向服务器提交数据

表单的提交方式:

get 请求直接将表单数据以 name1=value1&name2=value2 的形式拼接到 URL 上(http://www.

baidu.com/action?name1=value1&name2=value2),多个参数参数值需要用 & 连接起来并

且用 ? 拼接到 action 后面;

post 请求将表单数据放到请求头或者请求的消息体中。

传输数据的大小限制:

get 请求传输的数据受到 URL 长度的限制,而 URL 长度是由浏览器决定的;

post 请求传输数据的大小理论上来说是没有限制的。

参数的编码:

get 请求的参数会在地址栏明文显示,使用 URL 编码的文本格式传递参数;

post 请求使用二进制数据多重编码传递参数。

缓存:

get 请求可以被浏览器缓存被收藏为标签;

post 请求不会被缓存也不能被收藏为标签。

4,说说 TCP 与 UDP 的区别,以及各自的优缺点

1、TCP面向连接(如打电话要先拨号建立连接):UDP是无连接的,即发送数据之前不需要建立连

接。

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序

到达;UDP尽最大努力交付,即不保证可靠交付。tcp通过校验和,重传控制,序号标识,滑动窗

口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通

信。

4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP对系统资源要求较多,UDP对系统资源要求较少。

5,说一下 HTTP 和 HTTPS 的区别

端口不同:HTTP和 HTTPS 的连接方式不同没用的端口也不一样,HTTP是80, HTTPS 用的是443

消耗资源:和HTTP相比,HTTPS通信会因为加解密的处理消耗更多的CPU和内存资源。

开销: HTTPS 通信需要证书,这类证书通常需要向认证机构申请或者付费购买。

6,说说HTTP、TCP、Socket 的关系是什么?

TCP/IP 代表传输控制协议/网际协议,指的是一系列协议族。

HTTP 本身就是一个协议,是从 Web 服务器传输超文本到本地浏览器的传送协议。

Socket 是 TCP/IP 网络的 API ,其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在

Socket 接口后面。对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指

定的协议。

综上所述:

需要 IP 协议来连接网络

TCP 是一种允许我们安全传输数据的机制,使用 TCP 协议来传输数据的 HTTP 是 Web 服务器

和客户端使用的特殊协议。

HTTP 基于 TCP 协议,所以可以使用 Socket 去建立一个 TCP 连接。

7,说一下HTTP的长连接与短连接的区别

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

短连接

在HTTP/1.0中默认使用短链接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连

接,但任务结束就中断连接。如果客户端访问的某个HTML或其他类型的Web资源,如 JavaScript

文件、图像文件、 CSS 文件等。当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话.

长连接

从HTTP/1.1起,默认使用长连接,用以保持连接特性。在使用长连接的情况下,当一个网页打开完

成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭。如果客户端再次访问这个服务

器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时

间,可以在不同的服务器软件(如Apache)中设定这个时间。

8,TCP 为什么要三次握手,两次不行吗?为什么?

TCP 客户端和服务端建立连接需要三次握手,首先服务端需要开启监听,等待客户端的连接请

求,这个时候服务端处于“收听”状态;

客户端向服务端发起连接,选择 seq=x 的初始序列号,此时客户端处于“同步已发送”的状态;

服务端收到客户端的连接请求,同意连接并向客户端发送确认,确认号是 ack=x+1 表示客户

端可以发送下一个数据包序号从 x+1 开始,同时选择 seq=y 的初始序列号,此时服务端处

于“同步收到”状态;

客户端收到服务端的确认后,向服务端发送确认信息,确认号是 ack=y+1 表示服务端可以发

送下一个数据包序号从 y+1 开始,此时客户端处于“已建立连接”的状态;

服务端收到客户端的确认后,也进入“已建立连接”的状态。

从三次握手的过程可以看出如果只有两次握手,那么客户端的起始序列号可以确认,服务端的起始

序列号将得不到确认。

9,说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?

上文中讲 TCP 和 UDP 区别的时候提到 TCP 传输数据基于字节流,从应用层到 TCP 传输层的多个数

据包是一连串的字节流是没有边界的,而且 TCP 首部并没有记录数据包的长度,所以 TCP 传输数

据的时候可能会发送粘包和拆包的问题;而 UDP 是基于数据报传输数据的,UDP 首部也记录了数

据报的长度,可以轻易的区分出不同的数据包的边界。

接下来看下 TCP 传输数据的几种情况,首先第一种情况是正常的,既没有发送粘包也没有发生拆

包。

第二种情况发生了明显的粘包现象,这种情况对于数据接收方来说很难处理。

接下来的两种情况发生了粘包和拆包的现象,接收端收到的数据包要么是不完整的要么是多出来一

块儿。

造成粘包和拆包现象的原因:

TCP 发送缓冲区剩余空间不足以发送一个完整的数据包,将发生拆包;

要发送的数据超过了最大报文长度的限制,TCP 传输数据时进行拆包;

要发送的数据包小于 TCP 发送缓冲区剩余空间,TCP 将多个数据包写满发送缓冲区一次发送出

去,将发生粘包;

接收端没有及时读取 TCP 发送缓冲区中的数据包,将会发生粘包。

粘包拆包的解决方法:

发送端给数据包添加首部,首部中添加数据包的长度属性,这样接收端通过首部中的长度字段

就可以知道数据包的实际长度啦;

针对发送的数据包小于缓冲区大小的情况,发送端可以将不同的数据包规定成同样的长度,不

足这个长度的补充 0,接收端从缓冲区读取固定的长度数据这样就可以区分不同的数据包;

发送端通过给不同的数据包添加间隔符合确定边界,接收端通过这个间隔符合就可以区分不同

的数据包。

10,TCP 如何保证可靠性

序列号和确认号机制:

TCP 发送端发送数据包的时候会选择一个 seq 序列号,接收端收到数据包后会检测数据包的完整

性,如果检测通过会响应一个 ack 确认号表示收到了数据包。

超时重发机制:

TCP 发送端发送了数据包后会启动一个定时器,如果一定时间没有收到接受端的确认后,将会重新

发送该数据包。

对乱序数据包重新排序:

从 IP 网络层传输到 TCP 层的数据包可能会乱序,TCP 层会对数据包重新排序再发给应用层。

丢弃重复数据:

从 IP 网络层传输到 TCP 层的数据包可能会重复,TCP 层会丢弃重复的数据包。

流量控制:

TCP 发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收

端缓冲区溢出,发送端只能发送接收端可以接纳的数据,为了达到这种控制效果,TCP 用了流量控

制协议(可变大小的滑动窗口协议)来实现。

11,OSI 的七层模型都有哪些?

OSI七层模型一般指开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组

织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系

统提供了一种功能结构的框架。

应用层:各种应用程序协议,比如 HTTP、HTTPS、FTP、SOCKS 安全套接字协议、DNS 域名

系统、GDP 网关发现协议等等。

表示层:加密解密、转换翻译、压缩解压缩,比如 LPP 轻量级表示协议。

会话层:不同机器上的用户建立和管理会话,比如 SSL 安全套接字层协议、TLS 传输层安全协

议、RPC 远程过程调用协议等等。

传输层:接受上一层的数据,在必要的时候对数据进行分割,并将这些数据交给网络层,保证

这些数据段有效到达对端,比如 TCP 传输控制协议、UDP 数据报协议。

网络层:控制子网的运行:逻辑编址、分组传输、路由选择,比如 IP、IPV6、SLIP 等等。

数据链路层:物理寻址,同时将原始比特流转变为逻辑传输路线,比如 XTP 压缩传输协议、

PPTP 点对点隧道协议等等。

物理层:机械、电子、定时接口通信信道上的原始比特流传输,比如 IEEE802.2 等等。

12,浏览器中输入:“www.woaijava.com”之后都发生了什么?

请详细阐述

由域名→IP地址 寻找IP地址的过程依次经过了浏览器缓存、系统缓存、hosts文件、路由器缓

存、 递归搜索根域名服务器。

建立TCP/IP连接(三次握手具体过程)

由浏览器发送一个HTTP请求

经过路由器的转发,通过服务器的防火墙,该HTTP请求到达了服务器

服务器处理该HTTP请求,返回一个HTML文件

浏览器解析该HTML文件,并且显示在浏览器端

这里需要注意:

HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先建立TCP/IP连接

可以这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了

网络通信的能力。

两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以

不同的应用层协议来定义的。

13,如何实现跨域?

当浏览器执行 JS 脚本的时候,会检测脚本要访问的协议、域名、端口号是不是和当前网址一致,如

果不一致就是跨域。跨域是不允许的,这种限制叫做浏览器的同源策略,简单点的说法就是浏览器

不允许一个源中加载脚本与其他源中的资源进行交互。那么如何实现跨域呢?

JSONP、CORS方式、代理方式

1 JSONP 方式

script、img、iframe、link、video、audio 等带有 src 属性的标签可以跨域请求和执行资源,

JSONP 利用这一点“漏洞”实现跨域。

<script>

var scriptTag = document.createElement('script');

scriptTag.type = "text/javascript";

scriptTag.src = "http://10.10.0.101:8899/jsonp?callback=f";

document.head.appendChild(scriptTag);

</script>

再看下 jQuery 的写法。

$.ajax({

// 请求域名

url:'http://10.10.0.101:8899/login',

// 请求方式

type:'GET',

// 数据类型选择 jsonp

dataType:'jsonp',

// 回调方法名

jsonpCallback:'callback',

});

// 回调方法

function callback(response) {

console.log(response);

}

JSONP 实现跨域很简单但是只支持 GET 请求方式。而且在服务器端接受到 JSONP 请求后需要设置

请求头,添加 Access-Control-Allow-Origin 属性,属性值为 * ,表示允许所有域名访问,这样浏

览器才会正常解析,否则会报 406 错误。

response.setHeader("Access-Control-Allow-Origin", "*");

2 CORS 方式

CORS(Cross-Origin Resource Sharing)即跨域资源共享,需要浏览器和服务器同时支持,这种

请求方式分为简单请求和非简单请求。

当浏览器发出的 XMLHttpRequest 请求的请求方式是 POST 或者 GET,请求头中只包含 Accept、

Accept-Language、Content-Language、Last-Event-ID、Content-Type(application/x-www-

form-urlencoded、multipart/form-data、text/plain)时那么这个请求就是一个简单请求。

对于简单的请求,浏览器会在请求头中添加 Origin 属性,标明本次请求来自哪个源(协议 + 域名 +

端口)。

GET

// 标明本次请求来自哪个源(协议+域名+端口)

Origin: http://127.0.0.1:8080

// IP

Host: 127.0.0.1:8080

// 长连接

Connection: keep-alive

Content-Type: text/plain

如果 Origin 标明的域名在服务器许可范围内,那么服务器就会给出响应:

// 该值上文提到过,表示允许浏览器指定的域名访问,要么为浏览器传入的 origin,要么为 * 表示

所有域名都可以访问

Access-Control-Allow-Origin: http://127.0.0.1:8080

// 表示服务器是否同意浏览器发送 cookie

Access-Control-Allow-Credentials: true

// 指定 XMLHttpRequest#getResponseHeader() 方法可以获取到的字段

Access-Control-Expose-Headers: xxx

Content-Type: text/html; charset=utf-8

Access-Control-Allow-Credentials: true 表示服务器同意浏览器发送 cookie,另外浏览器也需要

设置支持发送 cookie,否则就算服务器支持浏览器也不会发送。

var xhr = new XMLHttpRequest();

// 设置发送的请求是否带 cookie

xhr.withCredentials = true;

xhr.open('post', 'http://10.10.0.101:8899/login', true);

xhr.setRequestHeader('Content-Type', 'text/plain');

另外一种是非简单请求,请求方式是 PUT 或 DELETE,或者请求头中添加了 Content-

Type:application/json 属性和属性值的请求。

这种请求在浏览器正式发出 XMLHttpRequest 请求前会先发送一个预检 HTTP 请求,询问服务器当

前网页的域名是否在服务器的许可名单之中,只有得到服务器的肯定后才会正式发出通信请求。

预检请求的头信息:

// 预检请求的请求方式是 OPTIONS

OPTIONS

// 标明本次请求来自哪个源(协议+域名+端口)

Origin: http://127.0.0.1:8080

// 标明接下来的 CORS 请求要使用的请求方式

Access-Control-Request-Method: PUT

// 标明接下来的 CORS 请求要附加发送的头信息属性

Access-Control-Request-Headers: X-Custom-Header

// IP

Host: 127.0.0.1:8080

// 长连接

Connection: keep-alive

如果服务器回应预检请求的响应头中没有任何 CORS 相关的头信息的话表示不支持跨域,如果允许

跨域就会做出响应,响应头信息如下:

HTTP/1.1 200 OK

// 该值上文提到过,表示允许浏览器指定的域名访问,要么为浏览器传入的 origin,要么为 * 表示所

有域名都可以访问

Access-Control-Allow-Origin:http://127.0.0.1:8080

// 服务器支持的所有跨域请求方式,为了防止浏览器发起多次预检请求把所有的请求方式返回给浏览器

Access-Control-Allow-Methods: GET, POST, PUT

// 服务器支持预检请求头信息中的 Access-Control-Request-Headers 属性值

Access-Control-Allow-Headers: X-Custom-Header

// 服务器同意浏览器发送 cookie

Access-Control-Allow-Credentials: true

// 指定预检请求的有效期是 20 天,期间不必再次发送另一个预检请求

Access-Control-Max-Age:1728000

Content-Type: text/html; charset=utf-8

Keep-Alive: timeout=2, max=100

// 长连接

Connection: Keep-Alive

Content-Type: text/plain

接着浏览器会像简单请求一样,发送一个 CORS 请求,请求头中一定包含 Origin 属性,服务器的响

应头中也一定得包含 Access-Control-Allow-Origin 属性。

3 代理方式

跨域限制是浏览器的同源策略导致的,使用 nginx 当做服务器访问别的服务的 HTTP 接口是不需要

执行 JS 脚步不存在同源策略限制的,所以可以利用 Nginx 创建一个代理服务器,这个代理服务器的

域名跟浏览器要访问的域名一致,然后通过这个代理服务器修改 cookie 中的域名为要访问的 HTTP

接口的域名,通过反向代理实现跨域。

Nginx 的配置信息:

server {

# 代理服务器的端口

listen 88;

# 代理服务器的域名

server_name http://127.0.0.1;

location / {

# 反向代理服务器的域名+端口

proxy_pass http://127.0.0.2:89;

# 修改cookie里域名

proxy_cookie_domain http://127.0.0.2 http://127.0.0.1;

index index.html index.htm;

# 设置当前代理服务器允许浏览器跨域

add_header Access-Control-Allow-Origin http://127.0.0.1;

# 设置当前代理服务器允许浏览器发送 cookie

add_header Access-Control-Allow-Credentials true;

}

}

前端代码:

var xhr = new XMLHttpRequest();

// 设置浏览器允许发送 cookie

xhr.withCredentials = true;

// 访问 nginx 代理服务器

xhr.open('get', 'http://127.0.0.1:88', true);

xhr.send();

14,TCP 为什么要三次握手,两次不行吗?为什么?

CP 客户端和服务端建立连接需要三次握手,首先服务端需要开启监听,等待客户端的连接请

求,这个时候服务端处于“收听”状态;

客户端向服务端发起连接,选择 seq=x 的初始序列号,此时客户端处于“同步已发送”的状态;

服务端收到客户端的连接请求,同意连接并向客户端发送确认,确认号是 ack=x+1 表示客户

端可以发送下一个数据包序号从 x+1 开始,同时选择 seq=y 的初始序列号,此时服务端处

于“同步收到”状态;

客户端收到服务端的确认后,向服务端发送确认信息,确认号是 ack=y+1 表示服务端可以发

送下一个数据包序号从 y+1 开始,此时客户端处于“已建立连接”的状态;

服务端收到客户端的确认后,也进入“已建立连接”的状态。

从三次握手的过程可以看出如果只有两次握手,那么客户端的起始序列号可以确认,服务端的起始

序列号将得不到确认。

15,说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?

上文中讲 TCP 和 UDP 区别的时候提到 TCP 传输数据基于字节流,从应用层到 TCP 传输层的多个数

据包是一连串的字节流是没有边界的,而且 TCP 首部并没有记录数据包的长度,所以 TCP 传输数

据的时候可能会发送粘包和拆包的问题;而 UDP 是基于数据报传输数据的,UDP 首部也记录了数

据报的长度,可以轻易的区分出不同的数据包的边界。

造成粘包和拆包现象的原因:

TCP 发送缓冲区剩余空间不足以发送一个完整的数据包,将发生拆包;

要发送的数据超过了最大报文长度的限制,TCP 传输数据时进行拆包;

要发送的数据包小于 TCP 发送缓冲区剩余空间,TCP 将多个数据包写满发送缓冲区一次发送出

去,将发生粘包;

接收端没有及时读取 TCP 发送缓冲区中的数据包,将会发生粘包。

粘包拆包的解决方法:

发送端给数据包添加首部,首部中添加数据包的长度属性,这样接收端通过首部中的长度字段

就可以知道数据包的实际长度啦;

针对发送的数据包小于缓冲区大小的情况,发送端可以将不同的数据包规定成同样的长度,不

足这个长度的补充 0,接收端从缓冲区读取固定的长度数据这样就可以区分不同的数据包;

发送端通过给不同的数据包添加间隔符合确定边界,接收端通过这个间隔符合就可以区分不同

的数据包。

16,HTTP1.0、HTTP1.1、HTTP2.0的关系和区别

一,对比

二、HTTP1.0:

浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连

接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

三、HTTP1.1:

HTTP/1.0中默认使用Connection: close。在HTTP/1.1中已经默认使用Connection: keep-alive,避

免了连接建立和释放的开销,但服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保

证客户端能够区分出每次请求的响应内容。通过Content-Length字段来判断当前请求的数据是否已

经全部接收。不允许同时存在两个并行的响应。

四、HTTP2.0:

HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到

数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了

序列,服务器就可以并行的传输数据,这就是流所做的事情。

流(stream) 已建立连接上的双向字节流 消息 与逻辑消息对应的完整的一系列数据帧 帧 HTTP2.0

通信的最小单位,每个帧包含帧头部,至少也会标识出当前帧所属的流(stream id)。 多路复

用:

1、所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流。

2、每个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧可以乱序发送,然后再根据

每个帧头部的流标识符(stream id)重新组装。

举个例子,每个请求是一个数据流,数据流以消息的方式发送,而消息又分为多个帧,帧头部记录

着stream id用来标识所属的数据流,不同属的帧可以在连接中随机混杂在一起。接收方可以根据

stream id将帧再归属到各自不同的请求当中去。

3、另外,多路复用(连接共享)可能会导致关键请求被阻塞。HTTP2.0里每个数据流都可以设置优

先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还可以依赖其他的子

数据流。

4、可见,HTTP2.0实现了真正的并行传输,它能够在一个TCP上进行任意数量HTTP请求。而这个

强大的功能则是基于“二进制分帧”的特性。

头部压缩

在HTTP1.x中,头部元数据都是以纯文本的形式发送的,通常会给每个请求增加500~800字节的负

荷。

HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,

既避免了重复header的传输,又减小了需要传输的大小。高效的压缩算法可以很大的压缩

header,减少发送包的数量从而降低延迟。

服务器推送:

服务器除了对最初请求的响应外,服务器还可以额外的向客户端推送资源,而无需客户端明确的请

求。

17,说说HTTP协议与TCP/IP协议的关系

HTTP的长连接和短连接本质上是TCP长连接和短连接。

HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。

IP协议主要解决网络路由和寻址问题,

TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有

包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。

18,如何理解HTTP协议是无状态的?

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。

也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是

一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是

UDP协议(无连接)。

19,什么是长连接和短连接?

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连

接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的

Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重

新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加

入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连

接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会

永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现

长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

20,长连接和短连接的优缺点?

长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间 。对于频繁请求资源的客户来

说,较适用长连接。不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP

连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场

景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的

话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需

要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致

server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接

数,这样可以完全避免某个蛋疼的客户端连累后端服务。

短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如

果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

21,说说长连接短连接的操作过程

短连接的操作步骤是:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连

接长连接的操作步骤是:建立连接——数据传输...(保持连接)...数据传输——关闭连接

22,说说TCP三次握手和四次挥手的全过程

三次握手

第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二

次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包

(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的

SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入

ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端

与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关

闭连接之前,TCP 连接都将被一直保持下去。

四次挥手

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。 第一次挥手:主动关闭方发送

一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不

会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关

闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。 第二次挥手:被动关闭方收

到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序

号)。 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也

就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。 第四次挥手:主动关闭方收到

FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

23、OSI 的七层模型都有哪些?

OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一

个用于计算机或通信系统间互联的标准体系。

应用层:各种应用程序协议,比如 HTTP、HTTPS、FTP、SOCKS 安全套接字协议、DNS 域名

系统、GDP 网关发现协议等等。

表示层:加密解密、转换翻译、压缩解压缩,比如 LPP 轻量级表示协议。

会话层:不同机器上的用户建立和管理会话,比如 SSL 安全套接字层协议、TLS 传输层安全协

议、RPC 远程过程调用协议等等。

传输层:接受上一层的数据,在必要的时候对数据进行分割,并将这些数据交给网络层,保证

这些数据段有效到达对端,比如 TCP 传输控制协议、UDP 数据报协议。

网络层:控制子网的运行:逻辑编址、分组传输、路由选择,比如 IP、IPV6、SLIP 等等。

数据链路层:物理寻址,同时将原始比特流转变为逻辑传输路线,比如 XTP 压缩传输协议、

PPTP 点对点隧道协议等等。

物理层:机械、电子、定时接口通信信道上的原始比特流传输,比如 IEEE802.2 等等。

24、OSI这样分层有什么好处?

OSI分层的好处可以从五个方面讲:

1. 人们可以很容易的讨论和学习协议的规范细节。

2. 层间的标准接口方便了工程模块化。

3. 创建了一个更好的互连环境。

4. 降低了复杂度,使程序更容易修改,产品开发的速度更快。

5. 每层利用紧邻的下层服务,更容易记住个层的功能。

25、说说TCP/IP四层网络模型

TCP/IP分层模型(TCP/IP Layening Model)被称作因特网分层模型(Internet Layering Model)、因

特网参考模型(Internet Reference Model)。下图表示了TCP/IP分层模型的四层。

TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包

含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议

协同工作。 TCP/IP分层模型的四个协议层分别完成以下的功能:

第一层 网络接口层

网络接口层包括用于协作IP数据在已有网络介质上传输的协议。

协议:ARP,RARP

第二层 网间层

网间层对应于OSI七层参考模型的网络层。负责数据的包装、寻址和路由。同时还包含网间控制报

文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。

协议:本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),ICMP协议。

第三层 传输层

传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。

其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use

Datagram Protocol)提供不可靠的用户数据报服务。

第四层 应用层

应用层对应于OSI七层参考模型的应用层和表达层。

因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协

议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻

传输协议)等。

26、说说域名解析详细过程?

1. 浏览器访问 www.baidu.com,询问本地 DNS 服务器是否缓存了该网址解析后的 IP 地址。

2. 如果本地 DNS 服务器没有缓存的话,就去 root-servers.net 根服务器查询该网址对应的 IP 地

址。

3. 根服务器返回顶级域名服务器的网址 gtld-servers.net,然后本地 DNS 服务器去顶级域名服务

器查询该网址对应的 IP 地址。

4. 顶级域名服务器返回 www.baidu.com 主区域服务器的地址,然后本地 DNS 服务器去 www.ba

idu.com 主区域服务器查询此域名对应的 IP 地址。

5. 本地 DNS 服务器拿到 www.baidu.com 解析后的 IP 地址后,缓存起来以便备查,然后把解析

后的 IP 地址返回给浏览器。

27、 IP 地址分为几类,每类都代表什么,私网是哪些?

大致上分为公共地址和私有地址两大类,公共地址可以在外网中随意访问,私有地址只能在内网访

问只有通过代理服务器才可以和外网通信。

公共地址:

1.0.0.1~126.255.255.254

128.0.0.1~191.255.255.254

192.0.0.1~223.255.255.254

224.0.0.1~239.255.255.254

240.0.0.1~255.255.255.254

私有地址:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

0.0.0.0 路由器转发使用

127.x.x.x 保留

255.255.255.255 局域网下的广播地址

28、说说TCP 如何保证可靠性的?

序列号和确认号机制:

TCP 发送端发送数据包的时候会选择一个 seq 序列号,接收端收到数据包后会检测数据包的完整

性,如果检测通过会响应一个 ack 确认号表示收到了数据包。

超时重发机制:

TCP 发送端发送了数据包后会启动一个定时器,如果一定时间没有收到接受端的确认后,将会重新

发送该数据包。

对乱序数据包重新排序:

从 IP 网络层传输到 TCP 层的数据包可能会乱序,TCP 层会对数据包重新排序再发给应用层。

丢弃重复数据:

从 IP 网络层传输到 TCP 层的数据包可能会重复,TCP 层会丢弃重复的数据包。

流量控制:

TCP 发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收

端缓冲区溢出,发送端只能发送接收端可以接纳的数据,为了达到这种控制效果,TCP 用了流量控

制协议(可变大小的滑动窗口协议)来实现。

架构师职位常见面试题 一、架构师的日常职责是什么? 总体而言,架构师负责软件领域的顶层设计。 架构师需要根据公司的发展,规划企业未来若干年的架构,制定可落地的架构方案,解决技术难题,做技术选型与攻关,落地具体的架构。优秀的架构师既能做架构方案,也能写具体的架构代码。 二、开发工程师和架构师有何区别? 工作重点不同:架构师重点在于前期的架构规划,需要制定可落地的架构方案,结合公司的业务场景、团队的技术水平等因素... 阅读详情

相关推荐

别再乱刷了!《另一个伊甸》异节、改典、典录获取途径完全梳理,这些隐藏奖励你拿全了吗?

本文全面解析《另一个伊甸》中异节、改典、典录的获取途径,包括断章、外传、精灵试炼等高概率掉落副本,以及隐藏任务、限时活动和特殊挑战。提供高效收集策略和优先级建议,帮助玩家快速获取这些稀缺资源,实现角色真证和上限突破。

weixin_42699679的博客 598

JAVA--计算机网络常见面试题

网络分层模型 - OSI七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

Zero摄氏度的博客 1375

Claude Code教程(二) | Claude Code 核心信息与使用指南

Claude Code 核心信息与使用指南

qq_20236937的博客 2186

常见的异常类有哪些?

常见的异常类有哪些? NullPointerException:当应用程序试图访问空对象时,则抛出该异常。 SQLException:提供关于数据库访问错误或其他错误信息的异常。 IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 FileNotFoundException:当试图打开指定路径名表示的文件失败时,

qq_37200262的博客 7935

R | 提取文件夹内栅格数据的最小值、最大值、标准差和平均值

各位同学好,我们长需要用长时间序列栅格数据的平均值做变量的时间变化分析,用代码能够帮助我们省下很多时间。

qq_48539301的博客 450

遗传算法详解 附python代码实现

遗传算法 遗传算法是用于解决最优化问题的一种搜索算法。从名字来看,遗传算法借用了生物学里达尔文的进化理论:”适者生存,不适者淘汰“,将该理论以算法的形式表现出来就是遗传算法的过程。 问题引入 上面提到遗传算法是用来解决最优化问题的,下面我将以求二元函数: def F(x, y): return 3*(1-x)**2*np.exp(-(x**2)-(y+1)**2)- 10*(x/5 - x**3......

ha_ha_ha233的博客 22万+

计算机网络—TCP相关知识总结

文章目录TCP 协议如何保证可靠传输校验和序列号/确认应答超时重传连接管理流量控制拥塞控制TCP 三次握手和四次挥手TCP协议概述三次握手和四次挥手的简单回答三次握手四次挥手为什么连接的时候是三次握手,关闭的时候却是四次握手?为什么要TIME_WAIT如果已经建立了连接,但是客户端突然出现故障了怎么办?TCP 粘包产生原因以及解决方法为什么会出现TCP 粘包何为面向字节流什么是粘包、拆包?粘包产生的常见原因粘包的解决方法基于TCP/UDP协议的应用层协议有哪些TCP和UDP的区别是什么?HTTP 与 HTT

1626

YOLO+OpenCV强强联手:高精度跌倒检测技术实战解析

(0, 1), (0, 2), (1, 3), (2, 4), # 脖子和头部(3, 5), (5, 6), (5, 7), (7, 9), (5,11),# 左臂(4,6), (6, 12), (6,8) ,(8,10),# 右臂(11, 12), (11, 13), (13, 15), #左腿(12, 14), (14, 16) #右腿keypoints是检测到的人体关键点数据,frame是图像帧,boxes是检测到的边界框信息。定义了人体关键点之间的连接关系,用于绘制人体骨架。

yolo模型训练找我,AI游戏合作找我 2317

【Java】面试常问知识点(计算机网络方面)

TCP协议在建立连接时需要进行三次握手,在释放连接时需要进行四次挥手,这是因为TCP协议的设计目标是保证可靠性,防止数据丢失或错误。在三次握手的过程中,第一次握手是客户端向服务器发送SYN报文,服务器返回SYN+ACK报文,这样服务器就知道了客户端的接收能力和请求连接的意愿;第二次握手是服务器向客户端发送ACK报文,并确认客户端的请求,这样客户端就确认了服务器的接收能力和请求连接的意愿;第三次握手是客户端再次向服务器发送ACK报文,完成了三次握手,建立了连接。

weixin_46601559的博客 531

Windows 下 OpenClaw(小龙虾) 安装全记录:从零到一的保姆级图文教程(持续更新中)

本文主要介绍了Windows 下 OpenClaw 安装全记录:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装Node.js 2.2 步骤二:安装并配置OpenClaw 2.3 步骤三:配置模型 2.4 步骤四:对话 3. 后续使用步骤

weixin_43178406的博客 16万+

Apache Flink连载(一):Apache Flink是什么?

Apache Flink 是一个框架和分布式处理引擎,用于在。

qq_32020645的博客 1216

【2022最新Java面试宝典】—— TCP,UDP,Socket,Http网络编程面试题(47道含答案

无

m0_52184592的博客 1727

地球引擎初级教程:Python API 的安装和介绍

地球引擎的 Python API 提供了许多功能和工具,用于访问和处理地理空间数据。连接到地球引擎在编写地球引擎的 Python 脚本时,首先需要连接到地球引擎服务器。import ee # 初始化地球引擎 ee . Initialize()这将初始化地球引擎并建立与服务器的连接。加载和显示图像使用地球引擎的 Python API,您可以加载和显示卫星图像。import ee# 初始化地球引擎# 加载 Landsat 8 影像# 显示影像print('影像 URL:', url)

UePostscript的博客 1008

Android中高级面试必知必会,最全的BAT大厂面试题整理

前言 作为一个程序员,如果你在新知识、新技术面前仍一无所知,依然吃着十多年前的老本,那你在知识技术上肯定落伍,如果又未能进入管理层面,那你肯定就会被长江的后浪拍在沙滩上了。 而不少与时俱进、善于学习的程序员他们仍是行业的中坚力量。这只是说明当今世界靠一招鲜走遍天下,吃终身的时代已经过去了,一个人必须得活到老学到老才能行走于天下。 我在平时的工作之余也会翻一翻大厂的面试题,让自己时刻保持面试技能,同时也能了解大厂对技术的需求,以备不时之需,“生于忧患,死于安乐”,古人诚不欺我啊。 下面给大家分享一个我自己工作

m0_56255097的博客 112

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java跑批任务防止重复,Java架构师成长路线

第1大技能:程序设计和开发 数据结构和算法:常用数据结构,排序,检索等 面向对象编程、设计模式,掌握建模语言和建模工具:UML、MVC编程思想 高质量编码能力:重用性,低耦合,可扩展性,高性能,可维护性,安全性高 集成开发,版本控制,构建等工具:eclipse, svn, maven 等 脚本语言:Perl,PHP, Ruby, Python, Groovy等 第2大技能:Java开发 Java语言基础:异常处理,泛型,reflection,annotation; Java基本

m0_56255097的博客 166

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

可能是最全的java架构师面试题

架构师必读 最全最新java面试题系列全家桶(带答案) 架构师职位常见面试题 源码分析 常用设计模式 23种经典设计模式都有哪些,如何分类 阿里java设计模式面试题 Spring 框架中都用到了哪些设计模式 开发中都用到了那些设计模式?用在什么场合? 微服务架构的六种常用设计模式是什么? 1、proxy代理模式 2、factory工厂模式 3、singleton单例模式 4、delegate委派...

jovisoft的专栏 2万+

大厂 Java 架构师面试题全解析

在竞争激烈的 Java 开发领域,想要晋升为架构师,面临的面试挑战不容小觑。大厂的面试官往往会从多个维度深入考察候选人的技术功底、架构设计能力、问题解决思维等。以下精心整理了 30 道大厂 Java 架构师面试题,助你一臂之力。

爱好技术的小老头 3541

java架构师面试_Java架构师面试题,试了才知道行不行

前言既然要成为 Java 架构师,首先你要是一个高级Java攻城尸,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池...:;Java反射技术,写框架必备的技术,但是有严重的性能问题,替代方案Java字节码技术;nio,没什么好说的,值得注意的是"直接内存"的特点,使用场景;Java多线程同步异步;总之一句话越基...

weixin_29181861的博客 2405

java架构师面试题及答案

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

m0_60721649的博客 2304

JAVA架构师面试题,如何成为架构师

** JAVA架构师面试题,如何成为架构师 ** 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的状态 进程和线程的区别,进程间如何通讯,线程间如何通讯 HashMap的数据结构是什么?如何实现的。和HashTable,ConcurrentHashMap的区别 Cookie和Session...

qq_39159227的博客 149

Java面试题以及答案精选(架构师面试题)

整理中…未整理完 大家好,本人面试基本 “笔试死”、问"基础死"、"Java常识死"那一类型的…面试的过程中也从曾经被“鄙视”过,被否定过,但是这些并不能否定我们的一个价值,笔试或者基础成为面试环节中的重要一环,为什么不整理一下,好好准备呢? 我们要正确认识"笔试"的意图:即使做不好也没关系,在之后的面试当中表现好也是有 机会的 。(我面试时从来没有做完过一套题,只是选择其中1-2道认真作答,然后手机百度试卷上其他不会的知识点但是不会再作答,只是掌握不会的知识点,不建议和我学哈) 这几天面试了众多公司,涉及

m0_67265464的博客 1110

Java架构师面试宝典(含答案)

双十一秒杀高可靠如何实现? Sentinel承接了阿里10年的促销场景,利用:流量控制(通过设置QPS来控制),容错(熔断就是切断坏路,让后续新流量再走这个坏路),降级(备选B角,走了try-cath的机制,),三板斧解决高可靠。熔断机制:通过滑动时间窗口实现的,对前一段时间的错误比例来设置熔断点。

Peter_Changyb的博客 2万+

JAVA资深架构师成长路线->架构师筑基必备技能->网络编程与高效IO

文章目录JAVA资深架构师成长路线大纲网络编程与高效IO JAVA资深架构师成长路线大纲 JAVA资深架构师成长路线大纲 网络编程与高效IO

weixin_42213903的博客 506

【火爆全网】2024年Java分布式系统专题面试宝典——年薪百万Java架构师的必备秘籍!

分布式系统是由一组通过网络进行通信的计算机组成,这些计算机共同完成一项任务。它们通过消息传递协作工作,每个节点都完成部分工作。

赵KK的博客 987

阿里面试官内部题库,阿里发布2022年Java岗(正式版)面试题

阿里巴巴2022年Java架构师岗面试题(正式版) 这不马上就是金三银四的面试跳槽季了嘛,小编也是通过一些小手段为大家拿到了一份阿里巴巴2022年Java架构师岗面试题(正式版)现在分享给大家,这份资料也是阿里面试官或者说业界的一份面试参考准则!需要这份资料的朋友麻烦帮忙点赞+关注之后,然后私信我【面试】获取就可以! 大致目录参考 JVM篇 JVM在执行Java程序时,会把它管理的内存划分为若干个的区域,每个区域都有自己的用途和创建销毁时间。如下图所示,可以分为两大部分,线程私有区和

wdjnb的博客 1918
上一篇: java架构师面试题——分布式篇
下一篇: java架构师面试题——设计模式篇
杜引强
博客等级 码龄13年 806粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值