Java开发之Mysql【面试篇 完结版】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、知识体系
- 二、Mysql-优化
- 1. 优化-如何定位慢查询
- ① 问题引入
- ② 解决方案
- ③ 问题总结
- ④ 实战面试
- 2. 优化-sql执行很慢,如何解决
- ① 问题引入
- ② 解决方案
- ③ 问题总结
- ④ 实战面试
- 3. 优化-索引概念
- ① 问题引入
- ② 数据结构对比
- ③ 问题总结
- ④ 实战面试
- 4. 优化-聚簇索引与非聚簇索引
- ① 问题引入
- ② 聚簇索引
- ③ 问题总结
- ④ 实战面试
- 5. 优化-覆盖索引
- ① 问题引入
- ② 覆盖索引
- ③ Mysql超大分页处理
- ④ 问题总结
- ⑤ 实战面试
- 6. 优化-索引创建的原则
- ① 问题引入
- ② 索引创建的原则
- ③ 问题总结
- ④ 实战面试
- 7. 优化-什么情况下索引会失效
- ① 问题引入
- ② 什么情况下索引会失效
- ③ 问题总结
- ④ 实战面试
- 8. 优化-SQL优化的经验
- ① 问题引入
- ② sql优化经验
- ③ 问题总结
- ④ 实战面试
- 三、Mysql-其他面试题
- 1. 事务的特性ACID
- ① 问题引入
- ② ACID是什么
- ③ 问题总结
- ④ 实战面试
- 2. 并发事务
- ① 问题引入
- ② 并发事务问题
- ③ 事务隔离
- ④ 问题总结
- ⑤ 实战面试
- 3. 事务-undo log和redo log的区别
- ① 问题引入
- ② redo log重做日志
- ③ undo log回滚日志
- ④ 问题总结
- ⑤ 实战面试
- 4. 事务-MVCC多版本并发控制(难)
- ① 问题引入
- ② MVCC多版本并发控制
- ③ 问题总结
- ④ 实战面试
- 5. Mysql主从同步原理
- ① 问题引入
- ② 主从同步原理
- ③ 问题总结
- ④ 实战面试
- 6. Mysql分库分表
- ① 问题引入
- ② 拆分策略
- ③ 问题总结
- 引用说明
前言
本文主要记录mysql的查询、索引、sql优化、事务、主从同步、分库分表等问题的分析与面试回答示例。
提示:以下是本篇文章正文内容,下面案例可供参考
一、知识体系


二、Mysql-优化
1. 优化-如何定位慢查询
① 问题引入

- 聚合查询
- 多表查询
- 表数据量过大查询
- 深度分页查询
表象:页面加载过慢、接口压测响应时间过长(超过1s)
② 解决方案
方案一:开源工具
调试工具:Arthas
运维工具:Prometheus 、Skywalking

方案二:Mysql自带慢日志
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log

③ 问题总结

④ 实战面试

2. 优化-sql执行很慢,如何解决
① 问题引入

- 聚合查询:新增临时表
- 多表查询:优化sql语句结构
- 表数据量过大查询:添加索引
- 深度分页查询
② 解决方案
一个SQL语句执行很慢,如何分析?
可以采用EXPLAIN 或者DESC命令获取MySQL如何执行SELECT语句的信息

展示SQL执行的情况,部分字段说明如下:

- possible_key 当前sql可能会使用到的索引
- key 当前sql实际命中的索引
- key_len 索引占用的大小
- Extra 额外的优化建议

- type这条sql的连接的类型,性能由好到差为NULL、system、const、 eq_ref、ref、range、index、all
system:查询系统中的表
const:根据主键查询(常用)
eq_ref:sql的查询条件是主键索引查询或唯一索引查询(返回一条数据)
ref:sql的查询条件是索引查询(返回多条数据)
range:索引范围查询
index:全索引查询,遍历整个索引数,效率不高(需要优化)
all:全盘扫描(需要优化)
③ 问题总结

可以采用MySQL自带的分析工具EXPLAIN
- 通过key和key_len检查是否命中了索引(索引本身存在是否有失效的情况)
- 通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描
- 通过extra建议判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复
④ 实战面试

