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

【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、页的大小可以设置吗?
  • 🏳️‍🌈二、页都有哪些分类? 我们需要重点学习哪种页?
  • 🏳️‍🌈三、页头和页尾具体包含了哪些信息?
    • 3.1 页头 - File Header
    • 3.2 页尾-File Trailer
    • 3.3 什么是 LSN
    • 3.4 除了页头和页尾,数据页中还有哪些信息?
    • 3.5 页主体中包含哪些信息?
  • 🏳️‍🌈四、数据行有哪些信息组成?
    • 4.1 数据行是如何组织在一起的?
    • 4.2 怎么标识新页中的第一行和最后一行?
    • 4.3 当向一个新页插入数据时是如何执行的?
  • 🏳️‍🌈五、如果要查询的数据在某一个页中,如何定位它在页中的位置,一条条遍历吗?
    • 5.1 一条条遍历的查询效率高不高?
    • 5.2 如何提高页内的查询效率?页目录
  • 🏳️‍🌈六、关于事务、索引这些信息在页中怎么记录?
  • 🏳️‍🌈七、数据页的完整结构是什么样的?
  • 👥总结


11111111
11111111
11111111
11111111
**** 11111111

MySQL 运行的过程中起到了非常重要的作用,为了能发挥更好的性能,可以结合自己系统的业务场景和数据大小,对页相关的系统变量进行调整,页的大小就是一个非常重要的调整项。同时关于页的结构也要有所了解,以后介绍的索引原理也是基于页实现的。

首先来看关于页的几个问题。

🏳️‍🌈一、页的大小可以设置吗?

  • 前面介绍了每个数据页默认为 16KB ,是操作系统"数据块"4KB的整数倍,那么只要保证页的大小是操作系统"数据块"大小的整数倍是不是也可以呢,答案是肯定的
  • MySQL提供了一个专门的系统变量来控制页的大小,可以通过系统变量 innodb_page_size 进行调整与查看,在调整页大小的时候需要保证设置的值是操作系统"数据块"4KB的整数倍,从而保证通过操作系统和磁盘交互时"数据块"的完整性,不被分割或浪费,所以规定了innodb_page_size可以设置的值,分别是4096、8192、16384、3276865536,对应4KB、8KB、16KB、32KB、64KB。

解答问题

可以通过系统变量 innodb_page_size 进行调整与查看,但要保证设置的值是操作系统 "数据块"4KB 的整数倍,MySQL规定 innodb_page_size 可以设置的值,分别是 40968192、16384、65536,对应4KB、32768、8KB、16KB、32KB、64KB

🏳️‍🌈二、页都有哪些分类? 我们需要重点学习哪种页?

  • InnoDB在不同的使用场景定义多种不同类型的页,常用的有数据页、Undo Log页Change Buffer页Extent Descriptor(XDES)页InnoDB段信息页 等,每种页的数据结构都不相同,其中最需要我们关注的就是数据页
  • 由于 InnoDB 中有个概念叫 “索引即数据”,所以也叫做索引页
  • 不论哪种类型的页都具有 页头(File Header)页尾(File Trailer) 两个信息

🏳️‍🌈三、页头和页尾具体包含了哪些信息?

页头 和 页尾 中包含的是 用来描述文件相关的信息,如下图所示

在这里插入图片描述
在这里插入图片描述

3.1 页头 - File Header

  • 页号: FIL_PAGE_OFFSET 占用 4Byte,相当于页的身份证号,通过这个长度可以计算出每个InnoDB表中最多可以拥有 2(4*8)-1约42亿 个页,表空间第一个页编号从0开始,之后的页号分别是1,2,3…依此类推,具体页的偏移量计算公式为: 页号 * 每页大小; 那么按照每个页默认16KB大小计算,一个表空间最大容量为2(4*8)*16KB= 64TB,这也是InnoDB表空间最大容量是64T的原因;
  • 上一页页号: FIL_PAGE PREV
  • 下一页页号: FIL_PAGE_NEXT 多个页通过这两个信息组成双向链表,即使不同的页地址不连续,也可以通过链表连接
  • 表空间ID: FIL PAGE_ARCH_LOG_NO_OR_SPACE_ID当前页属于哪个表空间
  • 页类型: FIL_PAGE_TYPE数据页对应的页类型是 FIL_PAGEINDEX=0x45BF
  • 最近一次修改的LSN: FIL_PAGE_LSN,占用 8Byte
  • 已被刷到磁盘的LSN: FIL_PAGE_FILE_FLUSH_LSN,占用 8Byte
  • 校验和: FILPAGELSPACE_OR_CHKSUM用于页的完整性校验

