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

【HTTPS协议原理】数据加密、如何防止中间人攻击、证书和签名、HTTPS完整工作流程

头像
⭐️个人主页:@小羊
⭐️所属专栏:Linux网络
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

    • 数据加密
    • 常见的加密方式
    • 数据摘要
      • 方案一:仅使用对称加密
      • 方案二:仅使用非对称加密
      • 方案三:双方都使用非对称加密
      • 方案四:非对称加密 + 对称加密
    • CA认证证书
      • 方案五:非对称加密 + 对称加密 + 证书认证
    • HTTPS完整流程


数据加密

HTTPS 也是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP 的内容是明文传输的,明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击 ,所以我们才需要对信息进行加密。

加密就是把明文进行一系列变换生成密文,解密就是把密文再进行一系列变换还原成明文。在加密和解密的过程中,往往需要一个或多个中间数据辅助这个过程,这样的数据称为密钥。

在这里插入图片描述


常见的加密方式

  • 对称加密

    • 采用单钥密码系统的加密;
    • 加密和解密所用的密钥是相同的;
    • 计算量小,因此加密速度快。
  • 非对称加密

    • 需要两个密钥来进行加密和解密,公开密钥私有密钥
    • 算法强度复杂,因此加密速度较慢;
    • 通过公钥对明文加密,变成密文,私钥对密文解密,变成明文,当然也可以反着用;
    • 用公钥加密,只有私钥能解密,反着来同样的也只有持有私钥的人才能加密。

数据摘要

数据摘要的基本原理是利用单向散列函数对信息进行运算,生成一串固定长度的数字摘要。和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比,因此可以用来判断数据有没有被篡改

方案一:仅使用对称加密

对数据进行对称加密可以让中间人不能得到真实数据,保证信息安全。但服务器要给很多客户端提供服务,这么多客户端每个人用的秘钥都必须是不同的,因此服务器就需要维护每个客户端和密钥之间的关联关系,比较麻烦。

有个办法就是让客户端和服务器在建立连接的时候,双方协商确定这次通信的密钥。但是如果直接把密钥明文传输,那中间人也就能获得密钥了,因此密钥的传输也必须加密传输。那么这就形成死循环了。


方案二:仅使用非对称加密

如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,因为只有服务器有相应的私钥能解开公钥加密的数据,所以从客户端到服务器信道暂时是安全的。

但是如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。


方案三:双方都使用非对称加密

  1. 服务端拥有公钥 S 与对应的私钥 S’,客户端拥有公钥 C 与对应的私钥 C’;
  2. 客户和服务端交换公钥;
  3. 客户端给服务端发信息前先用 S 对数据加密再发送,只能由服务器解密,因为
    只有服务器有私钥 S’;
  4. 服务端给客户端发信息前先用 C 对数据加密再发送,只能由客户端解密,因为
    只有客户端有私钥 C’ ;

这个方案好像可行,但是有两个问题:

  1. 非对称加密效率太低
  2. 依旧有安全问题

如何提高效率呢?


方案四:非对称加密 + 对称加密

  1. 服务端拥有非对称公钥 S 和私钥 S’;
  2. 客户端发起 https 请求,获取服务端公钥 S;
  3. 客户端在本地生成对称密钥 C,用公钥 S 加密,发送给服务器;
  4. 由于中间人没有服务端私钥,即使截获了数据也无法还原出内部的原文;
  5. 服务端通过私钥 S’解密,还原出客户端发送的对称密钥 C,并且使用这个对称密钥加密给客户端返回的响应数据;
  6. 后续客户端和服务器的通信都只用对称加密即可。

这样只在开始阶段协商密钥的时候使用非对称加密,后续的传输都使用对称加密,效率就提高了。

但是这种方案只提高了效率,还没有解决安全问题,什么安全问题呢?

如果中间人在最开始握手协商的时候就开始攻击了,可能会发生下面的问题:

在这里插入图片描述

  1. 服务器拥有非对称加密算法的公钥 S,私钥 S’;
  2. 中间人拥有非对称加密算法的公钥 M,私钥 M’;
  3. 客户端向服务端发起请求,服务端明文传送公钥 S 给客户端;
  4. 中间人劫持数据报文,提取公钥 S 并保存,然后将被劫持报文中的公钥 S 替换
    成为自己的公钥 M,并将伪造报文发给客户端;
  5. 客户端收到报文,提取公钥 M,自己形成对称秘钥 X,用公钥 M 加密 X,形成报文发送给服务器;
  6. 中间人劫持后,直接用自己的私钥 M’进行解密,得到通信秘钥 X,再用曾经保存
    的服务端公钥 S 加密后,将报文推送给服务器;
  7. 服务器拿到报文,用自己的私钥 S’解密,得到通信秘钥 X;
  8. 双方开始采用 X 进行对称加密通信,但是他们不知道的是他们的通信信息中间人也能看到,甚至修改。

