当前位置: 首页 > news >正文

HTTPS全解析:从证书签发到TLS握手优化

HTTPS(超文本传输安全协议 本质上是HTTP的安全版本。标准的HTTP协议仅规范了客户端与服务器之间的通信格式,但所有数据传输都是明文的,容易被中间人窃听和篡改。HTTPS通过加密传输数据解决了这一安全问题。

HTTPS可以理解为"HTTP+TLS/SSL"。虽然名称中仍保留"SSL"(安全套接层),但现代HTTPS实际使用的是更先进的TLS(传输层安全)协议。目前最新的版本是TLS/1.3。

协议发展史:
SSL 1.0 → SSL 2.0 → SSL 3.0 → TLS 1.0 → TLS 1.1 → TLS 1.2 → TLS 1.3

如今主流浏览器和服务器都已淘汰不安全的SSL协议,全面支持TLS协议。TLS/1.3在安全性、性能和隐私保护方面都有显著提升。

一、CA证书

虽然,TLS或者SSL加密解决了服务端与客户端之间交流信息被窥探的问题,但是,我们仍无法保证客户在输入域名时输入的是正确域名,比如,我想访问CSDN(www.csdn.net),会不会多输一个字符(www.csdnn.net),这样就可以伪造相似的域名来给客户访问,当客户输错时就进入到了错误的网站,

为了解决这个问题,服务端需要申请SSL证书(现代使用的都是TLS协议,但证书仍然习惯称为"SSL证书",证证书本身不依赖SSL或者TLS,它只是用于身份验证和密钥交换的文件,由于SSL最早使用证书,所以"SSL证书"成了通用称呼)来证明这个域名就是大家熟知的CSDN网站。例如我的浏览器就拿到了这个证书

请添加图片描述

数字证书包含以下关键信息:

  1. 颁发对象的基本信息(如域名)
  2. 网站的公钥
  3. 颁发机构(CA)的数字签名
  4. 有效期等元数据

当用户通过HTTPS(默认端口443)访问网站时,浏览器会自动验证服务器提供的证书:

  • 检查证书是否由受信任的CA签发
  • 验证证书中的域名与实际访问的域名是否匹配
  • 确认证书是否在有效期内

通过这套机制,即使用户输入错误的域名,只要该域名没有合法的证书,浏览器就会显示安全警告,有效防止用户误入钓鱼网站。

二、TLS握手过程

TLS/1.2

正常的TCP三次握手是不变的,TCP三次握手如下所示:

请添加图片描述

但是TLS握手需要更多的步骤,在TCP链接建立以后:

请添加图片描述

  1. 客户端发送 Client Hello 消息

    • 客户端向服务器发起握手,并告知支持的加密参数。
    • 包含内容
      • TLS 版本(如 TLS 1.2)。
      • 客户端随机数(Client Random)(用于后续密钥计算)。
      • 支持的加密套件(Cipher Suites)(如 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)。
      • 支持的压缩算法(现代TLS通常不使用压缩)。
  2. 服务端发送 Server Hello 消息

    • 服务器确认加密参数,并生成服务器随机数。
    • 包含内容
      • TLS 版本(如 TLS 1.2)。
      • 服务端随机数(Sever Random)(用于后续密钥计算)。
      • 支持的加密套件(Cipher Suites)(如 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)。
      • 会话 ID(Session ID)(用于会话恢复,可选)。
  3. 服务端发送 Certificate 消息

    • 服务器发送自己的证书,供客户端验证身份。
    • 包含内容
      • 服务器的 X.509 证书(包含公钥、域名、颁发机构等信息)。
      • 证书链(Certificate Chain)(中间CA证书,帮助客户端验证信任链)。
    • 客户端需验证
      • 检查证书是否过期。
      • 检查域名是否匹配(防止钓鱼攻击)。
      • 检查颁发机构(CA)是否受信任(如 DigiCert、Let’s Encrypt)。
  4. 服务端发送 Server Key Exchange 消息

  • 如果使用 ECDHE 或 DHE 等密钥交换算法,服务器会发送临时公钥。
  • 包含内容
    • DH/ECDH 参数(如椭圆曲线名称、临时公钥)。
    • 签名(证明参数未被篡改)。
  1. 服务端发送 Server Hello Done 消息
    • 告知客户端服务器握手信息发送完毕,等待客户端响应。
  2. 客户端发送 Client Key Exchange 消息
    • 客户端生成 预主密钥(Pre-Master Secret) 并加密发送给服务器。
    • 包含内容
      • 加密的预主密钥(使用服务器证书中的公钥加密,或者用第4步发送的临时公钥进行加密)
      • 如果是 RSA 密钥交换,直接发送加密的预主密钥。
      • 如果是 ECDHE/DHE,客户端也发送自己的临时公钥。
  3. 服务端和客户端发送 Change Cipher Spec 以及 Finished 消息
    • 通知服务器,后续通信将使用协商的密钥加密。
  4. 后续通信使用双方沟通好的秘钥进行通信,即对称加密,秘钥为(客户端随机数 + 服务端随机数 + 预主秘钥)

TLS/1.3

TLS/1.3 的整个握手过程发生了一些改变

  • 合并消息Server HelloCertificateServer Key Exchange 合并为一条响应。
  • 删除冗余步骤:移除 Change Cipher Spec(加密切换隐含在握手逻辑中)。
总结

1.2协议的过程

在这里插入图片描述

1.3协议的过程

在这里插入图片描述

三、TLS/1.3 升级了什么

前向保密

TSL 1.2 中的加密措施主要是 RSA 和 DH 算法,DH算法可以每次都使用新的随机数,因此不存在前向保密的问题,即使从以往的信息中破解出了私钥,那也只是那一次通信的私钥,而RSA存在前向保密问题,因为其私钥和公钥都是静态的,那么一旦私钥被破解,以前通信的消息都会被破解。 其实不使用临时随机数的DH算法也有这个问题。因此静态的RSA和DH秘钥交换算法在TLS/1.3中被移除了。

  • TLS/1.2:支持非前向安全的 RSA 密钥交换。
  • TLS/1.3强制使用 ECDHE,即使私钥泄露,历史会话也无法解密。

参数组合

那是不是使用非静态参数就安全了?其实这就相当于我们选择不改密码和经常改密码,经常改密码当然是更加安全的。但实际上一些主机并不支持新版本的TLS,甚至只支持SSL。TLS/1.2 协议是支持版本降级的,因此在这些较旧的主机上必须通过版本降级来通信。

同时,DH算法参数(P与G)是通过服务器来选择的,可以有很多选择,虽然DH算法破解难度大,但是DH并不是所有参数都安全。

TLS/1.2 协议在创建连接时是明文的,因此可能被黑客截获,截获后可以给服务端发送假的 Clien Hello 消息,造成服务端协议降级。虽然1024bit的DH协议很安全,那降级成512bit破解难度就降低不少了。

因此TLS/1.3干脆放弃了DH算法中很多弱参数选择,并对参数进行了限制。

密码套件

TLS/1.2 支持的密码套件有:

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
TLS_PSK_WITH_AES_256_GCM_SHA384
TLS_DHE_PSK_WITH_AES_128_GCM_SHA256
TLS_DHE_PSK_WITH_AES_256_GCM_SHA384
TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256

其格式为

TLS_[密钥交换算法]_[身份验证算法]_WITH_[加密算法]_[哈希算法]

这仅是常见的密码套件组合,其实际可选用的密码套件组合更多,所以在建立加密通信之前必须协商需要使用的密码套件组合。

在TLS/1.3 协议中,仅建议五种密码套件:

TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_CCM_SHA256
TLS_AES_128_CCM_8_SHA256

密码套件的格式变为

TLS_[对称加密算法]_[哈希算法]

看起来就更简单了,代价是只支持三种密钥交换方式 (EC)DHEPSK-onlyPSK ith (EC)DHE

TLS/1.3 中参数就少了很多,速度也快了很多。也正是因为客户端一开始就可以发送协商参数,因此TLS/1.3 相较于 TLS/1.2 少了 1-RTT

恢复会话 (0-RTT)

客户端和服务端此前已完成完整握手,并缓存了会话密钥。 客户端 → 服务端 Client Hello + 0-RTT 数据 就可以直接恢复之前的会话。

但这个技术存在一定问题,给了黑客一定的可乘之机,黑客可以截获客户端恢复会话的消息,在多次发送给服务端,那么原本只转账1元,现在就转了n元。

对比

特性TLS/1.2TLS/1.3
握手耗时2-RTT1-RTT(默认),0-RTT(可选)
密钥交换支持 RSA(不安全)、ECDHE仅 ECDHE(强制前向安全)
加密算法AES-CBC、RC4(不安全)仅 AES-GCM、ChaCha20
握手消息加密Finished 后加密除 Hello 外全部加密
降级攻击防护较弱强制版本确认

四、好像并不需要CA…吗?

上述的Https握手阶段我们可以发现,似乎可以跳过CA这个过程,但并非如此,这样的话无法解决中间人的问题

请添加图片描述

客户端在通信时一直在于中间人通信,中间人在截获消息后再发送给服务端。核心在于,在TLS握手阶段,中间人劫持了流量,伪装成了服务端,客户端认为自己与服务端建立了加密通信,但是其实是与中间人建立了加密通信,那加了个寂寞。

所以CA还是需要的,这样一开始你不需要与服务端建立通信,而是与CA建立通信,CA将服务端的公钥保存起来,当你需要的时候再一同生成CA证书发给你,但是…我怎么确定CA是真的呢???

确定CA证书为真就需要数字签名,CA会将网站的各种信息包括网站的公钥整合成CA证书,并通过自己的私钥对证书的哈希值进行加密生成数字签名,数字签名也在这个CA证书中,CA证书部署在服务端的服务器中,好的,那么我们客户端在拿到这个CA证书时就可以通过公钥来解密,并与证书的哈希值对比,相同的话,就是原网站,不同就是被劫持。但是这个CA的公钥,它在CA的服务器上啊,我怎么确定这个CA不是中间人伪造的,这很有可能啊,这就需要再给这个CA机构的网站加一个证书…麻了,没完了。

最终极的解决方案是证书链,或者可以认为是一个树,他有个根,服务端的证书由中间CA机构发,中间CA机构的证书由根CA发,根CA已经无法验证了,那么就直接内置在用户的设备中,操作系统和浏览器都预置了全球可信根CA的证书(含公钥)。

总结来讲:

HTTPS通过 数字证书链预置信任锚 解决这个问题:

  1. 证书签发流程
    • 网站向CA提交信息(域名、公钥等)。
    • CA验证网站身份后,用自己的私钥对网站信息(含公钥)签名,生成数字证书。
    • 网站将证书部署到服务器。
  2. 客户端验证流程
    • 客户端收到证书后,用CA的公钥验证签名,确认证书未被篡改。
    • 进一步验证证书中的域名是否匹配、有效期是否合法。
  3. 信任锚:预置根证书
    • 操作系统和浏览器预置了全球可信根CA的证书(含公钥)。
    • 这些根证书是信任链的起点(如微软、苹果、Mozilla维护的根证书列表)。
    • 若中间人伪造CA证书,由于客户端未预置其根证书,验证会失败。

五、Https的核心优势

数据加密传输

  • 采用 TLS/SSL 协议对通信内容进行端到端加密
  • 有效防止中间人攻击(MITM)、流量劫持等安全威胁
  • 保护用户敏感信息(如密码、支付信息、个人隐私数据)

身份真实性验证

  • 通过 CA 颁发的数字证书验证网站真实身份
  • 防止钓鱼网站和域名仿冒(如将 taobao.com 仿冒为 taoba0.com)
  • 浏览器会明确展示网站认证信息(地址栏锁形图标)

数据完整性保护

  • 使用消息认证码(MAC)确保传输内容不被篡改

  • 防止运营商劫持插入广告等行为

  • 有效防止中间人攻击(MITM)、流量劫持等安全威胁

  • 保护用户敏感信息(如密码、支付信息、个人隐私数据)

相关文章:

HTTPS全解析:从证书签发到TLS握手优化

HTTPS(超文本传输安全协议 本质上是HTTP的安全版本。标准的HTTP协议仅规范了客户端与服务器之间的通信格式,但所有数据传输都是明文的,容易被中间人窃听和篡改。HTTPS通过加密传输数据解决了这一安全问题。 HTTPS可以理解为"HTTPTLS/SS…...

#将一个 .c 文件转变为可直接运行的文件过程及原理

将一个 .c 文件(C语言源代码)转变为可直接运行的可执行文件,涉及从源代码到机器码的编译和链接过程。以下是详细的过程与原理,分为步骤说明: 一、总体流程 .c 文件到可执行文件的过程通常包括以下几个阶段&#xff1a…...

【软件学习】GeneMiner 2:系统发育基因组学的一体化全流程分析工具

【软件学习】GeneMiner 2—— 系统发育基因组学的一体化全流程分析工具 文章目录 【软件学习】GeneMiner 2—— 系统发育基因组学的一体化全流程分析工具前言一、软件了解二、软件安装三、软件使用示例演示3.1 快速掌握使用方法3.2 获取质体基因组和质体基因3.3 单拷贝基因建树…...

聊一聊AI对接口测试的潜在影响有哪些?

目录 一、 自动化测试用例生成 二、 缺陷预测与根因分析 三、自适应测试维护 四、实时监控与自适应优化 五、 性能与安全测试增强 六、测试结果分析与报告 七、持续测试与DevOps集成 八、挑战与局限性 九、未来趋势 使用AI可以自动化测试用例生成、异常检测、结果分析…...

wordcount在mapreduce的例子

1.启动集群 2.创建项目 项目结构为&#xff1a; 3.pom.xml文件为 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://mave…...

CSS3 遮罩

在网页设计中&#xff0c;我们经常需要实现一些特殊的视觉效果来增强用户体验。CSS3 遮罩&#xff08;mask&#xff09;允许我们通过控制元素的可见区域来创建各种精美的视觉效果。本文将带你全面了解 CSS3 遮罩的功能和应用。 什么是 CSS3 遮罩&#xff1f; CSS3 遮罩是一种…...

HTTP协议解析:Session/Cookie机制与HTTPS加密体系的技术演进(一)

一.HTTP协议 我们上篇文章已经提到了对于自定义协议的序列化与反序列化。那么有没有什么比较成熟的&#xff0c;大佬们写的应用层协议&#xff0c;供我们参考使用呢?HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c; HTTP&#xff08;HyperText Transfer Prot…...

Matlab 234-锂电池充放电仿真

1、内容简介 Matlab 234-锂电池充放电仿真 可以交流、咨询、答疑 2、内容说明 略 锂离子电池已经广泛应用于我国目前电子产品市场&#xff0c;当下手机市场和新能源市场对于锂离子电池的大量需求&#xff0c;推动了锂离子电池的发展&#xff0c;我国已经成为世界上锂离子电池…...

std::move 和 std::forward

关联点 都是执行转换(cast)的函数&#xff08;函数模板&#xff09;&#xff0c;不产生任何可执行代码。且都可以把实参转换成右值。 std::move无条件将实参&#xff08;const除外 &#xff09;转换成右值引用&#xff0c;std::forward 条件返回右值引用 _EXPORT_STD template…...

工业协议跨界实录:零基础玩转PROFINET转EtherCAT主站智能网关

工业自动化领域的金字塔就是工业通信行业&#xff0c;用的最多的便是协议转换模块&#xff0c;通俗来说&#xff0c;网关就像一个“语言翻译器”&#xff0c;能把一种通信语言转换成另一种&#xff0c;满足实际通信需求&#xff0c;还能保护投资。PROFINET 转EtherCAT 网关WL-P…...

开源链动2+1模式AI智能名片S2B2C商城小程序赋能新微商服务能力升级研究

摘要&#xff1a;本文聚焦新微商服务能力升级路径&#xff0c;探讨开源链动21模式、AI智能名片与S2B2C商城小程序在重构培训体系、激励机制及用户服务中的协同作用。研究显示&#xff0c;新微商通过“技术赋能-机制创新-服务深化”三维变革&#xff0c;将传统微商的“产品压货”…...

vue3配置element-ui的使用

今天阐述一下如何在vue中进行配置使用element-ui&#xff1b; 一&#xff0c;配置下载Element 1.首页在电脑上下载好vue&#xff0c;以及npm&#xff0c;可以去相关的官方进行下载。 2.进行配置命令 npm install element-plus --save如报错&#xff1a; npm error code ERE…...

39-绘制渐变的文字

39-绘制渐变的文字_哔哩哔哩_bilibili39-绘制渐变的文字是一次性学会 Canvas 动画绘图&#xff08;核心精讲50个案例&#xff09;2023最新教程的第40集视频&#xff0c;该合集共计53集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bilibi…...

HBase进阶之路:从原理到实战的深度探索

目录 一、HBase 核心概念再梳理 1.1 RowKey 1.2 Column Family 1.3 Region 二、架构与运行机制剖析 2.1 架构组件详解 2.1.1 Client 2.1.2 Zookeeper 2.1.3 Master 2.1.4 RegionServer 2.1.5 HDFS 2.2 数据读写流程深度解析 2.2.1 数据写入流程 2.2.2 数据读取流…...

使用 AddressSanitizer 检测栈内存越界错误

一、概述 在 C/C 编程中&#xff0c;栈内存越界 是一种常见而危险的内存错误&#xff0c;通常发生在局部变量数组被访问时索引越界。由于栈空间的结构特点&#xff0c;越界写入可能覆盖返回地址或其他局部变量&#xff0c;导致不可预测的行为甚至程序崩溃。传统的调试手段难以定…...

【技巧】离线安装docker镜像的方法

回到目录 【技巧】离线安装docker镜像的方法 0. 为什么需要离线安装&#xff1f; 第一、 由于docker hub被墙&#xff0c;所以 拉取镜像需要配置国内镜像源 第二、有一些特殊行业服务器无法接入互联网&#xff0c;需要手工安装镜像 1. 可以正常拉取镜像服务器操作 服务器…...

vue实现与后台springboot传递数据【传值/取值 Axios 】

vue实现与后台springboot传递数据【传值/取值】 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&#xff1a;每…...

Git日志信息

Git日志信息 1. log log 命令用于查看 git 的各种日志信息&#xff0c;在使用 log 后&#xff0c;git 会进入 vim 模式&#xff0c;此时退出日志模式需要按下 q 键。可以通过小箭头来浏览未显示出来的内容。 1.1 查看日志信息 git log git log --prettyoneline #美观输出日…...

Linux操作系统从入门到实战(六)Linux开发工具(上)详细介绍什么是软件包管理器,Linux下如何进行软件和软件包的安装、升级与卸载

Linux操作系统从入门到实战&#xff08;六&#xff09;Linux开发工具&#xff08;上&#xff09;详细介绍什么是软件包管理器&#xff0c;Linux下如何进行软件和软件包的安装、升级与卸载 前言一、 软件包管理器1.1 传统安装方式的麻烦&#xff1a;从源代码说起1.2 软件包&…...

Java中的​​策略模式​​和​​模板方法模式

文章目录 1. 策略模式&#xff08;Strategy Pattern&#xff09;案例&#xff1a;支付方式选择 2. 模板方法模式&#xff08;Template Method Pattern&#xff09;案例&#xff1a;制作饮料流程 3. 策略模式 vs 模板方法模式4.总结 在Java中&#xff0c;策略模式和模板方法模式…...

C#里WPF使用触发器实现鼠标点击响应

在WPF里创建了一个自定义的用户控件, 要想在这个控件里实现鼠标的点击事件响应, 就需要添加事件触发器交互定义,如下代码: <ListView x:Name="ListViewMenu" ItemsSource="{Binding Path=SubItems}" Foreground="White" ScrollViewer.Ho…...

tensorflow-cpu

python3.8~3.12安装tensorflow-cpu 准备 创建并进入目录 mkdir tf-cpu cd tf-cpu编写测试代码 test_tensorflow.py import tensorflow as tf# 检查TensorFlow版本 print("\nTensorFlow version:", tf.__version__,end\n\n)# 创建一个简单的计算图并运行它 tensor …...

【AI提示词】PEST分析

提示说明 市场分析师专注于为企业、产品或国家提供PEST分析支持&#xff0c;以制定精准的市场战略。 提示词 # Role: PEST分析## Profile - language: 中文 - description: 市场分析师专注于为企业、产品或国家提供PEST分析支持&#xff0c;以制定精准的市场战略 - backgrou…...

42、在.NET 中能够将⾮静态的⽅法覆写成静态⽅法吗?

在.NET中&#xff0c;不能将非静态方法&#xff08;实例方法&#xff09;直接覆写&#xff08;Override&#xff09;为静态方法&#xff08;Static Method&#xff09;。以下是关键原因和解释&#xff1a; 1. 方法绑定的本质区别 实例方法&#xff1a;属于对象的实例&#xf…...

【嵌入式系统设计师(软考中级)】第三章:嵌入式系统软件基础知识——①软件及操作系统基础

文章目录 1. 嵌入式系统软件基础知识1.1 嵌入式软件分类1.2 嵌入式系统初始化1.3 无操作系统支持的嵌入式软件体系结构1.4 有操作系统支持的嵌入式软件体系结构1.5 嵌入式支撑软件 2. 嵌入式操作系统基础知识2.1 嵌入式操作系统基本概念2.2 处理器管理2.2.1 多道程序2.2.2 分区…...

cs224w课程学习笔记-第11课

cs224w课程学习笔记-第11课 知识图谱嵌入 前言一、知识图谱1、知识图谱特点2、关系类型 二、知识图谱嵌入1、嵌入核心思想2、嵌入模型2.1 嵌入模型transE1)、核心思想2)、训练步骤3)、模型表征能力 2.2 嵌入模型TransR2.3 DistMult嵌入模型1)、核心思想2)、表征能力 2.4 complE…...