3.2 页尾-File Trailer

  • 近一次修改的LSN
  • 校验和: 对应页头中的校验和

如果在数据传输的过程中数据丢失或异常中断,导致一个数据页不完整 可以通过 页头页尾校验和 进行验证,验证算法默认使用 CRC32

3.3 什么是 LSN

LSN: 是"Log Sequence Number"的缩写,表示日志序号。用 一个任意的、不断增加的值 表示日志中记录的操作对应的时间点,用 8字节的无符号长整形 表示,后面会详细介绍如何生成LSN的值

3.4 除了页头和页尾,数据页中还有哪些信息?

页头和页尾中的各个字段描述了当前页的类型以及在文件系统中的位置,也就是说通过页头可以找到对应的页。数据页的主要功能是保存数据,在一个数据页中,除了页头与页尾占用的46个字节之外的空间都用来存储真正的数据,也就是 数据行

数据行会与表里的数据行一一对应,基于这一特性MySQL也被称为"行式数据库”,也可以把除了页头页尾的区域称为页主体

3.5 页主体中包含哪些信息?

页主体中的信息都是和数据相关的,

  • 其中包括刚才提到了 数据行
  • 还有为了提高查询效率的页目Page Directory
  • 为了方便操作和管理数据页的数据页头 Page Header

这又是三个非常重要的概念,接下来我们逐个讨论。

🏳️‍🌈四、数据行有哪些信息组成?

数据行主要存储真实数据,为了方便数据的管理与描述,InnoDB在每个数据行中还添加了一些额外(管理)信息,于是每一个 DYNAMIC 数据行都可以划分为两部分,一部分存储额外信息,一部分存储真实数据

额外信息部分包含 变长字段长度列表NULL值列表 两个大小不确定的区域,以及固定占5字节及40BIT的头信息区域

头信息 中存储了行的基本信息,包括行在 页内的位置heap_no行类型 record_type下一行的地址偏移量 next_record 等6项信息,

如下图所示:

在这里插入图片描述
总结

  • 数据行可以划分为两部分,一部分存储额外信息,一部分存储真实数据
  • 额外信息部分 包含 变长字段长度列表NULL值列表 两个大小不确定的区域,以及固定占5字节的头信息区域

4.1 数据行是如何组织在一起的?

数据行通过下一行的地址偏移量,即 next_record 将页内所有数据行组成了一个单向链表

这里要注意的是,地址偏移量 指向的是 下一行中真实数据的起始地址,这样做的好处是,向右是真实数据,向左就是头信息,而无需额外的长度计算,如图所示:

在这里插入图片描述

在这里插入图片描述

4.2 怎么标识新页中的第一行和最后一行?

了解了行的基本结构和组织方式之后,那么当遍历页中的行时,从哪里开始到哪里结束呢?

为了解决这个问题,每当创建一个新页,都会自动分配两个行,

  • 一个是行类型为2的 最小行 Infimun, heap_no 位置固定为0号
  • 一个是行类型为3的 最大行 Supremun, heap_no 位置固定为1号

这两个行并不存储任何真实信息,而是做为数据行链表的头和尾

虽然不存储真实数据,但它们的数据结构和真实数据行完全一致,只不过数据区域存储的是代表它们身份的固定字符串 InfimunSupremun,新页中没有数据时,最小行 Infimunnext record 直接连接最大行 Supremun最大行不连接任何行,它的 next_record0

在这里插入图片描述

4.3 当向一个新页插入数据时是如何执行的?

当向一个新页插入数据时,heap_no 会 从2号开始递增,表示当前记录在页面堆中的相对位置;

  • 如果是真实数据record_type0
  • 如果是索引目录(B+树非叶节点)数据则 record_type1

再将 Infimun 连接第一个数据行,最后一行真实数据行连接 Supremun这样数据行就构建成了一个单向链表

更多的行数据插入后,会按照主键从小到大的顺序进行链接;

