【java面试】MySQL篇

news2025/7/24 1:43:31

MySQL篇

  • 一、总体结构
  • 二、优化
    • (一)定位慢查询
      • 1.1 开源工具
      • 1.2Mysql自带的慢日志查询
      • 1.3 总结
    • (二)定位后优化
      • 2.1 优化
      • 2.2 总结
    • (三)索引
      • 3.1 索引
      • 3.2 索引底层数据结构——B+树
      • 3.3 总结
    • (四)聚簇索引、非聚簇索引
      • 4.1 聚簇索引、非聚簇索引
      • 4.2 回表查询
      • 4.3 总结
    • (五)覆盖索引
      • 5.1 覆盖索引
      • 5.3 MYSQL超大分页
      • 5.3 总结
    • (六)索引创建原则
      • 6.1 原则
      • 6.2 总结
    • (七)索引失效
      • 7.1 索引失效的情况
      • 7.2 总结
    • (八)优化经验
      • 8.1 表的设计优化
      • 8.2 SQL语句优化
      • 8.3 主从复制、读写分离
      • 8.4 总结
  • 三、其他面试
    • (一)事务
      • 1.1 事务特性
      • 1.2 并发事务
      • 1.3 解决并发事务问题——隔离
      • 1.4 undo Log 和redo log
          • 1.4.1 重做日志
        • 1.4.2 回滚日志 undo log
      • 1.5 MVCC
        • 1.5.1 记录中的隐藏字段
        • 1.5.2 undo log
        • 1.5.3 readView
    • (二)主从同步原理
    • (三)分库分表
      • 1、垂直拆分
        • 1.1 垂直分库
        • 1.2 垂直分表
      • 2、 水平拆分
        • 2.1 水平分库
        • 2.2 水平分表
      • 3、分库分表新问题及其解决方案
      • 4、总结

一、总体结构

在这里插入图片描述
在这里插入图片描述

二、优化

(一)定位慢查询

问:在mysql如何进行慢查询?

出现的情况:

  • 聚合查询
  • 多表查询
  • 表数据量过大查询深度分页查询

具体现象:页面加载过慢、接口压测响应时间过长(超过1s)

1.1 开源工具

调试工具: Arthas
运维工具: Prometheus .Skywalking

1.2Mysql自带的慢日志查询

慢查询日志记录了所有执行时间超过指定参数(long _query_time,单位:秒,默认10秒)的所有SQL语句的日志如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
在这里插入图片描述
配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysgql/localhost-slow.log。
在这里插入图片描述

1.3 总结

在这里插入图片描述
在这里插入图片描述

(二)定位后优化

2.1 优化

问:这个SQL语句执行很慢,你是如何分析(优化)的呢?

在这里插入图片描述
可以采用EXPLAIN或者DESC命令获取 MySQL如何执行SELECT语句的信息。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 总结

在这里插入图片描述
在这里插入图片描述

(三)索引

3.1 索引

问:了解过索引吗(什么是索引)?

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

3.2 索引底层数据结构——B+树

索引的底层结构是什么? B+树

二叉树:时间复杂度不太稳定
在这里插入图片描述
红黑树:虽然保持了平衡,但是本质上也是二叉树,每个结点只有两个分支,查找效率不高
在这里插入图片描述
B树:B-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key。变成了矮胖树,解决了层级过高查找效率过低的问题,但是B树效率仍没有B+树优秀
在这里插入图片描述
B+树:B+ Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构。非叶子结点只存储指针不存储数据,只有最底层叶子结点才会存储数据,非叶子节点的作用是导航找到数据。
在这里插入图片描述

  • 磁盘读写代价B+树更低;
  • 查询效率B+树更加稳定;
  • B+树便于扫库和区间查询

3.3 总结

在这里插入图片描述
在这里插入图片描述

(四)聚簇索引、非聚簇索引

问:什么是聚簇索引?什么是非聚簇索引(二级索引)?(什么是回表查询?)

4.1 聚簇索引、非聚簇索引

讲解视频:聚簇索引和非聚簇索引的 区别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 回表查询

以上面为姓名列添加索引的二级索引为例,查询“name = “Arm””,由于给name字段添加了索引,那么现在会走二级索引,找到10,但我们需要查找的是全部信息select * ,通过查询到的主键ID10到聚簇索引中区查找,最终找到所有信息。
在这里插入图片描述

4.3 总结

在这里插入图片描述

在这里插入图片描述

(五)覆盖索引

5.1 覆盖索引

覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。
例如:在以下第二个例子中,通过“name = “Arm””可以直接查询 到id,并直接返回id,name。在第三个例子中gender不可以一次查询直接找到,而是需要回表查询。
在这里插入图片描述

