【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

news2025/4/17 13:55:45

文件系统的魔法:让计算机理解并存储你的数据

  • 一. 文件系统
    • 1.1 块
    • 1.2 分区
    • 1.3 inode(索引节点)
  • 二. ext2文件系统
    • 2.1 认识文件系统
    • 2.2 Block Group (块组)
      • 2.2.1 Block Group 的基本概念
      • 2.2.2 Block Group 的作用
    • 2.3 块组内部结构
      • 2.3.1 超级块(Super Block)
      • 2.3.2 GDT(Group Descriptor Table)
      • 2.3.3 块位图(Block Bitmap)
      • 2.3.4 inode位图(Inode Bitmap)
      • 2.3.5 inode表
      • 2.3.6 Data Block(数据块)
    • 2.4 目录与文件名
    • 2.5 路径解析
      • 2.5.1 路径解析与文件系统一致性
    • 2.6 路径缓存
    • 2.7 挂载分区
  • 三. 最后

本文将介绍文件系统的基本概念及其重要性。文件系统作为操作系统的一部分,负责管理存储设备上的数据存储、读取和组织方式。它提供了一种高效且可靠的方法来存储和检索文件,使得操作系统能够有效地管理大量数据。本文将从文件系统的基本架构、常见类型、以及其在实际应用中的表现和优化策略等方面展开讨论,旨在帮助读者理解文件系统如何支持现代计算环境中的数据存储需求。

💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍
点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力! 🚀
分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对Linux OS感兴趣的朋友,让我们一起进步!

一. 文件系统

打开的文件被内存管理着,实际是进程通过相关数据结构将每个对象进行关联;而未被打开的文件被保存在磁盘上,一般是未被打开的文件占据最多。

1.1 块

文件系统块(也称为磁盘块)是操作系统用来管理磁盘空间的基本单位。它的引入主要解决了两个问题:一个是磁盘的访问效率,另一个是存储空间的管理。块的大小最常见为4KB,即八个扇区组成一个块。块是文件存取的最小单位。

LBA(Logical Block Address)逻辑块地址,本质是线性地址。

在这里插入图片描述
块号=LBA/8,因为LBA是线性的像数组一样,8个扇区是一个块。
LBA=块号*8+n(n指的是指定扇区的第几个位置)。

1.2 分区

文件系统分区是指将磁盘划分为多个逻辑上独立的区域,每个区域可以格式化为独立的文件系统,用于存储数据和文件。分区的引入主要是为了提高磁盘的管理效率,优化存储空间的利用,同时也增强了系统的安全性和可扩展性。通过分区,操作系统能够在同一物理磁盘上为不同类型的数据提供不同的存储环境,例如操作系统、应用程序和用户数据可以分别存储在不同的分区中,从而避免它们之间的相互干扰。每个分区可以使用不同的文件系统格式(如NTFS、FAT32、ext4等),以满足不同需求的性能和功能要求。此外,分区还可以提供数据隔离,一旦一个分区发生故障,其他分区的数据不会受到影响,增加了数据的安全性。通过分区,系统管理员可以更方便地管理磁盘,进行备份、恢复或扩展,也便于磁盘的高效利用和性能优化。

1.3 inode(索引节点)

文件=内容(数据)+ 属性,文件的内容存储在哪里呢???存在inode表中。

查看inode的命令格式:

ls -li

  • 示例:

ls usercode.c -li
1061373 -rw-rw-r-- 1 wch_1 wch_1 404 Apr 12 17:37 usercode.c

  • 1061273:inode编号
  • -rw-rw-r-- :权限
  • 1:硬链接数
  • wch_1 :拥有者
  • wch_1:所属组
  • 404:文件大小
  • Apr 12 17:37:最近修改时间
  • usercode.c:文件名

还有另一个方式:stat 文件名

  • 示例:

stat usercode.c
在这里插入图片描述
inode是文件的唯一标识符,有且仅有一个,叫做inode号。

二. ext2文件系统

前言:文件系统有很多的分类,如:

  • ext3/ext4: Linux 中广泛使用的文件系统,ext4 是其更先进的版本,支持更大的文件系统和更高效的数据存储。
  • JFS(Journaled File System): IBM 开发的日志文件系统,广泛应用于高性能服务器。
  • ReiserFS: 另一个支持日志的文件系统,主要用于 Linux 系统。