3. 优化-索引概念
① 问题引入

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

维护树的数据结构,提高查找效率,减少IO的操作

B+树、二叉树、红黑树、B树
② 数据结构对比
MySQL默认使用的索引底层数据结构是B+树。再聊B+树之前,我们先聊聊二叉树和B树

B-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key

B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构

B树与B+树对比:
- 磁盘读写代价B+树更低(非叶子节点不存储数据);
- 查询效率B+树更加稳定(数据都存储在叶子节点);
- B+树便于扫库和区间查询(叶子节点之间使用的双向指针)
③ 问题总结

④ 实战面试

4. 优化-聚簇索引与非聚簇索引
① 问题引入

- 什么是聚集索引
- 什么是二级索引(非聚集索引)
- 什么是回表?
② 聚簇索引

聚集索引选取规则:
1.如果存在主键,主键索引就是聚集索引。
2.如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
3.如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

回表查询:先通过二级索引找到对应的主键值,在用主键值在聚集索引中去找整行的数据

③ 问题总结

④ 实战面试

5. 优化-覆盖索引
① 问题引入

覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

判断下面的SQL哪些是覆盖索引,为什么?
select * from tb_user where id = 1
是,因为根据id查询的,id默认是主键索引,就是聚簇索引,聚簇索引中对应的是整行的记录select id,name from tb_user where name = 'Arm'
是,因为通过name这个二级索引也可以找到id,是一次性可以查询出来id和name的select id,name,gender from tb_user where name = 'Arm'
不是,需要通过回表查询才能获取到gender
② 覆盖索引
覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

③ Mysql超大分页处理
在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。
我们一起来看看执行limit分页查询耗时对比:
因为,当在进行分页查询时,如果执行limit 9000000,10,此时需要MySQL排序前9000010记录,仅仅返回9000000 - 9000010 的记录,其他记录丢弃,查询排序的代价非常大。
优化思路:
一般分页查询时,通过创建覆盖索引能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化


④ 问题总结

⑤ 实战面试

6. 优化-索引创建的原则
① 问题引入

先陈述自己在实际的工作中是怎么用的
主键索引
唯一索引
根据业务创建的索引(复合索引)
② 索引创建的原则
-
针对于数据量较大,且查询比较频繁的表建立索引。单表超过10万数据 (增加用户体验)
-
针对于常作为查询条件(where)、排序(order by)、分组(group by) 操作的字段建立索引。
-
尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高(比如一个地区字段,大部分都是北京市,就不适合创建索引)。

-
如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引(比如简介内容想要创建索引,就采用前缀索引)。

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

-
要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
-
如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。
③ 问题总结

④ 实战面试

7. 优化-什么情况下索引会失效
① 问题引入

索引失效的情况有很多,可以说一些自己遇到过的。
给tb_seller创建联合索引,字段顺序: name,status,address

那快读判断索引是否失效了呢?执行计划explain
② 什么情况下索引会失效

-
违反最左前缀法则
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。匹配最左前缀法则,走索引。
有效的情况如下图所示:

失效的情况如下图所示(违反最左前缀法则):

-
范围查询右边的列,不能使用索引。
根据前面的两个字段name , status查询是走索引的,但是最后一个条件address没有用到索引。

-
不要在索引列上进行运算操作,索引将失效。

-
字符串不加单引号,造成索引失效。
由于,在查询是,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换,造成索引失效。

-
以%开头的Like模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

③ 问题总结

④ 实战面试

8. 优化-SQL优化的经验
① 问题引入

表的设计优化
索引优化(参考优化创建原则和索引失效)
SQL语句优化
主从复制、读写分离
分库分表
② sql优化经验
- 表的设计优化(参考阿里开发手册《嵩山版》)
a. 比如设置合适的数值(tinyint int bigint),要根据实际情况选择
b. 比如设置合适的字符串类型(char和varchar) char定长效率高.varchar可变长度,效率稍低 - SQL语句优化
a. SELECT语句务必指明字段名称(避免直接使用select* )
b. SQL语句要避免造成索引失效的写法
c. 尽量用union all代替union,union会多一次过滤,效率低
d. 避免在where子句中对字段进行表达式操作
e. Join优化能用inner join就不用left join right join,如必须使用一定要以小表为驱动,内连接会对两个表进行优化,优先把小表放到外边,把大表放到里边。left join或right join,不会重新调整顺序 - 主从复制、读写分离
如果数据库的使用场景读的操作比较多的时候,为了避免写的操作所造成的性能影响可以采用读写分离的架构。
读写分离解决的是,数据库的写入,影响了查询的效率。

