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

MySQL数据存储详解

1. MySQL 的数据存放位置

        当我们在 MySQL 数据库中创建一个表时,MySQL 会在数据库对应的文件夹下生成三个文件:

1.1 db.opt 文件

  • 是什么:
    每个数据库都有一个 db.opt 文件,这个文件保存了数据库的配置信息。
  • 作用:
    记录数据库的字符集(character set)和排序规则(collation)。
  • 位置:
    位于数据库对应的目录中,比如 data/your_database/
  • 内容举例:
    假如你的数据库字符集是 utf8mb4db.opt 文件的内容可能是:
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci

1.2 t_order.frm 文件

  • 是什么:
    frm 文件是表定义文件,保存了表的元数据(也就是表的结构信息)。
  • 作用:
    描述表的结构,例如表名、字段名、字段类型、索引等信息。
  • 注意:
    在 MySQL 8.0 及以后版本中,frm 文件被数据字典取代,表结构信息直接存储在系统表中。
  • 举例:
    如果我们创建表 t_order
CREATE TABLE t_order (order_id INT PRIMARY KEY,order_date DATE
);

t_order.frm 文件会包含 order_id 是主键,order_date 是日期类型等结构信息。

1.3 t_order.ibd 文件

  • 是什么:
    ibd 文件是 InnoDB 存储引擎的表空间文件,用于存储表的数据和索引。
  • 作用:
    保存了表的实际数据(行记录)和相关索引。
  • 特点:
    • 每个表对应一个独立的 ibd 文件,称为独立表空间模式
    • 表空间文件包含了表的数据和所有索引。
    • 默认情况下,ibd 文件位于与数据库同名的目录中,比如:data/your_database/t_order.ibd

2. 表空间文件的结构

        接下来,表空间文件(如 t_order.ibd)的存储结构是一个重点,它是由段(segment)区(extent)页(page)行(row) 组成的。我们会按以下顺序逐步展开说明:

  1. 段(Segment)
  2. 区(Extent)
  3. 页(Page)
  4. 行(Row)

2.1 段(Segment)

是什么:

段是表空间中存储数据的基本单位。

  • 每个表和索引在表空间中都有对应的段。
  • 一个段可以看作是为了存储某一类数据(比如表的数据、索引、undo 日志等)而分配的逻辑存储结构。

类型:

段主要分为三种类型:

  1. 数据段(Data Segment): 存储表的行数据。
  2. 索引段(Index Segment): 存储表中索引的数据。
  3. 回滚段(Rollback Segment): 存储事务中的 undo 日志,用于回滚或 MVCC(多版本并发控制)。

特点:

  • 一个段是由多个 区(Extent) 组成的。
  • InnoDB 会动态地为段分配更多的区来扩展存储。

运作流程:

  • 当一个表被创建时,InnoDB 会自动为该表分配一个初始的段。
  • 如果表的数据量增大且需要更多空间,InnoDB 会自动为段分配更多的区。

2.2 区(Extent)

是什么:

区是段中的次级逻辑分区,用于存储页(Page)。

  • 每个区的大小是固定的,等于 64 页
  • 默认情况下,每页大小为 16KB,因此一个区的大小为 64 * 16KB = 1MB

作用:

  • 作为 InnoDB 中分配存储的最小单位。
  • 区的存在使得段可以按需动态扩展,而不是一次性占用大量磁盘空间。

分类:

  1. 用户数据区: 存储表的行数据。
  2. 系统区: 存储系统数据,例如数据字典、系统事务信息等。

分配策略:

  • InnoDB 表采用线性分配和按需分配策略:
    1. 初始分配一个区。
    2. 当一个区的存储用完后,会再分配一个新的区。
    3. 如果表增长特别快,可能一次分配多个区。

2.3 页(Page)

是什么:

页是 InnoDB 中存储的最小单位。

  • 每个页的默认大小为 16KB,也可以通过修改配置调整为 8KB 或 4KB。
  • 页在区中顺序排列,用于存储实际的数据内容或辅助信息。

类型:

