【MySQL】如何速通MySQL(4)

news2024/11/24 6:29:24

📌前言:本篇博客介绍如何速通MySQL的第四篇,主要介绍Mysql中主要的基础的入门,学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。或者看一下下面这个链接,以及第一篇还没看的也建议先看第一篇噢~

🚀如何安装Mysql
🚀【MySQL】如何速通MySQL(1)
🚀【MySQL】如何速通MySQL(2)
🚀【MySQL】如何速通MySQL(3)

在第三篇如何速通MySQL中我们学习了MySQL中的增删改查进阶和表的设计,有基础部分就有进阶部分嘛,接下来介绍的就是一些抽象的知识和如何和Java联系起来~话不多说,走起!

关于如何速通MySQL(3)中篇幅过长,没有介绍联合查询,想看联合查询的小伙伴可以转看这里噢~
【MySQL】MySQL表之联合查询(多表查询)

MySQL如何速通MySQL

  • 一、索引
    • 1. 索引介绍
    • 2. 索引的使用
  • 二、事务
    • 1.ACID(数据库事务的四个基本特性)
      • ① 原子性(Atomicity)
      • ② 一致性(Consistency)
      • ③ 持久性(Durability)
      • ④ 隔离性(Isolation)
  • 三、B+树
    • 1.B树
    • 2.B+树
    • 3.B树和B+树之间的区别
  • 四、JDBC编程

一、索引

1. 索引介绍

✅索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现,它可以提高查询效率、减少查询时间和减轻数据库负担。

对于数据库中的索引:

  • 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
  • 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
  • 索引对于提高数据库的性能有很大的帮助。

在这里插入图片描述

要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

  1. 数据量较大,且经常对这些列进行条件查询。
  2. 该数据库表的插入操作,及对这些列的修改操作频率较低。
  3. 索引会占用额外的磁盘空间。

满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。

2. 索引的使用

创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

①.查看索引

show index from 表名
//show index from company;//查看公司表已有索引

查看索引的命令很简单,我们可以查看一下上面公司表的索引:

mysql> show index from company;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| company |          0 | PRIMARY  |            1 | id          | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

上面的表中表示该表名为 company,索引类型为 B-Tree 索引,包含了一个主键索引(PRIMARY KEY),非唯一性索引(Non_unique = 0),索引名为 PRIMARY,索引的第一个列(Seq_in_index)为 id,使用的排序方式(Collation)为 A(升序排序),索引的基数(Cardinality)为 7等信息。

该索引的作用是加速对 company 表中 id 列的查询和排序操作。由于该表的主键索引是唯一性索引,因此查询时不会出现重复记录。

②.创建索引

对于非主键、非唯一约束、非外键的字段,可以创建普通索引

create index 索引名 on 表名(字段名);
//create index idx_company_name on company(name);

在company表中创建关于name的索引:

mysql> show index from company;
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name         | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| company |          0 | PRIMARY          |            1 | id          | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| company |          1 | idx_company_name |            1 | name        | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

③.删除索引

drop index 索引名 on 表名;
//drop index idx_company_name on company(name);

二、事务

1.ACID(数据库事务的四个基本特性)

在 MySQL 中,事务是指一系列操作组成的逻辑单元,这些操作要么全部执行,要么全部撤销。

为什么要有事务呢,我们先用例子来了解一下:

有一天,小绿找小蓝借钱去约会,小蓝在转钱的时候但是数据库挂了,刚执行到减少小蓝2000余额的时候,后续操作即在小绿账户增加2000的数据库命令没有被执行…

在这里插入图片描述

这样子不就悲剧了?小蓝没了2000,小绿没了女神,我们得到了一个笑话,不不不,对于人道主义来说,还是要解决一下的!事务的本质就是将SQL命令打包,要么全部执行成功,要么全不执行。

解决方案:使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败。

这就是数据库事务四个基本特性的其中一个,原子性,并不是说真的不执行,而是遇到执行到一半失败后,执行回滚操作,恢复到执行前的状态。既然讲到数据库事务四个基本特性,我们先来简单了解一下:

ACID是数据库事务的四个基本特性的首字母缩写,分别是:

  1. 原子性(Atomicity):指事务是一个不可分割的操作序列,要么全部执行成功,要么全部执行失败,不存在部分执行的情况。在执行过程中,如果出现故障或者错误,需要进行回滚操作,将数据库恢复到事务开始前的状态。
  2. 一致性(Consistency):指事务在执行前和执行后,数据库必须处于一致的状态。即事务执行前和执行后,数据库中的数据应该符合预设的规则和约束。
  3. 隔离性(Isolation):指并发执行的事务之间应该互相隔离,每个事务的执行都应该与其它事务的执行相互独立。换句话说,就是在同一时刻,对同一数据进行修改的事务应该互相隔离,避免干扰和冲突。
  4. 持久性(Durability):指一旦事务被提交,那么它所做的修改将会永久保存到数据库中,不会因为系统故障或者其他原因导致数据的丢失。

ACID是保证数据库事务正确执行和维护数据完整性的基础,这四个特性的组合能够确保在数据库的多个事务并发执行时,数据库的正确性和数据的一致性得到保障。同时,ACID也为数据库应用提供了可靠性和安全性,确保数据的正确性和稳定性。


① 原子性(Atomicity)

正如上面说的一样,过去的人们将原子认为是事物能够分割的最小单位,所以原子性就是,将这一系列操作看成是一个原子事件,要么全部执行成功,要么全部执行失败,不存在部分执行的情况。在执行过程中,如果出现故障或者错误,需要进行回滚操作,将数据库恢复到事务开始前的状态。

此处需要额外的部分来记录事务中的操作步骤,数据库里专门有个用来记录事务的日志,正因为如此,使用事务的时候,执行sql的开销会更大,效率会更低

在数据库使用时:
(1)开启事务: start transaction;
(2)执行多条SQL语句
(3)回滚或提交: rollback/commit;
说明: rollback即是全部失败,commit即是全部成功。

mysql> start transaction;//开启日志
mysql> insert into company(name, role, salary) values ('虾兵','小弟', 1599.20);//中间就是本事务要执行的每一步
mysql> insert into company(name, role, salary) values ('蟹将','小弟', 2000.99);//中间就是本事务要执行的每一步
mysql> commit;//提交事务,相当于事务执行完了

② 一致性(Consistency)

一致性(Consistency)指的是事务执行前后,数据库必须保持一致性状态。这里的一致性状态主要指的是数据的约束条件和完整性,例如主键、外键、唯一性约束、默认值、检查约束等。

具体来说,在 MySQL 中,可以通过以下方式来保证数据的一致性:

  1. 数据约束:创建表时,通过添加各种约束条件来限制数据的合法性,例如主键、唯一性约束、外键约束、默认值、检查约束等。
  2. 事务管理:对于需要进行多个操作的复杂业务逻辑,可以将这些操作放在一个事务中,使用 START TRANSACTION 和 COMMIT/ROLLBACK 等语句控制事务的提交和回滚。
  3. 锁机制:MySQL 提供了各种锁机制,例如共享锁、排他锁、行级锁、表级锁等,它们可以用来控制并发操作。
  4. 触发器:使用触发器可以在数据发生变化时自动触发一些操作,例如数据验证、数据更新等。

③ 持久性(Durability)

在 MySQL 中,持久性(Durability)是 ACID四种属性之一,指的是一旦一个事务被提交,其所做的修改就会永久保存到数据库中,即使系统崩溃也不会丢失数据。

实现持久性通常需要使用日志(Log)机制。在 MySQL 中,每个写操作都会被记录到 redo log(重做日志)中,只有当 redo log 中的所有操作都成功写入磁盘后,事务才被认为是持久性的。

当系统故障或者重启时,MySQL 会自动从 redo log 中恢复数据,确保数据不会丢失。同时,MySQL 也提供了多种备份和恢复机制,以确保数据的可靠性和可用性。

④ 隔离性(Isolation)

