B树与B+树的奥秘:原理解析与性能

引言

B树和B+树是计算机科学中两个重要的数据结构,它们在数据库和文件系统中扮演着至关重要的角色。在处理大量数据时,高效的数据组织和检索方式是至关重要的,而B树和B+树正是为此而设计的。

B树和B+树都是多路查找树的变体,它们通过将多个键值存储在一个节点中,有效地减少了磁盘I/O访问次数,从而提高了数据检索的效率。这种优化对于处理大型数据库和文件系统特别重要,因为它们可以大大减少磁盘访问次数,提高了数据的读取和写入速度。

在本文中,我们将深入探讨B树和B+树的原理、操作以及它们之间的区别。首先,我们将介绍树结构的基础概念,包括二叉树、平衡树和多路查找树。然后,我们将详细讨论B树和B+树的定义、性质和节点结构,以及它们的构建过程、查找过程和删除过程。

接着,我们将比较B树和B+树在结构上的差异和性能上的差异,包括查找效率、插入和删除效率、磁盘读写性能以及范围查询的性能。我们还将探讨B树和B+树在不同场景下的适用性,并提供选择索引结构的依据。

通过分析一些著名数据库系统中B树和B+树的实际应用案例,我们将进一步理解它们在现实世界中的应用和优劣势。最后,我们将总结B树和B+树的主要特点,强调它们在现代计算机系统中的重要性,并指出它们的优缺点。

本文将帮助读者深入了解B树和B+树的奥秘,以及它们在数据库和文件系统中的应用。通过清晰的解释和丰富的内容,读者将能够更好地理解这两种重要的数据结构,并在实际应用中做出更明智的选择。

基础概念

树结构简介

二叉树

二叉树是一种常见的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。这种结构方便了对数据的快速查找和排序操作。

平衡树

平衡树是一种特殊的二叉树,它的左右子树的高度差不超过1。通过保持树的平衡,平衡树能够确保在最坏情况下的查找效率仍然很高,避免了出现退化为链表的情况。

多路查找树

多路查找树是指每个节点可以包含多个子节点的树结构。相比于二叉树,多路查找树能够在每个节点存储更多的数据,提高了存储和检索的效率。

B树定义

B树的概念

B树是一种多路平衡查找树,它的每个节点可以含有多个子节点,且每个节点中的数据按顺序排列。B树通常应用于文件系统和数据库中,能够有效地支持范围查找和大数据量的存储。

B树的性质
  • 所有叶子节点位于同一层级。
  • 每个节点包含的关键字数量有上下界限。
  • 根节点至少包含一个关键字。
  • 非叶子节点的关键字按非降序排列。
B树的节点结构

B树的节点包含两种类型:内部节点和叶子节点。内部节点存储关键字和子节点指针,而叶子节点存储关键字和相关数据。

B+树定义

B+树的概念

B+树也是一种多路平衡查找树,与B树相比,B+树的叶子节点形成了一个有序链表,能够更快地支持范围查找操作。

B+树的性质
  • 所有叶子节点通过指针连接成一个有序链表。
  • 非叶子节点只存储索引,不存储数据。
  • 叶子节点存储了全部数据,并且按顺序排列。
B+树的节点结构

B+树的节点结构与B树类似,但是在B+树中,叶子节点包含了全部数据,而内部节点仅包含索引。

这些基础概念是理解B树与B+树的重要前提,后续我们将深入探讨它们的构建过程、查找过程、删除过程以及在不同场景下的应用和性能比较。

B树的原理与操作

构建过程

节点分裂

B树的构建过程中,当一个节点已满时,需要进行节点分裂操作。节点分裂的基本思想是将一个节点中的关键字按中值分成两部分,并将中值提升到父节点中。这样可以保持B树的平衡性质。

节点分裂的具体步骤如下:

  1. 找到满节点中的中值。
  2. 将中值提升到父节点,并创建一个新的节点作为原节点的兄弟节点。
  3. 将原节点中较小的一部分关键字移动到新节点中,并更新节点的指针。

节点分裂操作的目的是保持B树的平衡,确保每个节点的关键字数量在一个合理的范围内,同时保持树的高度平衡。