页可以存储不同类型的数据,主要包括:

  1. 数据页(Data Page): 用于存储表中的行记录。
  2. 索引页(Index Page): 用于存储 B+ 树的索引数据。
  3. Undo 页: 用于事务的回滚操作。
  4. 系统页: 存储系统相关信息。
  5. LOB 页: 用于存储大对象(如文本或二进制数据)。

页的作用:

  • 每一页中都包含一个页头,用于记录该页的元信息(如页类型、下一个页的位置等)。
  • 页中剩余部分用于存储实际的数据。

2.4 行(Row)

是什么:

行是 MySQL 中存储的最小数据单位,表示表中的一条记录。

存储方式:

  • 每一行记录以行格式的形式存储在页中。
  • InnoDB 支持以下行格式:
    1. Compact 格式: 紧凑存储,使用较少的空间。
    2. Redundant 格式: 旧版本支持的格式,效率较低。
    3. Dynamic 格式: 用于大对象存储,数据可能存放在外部页中。
    4. Compressed 格式: 支持压缩存储,节省空间。

行的结构:

一行记录一般包括:

  • 固定部分:元信息(如事务 ID、回滚指针等)。
  • 可变部分:实际的列值。

行的特点:

  • 行记录的长度可能因列的内容不同而变化。
  • 每一行有一个唯一的行 ID(如果未设置主键,InnoDB 会自动生成一个隐式主键)。

总结与逻辑关系:

  • 表空间 是一个文件(如 t_order.ibd),它包含了段。
  • 是逻辑存储的分区,按需扩展,由多个区组成。
  • 是存储分配的基本单位,固定大小为 1MB(64 页)。
  • 是存储的最小单位,默认大小为 16KB。
  • 是表中存储的基本数据记录,存储在页中。

3. InnoDB 行格式概述

InnoDB 支持以下 4 种行格式:

  1. Redundant 行格式(冗余格式):

    • 最早期的行格式,数据存储相对冗余。
    • 每列都存储长度信息,无论字段是否变长,占用更多空间。
  2. Compact 行格式(紧凑格式):

    • 默认行格式,优化了空间利用率。
    • 使用变长字段长度列表和 NULL 值列表,更高效存储变长字段和 NULL 值。
  3. Dynamic 行格式(动态格式):

    • 主要用于存储大对象(如 TEXTBLOB 类型)。
    • 当列内容过大时,存储在外部页中,仅保留指针在主页。
  4. Compressed 行格式(压缩格式):

    • 基于 Dynamic 格式,支持页级压缩,节省磁盘空间。
    • 压缩的页无法直接访问,需要解压后再操作。

        接下来重点介绍 Compact 行格式 的结构。

4. Compact 行格式详解

4.1 Compact 行格式的组成