在 MySQL 中,隔离性(Isolation)是 ACID四种属性之一,指的是在多个并发事务同时修改数据库中的数据时,每个事务所看到的数据都必须与其期望的一致。隔离性的目的是为了保证各个并发事务之间的数据相互隔离,不会互相影响。

上面说到,ACID是保证多个事务并发执行的时候不会相互影响,实际上,并发性事务可能产生的问题主要有下面几个:

1.脏读问题

一个事务A正在对数据进行修改的过程中,还没提交之前,另外的事务B,也对同一个数据进行了读取,此时B的读操作就称为"脏读",读到的数据也称为"脏数据"。

解决方法:mysql引入写操作加锁,就是写操作和读操作不能并发,当写的时候禁止读,这样的加锁操作,降低并发程序(降低效率),提高隔离性(提高数据的准确性)

2.不可重复读

当事务1已经提交数据,此时事务2开始读数据,在读取过程中,事务3又提交了新的数据,此时意味着同一个事务2之内,多次读数据,读出来的结果是不一样的(预期是一个事务中,多次读取结果是一样的,就叫做不可重复读)

解决方法:mysql引入写操作加锁,就是读操作和写操作不能并发,当读的时候禁止写,同样是降低事务的并发能力,提高事务的隔离性

3.幻读

在读加锁和写加锁的前提下,一个事务两次读取同一个数据,发现读取的数据值是一样的,但是结果集不一样(如Student.java代码内容不变,但是第一次看到的只有Student.java这个文件,第二次看到的是Student.java和Teacher.java)

解决方法:数据库"串行化"这样的方式来解决幻读,彻底放弃并发处理事务,一个接一个的串行的处理事务。这样做并发程序是最低的(效率最慢的),隔离性也是最高的。

对应上述问题,mysql提供了4种隔离级别,就对应上面几个情况:

隔离级别说明
read uncommitted(读取未提交的数据)没有进行任何锁限制,并发最高(效率最高),隔离性最低(准确性最低)
read committed(读取已提交的数据)给写加锁,并发程度降低,隔离性也提高了
repeatable read(可重复读)给写和读都加锁,并发性继续降低,隔离性又提高了
serializable(串行化)串行化,并发程度最低,隔离性最高

以上是MySQL内置的机制,可以通过修改mysql的配置文件,来设置当前mysql工作在哪种状态下,而上面的隔离级别如何选择,需要在实际需求中看业务场景,在准确性和效率之间衡量,比如转账的时候准确性要拉满,效率并不关键,而视频点赞等,要求快狠准,追求的是效率,准确性就不那么关键了。

三、B+树

B+树是一种为了数据结构索引、量身定做的数据结构。它是一种高效的索引结构,被广泛用于数据库和文件系统等应用中。

B+树是一种多路搜索树,区别于二叉搜索树,它允许每个节点存储多个关键字和数据信息。在B+树 中,所有数据都存储在叶子节点中,而非内部节点,而且所有叶子节点都有序排列形成一个链表,这使得 B+树可以支持范围查询和顺序遍历等操作。

要了解B+树,我们得先了解B树:

1.B树

B树是一种平衡多路搜索树,它能够在进行大量数据插入、删除、查找等操作时保持较好的平衡性能。

B树的节点有多个孩子,通常用一个数组来存放关键字和指向孩子节点的指针。B树的每个节点都有一个阶数,表示该节点最多包含的关键字数量。一棵m阶的B树有以下几个特点:

  1. 根节点至少有两个孩子,除根节点外,其它每个节点至少有m/2个孩子;
  2. 每个节点中的关键字按从小到大的顺序排列,位于关键字左右两侧的孩子节点中的关键字均大于左侧所有关键字,小于右侧所有关键字。
  3. 所有叶子节点都位于同一层,并不包含任何信息。

B树的平衡性能主要由它的节点阶数决定,节点阶数越大,B树高度越小,查找、插入和删除操作的效率越高。B树广泛应用于数据库系统中,如Oracle、MySQL等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zzt17auB-1687259516205)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1684545845498.png)]