5.10-套接字通信 - C++

套接字通信 1.1 通信效率问题 服务器端 单线程 / 单进程 无法使用&#xff0c;不支持多客户端 多线程 / 多进程 写程序优先考虑多线程&#xff1a;什么时候考虑多进程&#xff1f; 启动了一个可执行程序 A &#xff0c;要在 A 中启动一个可执行程序 B 支持多客户端连接 IO 多…...

【Linux】Linux内核的网络协议之socket理解

1. Socket&#xff08;套接字&#xff09; 的本质 它是应用程序与网络协议栈之间的编程接口&#xff08;API&#xff09;&#xff0c;用于实现网络通信。 Socket 并不是一个物理设备&#xff0c;而是一个抽象层为应用程序提供统一的网络操作接口&#xff08;如 send()、recv()…...

仿函数和函数对象

1. 概念解读&#xff1a;什么是“函数”和“函数对象”&#xff1f; 核心概念一句话总结 仿函数&#xff08;Functor&#xff09; 函数对象&#xff08;Function Object&#xff09; 它们本质是一个对象&#xff08;Object&#xff09;&#xff0c;但可以像函数&#xff08;Fu…...

Kubernetes控制平面组件:Kubelet 之 Static 静态 Pod

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

Django 项目的 models 目录中,__init__.py 文件的作用

