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

Mysql进阶学习

目录

一.Mysql服务器内部架构(了解)

二.Mysql引擎

2.1 innodb引擎

2.2 myisam引擎

三.索引

3.1索引分类

3.2mysql索引数据结构

3.3聚簇索引和非聚簇索引

3.4回表查询 

3.5索引下推

四.事务

数据库事务特征

事务隔离性,隔离级别

事务实现原理

 五.锁

①全局锁

②表级锁

③行级锁

六.sql优化


一.Mysql服务器内部架构(了解)

连接层负责客户端的链接,验证账号密码等授权认证。
服务层对sql进行解析,优化,调用函数,如果是查询操作,有没有缓存等操作。
引擎层

是真正负责数据存储和提取的地方,mysql中提供多种引擎进行数据处理,可以根据需要进行选择。

物理文件存储层物理存储表数据,以及各种日志文件的地方。


二.Mysql引擎

mysql中的引擎就是实际对数据操作的一种实施者,不同的引擎的所使用的技术不同。

查询引擎种类sql语句:SHOW ENGINES;

主要讲innodb引擎myisam引擎

2.1 innodb引擎

        是一个综合能力比较强的引擎,支持事务,行级锁,外键约束,全文索引,支持数据缓存等功能。

        支持主键自增,不存储表的总行数(统计表的总行数,innodb中默认不存储,需要自己查询)。

适合增删改较多,且数据重要的场景。

2.2 myisam引擎

        不支持事务,只支持表锁,增,删,改操作时会锁定整个表效率低,适合查询较多的情况,支持全文索引,存储表的总行数。


三.索引

什么是索引?

数据库索引是为了实现高效数据查询的一种排好序的数据结构

索引类似于书的目录,通过目录可以快速的定位到想要找到的数据。

因为一张表中的数据会有很多,如果直接去表中检索数据会效率低(逐行查找),所以需要为表中的数据建立索引(一般主键默认会创建索引),这样就会提高查询效率。

索引优势

        通过索引可以快速定位到数据,降低IO次数,提高效率。排序列添加索引,也可以提高排序的效率(因为索引是有序的)

索引劣势

        索引保存也是需要占用空间的。增删改数据时,数据发生变化,索引也需要随之变动,也是需要开销的。

索引创建原则

哪些场景适合

①主键自动创建索引

②查询条件列

③多使用组合索引(多个列用一个索引),减少单值索引

④建议排序和分组使用到的列

⑤对数据量大的表

哪些场景不适合

①表中数据比较少(类型表,菜单表,友情链接,系统信息表)

②查询条件中用不到的列

增删改频率高的表

④重复率高的列(性别:男,女)

3.1索引分类

①主键索引

创建表时,设置哪个列为primary key 就是主键列,主键列默认会自动创建索引。

create table test1(id int  primary key auto_increment,  -- 创建表时直接设置主键account varchar(20) unique    -- 设置唯一约束,  会添加唯一索引
)create table test2(id int
)ALTER TABLE test2 add PRIMARY KEY test2(id);    -- 后来修改表结构,设置主键
ALTER TABLE test2 drop PRIMARY KEY ;     -- 删除主键

②唯一索引

设置某个列数据唯一性,会创建唯一索引。

create table test1(id int primary key auto_increment,  -- 创建表时直接设置主键account varchar(20) unique    -- 设置唯一约束,  会添加唯一索引
)--test2表
CREATE UNIQUE INDEX index_unique_account ON test2(account);  -- 创建表时未添加索引,后面修改表添加唯一索引

③单值索引

一个索引中,只包含一个列。

--对单列添加单一索引
--index_test1_name:索引名
create index index_test1_name on test1(name)  ​
drop index index_test1_name on test1  -- 删除索引sql

④组合索引(复合索引)

一个索引中包含多个列,节省了索引开支。

--给两个列添加组合索引
create index index_test1_name_age on test1(name,age)