Compact 行格式的每条记录分为两部分:

  1. 记录的额外信息
    包括:

    • 变长字段长度列表
    • NULL 值列表
    • 记录头信息
  2. 记录的真实数据
    包括:

    • 定义的字段值
    • 三个隐藏字段(row_idtrx_idroll_pointer

4.2 记录的额外信息

(1)变长字段长度列表

  • 是什么:
    用于存储表中变长字段(如 VARCHARTEXT)的长度。

    • 每个变长字段的实际长度需要通过这个列表进行记录。
    • 长度值以字节为单位记录,并按照字段在表中的顺序逆序存放。
  • 为什么要逆序存放?

    • 原因 1:更高效地解析数据。
      在存储引擎从页中读取记录时,从右往左读取变长字段长度,可以在解析字段时更快获取完整信息。
    • 原因 2:减少偏移计算。
      变长字段通常存储在记录的尾部,逆序存放长度值后,解析字段时不需要跳转大量位置,优化了解析性能。
  • 每个表都有「变长字段长度列表」吗?

    • 不一定有。
      如果一个表中没有变长字段(如全是 INTCHAR 类型),则不会存储此列表。

(2)NULL 值列表

  • 是什么:
    用于表示记录中哪些字段的值是 NULL。

    • 以比特位的形式记录,1 表示 NULL,0 表示非 NULL。
    • 比特位排列顺序与表中字段定义的顺序一致。
  • 每个表都有「NULL 值列表」吗?

    • 不一定有。
      只有表中至少存在一个可以为 NULL 的字段时,才会有 NULL 值列表。
  • 「NULL 值列表」是否固定占用 1 字节?

    • 不是。
      • NULL 列表的大小取决于字段数。
      • 1 字节可存储 8 个字段的 NULL 信息。
      • 如果字段数超过 8 个,需要多字节存储。
  • 举例:
    如果一个表中有 9 个字段,且允许为 NULL 的字段全部为 NULL,那么:

    • NULL 列表需要 2 字节:
      • 第 1 字节记录前 8 个字段的 NULL 信息。
      • 第 2 字节记录第 9 个字段的 NULL 信息。

(3)记录头信息

  • 是什么:
    每条记录都包含一段元信息,用于管理记录本身。

    • 比如记录的删除标记、下一条记录的指针等。
  • 主要字段:

    • 记录类型:标识该记录是普通记录还是特殊标记(如主键记录)。
    • 下一条记录指针:实现记录之间的链式存储。
    • 删除标记:标识该记录是否被标记为删除。

4.3 记录的真实数据

记录真实数据部分除了我们定义的字段外,还有以下三个隐藏字段

(1)row_id

  • 是什么:

    • 隐藏的自增主键,仅在表没有显式定义主键时自动生成。
  • 作用:
    唯一标识每条记录,作为隐式主键参与索引。

(2)trx_id

  • 是什么:

    • 表示最近一次修改记录的事务 ID。
  • 作用:
    用于 MVCC(多版本并发控制)和事务回滚。

(3)roll_pointer

  • 是什么:

    • 指向 undo 日志的指针,记录了当前记录之前的版本信息。
  • 作用:
    在事务回滚时,InnoDB 根据此指针定位到之前的版本,从而恢复数据。

4.4 总结

        Compact 行格式通过紧凑的记录额外信息(变长字段长度列表、NULL 值列表、记录头信息)和高效的数据组织方式(包含隐藏字段),实现了更高的空间利用率和读写性能。

5. varchar(n) 的最大取值

        在 MySQL 中,varchar(n)n 最大取值受到 行记录总长度字符集的限制。MySQL 规定除了 TEXTBLOB 这种大对象类型外,表中的所有列(不包括隐藏列和记录头信息)占用的字节总长度不能超过 65535 个字节

5.1 单字段情况下

        如果表中只有一个 varchar(n) 字段,可以直接计算 n 的最大值。在这个过程中,需要扣除一些额外字节:

  1. 变长字段长度列表的字节数:

    • 每个变长字段的长度信息占 2 个字节
  2. NULL 值列表的字节数:

    • 表中至少有一个字段时,NULL 列表占 1 个字节(不足 8 个字段仍占 1 字节)。

公式为:

1. ASCII 字符集
在 ASCII 字符集中,varchar 的每个字符占用 1 字节

  • 最大存储长度为:65535 - 2 - 1 = 65532
  • 即,n 的最大取值为:65532

2. UTF-8 字符集
在 UTF-8 字符集中,一个字符最多占 3 字节(标准 UTF-8 的基础平面字符)。

  • 最大存储长度为:65535 - 2 - 1 = 65532
  • 字符个数 n 的最大值为:

  • 即,n 的最大取值为:21844

5.2 多字段情况下

        当表中有多个字段时,所有字段的存储长度需要满足以下条件:
        所有字段长度总和+变长字段长度列表字节数+NULL 值列表字节数≤65535

  1. 变长字段长度列表字节数:

    • 每个变长字段占用 2 字节,总字节数为字段数 ×2。
  2. NULL 值列表字节数:

    • NULL 值列表的大小为 ⌈字段数/8⌉字节。

举例:
假设一个表有两个 varchar(n) 字段,字符集为 ASCII,那么:

  • 每个字段的存储长度为 n
  • 总长度需满足:

        对于多字段表的计算逻辑更复杂,因为需要考虑字段的具体类型和字符集。

5.3 总结

  • 单字段 varchar(n)n 最大取值:

    • ASCII 字符集:65532
    • UTF-8 字符集:21844
  • 多字段的情况下,需要考虑所有字段的总长度、变长字段长度列表字节数和 NULL 值列表字节数是否超过 65535 的限制。

6. 行溢出与处理方式

        在 MySQL 的 InnoDB 存储引擎中,如果一条记录的数据量过大,无法完全存储在单个页(Page)中,就会发生 行溢出。这种情况下,超出的部分数据会存储到 溢出页(Overflow Page) 中,而行记录的主存储页中只保存指向这些溢出页的指针。

6.1 什么情况下会发生行溢出?

行溢出通常发生在以下情况中:

  1. 字段类型过大:
    • 例如 TEXTBLOB 类型的数据,可能会占用几 KB 或更大的空间。
  2. 字段数量过多:
    • 如果表中包含多个大字段,整体记录的大小可能会超出页的限制。
  3. 表字符集不同:
    • 在多字节字符集(如 UTF-8 或 UTF-16)中,每个字符占用的字节数比单字节字符集(如 ASCII)多,更容易触发溢出。

        InnoDB 默认使用的页大小为 16KB,因此,单条记录的大小不能超过 16KB 减去记录头和其他系统信息的空间。

6.2 行溢出的处理机制

        当发生行溢出时,InnoDB 会将超出部分的数据存放到「溢出页」中,并在原始页中存储一个指针指向溢出页。以下是具体处理方式:

2.1 长度较短的字段:保留部分内容

        对于 TEXTBLOB 类型的字段,InnoDB 并不会直接将整个字段移到溢出页,而是会尝试将字段的前 768 字节存储在主存储页中,其余部分存储在溢出页。

  • 为什么存储 768 字节?
    这是为了在查询时能够快速定位到字段的部分内容,减少对溢出页的读取需求,提升性能。

2.2 溢出页结构:链式存储

        溢出页之间是通过指针串联起来的,形成一个链表结构。当需要访问溢出部分的数据时,InnoDB 会沿着指针逐页读取。

  • 每个溢出页也为 16KB,并按照页结构存储数据。

6.3 行溢出的访问性能影响

        行溢出的处理虽然解决了大数据量记录存储的问题,但也会对性能造成一定的影响:

  1. 增加随机 I/O

    • 读取一条完整记录时,除了主存储页,还需要访问多个溢出页,会引发多次随机磁盘 I/O,增加了读取的开销。
  2. 内存缓存受限

    • InnoDB 的缓冲池缓存的是整个页的数据。当溢出页过多时,会占用更多的缓冲池空间,可能导致缓存效率下降。
  3. 写操作复杂度提升

    • 更新溢出字段时,不仅要修改主存储页,还需要更新溢出页的内容,增加了写操作的复杂性。

6.4 如何避免行溢出?

  1. 选择合适的字段类型:

    • 如果数据大小可控,尽量避免使用 TEXTBLOB 类型,改用 VARCHAR 或其他固定长度的字段类型。
  2. 拆分大字段:

    • 将表中可能导致溢出的字段单独拆分到另一张表中,通过外键关联,减少主表的行记录大小。
  3. 优化页大小:

    • 如果数据库支持更大的页大小(如 32KB 或 64KB),可以通过调整 innodb_page_size 参数来减少行溢出的概率。
  4. 字符集优化:

    • 使用占用空间较小的字符集(如 latin1)来存储文本数据,也能有效减小字段大小。

6.5 总结

        行溢出是 MySQL 在应对大数据量存储时的一种机制。它通过将超出的数据移到溢出页,确保主存储页的记录不会超过页大小限制。但行溢出的代价是性能的下降,因此在设计表结构时,应尽量避免行溢出现象的发生。

相关文章:

MySQL数据存储详解

1. MySQL 的数据存放位置 当我们在 MySQL 数据库中创建一个表时,MySQL 会在数据库对应的文件夹下生成三个文件: 1.1 db.opt 文件 是什么: 每个数据库都有一个 db.opt 文件,这个文件保存了数据库的配置信息。作用: 记…...

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一,Maven的概述 Maven的作用:专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,发布……)提…...