2.B+树

B+树的主要优点是支持高效的插入、查找、删除和遍历操作,可以快速定位到目标数据。同时,B+树还支持范围查询和排序等操作,因此被广泛应用于数据库和文件系统等领域。

B+树的特点

①一个节点,可以存储N个key,N个key划分出了N个区间(而不是如B树的N+1个区间)

②每个节点中的key的值,都会在子节点中也存在(同时该key是子节点的最大值)

③B+树的叶子节点,是首位相连的,类似于一个链表

④由于叶子节点,是完整的数据集合,只在叶子节点这里存储数据表的每一行数据,而非叶子节点,只存key值本身即可

B+树的优势:

①.当前一个节点保存更多的key,最终树的高度是相对较矮的,查询的时候减少IO的访问次数(和B树一样,IO特指硬盘的访问)

②.所有的查询最终都会落在叶子节点上(查询任何一个数据,经过IO访问次数,是一样的),稳定,可以让程序员对于程序的执行效率有一个更准确的评估

③.B+树的所有叶子节点,构成链表,此时比较方便进行范围查询(如果查询5~11的数据,只需要先找5,再找11,沿着链表遍历即可)

在这里插入图片描述

3.B树和B+树之间的区别

B树和B+树是两种常见的平衡搜索树,它们有很多相似之处,但也有一些细节上的不同。

  1. 节点结构不同:B树的非叶子节点中既包含关键字,也包含数据指针,而B+树仅在叶子节点中存放数据指针,非叶子节点只存储关键字用于索引。这样做的优势在于B+树的叶子节点可以更多,从而减小了非叶子节点的数量,使得整棵树的高度更加均衡,查找时不会出现在非叶子节点中进行多次查找的情况,提高了查询效率。
  2. 叶子节点指针的数量不同:B树的叶子节点包含了实际存储的数据以及指向下一个兄弟叶子节点的指针,在B+树中,每个叶子节点都有一个指向下一个叶子节点的指针(双向链表),这样便于范围查找操作。
  3. 查找方式不同:在B树中,由于每个节点都存储了数据指针,因此在查找某个数据时,可能需要沿着非叶子节点找到叶子节点后再对比数据,而在B+树中,叶子节点就是存储数据的节点,查找时只需要迭代遍历叶子节点即可。
  4. 拆分方式不同:在B树中,当一个节点插入关键字后,如果节点中关键字的数量超过了阶数,则需要将该节点拆分为两个节点进行存储。而在B+树中,只有叶子节点需要拆分,非叶子节点只需要调整指针即可。

总之,B+树相对于B树来说,能够提高查询效率以及降低存储开销,并且适合在磁盘等外存介质上使用,因此在大规模数据存储和处理方面具有优越性。

最后,关于MySQL的表结构:MySQL组织数据的方式,我们看见一张"表"的时候,实际上这个表不一定是按照"表格"这样的数据,结构在硬盘上组织的,也有可能是按照这种树形结构组织。(具体是哪种结构,取决于表中有没有索引,以及数据库使用了哪种存储)


四、JDBC编程

在各种数据库中,MySQL,Oracle,SQL Server在开发的时候,就会提供一组编程接口(API)。基于一些功能去使用就可以了。对于数据库MySQL和Java之间,我们就用到了JDBC编程。

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象:

DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test?");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root");
Connection connection = ds.getConnection();

这里不详细讲解JDBC的使用,只简单演示备份代码:

对于JDBC查询数据库数据代码:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBC_Select {

    public static void main(String[] args) throws SQLException {
        //JDBC 需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java001?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.建立连接
        dataSource.getConnection();
        Connection connection = dataSource.getConnection();

        //3.构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);


        //4.执行SQL语句
        ResultSet resultSet = statement.executeQuery();

        //5.遍历结果集合
        while(resultSet.next()){
            // 把 resultSet 想象成一个表格,同时表格这里有一个光标, 初始情况下光标指向表最上面
            // 每次调用 next,光标往下走一行
            // 当光标指向某一行的时候,就可以通过 getXXX 来获取到当前这行里的数据
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = "+ id + ", name = "+name);

        }

        //6.释放必要的资源
        statement.close();
        connection.close();

    }
}

