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

linux - 存储管理

1.了解硬件 -- 磁盘

硬盘有机械硬盘(HDD)和固态硬盘(SDD)

接下来,主要以机械磁盘为例(更具代表性,在linux系统层面,无论是机械磁盘还是固态硬盘,文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块)

1.盘片(Platter) - 存储数据: 是硬盘的存储介质,通常由铝合金或玻璃材料制成,并且涂有一层薄薄的磁性材料。硬盘的每个盘片都是圆形的,并且水平堆叠在一起(多盘结构)。每个盘片的表面都有两面都能用来存储数据,顶部和底部都配有读写磁头。
2.磁道 (Track)- 数据的物理组织方式:是硬盘盘片表面的一圈圈同心圆,它们是数据存储的物理路径。每个盘片都被划分为多个磁道,这些磁道从盘片的内圈向外圈辐射排列。磁头在读取或写入数据时,会定位到特定的磁道。
3.扇区(Sector)- 数据存储的最小单位:是硬盘磁道上的最小数据存储单元。每个扇区通常包含 512 字节或 4KB 的数据。硬盘在每个磁道上将数据划分成多个扇区,所有的数据都是通过这些扇区进行管理和存储的。
4.磁头(Read/Write Head)- 读取和写入数据:是硬盘的关键部件,负责在盘片的表面读取和写入数据。硬盘通常每个盘片都有两个磁头(一个用于盘片的上面,另一个用于盘片的下面),这些磁头通过 悬臂臂(actuator arm) 安装在盘片上方或下方的轨道上。
​​​​5.主轴(Spindle)- 驱动磁盘旋转:是硬盘的旋转轴,用于支撑所有的盘片,并使它们按一定速度旋转。硬盘的盘片通过主轴连接在一起,并由主轴电机驱动旋转。硬盘的转速(通常以 RPM(每分钟转数)为单位)直接影响磁盘的性能。常见的转速有 5400 RPM、7200 RPM、10000 RPM 和 15000 RPM。转速越高,数据读取速度也越快。
6.磁头定位器 (Actuator) - 精确控制磁头的位置:是一种驱动机制,用于精确控制磁头在盘片上的位置。它通过一个电磁装置,移动磁头在盘片上方和下方的不同磁道之间。磁头定位器通常由一个 磁臂(actuator arm) 和一个 伺服电机(voice coil motor, VCM) 组成。

2.CHS寻址 

 

CHS(Cylinder-Head-Sector) 寻址方式通过柱面(磁道)、磁头和扇区的组合来定位硬盘上的数据。

CHS 寻址方式的工作原理:

  1. 柱面(Cylinder):硬盘通常有多个盘片,每个盘片都有上面和下面两个磁头。一个柱面由相同位置的多个磁头组成。例如,如果硬盘有 4 个盘片,则每个柱面上会有 4 个磁道(一个磁头对应一个磁道)。

  2. 磁头(Head):每个盘片面上有一个磁头,磁头定位器(Actuator)控制磁头的位置。当需要访问某个特定的磁道时,磁头定位器将磁头移动到目标磁道。

  3. 扇区(Sector):每个磁道上被划分为若干个扇区,通常每个扇区的大小是 512 字节。扇区是数据的最小存储单元。

CHS 寻址的具体示例:

假设我们有一个硬盘,分成以下结构:

  • 磁盘有 4 个磁盘面(即 4 个磁头)。
  • 每个磁道上有 20 个扇区。
  • 硬盘共有 200 个磁道。

CHS 寻址 下,如果我们需要访问第 5 个柱面、使用第 2 个磁头,并且访问第 10 个扇区,那么我们需要的参数就是:

  • Cylinder:第 5 个柱面(第 5 个磁道组),表示硬盘中相同位置的所有磁头(例如,磁头 1, 磁头 2, ...)。
  • Head:第 2 个磁头,指向第二个盘片。
  • Sector:第 10 个扇区。

因此,C=5, H=2, S=10 对应于硬盘中的具体数据位置。

3.LBA寻址 

CHS 寻址的局限性:

  • 寻址空间有限:由于硬盘物理结构的限制,CHS 寻址方式能够支持的最大磁道数、磁头数和扇区数是有限的。例如,某些早期硬盘的 CHS 地址空间有限制,不能超出某个值(例如最大 1024 柱面,16 个磁头和 63 个扇区),这限制了硬盘的最大容量。
  • 不适应大容量硬盘:随着硬盘容量的增加,CHS 寻址方式无法满足更大硬盘的寻址需求,因此它逐渐被 LBA(Logical Block Addressing) 取代。LBA 采用线性地址模式,不依赖于物理结构,支持更大的硬盘容量。