为了使页的结构更加清晰,通常

  • 将页中有数据行的区域称为 用户数据区 userRecords
  • 把未被数据行占用的区域称为 空闲区Free Space

如下图所示:

在这里插入图片描述

🏳️‍🌈五、如果要查询的数据在某一个页中,如何定位它在页中的位置,一条条遍历吗?

当然不是,InnoDB使用了另一种方式,更高效的查询数据,下面我们分析一下。

5.1 一条条遍历的查询效率高不高?

从头开始遍历是一个最简单的方法,也可以实现数据的查找,当按主键或索引查找某条数据时,从头行 infimun 开始,沿着链表顺序逐个比对查找,但一个页有16KB,通常会存在数百行数据,每次都要遍历数百行,无法满足高效查询。

5.2 如何提高页内的查询效率?页目录

为了提高查询效率,InnoDB 采用 二分查找 来解决查询效率问题。

具体实现方式是,在每一个页中加入一个叫做 页目录 Page Directory 的结构将页内包括头行、尾行在内的所有行进行分组,约定头行单独为一组其他每个组最多8条数据,同时把每个组最后一行在页中的地址,按主键从小到大的顺序记录在页目录中

页目录中的每一个位置称为一个,每个槽都对应了一个分组,这样在插入数据行完成链接后,一旦最后一个分组中的数据行超过分组的上限8个时,就会分裂出一个新的分组,为了快速判断每个分组是否达到了8个的上限,在每个分组最后一行中用 n_owned 记录了这个分组内的行数,与此同时在页目录中创建一个新的槽,后续插入的行都遵守这个规则;

后续在查询某行时,就可以通过二分查找,先找到对应的槽,然后在槽内最多8个数据行中进行历即可,从而大幅提高了查询效率;

例如要查找主键为6的行,先比对槽中记录的主键值,定位到最后一个槽2,再从最后一个槽中的第一条记录遍历,第二条记录就是我们要查询的目标行。
在这里插入图片描述

🏳️‍🌈六、关于事务、索引这些信息在页中怎么记录?

在这里插入图片描述

🏳️‍🌈七、数据页的完整结构是什么样的?

这个问题是对页结构的总结性描述,这里也用一张图就可以明确的表示出页结构的整体信息
注意: 这里讲的是 InnoDB 的数据页结构,和 MyISAM 的页结构有所不同

在这里插入图片描述


👥总结

本篇博文对 【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关文章:

【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...

C++ stl中的priority_queue的相关函数用法

文章目录 priority_queuepriority_queue定义方式priority_queue相关函数 priority_queue priority_queue 称为 优先级队列,默认使用vector作为底层存储数据的容器,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用…...

软件架构师知识点总结

一、综合知识 软件架构师综合知识总结-CSDN博客 二、案例 软件架构师案例知识点总结-CSDN博客 三、论文 1、题目类型:八大架构;系统开发(开发方法/模型、需求分析、测试等);系统可靠性、安全性、容错技术等&#…...

MySQL数据库常见面试题之三大范式

写在前面 此文章大部分不会引用最原始的概念,采用说人话的方式。 面试题:三大范式是什么?目的是什么?必须遵循吗? 假设有一张表(学号,姓名,课程,老师) 是…...

Scrapy 核心组件解析:Request Response 的深度应用与实战

Scrapy 是 Python 生态中最强大的爬虫框架之一,其核心组件 Request 和 Response 承担着数据抓取与处理的关键任务。本文深入解析 Scrapy 2.13.0 中 Request 和 Response 的高级用法,涵盖参数配置、回调函数、错误处理、子类扩展等,并结合 综合…...

mybatis执行sql过程

一、配置加载阶段​​ ​​1. 读取全局配置(mybatis-config.xml)​​ ​​入口类​​:SqlSessionFactoryBuilder.build()​​关键组件​​: XMLConfigBuilder:解析全局配置文件。Configuration:存储所有配…...

OceanBase 4.3版本向量数据库部署

OceanBase 4.3版本向量数据库部署 安装包准备最低资源配置重要的准备事项服务器配置操作系统内核参数BIOS设置磁盘挂载网卡设置 部署OAT工具初始化OBServer服务器使用oatcli部署OB集群安装OceanBase软件初始化OceanBase集群 启用向量检索功能 OceanBase最新的V4.3版本开始支持向…...