③ 问题总结

④ 实战面试

三、Mysql-其他面试题
1. 事务的特性ACID
① 问题引入

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
② ACID是什么
- 原子性(Atomicity) :事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(Isolation) :数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

③ 问题总结

④ 实战面试

2. 并发事务
① 问题引入

● 并发事务问题:脏读、不可重复读、幻读
● 隔离级别:读未提交、读已提交、可重复读、串行化
② 并发事务问题
-
脏读:一个事务读到另外一个事务还没有提交的数据。

-
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

-
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

③ 事务隔离
对并发事务进行隔离,有以下隔离级别,如下图所示:

注意:事务隔离级别越高,数据越安全,但是性能越低。
④ 问题总结

⑤ 实战面试

3. 事务-undo log和redo log的区别
① 问题引入

undo log和redo log都是mysql的日志文件,但是功能不一样。
- 缓冲池(buffer pool):主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度
- 数据页(page):是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为16KB。页中存储的是行数据

② redo log重做日志
redo log 重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。
该日志文件由两部分组成:重做日志缓冲(redo log buffer) 以及重做日志文件(redo log file) ,前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。(每个一段时间会进行清理)

③ undo log回滚日志
undo log 回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和MVCC(多版本并发控制)。undo log和redo log记录物理日志不一样,它是逻辑日志。
- 可以认为当delete一条记录时,undo log中会记录一 条对应的insert记录, 反之亦然,
- 当update一条记录时, 它记录一条对应相反的update记录。 当执行rollback时, 就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
- undo log可以实现事务的一致性和原子性
④ 问题总结

⑤ 实战面试

4. 事务-MVCC多版本并发控制(难)
① 问题引入

锁:排他锁(如一 个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁)
mvcc:多版本并发控制
② MVCC多版本并发控制
MVCC全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突
MVCC的具体实现,主要依赖于数据库记录中的隐式字段、undo log日志、readView。
例如:下面有4个事务,事务2、3、4对该记录都进行了操作,那么在事务5中的两条查询语句是查询的哪个事务版本的记录呢?

MVCC的实现原理:
-
记录中的隐藏字段

-
undo log 回滚日志
a. 回滚日志,在insert、 update、 delete的时候产生的便于数据回滚的日志。
b. 当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。
c. 而update、delete的时候, 产生的undo log日志不仅在回滚时需要,mvcc版本访问也需要,不会立即被删除。 -
undo log 版本链
不同事务或相同事务对同一条记录进行修改,会导致该记录的undo log生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。

