InnoDB 存储引擎<七>通用表空间+临时表空间

news2024/11/26 18:53:59

目录

通⽤表空间 - General Tablespace

临时表空间 - Temporary Tablespaces 


通⽤表空间 - General Tablespace

对应磁盘上的文件需要用户手动创建

1.通⽤表空间的作⽤和特性?

 解答问题:

1.作用:可以把数据量比较小且强相关的表,都用一个通用表空间管理起来

2.通⽤表空间是使⽤ C REATE tablespace 语法创建的共享InnoDB表空间
3.通⽤表空间能够存储多个表的数据,与系统表空间类似也是共享表空间;
4.服务器运⾏时会把表空间元数据保存在内存中,在表的数量相同的情况下,通⽤表空间⽐独⽴表空间的数量更少,所以消耗的内存也就更少;
5.数据⽂件可以放置在数据⽬录或数据⽬录之外的其他位置,对于单独管理关键表⾮常有⽤
6.⽀持所有的表格式和⾏格式的相关特性;

2.怎么创建通⽤表空间?

分析过程:

创建通⽤表空间可以使⽤ CREATE TABLESPACE 语法。 

注意: tablespace_name 表空间名区分⼤⼩写
解答问题:
创建通⽤表空间可以使⽤ CREATE TABLESPACE 语法,与创建表类似,语句⾥⽤
TABLESPACE 关键字指明创建的是表空间
衍⽣问题
1. 创建通⽤表空间的⽰例
(1) ⽰例:在 data ⽬录下创建通⽤表空间
# 指定表空间⽂件名
CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
# 或使⽤随机⽂件名
CREATE TABLESPACE `ts1` Engine=InnoDB;

(2)ADD DATAFILE ⼦句在MySQL 8.0.14及以后的版本是可选的,之前是必需的。如果没有指定ADD DATAFILE ⼦句,则⾃动创建⼀个以 UUID 为⽂件名的表空间数据⽂件,通⽤表空间数据⽂件以 .ibd 为扩展名。

# 在数据⽬录中查看通⽤表空间数据⽂件
root@guangchen-vm:/var/lib/mysql# ll *.ibd
# 没有指定ADD DATAFILE⼦句,随机⽣成的通⽤表空间数据⽂件
-rw-r----- 1 mysql mysql 114688 10⽉ 30 10:45 57db20a7-76ce-11ee-82d2-
000c29049ee8.ibd
# 系统⾃带,存放mysql系统表和数据字典表的表空间数据⽂件
-rw-r----- 1 mysql mysql 27262976 10⽉ 30 10:45 mysql.ibd
# 使⽤了ADD DATAFILE⼦句,使⽤指定的通⽤表空间数据⽂件
-rw-r----- 1 mysql mysql 114688 10⽉ 30 10:44 ts1.ibd

 2.创建通⽤表空间时要注意什么?

(1)我们每创建一个数据库,都会在数据目录中生成一个与数据库名相同的子目录,因此为了避免自己在数据目录中创建的子目录与以后要创建的数据库重名,所以不允许把通用表空间创建在数据目录下的子目录中

(2)可以在数据⽬录中创建通⽤表空间,也可以在数据⽬录之外创建通⽤表空间。为避免与隐式创建的独⽴表⽂件表空间冲突,不⽀持在data⽬录的⼦⽬录中创建通⽤表空间。当在数据⽬录之外创建通⽤表空间时,该⽬录必须存在,并且必须在创建表空间之前让InnoDB识别,要使⽤⾃定义的⽬录可以通过系统 innodb_directories 指定。 Innodb_directories 是⼀个只读启动选项,配置后需要重新启动服务器。

(3)Innodb_directories 默认值是 NULL ,同时 innodb_data_home_dir ,
innodb_undo_directory datadir 定义的⽬录会被附加到 innodb_directories
数值中,在InnoDB启动时会⾃动被识别(包括⼦⽬录),⼿动指定⽬录的⽅式,如下所⽰:
# 通过启动选项指定,多个⽬录⽤分号隔开
mysqld --innodb-directories="directory_path_1;directory_path_2"

# 通过选项⽂件指定,多个⽬录⽤分号隔开
[mysqld]
innodb_directories="directory_path_1;directory_path_2"

 (4)⽰例:不能在数据⽬录的⼦⽬录下创建通⽤表空间

