【八股】【计算机网络】

这里写目录标题

  • OSI 的七层模型
  • TCP/IP模型
  • HTTP 是什么?
  • HTTP状态码
  • HTTP 常见字段
  • GET 和 POST 有什么区别?
  • GET 和 POST 方法都是安全和幂等的吗?
  • HTTP 缓存
  • HTTP 优缺点
  • HTTP 性能
  • HTTP 与 HTTPS
  • HTTPS
  • HTTPS连接过程与一定可靠吗
  • HTTP演进版本
    • HTTP/1.1 与 HTTP/1.0
    • HTTP/2 与 HTTP/1.1
    • http2缺陷
  • http3

OSI 的七层模型

OSI是Open System Interconnect,也就是开放式系统互联,它是国际标准化组织ISO在80年代发布的一个网络互连模型。它把通信协议中必要的部分分成了 7 层,由下到上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。它们的每一层向下使用服务,向上提供服务。不同节点的对等层按照协议来实现它们之间的通信。OSI七层模型最大的优点就是把服务、接口还有协议这三个概念明确的区分开了,通过模型可以让不同系统的网络之间实现可靠的数据传输.

1、物理层
物理层是模型的最底层,它的主要功能是利用传输介质为数据链路层提供物理连接,实现相邻计算机节点之间比特流的透明传输。
我的理解:它是用光缆、双绞线、无线电波等方式把电脑连接起来的一种物理手段,它负责传送0和1组成的电信号。
此时传输的数据是比特流。

2、数据链路层
数据链路层是OSI模型的第二层,它负责建立和管理节点间的链路。比如从物理层过来的0和1没有意义,必须要指定解读的方式。还有就是把从网络层接到的数据分割成能被物理层传输的帧。也就是提供可靠的通过物理介质传输数据的方法。
此时传输的数据是帧。

3、网络层
网络层是OSI模型的第三层,它在下两层的基础上向上面的资源子网提供服务。它的主要功能是在数据链路层提供的数据帧传送功能上,控制数据链路层和传输层之间的信息转发,然后建立、维护网络的连接,把数据从源端经过若干个中间节点安全传送到目的端,从而向传输层提供最基本的端到端的数据传输服务。
数据链路层的目的是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。
大白话来说网络层其实就是建立了主机到主机的通信。
此时传输的数据是包。

4、传输层
传输层是OSI模型的第4层,模型下3层的任务是数据通信,上3层的任务是数据处理。传输层主要起承上启下的作用,它向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。
我的理解就是我们现在已经有了MAC地址和IP地址,但是还需要一个参数来表示这个数据包到底是这个节点的哪个进程在使用,那这个参数其实就是端口了,那有了这个端口,我们就能实现端到端通信了。
此时传输的数据是tcp报文段 、udp用户数据报。

5、会话层
会话层是OSI模型的第5层,它的主要功能是组织协调两个会话进程之间的通信 ,并对数据交换进行管理。
我的理解是,经过下面几层,我们已经能够建立主机端到端的通信了,但是还需要明确什么时候来建立连接、建立后要保持多久的连接、什么时候断开连接这些问题,那会话层其实就是做了这个工作。

6、表示层
表示层是OSI模型的第六层,它的主要功能是充当应用程序和网络之间的翻译角色,它要处理用户信息的表示问题,如数据的编码、数据格式转换、加密解密等问题。

7、应用层
应用层是OSI参考模型的最高层,它是用户和网络的直接接口,它会提供各种应用层协议来让用户能够与网络进行交互式联系。也就是为应用软件提供接口,让应用程序能够使用网络服务。

TCP/IP模型