和为 K 的子数组(java)

题目描述: 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入&#xf…...

关于Redux的学习(包括Redux-toolkit中间件)

目录 什么是 Redux ? 我为什么要用 Redux ? 我什么时候应该用 Redux ? Redux 库和工具 React-Redux Redux Toolkit Redux DevTools 拓展 一个redux小示例 代码示例(很有用): Redux 术语 Actions Reducers Store Dis…...

MIT 6.S081 | 操作系统 | Lab1: Xv6 and Unix utilities

Lab1: Xv6 and Unix utilities 文章目录 Lab1: Xv6 and Unix utilities实验任务1.启动XV6(easy)2.Sleep(easy)-练手的,就是熟悉一下怎么在xv6项目中加.c文件,生成可执行程序并进行测试的1.解析rm.c2.argc 如何被赋值3.Sleep代码4.makefile编辑5.通过make…...

04 - 尚硅谷 - MQTT 客户端编程

1.在Java中使用MQTT 1.1 Eclipse Paho Java Client 具体步骤&#xff1a; 1、创建一个Spring Boot项目&#xff0c;添加如下依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>…...

C语言基础学习:抽象数据类型(ADT)

基础概念 抽象数据类型&#xff08;ADT&#xff09;是一种数据类型&#xff0c;它定义了一组数据以及可以在这组数据上执行的操作&#xff0c;但隐藏了数据的具体存储方式和实现细节。在C语言中&#xff0c;抽象数据类型&#xff08;ADT&#xff09;是一种非常重要的概念&…...