在 Django 项目的models/init.py文件中&#xff0c;这些导入语句的主要作用是将各个模型类从不同的模块中导入到models包的命名空间中。这样做有以下几个目的&#xff1a; 简化导入路径 当你需要在项目的其他地方使用这些模型时&#xff0c;可以直接从models包导入&#xff0c…...

学习日志04 java

PTA上的练习复盘 java01 编程题作业感悟&#xff1a; 可以用ai指导自己怎么调试&#xff0c;但是不要把调代码这过程里面的精华交给ai&#xff0c;就是自己去修正错误不能让ai代劳&#xff01;~~~ 1 scanner.close() Scanner *** new Scanner(System.in); ***.close(); …...

vue-pdf-embed预览PDF

一、vue-pdf-embed 链接&#xff1a;Yarn 1、安装插件 npm install vue-pdf-embed 2、文件中引入&#xff08;分页效果已实现&#xff0c;样式请自行修改&#xff09; <template><div class"download-pdf-preview" style"height: 450px; border:1…...

C++GO语言微服务之Dockerfile docker-compose

目录 01 01-知识点概述 02 02-dockerfile复习 03 03-环境变量ENV的使用 04 04-WORKDIR的使用 05 05-USER和ARG的使用 06 06-ONBUILD的使用 07 07-dockerfile的缓存相关的参数 08 08-dockerfile的编写 09 09-测试-没成功-好像是网不行 01 10-docker-compose介绍 02 11…...