CHS 寻址方式的替代方式:

由于 CHS 寻址方式存在局限性,LBA(Logical Block Addressing) 寻址方式被广泛采用。LBA 使用单一的逻辑块编号来表示硬盘上的每个数据块,消除了柱面、磁头、扇区之间的物理结构映射,使得硬盘可以支持更大的存储容量。

我们可以将磁头进行编号(0.1.2.3......),将盘片想象成磁带的卷起来的样子,磁带是可以拉直,盘片我们虽然无法物理将其拉成直线,但是将其抽象成一条直线。多个盘片,可以根据磁头编号,依次将其排列。为了管理这条直线,可以用线性数组的形式将其管理,而每个数组的大小就是扇区的大小。

LBA(Logical Block Addressing,逻辑块寻址)是一种硬盘存储设备的数据寻址方式,它将硬盘的数据视为一个逻辑上的连续块,而不是依赖于物理位置(如柱面、磁道和扇区)。在LBA方式下,硬盘上的每个数据块都有一个唯一的逻辑地址(LBA),这一地址用于标识存储数据的物理位置。

主要特点:

  1. 逻辑地址:LBA采用的是一个单一的连续数字地址,这个地址从0开始,表示硬盘上的第一个数据块。
  2. 简化管理:LBA隐藏了磁盘的物理结构(柱面、磁道、扇区),操作系统和应用程序通过LBA进行存取,简化了磁盘管理和数据存取。
  3. 扇区为基本单位:LBA通常是以扇区为单位进行寻址,通常一个扇区为512字节。

工作原理:

在LBA寻址中,操作系统或应用程序通过LBA地址指定某个数据块,硬盘控制器则负责将逻辑地址转换为物理位置。硬盘内部有一个映射表,负责将LBA地址映射到具体的磁道和扇区。

优点:

  • 透明性:用户和操作系统不需要关心硬盘的物理结构,LBA将硬盘视为一个大块存储区域。
  • 简化操作:硬盘控制器负责管理物理结构的转换,简化了数据读写操作。

LBA方式常见于现代硬盘(HDD)和固态硬盘(SSD)中,是硬盘与操作系统之间最常用的数据寻址方式

照上图,如果我们想找第28888扇区在那个磁头的那个柱面

每个盘片有1w扇区:28888 / 10000 = 2     在2号磁头
每个盘片有20磁道:8888 % 20 = 8            第8磁道 
每个磁道有500扇区:8888 / 20 =  444        第444扇区

通过LBA将磁盘抽象为很长的线性数组,以特定算法将(如上)将LBA转换为我们的CHS进行我们物理寻址。

4.文件系统

了解了硬件和寻址方式,那么这么大的物理内存,我们应该怎么管理呢,四个字“分而治之”。

假设我们有1T内存,我们如何管理呢。

4.1 分区

假设硬盘分为 C盘D盘E盘,具体的分区方式根据操作系统、用途、数据存储需求等因素而有所不同。下面是一种常见的分区方式:

1. C盘(系统盘)

  • 大小:通常分配硬盘的前几十GB(例如:100GB - 200GB),以确保操作系统和基础应用有足够的空间。
  • 内容
    • 操作系统:包括操作系统本身(如Windows、Linux等),操作系统的核心文件和系统目录(如Windows中的C:\Windows)。
    • 系统文件:包括系统启动所需的引导加载程序(例如MBR/GPT分区表)和其他低级别的操作系统文件。
    • 系统应用:包括操作系统自带的应用程序,如Windows自带的计算器、资源管理器、控制面板等。
    • 注册表(Windows)或配置文件(Linux):操作系统的配置信息。
    • 用户配置文件:如操作系统用户的桌面配置、默认文档位置等。

2. D盘(数据盘)

  • 大小:可以分配硬盘的剩余空间的中间部分,假设大约500GB(可以根据需求调整)。
  • 内容
    • 用户数据:包括所有用户生成的数据,如文档、图片、视频、音乐等。
    • 应用程序数据:安装的第三方应用程序的支持文件、数据库文件、缓存文件等。比如,安装在D盘的软件可能会在该分区创建文件夹用于存储应用配置文件、用户数据、日志等。
    • 游戏文件:如果用户在该盘安装游戏,游戏的数据和文件(例如安装包、游戏存档、DLC等)将存储在该分区中。
    • 下载目录:通常会将浏览器下载的文件、临时安装包等存放在此分区。

