【网络篇】HTTP知识
键入网址到网页显示,期间发生了什么?
浏览器第一步是解析URL,这样就得到了服务器名称和文件的路径名,然后根据这些信息生成http请求,通过DNS查询得到我们要请求的服务器地址,然后添加TCP头、IP头以及MAC头,MAC 头部包含了接收方和发送方的 MAC 地址等信息,接收方的MAC可以通过ARP协议获取,ARP 协议会在以太网中以广播的形式,通过IP地址得到对应的MAC地址,这时网络包只是存放在内存中的一串二进制数字信息,这些数字信息需要通过网卡转换成电信号的形式发送出来,再通过交换机抵达路由器,通过路由器抵达服务器,当数据包抵达服务器后,服务器会依次检查 MAC 头、IP 头以及TCP 头,根据TCP头的端口号将包发给 HTTP 进程,服务器的 HTTP 进程收到访问页面请求后,将这个网页封装在 HTTP 响应报文中,客户端得到 HTTP 响应报文后,于是交给浏览器去渲染页面,这样我们就能看到我们想要的内容了。
Linux 系统是如何收发网络包的?
发送数据包
应用程序会调用 Socket 发送数据包的接口,由于这个是系统调用,所以会从用户态陷入到内核态中的 Socket 层,内核会申请一个内核态的 sk_buff 内存,将用户待发送的数据拷贝到sk_buff 内存,并将其加入到发送缓冲区。 接下来,网络协议栈从 Socket 发送缓冲区中取出 sk_buff,并按照 TCP/IP 协议栈从上到下逐层处理。
- 第一次,调用发送数据的系统调用的时候,内核会申请一个内核态的 sk_buff 内存,将用户待发送的数据拷贝到 sk_buff 内存,并将其加入到发送缓冲区。
- 第二次,在使用 TCP 传输协议的情况下,从传输层进入网络层的时候,每一个 sk_buff 都会被克隆一个新的副本出来。副本 sk_buff 会被送往网络层,等它发送完的时候就会释放掉,然后原始的 sk_buff 还保留在传输层,目的是为了实现 TCP 的可靠传输,等收到这个数据包的 ACK 时,才会释放原始的 sk_buff 。
- 第三次,当 IP 层发现 sk_buff 大于 MTU 时才需要进行。会再申请额外的 sk_buff,并将原来的 sk_buff 拷贝为多个小的 sk_buff。
当有网络包到达时,会通过 DMA 技术,将网络包写入到指定的内存地址(Ring Buffer,是一个环形缓冲区),接着网卡向 CPU 发起硬中断,硬中断会暂时屏蔽中断,避免 CPU 持续中断影响效率。接着,发起软终端,内核中的 ksoftirqd 线程专门负责处理软中断,当收到软中断后,就会 poll 轮询处理数据。ksoftirqd 线程会从 Ring Buffer 获取数据帧作为一个网络包交给网络协议栈进行处理。
HTTP 常见的状态码有哪些?
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2xx 类状态码表示服务器成功处理了客户端的请求:
200 OK 是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。204 No Content 也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。206 Partial Content 是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
301 Moved Permanently 表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。302 Found 表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。注:301 和 302 都会在响应头里使用字段 Location ,指明后续要跳转的 URL,浏览器会自动重定向新的URL。304 Not Modified 不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。
400 Bad Request 表示客户端请求的报文有错误,但只是个笼统的错误。403 Forbidden 表示服务器禁止访问资源,并不是客户端的请求出错。404 Not Found 表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
500 Internal Server Error ,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。501 Not Implemented 表示客户端请求的功能还不支持。502 Bad Gateway 通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。503 Service Unavailable 表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。
HTTP 常见字段有哪些?
Host 字段:客户端发送请求时,用来指定服务器的域名。
Host:www.A.com 有了 Host 字段,就可以将请求发送到同一台服务器上的不同网站。
Content-Length 字段:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。
HTTP 是基于 TCP 的,TCP 存在“粘包问题”,HTTP 协议通过设置回车符、换行符作为 HTTP header 的边界,通过 Content-Length 字段作为 HTTP body 的边界来解决“粘包问题”
Connection 字段: 用于开启 http 长链接模式。
Content-type 字段:用于服务器回应时,告诉客户端,本次数据是什么格式。
客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。Accept: */* 表示客户端可以接受任何格式的数据。
Content-Encoding 字段: 表示服务器返回的数据使用了什么压缩格式。
GET 和 POST 有什么区别?
GET 的语义是从服务器获取指定的资源。
POST 的语义是根据请求负荷(报文body)对指定的资源做出处理。
GET 和 POST 方法都是安全和幂等的吗?
- 安全:在 HTTP 协议里,安全是指请求方法不会破坏服务器上的资源。
- 幂等:多次执行相同的操作,结果都是相同的。
GET是安全且幂等的,POST是不安全且不幂等的。
HTTP 缓存技术
HTTP 缓存实现方式?
HTTP 特性
到目前为止,HTTP 常见版本有 HTTP/1.1,HTTP/2.0,HTTP/3.0,不同版本的 HTTP 特性不同
HTTP/1.1 的优点有哪些?
1.简单:报文格式简单,就是 header+body,头部信息采用key-value简单文本形式,易于理解。
2.灵活和易于扩展:HTTP 协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。
同时 HTTP 工作在应用层(OSI 第七层),它下层可以随意变化,比如: HTTPS 就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层; HTTP/1.1 和 HTTP/2.0 传输协议使用的是 TCP 协议,而到了 HTTP/3.0 传输协议改用了 UDP 协议。
3.应用广泛和跨平台:无论是pc端还是手机APP,HTTP 的应用被广泛使用。
HTTP/1.1 的缺点有哪些?
Cookie 是一种由服务器通过 HTTP 响应发送到客户端(通常是浏览器)的小型文本数据,用于存储客户端的信息。每次客户端发起请求时,浏览器会将相关的 Cookie 信息自动附加到 HTTP 请求头中,以便服务器可以读取并使用这些信息。
HTTP/1.1 的性能如何?
HTTP 与 HTTPS 有哪些区别?
HTTPS 解决了 HTTP 的哪些问题?
- 混合加密的方式实现信息的机密性,解决了窃听的风险。
- 摘要算法的方式来实现完整性,解决了篡改的风险。
- 将服务器公钥放入到数字证书中,解决了冒充的风险。
- 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
- 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
- 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。
- 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;
- 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。
通过数字证书的方式保证服务器公钥的身份,解决冒充的风险。
HTTPS 是如何建立连接的?其间交互了什么?
- 客户端向服务器索要并验证服务器的公钥
- 双方协商生产「会话秘钥」
- 双方采用「会话秘钥」进行加密通信
1. ClientHello首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。在这一步,客户端主要向服务器发送以下信息:(1)客户端支持的 TLS 协议版本,如 TLS 1.2 版本。(2)客户端生产的随机数( Client Random ),后面用于生成「会话秘钥」条件之一。(3)客户端支持的密码套件列表,如 RSA 加密算法。2. SeverHello服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello 。服务器回应的内容如下:(1)确认 TLS 协议版本,如果浏览器不支持,则关闭加密通信。(2)服务器生产的随机数( Server Random ),也是后面生产「会话秘钥」条件之一。(3)确认的密码套件列表,如 RSA 加密算法。(4)服务器的数字证书。3.客户端回应客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。 如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:(1)一个随机数( pre-master key )。该随机数会被服务器公钥加密。(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。服务器和客户端有了这三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。4. 服务器的最后回应服务器收到客户端的随机数( pre-master key )之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。 然后,向客户端发送最后的信息:(1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。至此,整个 TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。
RSA 算法的缺陷
不支持前向保密。
因为客户端传递随机数(用于生成对称加密密钥的条件之一)给服务端时使用的是公钥加密,服务端收到后,会用私钥解密得到随机数。一旦服务端的私钥泄露了,过去被第三方截获的所有 TLS 通讯密文都会被解密。
HTTPS ECDHE 握手解析
第一次握手
客户端首先会发送 Client Hello 消息,消息中包含客户端使用的 TLS 版本号、支持的密码套件列表和生成的随机数。
第二次握手
服务端回复 Server Hello 消息,消息中包含服务端确认的 TLS 版本号,服务端的随机数、选择的密码套件和数字证书。
由于服务端选择了 ECDHE 密钥协商算法,会在发送完证书后,发送 Server Key Exchange 消息,这个过程服务器做了三件事:
- 选择椭圆曲线,确定基点,公开给客户端
- 生成随机数作为私钥,保留在本地
- 根据基点和私钥计算出服务端的公钥,公开给客户端(公钥会用RSA算法签名,防止被修改)
随后,服务端发送 Server Hello Done 消息,至此 TLS 两次握手完成。
第三次握手
客户端校验证书,确认合法后,生成随机数作为私钥,再根据服务端给的信息生成公钥,然后用 Client Key Exchange 消息给服务端。
客户端和服务端根据对方的椭圆曲线公钥、自己的椭圆曲线私钥、椭圆曲线基点计算出共享密钥(客户端和服务端计算得到的结果相同),最终的会话密钥就是用客户端随机数、服务端随机数、共享密钥生成的。
算好密钥后,客户端发送一个 Change Cipher Spec 消息,告诉服务端后续改用对称加密算法通信。接着发送之前的信息摘要,用对称密钥加密,让服务端验证本次生成的对称密钥是否可以正常使用。
TLS 第四次握手
服务端发送算好密钥后发送与客服端同样的消息,至此握手完成。
RSA 和 ECDHE 握手过程的区别:
- RSA 密钥协商算法不支持前向保密,ECDHE 密钥协商算法支持前向保密
- 使用了 RSA 密钥协商算法,TLS 完成四次握手后,才能进行数据传输,而对于 ECDHE 算法,客户端可以不用等服务端最后一次 TLS 握手,就可以提前发送加密的 HTTP 数据,节省了一个消息的往返时延。
- 使用 ECDHE,在 TLS 第二次握手中,会出现服务端发出的 Server Key Exchange 消息。而 RSA 握手过程没有该消息。
HTTPS 的应用数据是如何保证完整性的?
- TLS 握手协议负责协商加密算法和生成对称密钥;
- TLS 记录协议负责保护应用程序数据并验证其完整性和来源。
具体过程如下:
- 首先,消息被分割成多个较短的片段,然后分别对每个片段进行压缩
- 接下来,经过压缩的片段会被加上消息认证码
- 再接下来,经过压缩的片段再加上消息认证码会一起通过对称密码进行加密
- 最后,加密的数据再加上由数据类型、版本号、压缩后的长度组成的报头就是最终的报文数据
- 记录协议完成后,最终的报文数据将传递到 TCP 层进行传输
HTTPS 一定安全可靠吗?
问题:https 一定安全可靠吗?如果有假基站起了转发全部信息的作用,这样是不是假基站就获取到全部信息了,从而造成信息泄露?
为什么抓包工具能截取 HTTPS 数据?
如何避免被中间人抓取数据?
HTTP/1.1、HTTP/2、HTTP/3 的演变
HTTP/1.1 相比 HTTP/1.0 提高了什么性能?
- 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
- 支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
- 请求 / 响应头部未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
- 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是 队头阻塞;
- 没有请求优先级控制;
- 请求只能从客户端开始,服务器只能被动响应。
HTTP/2 做了哪些优化?
- 头部压缩:如果发送多个请求,头部一样或相似,那么会压缩相同部分
- 二进制格式:相较于以前的文本格式,提高了传输效率
- 并发传输
- 服务器主动推送资源
HTTP/2 缺陷
还是会造成队头阻塞,但是问题不在 http 上了,而是在 TCP 上,因为 TCP 一旦出现丢包,所有的 http 请求都必须等待这个包重传。
HTTP/3 做了哪些优化
把 HTTP 下层的 TCP 协议改成了 UDP
基于 UDP 的 QUIC 协议可以实现类似 TCP 的可靠性传输。
- 无队头阻塞
- 更快的连接建立
- 连接迁移
HTTP/1.1 如何优化?
1.尽量避免发送 HTTP 请求
- 使用缓存
2.在需要发送 HTTP 请求时,减少请求次数
- 减少重定向请求次数(可以把重定向的任务交给代理服务器)
- 合并请求
- 延时发送请求(请求网页时,可以按需获取,用户向下滑动页面时,再向服务器获取接下来的资源)
3.减少服务器的 HTTP 响应的数据大小
- 有损压缩
- 无损压缩
HTTPS 如何优化?
对于硬件优化的方向
- 因为 HTTPS 是属于计算密集型,应该选择计算力更强的 CPU,而且最好选择支持 AES-NI 特性的 CPU,这个特性可以在硬件级别优化 AES 对称加密算法,加快应用数据的加解密。
对于软件优化的方向
- 考虑把软件升级成较新的版本,比如将 Linux 内核 2.X 升级成 4.X, 将 openssl 1.0.1 升级到 1.1.1,因为新版本的软件不仅会提供新的特性,而且还会修复老版本的问题。
对于协议优化的方向
- 密钥交换算法应该选择 ECDHE 算法,而不用 RSA 算法,因为 ECDHE 算法具备前向安全性,而且客户端可以在第三次握手之后,就发送加密应用数据,节省了 1 RTT。
- 将 TLS1.2 升级 TLS1.3,因为 TLS1.3 的握手过程只需要 1 RTT,而且安全性更强。
对于证书优化的方向
- 服务器应该选用 ECDSA 证书,而非 RSA 证书,因为在相同安全级别下,ECC 的密钥长度比 RSA 短很多,这样可以提高证书传输的效率;
- 服务器应该开启 OCSP Stapling 功能,由服务器预先获得 OCSP 的响应,并把响应结果缓存起来,这样 TLS 握手的时候就不用再访问 CA 服务器,减少了网络通信的开销,提高了证书验证的效率;
对于重连 HTTPS 时,我们可以使用一些技术让客户端和服务端使用上一次 HTTPS 连接使用的会话密钥,直接恢复会话,而不用再重新走完整的 TLS 握手过程。
常见的会话重用技术有 Session ID 和 Session Ticket,用了会话重用技术,当再次重连 HTTPS 时, 只需要 1 RTT 就可以恢复会话。对于 TLS1.3 使用 Pre-shared Key 会话重用技术,只需要 0 RTT 就可以恢复会话。
这些会话重用技术虽然好用,但是存在一定的安全风险,它们不仅不具备前向安全,而且有重放
攻击的风险,所以应当对会话密钥设定一个合理的过期时间。
什么是重放攻击?
重放攻击是攻击者截获并重新发送(“重放”)之前合法通信的数据包,以欺骗系统、用户或服务,使其认为这些数据包是新的合法请求,从而造成未经授权的操作或访问。
既然有 HTTP 协议,为什么还要有 RPC?
- TCP 是无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP 和各类 RPC 协议就是在 TCP 之上定义的应用层协议。
- RPC 本质上不算是协议,而是一种调用方式,而像 gRPC 和 Thrift 这样的具体实现,才是协 议,它们是实现了 RPC 调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时 RPC 有很多种实现方式,不一定非得基于 TCP 协议。
- 从发展历史来说,HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了,B/S 和 C/S 在慢慢融合。很多软件同时支持多端,所以对外一般用 HTTP 协议,而内部集群的微服务之间则采用 RPC 协议进行通讯。
- RPC 其实比 HTTP 出现的要早,且比目前主流的 HTTP/1.1 性能要更好,所以大部分公司内部都还在使用 RPC。
- HTTP/2.0 在 HTTP/1.1 的基础上做了优化,性能可能比很多 RPC 协议都要好,但由于是这几年才出来的,所以也不太可能取代掉 RPC。
既然有 HTTP 协议,为什么还要有 WebSocket?
- TCP 协议本身是全双工的,但我们最常用的 HTTP/1.1,虽然是基于 TCP 的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的 WebSocket 协议。
- 在 HTTP/1.1 里,只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。
- 对于客户端和服务器之间都要互相主动发送大量数据的场景,比如网页游戏,考虑使用 WebSocket 协议。
- WebSocket 与 socket 几乎没有任何关系,只是叫法相似。WebSocket工作在应用层。
- 正因为各个浏览器都支持 HTTP 协议,所以 WebSocket 会先利用 HTTP 协议加上一些特殊的 header 头进行握手升级操作,升级成功后就跟 HTTP 没有任何关系了,之后就用 WebSocket 的数据格式进行收发数据。
完!
相关文章:
【网络篇】HTTP知识
键入网址到网页显示,期间发生了什么? 浏览器第一步是解析URL,这样就得到了服务器名称和文件的路径名,然后根据这些信息生成http请求,通过DNS查询得到我们要请求的服务器地址,然后添加TCP头、IP头以及MAC头&…...
【飞牛云 fnos】 安装部署 Music Tag Web
在上一篇文章中,我们探讨了如何使用 Docker 和 Docker Compose 来部署 Music Tag Web。今天,我们将详细介绍如何在流行的 NAS 系统——飞牛云 FNOs 中安装 Music Tag Web,以便您能够轻松管理并丰富您的音乐库。 音乐刮削:让您的音…...
springmvc的简介
SpringMVC的介绍与第一个程序的开发步骤 1. 介绍 SpringMVC是一个实现了MVC架构模式的Web框架,底层基于Servlet实现。 SpringMVC已经将MVC架构模式实现了,因此只要我们是基于SpringMVC框架写代码,编写的程序就是符合MVC架构模式的。&#x…...
WordPress阅读文章显示太慢的处理
有两种方式, 1. 完全静态化。 尝试了几个插件,都未成功。算了放弃了。因为感觉到实际使用也不方便。 2. cache缓存 用了WP Super Cache测试了一下,打开过一次后,文章秒开,也算达到了要求。...
如何学习游戏外挂编程
学习游戏外挂编程需要掌握一定的编程基础和相关知识。以下是一些学习游戏外挂编程的步骤和建议: 学习编程基础:首先,你需要学习一种编程语言,比如C或者Python。了解基本的编程概念,如变量、函数、循环和条件语句等。这…...
AI大模型驱动数据分析:利用自然语言实现数据查询与可视化(1)
在当今AI驱动的时代,数据分析已成为各行各业不可或缺的能力。然而,传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能,这对非技术背景的业务人员来说是一个不小的挑战。 想象一下,当数据中心的负责人打开手机时…...
UE----Ios打包笔记
UE 打包 IOS 软件 1.前期准备 1.1. 首先我们需要 一台装有Xcode 的MAC笔记本(知道开机密码 最好是空的笔记本 剩余内存要大 ) 1.2. 一台IOS手机 1.3. 一个申请了开发者账户的 Apple ID (苹果账号) 知晓账号与密码最好 因为很麻烦 1.4. UE 需要 的 兼…...
Python_Flask03
这篇文章主要介绍的是数据库的增删改查操作,无多余好说的。 from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import text from flask_migrate import Migrateapp Flask(__name__)# 本地基础信息的主机名 HOSTNAME "127.0…...
PGSQL:联合唯一索引的创建和删除
创建联合唯一索引 假设有一个表 your_table,它有多个列,你想在其中的几列上创建一个联合唯一索引。以下是创建联合唯一索引的 SQL 语句: CREATE UNIQUE INDEX idx_unique_columns ON your_table(column1, column2, ...);注意: …...
QT5 Creator (Mingw编译器) 调用VS2019 (阿里云 oss C++库) 报错的解决方法
方法就是不要用VS2019编译,要用MINgw32编译。注意要安装高版本的qt,其自带的mingw编译器才能支持,找不到qt5cored.dll,就把qt5core.dll改名为qt5cored.dll。 编译命令如下: cmake -G "MinGW Makefiles" ^-…...
使用缓存提升Web应用性能:从新手到高手的实践指南
引言 在现代Web开发中,性能优化是确保用户体验和系统稳定性的关键。使用缓存是提升网站性能的有效手段之一,可以显著减少数据库访问和计算开销。根据“网站优化第一定律”,缓存可以提升网站的响应速度,减少延迟,从而改…...
详尽的oracle sql函数
1,CHR 输入整数,返回对应字符。 用法:select chr(65),chr(78) from dual; 2,ASCII 输入字符,返回对应ASCII码。 用法:select ascii(A),ascii(B) from dual; 3,CONCAT 输入两个字符串,…...
Unity 设计模式-策略模式(Strategy Pattern)详解
策略模式(Strategy Pattern)是一种行为型设计模式,定义了一系列算法,并将每种算法封装到独立的类中,使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化,客户端通过与这些策略对象进…...
AI Agent重塑微服务治理
导读 随着技术架构的发展,微服务系统的复杂性不断增加,对运维提出了更高的要求。为了应对这一挑战,一种AI驱动的微服务治理方案被提出。该方案采用多智能体架构,将运维专家经验整合,并通过自然语言交互和智能推理&…...
SpringBoot整合knife4j,以及会遇到的一些bug
这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧! 一…...
vue自定义组件双向数据绑定
1、使用v - model指令(推荐方式)2、手动实现双向绑定(不使用v - model语法糖)3、 .sync修饰符4、.sync 与 v - model 的比较 1、使用v - model指令(推荐方式) 在 Vue 中,v - model是一个语法糖…...
【Linux课程学习】:想对Linux说的话
🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一.Linux学习存在的问题: 二.Linu…...
重生之我在异世界学编程之C语言:初识一维和二维数组篇
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文数组的基本类型:一维…...
《Vue 实战:小型项目练手与感悟》
一、Vue 基础与准备 在开始 Vue 项目之前,对 JavaScript、CSS、HTML 基础知识的掌握至关重要。 一、JavaScript 基础知识要求 数组常用方法 filter ():创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。 map ()&a…...
使用uniapp开发小程序场景:在百度地图上调用接口返回的设备相关信息并展示
首先在百度地图开发者平台注册微信小程序开发密钥下载百度地图SDK-bmap-wx.min.js,下载地址在项目入口index.html页面进行引入页面中进行调用,代码示例如下<map id"map" longitude"108.95" latitude"34.34" scale"3" :m…...
计算机毕业设计Python轨道交通客流预测分析可视化 智慧交通 机器学习 深度学习 人工智能 爬虫 交通大数据
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
使用 Wireshark 捕获和分析 IEC 60870-5-104 流量基本步骤
一 .IEC 60870-5-104 是什么? IEC 60870-5-104 是一种用于电力系统中数据传输的通信协议,它结合了 IEC 60870-5-101 的应用服务和 TCP/IP 网络协议。该标准定义了一种通过网络连接进行远动控制(如遥测、遥控等)的方法。 使用 Wireshark 捕…...
WPF+LibVLC开发播放器-音量控制和倍速控制
界面 界面上增加音量的控件和倍速控制控件 音量控制 主要也是一个Slider进度条控件来实现音量调节 我们这里设置默认的最大值为100,默认Value值也为100,默认声音开到最大 这里目前完全由前端控制音量调节,可以直接使用ValueChanged事件实…...
【数据中心建设资料】数据中心安全建设解决方案,数据中心整理解决方案,数据中心如何做到安全保障,数据中台全方案(Word全原件)
第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏系统 1.3.8…...
Apache HTTPD多后缀解析漏洞
进入靶场 上来就是一个文件上传的功能 经过尝试,发现只有jpg,png,gif文件能上传上去,而题目又说了,这个是Apache的中间件,Apache文件解析漏洞涉及到一个Apache解析文件的特性,Apache默认一个文…...
html+css+JavaScript实现轮播图
html+css+JavaScript实现轮播图 实现思路 要实现一个轮播图功能,我们需要HTML来构建结构,CSS来设计样式,以及JavaScript来添加交互功能。下面我将分别分析这三个部分是如何协同工作来实现轮播图的。 HTML - 结构 HTML部分定义了轮播图的基本结构,包括图片列表、指示器和…...
Golang 八股(持续补充...)
目录 进程、线程、协程 Go语言——垃圾回收 GC的触发条件 GC调优 GMP调度和CSP模型 Groutine的切换时机 Goroutine调度原理 Goroutine的抢占式调度 Context结构原理 Context原理 Golang内存分配机制 竞态、内存逃逸 golang内存对齐机制 golang中new和make的区别&a…...
MFC实现全屏功能
之前全屏都是参考: MFC单文档(SDI)全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级,MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类: CFullScreenImpl Class managing full-screen mod…...
AI换脸facefusion 3.0.1安装及其使用方法(源代码安装)
文章目录 1. 本文简介2. 软件环境准备软件下载及安装代码下载 3. Conda环境4. 加速环境5. 依赖安装6. 图片测试 今天给大家分享换脸facefusion 3.0.1使用方法。不仅可以对单张图片换脸,也可以对视频换脸。如果是单张图片的话,没有GPU速度也很快ÿ…...
PCL【C++】点云融合
//图像到点云的转换//C 标准库 #include <iostream> #include <string>//OpenCV 库 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>//PCL 库 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #inclu…...
处理一个MP4视频,检测里面出现的人脸,并根据特征值计算相似度来追踪和显示出每个人脸的ID
使用Mediapipe, opencv 处理一个MP4视频,检测里面出现的人脸,然后使用Mediapipe 计算每个出现的人脸的特征值,并根据特征值计算相似度来追踪和显示出每个人脸的ID import cv2 import mediapipe as mp import numpy as np# 初始化Mediapipe人脸检测和FaceMesh模型 mp_face_de…...
一文了解模式识别顶会ICPR 2024的研究热点与最新趋势
简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势,帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇,审校为邱雪和许东舟。 一、会议介绍 ICPR…...
【WRF-Urban】WPS中有关Urban的变量设置
【WRF-Urban】WPS中有关Urban的变量设置 地理数据源的配置WRF-Urban所需静态地理数据1、LANDUSE:包含城市地表分类的土地利用数据。2、URB_PARAM:城市参数数据集。3、FRC_URB2D:城市覆盖度数据集 WRF默认设置(美国)数据…...
Android中 ViewPager 和 ViewPager2 的区别
学习笔记 ViewPager 和 ViewPager2 都是 Android 中实现滑动页面效果的控件,用于在一系列页面之间进行切换。ViewPager2 是 ViewPager 的升级版本,提供了更多功能和灵活性。本文将从各个方面详细对比这两个控件,帮助你理解它们的区别和使用场…...
python使用pdfplumber工具包加载pdf格式数据
说在前面 大问题,对于两栏pdf数据,我这边提取出来的数据发现它很离谱。 它居然直接忽略了两栏特性,直接将第1栏的句子拼接上了第2栏的句子 解决方法:pypdf2尝试后可以正确识别两栏数据,非常棒。 示例 pdfplumber代…...
C++设计模式:代理模式(Proxy)(附案例代码)
什么是代理模式? 代理模式是一种结构型设计模式,主要用于为某个对象提供一个代理,以便在不直接访问对象的情况下控制对其的访问。代理可以在客户端和目标对象之间起到一个中介的作用,添加一些额外的操作,例如权限控制…...
Y20030028 JAVA+SSM+MYSQL+LW+基于JAVA的考研监督互助系统的设计与实现 源代码 配置 文档
基于JAVA的考研监督互助系统 1.项目描述2. 课题开发背景及意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着高等教育的普及和就业竞争的加剧,越来越多的学生选择继续深造,参加研究生入学考试。考研人数的不断增加,使得考研过程中的学习监…...
《Java核心技术I》volatile字段
volatile字段 有多处理器的计算机能够暂时在寄存器或本地内存缓存中保存内存值,其结果是,运行在不同处理器上的线程可能看到同一个内存位置上有不同的值。编译器可以改变指令执行的顺序以使吞吐量更大化,编译器不会选择可能改变代码语义的顺…...
使用Hadoop MapReduce进行大规模数据爬取
Hadoop MapReduce概述 Hadoop MapReduce是一个编程模型,用于处理和生成大数据集。它由Map和Reduce两个主要阶段组成。Map阶段负责处理输入数据,并将结果输出为键值对;Reduce阶段则对Map阶段的输出进行汇总和合并,生成最终结果。 …...
git 删除大文件的方法
1 首先 首先要提交所有的更改 git filter-branch -f --prune-empty --index-filter “git rm -rf --cached --ignore-unmatch 文件相对路径复制到这里” --tag-name-filter cat – --all 2 提交 git commit -am “d” git push...
qt数据类型定义(包含签名)
先推荐一个处理markdown表格的网站,超级好用:markdown表格处理,我就是用这个表格处理的excel中的数据上传。 下表整理了数据类型的值范围、签名、qt如何定义等内容。 类型范围/子类型dbus签名qt支持的签名qt类型定义方式转换为variantint8(…...
2025美赛数学建模常用数据库网站大全
优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...
Vue 组件通信全面解析
Vue 组件通信全面解析:方式、原理、优缺点及最佳实践 在 Vue 开发中,组件通信是一个重要的核心问题。随着应用复杂度的增加,如何在组件之间有效传递数据、触发事件,直接影响代码的可维护性和可扩展性。Vue 提供了多种组件通信方式…...
node.js基础学习-express框架-路由及中间件(十)
一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建,提供了一系列用于构建 Web 应用程序和 API 的功能,使开发者能够更高效地处理 HTTP 请求和响应,专注于业务逻辑的实现。 其特点包括简单易用…...
书生浦语第四期--基础岛-第六关
文章目录 使用opencompass进行模型评价配置KEY环境变量以及API模型接口配置数据集进行评测开始评测测评结束 使用opencompass进行模型评价 配置KEY环境变量以及API模型接口 配置数据集进行评测 开始评测 期间可能遇到没有下载的包 例如,我遇到了: No m…...
flinkSql中累计窗口CUMULATE
eventTime package com.bigdata.day08;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;public class _05_flinkSql_Cumulate_eventTime {/*** 累积窗口 eventTime* …...
Flutter项目初始化android版
1、本机系统环境 window11flutter sdk 版本flutter_windows_3.24.5-stable.zip (下载地址:https://docs.flutter.dev/get-started/install/windows/mobile)android studio 版本 Android Studio Giraffe | 2022.3.1vscode 2、VSCODE 配置flutter 安装flutter插件 …...
深度相机获取实时图像总结
问题详情:之前一直把曝光调整到50000,画面一直很流畅,知道领导要求将曝光改成500000时整个程序卡死了 问题解决: 首先怀疑是帧率太低的原因,控制变量后发现不是帧率的问题,看着代码很迷茫,领导…...
突击检查:Java面试之多线程并发篇(11)
前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!什么是多线程中的上下文切换?什么是Daemon线程?它有什么意义?乐观锁和悲观锁的理解及如何实现,有哪些实现方式?似乎有…...
大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...