# 在数据⽬录下创建⼦⽬录
root@guangchen-vm:/var/lib/mysql# mkdir my_tablespace
root@guangchen-vm:/var/lib/mysql# ll
total 92892
# ... 省略
drwxr-xr-x 2 root root 4096 10⽉ 30 10:59 my_tablespace/
# ... 省略

CREATE TABLESPACE `ts3` ADD DATAFILE './my_tablespace/ts3.ibd' Engine=InnoDB;
# 提⽰错误,因为⼦⽬录名有可能和数据库名重名
ERROR 3121 (HY000): The DATAFILE location cannot be under the datadir.

 InnoDB不是默认存储引擎的情况下,必须指定 ENGINE = InnoDB ⼦句

3.如何向通⽤表空间中添加表?

前置知识:
通⽤表空间能够存储多个表的数据
分析过程
⽰例:向通⽤表空间中添加表,在创建表时使⽤ TABLESPACE ⼦句指定通⽤表空间即可
# 在ts1表空间中添加t1表
CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1;
Query OK, 0 rows affected (0.00 sec)

# 在ts1表空间中添加t2表
CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1;
Query OK, 0 rows affected (0.02 sec)

# 把t1表移动到ts1表空间
ALTER TABLE t1 TABLESPACE ts1;

 解答问题:

⾸先创建通⽤表空间,之后使⽤ CREATE 语句创建表时通过 TABLESPACE ⼦句指定通⽤表空间,语句执⾏成功后即在指定的通⽤表空间下创建了表

4.怎么删除通⽤表空间?

分析过程:

(1)DROP TABLESPACE 语句⽤于删除⼀个InnoDB通⽤表空间,在删除通⽤表空间之前,必须将所有表从表空间中删除,如果表空间不为空,将返回错误。
查询通⽤表空间中的表,可以使⽤下⾯的语句:
SELECT a.NAME AS space_name, b.NAME AS table_name FROM
INFORMATION_SCHEMA.INNODB_TABLESPACES a, INFORMATION_SCHEMA.INNODB_TABLES b WHERE a.SPACE=b.SPACE AND a.NAME LIKE 'ts1';
+------------+------------+
| space_name | table_name |
+------------+------------+
| ts1 | test_db/t2 |
| ts1 | test_db/t3 |
| ts1 | test_db/t1 |
+------------+------------+
3 rows in set (0.02 sec)

 (2)⽰例:⼀个完整的通⽤表空间删除流程

# 创建通⽤表空间ts1
CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

# 在通⽤表空间中创建t1表
CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 Engine=InnoDB;

# 删除t1表
DROP TABLE t1;

# 删除通⽤表空间ts1
DROP TABLESPACE ts1;

 解答问题:

可以使⽤ DROP TABLESPACE 语句⽤于删除⼀个通⽤表空间,与删除表类似,语句⾥⽤
TABLESPACE 关键字指明删除的是表空间
衍⽣问题
1. 使⽤通⽤表空间时要注意什么?
(1)使⽤ TRUNCATE DROP 语句截断或删除表时,通⽤表空间的空闲容量并不会释放,并且只能⽤于新的InnoDB表;
(2)通⽤表空间不属于任何数据库,使⽤ DROP DATABASE 操作数据库和属于该数据库所有的表时,并不会删除通⽤表空间。
(3)tablespace_name 表空间名区分⼤⼩写

临时表空间 - Temporary Tablespaces 

1.什么是临时表?

解答问题:
临时表存储的是临时数据,不能永久的存储数据,⼀般在复杂的查询或计算过程中⽤来存储过渡的中间结果,MySQL在执⾏查询与计算的过程中会⾃动⽣成临时表,⽐如表连接查询时得到的结果集就是⼀张临时表,因为结果中可能包含多个表中的字段并没有⼀张真实的表与之完全对应

衍⽣问题:
1.除了系统⾃动创建的临时表,可以⼿动创建临时表吗?
(1)⽤⼾可以通过使⽤ CREATE TEMPORARY TABLE 语句⼿动创建临时表
(2)⽤⼾创建的临时表也称为外部临时表;MySQL在执⾏查询与计算的过程中⾃动⽣成的临时表称为内部临时表。