对于JDBC增加数据库数据代码:

public class JDBC_Insert {

    public static void main(String[] args) throws SQLException {
        //JDBC 需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java001?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");


        //2.和数据库服务器建立连接
        dataSource.getConnection();
        Connection connection = dataSource.getConnection();

        //3.从控制台读取用户输入信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        String name = scanner.next();
        System.out.println("请输入学号:");
        int id = scanner.nextInt();

        //4.构造SQL语句
        //String sql = "insert into student value(1, 'zs')";//插入的是写死的数据(硬代码)
        //String sql = "insert into student value("+ id +", '"+  name  +"')";有可能sql注入
        String sql = "insert into student value(?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        //5.执行SQL语句
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);
        System.out.println(statement);
        //6.释放必要的资源
        statement.close();
        connection.close();

    }
}

这就是本篇如何速通MySQL全部内容啦,欢迎关注。一起学习,共同努力!

还有一件事:

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

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

相关文章

Linux(centos )防火墙常见操作

1、查看防火墙当前状态 systemctl status firewalld 2、开启防火墙 systemctl start firewalld 3、关闭防火墙 systemctl stop firewalld.service 4、如果报错:-bash: firewall-cmd: command not found,可能是没有安装 firewall。安装命令&#xff1a…

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a 视频 https://youtu.be/ZBMFs2PwkB4 错误描述 Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.aEr…

双非硕士-美国联培-马普所博士后-985系主任的逆袭之路

本科和硕士都是双非学校,博士期间曾有美国联合培养经历,毕业后到德国马普所从事博士后研究。现任985高校特聘教授、博/硕士生导师,系主任。知识人网小编特刊介绍李志明博士的逆袭之路。 随着国内就业压力的增大,高校招聘教师也呈现…

element 设置 table中的按钮权限

子组件 <template><!-- 二次封装表格&#xff0c; 仅支持单选 :style"{ height: height }"--><div class"self_table"><el-table:data"tableData"style"width: 100%"v-loading"loading"stripeselecti…

[游戏开发]Unity随机网格中空位置_二叉树

[目录] 0. 前言1. 简单随机2. 可用位置内随机3. 二叉树权重随机&#xff08;1&#xff09;分区域随机&#xff08;2&#xff09;设置权重均衡概率&#xff08;3&#xff09;二叉树缓存权重&#xff08;4&#xff09;利用二叉树随机&#xff08;5&#xff09;优缺点 4. 测试对比…

简要介绍 | Backbone与Baseline的区别

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对Backbone和Baseline进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 Backbone与Baseline的区别&#xff1a;从神经网络到性能基准 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来…

大厂测试员是如何编写测试用例呢?

一、测试用例是软件测试的核心 软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入&#xff0c;在最短的时间内完成测试&#xff0c;发现软件系统的缺陷&#xff0c;保证软件的优良品质&#xff0c;则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要…

【活动总结】0617COC深圳社区首场线下AI技术沙龙活动最强总结

文章目录 活动的发起活动的宣传活动的进行活动的收尾活动的总结活动的致谢更多展望友情链接 就在2023年6月17日&#xff0c;CSDN COC 深圳城市开发者社区&#xff0c;在深圳大学组织了一次以【智能未来 —— 人工智能与城乡规划的交叉对话】为主题的线下沙龙活动&#xff0c;活…

基于spring boot的JsonSerializer 业务内容国际化

说起国际化&#xff0c;真的是老生常谈了。后端有各种i18n的依赖组件&#xff0c;springboot本身也支持i18n的设置&#xff0c;前端vue也有i18n的设置&#xff0c;这些常规操作就不提了&#xff0c;大家可以去搜索其他博客&#xff0c;写的都很详细。 本篇博客主要写的是业务内…

5大技巧,实现视频号预约直播人数暴涨!

