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

面试必会-MySQL篇

1. Mysql查询语句的书写顺序

Select [distinct ] <字段名称>

from 表1 [ <join类型> join 表2 on <join条件> ]

where <where条件>

group by <字段>

having <having条件>

order by <排序字段>

limit <起始偏移量,行数>

2. Mysql查询语句的执行顺序

(8)Select

(9)distinct 字段名1,字段名2,

(7)[fun(字段名)]

(1)from 表1

(3)<join类型>join 表2

(2)on <join条件>

(4)where <where条件>

(5)group by <字段>

(6)having <having条件>

(10)order by <排序字段>

(11)limit <起始偏移量,行数>

3. Mysql 如何实现多表查询

MYSQL多表查询主要使用连接查询 , 连接查询的方式主要有 :

  • 内连接

  • 隐式内连接 : Select 字段 From 表A , 表B where 连接条件

  • 显式内连接 : Select 字段 From 表A inner join 表B on 连接条件

  • 外连接

  • 左外连接 : Select 字段 From 表A left join 表B on 连接条件

  • 右外连接 : Select 字段 From 表A right join 表B on 连接条件

  • 全外连接:(很少用)

  • 交叉连接 : 笛卡尔效应 (很少用)

4. MYSQL内连接和外连接的区别 ?

  • 内连接:只有两个元素表相匹配的才能在结果集中显示。

  • 外连接:左外连接: 左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

  • 右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

  • 全外连接:连接的表中不匹配的数据全部会显示出来。

  • 交叉连接:笛卡尔效应,显示的结果是链接表数的乘积。

5. CHAR和VARCHAR的区别?

  1. char的长度是不可变的,用空格填充到指定长度大小,而varchar的长度是可变的。

  1. char的存取速度比varchar要快得多

  1. char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节。

varchar的存储方式是:对每个英文字符占用2个字节,汉字也占用2个字节。

6. 索引的底层数据结构了解过嘛 ?

索引是是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引。

InnoDB引擎默认用的是B+树,

memory存储引擎把HASH当成默认索引,

myisam存储引擎支持B+和全文索引,默认也是B+树。

B+树:

根和子节点,存储的是索引值,叶子节点存储的数据。

一个节点存储的索引值,取决与我们索引值的大小。默认一个节点页,16K 1K = 1024B

一个叶子节点存储的记录,取决于一条记录的大小,比如一条记录是1KB,一个叶能存16条

从存储角度,索引分为聚集索引与非聚集索引

聚集索引(主键):叶子节点存储的值是我们插入的原始数据

非聚集索引:叶子节点存储的是索引与主键值的对应关系。

B+树与B树:

最大区别,B树的每个节点都存储数据。

B+Tree是B-Tree的变种,如图所示:

我们可以看到,两部分:

  • 绿色框框起来的部分,是索引部分,仅仅起到索引数据的作用,不存储数据。

  • 红色框框起来的部分,是数据存储部分,在其叶子节点中要存储具体的数据。形成单向链表结构

拓展-一个三阶(三层高)的B+树,可以存储多少条数据:

非叶子节点都是由key+指针域组成的,一个key占8字节,一个指针占6字节,而一个节点总共容量是16KB,那么可以计算出一个节点可以存储的元素个数:16*1024字节 / (8+6)=1170个元素。

  • 查看mysql索引节点大小:show global status like 'innodb_page_size'; -- 节点大小:16384

当根节点中可以存储1170个元素,那么根据每个元素的地址值又会找到下面的子节点,每个子节点也会存储1170个元素,那么第二层即第二次IO的时候就会找到数据大概是:1170*1170=135W。也就是说B+Tree数据结构中只需要经历两次磁盘IO就可以找到135W条数据。

对于第二层每个元素有指针,那么会找到第三层,第三层由key+数据组成,假设key+数据总大小是1KB,而每个节点一共能存储16KB,所以一个第三层一个节点大概可以存储16个元素(即16条记录)。那么结合第二层每个元素通过指针域找到第三层的节点,第二层一共是135W个元素,那么第三层总元素大小就是:135W*16结果就是2000W+的元素个数。

结合上述分析B+Tree有如下优点:

  • 千万条数据,B+Tree可以控制在小于等于3的高度

  • 所有的数据都存储在叶子节点上,并且底层已经实现了按照索引进行排序,还可以支持范围查询,叶子节点是一个双向链表,支持从小到大或者从大到小查找