!注意: 满足组合索引最左前缀原则

在使用组合索引时, 条件中必须要用到最左侧的列,否则索引失效

例如 a,b,c 3个列,a 和 b 创建组合索引

create index index_test1_a_b on test1(a,b)

由于a在b的左侧,故只有使用a作为查询条件时,索引才会生效。

where a = 1 and b = 2 索引生效

where b = 2 and a= 1 索引生效

where a = 1 and c = 2 索引生效

where b = 1 and c = 2 索引不生效

在查询sql语句前使用explain可查看sql执行计划

explain select * from test3 where b=2 and c=3   --查看sql执行计划

⑤前缀索引

有些列长度比较大,需要只给前面指定的长度区间添加索引即可。

create index 索引名 on 表名(列名(长度))--给test表的title列的前5个字符创建索引名为index_test_title的索引
例:create index index_test_title on test(title(5))

⑥全文索引

模糊查询时,即使列有索引,也会导致索引失效。

可以为列添加全文索引

-- 在test 表的 title 列上创建一个全文索引-- ngram:解析器
CREATE FULLTEXT INDEX index_test_title ON test(title) WITH PARSER ngram;explain SELECT * FROM test WHERE MATCH(title) AGAINST('中国')

3.2mysql索引数据结构

        由于二叉树和平衡二叉树一个节点只能存储一个元素,再加上mysql使用自增主键,导致不适合使用二叉树或平衡二叉树。所以mysql底层使用的是B+树

原因:

①一个节点中可以存储多个索引数据。

②表数据都存储在叶子节点,非叶子节点不存储表数据,只存索引,这样一个节点就可以存储更多的索引。

③叶子节点之间还有指针指向,所以非常适合范围查询

3.3聚簇索引和非聚簇索引

        聚簇索引:数据表的数据会按照聚簇索引的顺序存储。每个表只能有一个聚簇索引,因为数据只能按一种顺序存储。

innodb引擎中主键索引,就是聚簇索引,主键和数据在一个树上。

        非聚簇索引数据表的数据顺序和索引顺序无关,索引是单独存储的,里面存的是索引值和指向数据的地址

        myisam引擎中,由于索引和数据分别在两个不同的文件中存储,找到了索引,还需要重新查找一次才能找到数据,这种称为非聚簇索引。

innodb引擎中,像普通的索引也称为二级索引,他们也是非聚簇索引。

        例如姓名,通过名字查找人的所有信息时,在姓名索引树中找到后,还需要在主键索引树再次进行查找,最终在主键索引树中找到数据,这种称为非聚簇索引。

3.4回表查询

回表查询指的是查询时的次数。

例如:学生有id,学号,姓名三个信息,设定id是主键,学号添加唯一索引。

select * from student where id = 1

        ① 通过id(主键)查询学生所有的信息, 这时只需要查询一次即可。

select * from student where 学号 = 12

        ②通过学号查询学生所有信息,由于学号是普通索引,先通过学号,在学号索引树上找学号,然后再通过id去回表二次查询主键索引树,查询两次, 称为回表查询了。

select 学号 from student where 学号 = 12 

        ③通过学号查询学号自己(判断学号是否存在),由于使用学号只查询学号本身,并不查询其他数据,这种情况下,可以在学号索引树上直接找到学号数据,这种情况不需要回表查询了。

 

3.5索引下推

        mysql5.6版本引入的一项查询优化技术,将条件筛选过程下推到索引树上

        以前没有索引下推,先找具体的数据,然后再对数据进行条件过滤,查询的数据范围就比较大。

        使用索引下推,直接在索引树上进行条件筛选,筛选出符合条件的记录,然后只将满足条件的记录进行回表查询,减少了回表查询的次数。适用的是非主键索引

索引扫描(找索引) - - > 索引条件过滤(过滤索引) - - > 回表操作(查询数据) - - > 剩余条件过滤(查其他数据)