-
readview
ReadView (读视图)是 快照读 SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的) id。
a. 当前读:读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:
select … lock in share mode(共享锁),select … for update、update、 insert、 delete(排他锁)都是一 种当前读。
b. 快照读:简单的select (不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
Read Committed:每次select, 都生成一个快照读。
Repeatable Read:开启事务后第一个select语句才是快照读的地方。
举例说明:

当前读:不受隔离级别影响,事务A的两次select都是读到的最新的数据
快照读:不同的隔离级别不一样,RC读出来不一样,RR读出来都是相同的,获得的结果就是快照读
ReadView包含的四个核心字段:


不同的隔离级别,生成ReadView的时机不同:
➢ READ COMMITTED :在事务中每一 次执行快照读时生成ReadView。
➢ REPEATABLE READ:仅在事务中第一 次执行快照读时生成ReagView,后续复用该ReadView。


③ 问题总结

④ 实战面试

5. Mysql主从同步原理
① 问题引入

主从架构:主库用于写数据,从库用于读数据
主库与从库如何进行同步的?

② 主从同步原理
MySQL主从复制的核心就是二进制日志
二进制日志(bin log) 记录了所有的 DDL (数据定义语言,增删改查表结构) 语句和 DML (数据操纵语言,增删改查表中的数据) 语句,但不包括数据查询 (SELECT、 SHOW) 语句。
复制分成三步:
- Master 主库在事务提交时,会把数据变更记录在二进制日志文件Binlog中。
- 从库读取主库的二进制日志文件Binlog,写入到从库的中继日志Relay Log。
- slave重做中继日志中的事件,将改变反映它自己的数据。

③ 问题总结

④ 实战面试

6. Mysql分库分表
① 问题引入

主从架构,读写分离,分担了访问压力

分库分表的时机:
- 前提,项目业务数据逐渐增多,或业务发展比较迅速(单表的数据量达到1000W或20G以后)
- 优化已解决不了性能问题(主从读写分离、查询索引…)
- IO瓶颈(磁盘IO、网络IO)、CP\瓶颈(聚合查询、连接数太多)
分库分表主要解决存储的压力

② 拆分策略
垂直拆分与水平拆分

垂直拆分之垂直分库:以表为依据,根据业务将不同表拆分到不同库中。
特点:
1.按业务对数据分级管理、维护、监控、扩展
2.在高并发下,提高磁盘IO和数据量连接数

垂直拆分之垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。
特点:
1.冷热数据分离
2.减少IO过渡争抢,两表互不影响
拆分规则:
● 把不常用的字段单独放在一张表
● 把text、blob等大字段拆分出来放在附表中

水平拆分之水平分库:将一个库中的数据拆分到多个库中。
特点:
1.解决了单库大数量,高并发的性能瓶颈问题
2.提高了系统的稳定性和可用性
路由规则
● 根据id节点取模
● 按id也就是范围路由, 节点1(1-100万),节点2(100万-200万)

水平拆分之水平分表:将一个表的数据拆分到多个表中(可以在同一个库内)。
特点:
1.优化单一表数据量过大而产生的性能问题;
2.避免IO争抢并减少锁表的几率;

分库分表的策略有哪些?

③ 问题总结
常用垂直分库和垂直分表

引用说明
https://www.bilibili.com/video/BV1yT411H7YK?p=20&vd_source=98092b0aee05ae7c890b09fe07f13df4
相关文章:
Java开发之Mysql【面试篇 完结版】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、知识体系二、Mysql-优化1. 优化-如何定位慢查询① 问题引入② 解决方案③ 问题总结④ 实战面试 2. 优化-sql执行很慢,如何解决① 问题引入② 解…...
【实战】十二、自动化测试 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十九)
文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...
【人月神话】重新探索人月神话:软件工程的现实与挑战
人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作,最早发表于1975年。这篇文章的全名是《人月神话:软件工程的神话与现实》(The Mythical Man-Month: Essays on Software Engineering),它涵盖…...
电阻和电容
目录 1、常见的电阻器 2、电容 编辑 1、常见的电阻器 对于电阻需要了解三个参数(查询电阻的数据手册): 1、封装:就是电阻的尺寸或者大小,看焊在你的pcb板上是否合适。 2、标称:电阻的电阻大小、精度、…...
01-Java-日志框架
1 日志技术概述 1.1 什么是日志技术 日志技术是一种记录和存储应用程序运行时信息的技术。它可以捕获应用程序的状态、事件、错误和警告等信息,并将其保存到日志文件或其他存储介质中。日志技术可以帮助开发人员和运维团队了解应用程序的运行情况,进…...
【js】map、filter、reduce、fill(待补充...)
const arr [{ id: 1, flag: true },{ id: 2, flag: true },{ id: 3, flag: false },{ id: 4, flag: true }, ]map:返回的是对每个元素进行操作后的结果数组,这个数组的长度和原数组相同 const result arr.map((item: any) > {return item.flag fa…...
【JPC出版】第二届能源与电力系统国际学术会议 (ICEEPS 2023)
第二届能源与电力系统国际学术会议 (ICEEPS 2023) 2023 2nd International Conference on Energy and Electrical Power Systems 第二届能源与电力系统国际学术会议 (ICEEPS 2023)将于2023年10月27日至29日在中国厦门举行。ICEEPS 将汇集能源科学、电气工程和电力系统领域的…...
51单片机的简易篮球计分器倒计时仿真设计( proteus仿真+程序+原理图+报告+讲解视频)
51单片机的简易篮球计分器倒计时仿真设计( proteus仿真程序原理图报告讲解视频) 1.主要功能:2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 51单片机的简易篮球计分器倒计时仿真设计( proteus仿真程序原理图报告讲解视频…...
医院安全不良事件报告系统源码 PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发
不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”,结合预存上百套已正在使用的模板,帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…...
Mybatis -- 读取 DATE 类型字段时可能遇到的问题(夏令时问题)
在使用 MYBATIS 读取数据库字段的时候,我们一般需要为查询字段指定数据类型。特别是当我们使用 mybatis generator 去生成对应的接口代码时,会自动按照数据库字段类型生成响应映射规则的代码。 如下,左侧是 date 类型生成的字段映射规则&…...
第10节-PhotoShop基础课程-选区工具
文章目录 前言1.矩形选区 shift 是正方形1.任意比例2.等比绘制 先点击再按shift3.中心绘制1.任意比例 先点击再按Alt2.等比绘制 先点击再按Alt Shift 4.移动选区 按住空格 2.椭圆选区1.椭圆选区2.正圆选区 shift键3.中心圆选区 Alt Shift 3.选取选项1. 选区1.建立选区2.加选 s…...
【C++】C++动态内存管理
🏳️🌈C/C内存分布 说明: 1.我们的代码并非放在代码段里的,而是以文件的形式存在磁盘上的。 代码经过编译链接形成的二进制指令,才是放进代码段里的。(即可执行代码) 2.“abcd”如果没有被c…...
Java中使用JTS实现WKT字符串读取转换线、查找LineString的list中距离最近的线、LineString做缓冲区扩展并计算点在缓冲区内的方位角
场景 Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等): Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等)_jts-core_霸道流氓气质的博客-CSDN博客 JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换&…...
【异步VS多线程】异步VS多线程区别
异步VS多线程区别 1、异步 异步概念:异步是并发编程的一种形式,在同一时刻可以独立于主程序外,可以并发执行另外一些任务。异步的实现方式有两种: 第一种:通过 async TASK来实现异步,第二种:通…...
【nosql】redis之高可用(主从复制、哨兵、集群)搭建
redis群集有三种模式 redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster集群,下面会讲解一下三种模式的工作方式,以及如何搭建cluster群集 ●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从…...
js如何实现数组去重的常用方法
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Set(ES6)⭐ 使用 filter 和 indexOf⭐ 使用 reduce⭐ 使用对象属性⭐ 使用 includes 方法(ES6)⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方…...
XREAL Air 2 Pro发布,加入电致变色技术,拓展AR眼镜使用场景
【2023年9月6日 中国北京】继刚刚宣布XREAL Air在全球销量突破20万台后,全球领先的消费级AR眼镜品牌XREAL今日于中国市场正式推出XREAL Air 2系列新品。全新Air 2系列包含两款AR眼镜产品:在显示、佩戴舒适性、音频等核心维度全面升级,体验全面…...
Go基础11-理解Go语言的包导入
Go语言是使用包(package)作为基本单元来组织源码的,可以说一个Go程序就是由一些包链接在一起构建而成的。虽然与Java、Python等语言相比这算不上什么创新,但与祖辈C语言的头文件包含机制相比则是“先进”了许多。 编译速度快是这种…...
【MySQL数据库原理】在MySQL Workbench界面运行SQL代码——学生管理系统
在 MySQL Workbench 8.0 中,你可以使用以下步骤新建内容并运行 MySQL 语言代码: 1、打开 MySQL Workbench 并连接到你的 MySQL 数据库服务器。 2、在左侧的导航栏中,展开你的连接以查看数据库。选择你要在其中运行 SQL 代码的数据库。 3…...
高分三号1米分辨率飞机检测识别数据集
二、背景介绍 合成孔径雷达(Synthetic Aperture Radar, SAR) 是一种主动式的微波成像系统,它不受光照、云雾 和气候等自然条件影响,具备全天时、全天候对地 观测的能力,已成为遥感领域重要的信息获取平 台。近年来,随着遥感成像技…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