2.什么是外部临时表?

分析过程:

(1) 使⽤ CREATE TEMPORARY TABLE 语句创建的临时表是外部临时表

# 创建⼀个名称为t1的临时表
CREATE TEMPORARY TABLE t1 (c1 INT PRIMARY KEY) ENGINE=INNODB;

 (2)通过 INNODB_TEMP_TABLE_INFO 查询临时表元数据。

SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO\G
*************************** 1. row ***************************
 TABLE_ID: 194 # 临时表的表ID
 NAME: #sql7a79_1_0 # 临时表的名称
 N_COLS: 4 # 临时表中的列数(包含3个默认隐藏列)
 SPACE: 182 # 临时表所在的临时表空间ID

(3)TEMPORARY 表只在当前会话中可⻅,并且在会话关闭时⾃动删除。这意味着两个不同的会话可以使⽤相同的临时表名,⽽不会相互冲突,临时表也不会与已有的⾮临时表名冲突,如果创建了与现有表同名的临时表,则现有表被隐藏,直到临时表被删除。

(4)重启MySQL服务器后,再次查询临时表信息,得到空集合
SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO\G
Empty set (0.00 sec)

解答问题:
使⽤ CREATE TEMPORARY TABLE 语句创建的临时表是外部临时表,表只在当前会话中可⻅,并且在会话关闭时⾃动删除

3.什么是内部临时表?

分析过程:

1.由服务器⾃动创建的临时表是内部临时表
2.服务器在以下情况会⾃动创建临时表,这个过程⽤⼾不能直接控制:

 (1)使⽤ UNION 语句合并查询结果

 (2)对视图时的⼀些操作,⽐如使⽤ UNION 或聚合函数
 (3)使⽤⼦查询
 (4)使⽤ DISTINCT ORDER BY 的查询可能需要⼀个临时表
 (5)使⽤ INSERT…SELECT 语句向表中写⼊数据时,需要先⽤⼀个内部临时表来保存   (6) SELECT 语句查询出来的⾏,然后将这些⾏插⼊到⽬标表中
 (7)使⽤ COUNT(DISTINCT) GROUP_CONCAT() 表达式时
 (8)使⽤窗⼝函数时
解答问题
由服务器⾃动创建的临时表是内部临时表,通常MySQL在执⾏查询与计算的过程中会⾃动⽣成的内部临时表
衍⽣问题
要确定SQL语句是否需要临时表,使⽤ EXPLAIN 并检查 Extra

4.临时表都有哪些设置?

分析过程
1.系统变量 internal_tmp_mem_storage_engine ⽤于指定内存中内部临时表的存储引擎,值
TempTable (默认值)或 MEMORY
2.TempTable 存储引擎为 VARCHAR VARBINARY 列以及其他⼆进制⼤对象类型进⾏了优化;
3. 从MySQL 8.0.28开始 tmp_table_size 定义了由 TempTable 存储引擎创建的单个内部临时表 允许使⽤内存的最⼤值,当达到 tmp_table_size 限制时,MySQL⾃动将内存中的内部临时表 转换为磁盘上的InnoDB内部临时表。 tmp_table_size 的默认值是 16MB
4.系统变量 temptable_max_ram 定义 TempTable 存储引擎创建的所有临时表可以使⽤的最⼤内存,默认为 1GB ,超出限制后将内存中的内部临时表转换为磁盘上内部临时表;
5.当内存临时表使⽤内存存储引擎 internal_tmp_mem_storage_engine=MEMORY 时,系统
变量 max_heap_table_size 可以限制内存内部临时表的最⼤⾏数,默认 16777216
6.内存存储引擎临时表变得太⼤,MySQL会⾃动将其转换为磁盘上的临时表,内存中临时表的⼤⼩由 tmp_table_size max_heap_table_size 这两个系统变量中最⼩的值决定。
解答问题
通过配置对应的系统变量来指定临时表使⽤的存储引擎、使⽤内存的⼤⼩、表中的最⼤⾏数等选项。

5.临时表中的数据存在哪⾥?

分析过程:

磁盘上的临时表数据存储在临时表空间中,MySQL8.0版本中磁盘上的临时表存储引擎⽀持
InnoDB ,分为两种类型分别是:
    会话临时表空间( session temporary tablespaces )
    全局临时表空间( global temporary tablespace )。

 1.会话临时表空间的作⽤?

磁盘上的会话临时表空间存储由⽤⼾创建的外部临时表和优化器创建的内部临时表;
2.会话临时表空间的数据存在哪⾥?
(1)当MySQL接收到第⼀个创建磁盘临时表的请求时,从临时表空间池中分配会话临时表空间;⼀个会话最多分配两个表空间,⼀个⽤于⽤⼾创建的临时表,另⼀个⽤于优化器创建的内部临时表。会话的临时表空间⽤于存储会话创建的所有磁盘临时表,当会话断开连接时,临时表空间将被截断并释放回池中;
(2)服务器启动时会创建⼀个包含 10 个临时表空间的临时表空间池,表空间会根据需要⾃动添加到池中,临时表空间池在MySQL正常关闭或中⽌初始化时被删除;
(3)会话临时表空间⽂件扩展名为 .ibt
(4)系统变量 innodb_temp_tablespaces_dir 可以指定会话临时表空间的位置。默认数据⽬录
下的 #innodb_temp ⽬录(开头的 # 号是为了避免与数据库⽬录命名冲突),如果⽆法创建临时表空间池,服务器则拒绝启动;指定自定义路径时,需要注意目标路径的权限
# 数据⽬录下的临时表空间⽬录
root@guangchen-vm:/# cd /var/lib/mysql/#innodb_temp 
root@guangchen-vm:/var/lib/mysql# ls
# ⾃动创建的临时表空间
temp_10.ibt temp_2.ibt temp_4.ibt temp_6.ibt temp_8.ibt
temp_1.ibt temp_3.ibt temp_5.ibt temp_7.ibt temp_9.ibt

3.全局临时表空间的作⽤?

全局临时表空间存储对⽤⼾创建的临时表所做的更改,以便以后回滚操作

4. 全局临时表空间的数据存在哪⾥?

(1)系统变量 innodb_temp_data_file_path 指定了全局临时表空间数据⽂件的相对路径、名

称、⼤⼩和属性。如果没有指定,则默认在系统表空间⽬录(系统变量
innodb_data_home_dir 指定的⽬录)中创建,默认名为 ibtmp1 ,初始⽂件⼤⼩略⼤于 12MB 
# 数据⽬录
root@guangchen-vm:/var/lib/mysql# ll
total 92932
# ... 省略
-rw-r----- 1 mysql mysql 12582912 10⽉ 30 12:08 ibtmp1 # 全局临时表空间
# ... 省略

 (2)全局临时表空间在正常关闭或中⽌初始化时被删除,并在每次启动服务器时重新创建,如果⽆法创建全局临时表空间,则拒绝启动;如果服务器意外停⽌,重启服务器时会⾃动删除并重新创建全局临时表空间。

解答问题

磁盘上的临时表数据存储在临时表空间中,临时表空间分为两种分别是:
1.会话临时表空间( session temporary tablespaces ),默认数据⽬录下的
#innodb_temp ⽬录中
2.全局临时表空间( global temporary tablespace ),默认在数据⽬录下中创建,名为
ibtmp1

6.怎么查看全局临时表空间的信息和⼤⼩? 

 分析过程:

1.可以通过 INFORMATION_SCHEMA.FILES 查看全局临时表空间的元数据:
SELECT * FROM INFORMATION_SCHEMA.FILES WHERE
TABLESPACE_NAME='innodb_temporary'\G
*************************** 1. row ***************************
 FILE_ID: 4294967293
 FILE_NAME: ./ibtmp1
 FILE_TYPE: TEMPORARY
 TABLESPACE_NAME: innodb_temporary
# ... 省略

 2.要检查全局临时表空间数据⽂件的⼤⼩,可以查询 INFORMATION_SCHEMA.FILES 中的具体字段

mysql> SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, INITIAL_SIZE, 
TOTAL_EXTENTS*EXTENT_SIZE AS TotalSizeBytes, DATA_FREE, MAXIMUM_SIZE FROM
INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME = 'innodb_temporary'\G
*************************** 1. row ***************************
 FILE_NAME: ./ibtmp1 # 全局表空间数据⽂件名