虽然文件种类很多,本文章主要以ext2文件系统为例。

2.1 认识文件系统

文件系统的目的是组织和管理硬盘上的文件,确保文件能够在磁盘上高效、安全地存储和访问。格式化硬盘是将硬盘转化为特定文件系统的过程,这样硬盘就能够被操作系统识别并使用。文件系统的设计和选择影响文件存储的性能、安全性以及后续的扩展能力,因此根据应用需求选择合适的文件系统非常重要。

“只要能管理一个分区,就能管理所有分区,也就能管理所有磁盘文件” 这句话的含义是:ext2 文件系统通过将硬盘分区划分成多个相同大小的块组来管理数据,每个块组都有独立的管理机制。只要操作系统能够理解和管理一个分区中的块组结构,它就能通过相同的方式管理其他分区和整个磁盘中的所有文件。这个设计使得文件系统管理的过程更加简洁和高效,便于扩展。
在这里插入图片描述
上面可以看到分区的前面存在Boot Sector。下面将介绍一下它。

  • Boot Sector(启动扇区)

Boot Sector(启动扇区)是计算机存储设备(如硬盘、固态硬盘、U盘等)上的一个特殊区域,用于存放引导操作系统的相关信息。它是系统启动过程中的重要组成部分,负责将操作系统加载到内存并开始执行。

  • Boot Sector 是存储设备上的特殊区域,负责启动操作系统。
  • 在传统的 BIOS 系统中,它通常指的是 MBR,包含引导程序和分区表信息。
  • 在现代的 UEFI 系统中,启动信息存储在 EFI System Partition (ESP) 中。
  • Boot Sector 是计算机启动过程的关键,确保操作系统能够加载并执行。

2.2 Block Group (块组)

Block Group 是一种用于文件系统中存储和组织数据的结构,尤其在 ext2、ext3 和 ext4 等文件系统中应用广泛。它是一种将文件系统数据划分成更小单元的方式,以便提高磁盘访问的效率并确保数据的组织性。

2.2.1 Block Group 的基本概念

在 ext2/3/4 文件系统中,磁盘分区(或硬盘)被划分为多个 Block Group。每个 Block Group 是磁盘上的一个逻辑单位,通常由以下几个部分组成:

  • 数据块(Data Blocks): 存储文件的实际数据。
  • inode 表(Inode Table): 存储文件的元数据,如文件的权限、大小、创建时间等信息。
  • 超级块(Superblock): 存储关于文件系统的总体信息,如文件系统的大小、已用空间、剩余空间等。
  • 块位图(Block Bitmap): 用于标记哪些数据块是空闲的,哪些是已经使用的。
  • inode 位图(Inode Bitmap): 用于标记哪些 inode 是空闲的,哪些是已经使用的。

2.2.2 Block Group 的作用

Block Group 的设计目的有几个,主要包括以下几点:

  1. 提高访问效率: 将硬盘分为多个 Block Group 有助于提高文件系统的性能。每个 Block Group 内的数据结构相对独立,这样操作系统可以更快地定位文件。每个块组中的 inode 表 和 数据块尽量靠近,这样可以减少磁盘寻道时间,提高文件读取速度。
  2. 避免碎片化: 通过将文件的 inode 和 数据块 组织在同一个块组内,ext系列文件系统能有效地减少碎片化。这样,文件的数据和它的元数据被存放在同一块区域,读写操作更加连续,减少了由于寻址不连续带来的磁盘碎片。
  3. 管理和分配空间 :每个 Block Group 都有一个独立的位图,标记数据块和 inode
    的使用情况。这使得文件系统可以灵活地管理磁盘空间,减少不必要的磁盘访问和冲突。在一个文件系统中,如果所有数据都集中在一个大块区域,访问时可能需要更多的寻址和空间管理,使用Block Group 的方法可以使得空间管理更加高效。
  4. 容错性与恢复:由于文件系统是通过多个块组管理磁盘空间,一些块组发生错误时,其他块组仍然能够正常工作,这提高了文件系统的容错性。损坏的块组可以通过文件系统的修复工具进行恢复,而不必影响整个磁盘。