键值插入

在B树中插入新的键值时,需要遵循以下步骤:

  1. 从根节点开始,按照关键字的大小顺序逐级向下查找合适的位置。
  2. 如果目标节点未满,则直接将键值插入到该节点中,并保持节点的关键字有序。
  3. 如果目标节点已满,则进行节点分裂操作,然后继续插入。

键值插入操作保证了B树的平衡性和有序性,使得数据的插入操作具有较好的性能。

查找过程

查找算法描述

B树的查找算法类似于二叉查找树,但由于B树的节点含有多个关键字,因此查找过程稍微复杂一些。查找算法描述如下:

  1. 从根节点开始,比较目标值与节点中的关键字,选择合适的子节点继续查找。
  2. 如果目标值小于当前节点中的最小关键字,则向左子节点查找;如果目标值大于当前节点中的最大关键字,则向右子节点查找。
  3. 重复以上步骤,直到找到目标值或者到达叶子节点为止。

B树的查找算法保证了在平衡树结构中高效地查找目标值,时间复杂度为O(log n)。

删除过程

节点合并

B树的删除操作可能导致节点的关键字数量低于最小要求,需要进行节点合并操作以保持树的平衡。节点合并的基本思想是将两个相邻节点合并成一个节点,并从父节点中删除相应的关键字。

节点合并的具体步骤如下:

  1. 找到待合并的两个相邻节点和它们的父节点。
  2. 将父节点中的一个关键字下移至合并后的节点中。
  3. 将另一个节点中的所有关键字移动至合并后的节点中。
  4. 更新父节点的指针,删除一个子节点指针。

节点合并操作的目的是减少树的高度,保持B树的平衡性质,同时避免了节点数量过多的情况。

键值删除

B树的键值删除操作涉及节点的合并和关键字的移动,具体步骤如下:

  1. 找到待删除的关键字所在的节点。
  2. 如果目标节点是叶子节点,则直接删除关键字。
  3. 如果目标节点是内部节点,则选择一个合适的后继关键字替换被删除的关键字,然后递归删除后继关键字。

键值删除操作保证了B树的平衡性和有序性,使得数据的删除操作也具有较好的性能。

这些原理和操作使得B树成为了一种在数据库和文件系统中广泛应用的高效数据结构。

B+树的原理与操作

构建过程

节点分裂

B+树的构建过程中,与B树相似,当一个节点已满时,也需要进行节点分裂操作。节点分裂的目的是保持B+树的平衡性和有序性,同时利用B+树叶子节点的链表结构提高范围查询的效率。

节点分裂的步骤如下:

  1. 找到满节点中的中值。
  2. 将中值提升到父节点中,并创建一个新的节点作为原节点的兄弟节点。
  3. 将原节点中较大的一部分关键字和相关数据移动到新节点中。
  4. 更新父节点中的指针,确保指向正确的子节点。

B+树的节点分裂操作保证了树的平衡性和有序性,同时维护了叶子节点的链表结构。

键值插入

B+树的键值插入操作与B树类似,但有一点不同的是,新插入的键值总是被插入到叶子节点中,而不会出现内部节点中的情况。插入操作的具体步骤包括:

  1. 从根节点开始,按照关键字的大小顺序逐级向下查找合适的叶子节点。
  2. 如果目标叶子节点未满,则直接将键值插入到该节点中,并保持节点的关键字有序。
  3. 如果目标叶子节点已满,则进行节点分裂操作,然后继续插入。

键值插入操作保证了B+树的平衡性和有序性,同时利用了叶子节点的链表结构提高了范围查询的效率。

查找过程

查找算法描述

B+树的查找算法与B树类似,但是在B+树中,所有的数据都存储在叶子节点中,并且叶子节点通过指针连接成一个有序链表。查找过程如下:

  1. 从根节点开始,比较目标值与节点中的关键字,选择合适的子节点继续查找。
  2. 如果目标值小于当前节点中的最小关键字,则向左子节点查找;如果目标值大于当前节点中的最大关键字,则向右子节点查找。
  3. 重复以上步骤,直到找到目标值或者到达叶子节点为止。
  4. 如果到达叶子节点,则在叶子节点的链表中顺序查找目标值。