关于B+树数据结构,感兴趣的同学可以通过一个网站进行演示:

https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

插入一组数据: 100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250 。然后观察一些数据插入过程中,节点的变化情况。

7. 索引的类型

1. 按数据结构形式

B+Tree索引(InnoDB引擎默认)、Hash索引(memory引擎默认)、Full-text索引(myisam存储引擎支持)

2. 按物理存储分类

聚集索引(聚簇)、非聚集索引(非聚簇,二级索引)

3. 按字段特性分类

主键索引、唯一索引、普通索引、全文索引

  • 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

  • 唯一索引:索引列中的值必须是唯一的,但是允许为空值

  • 主键索引:是一种特殊的唯一索引,不允许有空值,一个表只能由一个主键索引。

  • 全文索引: 只有在MyISAM引擎、InnoDB(5.6以后)上才能使⽤用,而且只能在CHAR,VARCHAR,TEXT类型字段上使⽤用全⽂文索引。

4. 按字段个数分类

单列索引 : 在MYSQL数据库表的某一列上面创建的索引叫单列索引 , 单列索引又分为

组合索引(联合索引) : 在MYSQL数据库表的多个字段组合上创建的索引 , 称为组合索引也叫联合索引

  • 组合索引的使用,需要遵循左前缀原则

  • 一般情况下,建议使用组合索引代替单列索引(主键索引除外)

create table index idxNameage on 表(name,age,addr)

8. 聚集索引与非聚集索区别 ?

分类

含义

特点

聚集(聚簇)索引(Clustered Index)

将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据

必须有,而且只有一个

二级索引/非聚集(非聚簇)(Secondary Index)

将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键

可以存在多个

聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引。

  • 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。

  • 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

8. MYSQL支持的存储引擎有哪些 ?

MYSQL存储引擎有很多, 常用的就二种 : MyISAMInnoDB , 者两种存储引擎的区别 ;

  • MyISAM支持256TB的数据存储 , InnerDB只支持64TB的数据存储

  • MyISAM 不支持事务 , InnerDB支持事务

  • MyISAM 不支持外键 , InnerDB支持外键

9. 如何创建索引

创建索引

create  [ unique ]  index 索引名 on  表名 (字段名,... ) ;

为tb_emp表的name字段建立一个索引

create index idx_emp_name on tb_emp(name);

为tb_emp表的name、username字段建立一个联合索引

create index idx_emp_name_username on tb_emp(name,username);

10. 在一个非主键字段上创建了索引, 想要根据该字段查询到数据, 需要查询几次 ?

需要查询二次

如果使用MyISAM存储引擎 , 会首先根据索引查询到数据行指针, 再根据指针获取数据

如果是InnoDB存储引擎 , 会根据索引查找指定数据关联的主键ID , 再根据主键ID去主键索引中查找数据

11. 知道什么是回表查询嘛 ?

当我们为一张表的name字段建立了索引 , 执行如下查询语句 :

select name,age from user where name='Alice'

那么获取到数据的过程为 :

  1. 根据name='Alice'查找索引树 , 定位到匹配数据的主键值为 id=18

  1. 根据id=18到主索引获取数据记录 (回表查询)

**先定位主键值,再定位行记录就是所谓的回表查询,它的性能较扫一遍索引树低 **

12. 知道什么叫覆盖索引嘛 ?

覆盖索引是指只需要在一棵索引树上就能获取SQL所需的所有列数据 , 因为无需回表查询效率更高

实现覆盖索引的常见方法是:将被查询的字段,建立到联合索引里去。

执行如下查询语句 : select name,age from user where name='Alice'

因为要查询 name 和 age二个字段 , 那么我们可以建立组合索引

create index index_name_age on user(name,age) 

那么索引存储结构如下 :

这种情况下, 执行select name,age from user where name='Alice' , 会先根据name='Alice', 找到记录 , 这条记录的索引上刚好又包含了 age 数据 , 直接把 Alice 77数据返回 , 就不会执行回表查询 , 这就是覆盖索引

13. 知道什么是左前缀原则嘛 ?

在mysql建立联合索引时会遵循左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到 ;

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

例如 : create index index_age_name_sex on tb_user(age,name,sex);