--建立索引
create index index_name on employee(name)-- 使用索引下推
select * from employee where name like "张%" and salary >3000


四.事务

什么是数据库事务?

首先数据库事务是数据库对执行操作的一种管理机制。

数据库事务特征

原子性一次执行的多条sql,是一个不可分割的单元,多条sql要么都执行,要么都不执行,这是事务最基本的特征。
持久性保证事务提交后,数据在数据库是持久保存的,即使操作时,出现宕机。
隔离性

mysql是运行多个并发事务同时对数据进行读和写操作的,这时可以采用不同的隔离级别进行控制。

隔离级别: 读 未提交,读 已提交,可重复读 ,串行化 一次只允许一个事物操作

一致性

数据库事务终极目标,在我们对数据库多次操作的过程中,最终要保证数据和我们预期的结果是一致的。

转账案例:多次对同一个账号的金额进行操作,最终结果不能出现错误的。

MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT 来实现
BEGIN:开始一个事务
ROLLBACK:事务回滚
COMMIT:事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET GLOBAL (全局)/ SESSION(本次会话) autocommit=0;    --禁止自动提交
SET GLOBAL / SESSION autocommit=1;     --开启自动提交

查看 autocommit 模式

SHOW GLOBAL / SESSION VARIABLES LIKE 'autocommit';

事务隔离性,隔离级别

提供4种隔离级别(读未提交,读已提交,可重复读,串行化,安全级别递增,并发性递减)

        读 未提交 : 一个事务可以读到另一个事务还未提交的数据。虽然并发性是最高的,但也是最不安全的。

        问题: 会出现脏读,不可重复读,幻读问题

        ※ 脏读: A 事物修改了数据,还没提交,这时被B事务读到了,但是A事务有可能出错回滚了,

这种情况下,B事务读到的数据就是垃圾数据。

        读 已提交: 一个事务只能读到另一个事务已提交的数据,能够解决脏读问题,但是没有解决不可重复读和幻读问题。

        不可重复读问题: A事务开启并修改了一个数据,但是并未提交,B事务这时读取到的是未提交的数据,当 A 事务提交事务的时候,B 事务第二次查询的结果与第一次查询的结果不一致,这就是不可重复读。(读取同一个id的数据两次,两次读到的数据不一致)。

        可 重复读:同一个事物读取多次相同数据,多次读取返回的结果是一致的

        可 重复读 解决了 不可重复读问题。

        普通的查询解决了幻读问题,如果在查询语句后面添加了 for update,就会出现幻读问题。

        幻读问题同一个事务中,多次读取数据,读到行数不同。

        mysql中默认隔离级别是可 重复读。 

        串行化相当于加锁了,解决以上所有的问题,当一个事务操作时,其他事务必须等待,即使执行的是查询操作。

事务实现原理

        持久性实现使用到redo log日志文件(重做日志) 保证已提交事务的数据持久保存。

        当事务提交后,先用redo log日志文件进行存储,因为在此过程中,有可能宕机,如果此时宕机,确保操作数据存储记录下来(日志文件中),这样在服务恢复时,可以继续将日志文件中的数据,写入到物理硬盘上。

        原子性实现: 使用到undo log 日志文件(回滚日志),当我们执行一个insert语句时,在undo log 日志文件中记录一个delete语句,执行delete语句,在日志文件中记录insert语句,记录一个操作的反向操作,当事务回滚时,执行undo log 日志中的反向操作。

        隔离性实现:提到了MVCC机制(多版本并发控制),每次事务对数据操作时,都会记录一个历史记录(记录事务id,还会记录上一次操作事务id)。

        还提到了一个readView(读视图),当隔离级别为 读 已提交时:在一个事物中,每次读时,都会从历史版本记录中,获取一个最新的快照,这样,就会导致每次读到的是最新的数据,也就会出现不可重复读问题

        当隔离级别为 可 重复读时,在第一次读时,会获取一个快照,之后再次读取时,还是从第一次生成的快照中读数据。所以,两次读到数据是一样的,解决了不可重复读。

        一致性实现以上是三个都满足,既可实现一致性。


 五.锁

        mysql中读写不互斥(前提是没有使用串行化隔离级别),但是写写操作是互斥的,mysql中使用锁机制来实现写写互斥。