蓝桥杯每日真题 - 第16天

题目&#xff1a;&#xff08;卡牌&#xff09; 题目描述&#xff08;13届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目分析&#xff1a; 有 n 种卡牌&#xff0c;每种卡牌的现有数量为 a[i]&#xff0c;所需的最大数量为 b[i]&#xff0c;还有 m 张空白卡牌。 每…...

【Docker】快速部署 Pikachu:一个包含常见 Web 安全漏洞的渗透测试练习靶场

系统介绍 Pikachu是一个带有漏洞的Web应用系统&#xff0c;在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习&#xff0c;那么Pikachu可能正合你意。 Pikachu上的漏洞类型列表如下&#xff1a; Burt Force(暴力破解漏洞) XSS…...

【解决】Unity TMPro字体中文显示错误/不全问题

问题描述&#xff1a;字体变成方块 原因&#xff1a;字体资源所承载的长度有限 1.找一个中文字体放入Assets中 2.选中字体创建为TMPro 字体资源 3.选中创建好的字体资源&#xff08;蓝色的大F&#xff09; 在右边的属性中找到Atlas Width h和 Atlas Heigth,修改的大一点&…...

速通前端篇 —— CSS

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;速通前端 目录 CSS的介绍 基本语法规范 CSS选择器 标签选择器 class选择器 id选择器 复合选择器 通配符选择器 CSS常见样式 颜…...

【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理

中远大昌统一发票共享平台上线三个多月以来&#xff0c;实现&#xff1a; 5000份 60000元 发票开具 成本节约 客户简介及需求分析 北京中远大昌汽车服务有限公司&#xff08;以下简称“中远大昌”&#xff09;成立于2002年&#xff0c;是中远海运集团所属香远&#xff08;北…...

Windows系统运行库软件游戏修复工具

本页面下载的资源包包括PC电脑常用的运行库和电脑必备组件&#xff0c;如您的电脑出现应用打不开&#xff0c;缺少dll链接库、闪退等现象可以尝试用下面软件修复。 本资源永久有效。 软件安装基本常识科普&#xff1a; 为什么要安装运行库&#xff1f;运行库默认安装到C盘&…...

解决.DS_Store 在项目一致无法排除,.gitignore里也不生效

.DS_Store 是 macOS 操作系统创建的隐藏文件&#xff0c;通常用于存储目录的属性&#xff0c;比如视图设置、图标位置等。它通常不应包含在代码仓库中&#xff0c;因此需要排除它。你提到即使将其添加到 .gitignore 文件中&#xff0c;仍然无法排除它&#xff0c;可能是由于以下…...

C#里怎么样判断文件是否存在?