【漫话机器学习系列】255.独立同分布(Independent and Identically Distributed,简称 IID)

深入理解独立同分布&#xff08;IID&#xff09;&#xff1a;机器学习与统计学的基石 在机器学习、深度学习、统计建模等领域&#xff0c;我们经常会遇到一个重要假设&#xff1a;独立同分布&#xff08;Independent and Identically Distributed&#xff0c;简称 IID&#xf…...

树莓派4 yolo 11l.pt性能优化后的版本

树莓派4 使用 Picamera2 拍摄图像&#xff0c;然后通过 YOLO11l.pt 进行目标检测&#xff0c;并在实时视频流中显示结果。但当前的代码在运行时可能会比较卡顿&#xff0c;主要原因包括&#xff1a; picam2.capture_array() 是一个较慢的操作&#xff1b;YOLO 推理可能耗时较长…...

AD22 快速定义PCB板框与DXF导入定义

自行定义板框 1. 初步评估&#xff1a;选中所有的器件&#xff0c;选中‘在矩形区域排列’ 将元件放好后&#xff0c;可以再将元件紧凑一下 2. 设置原点&#xff0c;并在下方选中机械一层 从原点出发&#xff0c;点击快捷键PL 画框线 3. 对线条长度取整&#xff0c;且最好是5…...