上述SQL语句对 age,name和sex建一个组合索引index_age_name_sex ,实际上这条语句相当于建立了(age) , (age,name) , (age,name,sex)三个索引 .

select * from tb_user where age = 49 ;  -- 使用索引select * from tb_user where age = 49 and name = 'Alice' ;  -- 使用索引select * from tb_user where age = 49 and name = 'Alice' and sex = 'man';  -- 使用索引select * from tb_user where age = 49  and sex = 'man';  -- 使用索引 , 但是只有 age 匹配索引 sex没有走索引select * from tb_user where name = 'Alice' and age = 49 and sex = 'man' ;  -- 使用索引 ,  因为MySQL的查询优化器会自动调整 where 子句的条件顺序以使用适合的索引select * from tb_user where name = 'Alice'  and sex = 'man' ;  -- 不会使用索引

14. 什么情况下索引会失效 ?

MySQL 索引通常是被用于提高 WHERE 条件的数据行匹配时的搜索速度,编写合理化的SQL能够提高SQL的执行效率

  1. 不要在列上使用函数和进行运算

  1. 不要在列上使用函数,这将导致索引失效而进行全表扫描。

  1. 尽量避免使用 != 或 <> 等否定操作符

联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。

比如如下查询: age+status

 select * from tb_user where profession = '软件工程' and age > 30 and status = '0';

当范围查询使用> 或 < 时,走联合索引了,但是索引的长度只有age的长度,就说明范围查询右边的status字段是没有走索引的。

select * from tb_user where profession = '软件工程' and age >= 30 and status = '0';

当范围查询使用>= 或 <= 时,走联合索引了,索引的长度是age+status的长度,就说明所有的字段都是走索引的。

所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 < 。

  1. 尽量避免使用 or 来连接条件

用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。

 select * from tb_user where id = 10 or age = 23;select * from tb_user where phone = '17799990017' or age = 23; 

由于age没有索引,所以即使id、phone有索引,索引也会失效。所以需要针对于age也要建立索引。

当or连接的条件,左右两侧字段都有索引时,索引才会生效。

  1. 多个单列索引并不是最佳选择,建立组合索引代替多个单列索引, 可以避免回表查询

  1. 查询中的某个列有范围查询,则其右边所有列都无法使用索引优化查找

  1. 索引不会包含有NULL值的列

  1. 当查询条件左右两侧类型不匹配的时候会发生隐式转换,隐式转换带来的影响就是可能导致索引失效而进行全表扫描。

  1. like 语句的索引失效问题

like 的方式进行查询,在 like “value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询

  1. 尽量不要使用in或not in

使用in查询数据,会进行全表扫描,降低效率

  1. 对于连续的数值,能用 between 就不要用 in 了:

#优化前: 
select id from t where num in(8,23,99) 
#优化后
select id from t where num between 1 and 3
  1. 必须使用in 可以使用使用union all 或 union 拆分sql

select id from t where id = 7
union all
select id from t where id = 5
union all
select id from t where id = 27

15. 索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要 ?

需要创建索引情况

  1. 主键自动建立主键索引

  1. 频繁作为查询条件的字段应该创建索引

  1. 多表关联查询中,关联字段应该创建索引 (on 两边都要创建索引)

  1. 查询中排序的字段,应该创建索引

  1. 频繁查找字段 , 应该创建索引

  1. 查询中统计或者分组字段,应该创建索引

不要创建索引情况

  1. 表记录太少

  1. 经常进⾏行行增删改操作的表

  1. 频繁更新的字段

  1. where条件里使用频率不高的字段

索引设计原则

1). 针对于数据量较大,且查询比较频繁的表建立索引。

2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。

3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。

4). 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。

5). 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。

6). 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。

7). 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。

16.前缀索引、单列索引与联合索引

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

create index  idx_xxxx on table_name(column(n)) ;

为tb_user表的email字段,建立长度为5的前缀索引。

create index idx_email_5 on tb_user(email(5)); 

前缀长度

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

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

单列索引:即一个索引只包含单个列。

联合索引:即一个索引包含了多个列。

17. mysql的性能优化

  1. 从设计方面 选择合适的存储引擎 , 合适的字段类型 , 遵循范式(反范式设计)

