磁盘存储下红黑树、B 树与 B + 树的原理、操作及对比
前置知识
磁盘
在计算机系统中,数据存储与检索效率深刻影响着整体性能。磁盘作为大容量数据的主要载体,其独特的 I/O 特性与树状数据结构的结合,催生出 B 树与 B + 树这两种经典方案。了解它们如何适配磁盘存储,是揭开数据库、文件系统高效运作奥秘的关键,让我们从磁盘底层机制讲起。
基本概念:
- 盘片与主轴:多个盘片装在主轴上,主轴带动盘片高速转(如 5400 转 / 分、7200 转 / 分 ),为数据读写提供运动基础。
- 磁道:盘片表面同心圆是磁道,存数据,磁性单元表示 0 和 1 。不同盘片同半径磁道构成柱面,存储分配时用它减少寻道时间。
- 扇区:磁道分弧段即扇区,是存储最小单位,通常 512 字节或 4KB ,读写以扇区为单元。
- 磁头:负责读写,悬浮盘片表面不接触,盘转时在磁道间移动寻道,定位扇区,检测或改变磁性单元状态读写数据,寻道耗时影响读写速度。
工作流程
- 寻道:当计算机发出读取或写入数据的指令时,磁头首先要移动到目标磁道,这个过程称为寻道。寻道时间取决于磁头的移动速度和目标磁道的位置,是影响磁盘随机读写性能的关键因素。
- 旋转定位:磁头到达目标磁道后,需要等待目标扇区旋转到磁头下方,这一过程需要的时间取决于盘片的转速。
- 数据传输:当目标扇区旋转到磁头下方时,磁头就可以进行数据的读取或写入操作了。数据传输的速度与盘片的转速以及磁道的存储密度等因素有关。
内存
内存(Memory)也叫内存储器,是计算机中用于临时存储数据和程序指令的硬件组件,CPU 可直接访问
作用
- 存储运行数据:存储计算机当前正在运行的操作系统、应用程序以及正在处理的数据。比如打开办公软件编辑文档时,软件程序和正在编辑的文档数据会暂存于内存。
- 提升数据访问速度:相比硬盘等外部存储设备,内存访问速度极快。CPU 能直接快速读取和写入内存中的数据,无需像访问硬盘那样经过复杂机械操作,从而加快程序运行速度。
- 支持多任务处理:计算机同时运行多个程序时,内存为每个程序分配空间,操作系统负责管理,确保程序间互不冲突。
特性 - 易失性:断电后内存中数据会立即丢失,所以仅用于临时存储。
- 随机访问:CPU 可随机快速访问内存中任一位置的数据。
数据读写
1. 读数据:先 “翻缓存”,再 “查仓库”
计算机内存中设有多级缓存(如页缓存、文件系统缓存),像一个 “数据中转站”。程序请求数据时:
先检查缓存是否已存储目标数据(称为 “缓存命中”),若命中,直接从缓存读取,速度可达纳秒级。
若缓存未命中,则触发磁盘 I/O:磁头寻道定位扇区,将数据从磁盘读入内存缓存,再返回给程序。这一过程因磁盘机械动作耗时毫秒级,是性能瓶颈。
示例:反复读取同一文件的内容,首次需磁盘读取并填充缓存,后续访问直接从缓存获取,大幅提升速度。
2. 写数据:“暂存草稿”,批量提交
程序产生新数据或修改数据时:
先将数据写入内存缓冲区(如文件系统的写缓存),相当于暂存 “草稿”,避免频繁磁盘写入。
满足特定条件时才批量写入磁盘:
时间触发:缓存数据积累到一定时间(如 Linux 默认 30 秒)。
容量触发:缓存区填满(如达到磁盘块大小的整数倍)。
主动触发:程序调用fsync等函数强制立即写入。
优势:减少磁头寻道次数,将零散写入合并为顺序写入,提升磁盘利用率。但断电可能丢失缓存未提交的数据,需依赖日志等机制保障可靠性。
b树和b+树
为什么要b树
红黑树和 B 树都是用来存数据的树形结构,不过 B 树的出现是为了解决红黑树在一些情况下的不足,特别是在和磁盘打交道的时候。下面用比较通俗的方式来说说为什么需要 B 树:
- 从磁盘读取速度来看(b树的层数少)
- 红黑树:红黑树就像一个有很多层的架子,每个格子里只能放一个东西(数据),找东西的时候得一层一层、一个格子一个格子地找。因为磁盘读数据就像从这个架子上拿东西,每次拿一个格子里的东西都要花不少时间,要是找的东西多,就得频繁地拿,速度就慢了。
- B 树:B 树像是一个每层有很多大抽屉的柜子,每个抽屉能放好多个东西。这样一来,柜子的层数就比红黑树的架子少很多。找东西的时候,一次能从一个抽屉里拿到好多东西,不用像在红黑树里那样频繁地去拿,所以能节省很多时间,也就提高了数据访问的效率。
- 从空间利用角度来说(多叉树)
- 红黑树:红黑树的每个格子小,而磁盘存数据是按一块一块来的,就好像用大盒子装小格子,盒子里有很多空间浪费了。
- B 树:B 树的抽屉大,能把盒子空间填满,这样就不会浪费磁盘空间,能更充分地利用磁盘。
- 从查找特定范围数据来看
- 红黑树:比如要找一群在某个范围内的东西,在红黑树里就得从最上面开始,一个一个地看每个格子里的东西是不是在这个范围内,要找很久。
- B 树:B 树里的东西是按顺序放在抽屉里的,要找特定范围的东西时,能很快知道哪些抽屉可能有,然后再去这些抽屉里找,不用把所有抽屉都看一遍,所以找起来更快。
b树的定义
一颗m阶b树的性质
- 节点的子树数量范围:每个非叶子节点至少有 ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉ 棵子树,奇数+1
- 节点关键字数量范围:非叶子节点中关键字的数量 n 满足 ⌈ m / 2 ⌉ − 1 ≤ n ≤ m − 1 \lceil m/2 \rceil - 1 \leq n \leq m - 1 ⌈m/2⌉−1≤n≤m−1。
- 叶子节点的位置:所有叶子节点都在同一层,叶子节点不包含任何关键字信息,可视为外部节点或查找失败的节点。
- 节点关键字与子树的关系:节点中的关键字按从小到大顺序排列,n 个关键字分别对应着 ( n + 1 ) (n + 1) (n+1) 棵子树,且子树中的关键字范围遵循特定规则。例如,对于节点中的第 i 个关键字 K i K_i Ki,其左子树中的所有关键字都小于 K i K_i Ki,右子树中的所有关键字都大于 K i K_i Ki。
- 根节点的特殊情况:根节点至少有两棵子树,除非它是叶子节点。若根节点不是叶子节点,其关键字数量至少为 1。
- 树的平衡性:B 树是一种平衡树,即树中任意节点的左右子树高度差不超过 1,保证了树的高度相对较低,从而提高了数据查找、插入和删除的效率。数据存储与磁盘块的适配性:
对比上图 讲一下性质
- 一个概念:你得脱离二叉树的概念,二叉树是一个节点一个key-val值,而b树是一个节点多个key值,比如说vwxyz是一个节点里面的值。
- 图中根节点 I 有 2 棵子树,满足根节点至少 2 棵子树的要求。假设这是 5 阶 B 树m = 5,非叶子节点 CF 有 3 棵子树,LORU 有 5 棵子树 ,对于 5 阶 B 树,,它们子树数量在 3 - 5 范围内,符合性质。
- 节点 CF 中,C < F ,其左子树 AB 中关键字小于 C ,中间子树 DE 中关键字介于 C 和 F 之间,右子树 GH 中关键字大于 F ;节点 LORU 同理,关键字有序排列,子树关键字范围符合规则 。一般都是中间隔开-中间的线!!!
代码实现:
#define DEGREE 3
typedef int KEY_VALUE;typedef struct _btree_node {KEY_VALUE *keys;struct _btree_node **childrens;int num;int leaf;
} btree_node;typedef struct _btree {btree_node *root;int t;
} btree;btree_node *btree_create_node(int t, int leaf) {btree_node *node = (btree_node*)calloc(1, sizeof(btree_node));if (node == NULL) assert(0);node->leaf = leaf;node->keys = (KEY_VALUE*)calloc(1, (2*t-1)*sizeof(KEY_VALUE));node->childrens = (btree_node**)calloc(1, (2*t) * sizeof(btree_node*));node->num = 0;return node;
}
#define DEGREE 3:定义了 B 树的最小度数为 3,最小度数决定了 B 树节点的键值数量和子节点数量的范围。
typedef int KEY_VALUE:将int类型重命名为KEY_VALUE,便于后续修改键值的数据类型。
btree_node结构体:代表 B 树的节点,包含以下成员:
KEY_VALUE *keys:指向存储键值的数组。
struct _btree_node **childrens:指向存储子节点指针的数组。
int num:记录当前节点中键值的数量。
int leaf:表示该节点是否为叶子节点,1代表是叶子节点,0代表不是
btree_node *root:指向 B 树的根节点。
int t:B 树的最小度数
插入原理
B 树的插入操作主要是要保证插入元素后,B 树依然满足其自身的性质,即每个节点的键值数量在[t - 1, 2t - 1]范围内(根节点除外),并且所有叶子节点在同一层。插入操作的核心步骤如下:
- 查找插入位置:从根节点开始,根据键值的大小,沿着合适的子节点路径向下查找,直到找到对应的叶子节点,因为新的键值总是插入到叶子节点中。
- 插入键值:
-
节点未满:如果找到的叶子节点中键值数量小于2t - 1,直接将新的键值插入到该节点的合适位置(按键值大小排序),插入操作完成。
-
节点已满:如果该叶子节点已经有2t - 1个键值,无法直接插入新键值,此时需要对该节点进行分裂操作。
- 分裂节点:将节点的中间键值(第t个键值)提升到父节点中,把该节点以中间键值为界,分为左右两个节点,每个节点包含t - 1个键值。然后将新键值插入到合适的子节点中。
- 递归处理:如果分裂导致父节点也满了,就需要对父节点继续进行分裂操作,以此类推,直到找到一个未满的节点或者到达根节点。如果根节点也需要分裂,就会创建一个新的根节点,B 树的高度会增加。
- 分裂节点:将节点的中间键值(第t个键值)提升到父节点中,把该节点以中间键值为界,分为左右两个节点,每个节点包含t - 1个键值。然后将新键值插入到合适的子节点中。
-
删除原理
B 树的删除操作相对复杂,因为要确保删除键值后,B 树仍然满足其性质。删除操作的主要步骤如下:
- 查找要删除的键值:从根节点开始,根据键值的大小,沿着合适的子节点路径向下查找,找到要删除的键值所在的节点。
- 删除键值:
- 在叶子节点中删除:
- 节点键值数量大于t - 1:直接从该叶子节点中删除键值,删除操作完成。
- 节点键值数量等于t - 1:如果直接删除会导致该节点的键值数量小于t - 1,此时需要从兄弟节点借键值或者与兄弟节点合并。
- 借键值:如果兄弟节点的键值数量大于t - 1,可以从兄弟节点借一个键值过来,同时调整父节点的键值。
- 合并节点:如果兄弟节点的键值数量也等于t - 1,则将该节点与兄弟节点合并,同时从父节点中删除一个键值。如果父节点的键值数量因此小于t - 1,需要对父节点继续进行借键值或合并操作,以此类推。
- 借键值:如果兄弟节点的键值数量大于t - 1,可以从兄弟节点借一个键值过来,同时调整父节点的键值。
- 节点键值数量大于t - 1:直接从该叶子节点中删除键值,删除操作完成。
- 在叶子节点中删除:
查找范围原理
查找步骤
- 定位起始位置:从 B 树的根节点开始,根据区间的起始值,沿着合适的子节点路径向下查找,直到找到一个可能包含起始值的叶子节点。在查找过程中,对于每个节点,比较起始值与该节点中的键值,选择合适的子节点继续查找。
- 遍历节点并收集键值:
- 从找到的叶子节点开始,按顺序检查该节点中的键值。如果键值落在指定的区间内,则将其收集起来。
- 如果该节点中的所有键值都检查完了,且还有后续的叶子节点,则移动到下一个叶子节点继续检查。在 B 树中,叶子节点通常是通过指针依次相连的,这样可以方便地进行顺序遍历。
- 终止条件:当遇到一个键值大于区间的结束值时,停止遍历,查找过程结束
b+树
其实只需对照b树来就行了
-
数据存储结构
B 树:键值和数据都存于每个节点。也就是说,每个节点既存有键值,也存有对应的数据记录或者指向数据记录的指针。这意味着在 B 树里,无论查找成功与否,可能在任何节点结束查找过程。
B + 树:只有叶子节点存放数据,非叶子节点仅用于索引。所有数据都按顺序存于叶子节点,叶子节点之间通过指针相连,形成一个有序链表,而非叶子节点仅包含键值和指向子节点的指针。 -
查询方式
B 树:可以在任何节点找到所需数据,一旦找到匹配的键值,查找操作便结束。这表明查找过程可能在树的任意层次结束。
B + 树:所有查询都必须到达叶子节点才能获取数据。这是因为只有叶子节点存有数据,非叶子节点仅用于引导查找方向。另外,借助叶子节点间的指针,B + 树能够更高效地进行范围查询。 -
插入删除操作
B 树:插入和删除操作可能会导致节点的分裂和合并,而且可能需要在多个层次进行调整,以保证树的平衡性。这些操作相对复杂,因为它们可能影响到多个节点的键值和子节点。
B + 树:插入和删除操作主要在叶子节点进行。当叶子节点满了或者不足时,仅需对叶子节点进行分裂或合并操作,非叶子节点的调整相对较少。这使得 B + 树的插入和删除操作更为简单和高效
相关文章:
磁盘存储下红黑树、B 树与 B + 树的原理、操作及对比
前置知识 磁盘 在计算机系统中,数据存储与检索效率深刻影响着整体性能。磁盘作为大容量数据的主要载体,其独特的 I/O 特性与树状数据结构的结合,催生出 B 树与 B 树这两种经典方案。了解它们如何适配磁盘存储,是揭开数据库、文…...
kubernetes》》k8s》》Volume 数据卷 PVC PV NFS
为啥需要数据卷 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重…...
支持多格式且免费的图片转换工具推荐
软件介绍 今天要给大家推荐一款超好用的开源图片格式转换工具。这款工具完全免费,没有广告的干扰,让用户在使用过程中极为舒心。 ImageConverter图片格式转换 这款工具使用起来相当便捷,无需进行安装操作,只要轻轻双击图标&…...
DAPP实战篇:使用web3.js实现前端输入钱包地址查询该地址的USDT余额—操作篇
专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读396次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你想要知道区块…...
K8S-证书更新时-误删除组件-
K8S 证书更新时-吴删除组件 [rootmaster ~] eth0 172.17.64.32 # docker rm -f docker ps | grep -E apiserver|scheduler|controller-manager| awk {print$1} 7856f2a3068e 2e1a6956d8a1 e9e3cb7870a9 31b19f4e2b22 c028146f88a5 abe4207808a3 [rootmaster ~] eth0 172.17.…...
第二章 Python爬虫篇—数据解析与提取
目录 一.数据解析概述 二.re解析和正则表达式 三.bs4解析-HTML语法 四.Xpath解析 此章节主要讲解:数据解析概述、re模块、bs4解析-html语法、xpath解析以及正则表达式。其中正则表达式我已经写过相关笔记,这里浅略叙述,如果不懂请看我笔记…...
数据仓库标准库模型架构相关概念浅讲
数据仓库与模型体系及相关概念 数据仓库与数据库的区别可参考:数据库与数据仓库的区别及关系_数据仓库和数据库-CSDN博客 总之,数据库是为捕获数据而设计,数据仓库是为分析数据而设计 数据仓库集成工具 在一些大厂中,其会有自…...
【区块链+ 人才服务】特范云区块链教学管理平台 | FISCO BCOS 应用案例
北京特范云科技有限公司利用大数据与人工智能等核心技术优势, 构建了“学、练、赛、评”一体化智慧体育课堂,促进教育技术、体育科学、IT 技术与体育教学的深度融合。公司首次提出了“体育动作积木”的教学概念, 通过区块链技术将学生的体测体…...
第一节:React 基础篇-React虚拟DOM原理及Diff算法优化策略
必考点:虚拟DOM树对比(同级比较、Key的作用、组件类型判断) 延伸:React 18中并发更新对Diff算法的影响 React虚拟DOM原理及Diff算法优化策略 虚拟DOM核心原理 概念: • 虚拟DOM(Virtual DOM)…...
MQTT的构成、使用场景、工作原理介绍
一、MQTT内容简介 MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议【适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境】它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的…...
idea光标变成白色方块的解决方法
在使用 IDEA 进行编程时,你可能会遇到这样一个情况:原本纤细的光标突然变成了白色粗块,这不仅影响视觉体验,还可能在输入时带来困扰。别担心,本文将为你详细剖析该问题出现的原因,并提供有效的解决办法。…...
python manimgl数学动画演示_微积分_线性代数原理_ubuntu安装问题[已解决]
1.背景 最近调研python opencv, cuda加速矩阵/向量运算, 对于矩阵的线性变换, 秩, 转秩, 行列式变化等概概念模糊不清. 大概课本依旧是天书, 于是上B站搜索线性代数, 看到 3Blue1Brown 线性变换本质 视频, 点击观看. 惊为天人 --> 豁然开朗 --> 突然顿悟 --> 开心不已…...
如何为C++实习做准备?
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
Linux 安装 vscode
使用包管理器安装(推荐) 对于基于 Debian 的系统(如 Ubuntu): sudo apt update sudo apt install software-properties-common apt-transport-https wget -qO- https://packages.microsoft.com/keys/microsoft.asc …...
淘宝商品数据实时抓取 API 开发指南:从接口申请到数据解析实战
一、引言 在当今电商蓬勃发展的时代,淘宝作为国内电商巨头,其平台上汇聚了海量商品信息。对于电商从业者、数据分析爱好者以及众多依赖淘宝商品数据开展业务的企业而言,能够实时获取淘宝商品数据具有极高价值。例如,电商运营者…...
明远智睿SSD2351核心板在物联网领域的应用实践
物联网作为当今科技发展的热门领域,将无数设备连接在一起,实现数据的采集、传输与共享,构建起一个智能化的世界。在这庞大的物联网体系中,核心板扮演着至关重要的角色,明远智睿SSD2351核心板以其独特优势,在…...
这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件
这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件 解决方法 vscode降级,使用1.86以前的版本。亲测这种方法成功解决 首先关闭VSCode自动更新 Windows下载1.85版本链接:https://update.code.visua…...
996引擎-源码学习:PureMVC Lua 中的 Facade 类
996引擎-源码学习:PureMVC Lua 中的 Facade 类 1. 核心概念1.1 外观模式1.2 多例模式2. 关键组件NotificationController:ModelView3. 主要功能4. 初始化流程5. 通信机制6. 生命周期管理1. Facade 初始化流程图2. 发送通知时序图中介者 PlayerBestRingLayerMediatorOpenLayer …...
前端学习10—Ajax
1 AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大优势为:无刷新获取数据 AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方…...
python的多线程和多进程程序编程
CPU密集型使用多进程,IO密集型使用多线程 查看进程ID和线程ID的命令分别是os.getpid()和threading.current_thread() 多进程使用multiprocessing就可以了,通常使用进程池来完成操作,阻塞主进程使用join方法 多线程使用threading模块&#…...
Python代码解释
文章目录 代码解析执行过程等价写法其他类似操作 这段代码使用了 Python 的 map() 函数和 lambda 表达式来对列表中的每个元素进行平方运算。让我详细解释一下: 代码解析 numbers [1, 2, 3, 4] squared list(map(lambda x: x**2, numbers))numbers [1, 2, 3, …...
DNS正反向解析复习,DNS主从服务,转发服务及DNS和nginx联合案例(不断更新)
正向解析 1、配置主机名 [rootlocalhost ~]# dnf install bash-completion -y #一个按tap键补全的软件 [rootlocalhost ~]# hostnamectl hostname dns #改主机名为dns [rootlocalhost ~]# exit ssh root你的IP地址 要重启才会生效2、安装bind [rootdns ~]# dnf install b…...
甜心速达智慧潮流精选超市、即时零售新业态,打造可持续发展商业模式
四川甜心速达科技有限公司、现公司运营高管团队均为美团高级运营师,公司高管团队人均获得“全国工商联人才交流服务中心”创业指导师、市场营销师等、公司致力于优化线上店铺人效比和资源匹配等问题,已经实现了对即时零售行业的资源整合,并融…...
大白话聊MySQL覆盖索引
目录 一、什么是覆盖索引?二、使用了覆盖索引 vs 没使用覆盖索引的区别三、例子说明四、总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! …...
C++ inline和define(宏)
文章目录 Inline 函数是什么意思?C中哪些函数不能声明为inline?内联(inline)函数和 #define(宏) Inline 函数是什么意思? inline是内联的意思,可以定义比较小的函数。因为函数频繁调用会占用很多的栈空间,…...
Python中的eval()函数详解
文章目录 Python中的eval()函数详解基本语法基本用法安全性问题安全使用建议实际应用场景与exec()的区别性能考虑总结 Python中的eval()函数详解 eval()是Python的一个内置函数,用于执行字符串形式的Python表达式并返回结果。它是一个强大但需要谨慎使用的函数。 …...
rancher 解决拉取dashboard-shell镜像失败的问题
问题背景 在 Kubernetes 集群中部署 Rancher 后,点击右上角的 "Shell" 按钮时,Rancher 会动态创建一个 dashboard-shell-xxxxx Pod,用于提供 Web 终端功能。然而,由于默认镜像 rancher/shell:v0.1.21 托管在 Docker Hu…...
在Ubuntu服务器上安装Docker(支持Ubuntu 20.04/22.04等版本):
1. 卸载旧版本(如有) 如果系统曾安装过旧版Docker,先清理残留: sudo apt remove docker docker-engine docker.io containerd runc2. 添加Docker官方仓库 安装依赖工具 sudo apt update sudo apt install -y ca-certificates …...
【Linux 进程控制】—— 进程亦生生不息:起于鸿蒙,守若空谷,归于太虚
欢迎来到一整颗红豆的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由一整颗红豆原创✍️,感谢支持❤️!请尊重原创…...
K8s常用基础管理命令(一)
基础管理命令 基础命令kubectl get命令kubectl create命令kubectl apply命令kubectl delete命令kubectl describe命令kubectl explain命令kubectl run命令kubectl cp命令kubectl edit命令kubectl logs命令kubectl exec命令kubectl port-forward命令kubectl patch命令 集群管理命…...
WebChat 一款非常好用的浏览器侧边栏 AI 问答插件
文章目录 使用方法及效果展示划线引用自定义工具自定义模型设置 主要功能1. 划线引用功能2. 自定义划线工具3. 聊天功能4. 历史记录管理5. 界面特性 安装方法方法一:直接安装发布版本(推荐)方法二:从源码构建安装(开发…...
kubernetes入门篇之创建一个nginx容器
上几篇讲了部署master和worker node 及网络插件calico, 现在开始实际运行一个容器。 1. 新建nginx.yaml文件 方式1:直接创建一个pod 和一个 service,一般不直接这样创建,该方式仅适用于测试或学习 apiVersion: v1 kind: Pod …...
回顾 | 2025香港Web3嘉年华:CertiK以创新技术定义安全未来
4月6日至9日,Web3安全巨头CertiK亮相2025香港Web3嘉年华。活动期间,CertiK不仅设立独立展位与广大Web3生态参与者深入互动,更通过高层次的技术交流与前沿研究成果展示,成为本届盛会备受瞩目的焦点。 耶鲁大学计算机科学系教授、C…...
HTML5的笔记
文章目录 1.HTML的概念1.1HTML的基本骨架 2.标签语法2.1标签的关系 3.标签3.1双标签3.1.1标题标签<h1~h6>3.1.2段落标签<p>3.1.3文本格式化标签3.1.4超链接标签<a>3.1.5音频和视频标签audio和<vedio>3.1.6列表标签3.1.7表格标签 3.2单标签3.2.1换行标签…...
LeetCode.2843. 统计对称整数的数目
统计对称整数的数目 题目解题思路思路1.v1Code 思路优化1.v2Code 思路优化1.v3Code复杂度分析 题目 2843. 统计对称整数的数目 给你两个正整数 low 和 high 。 对于一个由 2 * n 位数字组成的整数 x ,如果其前 n 位数字之和与后 n 位数字之和相等,则认…...
Java常用工具算法-6--秘钥托管云服务3--微软zure Key Vault
Azure Key Vault是微软Azure提供的一项服务,旨在帮助用户安全地存储和管理敏感信息,如加密密钥、证书和密码等。它提供了一个集中的位置来保护这些重要资产,并且通过细粒度的访问控制和审计日志来确保安全性。 1、主要功能 (1&a…...
表格开启聚光灯,查看数据不错行-Excel易用宝
面对如此庞大的一个表格,每次找数据就像走迷宫一样,有时看到了数据,眼神不好的小丽小手一抖还会选择到其他数据上,我问她个数据,她经常给我报个错的数据,我说怎么数据总是对不上号。 对于大表格防看错行这…...
解决java使用easyexcel填充模版后,高度不一致问题
自定义工具,可以通过获取上一行行高设置后面所以行的高度 package org.springblade.modules.api.utils;import com.alibaba.excel.write.handler.RowWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.wr…...
【25软考网工笔记】第二章 数据通信基础(1)信道特性 奈奎斯特 香农定理
一、信道特性 1. 数据通信概念 1)通信系统的基本元素 通信目的: 传递信息。 信源: 产生和发送信息的一端,即信息发送的源头。 信宿: 接收信息的一端,即信息的目的地。 信道: 信源和信宿之间的通信线路,用于传输信息。 信号变换:…...
2024年React最新高频面试题及核心考点解析,涵盖基础、进阶和新特性,助你高效备战
以下是2024年React最新高频面试题及核心考点解析,涵盖基础、进阶和新特性,助你高效备战: 一、基础篇 React虚拟DOM原理及Diff算法优化策略 • 必考点:虚拟DOM树对比(同级比较、Key的作用、组件类型判断) …...
【Code】《代码整洁之道》笔记-Chapter11-系统
第11章 系统 “复杂要人命。它消磨开发者的生命,让产品难以规划、构建和测试。” 11.1 如何建造一个城市 你能自己掌管一切细节吗?大概不行。即便是管理一个既存的城市,也是靠单人能力无法做到的。不过,城市还是在运转&#…...
MySQL数据库编程总结
MySQL数据库编程总结 一、数据库概述 数据库定义 • 数据库是管理数据的软件系统,用于高效存储、管理和检索数据,减少冗余。 • 核心功能:通过SQL语言定义、操作数据,维护完整性和安全性。 常见数据库 • MySQL、Oracle、SQL Ser…...
MySQL学习笔记7【InnoDB】
Innodb 1. 架构 1.1 内存部分 buffer pool 缓冲池是主存中的第一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删查改操作时,先操作缓冲池中的数据,然后以一定频率刷新到磁盘,这样操作明显提升了速度。 …...
HTML应用指南:利用GET请求获取全国汉堡王门店位置信息
在当今快节奏的都市生活中,餐饮品牌的门店布局不仅反映了其市场策略,更折射出消费者对便捷、品质和品牌认同的追求。汉堡王(Burger King)作为全球知名的西式快餐品牌之一,在中国市场同样占据重要地位。自进入中国市场以…...
STM32+EC600E 4G模块 与华为云平台通信
前言 由于在STM32巡回研讨会上淘了一块EC600E4G模块以及刚办完电信卡多了两张副卡,副卡有流量刚好可以用一下,试想着以后画一块ESP32板子搭配这个4G模块做个随身WIFI,目前先用这个模块搭配STM32玩一下云平顺便记录一下。 实验目的 实现STM…...
【Spring】IoC详解:五大类注解、类Bean的存储(上)
1.IoC本质 IoC(Inversion of Control,控制反转) 是Spring框架的灵魂,它颠覆了传统编程中“谁用谁造”的逻辑。简单来说,IoC就是把对象创建和管理的控制权从程序员手中“反转”给一个外部容器,让代码更灵活…...
图片压缩后失真?3款工具还原高清细节
在当今,图片的使用无处不在。为了便于存储和传输,我们常常会对图片进行压缩。然而,不少人发现,压缩后的图片往往变得模糊,失去了原本的清晰度和细节。那么,当遇到这种情况时,我们该如何将模糊的…...
2025中国移动云智算大会|彩讯企业级AI应用产品引关注
2025中国移动以“由云向智,共绘算网新生态”为主题,精心打造了一场智能科技展。中国移动携手生态伙伴带来涵盖算力、工具、模型、应用等覆盖多样化场景的AI应用服务,赋能生产方式、生活方式、社会治理方式的数智化解决方案,充分释…...
在新一代人工智能技术引领下的,相互联系、层层递进的明厨亮灶开源了
明厨亮灶视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。AI技术可以24小时…...
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
前言:在这个人人都想当摄影师的时代,一张完美的照片简直比中彩票还难。但别担心,今天我来给大家揭秘一个超级神器——IOPaint!这款免费开源的AI工具不仅能一键移除照片中的杂物和路人,还能智能扩展图片内容,…...