LeetCode 941. 有效的山脉数组 java题解

https://leetcode.cn/problems/valid-mountain-array/description/ 双指针 class Solution {public boolean validMountainArray(int[] arr) {int lenarr.length;if(len<3) return false;int left0,rightlen-1;while(left1<len&&arr[left]<arr[left1]){left…...

基于Java和高德开放平台的WebAPI集成实践-以搜索POI2.0为例

目录 前言 一、高德搜索API简介 1、高德开放平台 2、搜索功能介绍 3、部分API介绍 二、Uniapi集成高德API 1、API集成流程 2、访问接口的定义 3、业务调用集成 三、常见问题与优化 四、总结 前言 在当今数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff…...

Docker拉取ubuntu22.04镜像使用ROS2 humble及仿真工具可视化进行导航

创建Ubuntu22.04 容器 docker pull ubuntu:22.04 #下载22.04镜像 docker images #查看已下载镜像 #根据镜像创建容器 sudo docker run -it -v /home/lab118/BD_ICL/tools_BD/cailib_data:/calib_data -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY:0 --nethost -e GDK_SCAL…...

PXE安装Ubuntu系统

文章目录 1. 服务器挂载Ubuntu镜像2. 修改dhcp配置文件3. 修改tftp配置文件4.复制网络驱动文件和其他配置文件5. http目录下配置文件6. 踩坑记录6.1 Failed to load ldlinux.c326.2 no space left on device6.3 为啥用pxe安装系统时&#xff0c;客户端需要较大的内存&#xff1…...

外网访问内网海康威视监控视频的方案:WebRTC + Coturn 搭建

外网访问内网海康威视监控视频的方案&#xff1a;WebRTC Coturn 需求背景 在仓库中有海康威视的监控摄像头&#xff0c;内网中是可以直接访问到监控摄像的画面&#xff0c;由于项目的需求&#xff0c;需要在外网中也能看到监控画面。 实现这个功能的意义在于远程操控设备的…...

缓存局部性保留

在操作系统中&#xff0c;线程切换相比进程切换更轻量级的关键原因之一是 缓存&#xff08;Cache&#xff09;的有效性&#xff0c;尤其是对 CPU 缓存&#xff08;如 L1/L2/L3&#xff09;和 TLB&#xff08;Translation Lookaside Buffer&#xff09;的影响。以下从缓存角度详…...

MyBatis源码解读5(3.1、缓存简介)

3.1、简介 ​ 我们需要记住一句话&#xff0c;程序与数据库之间的交互是性能瓶颈的关键&#xff0c;所以我们在做优化的时候&#xff0c;数据库的优化要做&#xff0c;但是优先级是最低的&#xff0c;比它优先级高的是方面是程序与数据库之间的交互&#xff0c;先从宏观上解决…...

【MySQL】行结构详解:InnoDb支持格式、如何存储、头信息区域、Null列表、变长字段以及与其他格式的对比

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库

介绍 Nexus 是广泛使用的仓库管理工具&#xff0c;常用于管理 Java 构件&#xff08;如 JAR、WAR、EAR 文件&#xff09;。它可以作为一个本地的 Maven 仓库&#xff0c;用来存储和管理项目的依赖包和构建产物。支持多种仓库类型&#xff0c;能够帮助开发团队更高效地管理构件…...

PostgreSQL 的 pg_column_size 函数

PostgreSQL 的 pg_column_size 函数 pg_column_size 是 PostgreSQL 提供的一个系统函数&#xff0c;用于返回特定列或值在数据库内部存储时所占用的字节数。这个函数对于数据库优化、存储空间分析和性能调优非常有用。 函数语法 pg_column_size(anyelement)参数说明 anyele…...

【前端】【HTML】【总复习】一万六千字详解HTML 知识体系

🌐 HTML 知识体系 一、HTML 基础入门 1. HTML 简介与作用 HTML(HyperText Markup Language,超文本标记语言)是构建网页的基础语言。它的核心作用是: 定义网页内容的结构(标题、段落、图片、表格等)提供语义化标签,帮助搜索引擎与辅助设备理解页面内容配合 CSS 实现…...

支持向量机与逻辑回归的区别及 SVM 在图像分类中的应用