3. E盘(备份盘或媒体文件盘)

  • 大小:剩余空间的最后一部分,假设为300GB(可以根据需求调整)。
  • 内容
    • 备份文件:包括操作系统的备份、个人文件的备份以及其他重要数据的备份文件。
    • 媒体文件:包括大容量的文件,如视频、音频文件、图片库等。用户通常会将不常用但需要存档的文件存放在此分区。
    • 镜像文件:操作系统或硬盘的镜像文件(例如系统恢复点、磁盘映像等)也可以存储在此分区。

4. 隐藏分区(或系统恢复分区)

  • 大小:通常为几十GB(如30GB - 100GB),该分区通常会被操作系统隐藏,不会直接显示在资源管理器中。
  • 内容
    • 操作系统恢复工具:存放系统恢复和重装所需的文件。Windows中通常会有一个恢复分区,其中包含Windows恢复环境(Windows RE)和一些系统修复工具。
    • 制造商工具:一些厂商会预装特定的工具和恢复映像,用于恢复出厂设置。

5. 其他可能的分区

  • Linux系统分区(如果使用Linux)

    • 在Linux中,操作系统通常会有多个分区,如:
      • /(根分区):包含所有操作系统文件。
      • /home:存储用户文件和个人数据。
      • swap:交换分区,用于虚拟内存。
      • /boot:存储启动文件。
    • 这些分区可以根据需要进行划分。
  • 磁盘加密分区

    • 如果使用加密(例如BitLocker、LUKS等),可能会有专门的加密分区或加密管理区域,用于存储加密的操作系统文件或用户数据。

总结:

在1TB的硬盘上,操作系统通常会将硬盘分为多个分区(如C盘、D盘、E盘等),每个分区根据不同的使用场景包含不同的内容:

  1. C盘:操作系统和系统应用程序。
  2. D盘:用户数据和第三方应用程序的文件。
  3. E盘:备份文件、媒体文件等。
  4. 隐藏分区:系统恢复文件和工具。

硬盘的具体分区方式可以根据用户的需求(如数据管理、操作系统使用等)进行调整。

4.2 BLock group

每个区里面又有许多BLock group,在文件系统的设计中,block group(块组)是文件系统的一种管理单位,主要用于高效组织和存储文件数据。块组(block group)是由若干个数据块(data blocks)和一些辅助数据结构(如inode表、超块等)组成的逻辑单元,用于管理文件的存储、访问和文件元数据的维护。

  1. 超级块(Superblock)

    • 存储整个文件系统的信息,比如文件系统的大小、块大小、文件系统的状态等。通常,超级块在整个文件系统中有多个副本。
  2. 块位图(Block Bitmap)

    • 用于跟踪哪些数据块已被分配,哪些是空闲的。每个块组都有一个块位图,通过它,操作系统能够快速查找可用的空闲块。
  3. inode位图(Inode Bitmap)

    • 用于管理inode(索引节点)的分配情况。inode包含文件的元数据,如文件的所有者、权限、时间戳、数据块的位置等。
  4. inode表(Inode Table)

    • 该表存储了该块组中所有文件的inode。每个文件都有一个对应的inode,其中存储着该文件的所有信息,但不包括文件的名称。文件的名称通常在目录结构中管理。
  5. 数据块(Data Blocks)

    • 实际存储文件内容的数据块。每个数据块通常是固定大小(如4KB),文件内容存储在这些数据块中。
  6. 目录表(Directory Block)

    • 用于存储目录结构。一个目录文件实际上是一个特殊类型的文件,它的内容是指向文件或子目录的链接。目录文件也存储在数据块中,包含文件名和其对应的inode编号

如何通过Block Group管理文件?

每个块组的作用是管理一部分磁盘空间,并保持与该部分相关的文件系统信息。具体来说,通过以下方式来管理文件:

  1. 分配块:当文件被创建或扩展时,操作系统会查找块组中未被使用的空闲数据块。如果一个块组中的数据块已满,文件系统会尝试在其他块组中找到空闲块。

  2. 分配inode:每当创建新文件时,操作系统会为该文件分配一个inode。在EXT4文件系统中,inode表存储在每个块组内,每个块组有自己的inode表,记录了该组内所有文件的inode信息。

  3. 优化局部性:块组的设计能够优化数据的局部性。即,相关文件(尤其是同一目录下的文件)通常会被分配到同一个块组中,这有助于减少磁盘寻址时的开销,从而提高文件系统的性能。

  4. 块组内的分配与回收:当文件删除时,相应的inode和数据块会被回收到块组的空闲区。操作系统会更新块位图和inode位图,以反映最新的磁盘空间状态。

  5. 平衡使用:通过块组管理,操作系统能够确保硬盘各个区域的空间得到均匀使用,避免某些区域过度分配,而其他区域则没有被有效利用。这也有助于提升文件系统的性能和可扩展性。