存储引擎 :
不需要事务, 不需要外键读写较多的的使用MyIsam
需要事务, 需要外键的使用InnoDB
合适的字段类型 , 例如 :
定长字符串用char , 不定长用varchar
状态, 性别等有限数量值的用tinyint
遵循范式 :
第一范式1NF,原子性
第二范式2NF,消除部分依赖
第三范式3NF,消除传递依赖

• 第⼀范式:1NF 原⼦性,列或者字段不能再分,要求属性具有原⼦性,不可再分解; 单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

• 第⼆范式:2NF 唯⼀性,⼀张表只说⼀件事,是对记录的惟⼀性约束,要求记录有惟 ⼀标识;

• 第三范式:3NF 直接性,数据不能存在传递关系,即每个属性都跟主键有直接关系, ⽽不是间接关系。

2.从功能方面可以对索引优化,采用缓存缓解数据库压力,分库分表。

3.从架构方面可以采用主从复制,读写分离,负载均衡

18. MYSQL超大分页怎么处理 ?

#效率低
select * from table where limit 1000000,10 

正确的处理方法是 : 先快速定位需要获取的id再关联查询获取数据

# 效率高 使用覆盖索引
select * from table where id in (select id from table limit 100000,10)
# 效率高 定位数据,再使用覆盖索引
select * from table where id in (select id from table where id>100000 order by id limit 10)

通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据

19. 如何定位慢查询 ?

可以在MYSQL配置文件中开启慢查询 , 有两种方式可以开启慢查询

方式一 : 修改my.ini配置文件 , 重启 MySQL 生效

[mysqld]
log_output='FILE,TABLE'
slow_query_log='ON'
long_query_time=0.001

方式二 : 设置全局变量

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_output = 'FILE,TABLE';
SET GLOBAL long_query_time = 0.001;

20. 一个SQL语句执行很慢, 如何分析

  1. 可以开启慢查询, 通过慢查询日志或者命令, 获取到执行慢的SQL语句

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

MySQL的慢查询日志默认没有开启,我们可以查看一下系统变量 slow_query_log。

  1. 使用EXLPAIN命令分析SQL语句的执行过程

EXLPAIN命令, 比较重要的字段**(加黑加粗的是重要的)** :

Explain 执行计划中各个字段的含义:

字段

含义

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 。

possible_key

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

key

实际使用的索引,如果为NULL,则没有使用索引。

key_len

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

rows

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

filtered

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

extra

额外信息

select_type重点解读

type重点解读:查询性能从上到下依次是最好到最差

extra重点解读

相关文章:

面试必会-MySQL篇

1. Mysql查询语句的书写顺序Select [distinct ] <字段名称>from 表1 [ <join类型> join 表2 on <join条件> ]where <where条件>group by <字段>having <having条件>order by <排序字段>limit <起始偏移量,行数>2. Mysql查询语…...

Hadoop入门常见面试题与集群时间同步操作

目录 一&#xff0c;常用端口号 Hadoop3.x &#xff1a; Hadoop2.x&#xff1a; 二&#xff0c;常用配置文件&#xff1a; Hadoop3.x: Hadoop2.x: 集群时间同步&#xff1a; 时间服务器配置&#xff08;必须root用户&#xff09;&#xff1a; &#xff08;1&#xff09…...

JS 数组去重的方法

// 数组去重 const arr ["1", "1", "2", "3", "5", "3", "1", "5", "4"] console.log(this.deduplicate(arr)) // [1, 2, 3, 5, 4] // 数组对象去重 const arr [ { id: 1, nam…...

PMP项目管理项目沟通管理

目录1 项目沟通管理2 规划沟通管理3 管理沟通4 监督沟通1 项目沟通管理 项目沟通管理包括通过开发工件&#xff0c;以及执行用于有效交换信息的各种活动&#xff0c;来确保项目及其相关方的信息需求得以满足的各个过程。项目沟通管理由两个部分组成&#xff1a;第一部分是制定…...

2.JVM常识之 运行时数据区

1.JVM核心组成 2.JVM 运行时数据区&#xff08;jdk8&#xff09; 程序计数器&#xff1a;线程私有&#xff0c;当前线程所执行字节码的行号指示器 jvm栈&#xff1a;线程私有&#xff0c;Java 虚拟机栈为 JVM 执行 Java 方法服务 本地方法栈&#xff1a;线程私有&#xff0c;本…...