那么这个问题的痛点在哪里呢?

客户端无法确定收到的含有公钥的数据报文,是不是真的由目标服务器发送过来的。


CA认证证书

服务端在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥,证书就如身份证,证明服务端公钥的权威性。

在这里插入图片描述

当服务端申请 CA 证书的时候,CA 机构会对该服务端进行审核,并专门为该网站形成
数字签名,过程如下:

  1. CA 机构拥有非对称加密的私钥 A 和公钥 A’;
  2. CA 机构对服务端申请的证书明文数据进行 hash,形成数据摘要;
  3. 然后对数据摘要用 CA 私钥 A’加密,得到数字签名 S;
  4. 服务端申请的证书明文和数字签名 S 共同组成了数字证书,这样一份数字证书就可以颁发给服务端了。

在这里插入图片描述


方案五:非对称加密 + 对称加密 + 证书认证

客户端和服务端建立连接,服务器给客户端返回一个证书,证书中有服务端的公钥,还有网站的身份信息。

客户端系统中已内置了受信任的证书发布机构,当客户端获取到这个证书之后,会对证书进行校验,判定证书是否过期、证书的发布机构是否受信任、证书是否被篡改等等。

然后从系统中拿到该证书发布机构的公钥,对签名解密,得到一个 hash 值(数据摘要),设为 hash1,然后计算整个证书的 hash 值,设为 hash2,对比 hash1 和 hash2 是否相等,如果相等则说明证书是没有被篡改过的。

| 如果中间人篡改了证书的明文?
由于他没有 CA 机构的私钥,所以无法 hash 之后用私钥加密形成签名,那么也就
没法办法对篡改后的证书形成匹配的签名。

| 如果强行篡改?
客户端收到该证书后会发现明文和签名解密后的值不一致,则客户端就能知道证书已被篡改,从而终止向服务器传输信息。

| 中间人整个掉包证书?
因为中间人没有 CA 私钥,所以无法制作假的证书,除非他向 CA 申请真证书(但估计没有🤡会这么干),然后用自己申请的证书进行掉包。

中间人没有 CA 私钥,所以对任何证书都无法进行合法修改,包括自己的。

| 为什么数据在网络传输的时候一定要加密形成签名?

常见的摘要算法 MD5 有以下特点:

  • 定长:无论多长的字符串,计算出来的 MD5 值都是固定长度;
  • 分散:源字符串只要改变一点点,最终得到的 MD5 值都会差别很大;
  • 不可逆:通过源字符串生成 MD5 很容易,但是通过 MD5 还原成原串理论上不可能。

因此我们可以认为如果两个字符串的 MD5 值相同,则这两个字符串相同。

假设我们的证书只是一个简单的字符串 happy,对 happy 计算 hash 值结果为BC4B2A76B9719D91。如果 happy 中有任意的字符被篡改,那么计算的 md5 值就会变化很大,比如:BDBD6F9CF51F2FD8。

然后我们可以把这个字符串 happy 和哈希值 BC4B2A76B9719D91 从服务器返回给客户端,此时客户端只需要计算 happy 的哈希值判断是不是 BC4B2A76B9719D91 即可。

| 如果中间人把 happy 篡改,同时也把哈希值重新计算下,客户端该如何应对?

所以被传输的哈希值不能传输明文,只能传输密文。所以对证书明文 hash 形成散列摘要,然后 CA 使用自己的私钥加密形成签名,将 happy 和加密的签名合起来形成CA 证书颁发给服务端,即使中间人截获了,因为没有 CA 私钥,就无法更改或者整体掉包,就能安全的证明证书的合法性。

最后,客户端通过操作系统里已经存好的证书发布机构的公钥进行解密,还原出原始的哈希值,再进行校验。


HTTPS完整流程

在这里插入图片描述