举个例子:EXT4文件系统

假设有一个1TB的硬盘,分配了一个EXT4文件系统。EXT4文件系统会将硬盘分割成多个块组,每个块组可能包含数千个数据块、inode以及其它辅助信息(如块位图、inode位图等)。

  • 如果一个文件被创建,它的inode会被分配到一个块组中的inode表,并且文件的内容会被存储在该块组中的数据块中。
  • 当一个文件扩展时,新的数据块可能会被分配到当前块组的空闲区域,也有可能被分配到另一个块组,具体取决于磁盘的空闲空间状态。
  • 当文件被删除,inode和数据块会被回收,重新标记为可用,供新文件使用。

优点和挑战:

优点:

  • 局部性优化:通过将相关文件存储在同一块组中,能够减少磁盘寻址的开销,提高读写性能。
  • 高效的空间管理:块组内的位图帮助操作系统快速判断哪些块和inode是空闲的,从而高效地分配磁盘空间。
  • 容错性:文件系统在每个块组内保留多个副本(如超级块的副本),如果某个块组出现损坏,文件系统仍可以恢复。

挑战:

  • 块组大小和分配策略:块组的大小设置对文件系统的性能有重要影响。如果块组太小,可能会增加管理开销;如果块组太大,可能会导致磁盘碎片和性能下降。
  • 块组间的负载不均衡:如果某些块组使用过度而其他块组空闲,可能会导致文件系统的性能不均衡。

总结

在现代的文件系统中,块组(Block Group)是一种重要的管理单位,尤其在EXT4等文件系统中。它通过将硬盘分成多个块组,管理文件数据的存储、访问以及元数据的组织。每个块组包含数据块、inode表、位图等信息,从而实现高效的空间管理和文件访问。通过这种设计,文件系统能够优化磁盘的使用,提高性能,并减少磁盘碎片。

注:在linux中文件属性和文件是分开存储的

如何通过文件属性找到文件?

相关文章:

linux - 存储管理

1.了解硬件 -- 磁盘 硬盘有机械硬盘(HDD)和固态硬盘(SDD) 接下来,主要以机械磁盘为例(更具代表性,在linux系统层面,无论是机械磁盘还是固态硬盘,文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块) 1.盘片&#x…...

在 Kibana 中为 Vega Sankey 可视化添加过滤功能

作者:来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗?了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中,我们将了解如何启用 Vega Sankey 可视…...

styled-components 库的用法介绍和实践总结

styled-components 库的实践用法总结 前言 前段时间开发了一个 NiceTab 浏览器插件,并写了一篇介绍文章,新开发了一款浏览器Tab管理插件,OneTab 的升级替代品, 欢迎品尝!。 在插件中用到了 styled-components 这个库,于是做一个基本的介绍和分享。 在开发 NiceTab 插件…...

SSE(Server-Sent Events)主动推送消息

说明 使用Java开发web应用,大多数时候我们提供的接口返回数据都是一次性完整返回。有些时候,我们也需要提供流式接口持续写出数据,以下提供一种简单的方式。 SSE(Server-Sent Events) SSE 是一种允许服务器单向发送事…...

pandas.core.frame.DataFrame怎么进行对象内容的读写

在 Python 中,pandas.core.frame.DataFrame 是 Pandas 数据库的核心数据结构,可以方便地读取和操作表格数据。以下是几种常见的读取内容的方法: 读取特定列 通过列名获取数据。 # 假设 df 是一个 DataFrame data df["列名"] # …...

短作业优先调度算法

一、实验目的 了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。 二、实验内容 模拟实现SJF调度。 设置作业体:作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运行,F——完成)…...

SpringBoot 应用并发处理请求数的深入解析

SpringBoot 应用并发处理请求数的深入解析 一、引言 在现代Web开发中,了解一个应用程序可以同时处理多少个并发请求是至关重要的。 对于基于Spring Boot构建的应用程序来说,这个问题的答案并非绝对,而是取决于多个因素,包括但不…...

