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

MySQL 的体系结构、引擎与索引

MySQL的引擎与体系结构

体系结构

连接层

最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限

服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的优化和分析,部分内置函数的操作。所有跨存储引擎的功能也是在这一层实现的,如过程、函数等

引擎层

存储引擎真正的负责MySQL中个数据的存储与提取,服务器通过API和存储引擎进行通信,不同的存储引擎具有不同的功能,这样子我们也可以根据自己的需求,来选取合适的存储引擎

存储层

主要是将数据存储在文件系统之上,并完成与存储引擎的交互

存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式,存储引擎是基于库的,所以存储引擎也可以被称为表类型

默认引擎-InnoDB

查看所有的引擎
show engines;

可以看到所有的引擎

image-20230223091416826

存储引擎的特点

InnoDB

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5版本之后,InnoDB是默认的MySQL的引擎。

特点
  • DML(增删改)操作支持ACID(原子性、一致性、隔离性、持久性)模型,支持事务
  • 行级锁,提高并发访问的性能
  • 支持外键(Foreign Key)约束,保证数据的完整性和正确性
文件

xxx.ibd:xxx代表的是表明,innoDB引擎的每张表都会对应着这样的一个表文件,存储该表的表结构(frm、sdi)、数据和索引,参数innodb_file_per_table 默认为no,表示每张表各自占用一个表空间,如果为yes表示多张表共用一个表空间

查看指令

-- 查看是共用多个表空间
show variables  like 'innodb_file_per_table';

image-20230223092537403

查看ibd文件:

我在本地系统中找到了自己库的文件

image-20230223092657145

但是这个文件是一个二进制文件没法直接查看,但是可以借助指令来进行一个查看

ibd2sdi 文件命.ibd

查看结果:

image-20230223092906120

可以直接看到表的全部信息以及字段信息

逻辑空间
  • TableSpace 表空间
  • Segment:段
  • Extent:区 区的大小是固定的,是1M, 可以包含64个页
  • Page:页 页是操作的最小单元,大小页是固定的,一个页16K
  • Row:行

image-20230223093129669

MyISAM

MyISAM是MySQL的早期默认存储引擎

特点

不支持事务,不支持外键

支持表锁,不支持行锁

访问速度快

文件

*.sdi:存储表结构信息

.MYD:存储数据

***.MYI **:存储索引

Memory

Memory引擎的表数据是存储在内存中的,由于受到硬件问题、断电问题的影响,只能将这些表作为临时表或者缓存使用

特点

内存存放

hash索引

文件

*.sdi:存储表结构信息

各个引擎的特点

特点InnoDBMyISAMMemory
存储限制64TB
事务安全支持--
锁机制行锁表锁表锁
B+tree索引支持支持支持
hash索引--支持
全文索引5.6之后支持支持-
空间使用
内存使用中等
批量插入速度
支持外键支持--

InnoDB与MyISAM:InnoDB支持事务、外键和行级锁

执行引擎的选择

  • InnoDB:是MySQL的,默认引擎,支持事务、外键,如果应用对事物的**完整性**有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询外,还包含很多更新、删除操作,那么InnoDB存储引擎是比较合适的选择

  • MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事物的完整性、并发性要求不是很高,那么选择这个存储引擎比较合适

  • Memory:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。Memory缺陷是对标的大小有限制,太大的表无法缓存在内存中,而却无法保证数据的安全性


索引

索引概述

什么是索引?

索引(index)是帮助MySQL搞笑获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引

优缺点

优点缺点
提高数据检索的效率,降低数据库的IO成本索引列也是要占用空间的
通过索引列堆数据进行排序,降低数据排序的成本索引大大提高了查询效率,同时也降低更新表的速度,如对表进行
Insert、update、delete操作时,效率降低(但实际上查询操作更多,而增改删操作较少)

索引数据结构

MySQL的索引是在存储引擎曾实现的,不同的存储引擎有不同的结构,主要包括以下几种:

索引结构描述
B+Tree索引最常见的索引类型,大部分引擎都支持B+树索引
Hash索引底层数据结构是通过哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询
R-Tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,比较少用
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式,类似于ES