按照锁的粒度分为:

①全局锁

 锁定整个数据库,只允许读操作

一般在备份数据库时使用

FLUSH TABLES WITH READ LOCK  --添加全局锁UNLOCK TABLES;  -- 释放全局锁

备份数据库语句 :(再cmd命令窗口里执行)

mysqldump --single-transaction -uroot -proot 库名> E:/文件名.sql

②表级锁

给整个加锁

myisam引擎只支持表锁,innodb默认支持行锁

③行级锁

加锁的粒度以为单位。

行级锁又可以分为:

行锁: 只锁定操作的那一行数据,使用的主键作为条件(防止同一行数据被多个事务修改或删除)。

间隙锁: 锁定的是一个范围 。如: id>2 and id <6,表里的id有(1,2,4,5,10),那么当开启事务时,id范围(2,4)和id范围(5,10)的数据是不能插入的。因为你的数据库表里根本就没有6这个id数据,只能通过下一个索引的顺序(10)进行加锁。索引的顺序 加锁,而不是按查询条件加锁。     (防止幻读)

临键锁: 是行锁和间隙锁的组合(为了防止幻读并防止数据冲突)。

行锁又分为:

①共享锁:

        主要是为查询语句添加的,为查询语句如果添加了共享锁,那么其他事务可以读,但是其他事务不能写的(指定的是同一条记录)。(其他事务可读不可写)

select * from employees where id = 1 lock in share mode; --为查询语句添加共享锁

读锁,允许多个事务读,不允许读写同时进行。

②排他锁: 就是互斥锁,当一个事务操作时,其他事务就不能进行加共享锁和排他锁操作。

👉其他事务无论是共享锁还是排他锁,排他锁都会阻止任何其他类型的锁。

        insert ,update,delete操作时,自动会添加排他锁。

👉查询操作如果需要添加排他锁,可以在查询语句后面添加 for update 语句

select * from employees where id = 1 for update  --为查询语句添加排他锁

 


六.sql优化

1.查询 SQL 尽量不要使用 select *,而是具体字段。
2 尽量使用数值替代字符串类型。
3. 使用 varchar 代替 char。
4. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by,group by 涉及的列上建立索引。
5. 应尽量避免索引失效。
6. 提高 group by 语句的效率。
反例:先分组,再过滤
正例:先过滤,后分组
7. 清空表时优先使用 truncate
truncate是以表为单位删除表的所有数据 ,且使用的系统和事务日志资源少。
delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
8. 表连接不宜太多,索引不宜太多,一般 5 个以内。
9. 深度分页问题
反例
select id,name from account limit 100000,10;
正例
select id,name FROM account where id > 100000 order by id limit 10;

10. 使用 explain 分析 SQL 执行计划

重点关注:possible_keys(显示可能应用在这张表中的索引,一个或多个),key(实际使用的索引。如果为 NULL,则没有使用索引,或者索引失效)

 感谢你的阅读与关注,如有问题欢迎探讨!💓

相关文章:

Mysql进阶学习

目录 一.Mysql服务器内部架构(了解) 二.Mysql引擎 2.1 innodb引擎 2.2 myisam引擎 三.索引 3.1索引分类 3.2mysql索引数据结构 3.3聚簇索引和非聚簇索引 3.4回表查询 3.5索引下推 四.事务 数据库事务特征 事务隔离性&#xff0c;隔离级别 事务实现原理 五.锁 ①…...