你的游戏帐号是如何被盗的

据报道&#xff0c;2022上半年&#xff0c;中国游戏市场用户规模达到了5.54亿人&#xff0c;游戏市场销售收入1163.1亿元&#xff0c;相较去年均为同比增长的情况。如此庞大的市场规模&#xff0c;黑色产业链是绕不开的话题。 但相较于游戏中大家常见的玩家与玩家、玩家与官方…...

C++11异步编程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1、std::future和std::shared_future1.1 std:future1.2 std::shared_future2、std::async3、std::promise4、std::packaged_task前言 C11提供了异步操作相关的类…...

20230310----重返学习-DOM元素的操作-时间对象-定时器

day-024-twenty-four-20230310-DOM元素的操作-时间对象-定时器 复习 获取元素 id document.getElementById() 类名 document.getElementsByClassName() 标签名 document.getElementsByTagName() name属性 document.getElementsByName() 选择器 document.querySelector()docum…...

江苏专转本转本人后悔排行榜

江苏专转本转本人后悔排行榜 一、复习的太迟&#xff1a; 后悔指数:五颗星。 复习越到最后&#xff0c;时间一天天变少&#xff0c;要复习的内容还有很多&#xff0c;很多人都后悔没有早早开始&#xff0c;总想着多给我两月一定会考上的。 担心时间不够用&#xff0c;那就努力利…...

【算法时间复杂度】学习记录

最近开算法课&#xff0c;开几篇文章记录一下算法的学习过程。 关于算法的重要性 学习计算机当程序员的话&#xff0c;在编程过程中是绕不开算法这个大矿山的&#xff0c;需要我们慢慢挖掘宝藏。 算法&#xff08;Algorithm&#xff09;是指用来操作数据、解决程序问题的一组…...

汽车车机芯片Linux系统内核编译问题总结

谈到车机,很多人会想到华为问界上装的大屏车机,号称车机的天花板,基于鸿蒙OS的,而今天谈到的车机芯片用的是linux内核Kernel,对于它的编译,很多人一时会觉得头大,的确如果工具不是很齐全,就会遇到这样那样的问题,但是过程都会有错误提示,按照错误提示基本可以解决,而…...

Android13 音量曲线调整

Android13 音量曲线调整 Android13 上配置文件的路径&#xff1a; /vendor/sprd/modules/audio/engineconfigurable_apm/工程目录/system/etc/audio_engine_config/audio_policy_engine_stream_volumes.xml /vendor/sprd/modules/audio/engineconfigurable_apm/工程目录/sys…...

OpenHarmony通过MQTT连接 “改版后的华为IoT平台”

一、前言 本篇文章我们使用的是BearPi-HM_Nano开发板:小熊派的主板+E53_IA1扩展板 源码用的是D6_iot_cloud_oc,点击下载BearPi-HM_Nano全量源码 那么为什么要写这篇呢? 前段时间看到OpenHarmony群里,经常有小伙伴问接入华为IoT平台的问题,他们无法正常连接到华为IoT平台等…...

SQS (Simple Queue Service)简介

mazon Simple Queue Service (SQS)是一种完全托管的消息队列服务&#xff0c;可以让你分离和扩展微服务、分布式系统和无服务应用程序。 在讲解SQS之前&#xff0c;首先让我们了解一下什么是消息队列。 消息队列 还是举一个电商的例子&#xff0c;一个用户在电商网站下单后付…...

高速PCB设计指南系列(三)

第一篇 高密度(HD)电路的设计 本文介绍&#xff0c;许多人把芯片规模的&#xff22;&#xff27;&#xff21;封装看作是由便携式电子产品所需的空间限制的一个可行的解决方案&#xff0c;它同时满足这些产品更高功能与性能的要求。为便携式产品的高密度电路设计应该为装配工艺…...

【C++】C++11——左右值|右值引用|移动语义|完美转发

文章目录一、左值与右值1.概念2.引用3.注意二、右值引用的意义1.左值引用意义2.右值引用和移动语义3.容器新增三、万能引用四、完美转发一、左值与右值 1.概念 左值是什么&#xff1f;右值是什么&#xff1f; 左值是一个表示数据的表达式&#xff08;如变量名或解引用的指针&…...

[ROC-RK3399-PC Pro] 手把手教你移植主线Buildroot(基于2023.02-rc3版本)