两个体量相当的视频号&#xff0c;为什么别人的直播间人数过万&#xff0c;而自己的直播间却寥寥无几&#xff1f;这其中有一个非常重要的原因&#xff0c;就是预约直播的工作没有做好。 通常情况下&#xff0c;视频号直播预约人数和最终场观呈现1:10的比例&#xff0c;换言之…

聊聊Redis中的跳跃表

Redis 大家项目中应该都用过&#xff0c;哪怕没有分布式锁、幂等校验的一些逻辑使用场景&#xff0c;缓存数据这个大家肯定都用过吧&#xff1f;最简单的key-value格式&#xff0c;直接存储String类型。 当然&#xff0c;针对越来越复杂的业务场景&#xff0c;后续也可能用到li…

合宙Air724UG Cat.1模块硬件设计指南--数字语音接口

数字语音接口 简介 数字音频接口DAI&#xff0c;即Digital Audio Interfaces&#xff0c;表示在板级或板间传输数字音频信号的方式。相比于模拟接口&#xff0c;数字音频接口抗干扰能力更强&#xff0c;硬件设计简单&#xff0c;DAI在音频电路设计中得到越来越广泛的应用。 特…

【学习日记2023.6.20】之 分布式事务_CAP定理_BASE理论_微服务集成Seata_Seata的四种事务模式_高可用架构模型

文章目录 1. 分布式事务问题1.1 本地事务1.2 分布式事务1.3 演示分布式事务问题 2. 理论基础2.1 CAP定理2.1.1 一致性2.1.2 可用性2.1.3 分区容错2.1.4 矛盾 2.2 BASE理论2.3 解决分布式事务的思路 3. 初识Seata3.1 Seata的架构3.2 部署TC服务3.2.1 下载3.2.2 解压3.2.3 修改配…

数据库系统概述——第七章 数据库设计(知识点复习+练习题)

&#x1f31f;博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f99a;专栏&am…

p7付费课程笔记:jvm基础知识、字节码、类加载器

编程语言 演化&#xff1a; 机器语言->编程语言->高级语言&#xff08;java&#xff0c;c,Go,Rust等&#xff09; 面向过程–面向对象-面向函数 java是一种面向对象、静态类型、编译执行&#xff0c;有VM&#xff08;虚拟机&#xff09;/GC和运行时、跨平台的高级语言…

第二章 视觉感知与视觉通道(复习)

大纲 视觉感知 认知 视觉通道 色彩* 可视化致力于外部认知&#xff0c;也就是说&#xff0c;怎样利用大脑以外的资源来增强大脑本身的认知能力。 感知是指客观事物通过人的感觉器官在人脑中形成的直接反映 感觉器官&#xff1a;眼、耳、口、鼻、神经末梢 视觉感知就是客观事物通…

世界史上五个横跨亚欧非三大洲的超强帝国

古代地中海和西亚地区文明出现的很早&#xff0c;经济文化社会都比较先进&#xff0c;其中古埃及早在四千多年前就建立了庞大的帝国&#xff0c;给世人留下了不朽的金字塔&#xff1b;两河流域、希腊半岛也很早就出现了城邦制的国家&#xff0c;也创造了灿烂的文明。同时&#…

架构设计我们要注意什么?

这几天我正在做一个新项目的架构设计&#xff0c;关于动态流程引擎平台的搭建&#xff0c;涉及到了系统架构的设计&#xff0c;里面涉及了方方面面&#xff0c;所以就想着结合自己的实际经验&#xff0c;遇到的问题&#xff0c;以及自己的理解&#xff0c;为大家做一个简单的分…

损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU超详细精讲及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值不一样的程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。 损失函数的使用主要是在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损…

献给蓝初小白系列(二)——Liunx应急响应

1、Linux被入侵的症状​​ ​​https://blog.csdn.net/weixin_52351575/article/details/131221720​​ 2、Linux应急措施 顺序是&#xff1a;隔离主机--->阻断通信--->清除病毒--->可疑用户--->启动项和服务--->文件与后门--->杀毒、重装系统、恢复数据 …