B+树的查找算法保证了在平衡树结构中高效地查找目标值,同时通过链表结构提高了范围查询的效率。

删除过程

节点合并

B+树的删除操作可能导致节点的关键字数量低于最小要求,需要进行节点合并操作以保持树的平衡。节点合并的步骤与B树相似,具体操作如下:

  1. 找到待合并的两个相邻节点和它们的父节点。
  2. 将父节点中的一个关键字下移至合并后的节点中。
  3. 将另一个节点中的所有关键字移动至合并后的节点中。
  4. 更新父节点的指针,删除一个子节点指针。

节点合并操作保持了B+树的平衡性和有序性,同时通过合并叶子节点的链表提高了范围查询的效率。

键值删除

B+树的键值删除操作涉及节点的合并和关键字的移动,具体步骤与B树相似,但只需删除叶子节点中的目标关键字即可。

键值删除操作保证了B+树的平衡性和有序性,同时维护了叶子节点的链表结构,使得删除操作具有较好的性能。

B+树通过节点分裂、键值插入、查找和删除等操作,以及叶子节点的链表结构,实现了高效的数据存储和检索功能。

B树与B+树的区别

结构上的差异

节点存储
  1. B树

    • B树的每个节点既存储关键字,又存储对应的数据。
    • 内部节点和叶子节点的结构相同,都可以存储数据。
    • B树的节点通常更大,因为每个节点需要存储数据,这可能导致更多的磁盘I/O操作。
  2. B+树

    • B+树的内部节点只存储关键字,不存储数据,只有叶子节点存储数据。
    • 内部节点和叶子节点的结构不同,内部节点只存储索引。
    • B+树的内部节点通常更小,因为不需要存储数据,这减少了磁盘I/O操作的次数。
键值分布
  1. B树

    • B树的每个节点包含了一部分关键字和对应的数据,且按照大小顺序存储。
    • 可以直接通过内部节点查找到对应的数据,而不需要在叶子节点中进行额外的查找操作。
  2. B+树

    • B+树的内部节点仅包含了关键字,不包含数据,数据全部存储在叶子节点中。
    • 内部节点的关键字范围与其子节点的范围完全对应,而叶子节点通过链表连接,使得范围查询更高效。

性能比较

查找效率
  1. B树

    • 由于B树的节点中包含了部分数据,因此在查找过程中可以直接访问内部节点,减少了查找路径的长度,提高了查找效率。
  2. B+树

    • B+树的内部节点仅包含了索引,查找过程需要沿着内部节点一直查找到叶子节点才能找到数据,因此在查找过程中可能需要更多的磁盘I/O操作。
插入和删除效率
  1. B树

    • 插入和删除操作可能需要更新内部节点和叶子节点,但由于数据存储在内部节点中,所以这些操作相对较快。
  2. B+树

    • 插入和删除操作只需要更新内部节点和叶子节点的关键字索引,因此这些操作通常更快,尤其是在大规模数据插入和删除时。
磁盘读写性能
  1. B树

    • 由于B树的节点包含了数据,因此可能需要更多的磁盘I/O操作来读取或写入节点数据,导致性能略低于B+树。
  2. B+树

    • B+树的内部节点只存储索引,叶子节点通过链表连接,减少了磁盘I/O操作的次数,因此具有更好的磁盘读写性能。
范围查询
  1. B树

    • B树在进行范围查询时可能需要遍历多个节点来获取满足条件的数据,因为数据分散在各个节点中。
  2. B+树

    • B+树在进行范围查询时只需要在叶子节点的链表上顺序查找,因此范围查询的效率更高。

综上所述,B树和B+树在结构上和性能上存在一些差异,具体的选择取决于应用场景和需求。通常来说,对于大规模数据存储和范围查询频繁的场景,B+树更适合;而对于需要频繁进行插入和删除操作的场景,B树可能更合适。

应用场景