索引支持

索引InnoDBMyISAMMemory
B+Tree索引支持支持支持
Hash索引不支持不支持支持
R-Tree索引不支持支持不支持
Full-text5.6版本之后支持支持不支持

平时所说的索引,如果没有特别的指明,都是B+树结构组织的索引

B+Tree

image-20230223133427265image-20230223133453731image-20230223133650349

二叉树的缺点:顺序插入时,会形成链表,查询性能大大降低。大数据量的情况下,层级较深,检索速度较慢

红黑树:能够解决顺序插入形成链表的情况,但是在大数据量的情况下,层级较深,索引速度较慢

B-Tree(多路平和查找树):以一颗最大度数(max-degree)为5阶的b-tree为例(每个节点最多存储4个key,5个指针)【树的度数指的是一个结点的子结点个数】:

image-20230223134121157

B+Tree与B-Tree的区别:

  1. 所有的数据都会出现在叶子节点
  2. 叶子节点形成一个单向链表

image-20230223142729938

MySQL的B+树相对于经典的B+树进行了优化,在原有的B+树的基础上,增加了一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+树,提高区间访问性能

image-20230223144119948

Hash

哈希索引就是采用一定的Hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中

如果两个(或多个)键值,映射到一个相同的槽位上,他们就会产生hash冲突,可以通过链表进行解决

特点:
  1. Hash索引只能用于对等比较(=,in),不支持范围查询
  2. 无法利用索引完成排序操作
  3. 查询效率高,通常只需要一次检索就可以了,效率通常高于B+Tree索引
存储结构支持

在MySQL中,支持hash索引的是memory引擎,而innodb中具有自适应hash功能,hash索引是存储引擎根据B+树索引在指定条件下自动构建的

InnoDB存储引擎为什么要选择B+Tree索引结构

  • 相对于二叉树,层级更少,搜索效率更高
  • 相对于B-Tree,无论是叶子节点还是非叶子节点都会存储数据,这样导致一页中存储的键值减少,指针跟着减少,要同时保存大量数据,只能增加树的高度,导致性能降低
  • 相对于Hash索引,B+Tree支持范围匹配和排序操作

索引分类

分类含义特点关键字
主键索引针对于表中逐渐创建的索引默认自动创建,只能有一个PRIMARY
唯一索引避免同一个表中的某个数据列中的重复值可以有多个UNIQUE
常规索引快速定位特定数据可以有多个
全文索引全文索引超找的是文本中的关键词,而不是比较索引中的值可以有多个FUNNTEXT

在InnoDB存储索引中,根据索引的存储形式,又可以分为以下两种:

分类含义特点
聚集索引(Clustered index)将数据存储与索引放在一块必须有,而且只能有一个
非聚集索引/二级索引/辅助索引(Secondary index)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个

聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引
  • 如果不存在逐渐,将使用第一个唯一(UNIQUE)索引作为聚集索引
  • 如果表没有逐渐,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引
select * from user where name = "Arm"

image-20230223151324583

查询条件是name,那么就先走二级索引,二级索引查找到之后就会拿到这一行的主键ID,根据主键在聚集索引中进行查询,找到这一行的数据。

回表查询指的是现在二级索引中找到主键值,然后再到主键索引中找到对应的行,这种查询被称为回表查询

索引的语法

创建索引

CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name (index_col_name,....)

一次可以创建多个索引,如果使用UNIQUE或者FULLTEXT 则表示创建的是唯一/全文索引,反之则是普通索引

查看索引

SHOW INDEX FROM table_name;

删除索引

DROP INDEX index_name ON table_name

SQL 性能分析

SQL执行频率

MySQL客户端连接成功后,通过show [session|global] status命令可以提供服务器状态信息。通过下面指令可以看到当前数据库的insert update delete select 的访问频率:

SHOW GLOBAL STATUS LIKE 'COM_______'; 
-- 7个下划线

image-20230223160919531

慢查询日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认为10s)的所有SQL语句的日志。

MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置

查询是否开启了慢查询日志:

show variables  like 'slow_query_log';

image-20230223161836040

image-20230223162624594

修改配置文件

# 开启MySQL慢查询日志查询开关
slow_query_log=1
# 设置慢日志的时间为2s,如果语句执行时间超过了2s,就会被视为慢查询,记录慢查询日志
long_query_time=2

image-20230223163009742

profile详情

show profiles能够在做SQL优化时帮助我们了解事件都消耗到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作

查看是否支持该操作

select @@have_profiling;

image-20230223163541020

默认情况下profiling是关闭的,可以通过set语句在session/global级别开启profiling;

set profiling = 1;

先查看是否已经开启:

select @@profiling;

image-20230223163853269

如果为1则表示已经打开,这里为0,表示没有打开,需要再进行一次设置,设置成功后再次查询:

image-20230223164150342

#这里我的建议是 不用看,因为MySQL8.0之后要废弃这个方法
'SHOW PROFILES' is deprecated and will be removed in a future release. Please use Performance Schema instead

explain执行计划

EXPLAIN或者DESC命令获取MySQL如何执行select语句的信息,包括在select语句执行过程中如何连接和连接顺序

-- 直接在select 语句之前加上关键字 explain 或者desc即可
explain select 字段列表 from 表名 where 条件;

查询语句:

explain select * from  shop.tb_newbee_mall_admin_user where admin_user_id ='1';

查询结果:

image-20230223165820527

含义介绍
  • Id

    select查询的序列号,表示查询中执行select子句或者是操作表的顺序(Id相同,执行顺序从上到下,Id不同,值越大越先执行)。

  • select_type

    表示select的查询类型,常见的取值有SIMPLE(见到表,及不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)

    UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(Select/where之后包含了子查询)等等

  • type

    表示连接类型,性能从好到差以此为:NULL system CONST eq_ref ref range index all

    根据唯一主键进行查询会返回CONST,非唯一主键返回ref,null几乎达不到,除非不查询任何表

  • possible_key

    显示可能应用在这张表上的索引,一个或者多个

  • key

    实际使用的索引,如果为null,则表示没有使用索引

  • key_len

    表示索引中使用的字节数,该职位为索引字段最大可能值,并非实际使用长度,在不损失精确性的前提下,长度越长越好

  • rows

    MySQL认为必须执行的查询的行数,在innodb引擎的表中,是一个预估值,可能并不总是准确。

  • filtered

    表示返回结果的行数占需读取行书的百分比,filtered越大越好

索引使用

失效原因

最小前缀法则

如果索引了多列(联合索引),要遵守最左前缀法则,最左前缀法则指的是查询从索引最左列开始,并且不能够跳过索引中的列,如果条约某一列,索引将部分失效(后面的字段索引失效)

举个例子,现在存在一个联合索引,分别为字段A B C,顺序页是从左往右在查询过程中如果输入

select * from table where A = 1 and B = 2 and C = 3;

这样的话就会走联合索引,查出来的key_len等于ABC三个字段的和

那么如果不带C

select * from table where A=1 and B=2;

这样子仍然走联合索引,但是key_len等于AB两个字段的长度,

依此类推

那么此时不走A

select * from table where B =1 and C=3 ;

由于A是最左列,这样子就不满足最左前缀法则,所以索引为null

那么如果我们有A但是跳过B直接到C

select * from table where A = 1 and C = 3;

这样子走索引,但是key_len等于A的长度,则表示C已经被丢失,对应了后面的索引失效

那么我们走ABC但是顺序不一样

select * from table where b= 1 and c= 2 and a=1;

这样子和第一种情况相似,字段长度仍为ABC的总和

范围查询

联合索引中,出现了范围查询(>,<),范围查询右侧的索引失效,但是>= 这种可以直接规避这种情况

索引列运算操作

不要再索引列上进行运算操作,否则索引将失效

举个例子:

自己创建了一个表和一个联合索引,用nick_name和address 进行联合,用nick_name进行一个直接查询

