【每日八股】计算机网络篇(四):HTTP
目录
- HTTP 与 HTTPS 的区别?
- HTTPS 加密与认证的过程?
- ClientHello
- ServerHello
- 客户端回应
- 服务端回应
- HTTPS 一定安全可靠吗?
- HTTPS 状态码的含义?
- HTTP 缓存有哪些实现方式?
- HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区别?
- HTTP 1.0
- HTTP 1.1
- HTTP 2.0
- HTTP 3.0(QUIC)
- QUIC 协议的概念和特点?
- 概念
- 特点
- 基于 UDP 的高效传输
- 极速连接建立
- 多路复用与无队头阻塞
- 内置加密与隐私增强
- 无缝连接迁移
- 灵活拥塞控制
- 前向纠错(FEC)
- QUIC 如何实现可靠传输?
- HTTP 的 GET 和 POST 方法区别?
- GET 请求可以带 body 吗?
- 既然有 HTTP 协议,为什么还要有 RPC?
- 什么是 XSS 攻击?有什么解决办法?
- 什么是 CSRF 攻击?有什么解决办法?
- 什么是中间人攻击以及如何防范?
HTTP 与 HTTPS 的区别?
- HTTP 明文传输,数据未经加密,安全性较差。HTTPS(SSL + HTTP)的数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA 申请证书。
- HTTP 的页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,而 HTTPS 除了 TCP 的三个包,还要加上 SSL 握手的消耗。
- HTTP 使用 80 端口,HTTPS 使用 443 端口。
- 实际上 HTTPS 就是构建在 SSL/TLS 之上的 HTTP 协议,所以 HTTPS 比 HTTP 更消耗服务器资源。
HTTPS 加密与认证的过程?
ClientHello
首先,由客户端向服务端发起加密通信请求,客户端主要向服务器发送:
- 客户端支持的 SSL/TLS 协议版本;
- 客户端产生的随机数(Client Random);
- 客户端支持的密码套件列表。
ServerHello
服务器收到客户端的请求后,向客户端发出响应,服务端回应的内容如下:
- 确认 SSL/TLS 协议版本(如果浏览器不支持,则关闭加密通信);
- 服务端产生的随机数(Server Random);
- 确认的密码套件列表;
- 服务端的数字证书;
客户端回应
客户端收到服务端的回应之后,首先通过浏览器或 OS 中的 CA 公钥,确认服务端的数字证书的真实性,如果证书没问题,客户端会从数字证书中取出服务端的公钥,然后使用它加密报文,向服务端发送如下信息:
- 一个随机数,该随机数会被服务端公钥加密;
- 加密通信算法改变通知,表示随后的信息都将用会话密钥加密通信;
- 客户端握手结束通知,表示客户端的握手阶段已经结束;
- 为之前所有数据进行总结,供服务端校验;
至此,服务端和客户端共生成了三个随机数(客户端生成了两个,而服务端生成了一个),接着用双方协商的加密算法,各自生成本次通信的1会话密钥。
服务端回应
服务端收到客户端的第三个随机数之后,通过协商的加密算法,计算出本次通信的会话密钥。服务端向客户端发送最后的消息:
- 加密通信算法改变通知,表示随后的信息通过会话密钥加密通信;
- 服务端握手结束通知,表示服务端的握手阶段已经结束;
- 总结之前的内容,供客户端校验;
接下来,客户端与服务端进入加密通信,就完全是使用普通的 HTTP 协议了。
HTTPS 一定安全可靠吗?
HTTPS 协议到目前为止本身是没什么漏洞的。即使 HTTPS 成功被中间人攻击,本质上也是客户端的漏洞(浏览器在浏览证书非法的网站时,会提示用户确认,因为它识别出了证书是非法的,是由中间人伪造的,用户如果仍然继续访问,相当于用户接受了中间人伪造的证书),并不是 HTTPS 不够安全。
HTTPS 状态码的含义?
- 100 类状态码属于提示信息,是协议处理的中间状态,实际用到的较少;
- 200 类状态码表示服务器成功处理了客户端的请求;
- 300 类状态码表示客户端请求的资源发生了变动,需要客户端使用新的 URL 重新发送请求获取资源,也就是重定向;
- 400 类状态码表示客户端发送的报文有误,服务器无法处理;
- 500 类状态码表示客户端请求报文正确,但服务器处理时内部发生了错误,属于服务器端的错误码。
HTTP 缓存有哪些实现方式?
- 强制缓存:强制缓存指的是只要浏览器判断缓存没过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在浏览器;
- 协商缓存:请求的响应码为 304,告诉浏览器可以使用本地缓存的资源,通过服务通知客户端是否可以使用缓存的方式是协商缓存。
HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区别?
HTTP 1.0
- 无连接:每次请求都要建立连接,需要使用 keep-alive 参数建立长连接,建立连接非常消耗资源。
- 队头阻塞:HTTP 1.0 规定下一个请求必须在前一个请求响应到达前才能发送,假设前一个请求响应一直不到达,那么下一个请求就一直不发送,后面的请求就阻塞了。
- 缓存:在 HTTP 1.0 中主要使用 header 中的协商缓存 last-modified/if-modified-since,强缓存 Expires 来作为缓存判断的标准。
HTTP 1.1
- 长连接:好处在于减少了 TCP 连接的重复建立和断开连接所造成的额外开销,减轻了服务器端的负载。
- 支持管道(pipeline)网络传输:只要第一个请求发送出去了,不必等其回来,就可以发第二个请求出去,减少了整体的响应时间(对比 HTTP 1.0,1.0 需要在发送方接收到前一个请求的响应后才能发送下一个请求,可能产生队头阻塞)。
- 缓存处理:HTTP 1.1 引入了更多的缓存控制策略,有可供选择的缓存头来控制缓存策略。
- 断点续传:HTTP 1.1 在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由地选择以便于充分利用带宽和连接。
HTTP 2.0
- header 压缩:HTTP 1 系列的 header 带有大量信息,且每次都要重复发送,HTTP 2.0 使用 encoder 减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,避免了重复的 header 传输,减少了需要传输的数据包的大小。
- 多路复用:使用多路复用技术,做到同一个连接并发处理多个请求,且并发请求的数量比 HTTP 1.1 大好几个数量级。【补充,多路复用:多路复用(Multiplexing)是一种通信技术,旨在通过单一物理通信同时传输多路独立信号,从而高效利用通信资源,其核心思想是共享资源,分时/分频/分码传输】
- 新的二进制帧格式:HTTP 2.0 把请求在应用部分切分成二进制帧并标上序号,服务器收到二进制帧后组成请求进行处理,从而达到并发发送请求的效果,对于服务器端,响应可以通过序号确定是哪个请求,从而避免混乱的情况产生。
- 服务器推送:HTTP 2.0 引入了 server push,它允许服务端推送资源给浏览器,在浏览器明确地请求前,客户端可以不用再次创建连接请求从服务端获取已经推送给浏览器的资源。这样客户端可以直接在本地加载资源,不用通过网络。
HTTP 3.0(QUIC)
- HTTP 3.0(QUIC)直接弃用 TCP,将传输层协议改为 UDP,使用 UDP 实现可靠传输。
- 0-RTT:缓存当前会话的上下文,下次恢复会话的时候,只需要将之前的缓存传递给服务器,验证通过,就可以传输了(这是 QUIC 协议相比于 HTTP 2.0 协议惹眼最大的优势)。
- 多路复用:QUIC 基于 UDP,一个连接上的多个 stream 之间互相没有依赖,即使丢包也只需要发送丢失的包,而不需要重传整个连接;
- 更好的移动端表现:QUIC 在移动端的表现比 TCP 好,因为 TCP 是基于 IP 识别连接,而 QUIC 通过 ID 识别连接,无论网络环境如何变化,只要 ID 不变,就能迅速重连。
- 加密认证的报文:TCP 协议头没有经过任何加密和认证,在传输过程中很容易被中间网络设备篡改、注入和窃听。QUIC 的 packet 除了个别报文,所有报文头都是经过认证的,报文 Body 都是经过加密的,对 QUIC 进行的任何修改都可以在接收端及时发现,有效地降低了安全风险【即,虽然 UDP 的传输存在风险,但是 QUIC 报文经过加密认证,接收端可以在报文被修改的时候及时发现,极大程度上降低了基于 UDP 传输存在的风险】。
- 向前纠错机制:向前纠错(Foward Error Connec,FEC)指的是,每个数据包除了这个包本身的数据之外,还包括其他包的数据,因此少量的丢包可以通过其他包的荣誉数据直接组装而无需重传。向前纠错牺牲了每个数据包可以发送数据的上限,但是其带来的提升弥补了甚至效果比丢包导致的数据重传更好,因为数据重传会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等)。
QUIC 协议的概念和特点?
概念
QUIC(Quick UDP Internet Connections)是一种基于 UDP 的现代传输协议,具有类似 TCP 的连接管理、拥塞窗口、流量控制等网络特性,使得 UDP 协议更可靠【可以理解为,QUIC 是一个基于 UDP 的应用层协议,它使得 UDP 更可靠,其可靠性接近于 TCP】。
特点
基于 UDP 的高效传输
绕过 TCP 队头阻塞和握手延迟,利用 UDP 的无连接特性实现快速传输,同时在应用层实现可靠性机制(如丢包重传)。
极速连接建立
0-RTT/1-RTT握手:通过缓存密钥和会话信息,QUIC 建立首次连接仅需 1 次往返(1-RTT),后续连接可达到 0 次往返,显著降低延迟。
多路复用与无队头阻塞
单一连接支持多个独立数据流,各流之间互不阻塞。即使某个流丢包,其他流仍然正常传输,解决了 TCP 队头阻塞的问题。
内置加密与隐私增强
强制使用 TLS 1.3 加密,所有报文头部和载荷均加密,防止中间设备篡改或嗅探,提升隐私保护。
无缝连接迁移
使用连接 ID 而非 IP + 端口来标识连接,网络切换时(如 WIFI 转 5G)无需重连,保障移动场景下的连续性。
灵活拥塞控制
支持可插拔的拥塞控制算法(如 BBR),适用不同网络条件,优化吞吐量与公平性。
前向纠错(FEC)
早期版本通过冗余数据包减少重传,虽在标准中未保留,但设计理念仍在影响容错机制。
QUIC 如何实现可靠传输?
- 有序交付和确认机制;
- 只能重传策略;
- 增强型拥塞控制;
- 前向纠错;
- 流与连接级可靠性;
- 加密完整性验证;
HTTP 的 GET 和 POST 方法区别?
语义与用途
- GET:用于获取资源(幂等操作),不应对服务器状态产生副作用;
- POST:用于提交数据,通常会产生副作用(如创建新资源);
参数传递
- GET:参数通过 URL 的查询字符串传递,比如
example.com/search?q=keyword&page=2
; - POST:参数封装在请求体中传输;
数据限制
- GET:受 URL 长度限制(通常 2048 字符,因浏览器/服务器而异);
- POST:理论上无限制,实际受服务器配置约束;
缓存与历史记录
- GET:可能被浏览器缓存,保存在历史记录中;
- POST:不会被缓存,刷新时浏览器重新提交;
安全性
POST 的安全性比 GET 高,因为 GET 请求提交的数据明文出现在 URL 中,而 POST 请求参数则被放在请求体中。
幂等性
- GET:幂等(多次执行结果相同);
- POST:非幂等(可能产生不同结果);
常见误区
- POST 并不比 GET 更安全(安全性依赖于 HTTPS);
- POST 没有“隐藏参数”特性;
- 大数据传输推荐 POST,但 HTTP 规范未限制 GET 的请求体使用;
GET 请求可以带 body 吗?
RFC 规范并没有规定 GET 请求不能带 body。任何请求都可以带 body。 GET 请求是获取资源,所以根据这个语义,其实不需要用到 body。URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的。
既然有 HTTP 协议,为什么还要有 RPC?
定义:基于传输层的 TCP 协议,产生了应用层的 HTTP 协议和 RPC 协议(实际上 RPC 不能被称之为具体的协议,它其实是一种调用方式),本质上 HTTP 和 RPC 只是定义了不同格式的应用层协议而已。HTTP 是超文本传输协议,RPC 是远程过程调用。虽然大部分 RPC 协议的底层使用 TCP,但实际上 RPC 并不是一定要基于 TCP 进行传输,可以改用 UDP 或 HTTP。
服务发现:在使用 HTTP 时,只要知道服务的域名,就可以通过 DNS 服务去解析得到 IP 地址,默认 80 端口。RPC 一般有专门的中间服务去保存服务名和 IP 信息,比如 consul(服务发现)或 etcd,或 redis。想要访问某个服务,就去这些中间服务获取 IP 和端口信息。由于 DNS 也是服务发现的一种,所以也有基于 DNS 去做服务发现的组件,比如 CoreDNS。
底层连接方式:HTTP 协议默认在建立底层 TCP 连接后会一直保持连接(keep-alive),之后的请求和响应会复用连接。RPC 通过 TCP 长连接进行数据交互,但 RPC 一般还会建一个连接池,在请求量大的时候,建立多条连接放在池内,要发数据时从池里取一条连接出来,用完放回去,便于下次复用。
传输的内容:HTTP 设计初是用于做网页文本展示的,传输内容以字符串为主,有 header 和 body。在 body 这块,它使用 json 来序列化结构体数据,内容会有冗余。RPC 因为定制化程度更高,可以采用体积更小的 protobuf 或其他序列化协议去保存结构体数据,同时也不需要像 HTTP 那样考虑各种浏览器行为,比如 302 重定向。因此性能也会更好一些,这也是在公司内部微服务中抛弃 HTTP,选择使用 RPC 的最主要原因【总结一下,抛弃 HTTP 改用 RPC 的主要原因是 RPC 的传输数据格式的定制化程度更高,不需要像 HTTP 那样考虑浏览器行为,因此性能更好】。
【协议效率差异:HTTP/1.1 文本协议中的 Header 包含冗余,比如 Cookie/UA 等无意义字段,ASCII 编码的体积较大;而 RPC 在编码时使用二进制,基于 Protobuf/Thrift 的编码体积可以缩小 50% 到 80%,序列化速度快 5 ~ 10 倍】
通信模型深度:HTTP 基于 Request 和 Response 进行单向通信,而 RPC 支持 Streaming、背压控制、元数据交换等高级且复杂的交互模式。
什么是 XSS 攻击?有什么解决办法?
XSS 是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到 web 页面中去,使别的用户访问时都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
什么是 CSRF 攻击?有什么解决办法?
CSRF 就是跨站请求伪造。比如,登录受信任网站 A,并在本地生成 Cookie,之后在不登出 A 的情况下,访问危险网站 B(利用了 A 的漏洞)。可以通过 Token 验证、隐藏 token 到 http head 中(隐藏令牌)、Referer 验证等方式防范。
什么是中间人攻击以及如何防范?
中间人攻击指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
可以通过使用HTTPS协议,禁用不安全的SSL协议,启用虚拟专用网(VPN)来防范。
相关文章:
【每日八股】计算机网络篇(四):HTTP
目录 HTTP 与 HTTPS 的区别?HTTPS 加密与认证的过程?ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗?HTTPS 状态码的含义?HTTP 缓存有哪些实现方式?HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…...
基于python下载ERA5小时尺度和月尺度的数据
前言:由于ERA5网站的更新,原始的代码都无法使用,这里将会提供下载小时尺度和月尺度的代码。 一、前期的工作 需要重新在ERA5网站上注册新的账号(ERA5网站)。然后在User guide里,选择API,将代码…...
【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现软件开机自启
文章目录 前言 一、准备工作1.1 环境搭建1.2 创建 Tauri 项目1.3 添加依赖 二、实现开机自启的基本原理2.1 开机自启的基本概念2.2 Tauri 应用的生命周期 三、Windows 平台实现3.1 Windows 注册表机制3.2 实现步骤3.3 注意事项 四、Linux 平台实现4.1 Linux systemd 服务4.2 实…...
C++20 模块:告别头文件,迎接现代化的模块系统
文章目录 引言一、C20模块简介1.1 传统头文件的局限性1.2 模块的出现 二、模块的基本概念2.1 模块声明2.2 模块接口单元2.3 模块实现单元 三、模块的优势3.1 编译时间大幅减少3.2 更好的依赖管理3.3 命名空间隔离 四、如何使用C20模块4.1 编译器支持4.2 示例项目4.3 编译和运行…...
【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析
【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析 向Kafka Broker服务节点中发送主题消息数据的应用程序被称为生产者,生产者与消费者均属于Kafka客户端,几乎所有主流语言都支持调用客户端API。官方提供了基于Java实现的kafka-clients,用于…...
java-单列模式-final-枚举
内存存储区域 引用变量和普通变量引用变量放在栈中,基本数据类型的内容是在堆内存中。 对象放在堆内存中,其引用变量放在栈中,指向堆内存存放对象的地址。 静态变量放在静态区中,静态变量在程序的执行始中中分配一次,…...
deepseek 3FS编译
3FS在ubuntu22.04下的编译(记录下编译过程,方便后续使用) 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...
LabVIEW非线性拟合实现正弦波参数提取
LabVIEW的Nonlinear Curve Fit.vi基于Levenberg-Marquardt算法,能够实现非线性最小二乘拟合,包括正弦波三参数(幅值、频率、相位)的精确求解。该工具适用于非均匀采样、低信噪比信号等复杂场景,但需注意初始参数设置与…...
CAMEL 学习笔记一
课程讲义 https://github.com/camel-ai/owl CAMEL (Communicative Agents for “Mind” Exploration of Large Language Models)是一个开源的多智能体框架,专注于构建基于大语言模型的智能体交互系统。该框架通过角色扮演和结构化对话机制,实现智能体之…...
java每日精进 3.11 【多租户】
1.多租户概念 1. 多租户是什么? 多租户,简单来说是指一个业务系统,可以为多个组织服务,并且组织之间的数据是隔离的。 例如说,在服务上部署了一个MyTanant系统,可以支持多个不同的公司使用。这里的一个公…...
2.2 企业级ESLint/Prettier规则定制
文章目录 1. 为什么需要企业级代码规范2. 工具选型对比3. 完整配置流程3.1 项目初始化3.2 ESLint深度配置3.3 Prettier精细配置3.4 解决规则冲突4. 高级定制方案4.1 自定义ESLint规则4.2 扩展Prettier插件5. 团队协作策略5.1 配置共享方案5.2 版本控制策略6. CI/CD集成7. 常见问…...
Ubuntu 源码安装 Qt5
1.开发背景 Ubuntu 下安装指定版本的 Qt,最新的Qt官方已经不支持 Qt5.15.2 版本以下版本,所以有必要用旧的源码编译 Qt 库。 2.开发需求 源码安装 Qt5.12.2 3.开发环境 开发环境:Ubuntu18.04 目标版本:Qt5.12.2 4.实现步骤 4…...
【Linux】权限相关知识点
思考 我们平时使用Linux创建文件或目录时的默认权限是多少? [rootlocalhost test]: mkdir dir [rootlocalhost test]: touch file [rootlocalhost test]: ll total 0 drwxr-xr-x 2 root root 6 Mar 8 15:23 dir #755 -rw-r--r-- 1 root root 0 Mar 8 15:23 f…...
SSH 安全致命漏洞:渗透路径与防御策略
作为远程管理的核心协议,SSH 的 22 端口在全球服务器中广泛部署,却也成为攻击者的首要目标。本文将以技术视角还原黑客通过 22 端口渗透的完整路径,并结合最新漏洞(如 CVE-2024-6387)提供防御建议,帮助企业…...
使用ngnix进行负载均衡部署deepseek蒸馏版
使用ngnix进行负载均衡部署deepseek蒸馏版 一、安装及配置nginx1.1.安装依赖:1.2. 导入Nginx签名密钥1.3. 添加Nginx软件源1.4. 更新软件包列表并安装Nginx1.5. 启动Nginx服务1.6. 验证安装1.7.修改配置文件,将自己的内容加进去1.8、重新加载Nginx配置:二、模型启动2.1、分布…...
面试之《TypeScript泛型》
在 TypeScript(TS)里,泛型是一项极为重要的特性,它能让你编写可复用、类型安全且灵活的代码。以下从多个方面为你详细介绍 TS 中的泛型: 基本概念 泛型允许你创建可重用的组件,这些组件能够处理多种数据类…...
PyTorch系列教程:Tensor.view() 方法详解
这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或…...
IDEA(十一)调整新版本的工具栏显示Git操作(pull、commit、push、revert等)
目录 一、背景二、操作步骤2.1 开启新 UI 样式2.2 设置 Tool Window 工具栏 一、背景 好久没有更新 IDEA 了,更新之后发现 IDEA 的工具栏消失了。一番操作之后,终于把 IDEA 的工具栏的设置调整好了,在此进行记录调整步骤,供大家学…...
基于Prometheus+Grafana的Deepseek性能监控实战
文章目录 1. 为什么需要专门的大模型监控?2. 技术栈组成2.1 vLLM(推理引擎层)2.2 Prometheus(监控采集层)2.3 Grafana(数据可视化平台)3. 监控系统架构4. 实施步骤4.1 启动DeepSeek-R1模型4.2 部署 Prometheus4.2.1 拉取镜像4.2.2 编写配置文件4.2.3 启动容器4.3 部署 G…...
windows下docker的安装
前言 早期的docker只能在Linux下使用,随着技术的发展,目前docker在Windows下也能方便的使用了。 一、docker的下载 从docker官网下载“docker desktop” 下载这个: 二、Windows下docker的安装 安装完毕后,重启的系统进行登录&am…...
Nginx正向代理HTTPS配置指南(仅供参考)
要使用Nginx作为正向代理访问HTTPS网站,需通过CONNECT方法建立隧道。以下是操作详细步骤: 1. 安装Nginx及依赖模块 需要模块:ngx_http_proxy_connect_module(支持CONNECT方法)。 安装方式:需重新编译Nginx…...
01_LVGL 对象与盒子模型详解
1. LVGL 的对象 在LVGL中,⽤⼾界⾯的 基本组成部分 是对象(控件),也称为 Widgets。例如,⼀个 按钮、标签、图像、列表、图表 或者 ⽂本区域。所有的对象都使⽤ lv_obj_t 指针作为句柄进⾏引⽤。之后可以使⽤该指针…...
【redis】string应用场景:共享会话和手机验证码
文章目录 共享会话实现思路 手机验证码实现思路伪代码实现生成验证码验证验证码 共享会话 实现思路 如果每个应用服务器,维护自己的会话数据,此时彼此之间胡共享,用户请求访问到不同的服务器上,就可能会出现一些不能正确处理的情…...
【保姆级教程】使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD
内容预览 ≧∀≦ゞ Windows终端美化指南:美化你的命令行界面!引言一、准备工作包管理器:scoop为什么选择使用 Scoop 安装?安装 scoop 字体终端离线安装步骤配置 Windows Terminal 二、配置美化 PowerShell安装 oh-my-posh激活 oh-…...
刷leetcode hot100--动态规划3.11
第一题:最长递增子序列[10:53] 1.dp数组及下标含义:dp[n]:nums[0...n]的最长严格递增子序列长度【无法进行后续比较】 dp[n]以nums[n]结尾的最长严格递增子序列对应的长度 2.初始化:注意!!这里应该初始化为1&#x…...
网络安全基础与应用习题 网络安全基础答案
1.列出并简要给出SSH的定义。 正确答案: 答:6.10传输层协议:提供服务器身份验证、数据保密性和数据完整性,并具有前向保密性(即,如果在一个会话期间密钥被破坏,则知识不会影响早期会话的安全性&…...
利用python生成excel中模板范围对应的shape文件
利用python生成excel中模板范围对应的shape文件 # -*- coding: utf-8 -*- import os.pathimport pandas as pd from shapely.geometry import Polygon from shapely.wkt import dumps import argparse# 创建解析器 parser argparse.ArgumentParser(description"这是一个…...
方案精读:IBM方法论-IT规划方法论
该文档聚焦 IT 规划方法论,适合企业高层管理者、IT 部门负责人、业务部门主管以及参与企业信息化建设的相关人员阅读。 (本解读资料已包含在绑定资源内) 主要内容围绕 IT 规划展开:首先明确 IT 规划需基于企业核心战略࿰…...
JAVA面试_进阶部分_正确使用 Volatile 变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效…...
ArcGIS Pro中字段的新建方法与应用
一、引言 在地理信息系统(GIS)的数据管理和分析过程中,字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计,字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件,为用户提…...
c++ 中的引用
引用与指针经常混淆,总结一下 文章目录 1. 引用与指针的区别2. 引用传递数组3. 通过引用传递容器和类4. 多线程传递容器时用 std:: ref 替代引用传递 1. 引用与指针的区别 引用(Reference):引用是变量的别名,本质上不…...
使用jest测试用例之入门篇
Jest使用 Jest 是由 Facebook 开发的一个 js 测试框架,jest 主要侧重于被用于做单元测试和集成测试 安装 npm i jest -D运行 **package.json**里面配置命令 // scripts添加测试脚本 {"test": "jest" /* 运行后便会使用 jest 执行所有的 .t…...
k8s面试题总结(十四)
什么是Helm? Helm是一个k8s的包管理工具,它简化了应用程序在k8s集群中的部署,管理和维护。类似于rpm包和yum之间的关系。 K8s传统方式:类似于rpm安装包的方式,逐步进行安装,遇到依赖还得解决依赖问题 he…...
后端面试高频笔试题(非常规LeetCode类型)
目录 1. 常见的五种单例模式的实现⽅式 2. 约瑟夫环 (递归) 3. 交替打印奇偶数 (Semaphore、synchronized搭配wait、notify) 4. 交替打印 ABC (Semaphore) 5. 三个线程交替打印 1 到 99 (Semap…...
el-table 通过 slot=“header“ 自定义表头,遇到数据不更新的问题。
从表中可以看到我要的数据为空,但是在控制台输出数据又不为空,由此判断是自定义表头的内容未在数据变化时触发重新渲染 在 Element UI 官方示例中,若通过旧式插槽语法 slot"header" 实现自定义表头,并在表头内集成 el-s…...
ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)
1.开发板配置 本人开发板使用ESP32S3-wroom1-n16r8最小系统板 由于基于vscode与PlatformIO框架开发,无espidf框架,因此无法直接烧录程序,配置开发板参数如下: 在platformio.ini文件中,配置使用esp32-s3-devkitc-1开发…...
ios 小组件和数据共享
创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件,可以进行多个小组件的调试 TestWidget2文件是主要操作,小组件使用swiftUI布局,使用 AppIntent进行事件处理ÿ…...
鸿蒙开发可以从事的岗位
学完鸿蒙开发方向后,可以从事的岗位主要集中在以下几个领域: 鸿蒙系统开发工程师 负责鸿蒙操作系统的开发、优化、维护和更新工作,包括系统层、框架层、应用层的开发等。 嵌入式软件开发工程师 鸿蒙系统广泛应用于物联网设备、智能硬件等领域…...
深度学习和机器学习的差异
一、技术架构的本质差异 传统机器学习(Machine Learning)建立在统计学和数学优化基础之上,其核心技术是通过人工设计的特征工程(Feature Engineering)构建模型。以支持向量机(SVM)为例…...
OpenCV常用函数以及使用场景
类别函数名参数功能使用场景经验值/注意事项返回值图像 I/Ocv2.imread()filename (str): 文件路径。flags (int, 可选): 读取标志。常用值: * cv2.IMREAD_COLOR (默认): 读取彩色图像 (BGR)。 * cv2.IMREAD_GRAYSCALE: 读取灰度图像。 * cv2.IMREAD_UNCHANGED: 读取包含 Alpha…...
【iOS逆向与安全】sms短信转发插件与上传服务器开发
一、目标 一步步分析并编写一个短信自动转发的deb插件 二、工具 mac系统已越狱iOS设备:脱壳及frida调试IDA Pro:静态分析测试设备:iphone6s-ios14.1.1三、步骤 1、守护进程 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。例如:推送服务、人…...
Linux内核实时机制19 - RT调度器2 - 更新时间 update_curr_rt
update_curr_rt update_curr_rt函数用来更新当前实时进程的运行时间统计值,//kernel/sched/rt.c 1009 static void update_curr_rt(struct rq *rq) 1010 {...
《Android应用性能优化全解析:常见问题与解决方案》
目录 一、UI卡顿/掉帧 二、内存泄漏(Memory Leak) 三、ANR(Application Not Responding) 四、列表滑动卡顿(RecyclerView/ListView) 五、冷启动耗时过长 六、内存抖动(Memory Churn&#x…...
Mybatis批量更新数据
批量传参样例: [{"sid": "111", "createTime": "2025-03-11 09:12:00", "pbilId": "pbil_id_111"}, {"sid": "222", "createTime": "2025-03-11 09:13:00"…...
HTML 超链接(简单易懂较详细)
在 HTML 中,超链接是通过 <a> 标签(anchor tag)创建的。超链接允许用户通过点击文本、图像或其他元素跳转到另一个网页、文件或页面的特定部分。本文将详细介绍 HTML 超链接的语法、属性和应用场景。 一、基本语法 <a href"U…...
计算机网络--访问一个网页的全过程
文章目录 访问一个网页的全过程应用层在浏览器输入URL网址http://www.aspxfans.com:8080/news/index.aspboardID5&ID24618&page1#r_70732423通过DNS获取IP地址生成HTTP请求报文应用层最后 传输层传输层处理应用层报文建立TCP连接传输层最后 网络层网络层对TCP报文进行处…...
LLaMA-Factory训练DeepSeek大模型+本地部署
前言 前面我们介绍了基于硅基流动训练私有大模型《10分钟教你微调自己的私有大模型》,该平台有三个不好的点就是可选的模型有限,训练时间需要排队等待耗时长,另外还要 给钱。今天我们换一个平台,使用:魔搭平台 llama…...
mapbox-gl的Popup的使用详解
下面提供一个完整的 HTML 示例代码,展示了如何使用 mapbox-gl 的 Popup。代码中包含了两种使用方式: 在地图加载时直接创建一个 Popup;结合 Marker,在点击 Marker 或地图任意位置时显示 Popup。请确保将 YOUR_MAPBOX_ACCESS_TOKEN 替换为你自己的 Mapbox 访问令牌。下面是代…...
【K8s】专题十六(3):Kubernetes 包管理工具之 Helm 语法
本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…...
仅仅使用pytorch来手撕transformer架构(3):编码器模块和编码器类的实现和向前传播
仅仅使用pytorch来手撕transformer架构(2):编码器模块和编码器类的实现和向前传播 往期文章: 仅仅使用pytorch来手撕transformer架构(1):位置编码的类的实现和向前传播 最适合小白入门的Transformer介绍 仅仅使用pytorch来手撕transformer…...