支持向量机与逻辑回归的区别及 SVM 在图像分类中的应用 在机器学习的多元算法领域中&#xff0c;支持向量机&#xff08;SVM&#xff09;和逻辑回归&#xff08;LR&#xff09;作为两种经典的监督学习算法&#xff0c;被广泛应用于各类分类任务。尽管它们有着相似的目标&#…...

MySQL基础面试题集锦

MySQL基础面试题集锦 一、SQL基础语法 1. 数据库和表操作 -- 创建数据库 CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 创建表 CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,email VARCH…...

【网络分析工具】网络工具wireshark、TCPdump、iperf使用详解

这里写目录标题 1. wireshark1.1. 过滤包1.2. 常见分析 2. tcpdump3. iperf 1. wireshark **ip.dst eq 10.0.0.21** 是用于网络流量分析工具&#xff08;例如 Wireshark 或 tcpdump&#xff09;的过滤器表达式。 它的作用是筛选出所有目标IP地址为 10.0.0.21 的数据包 IP.add…...

【漫话机器学习系列】253.超平面(Hyperplane)

超平面&#xff08;Hyperplane&#xff09;详解&#xff1a;从二维到高维空间 在机器学习、深度学习、支持向量机&#xff08;SVM&#xff09;等领域中&#xff0c;经常会遇到一个重要的数学概念——超平面&#xff08;Hyperplane&#xff09;。但超平面究竟是什么&#xff1f…...

#微调重排序模型:Reranking从入门到实践

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

vector 常见用法及模拟

文章目录 1. vector的介绍与使用1.1 vector的构造1.2 vector iterator 的使用1.3 有关大小和容量的操作1.4 vector 增删查改1.5 vector 迭代器失效问题&#xff08;重点&#xff09;1.6 vector 中二维数组的使用 2. vector 的模拟实现2.1 拷贝构造和赋值重载的现代写法2.2 memc…...

可变参数模板

引入&#xff1a;为什么会有可变参数模板&#xff1f; 在C98/03中&#xff0c;也就是我们之前学的类模版和函数模版中只能含固定数量的模版参数&#xff0c;而C11中新增的可变参数模板能够不固定数量的模版参数&#xff01; 一&#xff1a;可变参数模板的格式 // Args是一个模板…...

缓存(5):常见 缓存数据淘汰算法/缓存清空策略

主要的三种缓存数据淘汰算法 FIFO(first in first out)&#xff1a;先进先出策略&#xff0c;最先进入缓存的数据在缓存空间不够的情况下&#xff08;超出最大元素限制&#xff09;会被优先被清除掉&#xff0c;以腾出新的空间接受新的数据。策略算法主要比较缓存元素的创建时…...

深入了解linux系统—— 自定义shell

shell的原理 我们知道&#xff0c;我们程序启动时创建的进程&#xff0c;它的父进程都是bash也就是shell命令行解释器&#xff1b; 那bash都做了哪些工作呢&#xff1f; 根据已有的知识&#xff0c;我们可以简单理解为&#xff1a; 输出命令行提示符获取并解析我们输入的指令…...

【通讯录教程】如何将号码快速导入手机通讯录,支持苹果和安卓手机,一次性导入大量号码进入手机通讯录,基于WPF的解决方案

以下是一个基于WPF的解决方案&#xff0c;用于将大量号码快速导入苹果和安卓手机通讯录&#xff1a; 项目应用场景 ​​企业员工通讯录批量导入​​&#xff1a;HR需要将数百名员工的联系方式快速导入公司手机​​客户关系管理​​&#xff1a;销售人员需要将大量客户信息导入…...

Git初始化相关配置

Git配置 在Git安装完成后&#xff0c;windows操作系统上会多出一个Git Bash的软件&#xff0c;如果是linux或者是macOS&#xff0c;那么直接打开终端&#xff0c;在终端中敲击命令即可 # 检查git版本 git -v # 或 git --version在使用git时&#xff0c;需要配置一下用户名和邮…...

n8n中订阅MQTT数据

第一步&#xff1a;创建mqtt登录证证 第二步&#xff1a;创建mqtt trigger组件&#xff0c;并配置凭证和订阅主题 第三步&#xff1a;创建Code节点&#xff0c;编写格式转换代码 第四步&#xff1a;创建转发MQTT节点&#xff0c;并配置MQTT凭证 第五步&#xff1a;启用工作流 整…...