5.3 MYSQL超大分页

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低
分页查询耗时对比:
在这里插入图片描述
因为,当在进行分页查询时,如果执行limit 9000000,10,此时需要MySQL排序前9000010记录,仅仅返回9000000 - 9000010的记录,其他记录丢弃,查询排序的代价非常大。

优化思路:一般分页查询时,通过创建覆盖索引能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化

在这里插入图片描述
在这里插入图片描述
视频讲解:MYSQL深度分页如何优化?

①先根据Id排序(只查询id,减少回表),返回10条索引——>覆盖索引
②在和之前的表做关联,做一个等价查询(通过id走主键索引,只查需要的10条
通过该过程办法,极大的优化了查询效率。

5.3 总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(六)索引创建原则

6.1 原则

  1. 针对于数据量较大,且查询比较频繁的表建立索引。单表超过10万数据(增加用户体验)
  2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
  3. 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
  4. 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
  6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
  7. 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。

6.2 总结

在这里插入图片描述
在这里插入图片描述

(七)索引失效

7.1 索引失效的情况

  1. 违背最左前缀法则
    如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。匹配最左前缀法则,走索引:(a,b,c的联合索引包含:a,ab,abc这三种情况
    表的情况:
    在这里插入图片描述
    遵循最左前缀法则的查询:
    在这里插入图片描述失效的情况:
    在这里插入图片描述
    符合最左法则,但是跳跃了中间某一列,那么只能查询到符合的:
    在这里插入图片描述

  2. 范围查询右边的列,不能使用索引
    在这里插入图片描述

  3. 索引列上进行运算操作,索引也会失效
    在这里插入图片描述

  4. 字符串不加单引号,导致索引失效
    在这里插入图片描述
    由于,在查询是,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换造成索引失效。

  5. 模糊查询,有可能导致索引失效:以%开头Like模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。
    在这里插入图片描述

7.2 总结

在这里插入图片描述
在这里插入图片描述

(八)优化经验

问: 谈一谈对sql优化的经验

在这里插入图片描述

8.1 表的设计优化

表的设计优化 参考:阿里开发手册《嵩山版》

  1. 比如设置合适的数值(tinyint int bigint),要根据实际情况选择
  2. 比如设置合适的字符串类型(char和varchar) char定长效率高,varchar可变长度,效率稍低

8.2 SQL语句优化

  1. SELECT语句务必指明字段名称(避免直接使用select * )
  2. SQL语句要避免造成索引失效的写法
  3. 尽量用union all代替union union会多一次过滤,效率低
    在这里插入图片描述
    union all 会将两次查询的结果直接组合起来,不会删除重复的部分,union过滤重复部分。
  4. 避免在where子句中对字段进行表达式操作
  5. Join优化能用innerjoin 就不用left join right join,如必须使用一定要以小表为驱动,内连接会对两个表进行优化,优先把小表放到外边,把大表放到里边。left join或right join,不会重新调整顺序

在这里插入图片描述
以该循环为例子,只需要进行三次小循环(三次连接数据库的操作)后再每次连接中执行其中操作即可。

8.3 主从复制、读写分离

如果数据库的使用场景读的操作比较多的时候,为了避免写的操作所造成的性能影响可以采用读写分离的架构。读写分离解决的是,数据库的写入,影响了查询的效率。
在这里插入图片描述

8.4 总结

在这里插入图片描述
在这里插入图片描述

三、其他面试

(一)事务

1.1 事务特性

事务特性:ACID
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性 (Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
    在这里插入图片描述

在这里插入图片描述

1.2 并发事务

问:并发事务带来哪些问题?怎么解决这些问题呢?MySQL的默认隔离级别是?
并发事务问题: 脏读、不可重复读、幻读
解决方案:隔离
隔离级别: 读未提交、读已提交、可重复读、串行化

在这里插入图片描述
在解决了不可重复读的基础上(事务回滚了)
在这里插入图片描述

1.3 解决并发事务问题——隔离

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.4 undo Log 和redo log

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

在这里插入图片描述
操作时,为提高效率会首先操作内存结构中的缓冲池,操作结束后会将信息同步到磁盘中(还未同步的称为脏页),但是同步过程中会出现宕机的现象,导致无法同步,内存中数据无法保存太久,最后会消失,无法做到持久化。

1.4.1 重做日志

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

在这里插入图片描述

1.4.2 回滚日志 undo log

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

在这里插入图片描述
在这里插入图片描述

1.5 MVCC

问:事务的隔离性是如何保证的?
锁:排他锁(如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁)
mvcc:多版本并发控制

全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突
MVCC的具体实现,主要依赖于数据库记录中的隐式字段undo log日志readView

在这里插入图片描述

1.5.1 记录中的隐藏字段

在这里插入图片描述
在这里插入图片描述

1.5.2 undo log
  • 回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。
  • 当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即册除。
  • 而update、delete的时候,产生的undo log日志不仅在回滚时需要,mvcc版本访问也需要,不会立即被删除。

在这里插入图片描述
不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部爆最早的旧记录。

1.5.3 readView

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

(二)主从同步原理

在这里插入图片描述
MySQL主从复制的核心就是二进制日志
二进制日志(BINLOG)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句
但不包括数据查询(SELECT、SHQW)语句。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(三)分库分表

只有一个从库不够用,分库分表分担了访问压力。
分库分表的时机:

  • 项目业务数据逐渐增多,或业务发展比较迅速单表的数据量达1000W20G以后
  • 优化已解决不了性能问题(主从读写分离、查询索引…)
  • IO瓶颈(磁盘IO、网络lO)、CP心瓶颈(聚合查询、连接数太多)
    在这里插入图片描述
    在这里插入图片描述

1、垂直拆分

1.1 垂直分库

以表为依据,根据业务将不同表拆分到不同库中。
在这里插入图片描述
特点:

  1. 按业务对数据分级管理、维护、监控、扩展
  2. 在高并发下,提高磁盘IO和数据量连接数
1.2 垂直分表

以字段为依据,根据字段属性将不同字段拆分到不同表中。
拆分规则:把不常用的字段单独放在一张表,把text,blob等大字段拆分出来放在附表中
在这里插入图片描述
特点:

  1. 冷热数据分离(经常访问的就是热数据,不常访问的就是冷数据)
  2. 减少IO过渡争抢,两表互不影响

2、 水平拆分

2.1 水平分库

将一个库的数据拆分到多个库中。表结构、字段属性都是一模一样的,但是把表分在了很多个不同的地方(库)。

路由规则:

  • 根据id节点取模
  • 按id也就是范围路由,节点1(1-100万),节点2(100万-200万)

在这里插入图片描述
特点:

  1. 解决了单库大数量,高并发的性能瓶颈问题
  2. 提高了系统的稳定性和可用性
2.2 水平分表

将一个表的数据拆分到多个表中,同样的字段属性一模一样,但是数据存储不同。
在这里插入图片描述

特点:

  1. 优化单一表数据量过大而产生的性能问题;
  2. 避免IO争抢并减少锁表的几率;

3、分库分表新问题及其解决方案

在这里插入图片描述
分库之后的问题:

  • 分布式事务一致性问题
  • 跨节点关联查询
  • 跨节点分页、排序函数
  • 主键避重

解决方案:采用中间件
在这里插入图片描述

4、总结

在这里插入图片描述

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

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

相关文章

贪心算法应用:欧拉路径(Fleury算法)详解

Java中的贪心算法应用:欧拉路径(Fleury算法)详解 一、欧拉路径与欧拉回路基础 1.1 基本概念 欧拉路径(Eulerian Path)是指在一个图中,经过图中每一条边且每一条边只经过一次的路径。如果这条路径的起点和…

【算法设计与分析】实验——二维0-1背包问题(算法分析题:算法思路),独立任务最优调度问题(算法实现题:实验过程,描述,小结)

说明:博主是大学生,有一门课是算法设计与分析,这是博主记录课程实验报告的内容,题目是老师给的,其他内容和代码均为原创,可以参考学习,转载和搬运需评论吱声并注明出处哦。 要求:3-…

【Git】View Submitted Updates——diff、show、log

在 Git 中查看更新的内容(即工作区、暂存区或提交之间的差异)是日常开发中的常见操作。以下是常用的命令和场景说明: 文章目录 1、查看工作区与暂存区的差异2、查看提交历史中的差异3、查看工作区与最新提交的差异4、查看两个提交之间的差异5…

deepseek原理和项目实战笔记2 -- deepseek核心架构

混合专家(MoE) ​​混合专家(Mixture of Experts, MoE)​​ 是一种机器学习模型架构,其核心思想是通过组合多个“专家”子模型(通常为小型神经网络)来处理不同输入,从而提高模型的容…

在 MATLAB 2015a 中如何调用 Python

在 MATLAB 2015a 中调用 Python 可通过系统命令调用、.NET 交互层包装、MEX 接口间接桥接、环境变量配置四种方式,但因该版本对 Python 支持有限,主要依赖的是系统命令调用与间接脚本交互。其中,通过 system() 函数调用 Python 脚本是最简单且…

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋类型、房屋信息、预约看房、合同信息、房屋报修、房屋评价、房主管理模块

房屋租赁系统 JavaVue.jsSpringBoot,包括房屋类型、房屋信息、预约看房、合同信息、房屋报修、房屋评价、房主管理模块 百度云盘链接:https://pan.baidu.com/s/1KmwOFzN9qogyaLQei3b6qw 密码:l2yn 摘 要 社会的发展和科学技术的进步&#xf…

华为OD机试真题——生成哈夫曼树(2025B卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…

Redis最佳实践——性能优化技巧之监控与告警详解

Redis 在电商应用的性能优化技巧之监控与告警全面详解 一、监控体系构建 1. 核心监控指标矩阵 指标类别关键指标计算方式/说明健康阈值(参考值)内存相关used_memoryINFO Memory 获取不超过 maxmemory 的 80%mem_fragmentation_ratio内存碎片率 used_m…

R3GAN训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异…

【容器docker】启动容器kibana报错:“message“:“Error: Cannot find module ‘./logs‘

说明: 1、服务器数据盘挂了,然后将以前的数据用rsync拷贝过去,启动容器kibana服务,报错信息如下图所示: 2、可能是拷贝docker文件夹,有些文件没有拷贝过去,导致无论是给文件夹授权用户kibana或者…

C#里与嵌入式系统W5500网络通讯(4)

怎么样修改W5500里的socket收发缓冲区呢? 需要进行下面的工作,首先要了解socket缓冲区的作用,接着了解缓冲区的硬件资源, 最后就是要了解自己的需求,比如自己需要哪个socket的收发送缓冲区多大。 硬件的寄存器为: 这是 W5500 数据手册中关于 Sn_RXBUF_SIZE(Socket n …

Spring boot集成milvus(spring ai)

服务器部署Milvus Run Milvus with Docker Compose (Linux) milvus版本可在docker-compose.yml中进行image修改 启动后,docker查看启动成功 spring boot集成milvus 参考了这篇文章 Spring AI开发RAG示例,理解RAG执行原理 但集成过程中遇到了一系列…

Visual Studio+SQL Server数据挖掘

这里写自定义目录标题 工具准备安装Visual studio 2017安装SQL Server安装SQL Server Management Studio安装analysis service SSMS连接sql serverVisual studio新建项目数据源数据源视图挖掘结构部署模型设置挖掘预测 部署易错点 工具准备 Visual studio 2017 analysis servi…

通过阿里云服务发送邮件

通过阿里云服务发送邮件 1. 整体描述2. 方案选择2.1 控制台发送2.2 API接口接入2.3 SMTP接口接入2.4 结论 3. 前期工作3.1 准备工作3.2 配置工作3.3 总结 4. 收费模式4.1 免费额度4.2 资源包4.3 按量付费 5. Demo开发5.1 选择SMTP服务器5.2 pom引用5.3 demo代码5.4 运行结果 6 …

Vad-R1:通过从感知到认知的思维链进行视频异常推理

文章目录 速览摘要1 引言2 相关工作视频异常检测与数据集视频多模态大语言模型具备推理能力的多模态大语言模型 3 方法:Vad-R13.1 从感知到认知的思维链(Perception-to-Cognition Chain-of-Thought)3.2 数据集:Vad-Reasoning3.3 A…

黑马Java面试笔记之MySQL篇(事务)

一. 事务的特性 事务的特性是什么?可以详细说一下吗? 事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失…

群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案

群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案 老机器 装的win7 系统 登入后端网页端的时候正常,但是本地访问登入时输入登入网页端一样的密码时候出现问题解决方案 1.登…

【深度学习】实验四 卷积神经网络CNN

实验四 卷积神经网络CNN 一、实验学时: 2学时 二、实验目的 掌握卷积神经网络CNN的基本结构;掌握数据预处理、模型构建、训练与调参;探索CNN在MNIST数据集中的性能表现; 三、实验内容 实现深度神经网络CNN。 四、主要实验步…

实现一个免费可用的文生图的MCP Server

概述 文生图模型为使用 Cloudflare Worker AI 部署 Flux 模型,是参照视频https://www.bilibili.com/video/BV1UbkcYcE24/?spm_id_from333.337.search-card.all.click&vd_source9ca2da6b1848bc903db417c336f9cb6b的复现Cursor MCP Server实现是参照文章https:/…

【手搓一个原生全局loading组件解决页面闪烁问题】

页面闪烁效果1 页面闪烁效果2 封装一个全局loading组件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…