下面将详细介绍块组内部的结构即功能。😆

2.3 块组内部结构

2.3.1 超级块(Super Block)

Superblock(超级块)是文件系统中的一个重要结构,负责存储有关文件系统的元数据。它是文件系统的核心部分之一,用于描述文件系统的总体信息,包括文件系统的大小、空闲空间、块的大小、文件系统的状态等。每个文件系统都有一个 超级块,它是文件系统结构的关键。

Superblock 的作用

Superblock 存储了文件系统的基本信息,这些信息对于文件系统的运行和维护至关重要。它主要包括以下内容:

  1. 文件系统的总大小: 文件系统的总大小(以字节为单位)以及文件系统使用的总块数。
  2. 块大小(Block Size): 文件系统中每个块的大小(通常为 512 字节、1 KB、2 KB、4 KB等)。块大小决定了文件系统数据存储的最小单位。
  3. 空闲空间的信息: 包括文件系统中空闲块的数量、空闲 inode 的数量等。这些信息用于文件分配和空间管理。
  4. inode 信息: 包括文件系统总共有多少个 inode、每个 inode 占用多少空间,以及 inode 表的位置等。
  5. 文件系统状态: 用于记录文件系统的健康状态(如是否需要修复),并存储文件系统的版本信息。
  6. 文件系统的创建时间、最后挂载时间、文件系统的版本等: 用于文件系统管理和维护。
  7. 块位图(Block Bitmap)和 inode 位图(Inode Bitmap)的状态信息: 用于跟踪哪些数据块和 inode是空闲的,哪些已经被分配。

一个超级块存在很多备份,防止丢失,可以系统调用(如 Linux 中的 fsck 命令)来检查和修复文件系统。在文件系统损坏时,fsck 会使用 superblock 中的信息来尝试恢复文件系统的状态。

总结:
Superblock 是文件系统中最重要的数据结构之一,它包含文件系统的总体配置信息、空闲空间、inode 信息等。文件系统的初始化、挂载、空间管理、数据恢复等操作都离不开 superblock 的帮助。在文件系统损坏或异常的情况下,superblock 还提供了修复文件系统所需要的关键数据。

2.3.2 GDT(Group Descriptor Table)

块组描述表(Block Group Descriptor Table) 是在一些文件系统中用于管理块组(Block Group)信息的数据结构,尤其是在 ext2、ext3、ext4 等文件系统中,块组描述表是管理磁盘空间的核心部分之一。

用于描述块组的属性信息,块组与块组描述符一一对应。

块组描述表的结构

在 ext2、ext3 和 ext4 文件系统中,块组描述表的每个条目通常包含以下信息:

  1. 块组的起始地址(Block Group Start Address): 用于表示该块组在磁盘上的物理起始位置。
  2. 数据块位图的地址(Block Bitmap): 存储块组内所有数据块的分配情况。它是一个位图,每一位代表一个数据块,0 表示空闲,1表示已分配。
  3. inode 位图的地址(Inode Bitmap): 存储块组内所有 inode 的分配情况。它同样是一个位图,每一位表示一个inode,0 表示空闲,1 表示已分配。
  4. inode 表的地址(Inode Table): 存储该块组内所有 inode 的数据结构,每个 inode
    包含一个文件的元数据。文件的创建、删除、修改等操作都与 inode 表的管理紧密相关。
  5. 块组的空闲块数(Free Block Count): 记录该块组内空闲数据块的数量。
  6. 块组的空闲 inode 数量(Free Inode Count): 记录该块组内空闲 inode 的数量。
  7. 已分配的目录项数(Used Directory Count): 记录该块组中目录 inode
    的数量,这对于管理文件系统中的目录结构非常重要。

块组描述表与超级块的关系

超级块 和 块组描述表 是密切相关的。在 ext2/3/4 文件系统中,超级块 存储文件系统的整体信息,如文件系统的总大小、块大小、inode 数量等,而 块组描述表 则存储每个块组的管理信息。超级块会包含一个指向块组描述表的指针,操作系统通过这个指针来访问并更新块组的状态。