&#x1f347; 博主主页&#xff1a;Systemcall小酒屋&#x1f347; 博主简介&#xff1a;Neutionwei&#xff0c;C站嵌入式领域新星创作者之一&#xff0c;一枚热爱开源技术、喜欢分享技术心得的极客&#xff0c;注重简约风格&#xff0c;热衷于用简单的案例讲述复杂的技术&am…...

重温线性代数

前言 对于普通的数学工作者而言&#xff0c;掌握矩阵、线性空间的基本性质和用法比领会抽象的概念更实用。数学专业的同学需要全面深入学习近世代数的理论和演绎法则&#xff0c;例如模的概念和运算。 总之&#xff0c;我个人认为&#xff0c;不论是微积分、还是线性代数&…...

2023河北沃克HEGERLS甘肃金昌重型仓储项目案例|托盘式四向穿梭车智能密集存储系统在工业行业的创新应用

项目名称&#xff1a;自动化仓储托盘式四向穿梭车智能密集立体库项目 项目合作客户&#xff1a;甘肃省金昌市某集团企业 项目施工地域&#xff1a;甘肃省金昌市 设计与承建单位&#xff1a;河北沃克金属制品有限公司&#xff08;自主品牌&#xff1a;海格里斯HEGERLS&#x…...

软件测试的案例分析 - 闰年5

文章目的 显示不同的博客能获得多少博客质量分 &#xff08;这是关于博客质量分的测试 https://www.csdn.net/qc) 这个博客得了 83 分。怎么才能得到更多分数&#xff1f; 正文 我们谈了不少测试的名词, 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生…...

Linux文件基础I/O

文件IO文件的常识基础IO为什么要学习操作系统的文件操作C语言对于函数接口的使用接口函数介绍如何理解文件文件描述符重定向更新给模拟实现的shell增加重定向功能为什么linux下一切皆文件&#xff1f;文件的常识 1.空文件也要在磁盘占据空间 2.文件 内容 属性 3.文件操作 对…...

HTML看这一篇就够啦,HTML基础大全,可用于快速回顾知识,面试首选

HTML 1 基础 1.1 DOCTYPE <!DOCTYPE> 文档类型声明&#xff0c;作用就是告诉浏览器使用哪种HTML版本来显示网页。 <!DOCTYPE html> 这句代码的意思是: 当前页面采取的是 HTML5 版本来显示网页. 注意: 声明位于文档中的最前面的位置&#xff0c;处于 标签之前。 …...

Altium Designer(AD)软件使用记录05-PCB叠层设计

目录Altium Designer(AD)软件使用记录05-PCB叠层设计一、正片层和负片层的介绍1、正片层(Signal)2、负片层(Plane)3、内电层的分割实现二、正片层和负片层的内缩设计1、负片设置内缩20H原则2、正片铺铜设置内缩1、设置规则2、重新铺铜三、AD的层叠设计四、叠层设计需要注意的问…...

ArcGIS动态表格批量出图

一.产品介绍&#xff1a;ArcGIS动态表格扩展模块Mapping and Charting Solutions&#xff0c;可用于插入动态表格&#xff0c;与数据驱动结合&#xff0c;出图效率无敌。注&#xff1a;优先选择arcgis10.2.2。 二、下载连接&#xff1a; https://www.xsoftnet.com/share/a001CX…...

ChatGPT真神奇,但是也真焦虑

ChatGPT火爆ChatGPT的火爆程度不用说也知道。就目前来说&#xff0c;已经开始冲击各行业了&#xff0c;比如客服、智能助手、语言学习、自然语言处理等等等。。ChatGPT冲击冲击最高的可能就是中间这个段位的了。高段位无法取代&#xff0c;但是低段位&#xff0c;通过使用ChatG…...

mos管驱动与米勒平台介绍、消除

mos驱动设计 1.选择适当的驱动芯片 为了控制MOSFET&#xff0c;需要使用专门的驱动芯片。选择合适的芯片需要考虑MOSFET的电压和电流需求。常见的驱动芯片包括IR2110、IR2184、MIC4424等。 2.设计电路 在驱动电路中&#xff0c;需要加入一些电路元件来保证MOSFET的顺畅工作…...

20230311英语学习