explain select * from shop.tb_newbee_mall_user where nick_name = '十三';

结果:

image-20230223191645430

那么我们进行计算,进行一个字符串切割再查看结果:

explain select *from shop.tb_newbee_mall_user where substr(nick_name,1,3) = '198';

image-20230223191731724

在这里看出来索引直接失效

需要注意的是,如果是模糊查询,直接自己手动拼接 写成 字符串%不会出现任何问题,还是会走索引,如果是'%字符串%'则不会走索引,CONCAT也相同

使用CONCAT函数

explain select *from shop.tb_newbee_mall_user where nick_name like CONCAT('%','198','%');

运行结果:

image-20230223192133144

单个:

explain select *from shop.tb_newbee_mall_user where nick_name like '198%';

image-20230223192415349

字符串不加引号

字符串不加引号,会造成索引失效

例如:加上引号

explain select * from shop.tb_newbee_mall_user where nick_name = '1986565395';

效果:

image-20230223192808431

不加引号

explain select * from shop.tb_newbee_mall_user where nick_name = 1986565395;

效果:

image-20230223192921015

可能会使用tb_wxk这个索引,但是实际上并没有进行使用

发生了隐式转换

模糊查询

如果只是尾部模糊匹配,索引不会失败,如果是头部模糊匹配,索引则会失效

or连接的条件

用or分隔开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么设计的索引都不会被用到

先查看索引:

show index from shop.tb_newbee_mall_user;

image-20230223194954827

在这里使用or进行连接

连接两个都有索引的字段

explain select * from shop.tb_newbee_mall_user where nick_name='1986565395' or user_id=1;

image-20230223201325170

一个字段没有索引

explain select * from shop.tb_newbee_mall_user where nick_name='1986565395' or is_deleted=0;

结果:image-20230223202946941

数据分布影响

如果MySQL评估使用索引比全表更慢,则不使用索引

比如说这里的nickname是0~10,都比0大

image-20230223203905171

那么我进行一个操作查询操作

explain select * from shop.tb_newbee_mall_user where nick_name >= '0';

按照正常流程,这个操作是要走索引的,此外nick_name全都比0大

运行结果如下:

image-20230223204401141

到最后没有走索引,而是选择了扫描全表

那么再次进行一个更换

explain select * from shop.tb_newbee_mall_user where nick_name <= '0';

image-20230223204501977

这样子又走索引了。

那么我们查询大于等于5的(大于等于五的数据小于一半)

explain select * from shop.tb_newbee_mall_user where nick_name >= '5';

image-20230223204847415

这时候还是老老实实的走了全局索引

说明MySQL在选择扫描全表还是走索引会进行评估,这个评估和数据分布有关

索引使用原则

SQL提示

我们知道nick_name和address是一个联合索引,在这里我将nick_name设置成为一个单列索引

create index tb_nick on shop.tb_newbee_mall_user(nick_name);

查看所有的索引:

image-20230223205529669

可以看到此时的nickname已经存在两个索引,那么执行下面SQL

explain select * from shop.tb_newbee_mall_user where nick_name = '2';

image-20230223205646756

最后还是走了联合索引,说明在这时MySQL自己做出了选择,那么如何规避这个选择?这时候就是用到了SQL提示

SQL提示,是优化数据库的一个重要手段,简单来说,就是SQL语句中加入一些认为的提示来达到优化的作用

  • use index:

     explain select * from shop.tb_newbee_mall_user use INDEX (tb_nick) where nick_name ='5'
    

    在这里要求使用了tb_nick这个锁:

    image-20230223210032191

  • ignore index:

    忽略某个index

     explain select * from shop.tb_newbee_mall_user ignore INDEX (tb_nick) where nick_name ='5';
    

    这里选择忽略tb_nick这个索引

    image-20230223210125659

    直接不进行使用

  • force index:

    强制使用某个索引

     explain select * from shop.tb_newbee_mall_user force INDEX (tb_nick) where nick_name ='5';
    

覆盖索引

尽量使用覆盖索引(查询使用了索引,并需要返回的列,在该列中已经全部能找到),减少使用 select *