HTTPS 工作过程中涉及到的密钥有以下三组。

  • 第一组(非对称加密):用于校验证书是否被篡改。服务器持有私钥(私钥在形成 CSR 文件与申请证书时获得),客户端持有公钥(操作系统包含了可信任的 CA 认证机构),服务器在客户端请求时,返回携带签名的证书,客户端通过公钥进行证书验证,保证证书的合法性,进一步保证证书中携带的服务端公钥权威性;

  • 第二组(非对称加密):用于协商生成对称加密的密钥。客户端用收到的 CA 证书中的服务端公钥给随机生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥;

  • 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。一切的关键都是围绕这个对称加密的密钥,其他的机制都是辅助这个密钥工作的。第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器,第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥。


本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

相关文章:

【HTTPS协议原理】数据加密、如何防止中间人攻击、证书和签名、HTTPS完整工作流程

⭐️个人主页:小羊 ⭐️所属专栏:Linux网络 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 数据加密常见的加密方式数据摘要方案一:仅使用对称加密方案二:仅使用非对称加密方案三:双…...

Springboot 集成 RBAC 模型实战指南

RBAC 模型核心原理 详情可参考之前的笔记:https://blog.csdn.net/qq_35201802/article/details/146036789?spm1011.2415.3001.5331 RBAC 定义与优势 RBAC(Role-Based Access Control,基于角色的访问控制)** 是一种通过角色关联…...

C++继承(最详细)

目录 1.继承的概念以及定义 1.1 继承的概念 1.2 继承的定义 ​编辑 2.继承中的作用域 3.基类和派生类间的转换 4.派生类的默认成员函数 5.实现不被继承的类 6.継承与友元 ​编辑 7.继承与静态成员 8.多继承及其菱形继承问题 8.2 虚继承 8.3 来看一个小题 9.继承…...

【使用Plink检测ROH问题查找】为什么检测ROH参数不一样,FROH近交系数结果差异很大?

为什么检测ROH参数不一样,结果差异很大? 结果 基于ROH检测的结果与参数设置密切相关。参数的改变(对应近交系数改变)可能会对结果产生很大影响。 原因 ROH分析缺乏共识标准,这种缺乏共识将导致结果偏倚&#xff0c…...

mybatis mapper.xml中使用枚举

重点:application.propertis配置类 #TypeEnumHandler 这个类的包名,不是全路径 mybatis.type-handlers-packagecom.fan.test.handler两个枚举类: public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…...

探索科技的边界:代理IP与汽车产业链的创新之旅

目录 一、代理IP:汽车产业的"数字放大镜" 二、创新应用场景:从实验室到量产线 三、技术挑战与进化方向 四、未来图景:车联网时代的"数字血管" 结语:重构产业认知的"数字齿轮" 在数字化浪潮席卷…...

单个或批量实现-提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件。

第一、单个PDF文件命名格式: 提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件 import pdfplumber import re import osdef extract_contract_info(pdf_path):with pdfplumber.open(pdf_path) as pdf:for page in pdf.pages:text page.extract_tex…...

虚拟机的网络配置

第一章 配置网络(注意NAT类型) 1. 在VMware中配置 虚拟网络编译器 1) 点击编辑 就会出现 虚拟网络编译器 并点击(要再虚拟机关机的情况下进行) 2)点击右下角的 更改设置 再点击 VMnet 红色框里192.168.x…...

JAVA设计模式——(二)组合模式

JAVA设计模式——(二)组合模式 原理解释实现定义规范接口定义主干定义分支定义叶子测试代码 优势 原理 组合模式用于描述对象在“整体-部分”中的关系,用户对单个对象和组合对象的使用具有一致性。 组合模式中由于单个对象和组合对象的使用…...

【数据结构和算法】5. 堆栈和队列