LInux系统文件与目录管理(二)

提示&#xff1a;第二部分对第一部分收尾 文章目录 常见的命令如下一、文件查看命令1. more命令2.less命令3.head命令4.tail命令5.nl命令&#xff08;了解&#xff09;6.创建目录命令7.创建文件命令>: 覆盖重定向>>: 追加重定向 8.touch命令9.echo命令10.文件或目录复…...

Redisson在业务处理中失败后的应对策略:保障分布式系统的可靠性

分布式系统中的数据一致性与高可用性一直是开发者面临的难题。作为Redis官方推荐的Java客户端&#xff0c;Redisson凭借其强大的分布式能力成为解决这些问题的利器。但在实际业务场景中&#xff0c;网络抖动、资源竞争、节点故障等问题可能导致操作失败&#xff0c;本文将深入探…...

windows下docker 运行 ros2humble arm64

目前要想运行arm版ros humble 目前最好的解决方案是使用qemu模拟。 1.拉取 ubuntu22.04 docker pull ubuntu:22.04 --platformarm642.安装小鱼ros2 humble wget http://fishros.com/install -O fishros && . fishros3.安装eqmu docker run --rm --privileged multia…...

表的增删改查 -- 2

目录 3、查询&#xff08;R&#xff09; 3.7、条件查询&#xff1a;where 3.8、分页查询&#xff1a;limit 3.9、查询总结 4、修改&#xff08;U&#xff09; 5、删除&#xff08;D&#xff09; 3、查询&#xff08;R&#xff09; 3.7、条件查询&#xff1a;where selec…...

