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

【强烈建议收藏:MySQL面试必问系列之慢SQL优化专题】

在这里插入图片描述

一.知识回顾

学习本篇文章之前呢,我们可以先看一下【强烈建议收藏:MySQL面试必问系列之SQL语句执行专题】,看完这篇文章再来学习本篇文章可谓是如虎添翼。好的,那我们也不讲太多的废话,直接开始。

二.如何做慢SQL查询优化呢?

2.1 MySQL 慢查询的相关参数解释:

  1. slow_query_log:是否开启慢查询日志,ON(1)表示开启, OFF(0) 表示关闭。
  2. slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。
  3. long_query_time: 慢查询阈值,当查询时间多于设定的阈值时,记录日志。
  4. log_output: 是指定日志的存储方式。
  5. log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中。如果调优的话,建议开启这个选项。

2.2 慢查询配置方式

  1. 默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,我们可以通过以下的命令查看当前慢查询日志是否已经开发
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------+
| Variable_name       | Value                        |
+---------------------+------------------------------+
| slow_query_log      | OFF                           |
| slow_query_log_file | /var/lib/mysql/test-slow.log |
+---------------------+------------------------------+
  1. 可以通过设置slow_query_log的值来开启,命令实操如下所示:
mysql> set global slow_query_log=1;
  1. 使用 set global slow_query_log=1命令开启了慢查询日志,此时只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
    特别说明:以下实操是在Linux操作系统上完成的。
    打开my.cnf配置文件
# 编辑配置
vim /etc/my.cnf

添加如下内容

slow_query_log =1
slow_query_log_file=/var/lib/mysql/ruyuan-slow.log

配置成功后,重启MySQL

service mysqld restart
mysql> show variables like '%slow_query%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log      | ON                             |
| slow_query_log_file | /var/lib/mysql/ruyuan-slow.log |
+---------------------+--------------------------------+
  1. 开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢? 这个是由参数 long_query_time控制,默认情况下long_query_time的值为10秒。
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+mysql> set global long_query_time=5;
Query OK, 0 rows affected (0.00 sec)mysql>  show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
  1. 修改了变量long_query_time,但是查询变量long_query_time的值还是5,我们修改了,为什么没有显示呢?
    注意:使用命令 set global long_query_time=5 修改后,需要重新连接或新开一个会话才能看到修改值。
mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
  1. log_output 参数是指定日志的存储方式。log_output='FILE' 表示将日志存入文件,默认值是’FILE’。log_output='TABLE' 表示将日志存入数据库,这样日志信息就会被写入到 mysql.slow_log 表中。
mysql> SHOW VARIABLES LIKE '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+

MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=‘FILE,TABLE’。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。

  1. 系统变量 log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中,默认是关闭的。
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+mysql> set global log_queries_not_using_indexes=1;
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON    |
+-------------------------------+-------+

2.3 慢查询测试

  1. 执行 test_index.sql 脚本,监控慢查询日志内容
[root@localhost mysql]# tail -f /var/lib/mysql/ruyuan-slow.log 
/usr/sbin/mysqld, Version: 5.7.30-log (MySQL Community Server (GPL)). started with:
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
  1. 执行下面的SQL,执行超时 ,超过我们刚才设置的5s, 我们去查看慢查询日志
SELECT * FROM test_index WHERE  name = 'jack' OR id = '1' OR name = 'tom' OR id = '2';
  1. 查看日志内容并对日志做分析

我们得到慢查询日志后,最重要的一步就是去分析这个日志。我们先来看下慢日志里到底记录了哪些内容。

如下所示该内容是慢日志里其中一条SQL的记录内容,可以看到有时间戳,用户,查询时长及具体的SQL等信息

# Time: 2022-02-23T13:50:45.005959Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 6.724273  Lock_time: 0.000371 Rows_sent: 5  Rows_examined: 5000000
SET timestamp=1842325245;
SELECT * FROM test_index WHERE  name = 'jack' OR id = '1' OR name = 'tom' OR id = '2';
  • Time: 执行时间
  • User: 用户信息 ,Id信息
  • Query_time: 查询时长
  • Lock_time: 等待锁的时长
  • Rows_sent:查询结果的行数
  • Rows_examined: 查询扫描的行数
  • SET timestamp: 时间戳
  • SQL的具体信息

2.4 慢查询SQL优化思路