白话DeepSeek-R1论文(二)| DeepSeek-R1:AI “升级打怪”,从“自学成才”到“全面发展”!

最近有不少朋友来询问Deepseek的核心技术&#xff0c;今天开始陆续针对DeepSeek-R1论文中的核心内容进行解读&#xff0c;并且用大家都能听懂的方式来解读。这是第二篇趣味解读。 DeepSeek-R1&#xff1a;AI “升级打怪”&#xff0c;从“自学成才”到“全面发展”&#xff01…...

WordPress eventon-lite插件存在未授权信息泄露漏洞(CVE-2024-0235)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

python 语音识别

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…...

2501,编写dll

DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…...

Linux命令汇总

1、帮忙类 --help 直接在当前窗口显示帮助 command --help man 创建新窗口显示帮助 man command 2、目录操作类 2.1、查看目录 ls:以列表方式&#xff0c;查看目录中内容 tree:以树状方式&#xff0c;查看目录中内容 2.2、创建、删除文件及目录 touch&#xff1a;创建…...

漏洞扫描工具之xray

下载地址&#xff1a;https://github.com/chaitin/xray/releases 1.9.11 使用文档&#xff1a;https://docs.xray.cool/tools/xray/Scanning 与burpsuite联动&#xff1a; https://xz.aliyun.com/news/7563 参考&#xff1a;https://blog.csdn.net/lza20001103/article/details…...

Java手写简单Merkle树

Java手写Merkle树代码 package com.blockchain.qgy.component;import com.blockchain.qgy.model.MerkleTreeNode; import com.blockchain.qgy.util.SHAUtil;import java.util.*;public class MerkleTree<T> {//merkle树private List<MerkleTreeNode<T>> lis…...

vue之pinia组件的使用

1、搭建pinia环境 cnpm i pinia #安装pinia的组件 cnpm i nanoid #唯一id&#xff0c;相当于uuid cnpm install axios #网络请求组件 2、存储读取数据 存储数据 >> Count.ts文件import {defineStore} from piniaexport const useCountStore defineStore(count,{// a…...

升级到Mac15.1后pod install报错

升级Mac后&#xff0c;Flutter项目里的ios项目运行 pod install报错&#xff0c; 遇到这种问题&#xff0c;不要着急去百度&#xff0c;大概看一下报错信息&#xff0c;每个人遇到的问题都不一样。 别人的解决方法并不一定适合你&#xff1b; 下面是报错信息&#xff1a; #…...

力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)

让石头分成重量相同的两堆&#xff08;尽可能相同&#xff09;&#xff0c;相撞之后剩下的石头就是最小的。进一步转化成容量为重量总喝一半的背包最多可以装多少质量的石头。这样就转化成了背包问题。 最后求结果时&#xff0c;我们所最多能装的时dp[target]&#xff0c;那另一…...

CSS 图像、媒体和表单元素的样式化指南

CSS 图像、媒体和表单元素的样式化指南 1. 替换元素&#xff1a;图像和视频1.1 调整图像大小示例代码&#xff1a;调整图像大小 1.2 使用 object-fit 控制图像显示示例代码&#xff1a;使用 object-fit 2. 布局中的替换元素示例代码&#xff1a;Grid 布局中的图像 3. 表单元素的…...

寒武纪MLU370部署deepseek r1

文章目录 前言一、平台环境准备二、模型下载三、环境安装四、代码修改五、运行效果 前言 DeepSeek-R1拥有卓越的性能&#xff0c;在数学、代码和推理任务上可与OpenAI o1媲美。其采用的大规模强化学习技术&#xff0c;仅需少量标注数据即可显著提升模型性能&#xff0c;为大模…...

Spring的AOP的JoinPoint和ProceedingJoinPoint