Linux系统管理与编程20:Apache

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 做好网络和yum配置&#xff0c;用前面dns规划的www的IP进行。 #!/bin/bash #----------------------------------------------------------- # File Name: myWeb.sh # Version: 1.0 # …...

dfs 第一次加训 详解 下

目录 P1706 全排列问题 思路 B3618 寻找团伙 思路 B3621 枚举元组 思路 B3622 枚举子集&#xff08;递归实现指数型枚举&#xff09; 思路 B3623 枚举排列&#xff08;递归实现排列型枚举&#xff09; B3625 迷宫寻路 思路 P6183 [USACO10MAR] The Rock Game S 总结…...

vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件

1. 安装依赖&#xff1a; #docx文档预览组件npm install vue-office/docx vue-demi0.14.6#excel文档预览组件npm install vue-office/excel vue-demi0.14.6#pdf文档预览组件npm install vue-office/pdf vue-demi0.14.6 vue2.6版本或以下还需要额外安装 vue/composition-api …...

Excel表的导入与导出

Excel表的导入与导出 根据excel表来建立所需的数据库表格 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version></dependency><dependency><groupId>cn.hutool&…...

Redis 中常见的数据类型有哪些?

Redis 常见的数据类型包括 5 种基础类型&#xff08;String、Hash、List、Set、Zset&#xff09;和 3 种特殊类型&#xff08;HyperLogLog、Bitmap、Geospatial&#xff09;。以下是详细说明&#xff1a; 一、5 种基础数据类型 1. 字符串&#xff08;String&#xff09; 特点…...