本文根据 数据结构和算法入门 视频记录 文章目录 1. 堆栈(Stack)1.1 概念1.2 数组栈实现1.3 链式栈实现 2. 队列(Queue)2.1 概念2.2 数组队列实现2.3 链式队列实现 在这一章我们来了解两个很特殊的数据结构:堆栈 (Stac…...

万字长文 | Apache SeaTunnel 分离集群模式部署 K8s 集群实践

文章作者:雷宝鑫 整理排版:白鲸开源 曾辉 Apache SeaTunnel官网链接: https://seatunnel.apache.org/ Apache SeaTunnel(以下简称SeaTunnel)是一款新一代高性能、分布式的数据集成同步工具,正受到业界广泛关注和应用。SeaTunnel支…...

逻辑回归:使用 S 型函数进行概率预测

逻辑回归:使用 S 型函数进行概率预测 摘要 本文章深入探讨了逻辑回归模型如何利用 S 型函数将线性回归的输出转换为概率值。文章详细阐述了 S 型函数的数学原理、在逻辑回归中的应用以及其在机器学习中的重要性。通过具体示例和练习,帮助读者理解如何使…...

马浩棋:产通链CT-Chain 破局不动产 RWA,引领数智金融新变革

全球不动产 RWA 数智金融高峰论坛上马浩棋先生致辞 在全球不动产 RWA 数智金融高峰论坛暨产通链 CT-Chain 上链首发会的现场,犀牛世纪集团(香港)有限公司董事会主席马浩棋成为众人瞩目的焦点。此次盛会汇聚了全球金融、区块链及不动产领域的…...

iscsi服务端安装及配置

1. 安装targetcli软件包 yum install -y targetcli 2. 启动target服务 systemctl start target systemctl enable target 3. 配置防火墙 firewall-cmd --add-port"3260/tcp" 3. 准备一个物理分区(或者逻辑分区)…...

常见的神经网络权重文件格式及其详细说明

常见的神经网络权重文件格式及其详细说明的表格: 扩展名所属框架/工具如何生成表示内容使用方法注意事项.pt, .pthPyTorchtorch.save(model.state_dict(), "model.pt")PyTorch模型的状态字典(权重和参数)或整个模型加载方式&#…...

帕金森发病类型和阶段

文章目录 直观认识帕金森综合症的类型一、原发性帕金森综合征二、继发性(获得性)帕金森综合征三、帕金森叠加综合征(Atypical Parkinsonism)四、遗传性帕金森综合征五、其他罕见类型推荐文献与资源 PD的病理分期理论(B…...

基于ssm的“安家”儿童福利院管理系统(源码+文档)

项目简介 “安家”儿童福利院实现了以下功能: “安家”儿童福利院管理系统的主要使用者分为管理员:儿童管理、申请领养管理、捐赠管理、楼栋管理、宿舍管理、分配信息管理、宿舍物品管理、报修管理、维修工管理、报修状态管理、留言管理、系统管理。 用…...

闲聊人工智能对媒体的影响

技术总是不断地改变信息的传播方式。互联网促进了社交媒体的蓬勃发展。 网络媒体成为主流。大语言模型为代表的人工智能的出现,又会对媒体传播带来怎样的改变呢?媒体的演变反映了社会和技术的演变。 人工智能(AI) 将继续对整个媒体行业产生变革性的影响。…...

健身房管理系统(springboot+ssm+vue+mysql)含运行文档

健身房管理系统(springbootssmvuemysql)含运行文档 健身房管理系统是一个全面的解决方案,旨在帮助健身房高效管理其运营。系统提供多种功能模块,包括会员管理、员工管理、会员卡管理、教练信息管理、解聘管理、健身项目管理、指导项目管理、健身器材管理…...

离散化区间和 java c++

文章目录 题面解题思路javacpp 题面 题目链接:点击传送 假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。 现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。 接下来,进行 m 次询问,每…...

「数据可视化 D3系列」入门第十二章:树状图详解与实践

树状图深度解析与实现 一、核心API解析1. d3.hierarchy2. d3.tree3. 节点操作方法 二、完整实现解析三、高级技巧与优化四、常见问题解决小结下章预告:地图可视化 树状图是一种常见的层次结构可视化方式,它能够清晰地展示数据之间的父子关系。本文将详细…...

IDEA 创建Maven 工程(图文)

设置Maven 仓库 打开IDEA 开发工具,我的版本是2024.3.1(每个版本的位置不一样)。在【Customize】选项中,可以直接设置【语言】,在最下面选择【All setting】。 进入到熟悉的配置界面,选择配置的【setting…...

机器学习06-RNN

RNN(循环神经网络)学习笔记 一、RNN 概述 循环神经网络(Recurrent Neural Network,RNN)是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神…...

Java常用正则表达式及使用方法

在 Java 中,Pattern 和 Matcher 类是 java.util.regex 包的核心,用于处理正则表达式。 Pattern 类 Pattern 类表示编译后的正则表达式,它提供了一种将正则表达式字符串编译成可执行对象的方式,以便后续用于匹配操作。 常用方法…...

新零售行业时代:如何用科技驱动传统零售的转型升级​​

新零售行业时代:如何用科技驱动传统零售的转型升级​​ ​​“在变化的世界中,唯一不变的是变化本身。”​​ ​​一、传统零售的困局:当“生存”成为一场鏖战​​ 街角的便利店老板老王,每天凌晨4点起床进货,却在月…...

DeepSeek和Excel结合生成动态图表

文章目录 一、前言二、3D柱状图案例2.1、pyecharts可视化官网2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、动态调整数据 一、前言 最近在找一些比较炫酷的动态图表,用于日常汇报,于是找到了 DeepseekExcel王牌组合,其等同于动态图…...

大模型学习笔记------Llama 3模型架构之分组查询注意力(GQA)

大模型学习笔记------Llama 3模型架构之分组查询注意力(GQA) 1、分组查询注意力(GQA)的动机2、 多头注意力(Multi-Head Attention, MHA)3、 多查询注意力 (Multi-Query Attention,MQA)4、 分组查…...

WordPress 只能访问html文件,不能访问php

部署WordPress 遇到的问题 说来惭愧,尝试了多次流程,输入ip能够访问到配置路径下面的html文件,但就是无法访问php文件,查来查去,最后在AI工具的逐一梳理下,是PHP-FPM配置下面出的问题,默认账号…...

Python 之 pyecharts 使用

要说绘制动态图表,echarts 肯定是有一席之地的,特别是像 flask 这种轻量级的 web 框架,在 html 中动态嵌入生成 echarts 无疑是很优的选择。pyecharts 简单来说就是以 python 的方式来生成对应的 echarts 图表。 安装 pip install pyechart…...

【第九章 Python学习之函数Ⅱ】

【2025】Python最新最完整教程,零基础看这一个就够了 第九章 Python学习之函数Ⅱ 文章目录 【2025】Python最新最完整教程,零基础看这一个就够了前言一、说两句二、定义函数函数定义规则函数的参数参数的类型及用途1. 必需参数(位置参数)2. 关键字参数3. 默认参数4. 可变参…...

传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。

### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。 这是因为集合数据量过大,需要对集合进行拆分操作&#xff0…...

IDEA热加载

翻译:"你运行的应用程序 BfApplication 启动之后,它的一些类文件(通常是你修改过的 .java​ 文件被重新编译了)发生了变化。你想现在就重新加载这些更改过的类吗?" 解释: 热重载: 这是一种开发时非常有用的技术。当你…...

常用第三方库:dio网络库使用与封装

常用第三方库:dio网络库使用与封装 前言 dio是Flutter生态中最受欢迎的网络请求库之一,它提供了强大的功能和灵活的配置选项。本文将从实战角度深入介绍dio的使用技巧和最佳实践。 基础知识 1. dio简介 dio是一个强大的Dart Http请求库,…...

解决IntelliJ IDEA配置文件(application.properties)中文注释变成乱码的问题

文章目录 1. 问题呈现2. 问题产生的原因3. 解决方法 更多 IntelliJ IDEA 的使用技巧可查看 IntelliJ IDEA 专栏中的文章:IntelliJ IDEA 1. 问题呈现 在 IntelliJ IDEA 中打开配置文件(application.properties)时,文件中的中文注…...

linux基础14--dns和web+dns

DNS:域名系统(Domain Name System) DNS协议是用来将域名转换为IP地址或将IP地址转换为相应的域名 DNS使用TCP和UDP端口53,给用户提供解析时一般使用UDP53 对于每一级域名长度的限制是63个字符,域名总长度则不能超过2…...

Java 静态内部类面试题与高质量答案合集

本文整理了关于 Java 静态内部类(Static Nested Class)在面试中的高频问题及标准答案,帮助你理解其底层原理、内存表现以及实际应用。 1. 什么是静态内部类?和普通内部类有什么区别? 答: 静态内部类是定义…...

React.cloneElement的用法详解

React.cloneElement的用法详解 React.cloneElement 是 React 提供的一个 API&#xff0c;用于克隆现有的 React 元素&#xff0c;并在克隆的基础上添加或覆盖属性&#xff0c;同时保留原有的子元素。 语法 React.cloneElement(element: ReactElement, props?: Partial<P…...

【数学建模】孤立森林算法:异常检测的高效利器

孤立森林算法&#xff1a;异常检测的高效利器 文章目录 孤立森林算法&#xff1a;异常检测的高效利器1 引言2 孤立森林算法原理2.1 核心思想2.2 算法流程步骤一&#xff1a;构建孤立树(iTree)步骤二&#xff1a;构建孤立森林(iForest)步骤三&#xff1a;计算异常分数 3 代码实现…...

3.1 WPF使用MaterialDesign的介绍1

MaterialDesignInXAML Toolkit 是一个流行的开源 C# WPF 控件库,它实现了 Google 的 Material Design 规范,让开发者可以轻松创建现代化的 WPF 应用程序界面 Material Design 是一个流行的设计语言,由 Google 开发,旨在帮助开发者构建美观且一致的 UI 界面。对于使用 C# 的…...

多路转接select服务器

目录 select函数原型 select服务器 select的缺点 前面介绍过多路转接就是能同时等待多个文件描述符&#xff0c;这篇文章介绍一下多路转接方案中的select的使用 select函数原型 #include <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, f…...

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思&#xff0c;假设有下面的一块田地&#xff0c;负数代表是凹地&#xff0c;正数代表是凸地&#xff0c;数字的大小表示凹或者凸的程度。现在下一场大雨&…...

二叉树层序遍历技术解析与面试指南

文章目录 一、二叉树层序遍历技术解析1. 问题描述2. 层序遍历核心思想3. Java实现代码&#xff08;带详细注释&#xff09;4. 算法关键点解析5. 复杂度分析 二、资深后端面试深度指南1. 高频面试问题集Q1: 如何实现Z字形层序遍历&#xff08;锯齿形遍历&#xff09;&#xff1f…...

软考软件设计师考试情况与大纲概述

文章目录 **一、考试科目与形式****二、考试大纲与核心知识点****科目1&#xff1a;计算机与软件工程知识****科目2&#xff1a;软件设计** **三、备考建议****四、参考资料** 这是一个系列文章的开篇 本文对2025年软考软件设计师考试的大纲及核心内容进行了整理&#xff0c;并…...

一款丰富的工作流自动化平台 | N8N 83.6K ⭐

N8N 介绍 N8N 是一个工作流自动化平台&#xff0c;为技术团队提供代码的灵活性和无代码的速度。n8n 具有 400 集成、原生 AI 功能和公平代码许可证&#xff0c;可让您构建强大的自动化功能&#xff0c;同时保持对数据和部署的完全控制。 &#x1f6a2; 项目地址 Github: https…...

Apache PDFBox

Apache PDFBox 是一个用于处理 PDF 文档的开源 Java 库&#xff0c;由 Apache 软件基金会开发和维护。它提供了丰富的功能&#xff0c;允许开发者在 Java 应用程序中创建、读取、修改和提取 PDF 文件中的信息。以下是关于 PDFBox 的详细介绍&#xff1a; 主要功能 创建 PDF 文…...

如何批量为多个 Word 文档添加水印保护

在日常办公中&#xff0c;Word文档添加水印是一项重要的操作&#xff0c;特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能&#xff0c;但当需要一次性给多个Word文档添加水印时&#xff0c;手动操作显得非常繁琐且低效。为了提高效率&#xff0c;可…...

【MySQL】005.MySQL表的约束(上)

文章目录 表的约束1. 约束概念2. 空属性2.1 基本语法2.2 使用示例 3. 默认值3.1 基本概念3.2 使用示例 4. 列描述4.1 基本概念4.2 使用示例 5. zerofill5.1 基本功能5.2 使用示例5.3 注意事项 6. 主键6.1 基本概念6.2 使用示例 表的约束 1. 约束概念 真正约束字段的是数据类型…...

力扣刷题Day 27:环形链表(141)

1.题目描述 2.思路 创建一个结点集合&#xff0c;遍历链表&#xff0c;如果遇到已经加进集合的结点就说明链表有环。 3.代码&#xff08;Python3&#xff09; class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:node headnode_set set()while node…...

window上 elasticsearch v9.0 与 jmeter5.6.3版本 冲突,造成es 启动失败

[2025-04-22T11:00:22,508][ERROR][o.e.b.Elasticsearch ] [AIRUY] fatal exception while booting Elasticsearchjava.nio.file.NoSuchFileException: D:\Program Files\apache-jmeter-5.6.3\lib\logkit-2.0.jar 解决方案&#xff1a; 降低 es安装版本 &#xff0c;选择…...

PDF转换Word深度评测 - ComPDFKit Conversion SDK V3.0

ComPDFKit PDF 转换 SDK 在V3.0 中有以下几个新功能: 使用百万级文档训练数据集对 PPYoloE AI 模型进行微调 全场景布局分析算法及下一代表格识别算法 重构数据结构、转换流程、PDF解析和输出模块 混合布局&#xff1a;将流式布局与固定布局相结合&#xff0c;以保持原始布局…...