B树的适用场景

  1. 文件系统

    • 在文件系统中,B树常用于索引文件的内容和目录结构,能够快速定位到文件块的位置,提高文件的访问速度。
  2. 数据库系统

    • 在数据库系统中,B树通常用于构建索引,加速数据库的查找、插入和删除操作。特别是在磁盘存储的情况下,B树的结构有利于减少磁盘I/O操作。
  3. 文件检索

    • B树可以用于构建搜索引擎的倒排索引,能够快速检索到包含特定关键字的文件或文档,应用于信息检索和全文检索系统中。
  4. 内存管理

    • 在操作系统中,B树可以用于管理虚拟内存和物理内存的分配和释放,以及页面置换算法的实现。

B+树的适用场景

  1. 数据库索引

    • B+树是数据库系统中常用的索引结构,特别适合用于范围查询和排序操作,提高了数据库查询的效率。
  2. 数据仓库

    • 在数据仓库中,B+树可以用于构建OLAP(联机分析处理)系统的多维索引,支持复杂的查询和分析操作。
  3. 文件存储

    • B+树可以用于构建文件系统的目录结构和索引,加速文件的查找和访问操作,尤其适用于大型文件存储系统。
  4. 地理信息系统

    • 在GIS(地理信息系统)中,B+树可以用于管理地理数据的空间索引,实现快速的地理空间查询和分析功能。

不同场景下的选择依据

  1. 数据访问模式

    • 如果系统主要进行范围查询和排序操作,B+树更适合;如果系统主要进行随机查找和频繁的插入、删除操作,B树可能更合适。
  2. 存储介质

    • 在磁盘存储的情况下,B+树通常具有更好的性能,因为其内部节点更小,减少了磁盘I/O操作的次数;而在内存存储的情况下,B树可能更适合,因为其节点包含了数据,减少了内存访问的次数。
  3. 查询需求

    • 如果系统需要支持范围查询、分页查询等复杂查询操作,B+树更适合;如果系统主要进行单个关键字的查找操作,B树可能更合适。

综上所述,选择B树还是B+树取决于具体的应用场景和需求,需要根据系统的数据特点、访问模式和性能要求进行权衡和选择。

实际案例分析

MySQL中的索引结构选择

MySQL数据库中使用了B树和B+树索引结构,具体选择取决于存储引擎和索引类型。

  1. InnoDB引擎

    • InnoDB存储引擎使用B+树索引结构,这是默认的存储引擎。
    • B+树索引适用于范围查询和排序操作,因此对于大多数应用场景都能够提供良好的性能。
  2. MyISAM引擎

    • MyISAM存储引擎默认使用B树索引结构。
    • B树索引在单点查询性能上可能略优于B+树,但在范围查询等场景下性能不及B+树。

Oracle中的索引结构选择

Oracle数据库中也支持多种索引类型,包括B树索引和B+树索引。

  1. B树索引

    • Oracle数据库中的普通索引(Non-Unique Index)使用了B树索引结构。
    • B树索引适用于单点查询,但在范围查询和排序操作上性能相对较低。
  2. B+树索引

    • Oracle数据库中的唯一索引(Unique Index)和聚集索引(Clustered Index)使用了B+树索引结构。
    • B+树索引在范围查询和排序操作上性能更好,适用于多种查询场景。

总体比较

  1. MySQL与Oracle

    • MySQL和Oracle数据库都采用了B树和B+树索引结构,但默认的存储引擎和索引类型不同。
    • MySQL的默认引擎InnoDB使用了B+树索引,而Oracle的普通索引采用了B树索引。
  2. 性能考量

    • 对于需要大量范围查询和排序操作的应用,B+树索引更适合;而对于单点查询较多的场景,B树索引可能更合适。
  3. 数据库优化

    • 在实际应用中,根据数据库的具体需求和性能瓶颈,可以针对性地选择适合的索引类型和存储引擎,进行数据库性能优化。

综上所述,MySQL和Oracle等数据库系统在选择B树和B+树索引结构时,需要根据具体的应用场景和性能需求进行选择,以实现最佳的数据库性能和效率。

总结