2.4.1 SQL性能下降的原因

  1. 等待时间长:锁表导致查询一直处于等待状态,之前的文章中我们学习过MySQL锁的机制,需要的同学可以看一下之前的文章。
  2. 执行时间长:导致执行时间长的原因也有很多,比如说我们的查询语句写的有问题、查询没有走索引,导致失效失效、 关联查询过多、服务器调优及各个参数的设置等方面。

2.4.2 慢查询优化思路

  1. 优先选择优化高并发执行的SQL,因为高并发的SQL发生问题带来后果更严重。

    比如下面两种情况:
    SQL1: 每小时执行10000次, 每次40个IO 优化后每次35个IO,每小时节省5万次IO
    SQL2: 每小时执行10次,每次40000个IO,每次优化减少5000个IO,每小时节省5万次IO
    SQL2更难优化,SQL1更好优化.但是第一种属于高并发SQL,更急需优化 成本更低

  2. 定位优化对象的性能瓶颈(一定要在优化之前了解性能瓶颈在哪?不能没有目标的瞎优化)

    在优化SQL时,选择优化分方向有三个:
    1.IO(数据访问消耗的了太多的时间,查看是否正确使用了索引) ,
    2.CPU(数据运算花费了太多时间, 数据的运算分组 排序是不是有问题)
    3.网络带宽(加大网络带宽)

  3. 明确优化目标

    需要根据数据库当前的状态、数据库中与该条SQL的关系、当前SQL的具体功能 、最好的情况消耗的资源,最差情况下消耗的资源,优化的结果只有一个给用户一个好的体验。说到底,还是要写出好的SQL语句。

  4. explain执行计划分析慢SQL语句

    explain可以展示当前SQL的执行状态,具体的一些细节我们后面展开学习。

  5. 永远用小的结果集驱动大的结果集
    小的数据集驱动大的数据集,减少内层表读取的次数,类似于嵌套循环。如果小的循环在外层,对于数据库连接来说就只连接10次,进行10000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗.这就是为什么要小表驱动大表。

    for(int i = 0; i < 10; i++){for(int i = 0; i < 1000; i++){//具体操作}
    }
    
  6. 尽可能在索引中完成排序

    排序操作用的比较多,order by 后面的字段如果在索引中,索引本来就是排好序的,所以速度很快,没有索引的话,就需要从表中拿数据,在内存中进行排序,如果内存空间不够还会发生落盘操作

  7. 不要使用select *,只获取自己需要的列

    不要使用select * ,select * 很可能不走索引,而且数据量过大

  8. 只使用最有效的过滤条件

    误区 where后面的条件越多越好,但实际上是应该用最短的路径访问到数据

  9. 尽可能避免复杂的join和子查询

    每条SQL的JOIN操作 建议不要超过三张表
    将复杂的SQL, 拆分成多个小的SQL 单个表执行,获取的结果 在程序中进行封装
    如果join占用的资源比较多,会导致其他进程等待时间变长

  10. 合理设计并利用索引
    后续我们会专门开一个专题来学习MySQL索引这块的知识内容。此处先做一个简单的了解。

    问题:如何判定是否需要创建索引?
    1.较为频繁的作为查询条件的字段应该创建索引.
    2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件.(唯一性太差的字段主要是指哪些呢?如状态字段,类型字段等等这些字段中的数据可能总共就是那么几个几十个数值重复使用)(当一条Query所返回的数据超过了全表的15%的时候,就不应该再使用索引扫描来完成这个Query了).
    3.更新非常频繁的字段不适合创建索引.(因为索引中的字段被更新的时候,不仅仅需要更新表中的数据,同时还要更新索引数据,以确保索引信息是准确的).
    4.不会出现在WHERE子句中的字段不该创建索引.
    问题2:如何选择合适索引?
    1.对于单键索引,尽量选择针对当前Query过滤性更好的索引.
    2.选择联合索引时,当前Query中过滤性最好的字段在索引字段顺序中排列要靠前.
    3.选择联合索引时,尽量索引字段出现在where中比较多的索引.

三.上面提到的explain详细讲讲,有哪些主要字段?

3.1 explain分析SQL语句的性能瓶颈

使用 explain 关键字可以模拟优化器来执行SQL查询语句,从而知道MySQL是如何处理我们的SQL语句的。分析出查询语句或是表结构的性能瓶颈。

MySQL查询过程

image.png

通过explain我们可以获得以下信息:

  • 表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可以被使用
  • 哪些索引真正被使用
  • 表的直接引用
  • 每张表的有多少行被优化器查询了

Explain使用方式: explain+sql语句, 通过执行explain可以获得sql语句执行的相关信息

explain select * from users;

3.2 explain解释执行后的SQL语句有哪些字段?

  1. id:select 查询序列号。id相同,执行顺序由上至下;id不同,id值越大优先级越高,越先被执行。
  2. select_type:查询数据的操作类型,其值如下:

    simple:简单查询,不包含子查询或 union
    primary:包含复杂的子查询,最外层查询标记为该值
    subquery:在 select 或 where 包含子查询,被标记为该值
    derived:在 from 列表中包含的子查询被标记为该值,MySQL 会递归执行这些子查询,把结果放在临时表
    union:若第二个 select 出现在 union 之后,则被标记为该值。若 union 包含在 from 的子查询中,外层 select 被标记为 derived
    union result:从 union 表获取结果的 select

  3. table:显示该行数据是关于哪张表
  4. partitions:匹配的分区
  5. type:表的连接类型,其值,性能由高到底排列如下:
    (1)type字段显示的是表示的是用什么样的方式来获取数据,它描述了找到所需数据所使用的扫描方式, 是较为重要的一个指标。
    (2)一般来说,需要保证查询至少达到 range级别,最好能到ref,否则就要就行SQL的优化调整。
    下面介绍type字段不同值表示的含义:
type类型解释
system不进行磁盘IO,查询系统表,仅仅返回一条数据
const查找主键索引,最多返回1条或0条数据. 属于精确查找
eq_ref查找唯一性索引,返回数据最多一条, 属于精确查找
ref查找非唯一性索引,返回匹配某一条件的多条数据,属于精确查找,数据返回可能是多条.
range查找某个索引的部分索引,只检索给定范围的行,属于范围查找. 比如: > 、 < 、in 、between
index查找所有索引树,比ALL快一些,因为索引文件要比数据文件小.
ALL不使用任何索引,直接进行全表扫描
  1. possible_keys:显示 MySQL 理论上使用的索引,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。如果该值为 NULL,说明没有使用索引,可以建立索引提高性能
  2. key:显示 MySQL 实际使用的索引。如果为 NULL,则没有使用索引查询
  3. key_len:表示索引中使用的字节数,通过该列计算查询中使用的索引的长度。在不损失精确性的情况下,长度越短越好 显示的是索引字段的最大长度,并非实际使用长度
  4. ref:显示该表的索引字段关联了哪张表的哪个字段
  5. rows:根据表统计信息及选用情况,大致估算出找到所需的记录或所需读取的行数,数值越小越好
  6. filtered:返回结果的行数占读取行数的百分比,值越大越好
  7. extra:包含不合适在其他列中显示但十分重要的额外信息,常见的值如下:
    extra是 explain输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,如下所示:
extra类型解释
Using filesortMySQL中无法利用索引完成的排序操作称为 “文件排序”
Using index表示直接访问索引就能够获取到所需要的数据(覆盖索引),不需要通过索引回表
Using index condition搜索条件中虽然出现了索引列,但是有部分条件无法使用索引, 会根据能用索引的条件先搜索一遍再匹配无法使用索引的条件。
Using join buffer使用了连接缓存, 会显示join连接查询时,MySQL选择的查询算法
Using temporary表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询
Using where意味着全表扫描或者在查找使用索引的情况下,但是还有查询条件不在索引字段当中

四.如何进行分页查询优化?

4.1 分页查询格式

一般的分页查询使用简单的 limit 子句就可以实现。limit格式如下:

SELECT * FROM 表名 LIMIT [offset,] rows
  • 第一个参数指定第一个返回记录行的偏移量,注意从0开始;
  • 第二个参数指定返回记录行的最大数目;
  • 如果只给定一个参数,它表示返回最大的记录行数目;

4.2 偏移量和返回的数目对分页查询效率的影响

思考1:如果偏移量固定,返回记录量对执行时间有什么影响?

select * from user limit 10000,1;
select * from user limit 10000,10;
select * from user limit 10000,100;
select * from user limit 10000,1000;
select * from user limit 10000,10000;

结果:在查询记录时,返回记录量低于100条,查询时间基本没有变化,差距不大。随着查询记录量越大,所花费的时间也会越来越多。

思考2:如果查询偏移量变化,返回记录数固定对执行时间有什么影响?

select * from user limit 1,100;
select * from user limit 10,100;
select * from user limit 100,100;
select * from user limit 1000,100;
select * from user limit 10000,100;

结果:在查询记录时,如果查询记录量相同,偏移量超过100后就开始随着偏移量增大,查询时间急剧的增加。

4.3 分页查询优化

优化1: 通过索引进行分页

  1. 直接进行limit操作会产生全表扫描,速度很慢。Limit限制的是从结果集的M位置处取出N条输出,其余抛弃。
  2. 假设ID是连续递增的,我们根据查询的页数和查询的记录数可以算出查询的id的范围,然后配合 limit使用
EXPLAIN SELECT * FROM user WHERE id  >= 100001 LIMIT 100;

优化2:利用子查询优化

  1. 首先定位偏移位置的id,通过子查询找到比较的值,使用覆盖索引进行优化。
# 根据获取到的id值向后查询
EXPLAIN SELECT * FROM user_contacts WHERE id >=
(SELECT id FROM user_contacts LIMIT 100000,1) LIMIT 100;

特别感谢:部分引用来自马士兵教育

相关文章:

【强烈建议收藏:MySQL面试必问系列之慢SQL优化专题】

一.知识回顾 学习本篇文章之前呢&#xff0c;我们可以先看一下【强烈建议收藏:MySQL面试必问系列之SQL语句执行专题】&#xff0c;看完这篇文章再来学习本篇文章可谓是如虎添翼。好的&#xff0c;那我们也不讲太多的废话&#xff0c;直接开始。 二.如何做慢SQL查询优化呢&…...

windows,liunx,java实现apk解压,去签名、重新签名,重新打包apk

背景&#xff1a;由于项目需要&#xff0c;需要将apk包加入服务端返回的静态资源文件到apk中&#xff0c;形成离线apk包供下载安装。经过调查研究&#xff0c;决定使用apktool实现。关于apktool的资料可以参考 https://blog.csdn.net/quantum7/article/details/124060620 htt…...

【Linux】进程信号

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;信号入门&…...

SpringBoot 集成Junit单元测试

学习文章: https://www.cnblogs.com/ysocean/p/6889906.html 开发工具: IDEA 2022.1.4 目录 目录 1. 概述 2. 实现步骤 2.1 maven导入依赖 2.2 随意代码演示(不推荐) 2.3 规范代码演示(推荐) 3. Junit相关其他注解 4. 注意事项 5. 结语 1. 概述 接触到Junit&#xff0c;…...

Android开发之简单控件

文章目录一 文本显示1.1 文本设置的两种方式1.2 常见字号单位类型2.2 设置文本的颜色三 视图基础3.1 设置视图的宽高3.2 设置视图的间距3.3 设置视图的对齐方式四常用布局4.1 线性布局LinearLayout4.2 相对布局RelativeLayout4.3 网格布局GridLayout4.4 滚动视图ScrollView五 按…...

树状数组讲解

树状数组 文章目录树状数组引入例题AcWing241.楼兰图腾思路代码AcWing 242. 一个简单的整数问题思路代码AcWing 244. 谜一样的牛思路代码总结引入 树状数组主要维护的是这样一个数据结构&#xff1a; tr[x]表示以x为终点的长度为lowbit(x)的前缀和、最大值、最小值、最大公约数…...

每个Android开发都应需知的性能指标~

无论你是发布一个新的 Android 应用&#xff0c;还是希望提高现有应用的性能&#xff0c;你都可以使用 Android 应用性能指标来帮助你。 在这篇文章中&#xff0c;我将解释什么是 Android 应用性能指标&#xff0c;并列出8个需要考虑跟踪的维度和建议的基线。 什么是 Android…...

MSYS2安装

最近在学习windows上编译FFmpeg&#xff0c;需要用到msys2&#xff0c;在此记录一下安装和配置过程。 点击如下链接&#xff0c;下载安装包&#xff1a; Index of /msys2/distrib/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我下载的是&#xff1a;ms…...

3/3考试总结

时间安排 7:30–7:50 看题&#xff0c;怎么感觉三道构造&#xff0c;T3 貌似有网络流背景。 7:50–8:30 T1,有一些简单的性质&#xff0c;缩减两端点后枚举一下翻转的区间就可以了。然后花了一点时间写 spj 调试。 8:30–10:20 T2,比较纯粹的构造题。有网络流做法&#xff0c;…...

Spark Streaming DStream转换

DStream上的操作与RDD的类似&#xff0c;分为Transformations&#xff08;转换&#xff09;和Output Operations&#xff08;输出&#xff09;两种&#xff0c;此外转换操作中还有一些比较特殊的算子&#xff0c;如&#xff1a;updateStateByKey()、transform()以及各种Window相…...

水果商城,可运行

文章目录项目介绍一、技术栈二、本项目分为前后台&#xff0c;有管理员与用户两种角色&#xff1b;1、管理员角色包含以下功能&#xff1a;2、用户角色包含以下功能&#xff1a;三、用户功能页面展示四、管理员功能页面展示五、部分代码展示六、获取整套项目源码项目介绍 一、…...

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3、尝试触发摄像头…...

软件测试---测试分类

一 : 按测试对象划分 1.1 可靠性测试 可靠性&#xff08;Availability&#xff09;即可用性&#xff0c;是指系统正常运行的能力或者程度&#xff0c;一般用正常向用户提供软件服务的时间占总时间的百分比表示。 1.2 容错性测试 行李箱 , 四个轮子 , 坏了一个 , 说明这个容错…...

剑指 Offer II 015. 字符串中的所有变位词

题目链接 剑指 Offer II 015. 字符串中的所有变位词 mid 题目描述 给定两个字符串 s和 p&#xff0c;找到 s中所有 p的 变位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 变位词 指字母相同&#xff0c;但排列不同的字符串。 示例 1&#xff1a; 输…...

【SpringCloud】SpringCloud详细教程之微服务比较

目录前言一.什么是微服务&#xff1f;为什么要使用微服务二.微服务对比三.企业开发场景前言 我会通过实际代码来给展示每个组件的用法 一.什么是微服务&#xff1f;为什么要使用微服务 分布式&#xff0c;把一个项目拆分成多个模块&#xff0c;每一个模块相当于一个服务。 微…...

二.项目使用vue-router,引入ant-design-vue的UI框架,引入less

根据前文《使用Vue脚手架工具搭建vue项目》搭建好脚手架后使用 1.vue-router 2.引入UI框架ant design vue 3.引入less 1.vue-router vue-router分为两种模式(默认为hash模式)&#xff1a; hash history hash&#xff1a; 特征&#xff1a; 1.hash会在浏览器路径里带#号&#…...

网络安全怎么学?20年白帽子老江湖告诉你

很多人都知道龙叔是个老程序员&#xff0c;但却不知道其实我也是个H客&#xff0c;20年前我就开始痴迷于H客技术&#xff0c;可以说是网络安全方面的老江湖了。 到现在&#xff0c;我还依然会去研究这一块&#xff0c;偶尔会和一些网安的朋友交流技术&#xff0c;比如说红盟的…...

药房管理系统;药库管理系统

第一&#xff0c;主要功能&#xff1a;  本系统集日常销售、药品进销存、会员积分、GSP管理等药店所需的所有功能于一体&#xff0c;实现店铺管理的全部自动化。第二、新功能&#xff1a;  增加了“按功能查询药品”的功能&#xff0c;使软件用户可以根据客户的症状推荐合适…...

深眸科技|机器视觉提升制造性能,焕发传统企业智造新活力!

随着机器视觉技术的成熟与发展&#xff0c;其在工业制造中得到越来越广泛的应用。机器视觉在工业制造领域的应用朝着智能识别、智能检测、智能测量以及智能互联的完整智能体系方向发展。此外&#xff0c;快速变化的市场需求&#xff0c;不断涌入行业的竞争对手&#xff0c;让传…...

ubuntu安装SSH的方法

Ubuntu安装SSH的方法。14版的ubuntu经过测试&#xff0c;默认没有开启SSH&#xff0c;所以需要安装。 1、虚拟机设置网卡为桥接模式&#xff0c;即NAT。12版虚拟机默认的。 2、查看ubuntu使用的ip。 ifconfig即可查看&#xff0c;14版的ubuntu自带这个命令。 3、查看是否pi…...

哪种蓝牙耳机通话效果好?通话清晰的蓝牙耳机推荐

出门的时候&#xff0c;如果戴耳机和别人通话&#xff0c;就不必把耳机摘下来&#xff0c;接电话变得前所未有的简单。现在的蓝牙耳机&#xff0c;已经不是单纯的用来听音乐了&#xff0c;而是一种更好的功能。下面这四款蓝牙耳机不仅适合听歌&#xff0c;通话还清晰&#xff0…...

IT运维如何完成一场高质量复盘

复盘的终极目标是&#xff1a;还原事实&#xff0c;找到薄弱点加以改进。 提到复盘&#xff0c;很多人的第一反应是线上故障&#xff0c;有人要背锅了。 复盘真正的价值是还原事实&#xff0c;在薄弱处加以改进。如何做一次高质量的复盘&#xff0c;我们给出3点建议。 1、坦…...

JVM调优面试题——基础知识

文章目录1、JDK&#xff0c;JRE以及JVM的关系2、编译器到底干了什么事&#xff1f;3、类加载机制是什么&#xff1f;3.1、装载(Load)3.2、链接(Link)3.3、初始化(Initialize)4、类加载器有哪些&#xff1f;5、什么是双亲委派机制&#xff1f;6、介绍一下JVM内存划分&#xff08…...

三、mongdb 查询

一、 MongoDB文档检索 MongoDB中有多种方式可以检索文档: 1.1 查询过滤器 使用查询过滤器从集合中检索文档。查询过滤器是一组键值对,可按字段值查询文档。 例如: db.col.find({"status":"A"})这个示例查询status等于“A”的文档。 1.2 范围查询操作符…...

python的 ping 网络状态监测方法(含多IP)

ping 基本概念 ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令&#xff0c; 主要是向特定的目的主机发送 ICMP&#xff08;Internet Control Messag…...

【独家】华为OD机试提供C语言题解 - 单词反转

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明单词…...

Linux docker环境安装,docker-compose安装,jdk17安装

安装docker 删除之前安装的docker yum remove docker \docker-client \docker-client-latest \docker- common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-sqlinux \docker-engine-selinux \docker-engine \docker-ce安装yum工具 yum install -y y…...

界面开发(3)--- PyQt5用户登录界面连接数据库

文章目录数据库账户注册账号登录找回密码为了实现用户登录界面的登录功能&#xff0c;我们必须建立一个数据库&#xff0c;并把账号和对应的密码&#xff0c;存储到数据库中。如果输入的账号和密码与数据库中的一致&#xff0c;那我们就允许用户登录&#xff0c;进入新的界面。…...

以下真的没有任何要写的了,我需要凑字数,请大家原谅

以下真的没有任何要写的了&#xff0c;我需要凑字数&#xff0c;请大家原谅&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#…...

2023年 Java 发展趋势

GitHub 语言统计表明&#xff0c;Java在编程语言中排名第二&#xff0c;而在2022年的TIOBE指数中&#xff0c;Java排在第四。 抛开排名&#xff0c;Java是自诞生以来企业使用率最高的编程语言&#xff0c;作为一种编程语言&#xff0c;它比许多竞争对手都有更多的优点&#xf…...

沈阳思路网站制作/企业网站seo多少钱

c语言程序设计课程设计报告gysC 语言程序设计课程设计材料C语言程序设计课程设计报告学生姓名&#xff1a; 钱朝政 学 号&#xff1a; 131408115系 (院)&#xff1a; 信息工程学院专 业&#xff1a; 物联网工程设计(论 )题目: 职工信息管理系统完成日期: 2013年12月30 日&#…...

怎样免费建一个网站/怎么建公司网站

储蓄这个词&#xff0c;在中国人来看&#xff0c;已经很是熟悉了。 中国人爱储蓄&#xff0c;全球皆知&#xff01; 我们从开始工作挣钱后&#xff0c;父母就安排我们&#xff1a;“钱不要乱花&#xff0c;能存就先存起来。” 但回头看一下自己的支付宝账单&#xff0c;我们…...

太原网站建设世纪优创/最好的网络营销软件

来都来了,怎么说也你也踩下我的说说是吧,求回复...

做网站不赚钱了/app制作一个需要多少钱

题目&#xff1a;子线程循环10次&#xff0c;接着主线程循环100次&#xff0c;接着又回到子线程循环10次&#xff0c;接着再回到主线程100次&#xff0c;如此循环50次&#xff0c;请写出程序。 1 public class TraditionalThreadSynchronized2 {2 public static void main(…...

wordpress默认密码恢复/最全bt搜索引擎入口

软件问题1.病毒&#xff0c;升级杀毒软件&#xff0c;进安全模式下杀毒。2.系统文件损坏&#xff0c;覆盖安装或重装系统。3.启动项问题&#xff0c;开始--运行--msconfig 除了ctfmon外 其余的全部去掉。硬件问题1.机箱电源功率不足&#xff0c;引起自动重启&#xff0c;更换高…...

怎么把自己做的网站放到百度上/网络营销推广的方法有哪些

文章目录一、提出问题二、主线程与子线程三、线程池四、异常的捕获五、事务的回滚一、提出问题 最近有一位朋友问了我这样一个问题&#xff0c;问题的截图如下&#xff1a; 这个问题问的相对比较笼统&#xff0c;我来稍微详细的描述下&#xff1a;主线程向线程池提交了一个任务…...