TABLESPACE_NAME: innodb_temporary # 全局表空间名
 ENGINE: InnoDB # 存储引擎
 INITIAL_SIZE: 12582912 # 初始化的⼤⼩
 TotalSizeBytes: 12582912 
 DATA_FREE: 6291456 # 可⽤容量
 MAXIMUM_SIZE: NULL # 最⼤允许扩容的容量
1 row in set (0.00 sec)

3.默认情况下,全局临时表空间数据⽂件会⾃动扩展并根据需要增加⼤⼩,要确定全局临时表空间数据⽂件是否⾃动扩展,可以检查 innodb_temp_data_file_path 变更设置:

mysql> SELECT @@innodb_temp_data_file_path;
+------------------------------+
| @@innodb_temp_data_file_path |
+------------------------------+
| ibtmp1:12M:autoextend |
+------------------------------+
1 row in set (0.00 sec)

 衍⽣问题

1.全局临时表空间数据⽂件的⼤⼩可以设置吗?

可以通过系统变量 innodb_temp_data_file_path 指定最⼤⽂件⼤⼩,并重新启动服务器,
语法与配置系统表空间⽂件相同
# mysqld节点
2 [mysqld]
3 innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:500M

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

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

相关文章

linux 通过apt安装软件包时出现依赖包版本不对的问题解决

通过网上查找解决办法时,发现的解决办法无法完美解决问题: 比如通过安装对应版本解决 如: sudo apt-get install xxx2.7.0ubuntu 这样会先卸载原先包,在安装对应版本的包 或者直接删除依赖的包 sudo apt-get purge xxxx 如果碰到底层包的话&#xf…

用示例来看C2Rust工具的使用和功能介绍

C2Rust可以将C语言的源代码转换成Rust语言的源代码。下面是一个简单的C语言代码示例,以及使用c2Rust工具将其转换为Rust安全代码的过程。 C语言源代码示例 // example.c #include <stdio.h>int add(int a, int b)

提升电机控制的关键:东芝TB6605FTG深度解析

在电机控制领域&#xff0c;对高效、精确且可靠的组件的需求是不可忽视的。东芝的TB6605FTG正是一款具备这些特性的电机驱动IC&#xff0c;是工程师们在设计电机控制系统时的理想选择。 主要特性与规格 TB6605FTG的核心是一个三相全波电机驱动IC&#xff0c;专为无刷直流电机控…

动态规划理论基础和习题【力扣】【算法学习day.25】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

【K8S系列】K8S 集群 CPU 爆满导致 Pod Pending 状态的分析与解决方案

在 Kubernetes 集群中&#xff0c;CPU 突然爆满可能导致 Pod 状态变为 Pending&#xff0c;影响应用的可用性。本文将深入分析其原因&#xff0c;并附上相关命令及其执行结果&#xff0c;帮助你更好地理解和解决此问题。 1. 问题描述 在 Kubernetes 集群中&#xff0c;当 CPU …

开源代码管理平台Gitlab如何本地化部署并实现公网环境远程访问私有仓库

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 本文主要介绍如何在Linux CentOS8 中搭建GitLab私有仓库并且结合内网穿透工具实现在公网…

Linux磁盘存储

磁盘存储 设备文件 设备文件是类Unix操作系统&#xff08;包括Linux&#xff09;中一种特殊的文件类型&#xff0c;它代表了设备接口&#xff0c;使得用户空间的程序可以通过标准的文件操作来访问和控制硬件设备。设备文件为周边设备提供了简单的接口&#xff0c;如打印机、硬…

《重学Java设计模式》之 原型模式

原型模式主要解决的问题就是创建重复对象&#xff0c;而这部分对象内容本身比较复杂&#xff0c;生成过程可能从库或者RPC接口中获取数据的耗时较长&#xff0c;因此采用克隆的方式节省时间。 案例&#xff1a;上机考试抽题&#xff0c;要求打乱题目、答案数据 工厂结构 选择题…

C++【string类,模拟实现string类】

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 为什么学习string类 C语言中的字符串 标准库中的string类 auto和范围for auto关键字 迭代器 范围for string类的常用接口说明和使用 1. string类对象的常见构造 2.string类对象的容量操作 3…