2.3.3 块位图(Block Bitmap)

Block Bitmap中记录着Data Block中哪个数据块已经被占⽤,哪个数据块没有被占⽤。

2.3.4 inode位图(Inode Bitmap)

每个bit表⽰⼀个inode是否空闲可⽤。

2.3.5 inode表

  • 存放⽂件属性 如 ⽂件⼤⼩,所有者,最近修改时间等
  • 当前分组所有Inode属性的集合
  • inode编号以分区为单位,整体划分,不可跨分区

2.3.6 Data Block(数据块)

Data Block(数据块)是文件系统中用于存储实际文件内容的最小单位。它是文件系统中存储数据的基本结构。每个 Data Block 都包含文件的实际数据,而不仅仅是元数据(如文件的权限、所有者、修改时间等),这些元数据通常存储在 inode(索引节点)中。数据块使得文件系统能够高效地管理和存储文件内容。

思考:知道inode号的情况下,在指定分区,请解释:对⽂件进⾏增、删、查、改是在
做什么?

  1. 查(查找文件):查找inode,通过inode指针访问数据块。
  2. 增(增添数据):查找数据块(通过块位图和inode位图查找空闲的数据块),修改inode,写入数据。
  3. 删(删除文件):查找inode和数据块,释放数据块和inode,同时更改目录项。
  4. 改(修改文件):查找inode,更新数据块同时修改文件大小。

上述文件系统结构还是没看到文件名存在哪里???它存在哪里呢?下面将揭晓此答案。

2.4 目录与文件名

目录保存的内容是:文件名与inode号的映射关系。
OS会记录当前的工作路径,通过文件名与映射关系深度进行路径解析。

2.5 路径解析

路径解析 是操作系统和文件系统用来确定文件或目录在存储介质(如硬盘)上的位置的过程。路径解析的目的是从文件的路径名称中找到与其对应的 inode,并通过文件系统中的目录结构和索引节点,最终定位到实际的数据块(Data Block)。在这个过程中,操作系统需要解析给定的文件路径,找到文件的 inode 号,然后通过这个 inode 号 获取文件的元数据以及文件的存储位置。

2.5.1 路径解析与文件系统一致性

文件系统需要确保在路径解析过程中保持一致性。例如,在路径解析时,如果文件或目录被删除或移动,操作系统需要更新目录项和 inode 信息,以保持文件系统的一致性和可靠性。很多现代文件系统通过 日志记录(journaling) 或 写时复制(Copy-on-Write) 技术确保路径解析和其他文件系统操作的原子性。

总结

路径解析是操作系统查找文件或目录在文件系统中的过程。根据给定的路径(无论是绝对路径还是相对路径),操作系统逐级查找目录项并通过 inode 号 获取文件的元数据和数据块。在符号链接存在的情况下,路径解析还需要处理链接的目标路径。路径解析涉及到文件系统中的 目录项 和 inode 表,并通过它们来定位文件的实际内容。

2.6 路径缓存

访问任何文件到要从/目录开始进行路径解析吗?原则上是,实际LinuxOS会缓存历史的路径结构,存在于一个数据结构对象struct dentry,本质上是一个多叉树结构。所有文件都有dentry结构,所有被打开的文件就可以在内存中形成树形结构。

2.7 挂载分区

挂载分区是将物理磁盘分区、光盘、USB 驱动器等存储设备与操作系统的文件系统结构相连接的过程。一旦挂载,操作系统可以将该分区或设备的文件与其它文件进行交互,就像它们是计算机本地的文件一样。挂载后,文件系统中的路径可以直接访问该分区的数据。

本人理解:实际就是将需要访问的设备或数据尾插入到目录,

  • 挂载命令

在大多数 Linux 系统中,可以使用 mount 命令挂载分区。基本的挂载命令格式如下:

mount <设备文件> <挂载点>

例如,要将设备 /dev/sdb1 挂载到 /mnt/usb 目录,可以使用以下命令:

sudo mount /dev/sdb1 /mnt/usb

  • 挂载选项

mount 命令可以使用不同的选项来控制挂载过程。例如:

-t:指定文件系统类型,如 ext4、ntfs、vfat 等。例如:

sudo mount -t ext4 /dev/sdb1 /mnt/usb

-o:指定挂载选项,如只读(ro)、读写(rw)、设置文件权限等。例如:

sudo mount -o ro /dev/sdb1 /mnt/usb

-a:挂载 /etc/fstab 中列出的所有文件系统。例如:

sudo mount -a

总结:挂载分区 是将物理分区或设备连接到操作系统目录结构中的过程,使得分区上的文件和目录能够在操作系统中被访问。

  1. 使用 mount 命令可以将设备挂载到指定的目录,挂载成功后,文件系统中的路径就能访问分区数据。
  2. 可以通过 /etc/fstab 配置文件设置自动挂载,确保分区在系统启动时自动挂载。
  3. 卸载分区 使用 umount 命令,这样可以确保文件系统完整性。
  4. 通过挂载分区,操作系统能够灵活地管理不同存储设备,使得用户能够方便地访问各类存储介质上的数据。

三. 最后

本文介绍了文件系统的基本概念及其在操作系统中的重要性。文件系统通过分区、块、inode等结构管理磁盘上的数据,并提供高效的数据存储与访问方式。重点讲解了ext2 文件系统,介绍了其基本架构、块组(Block Group)的设计与作用,以及 超级块、GDT、inode 位图 和 数据块等组成部分。文件路径解析和文件名映射也被详细说明,强调了操作系统如何通过 inode号定位文件数据块。最后,介绍了如何挂载分区,使不同存储设备的数据能与文件系统结构连接,便于访问和管理。

路虽远,行则将至;事虽难,做则必成

亲爱的读者们,下一篇文章再会!!! \color{Red}亲爱的读者们,下一篇文章再会!!! 亲爱的读者们,下一篇文章再会!!!

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

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

相关文章

C++STL——容器-list(含模拟实现,即底层原理)(含迭代器失效问题)(所有你不理解的问题,这里都有解答,最详细)

目录 1.迭代器的分类 2.list的使用 2.1 list的构造 2.2 list iterator 2.3 list capacity 2.4 list element access ​编辑 2.5 list modifiers ​编辑2.5.1 list插入和删除 2.5.2 insert /erase 2.5.3 resize/swap/clear ​编辑 2.6 list的一些其他接口…

计算机组成原理笔记(十五)——3.5指令系统的发展

不同类型的计算机有各具特色的指令系统&#xff0c;由于计算机的性能、机器结构和使用环境不同&#xff0c;指令系统的差异也是很大的。 3.5.1 x86架构的扩展指令集 x86架构的扩展指令集是为了增强处理器在多媒体、三维图形、并行计算等领域的性能而设计的。这些扩展指令集通…

基于时间序列分解与XGBoost的交通通行时间预测方法解析