B树和B+树作为常见的索引结构,在数据库和文件系统中发挥着重要作用。它们各自具有一系列特点,针对不同的应用场景有着各自的优势和劣势。

B树的特点

  • 节点存储:B树的内部节点和叶子节点都存储数据,适用于内存较小的情况。
  • 键值分布:节点中的键值按顺序存储,适合单点查询操作。
  • 性能表现:在单点查询时性能可能略优于B+树,但在范围查询等操作上性能较差。
  • 适用场景:适合单点查询较多的情况,如文件系统的目录结构。

B+树的特点

  • 节点存储:B+树的内部节点只存储键值信息,数据全部存储在叶子节点上,适合大规模数据存储。
  • 键值分布:叶子节点之间通过链表相连,适合范围查询和排序操作。
  • 性能表现:在范围查询、排序和插入删除等操作上性能较优。
  • 适用场景:适合需要支持范围查询和排序操作的数据库系统。

总体评价

  • B树适用于单点查询较多的场景,性能可能略优于B+树,但在范围查询和排序操作上性能不及B+树。
  • B+树适用于需要支持范围查询和排序操作的场景,性能优于B树,尤其适合大规模数据存储。

综上所述,选择B树还是B+树取决于具体的应用需求和性能要求,需要根据系统的数据特点、访问模式和存储介质进行权衡和选择,以达到最佳的性能和效率。

参考文献

  1. Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (Third Edition). MIT Press.

  2. Silberschatz, A., Korth, H. F., & Sudarshan, S. (2010). Database System Concepts. McGraw-Hill Education.

  3. MySQL Documentation: https://dev.mysql.com/doc/

  4. Oracle Documentation: https://docs.oracle.com/

  5. Garcia-Molina, H., Ullman, J. D., & Widom, J. (2008). Database Systems: The Complete Book. Pearson.

  6. Comer, D. (1979). The Ubiquitous B-Tree. ACM Computing Surveys (CSUR), 11(2), 121-137.

  7. Lehman, P. L., & Yao, S. B. (1981). Efficient Locking for Concurrent Operations on B-Trees. ACM Transactions on Database Systems (TODS), 6(4), 650-670.

  8. Bayer, R., & McCreight, E. M. (1972). Organization and Maintenance of Large Ordered Indexes. Acta Informatica, 1(3), 173-189.

  9. Härder, T., & Reuter, A. (1983). Principles of Transaction-Oriented Database Recovery. Computing Surveys (CSUR), 15(4), 287-317.

  10. Lewis, P. M., Bernstein, P. A., & Karger, D. R. (1980). An Efficient Algorithm for Concurrently Inserting and Deleting Keys in a B-tree. ACM Transactions on Database Systems (TODS), 5(3), 354-382.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对camera raw中的纹理和清晰度的内容的修正(之前的内容写错了,懒得改了重新写一篇)

之前对于环的解释,不太行,这里我给出进一步地说明。 首先对环的解释: 我这里说的环指的是频域段中的ai变化的时候对图像像素的变化的极大的影响程度的环状效果,会出现不规则的环状的提亮或增暗的效果。实际上是每个fj都有影响,但…

限量背包问题

问题描述 限量背包问题:从m个物品中挑选出最多v个物品放入容量为n的背包。 问题分析 限量背包问题,可以用来解决许多问题,例如要求从n个物品中挑选出最多v个物品放入容量为m的背包使得背包最后的价值最大,或者总共有多少种放法…

力扣 1027. 最长等差数列 python AC

动态规划 class Solution:def longestArithSeqLength(self, nums):size len(nums)maxv 0dp [[1] * 1001 for _ in range(size)]for i in range(size):for j in range(i):d nums[j] - nums[i] 500dp[i][d] max(dp[i][d], dp[j][d] 1)maxv max(maxv, dp[i][d])return ma…

【数据结构】栈的实现以及数组和链表的优缺点

个人主页:一代… 个人专栏:数据结构 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进…

ETL工具kettle(PDI)入门教程,Job

先新建两个Transform,MysqlToMysql.ktr和CsvToExcel.ktrURL:ETL工具kettle入门教程,transform,Mysql->Mysql,Csv->Excel-CSDN博客 主对象树,作业上右击,点击新建 核心对…