explain  select  nick_name,address from shop.tb_newbee_mall_user where nick_name >= '5';

在这里我们查询nickname和address,

查询结果

image-20230223213207906

我们在查询is_deleted:

explain select is_deleted from shop.tb_newbee_mall_user where nick_name >= '5';

image-20230223213249723

using index condition 查找使用了索引,但是需要回标查询

using where, using index 查找使用了索引,但是需要的数据都在索引列中能够找到,不需要进行回表查询操作

前缀索引 不建议使用,可以考虑ES

当字段为字符串(varchar text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率,此时可以只讲字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率

  • 语法:

    create index idx_xxx on table_name(column(n))

  • 前缀长度

    可以根据索引的许安则醒来确定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的

    select count(distinct email)/count(*) from tb_user;
    select count(distinct substring(email,1,5)) / count(*) from tb_user;
    

相关文章:

MySQL 的体系结构、引擎与索引

MySQL的引擎与体系结构 体系结构 连接层 最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限 服务层 第二层架构主要完成大多数的核心服务功能&#xff0c;如SQL…...

数字IC设计需要学什么?

看到不少同学在网上提问数字IC设计如何入门&#xff0c;在学习过程中面临着各种各样的问题&#xff0c;比如书本知识艰涩难懂&#xff0c;有知识问题难解决&#xff0c;网络资源少&#xff0c;质量参差不齐。那么数字IC设计到底需要学什么呢&#xff1f; 首先来看看数字IC设计…...

五分钟搞懂POM设计模式

今天&#xff0c;我们来聊聊Web UI自动化测试中的POM设计模式。 为什么要用POM设计模式 前期&#xff0c;我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本&#xff08;以快递100网站登录举栗&#xff09;&#xff1a; import timefrom selenium import …...

面试 | 递归乘法【细节决定成败】

不用[ * ]如何使两数相乘❓一、题目明细二、思路罗列 & 代码解析1、野蛮A * B【不符合题意】2、sizeof【可借鉴】解析3、简易递归【推荐】① 解析&#xff08;递归展开图&#xff09;② 时间复杂度分析4、移位<<运算【有挑战性&#x1f4aa;】① 思路顺理② 算法图解…...

【Linux】环境变量与进程优先级

文章目录&#x1f3aa; 进程优先级&#x1f680;1.孤儿进程&#x1f680;2.优先级查看&#x1f680;3.优先级修改&#x1f3aa; 环境变量&#x1f680;1.常见环境变量&#x1f680;2.环境变量获取&#x1f680;3.main中的命令行参数&#x1f3aa; 进程优先级 每个进程都有相应…...

RocketMQ5.0.0的Broker主从同步机制

目录 一、主从同步工作原理 1. 主从配置 2. 启动HA 二、主从同步实现机制 1. 从Broker发送连接事件 2. 主Broker接收连接事件 3. 从Broker反馈复制进度 4. ReadSocketService线程读取从Broker复制进度 5. WriteSocketService传输同步消息 6. GroupTransferService线程…...

深度学习论文: EdgeYOLO: An Edge-Real-Time Object Detector及其PyTorch实现

深度学习论文: EdgeYOLO: An Edge-Real-Time Object Detector及其PyTorch实现 EdgeYOLO: An Edge-Real-Time Object Detector PDF: https://arxiv.org/pdf/2302.07483.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shangli…...

如何做好APP性能测试?

随着智能化生活的推进&#xff0c;我们生活中不可避免的要用到很多程序app。有的APP性能使用感很好&#xff0c;用户都愿意下载使用&#xff0c;而有的APP总是出现卡顿或网络延迟的情况&#xff0c;那必然就降低了用户的好感。所以APP性能测试对于软件开发方来说至关重要&#…...

Hive窗口函数

概述 窗口函数&#xff08;window functions&#xff09;也叫开窗函数、OLAP函数。 如果函数具有over子句&#xff0c;则它是窗口函数 窗口函数可以简单地解释为类似于聚合函数的计算函数&#xff0c;但是通过group by 子句组合的 常规聚合会隐藏正在聚合的各个…...

C++学习笔记(1):在默认构造函数内部使用带参数的构造函数

题目以下代码的输出是不是0&#xff1a;#include <unordered_map> #include <iostream>using namespace std;struct CLS{int i;CLS(int i_) :i(i_){}CLS(){CLS(0);} };int main(){CLS obj;std::cout << obj.i << endl;return 0; }结果-858993460为什么…...

Android面试题_安卓面经(23/30)设计模式源码案例

系列专栏: 《150道安卓常见面试题全解析》 安卓专栏目录见帖子 : 安卓面经_anroid面经_150道安卓基础面试题全解析 安卓系统Framework面经专栏:《Android系统Framework面试题解析大全》 安卓系统Framework面经目录详情:Android系统面经_Framework开发面经_150道面试题答案解…...

Dubbo性能调优参数以及原理

Dubbo作为一个服务治理框架&#xff0c;功能相对来说比较完善&#xff0c;性能也挺不错。但很多同学在使用dubbo的时候&#xff0c;只是简单的参考官方说明进行配置和应用&#xff0c;并没有过多的去思考一些关键参数的意义&#xff0c;最终做出来的效果总是差强人意,接下来我们…...

vue3全家桶之vuex和pinia持久化存储基础(二)

一.vuex数据持久化存储 这里使用的是vuex4.1.0版本,和之前的vuex3一样,数据持久化存储方案也使用 vuex-persistedstate,版本是最新的安装版本,当前可下载依赖包版本4.1.0&#xff0c;接下来在vue3项中安装和使用&#xff1a; 安装vuex-persistedstate npm i vuex-persisteds…...

LAMP架构与搭建论坛

目录 1、LAMP架构简述 2、各组件作用 3、构建LAMP平台 1.编译安装Apache httpd服务 2.编译安装mysql 3.编译安装php 4.搭建一个论坛 1、LAMP架构简述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整台系统和相关软件&#xff0c;能够提供动…...

代码随想录 || 回溯算法93 78 90

Day2493.复原IP地址力扣题目链接给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。例如&#…...

界面组件Kendo UI for Angular——让网格数据信息显示更全面

Kendo UI致力于新的开发&#xff0c;来满足不断变化的需求&#xff0c;通过React框架的Kendo UI JavaScript封装来支持React Javascript框架。Kendo UI for Angular是专用于Angular开发的专业级Angular组件&#xff0c;telerik致力于提供纯粹的高性能Angular UI组件&#xff0c…...

【Linux】进程状态|优先级|进程切换|环境变量

文章目录1. 运行队列和运行状态2. 进程状态3. 两种特殊的进程僵尸进程孤儿进程4. 进程优先级5. 进程切换进程特性进程切换6. 环境变量的基本概念7. PATH环境变量8. 设置和获取环境变量9. 命令行参数1. 运行队列和运行状态 &#x1f495; 运行队列&#xff1a; 进程是如何在CP…...

合宙Air780E|FTP|内网穿透|命令测试|LuatOS-SOC接口|官方demo|学习(18):FTP命令及应用

1、FTP服务器准备 本机为win11系统&#xff0c;利用IIS搭建FTP服务器。 搭建方式可参考博文&#xff1a;windows系统搭建FTP服务器教程 windows系统搭建FTP服务器教程_程序员路遥的博客-CSDN博客_windows服务器安装ftp 设置完成后&#xff0c;测试FTP&#xff08;已正常访问…...

大规模 IoT 边缘容器集群管理的几种架构-4-Kubeedge

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模 IoT 边缘容器集群管理的几种架构-1-RancherK3s大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad大规模 IoT 边缘容器集群管理的几种架构-3-Portainer &#x1f4da;️Reference…...

Spring底层核心原理解析

Spring简介 ClassPathXmlApplicationContext context new classPathXmlApplicationContext("spring.xml"); UserService userService (UserService) context.getBean("userService"); userService.test();上面一段代码是我们开始学习spring时看到的&…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

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…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...