一、问题背景与数据概览 在城市交通管理系统中,准确预测道路通行时间对于智能交通调度和路径规划具有重要意义。本文基于真实道路传感器数据,构建了一个结合时间序列分解与机器学习模型的预测框架。数据源包含三个核心部分: 道路通行数据(new_gy_contest_traveltime_train…

基于XGBoost的异烟酸生产收率预测:冠军解决方案解析

1. 引言 在化工生产领域,准确预测产品收率对优化工艺流程、降低生产成本具有重要意义。本文以异烟酸生产为研究对象,通过机器学习方法构建预测模型,在包含10个生产步骤、42个工艺参数的数据集上实现高精度收率预测。该方案在工业竞赛中斩获冠军,本文将深度解析其技术实现细…

计算机视觉算法实现——电梯禁止电瓶车进入检测:原理、实现与行业应用(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 电梯安全检测领域概述 近年来&#xff0c;随着电动自行车&#xff08;以下简称"电瓶车"&…

MOM成功实施分享(八)汽车活塞生产制造MOM建设方案(第二部分)

在制造业数字化转型的浪潮中&#xff0c;方案对活塞积极探索&#xff0c;通过实施一系列数字化举措&#xff0c;在生产管理、供应链协同、质量控制等多个方面取得显著成效&#xff0c;为行业提供了优秀范例。 1.转型背景与目标&#xff1a;活塞在数字化转型前面临诸多挑战&…

Azure AI Foundry 正在构建一个技术无障碍的未来世界

我们习以为常的街道和数字世界&#xff0c;往往隐藏着被忽视的障碍——凹凸不平的路面、不兼容的网站、延迟的字幕或无法识别多样化声音的AI模型。这些细节对某些群体而言&#xff0c;却是日常的挑战。正如盲道不仅帮助视障者&#xff0c;也优化了整体城市体验&#xff0c;信息…

地毯填充luogu

P1228 地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主…

哈喽打车 小程序 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 这一次遇到这种风控感觉挺有…

基于 Vue 3 + Express 的网盘资源搜索与转存工具,支持响应式布局,移动端与PC完美适配

一个基于 Vue 3 Express 的网盘资源搜索与转存工具&#xff0c;支持响应式布局&#xff0c;移动端与PC完美适配&#xff0c;可通过 Docker 一键部署。 功能特性 &#x1f50d; 多源资源搜索 支持多个资源订阅源搜索支持关键词搜索与资源链接解析支持豆瓣热门榜单展示 &#…

【操作系统学习篇-Linux】进程

1. 什么是进程 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等 内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体。 如果你就看这个来理解进程&#xff0c;那么恭喜你&#xff0c;作为初学者&#xff0c;你…

CF985G Team Players

我敢赌&#xff0c;就算你知道怎么做&#xff0c;也必然得调试半天才能 AC。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 图片来自洛谷。 [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 显然不可能正面计算。所以…

企业经营决策风险

在企业的经营过程中&#xff0c;领导者每天都在面对大量的决策——该扩大生产还是收缩业务&#xff1f;该增设销售渠道还是提升产品质量&#xff1f;但你知道吗&#xff0c;企业最大的成本&#xff0c;不是生产成本&#xff0c;也不是人工成本&#xff0c;而是决策错误的成本&a…

UE5蓝图实现打开和关闭界面、退出

Button_Back 和Button_Exit是创建的两个按钮事件。 1.Create Widget 创建界面&#xff08;打开界面&#xff09; 2.Add to Viewport 添加到视图 3.remove form Parent&#xff0c;Target&#xff1a;self 从父节点移除当前界面&#xff08;关闭界面&#xff09; 4.Quit Game 退…

JavaWeb 课堂笔记 —— 09 MySQL 概述 + DDL

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…

echarts 图表

echart快速上手 快速上手 - 使用手册 - Apache EChartshttps://echarts.apache.org/handbook/zh/get-started/

无线通信网

1.2.4G相邻信道间有干扰&#xff0c;5G相邻信道几乎无干扰 2.2.4G频段的优点是信号强&#xff0c;衰减小&#xff0c;穿墙强&#xff0c;覆盖距离远&#xff1b;缺点是带宽较窄&#xff0c;速度较慢&#xff0c;干扰较大。 5G频段的优点是带宽较宽&#xff0c;速度较快&#…

数据结构:哈希表 | C++中的set与map

上回说到&#xff0c;红黑树是提升了动态数据集中频繁插入或删除操作的性能。而哈希表(Hash Table)&#xff0c;则是解决了传统数组或链表查找数据必须要遍历的缺点。 哈希表 哈希表的特点就是能够让数据通过哈希函数存到表中&#xff0c;哈希函数能够将数据处理为表中位置的索…

容器初始化Spring Boot项目原理,即web项目(war)包涉及相关类对比详解

以下是关于 SpringBootServletInitializer、ServletContainerInitializer、SpringServletContainerInitializer、WebApplicationInitializer 和 ServletInitializer 的对比详解及总结表格&#xff1a; 1. 核心对比详解 (1) SpringBootServletInitializer 作用&#xff1a; S…

[ctfshow web入门] web29

前置知识 eval: 把字符串按照 PHP 代码来执行&#xff0c;例如eval(“echo 1;”);这个函数拥有回显 system&#xff1a;使php程序执行系统命令&#xff0c;例如&#xff0c;system(“ls”);就是查看当前目录&#xff0c;这个拥有回显 preg_match&#xff1a;查找字符串是否匹配…