【回溯算法】【Python实现】n皇后问题

文章目录 [toc]问题描述回溯算法Python实现时间复杂性 问题描述 在 n n n \times n nn格的棋盘上放置彼此不受攻击的 n n n个皇后,按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子 n n n皇后问题等价于,在 n n …

面试题库-项目

1.项目主要实现了哪些功能? 本项目是专门为校园食堂窗口定制的一款软件产品,包括系统管理后台和客户端两部分。其中系统管理后台主要提供给食堂内部员工使用,可以对餐厅的菜品、套餐、订单、员工等进行管理维护。客户端主要提供给学生及校职…

台球桌上的答案 如何优化图形化编程对复杂程序的展现

在公司的休息区,卧龙和凤雏正站在台球桌旁,一场激战即将打响。 “来吧,凤雏,让我们一决高下!”卧龙手持台球杆,面带自信的微笑,向凤雏发起挑战。 凤雏点了点头,拿起台球杆&#xff0…

自定义表单工作流的优势介绍

当前,应用低代码技术平台可以助力企业提高效率,降低开发成本,实现个性化场景定制,因而越来越得到了客户的信赖与喜爱。很多客户朋友询问自定义表单工作流的优势和特点,为了帮助大家解决这个疑问,今天&#…

代码规范文档

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 最近 二、 2.1 关于花括号,分为K&R风格和allman风格 现在增加一个关于代码规范的链接: [华为方舟编译器开发文档…

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…

极简——高并发下缓存穿透、雪崩、击穿定义和解决方案

缓存穿透 定义:查询一个一定不存在的数据,由于缓存不命中,将去查询数据库,但是数据库也没有这个数据,我们没有把查询的null写入缓存,这就将导致这个不存在的数据每次请求都去数据库查询,失去了…

PLC设备通过智能网关采用HTTP协议JSON文件对接MES等系统平台

智能网关IGT-DSER集成了多种PLC的原厂协议,方便实现各种PLC、智能仪表通过HTTP协议与MES等各种系统平台通讯对接。PLC内不用编写程序,设备不用停机,通过网关的参数配置软件(下载地址)配置JSON文件的字段与PLC寄存器地址等参数即可。 智能网关…

如何给文件和文件夹添加备注信息

1. 给文件添加备注信息 1. 打开文件夹,点击查看 → 选项 → 更改文件夹和搜索选项 → 勾除隐藏受保护的操作系统文件 → 勾选显示隐藏的文件、文件夹和驱动器; 2. listary工具搜索desktop.ini,随便点击一个desktop.ini文件,即可…

力扣:763. 划分字母区间

763. 划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度…

iOS 侧滑手势的打开关闭

方法一: 参考文章:点这里 方法二: - (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];[self.navigationController.navigationBar setHidden:NO];//在其他离开改页面的方法同样加上下面两句代码self.isTapBac…

Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期

攻击者改变了策略,在某些情况下转向勒索软件。安全和风险管理领导者必须通过提高检测和预防能力来为勒索软件攻击做好准备,同时还要改进其事后应对策略。 主要发现 勒索软件(无加密的数据盗窃攻击)是攻击者越来越多地使用的策略。…

git的标签管理

理解标签 在Git中,标签tag用于标记特定的一个重要点,比如版本发布。标签允许捕捉某一次提交的状态,当我们需要退回到某次提叫的版本时,通过标签我们快速定位到。标签具有两种类型: 轻量标签:最简单的标签形式&#x…

Linux(CentOS7)离线使用安装盘部署Telnet

[在线工具网 - 各类免费AI工具合集,免费pdf转word等](https://www.orcc.online) https://orcc.online 挂载镜像CentOS-7-x86_64-DVD-1810.iso到/mnt下(其他位置也行),命令如下: mount /dev/sr0 /mnt 安装包默认在Pa…

C++ 概览并发

并发 资源管理 资源 程序中符合先获取后释放(显式或隐式)规律的东西,比如内存、锁、套接字、线程句柄和文件句柄等。RAII: (Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C语言的一种管…