TCP/IP模型分为4层结构,从下到上分别依次是网络接口层、网络层、传输层、应用层、
对于同一台设备上的进程来说,它们之间通信有很多种方式,比如有管道、消息队列、共享内存等等,而对于不同设备上的进程间通信,就需要网络通信,因为设备是多样性的有很多种,为了要兼容各种设备上的进程进行通信,就协商出了一套通用的网络协议。这个网络协议是分层的,每一层都有各自的作用和职责。
应用层
首先最上层是我们能直接接触到的就是应用层,我们电脑或手机使用的各种软件和app都是在应用层实现的。它专注于为我们用户来提供应用功能,比如 HTTP、FTP、Telnet等。
应用层是不会去关心数据是如何传输的,当两个不同设备的应用需要通信的时候,应用就把数据传给下一层的传输层。就类似我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关心快递是如何被运输的。
传输层
传输层是为应用层提供网络支持的,它会接收来自用户层的数据包。
在传输层会有两个比较重要的传输协议,分别是 TCP 和 UDP。
TCP 的全称叫传输控制协议,大部分应用使用的正是 TCP 传输层协议,比如 HTTP协议。TCP 相比 UDP 有很多特性,比如流量控制、拥塞控制、超时重传等,这些都是为了保证数据包能可靠地传输给对方。
而UDP 相对来说就简单一些,它只负责发送数据包,而不保证数据包是否成功能抵达接收方。它的实时性和传输效率比较高,但不能保证可靠性。
网络层
传输层主要是用来服务应用的,也就是实现应用到应用间的通信,而实际的传输功能是由网络层来负责的。网络层里面使用比较多的是 IP 协议,IP 协议会把传输层的报文加上 IP 包头组装成 IP 报文,然后进行路由寻址发往这个包的目的地。
网络接口层
网络接口层主要工作在网卡这个层次,它负责在以太网、WiFi 这样的底层网络上发送原始数据包,使用 MAC 地址来标识网络上的设备。网络接口层会在数据包的最前面,也就是IP 头部之前加上 MAC 头部,并封装成数据帧发送到网络上。

HTTP 是什么?

HTTP 超文本传输协议,也就是HyperText Transfer Protocol。
关于超文本传输协议,可以这么来看,首先它是一个在计算机世界里两点之间传输数据的约定和规范。只不过它传输的是超文本数据,那所谓超文本数据指的是它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。所以概括性地来讲,HTTP超文本传输协议是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。

HTTP状态码

http状态码可以分为五类:
1xx 类状态码是临时性响应,它属于提示信息,实际用到的比较少。
2xx 类状态码表示服务器成功处理了客户端的请求。