C#里怎么样判断文件是否存在? 判断文件是否存在,也是一个常用的功能。 因为文件如果不存,直接去操作,就会抛出异常。 比如要拷贝一个文件到另外一个目录里,如果文件已经存在那个文件夹里,也会抛出异常。 所以提前判断,就可以减少很多不必要的异常抛出,同时程序写得更加…...

汽车免拆诊断案例 | 2012款路虎揽胜运动版柴油车加速无力

故障现象  一辆2012款路虎揽胜运动版车&#xff0c;搭载3.0T柴油发动机&#xff08;型号为306DT&#xff09;&#xff0c;累计行驶里程约为10.2万km。车主进厂反映&#xff0c;车辆行驶中加速无力&#xff0c;且发动机故障灯异常点亮。 故障诊断 接车后试车&#xff0c;发动…...

JAVA基础

JAVA基础 JAVA的变量 变量是什么 内存中存储的&#xff0c;数值可以改变的数据 定义变量 语法 数据类型 变量名 值&#xff1b; 变量的命名&#xff1a; 必须由字母、数字、下划线和$组成&#xff1b;开头不能是数字规范的命名是小驼峰命令&#xff1a;studentName要做…...

ssh无法连接Ubuntu

试了多次ssh都无法连接&#xff0c;明明可以上网 网卡、防火墙、端口都没有问题&#xff0c;就是连接不上 结果是这个版本Ubuntu镜像默认没有安装ssh服务 安装SSH服务&#xff1a;apt-get install openssh-server 开启SSH服务&#xff1a;/etc/init.d/ssh start 就可以连接…...

spi 回环

///tx 极性0 &#xff08;sclk信号线空闲时为低电平&#xff09; /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …...

MongoDB 更新集合名

MongoDB 更新集合名 MongoDB 是一个流行的 NoSQL 数据库&#xff0c;它使用集合&#xff08;collections&#xff09;来存储文档&#xff08;documents&#xff09;。集合在 MongoDB 中相当于关系型数据库中的表。在 MongoDB 中&#xff0c;集合名是可以在某些情况下进行更新的…...

常见面试题----深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;Message Queue, MQ&#xff09;扮演着至关重要的角色。MQ不仅实现了应用间的解耦&#xff0c;还提供了异步消息处理、流量削峰等功能。而在MQ的众多特性中&#xff0c;长轮询&#xff08;Long Polling&#xff09;机制因其…...

Firewall防火墙配置

文章目录 一、firewalld简介二、firewalld特性三、firewalld相关文件及目录四、firewalld配置五、firewalld配置实例一、firewalld简介 firewalld 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 ipv4, ipv6 防火墙设置以及以太网…...

我做了一份斯坦福CS229吴恩达机器学习笔记

吴恩达教授的机器学习课程&#xff0c;可以说是AI领域的一块金字招牌。这门在斯坦福大学开设的课程&#xff0c;历经十余年&#xff0c;依旧是机器学习入门的经典之作。 记得当年&#xff0c;这门课火爆到吴恩达教授不得不将其搬到线上&#xff0c;结果不仅在斯坦福&#xff0c…...

TESSY单元测试工具详解与操作演示:ISO 26262合规性、自定义测试用例、详细测试报告等

在嵌入式系统开发中&#xff0c;安全性和可靠性至关重要&#xff0c;尤其是在汽车、医疗和工业控制等高风险行业。为了确保代码在实际运行中满足安全标准&#xff0c;开发者需要一套完善全面的测试工具&#xff0c;来严格检测代码的安全性和可靠性。 TESSY作为一款已获得IEC 61…...

C++语言之函数对象与算法

在 C 中&#xff0c;函数对象&#xff08;Function Object&#xff09;也叫仿函数&#xff08;Functor&#xff09;&#xff0c;是一个类&#xff0c;这个类重载了()运算符。从概念上讲&#xff0c;它的行为类似于一个函数&#xff0c;可以像调用函数一样来调用这个类的对象。 …...

Fakelocation Server服务器/专业版 Windows11