Philosophy of Food: Guidelines for an Authentic Approach to Eating 饮食哲学&#xff1a;值得思考的问题 Whats Philosophical About Food? Philosophy of food finds its basis on the idea that food is a mirror.Eating mirrors the making of a self, that is, the …...

【面试题】Nginx面试题汇总(无解答)

什么是Nginx&#xff1f;谈谈个人都理解&#xff0c;项目中是否用到&#xff0c;为什么要用&#xff0c;有什么优点&#xff1f;为什么要用Nginx&#xff1f;为什么Nginx性能这么高&#xff1f;Nginx怎么处理请求的&#xff1f;什么是正向代理和反向代理&#xff1f;使用“反向…...

Java面试总结(六)

进程和线程的区别 根本区别&#xff1a; 进程时操作系统资源分配的基本单位&#xff0c;而线程是处理器任务调度和执行的基本单位。 资源开销&#xff1a; 每个进程都有自己独立的代码和数据空间&#xff08;程序上下文&#xff09;&#xff0c;进程之间的切换开销比较大&…...

Windows逆向安全(一)C与汇编的关系

前言 逆向是一种新型的思维模式也是软件开发领域中极为重要的技术&#xff0c;涵盖各种维度去深挖软件架构的本质和操作系统原理&#xff0c;学习逆向后可以在各领域中发挥至关重要的作用&#xff0c;其中包括黑灰色&#xff0c;安全开发&#xff0c;客户端安全&#xff0c;物…...

Lazada、Allegro、速卖通测评自养号技术(方法解析)

无论是亚马逊、拼多多Temu、shopee、Lazada、wish、速卖通、煤炉、敦煌、雅虎、eBay、TikTok、Newegg、乐天、美客多、阿里国际、沃尔玛、OZON、Joom、Facebook、Coupang、独立站、Cdiscount、Kaufland、DARTY、Allegro、MANO等平台测评自养号对于卖家来说算是一种低成本、高回…...

Vue3的composition API—setup函数, ref函数,reactive函数

1、Setup 函数 1.setup 是vue3中的一个配置项 2、setup是所有组件所需要的数据和方法都需要配置到setup中的 3、setup两种返回值&#xff1a; 若返回一个对象 若返回一个渲染函数 mian.js文件 注意&#xff1a;尽量不与Vue2混用 setup中无法访问vue2中的配置 不能是async函数…...

国外seo比较好的优化方法有哪些?

随着互联网的不断发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;变得越来越重要。 对于国外市场&#xff0c;Google搜索引擎是最为重要的搜索引擎之一&#xff0c; 因此在优化国外网站时&#xff0c;需要将Google SEO优化作为首要任务。 关键词研究和优化 在进行…...

【JavaEE进阶】——第一节.Maven国内源配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 操作步骤 1.打开项目配置界面&#xff08;当前项目配置&#xff09; 2.检查并配置国内源 3.再次打开项目配置界面&#xff08;新项目配置&#xff09; 4…...

dockerFile编写

dockerFile编写 语法参数 # DockerFile常用指令 USER # 指定运行的用户&#xff0c;一般不用配置 FROM # 拉取基础镜像&#xff0c;一切从这里开始构建 ARG # 构建参数&#xff0c;只能在dockerFile中使用, # eg: JAR_FILEtarget/springboot-mongo-0.0.1-SNAPSHOT.jar MAI…...

jenkins扩展你的流水线

文章目录一、概述二、可信库和不可信库可信库不可信库三、内部库与外部库内部库SSH访问HTTP 访问外部库配置一个外部库四、在流水线脚本中使用库从源码版本控制中自动下载库加载库到脚本中Library 注解库步骤库指令五、Jenkins 项目中的库范围六、共享库代码的结构src示例一&am…...

Golang模糊测试入门

本教程介绍了 Go 中模糊测试的基础知识。通过模糊测试,随机数据会针对您的测试运行,以试图找到漏洞或导致崩溃的输入。可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击。 在本教程中,您将为一个简单的函数编写模糊测试,运行 go 命…...

ARM uboot 的移植4 -从 uboot 官方标准uboot开始移植

一、添加DDR初始化1 1、分析下一步的移植路线 (1) cpu_init_crit 函数成功初始化串口、时钟后&#xff0c;转入 _main 函数&#xff0c;函数在 arch/arm/lib/crt0.S 文件中。 (2) 在 crt0.S 中首先设置栈&#xff0c;将 sp 指向 DDR 中的栈地址&#xff1b; #if defined(CONF…...