《计算机网络》课后探研题书面报告_了解网络设备

引言 计算机网络自20世纪60年代首次提出以来&#xff0c;已经发展成为现代社会不可或缺的基础设施。最早的计算机网络仅用于连接少数设备&#xff0c;用于简单的数据传递与共享。随着互联网技术的迅速普及和计算机技术的飞跃发展&#xff0c;网络的规模和复杂性不断增加&#…

怎么搭建小程序商城

我是【码云数智】平台的黄导&#xff0c;今天分享&#xff1a;怎么搭建小程序商城 商城小程序怎么开通&#xff0c;通过微商城将线上线下渠道打通&#xff0c;消费者既可以在线上微商城随时随地浏览商品、下单购买&#xff0c;也可以选择到门店进行线下体验和购买。 01、小程…

git原理与上传

言&#xff1a; git是一个软件&#xff0c;gitee/github是一个网站&#xff0c;这里有什么联系吗&#xff1f;我们身为一个程序员不可能不知道github&#xff0c;但是毕竟这是外国的网站&#xff0c;我们不翻墙的情况下&#xff0c;是无法访问的(或者就是太慢了&#xff0c;或…

3DMax使用 MCG实现简单克隆修改器

3DMax中的MCG工具集允许用户创建几种不同类型的插件。在这个例子中&#xff0c;我们正在创建一个简单的克隆修改器。 将修改器添加到对象时&#xff0c;将使用“数量”整数值克隆网格n次&#xff0c;并使用X、Y和Z中的“缩放”、“旋转”和“移动”微调器控制每个网格的偏移。…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第二个BOSS燥郁的毛里克

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作游戏第二个BOSS燥郁的毛里克 1.导入素材和制作相关动画1.5处理玩家受到战吼相关行为逻辑处理2.制作相应的行为控制和生命系统管理3.制作战斗场景和战斗…

springboot-整合多数据源配置

简介 主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。 一、表结构 在本地新建两个数据库,名称分别为db1和db2,新建一张user表,表结构如下: SQL代码: CREATE TABLE `user` (`id` int(11) NOT …

LeetCode 热题100 之 回溯1

1.全排列 思路分析1&#xff08;回溯&#xff09;&#xff1a;要生成一个不含重复数字的数组 nums 的所有可能全排列&#xff0c;我们可以使用回溯算法。这种算法通过递归的方法探索所有可能的排列组合&#xff0c;并在合适的时机进行回溯&#xff0c;确保不会遗漏任何排列。回…

笔记整理—linux驱动开发部分(4)驱动框架

内核中&#xff0c;针对每种驱动都设计了一套成熟的、标准的、典型的驱动框架&#xff0c;实现将相同部分实现&#xff0c;不同部分留出接口给工程师自行发挥。具有以下特点&#xff1a;①简单化&#xff1b;②标准化&#xff1b;③统一管控系统资源&#xff1b;④特定化接口函…

靠谷歌广告赚了100美刀,程序员可以照这个思路去干

复制网站盈利尝试&#xff1a;谷歌广告收入之路的挑战与反思 背景介绍 在互联网的浩瀚海洋中&#xff0c;网站复制现象屡见不鲜。近期&#xff0c;我尝试复制了一个名为网站B的核心代码&#xff0c;并成功发布了自己的网站。通过谷歌搜索引擎的优化&#xff08;SEO&#xff0…

Windows 10/11 设置锁屏密码的方法以及设置PIN密码

Windows 10/11 设置锁屏密码的方法 一、打开设置&#xff1a; 按 Win I 快捷键打开“设置”。 二、进入账户设置&#xff1a; 在设置窗口中点击“账户”。 三、选择登录选项&#xff1a; 在左侧菜单中选择“登录选项”。 四、添加密码&#xff1a; …

Python并发编程库:Asyncio的异步编程实战

Python并发编程库&#xff1a;Asyncio的异步编程实战 在现代应用中&#xff0c;并发和高效的I/O处理是影响系统性能的关键因素之一。Python的asyncio库是专为异步编程设计的模块&#xff0c;提供了一种更加高效、易读的并发编程方式&#xff0c;适用于处理大量的I/O密集型任务…