前言:需要Windows11系统 Fakelocation开源文件系统需求 Windows11 | Fakelocation | 任务一 打开 PowerShell&#xff08;以管理员身份&#xff09;命令安装 Chocolatey Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProto…...

java使用itext生成pdf

一、利用Adobe Acrobat DC软件创建pdf模板 备好Adobe Acrobat DC软件 1.excel/jpg/png文件转pdf文件 右击打开我们要转换的文件 2.然后点击 添加 域 3.可以看到域的名字 4.调整字体大小/对齐方式等 5.保存 二&#xff0c;代码部分 首先 上依赖 <dependency><group…...

【PPTist】添加PPT模版

前言&#xff1a;这篇文章来探索一下如何应用其他的PPT模版&#xff0c;给一个下拉菜单&#xff0c;列出几个项目中内置的模版 PPT模版数据 &#xff08;一&#xff09;增加菜单项 首先在下面这个菜单中增加一个“切换模版”的菜单项&#xff0c;点击之后在弹出框中显示所有的…...

AmazonS3集成minio实现https访问

最近系统全面升级到https&#xff0c;之前AmazonS3大文件分片上传直接使用http://ip:9000访问minio的方式已然行不通&#xff0c;https服务器访问http资源会报Mixed Content混合内容错误。 一般有两种解决方案&#xff0c;一是升级minio服务&#xff0c;配置ssl证书&#xff0c…...

适配屏幕px、rem单位换算, 将 pxToRem 函数设置为一个全局工具如:在 utils.js 文件、SCSS/Mixin 定义

页面的宽度适配&#xff1a; 假设页面的根元素&#xff08;html&#xff09;的字体大小设置为动态值&#xff08;常用 rem 单位适配时的做法&#xff09;&#xff0c; 比如 html { font-size: (屏幕宽度 / 设计稿宽度) }。如果根元素的字体大小为 1rem 屏幕宽度 / 1920px&…...

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因

随着人工智能和机器学习技术的应用&#xff0c;流媒体播放器将变得更加智能&#xff0c;能够根据用户行为和偏好提供个性化的内容推荐。总体而言&#xff0c;流媒体播放器的未来发展将更加注重技术创新和用户互动&#xff0c;以适应不断变化的市场需求和技术进步。 提示MSE不支…...

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室

医学图像语义分割&#xff1a;前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室 语义分割网络FCN&#xff1a;通过将全连接层替换为卷积层并使用反卷积上采样&#xff0c;实现了第一个端到端的像素级分割网络U-Net&#xff1a;采用对称的U形编解码器结构&#xff…...

16. 指针类型和步长概念问题

1. 项目场景&#xff1a; ➣ Jack Qiao对米粒说&#xff1a;“今天有道友遇到一个问题&#xff0c;举个栗子数组 arr[5] { 0 };道友发现&arr[0] 1与&arr 1打印出来的地址竟然不同。”米粒测试后果然是这样。 2. 问题描述 ☑ 举个栗子&#xff1a;数组 arr[5] { 0…...

【电路笔记】-布尔逻辑AND函数

逻辑AND函数 文章目录 逻辑AND函数1、概述2、逻辑 AND 函数 仅当所有输入均为 true 时&#xff0c;逻辑与函数输出才为 true&#xff0c;否则输出为 false。 1、概述 布尔代数基于逻辑函数&#xff0c;其中每个布尔函数&#xff08;例如逻辑 AND 函数&#xff09;通常具有一个…...

数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…...

wend看源码-APISJON

项目地址 腾讯APIJSON官方网站 定义 APIJSON 可以定义为一个面向HTTP 协议的JSON 规范&#xff0c;一个面向数据访问层的ORM 框架。其主要工作流程包括&#xff1a;前端按照既定格式组装 JSON 请求报文&#xff0c;通过 APIJSON-ORM 将这些报文直接转换为 SQL 语句&#xff0c…...

CSS(8):盒子阴影与文字阴影

一&#xff1a;盒子阴影text-shadow属性 1.box-shadow&#xff1a;h-shadow v-shadow blur spread color inset; 默认的是外部阴影outset&#xff0c;不能写在代码上 2.鼠标经过盒子后的阴影 rgba透明度 3.文字阴影 text-shadow:水平偏移 垂直偏移 模糊度 阴影颜色; 注意点…...