Spring的AOP的JoinPoint 在Spring AOP中&#xff0c;JoinPoint 是一个核心接口&#xff0c;用于表示程序执行过程中的一个连接点&#xff08;如方法调用或异常抛出&#xff09;。它提供了访问当前被拦截方法的关键信息的能力。以下是关于 JoinPoint 的详细说明&#xff1a; 一…...

每日一道算法题

题目&#xff1a;单词接龙 II 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典 wordList&#xff0c;找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则&#xff1a; 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的…...

Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

Java小白入门教程:两大类型的修饰符以及示例

目录 一、访问控制修饰符 1、default 就是啥都不写的那种 2、private 私有 3、public 公开 4、protected 受保护的 二、非访问控制修饰符 1、static 静态 2、final 最终 3、abstract 抽象 4、synchronized 锁 5、transient 瞬态 6、volatile 易变 一、访问控制修饰符…...

正则表达式入门

入门 1、提取文章中所有的英文单词 //1&#xff0e;先创建一个Pattern对象&#xff0c;模式对象&#xff0c;可以理解成就是一个正则表达式对象 Pattern pattern Pattern.compile("[a-zA-Z]"); //2&#xff0e;创建一个匹配器对象 //理解:就是 matcher匹配器按照p…...

云原生(五十二) | DataGrip软件使用

文章目录 DataGrip软件使用 一、DataGrip基本使用 二、软件界面介绍 三、附件文件夹到项目中 四、DataGrip设置 五、SQL执行快捷键 DataGrip软件使用 一、DataGrip基本使用 1. 软件界面介绍 2. 附加文件夹到项目中【重要】 3. DataGrip配置 快捷键使用&#xff1a;C…...

如何成为一名 Python 全栈工程师攻略

## 从零基础到全栈工程师&#xff1a;Python 学习路线&#xff08;细化版&#xff09; **目标&#xff1a;** 掌握 Python 编程&#xff0c;并能独立开发全栈应用。 **学习路线&#xff1a;** ### 第一阶段&#xff1a;Python 基础 (4-6 周) **目标&#xff1a;** 掌握 Pyt…...

无需云端服务器: 三步实现DeepSeek大模型本地化部署deepseek、Ollama和Chatbox

&#x1f389;无需云端&#xff01;三步实现DeepSeek大模型本地化部署&#x1f60e; 还在为云端AI服务的高昂费用而苦恼&#xff1f;是否总担心数据隐私会在云端泄露&#xff1f;别愁啦&#xff01;DeepSeek R1——这款与OpenAI o1性能相媲美的开源大模型&#xff0c;结合Olla…...

mysql教程

MySQL 教程 一、简介 MySQL 是一个开源的关系型数据库管理系统&#xff0c;广泛应用于各种规模的项目中。以下是一些基础知识和常用操作。 二、安装与启动 安装&#xff1a;根据操作系统选择合适的安装包进行安装。启动&#xff1a;通过命令行或服务管理工具启动 MySQL 服务…...

【自学笔记】JavaWeb的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 JavaWeb知识点一、基础概念二、项目结构三、Tomcat服务器四、数据库连接&#xff08;JDBC&#xff09;五、前端技术六、高级技术 总结 以下是JavaWeb知识点的MD格式…...

项目升级Sass版本或升级Element Plus版本遇到的问题

项目升级Sass版本或升级Element Plus版本遇到的问题 如果项目有需求需要用到高版本的Element Plus组件&#xff0c;则需要升级相对应的sass版本&#xff0c;Element 文档中有提示&#xff0c;2.8.5及以后得版本&#xff0c;sass最低支持的版本为1.79.0&#xff0c;所升级sass、…...

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题&#xff1a;Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者&#xff1a;Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...

char和varchar的区别、varchar(?)中问号部分的含义、索引的作用

char和varchar的区别 char是固定长度类型&#xff0c;当输入字符不满设定的固定长度时依旧占用固定长度的空间&#xff0c;补充空字节。 最大长度为255个字符 优点&#xff1a;效率高&#xff0c;在涉及索引和排序时缺点&#xff1a;占用空间使用场景&#xff1a;存储密码的…...