不用索引怎么优化百亿数据? | MySQL性能优化篇

文章目录数据库调优一、数据库调优原理1.1 为什么要进行MySQL数据库调优&#xff1f;1.2 什么影响数据库性能&#xff1f;1.3 数据库调优到底调什么&#xff1f;二、数据库压力测试2.1 什么是压测&#xff1f;2.2 JMeter简介2.3 驱动下载2.4 测试过程三、连接池3.1 压力测试连接…...

JavaScript(WebAPI)

目录 1.什么是Web API? 2.DOM和DOM树 3.获取元素 4.事件 5.操作元素 获取/修改元素内容 1.innerText 2. innerHTML 获取/修改元素属性 获取/修改表单元素属性 获取/修改样式属性 1.修改内联样式 2.修改元素应用的CSS类名 6.操作节点 新增节点 删除节点 7.案例…...

idea集成GitHub

设置 GitHub 账号绑定账号有两种方式&#xff1a;1. 通过授权登录2.如果上述登录不成功&#xff0c;用Token口令的方式登录&#xff0c;口令在github账号哪里生成&#xff0c;点击settings --->Developer settings --->pwrsonal access tokens ----> 复制口令到idea 口…...

软考高级信息系统项目管理师系列之四十一:项目组合管理

软考高级信息系统项目管理师系列之四十一:项目组合管理 一、项目组合管理内容二、项目组合管理基础概述1.项目组合定义及相关知识图2.项目组合、项目集和项目之间的关系3.项目组合模块具备的特征三、项目组合管理1.项目组合管理定义及要求2.不同级别管理之间的特性及关联3.项目…...

Spring——Spring整合Mybatis(XML和注解两种方式)

框架整合spring的目的:把该框架常用的工具对象交给spring管理&#xff0c;要用时从IOC容器中取mybatis对象。 在spring中应该管理的对象是sqlsessionfactory对象&#xff0c;工厂只允许被创建一次&#xff0c;所以需要创建一个工具类&#xff0c;把创建工厂的代码放在里面&…...

【专项训练】布隆过滤器和LRU缓存

布隆过滤器:与哈希表类似 哈希表是一个没有误差的数据结构! 有哈希函数得到index,会把要存的整个元素放在哈希表里面 有多少元素,每个元素有多大,所有的这些元素需要占的内存空间,在哈希表中都要找相应的内存大小给存起来 事实上,我们并不需要存所有的元素本身,而是只…...

从一道面试题看 TCP 的吞吐极限

分享一个 TCP 面试题&#xff1a;单条 TCP 流如何打满香港到旧金山的 320Gbps 专线&#xff1f;(补充&#xff0c;写成 400Gbps 更具迷惑性&#xff0c;但预测大多数人都会跑偏&#xff0c;320Gbps 也就白给了) 这个题目是上周帮一个朋友想的&#xff0c;建议他别问三次握手&a…...

rsync 的用法

rsync 介绍下 用法 rsync是一个常用的数据同步工具&#xff0c;它能够在本地和远程系统之间同步文件和目录。以下是rsync的基本用法&#xff1a; 同步本地文件夹&#xff1a; bash Copy code rsync -av /path/to/source /path/to/destination其中&#xff0c;-a表示归档模式&…...

【LeetCode每日一题:[面试题 17.05] 字母与数字-前缀和+Hash表】

题目描述 给定一个放有字母和数字的数组&#xff0c;找到最长的子数组&#xff0c;且包含的字母和数字的个数相同。 返回该子数组&#xff0c;若存在多个最长子数组&#xff0c;返回左端点下标值最小的子数组。若不存在这样的数组&#xff0c;返回一个空数组。 示例 1: 输入…...

华为OD机试题 - 简易压缩算法(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:简易压缩算法题目输入输出示例一输入输出说明示例二输入输出说明…...

Kubenates中的日志收集方案ELK(下)

1、rpm安装Logstash wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.7.rpm yum install -y logstash-6.8.7.rpm2、创建syslog配置 input {beats{port> 5044 } }output {elasticsearch {hosts > ["http://localhost:9200"]index …...

LeetCode - 42 接雨水

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1 输入&…...