比如常见的[200 OK」表示一切正常。
[204 No Content」它和200 OK 基本相同,但响应头里面没有 body 数据。

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,其实通常就是重定向。

比如「301」永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次来访问,浏览器会自动重定向到新的 URL。
「302」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
「304」表示资源没有被改过,客户端可以继续使用缓存资源。

4xx 类状态码表示客户端发送的报文有误,服务器无法处理,这就已经是错误码了。

比如「403 Forbidden」表示服务器禁止访问这个资源,并不是客户端的请求出错。
还要最常见的「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以服务器给不了我们。

5xx 类状态码表示客户端请求的报文没问题,但是服务器处理时内部发生了错误,属于服务器端的错误码。

「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。

HTTP 常见字段

host字段,客户端发送请求时,用host来指定服务器的域名。
Content-Type 字段,用于服务器响应时告诉客户端,本次响应的数据是什么格式。
Content-Length 字段,服务器返回数据时,用 Content-Length 来表明本次响应的数据长度。

GET 和 POST 有什么区别?

GET 和 POST 其实都是 HTTP 的请求方法。

get请求一般用来请求获取资源,这个资源可以是静态文本、页面、图片视频等等。
post请求一般是根据请求对指定资源做出处理,比如提交数据、创建数据。

get请求的参数会显示在地址栏,安全性低,而且浏览器可能也会对参数长度进行限制
post请求则是将传递的参数放在请求体里面,不会在地址栏显示,安全性比get请求高,参数没有长度限制。

get请求刷新服务器或者回退没有影响
post请求回退时会重新提交数据请求。

GET 和 POST 方法都是安全和幂等的吗?

在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源。
所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的。

那GET 方法是安全而且幂等的,因为它是「只读」操作,无论读多少次,服务器上的数据都是安全而且不会变的。
POST 的语义是根据请求对指定的资源做出处理。POST 不安全,不幂等。

而且从另外一个角度讲,get请求的参数会显示在地址栏上,这的确可能会导致安全性低,但是HTTP 传输的内容都是明文的,虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。
所以,要避免传输过程中数据被窃取,就要使用 HTTPS 协议,这样所有 HTTP 的数据都会被加密传输。

HTTP 缓存

HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存。

强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。
强缓存是利用Cache-Control和Expires这两个 HTTP 响应头部字段实现的,Cache-Control 的优先级高于 Expires。
当浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在 Response 头部加上 Cache-Control并设置过期时间大小;
浏览器第二次访问这个资源时,会先通过请求资源的时间和 Cache-Control 中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器;服务器再次收到请求后,会再次更新 Response 头部的 Cache-Control。

协商缓存一般是在没有命中强制缓存的时候,才会进行协商缓存。我们有些请求的响应码是 304,这个就是服务器告诉浏览器可以使用本地缓存的资源,这种其实就是协商缓存。
协商缓存由 Last-Modified / IfModified-Since, Etag /If-None-Match实现,每次请求需要让服务器判断一下资源是否更新过,从而决定浏览器是否使用缓存,如果是,则返回 304,否则重新完整响应。

HTTP 优缺点

HTTP 最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。HTTP 基本的报文格式是 header + body,头部信息也是 key-value 的形式,易于理解。
HTTP 协议里有两个重要的特性分别是无状态和明文传输。
无状态
无状态的好处就是服务器不会去存 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担。但缺点是,由于服务器没有记忆能力,那它在完成有关联性的操作时会比较麻烦。
比如电商登录、下单、结算这系列操作都需要知道用户的身份,但服务器不知道这些请求是有关联的,每次都要验证身份,那这肯定不行。对于无状态的问题,简单的解决方法就是 Cookie。

明文传输
明文意味着在传输过程中的信息比较方便阅读,这就为我们调试带了极大的便利性。缺点就是信息都暴露了。在传输的过程中,信息可能会被窃取。

HTTP 性能

HTTP的性能主要是看连接、请求和应答的这个过程。
早期 HTTP/1.0版本时有一个很大的问题,就是每发起一个请求,都要新建一次 TCP 连接,这会增加许多开销。
在1.1 版本里新增了长连接的通信方式,只要任意一端没有明确提出断开连接,就保持 TCP 连接状态。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
还有就是管道网络传输。然后因为1.1 版本采用了长连接的方式,也改进了请求的模式,早先的请求的方式是在同一个 TCP 连接里面,发送了 A 请求,只有收到服务器的会应后才能再发出 B 请求。那现在是可以连续发多个请求,不用再请求阻塞了,可以减少整体的响应时间。但也有个问题就是服务器的响应问题,如果服务面器在处理前面的请求时耗时比较长,那么后面请求的处理都会被阻塞住。

HTTP 与 HTTPS

HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。
HTTPS 在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。
而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

HTTP 默认端口号是 80,HTTPS 默认端口号是 443。

HTTPS 协议需要向证书权威机构申请数字证书,来保证服务器的身份是可信的

HTTPS

HTTP 由于是明文传输,所以安全上存在三个风险:
1、窃听风险,比如通信链路上可以获取通信内容,用户信息泄漏。
2、篡改风险,比如改变网站,强制植入垃圾广告。
3、冒充风险,比如冒充支付网站,骗取用户钱财。
HTTPS主要使用三个方法来解决安全问题。
1、信息混合加密
HTTPS 的混合加密指的是对称加密和非对称加密结合方式,主要是为了保证信息的机密性,它会在通信建立前采用非对称加密的方式来交换「会话秘钥」。之后的通信过程中全部使用对称加密的「会话秘钥」方式来加密明文数据。
2、摘要算法 + 数字签名
为了保证传输的内容不被篡改,计算机会用摘要算法来计算出内容的唯一哈希值,然后同内容一起传输给对方。对方收到后,也会对内容计算出哈希值,只有这两个哈希值相同才说明内容没有被篡改,否则就判断出内容被篡改了。
通过哈希算法可以确保内容不会被篡改,但是并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明。那为了避免这种情况,计算机里会用非对称加密算法来解决,私钥由服务端保管,私钥加密对内容的哈希值加密,然后服务端会向客户端颁发对应的公钥。如果客户端收到的信息,能被公钥解密,就说明该消息是由服务器发送的。
3、数字证书
数字证书指的是服务器把自己的公钥注册到数字证书认证机构CA里,CA用自己的私钥为服务器的公钥数字签名然后颁发数字证书。客户端拿到服务器的数字证书之后用CA的公钥检查这个数字证书的真实性。如果确认无误,就从数字证书里拿出来服务器的公钥,用公钥对报文加密然后发出去,最后服务器用自己的私钥来解密。

HTTPS连接过程与一定可靠吗

HTTP演进版本

HTTP/1.1 与 HTTP/1.0

1.1使用长连接的方式改善了 1.0 短连接造成的性能开销。
支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

服务器是按请求的顺序响应的,如果服务器响应慢,会导致客户端一直请求不到数据,也就是队头阻塞;
1.1请求和响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
没有请求优先级控制;
请求只能从客户端开始,服务器只能被动响应。

HTTP/2 与 HTTP/1.1

头部压缩
HTTP/2 会压缩Header,同时发出多个请求,它们的Healer是相似的,那么协议会自动消除重复的部分。

二进制格式
HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且叫做头部帧和数据帧。因为计算机只懂二进制,那么在收到报文后,就无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。

并发传输
在 HTTP/1.1 里的同一个连接中,HTTP 只有完成一个请求响应,才能处理下一个请求响应,这就容易造成队头阻塞的问题。
而 HTTP/2 引出了 Stream 概念, 1 个 TCP 连接会包含多个 Stream,每个Stream 里可以包含 n个Message,Message 对应 HTTP/1 中的请求或响应。Message 里有n个 Frame,Frame 是 HTTP/2 最小单位,以二进制压缩格式存放 HTTP/1 中的内容(头部和包体)。不同的 HTTP 请求它们的 Stream ID 也不一样,接收端可以通过 Stream ID 有序组装成 HTTP 消息,不同 Stream 的帧是可以乱序发送的,可以并发不同的 Stream ,所以 HTTP/2 可以并行交错地发送请求和响应。

服务器推送
HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务端不再是被动地响应,可以主动向客户端发送消息。客户端和服务器双方都可以建立 Stream, Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。

http2缺陷

http3

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

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

相关文章

湖大CG满分教程:作业训练三编程题15. 公交系统

【问题描述】 城市公交系统有一个记录仪,用于记录每个站点的乘客人数的变化情况,例如:x表示到站前公交车上的乘客人数,y表示离站时公交车上的乘客人数,则该记录仪记录的该站的数字为y-x。 对于一辆公交车和n个车站&…

解决R语言读取数据自动置换符号问题,例如把TCGA样本中的-读取为·

解决方案 在使用R语言read.csv()函数读取csv文件时&#xff0c;会自动把TCGA样本中的-替换为.&#xff0c;为后续数据处理带来不便。 解决方法&#xff1a;在函数中添加check.namesFALSE data <- read.csv("file.csv",check.namesFALSE)具体解释 check.names是…

C# List 详解二

目录 5.Clear() 6.Contains(T) 7.ConvertAll(Converter) ,toutput> 8.CopyTo(Int32, T[], Int32, Int32) 9.CopyTo(T[]) 10.CopyTo(T[], Int32) C# List 详解一 1.Add(T)&#xff0c;2.AddRange(IEnumerable)&#xff0c;3.AsReadOnly()&…

pytorch创建和操作tensor

import torch import numpy as np### 1. 由函数创建 x torch.zeros(5, 3, dtypetorch.int64) # 指定数据类型 print(x.dtype) x torch.zeros(5, 3) # 默认数据类型为torch.float32 print(x.dtype)x torch.rand(5, 3)x torch.torch.ones(10,2,3) x torch.empty(5, 3)# Re…

Matlab的GUI设计

文章目录 AppDesigner各个版本的特点mlapp文件基本格式AppDesigner的回调函数常见控件的属性MVC模式MVC模式设计GUIMVC简单使用 其他让app designer置顶将Guide的GUI导出为m文件将app编译为exe将app中的多个控件组合在一起 AppDesigner 20200328 各个版本的特点 在2017b版本中…

【JavaEE】Spring中注解的方式去获取Bean对象

【JavaEE】Spring的开发要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】Spring的开发要点总结&#xff08;3&#xff09;1. 属性注入1.1 Autowired注解1.2 依赖查找 VS 依赖注入1.3 配合Qualifier 筛选Bean对象1.4 属性注入的优缺点 2. Setter注入2.1 Autowired注解2.2…

21matlab数据分析牛顿插值(matlab程序)

1.简述 一、牛顿插值法原理 1.牛顿插值多项式   定义牛顿插值多项式为&#xff1a; N n ( x ) a 0 a 1 ( x − x 0 ) a 2 ( x − x 0 ) ( x − x 1 ) ⋯ a n ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) N_n\left(x\right)a_0a_1\left(x-x_0\right)a_2\left(x-x_0\…

NLP masked_tokens[]、token_masks[]是什么?

1、masked_tokens[]、token_masks[]介绍 masked_tokens和token_masks两个列表用于存储mask处理后的token&#xff08;分词&#xff09;结果和对应的mask标志。 masked_tokens列表存储经过mask处理后的分词结果。 token_masks列表存储与每个分词结果对应的mask标志。 2、示例…

Electron运行时报错:浏览器报错Uncaught ReferenceError: require is not defined

这个错误通常发生在浏览器环境中使用了Node.js的模块化语法。由于浏览器不支持直接使用require关键字&#xff0c;所以会报错。 解决这个问题的一种方法是使用Webpack等工具将你的代码打包成浏览器可执行的文件。这样可以将require语法转换为浏览器可识别的语法。 另外&#…

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试 在开发 SpringBoot 应用程序时&#xff0c;我们通常需要与数据库进行交互。为了确保我们的应用程序在生产环境中可以正常工作&#xff0c;我们需要进行数据库集成测试&#xff0c;以测试我们的应用程序是否能…

剑指offer61.扑克牌中的顺子

我的想法非常简单&#xff0c;就是先给数组排序&#xff0c;然后统计里面有几个0&#xff0c;然后遍历数组&#xff0c;如果是0或者比后面一个数小1就直接进入下一次循环&#xff0c;如果比后面一个数小2&#xff0c;就用掉一个0&#xff0c;0的数量减1&#xff0c;如果比后面的…

Pycharm----导入库文件夹不在py文件的目录下

问题描述&#xff1a; 想在不同目录下导入根目录的包&#xff0c;直接写会报错。如下边object_detect.py在function文件夹下&#xff0c;导入包默认在这个文件下&#xff0c;但我想导入根目录models和utils下的包 解决方法&#xff1a; 将根目录设置为源代码根目录&#xff0…

【OC总结 面向对象 + 内存管理 + runtime】

文章目录 前言面向对象1.1 一个NSObject对象占用多少内存&#xff1f;1.2 iOS的继承链 & 对象的指针指向了哪里&#xff1f;1.3 OC的类的信息存放在哪里&#xff1f;-isa指针1.4 isMemberOfClass & isKindOfClass Runtime1.4 讲一下OC的消息机制1.5 消息转发机制流程1.…

【指针和数组笔试题(1)】详解指针、数组笔试题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言整型数组字符数组第一组题第二组题第三组题 总结 前言 在计算之前要了解基本概念&#xff1a; 数组名的理解 数组名是数组首元素的地址 有两个例外 1.sizeof(…

Linux网络基础 — 数据链路层

目录 数据链路层 认识以太网 局域网转发的原理 认识以太网的MAC报头 以太网帧格式 认识MAC地址 对比理解MAC地址和IP地址 基于MAC帧协议再次谈一谈局域网转发的原理 认识MTU MTU对IP协议的影响 MTU对UDP协议的影响 MTU对于TCP协议的影响 ARP协议 ARP协议的作用 …

Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE

Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-15/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org visonOS …

SpringBoot整合SpringCloudStream3.1+版本的Kafka死信队列

SpringBoot整合SpringCloudStream3.1版本的Kafka死信队列 上一篇直通车 SpringBoot整合SpringCloudStream3.1版本Kafka 实现死信队列步骤 添加死信队列配置文件&#xff0c;添加对应channel通道绑定配置对应的channel位置添加重试配置 结果 配置文件 Kafka基本配置&#…

C++ deque/queue/stack的底层原理

deque容器的存储结构 和 vector 容器采用连续的线性空间不同&#xff0c;deque 容器存储数据的空间是由一段一段等长的连续空间构成&#xff0c;各段空间之间并不一定是连续的&#xff0c;可以位于在内存的不同区域。 deque采用一块所谓的map数组&#xff08;注意&#xff0c…

LeetCode 0874. 模拟行走机器人:哈希表模拟

【LetMeFly】874.模拟行走机器人&#xff1a;哈希表模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/walking-robot-simulation/ 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时&#xff0c;使用的是spring-cloud微服务构架&#xff0c;mq消息消费模块是单独一个模块&#xff0c;但启动这个模块一直报如下错误&#xff1a; java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错&#xff0c;刚开…