.NET9增强OpenAPI规范,不再内置swagger

ASP.NETCore in .NET 9.0 OpenAPI官方文档ASP.NET Core API 应用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…...

qsort应用

每天都会收到ai个礼物&#xff0c;到第n天的时候&#xff0c;然然发现他的宿舍被礼物搞得一团糟&#xff0c;所以然然打算到超市买一个柜子装礼物。但是超市有m个柜子&#xff0c;每个柜子都有不同的容量bi&#xff0c;然然想知道每个柜子最多可以装多少天的礼物&#xff08;可…...

仿真设计|基于51单片机的贪吃蛇游戏

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 利用单片机8*8点阵实现贪吃蛇游戏的控制。 仿真演示视频&#xff1a; 51-基于51单片机的贪吃蛇游…...

Linux内核中的页面错误处理机制与按需分页技术

在现代操作系统中,内存管理是核心功能之一,而页面错误(Page Fault)处理机制是内存管理的重要组成部分。当程序访问一个尚未映射到物理内存的虚拟地址时,CPU会触发页面错误异常,内核需要捕获并处理这种异常,以决定如何响应,例如加载缺失的页面、处理权限错误等。Linux内…...

Baklib推动企业知识管理创新与效率提升的全面探讨

内容概要 在当今数字化转型的背景下&#xff0c;有效的知识管理显得尤为重要。知识是企业的核心资产&#xff0c;而传统的管理方式往往无法充分发挥这些知识的价值。因此&#xff0c;企业亟需一种高效、灵活的解决方案来应对这一挑战。Baklib作为一款先进的企业级知识管理平台…...

NLP自然语言处理通识

目录 ELMO 一、ELMo的核心设计理念 1. 静态词向量的局限性 2. 动态上下文嵌入的核心思想 3. 层次化特征提取 二、ELMo的模型结构与技术逻辑 1. 双向语言模型&#xff08;BiLM&#xff09; 2. 多层LSTM的层次化表示 三、ELMo的运行过程 1. 预训练阶段 2. 下游任务微调 四、ELMo的…...

计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【编译原理实验二】——自动机实验:NFA转DFA并最小化

本篇适用于ZZU的编译原理课程实验二——自动机实验&#xff1a;NFA转DFA并最小化&#xff0c;包含了实验代码和实验报告的内容&#xff0c;读者可根据需要参考完成自己的程序设计。 如果是ZZU的学弟学妹看到这篇&#xff0c;那么恭喜你&#xff0c;你来对地方啦&#xff01; 如…...

Hive:复杂数据类型之Map函数

Map函数 是Hive里面的一种复杂数据类型, 用于存储键值对集合。Map中的键和值可以是基础类型或复合类型&#xff0c;这使得Map在处理需要关联存储信息的数据时非常有用。 定义map时,需声明2个属性: key 和 value , map中是 key value 组成一个元素 key-value, key必须为原始类…...

C++ 中的引用(Reference)

在 C 中&#xff0c;引用&#xff08;Reference&#xff09;是一种特殊的变量类型&#xff0c;它提供了一个已存在变量的别名。引用在很多场景下都非常有用&#xff0c;比如函数参数传递、返回值等。下面将详细介绍 C 引用的相关知识。 1. 引用的基本概念和语法 引用是已存在…...

密码学的数学基础1-整数 素数 和 RSA加密

数学公式推导是密码学的基础, 故开一个新的课题 – 密码学的数学基础系列 素数 / 质数 质数又称素数。 一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则称为合数&#xff08;规定1既不是质数也不是合数&#xff0…...

Java锁自定义实现到aqs的理解

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解锁&#xff0c;能自定义实现锁通过自定义锁的实现复习Thread和Object的相关方法开始尝试理解Aqs, 这样后续基于Aqs的的各种实现将能更好的理解 目录 锁的…...