Docker、ECS 与 K8s 网段冲突:解决跨服务通信中的路由问题

&#x1f9e9; 问题背景 在阿里云的项目中&#xff0c;在项目初期搭建过程中遇到了一个让人头疼的网络冲突问题&#xff1a;同一个 VPC 中的 Docker 容器和 Kubernetes 集群由于使用相同的网段&#xff0c;导致k8s pod连接ECS容器之间的网络连接失败。 背景环境&#xff1a; …...

《智能网联汽车 自动驾驶系统设计运行条件》 GB/T 45312-2025——解读

目录 1. 标准概述 2. 核心概念 3. 标准核心内容 3.1 一般要求 3.2 ODC基础元素层级 3.3 ODC元素具体要求 3.4 附录A&#xff08;ODC示例&#xff09; 4. 技术挑战与实施建议 5. 标准意义 原文链接&#xff1a;国家标准|GB/T 45312-2025 &#xff08;发布&#xff1a;2…...

AARRR用户增长模型(海盗指标)详解

目录 一、模型起源与概述二、五大阶段详解1. 获取&#xff08;Acquisition&#xff09;1.1 定义1.2 关键指标 2. 激活&#xff08;Activation&#xff09;2.1 定义2.2 关键指标 3. 留存&#xff08;Retention&#xff09;3.1 定义3.2 关键指标3.3 提升留存手段案例3.4 互联网留…...

CSS专题之自定义属性

前言 石匠敲击石头的第 12 次 CSS 自定义属性是现代 CSS 的一个强大特性&#xff0c;可以说是前端开发需知、必会的知识点&#xff0c;本篇文章就来好好梳理一下&#xff0c;如果哪里写的有问题欢迎指出。 什么是 CSS 自定义属性 CSS 自定义属性英文全称是 CSS Custom Proper…...

JVM——Java字节码基础

引入 Java字节码&#xff08;Java Bytecode&#xff09;是Java技术体系的核心枢纽&#xff0c;所有Java源码经过编译器处理后&#xff0c;最终都会转化为.class文件中的字节码指令。这些指令不依赖于具体的硬件架构和操作系统&#xff0c;而是由Java虚拟机&#xff08;JVM&…...

【React中useRef钩子详解】

一、useRef的核心特性 useRef是React提供的Hook,用于在函数组件中创建可变的持久化引用,具有以下核心特性: 持久化存储 返回的ref对象在组件整个生命周期内保持不变,即使组件重新渲染,current属性的值也不会丢失。无触发渲染 修改ref.current的值不会导致组件重新渲染,适…...

《AI大模型应知应会100篇》第58篇:Semantic Kernel:微软的大模型应用框架

第58篇&#xff1a;Semantic Kernel&#xff1a;微软的大模型应用框架 ——用C#和Python构建下一代AI应用的统一编程范式 &#x1f4cc; 摘要 随着大模型&#xff08;LLM&#xff09;技术的快速发展&#xff0c;如何将这些强大的语言模型与传统代码系统进行无缝集成&#xff…...

ssh -T git@github.com 测试失败解决方案:修改hosts文件

问题描述 通过SSH方式测试&#xff0c;使用该方法测试连接可能会遇到连接超时、端口占用的情况&#xff0c;原因是因为DNS配置及其解析的问题 ssh -T gitgithub.com我们可以详细看看建立 ssh 连接的过程中发生了什么&#xff0c;可以使用 ssh -v命令&#xff0c;-v表示 verbo…...

c++面向对象:接口设计

一、什么是接口&#xff08;Interface&#xff09;&#xff1f; 在面向对象编程中&#xff0c;接口可以理解为一种“规范”或“约定”。 更具体一点&#xff1a; 它定义了“某个对象”应该具备哪些功能&#xff08;方法、行为&#xff09;但不关心这些功能的具体实现细节 用…...

[Java][Leetcode middle] 80. 删除有序数组中的重复项 II

删除重复元素&#xff0c;最多只保留两个 1. 计数法 第一个元素直接加入当与前一个元素相同时&#xff0c;计数器1&#xff0c;不同时计数器恢复1&#xff1b; 只有计数器小于2时&#xff0c;记录元素&#xff1b; public int removeDuplicates2(int[] nums) {int cnt 1;in…...