消息队列如何保证消息可靠性(kafka以及RabbitMQ)

目录 RabbitMQ保证消息可靠性 生产者丢失消息 MQ丢失消息 消费端丢失了数据 Kakfa的消息可靠性 生产者的消息可靠性 Kakfa的消息可靠性 消费者的消息可靠性 RabbitMQ保证消息可靠性 生产者丢失消息 1.事务消息保证 生产者在发送消息之前&#xff0c;开启事务消息随后生…...

基于STM32、HAL库的BMP390L气压传感器 驱动程序设计

一、简介: BMP390L 是 Bosch Sensortec 生产的一款高精度气压传感器,专为需要精确测量气压和海拔高度的应用场景设计。BMP390L 具有更低的功耗、更高的精度和更快的响应速度。 二、硬件接口: BMP390L 引脚STM32L4XX 引脚说明VDD3.3V电源GNDGND地SCLPB6 (I2C1 SCL)I2C 时钟线…...

QMK键盘固件中LED锁定指示灯的配置与使用详解(实操部分+拓展)

QMK键盘固件中LED锁定指示灯的配置与使用详解 大家好!今天就跟大家一起探索QMK固件中LED锁定指示灯的配置与使用。无论你是键盘DIY新手还是老司机,相信这篇教程都能帮你解锁新技能! 一、基础配置:定义LED引脚 在QMK固件中配置LED锁定指示灯非常简单,只需在config.h文件…...

【日撸 Java 三百行】Day 12(顺序表(二))

目录 Day 12&#xff1a;顺序表&#xff08;二&#xff09; 一、顺序表的方法 1. 顺序查找 拓展&#xff1a;顺序查找中的哨兵思想 2. 插入 3. 删除 二、代码及测试 拓展&#xff1a; 小结 Day 12&#xff1a;顺序表&#xff08;二&#xff09; Task&#xff1a; 今天…...