STM32-时钟树

STM32-时钟树 时钟 时钟...

android 圆形弹窗摄像头开发踩坑——源码————未来之窗跨平台操作

一、飘窗刷脸&#xff0c;拍照采用飘窗 刷脸认证安卓接口采用飘窗具有在不干扰用户主要操作的前提下以醒目方式引导用户完成认证&#xff0c;且能灵活定制样式以提升用户体验和认证效率的优点 二、踩坑只有一个扇形 <?xml version"1.0" encoding"utf-8&quo…...

markdown公式特殊字符

个人学习笔记 根号 在 Markdown 中&#xff0c;要表示根号 3&#xff0c;可以使用 LaTeX 语法来实现。常见的有以下两种方式&#xff1a; 行内公式形式&#xff1a;使用一对美元符号 $ 将内容包裹起来&#xff0c;即 $\sqrt{3}$ &#xff0c;在支持 LaTeX 语法渲染的 Markdow…...

Web-3.0学习路线

方向学习内容✅ 区块链基础区块链、智能合约、共识机制✅ 智能合约Solidity / Rust&#xff08;Ethereum / Solana&#xff09;✅ 前端React.js, Next.js, Web3.js, ethers.js✅ 后端Node.js, Python, Golang&#xff08;链上数据&#xff09;✅ 存储IPFS, Arweave, Filecoin&a…...

【算法设计与分析】实验5:贪心算法—装载及背包问题

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握贪心算法求解问题的思想&#xff1b;针对不同问题&#xff0c;会利用贪心算法进行问题建模、求解以及时间复杂度分析&#x…...

使用 cmake

使用前注意 : CMake是一种跨平台的构建系统&#xff0c;它用于管理软件构建过程&#xff0c;尤其适合多语言、多配置的项目。CMake不直接构建软件&#xff0c;而是生成特定构建工具&#xff08;如Makefile或Visual Studio项目&#xff09;所需的配置文件。 如果仅仅使用 qt 编…...

万物皆有联系:驼鸟和布什

布什&#xff1f;一块布十块钱吗&#xff1f;不是&#xff0c;大家都知道&#xff0c;美国有两个总统&#xff0c;叫老布什和小布什&#xff0c;因为两个布什总统&#xff08;父子俩&#xff09;&#xff0c;大家就这么叫来着&#xff0c;目的是为了好区分。 布什总统的布什&a…...

PHP实现混合加密方式,提高加密的安全性(代码解密)

代码1&#xff1a; <?php // 需要加密的内容 $plaintext 授权服务器拒绝连接;// 1. AES加密部分 $aesKey openssl_random_pseudo_bytes(32); // 生成256位AES密钥 $iv openssl_random_pseudo_bytes(16); // 生成128位IV// AES加密&#xff08;CBC模式&#xff09…...

分层多维度应急管理系统的设计

一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…...

FFmpeg源码:av_base64_decode函数分析

一、引言 Base64&#xff08;基底64&#xff09;是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646&#xff0c;所以每6个比特为一个单元&#xff0c;对应某个可打印字符。3个字节相当于24个比特&#xff0c;对应于4个Base64单元&#xff0c;即3个字节可由4个…...

算法随笔_30: 去除重复字母

上一篇:算法随笔_29:最大宽度坡_方法3-CSDN博客 题目描述如下: 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; …...

fpga系列 HDL:XILINX Vivado Vitis 高层次综合(HLS) 实现 EBAZ板LED控制(上)

目录 创建工程创建源文件并编写C代码C仿真综合仿真导出RTL CG导出RTL错误处理&#xff1a; 创建工程 创建源文件并编写C代码 创建源文件(Souces下的hlsv.h和hlsv.cpp&#xff0c;Test Bench下的test_hlsv1.cpp)&#xff1a; hlsv1.h #ifndef HLSV1 #define HLSV1 #include &l…...