Hadoop 系列 MapReduce:Map、Shuffle、Reduce

文章目录 前言MapReduce 基本流程概述MapReduce 三个核心阶段详解Map 阶段工作原理 Shuffle 阶段具体步骤分区&#xff08;Partition&#xff09;排序&#xff08;Sort&#xff09;分组&#xff08;Combine 和 Grouping&#xff09; Reduce 阶段工作原理 MapReduce 应用场景Map…...

web——sqliabs靶场——第十三关——报错注入+布尔盲注

发现是单引号加括号闭合的 尝试联合注入 发现不太行&#xff0c;那尝试报错注入。 测试报错注入 unameadmin) and updatexml(1,0x7e,3) -- &passwdadmin&submitSubmit 爆数据库 unameadmin) and updatexml(1,concat(0x7e,database(),0x7e),3) -- &passwdadmin&a…...

调大Vscode资源管理器字体

对于调整资源管理器字体大小&#xff08;也就是下图红框&#xff09;&#xff0c;查找了网上很多方法。要么介绍的方法是调整了代码字体&#xff0c;要么是调节了终端字体&#xff0c;要么是通过整体放缩实现的调整&#xff0c;总之都不合适。 唯一的调整方法是在几篇CSDN里看到…...

【新人系列】Python 入门(十一):控制结构

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…...

后端开发详细学习框架与路线

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端开发 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 为帮助你合理安排时间&#xff0c;以下是结合上述学习内容的阶段划分与时间分配建议。时间安排灵活&a…...

类文件结构详解.上

字节码 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class 的文件&#xff09;&#xff0c;它不面向任何特定的处理器&#xff0c;只面向虚拟机。Java 语言通过字节码的方式&#xff0c;在一定程度上解决了传统解释型语言执行效率低的问题&…...

【K8S问题系列 |18 】如何解决 imagePullSecrets配置正确,但docker pull仍然失败问题

如果 imagePullSecrets 配置正确&#xff0c;但在执行 docker pull 命令时仍然失败&#xff0c;可能存在以下几种原因。以下是详细的排查步骤和解决方案。 1. 检查 Docker 登录凭证 确保你使用的是与 imagePullSecrets 中相同的凭证进行 Docker 登录&#xff1a; 1.1 直接登录…...

Vue+Springboot用Websocket实现协同编辑

1. 项目介绍 在本文中&#xff0c;我们将介绍如何使用Vue.js和Spring Boot实现一个支持多人实时协同编辑的Web应用。通过WebSocket技术&#xff0c;我们可以实现文档的实时同步&#xff0c;让多个用户同时编辑同一份文档。 2. 技术栈 前端&#xff1a;Vue.js 3 Vuex后端&am…...

高阶C语言补充:柔性数组

C99中&#xff0c;结构体中最后一个元素允许时未知大小的数组&#xff0c;这就叫做柔性数组成员。 vs编译器也支持柔性数组。 之所以把柔性数组单独列出&#xff0c;是因为&#xff1a; 1、柔性数组是建立在结构体的基础上的。 2、柔性数组的使用用到了动态内存分配。 这使得柔…...

MYSQL——多表查询、事务和索引

概括 出现查询结果个数为笛卡尔积的原因是sql语句&#xff1a; select * from tb_emp,tb_dept; 没有加上where tb_emp.dept_id tb_dept.id;&#xff08;where条件可以消除笛卡尔积&#xff09; select * from tb_emp,tb_dept where tb_emp.dept_id tb_dept.id; 查询类型 …...

在 Swift 中实现字符串分割问题:以字典中的单词构造句子

文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 LeetCode - #140 单词拆分 II 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&…...

Unity类银河战士恶魔城学习总结(P132 Merge skill tree with skill Manager 把技能树和冲刺技能相组合)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了解锁技能后才可以使用技能&#xff0c;先完成了冲刺技能的锁定解锁 Dash_Skill.cs using System.Collections; using System…...

JavaScript 中 arguments、类数组与数组的深入解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 &#x1f4af;深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性…...