MetaGPT中的教程助手:TutorialAssistant

1. 提示词 COMMON_PROMPT """ You are now a seasoned technical professional in the field of the internet. We need you to write a technical tutorial with the topic "{topic}". """DIRECTORY_PROMPT (COMMON_PROMPT "…...

介绍一款docker ui 管理工具

http://vm01:18999/main.html 管理员登陆账号 jinghan/123456 ui启动命令所在文件夹目录 /work/docker/docker-ui 参考链接 DockerUI:一款功能强大的中文Docker可视化管理工具_docker ui-CSDN博客...

0022 基于SpringBoot的婚纱摄影线上预约系统的设计与实现

电子商城系统 1.项目描述2. 绪论2.1 研究背景2.2 目的及意义2.3 国内外研究现状 3.需求分析4.界面展示5.源码获取 1.项目描述 摘 要 本文旨在研究并开发一套基于Spring Boot框架的婚纱摄影线上预约系统,以满足现代婚纱摄影行业对高效、便捷、个性化服务的需求。该系…...

uni-app在image上绘制点位并回显

在 Uni-app 中绘制多边形可以通过使用 Canvas API 来实现。Uni-app 是一个使用 Vue.js 开发所有前端应用的框架,同时支持编译为 H5、小程序等多个平台。由于 Canvas 是 H5 和小程序中都支持的 API,所以通过 Canvas 绘制多边形是一个比较通用的方法。 1.…...

Comparator.comparing 排序注意

1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 &#xff08;正确的排序方法&#xff09;//倒…...

PPO系列3 - PPO原理

On Policy: 采集数据的模型&#xff0c;和训练的模型&#xff0c;是同一个。缺点&#xff1a;慢&#xff0c;生成一批样本数据&#xff0c;训练一次&#xff0c;又要重新生成下一批。 Off Policy: 采集数据的模型&#xff0c;和训练的模型&#xff0c;不是同一个。有点&#xf…...

.idea

.idea/ 文件夹下的文件和目录主要用于存储 JetBrains IDE&#xff08;如 PyCharm、IntelliJ IDEA 等&#xff09;的项目配置。下面是一些常见文件和目录及其作用的详细介绍&#xff1a; 1. workspace.xml 用户界面布局&#xff1a;保存了IDE窗口布局&#xff0c;包括打开的文…...

单片机:实现呼吸灯(附带源码)

单片机实现呼吸灯详细解读 呼吸灯是一种常见的灯光效果&#xff0c;广泛应用于电子产品、汽车、家居照明等领域。其基本特性是通过逐渐增亮和减弱的方式&#xff0c;使得灯光呈现出“呼吸”的效果&#xff0c;给人一种平缓、舒适的视觉感受。在嵌入式系统中&#xff0c;呼吸灯…...

PostgreSQL数据库序列信息查询

PostgreSQL序列信息查询 说明&#xff1a; 在PostgreSQL数据库中序列和表都是序列的对象。 数据库中不应该存在孤儿序列&#xff0c;序列应该和表对应的字段绑定起来。绑定后删除表或表对应的字段后&#xff0c;序列会自动被删除。 创建测试表和序列 create table test_t(…...

【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…...

Linux驱动开发(12):中断子系统–按键中断实验

本章我们以按键为例讲解在驱动程序中如何使用中断&#xff0c; 在学习本章之前建议先回顾一下关于中断相关的裸机部分相关章节&#xff0c; 这里主要介绍在驱动中如何使用中断&#xff0c;对于中断的概念及GIC中断控制器相关内容不再进行讲解。 本章配套源码和设备树插件位于“…...

代码随想录-算法训练营-番外(图论02:岛屿数量,岛屿的最大面积)

day02 图论part02 今日任务:岛屿数量,岛屿的最大面积 都是一个模子套出来的 https://programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#思路往日任务: day01 图论part01 今日任务:图论理论基础/所有可到达的路径 代码随想录图论视频部分还没更新 https://programmercar…...

20 go语言(golang) - gin框架安装及使用(一)

一、简介 Gin是一个用Go语言编写的高性能Web框架&#xff0c;专注于构建快速、可靠的HTTP服务。它以其速度和简洁性而闻名&#xff0c;非常适合用于开发RESTful API。 高性能&#xff1a;Gin使用了httprouter进行路由管理&#xff0c;这是一个轻量级且非常快速的HTTP请求路由器…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...