【Bluedroid】蓝牙HID DEVICE断开连接流程源码分析

蓝牙HID&#xff08;Human Interface Device&#xff09;的断开连接流程涉及从应用层到协议栈的多层交互。本文通过剖析Android Bluetooth协议栈代码&#xff0c;梳理从上层调用disconnect()到最终物理链路断开的完整流程&#xff0c;涵盖状态检查、消息传递、L2CAP通道关闭、资…...

嵌入式硬件篇---陀螺仪|PID

文章目录 前言1. 硬件准备主控芯片陀螺仪模块电机驱动电源其他 2. 硬件连接3. 软件实现步骤(1) MPU6050初始化与数据读取(2) 姿态解算&#xff08;互补滤波或DMP&#xff09;(3) PID控制器设计(4) 麦克纳姆轮协同控制 4. 主程序逻辑5. 关键优化与调试技巧(1) 传感器校准(2) PID…...

redis数据结构-07(SADD、SREM、SMEMBERS)

Redis Sets 简介&#xff1a;SADD、SREM、SMEMBERS Redis 集合是一种基础数据结构&#xff0c;可用于存储一组唯一且无序的元素。了解如何管理集合对于各种应用至关重要&#xff0c;从跟踪唯一访客到管理用户权限。本课将全面介绍 Redis 集合&#xff0c;重点介绍核心命令 SAD…...

嵌入式硬件篇---TOF|PID

文章目录 前言1. 硬件准备主控芯片ToF模块1.VL53L0X2.TFmini 执行机构&#xff1a;电机舵机其他 2. 硬件连接(1) VL53L0X&#xff08;IC接口&#xff09;(2) TFmini&#xff08;串口通信&#xff09; 3. ToF模块初始化与数据读取(1) VL53L0X&#xff08;基于HAL库&#xff09;(…...

# Anaconda3 常用命令

Anaconda3 常用命令及沙箱环境管理指南 Anaconda3 是一个强大的 Python 发行版&#xff0c;广泛用于数据科学、机器学习和科学计算。其核心优势在于通过 沙箱环境&#xff08;Conda Environment&#xff09; 实现项目隔离&#xff0c;避免依赖冲突。本文将介绍 Anaconda3 的常…...

嵌入式硬件篇---无线通信模块

文章目录 前言一、四种无线串口模块深度对比二、模块优缺点分析1. 蓝牙模块&#xff08;HC-05&#xff09;优点缺点 2. WiFi模块&#xff08;ESP8266&#xff09;优点缺点 3. 2.4G射频&#xff08;NRF24L01&#xff09;优点缺点 4. LoRa模块&#xff08;SX1278&#xff09;优点…...

MySQL 索引(二)

文章目录 索引理解MySQL对page做管理page的概念单个page多个page 页目录单页情况&#xff08;提高page内部的查找的效率&#xff09;多页情况&#xff08;提高page间的查找效率&#xff09;复盘一下为什么选择B树&#xff0c;不选择其他数据结构呢聚簇索引 VS 非聚簇索引 索引操…...

代码随想录算法训练营第六十天| 图论7—卡码网53. 寻宝

图论第七天&#xff0c;prim和kruskal算法&#xff0c;说实话都没看的很懂&#xff0c;有点抽象难理解&#xff0c;只能照着题解理解一下了。 53. 寻宝&#xff08;prim&#xff09; 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 复制一下网站上的prim算法的结论 prim算…...

「OC」源码学习—— 消息发送、动态方法解析和消息转发

「OC」源码学习—— 消息发送、动态方法解析和消息转发 前言 前面我们在学习alloc源码的时候&#xff0c;就在callAlloc源码之中简单的探究过&#xff0c;类初始化缓存的问题&#xff0c;我们知道在一个类第一次被实例化的时候&#xff0c;会调用objc_msgSend去二次调用alloc…...

MySQL数据库下篇

#作者&#xff1a;允砸儿 #日期&#xff1a;乙巳青蛇年 四月十四 今天笔者将会把MySQL数据库的知识完结&#xff0c;再者笔者会浅写一下sql注入的内容。在后面笔者会逐渐的将网安世界徐徐展开。 php与mysql联动 编程接口 笔者在前面的文章写了php的内容&#xff0c;现在我…...