【基础篇】一、MySQL数据库基础知识

文章目录

  • Ⅰ. 什么是数据库
    • 1、普通文件的缺点
    • 2、数据库的概念
    • 3、主流数据库
    • 4、MySQL
  • Ⅱ. MySQL中客户端、服务端、数据库的关系
  • Ⅲ. 见一见数据库
      • 1、数据库文件存放的位置
      • 2、创建数据库
      • 3、使用数据库
      • 4、创建数据库表结构
      • 5、表中插入数据
      • 6、查询表中数据
      • 7、数据的存储逻辑
    • 💥小总结
  • Ⅳ. 服务器、数据库、表之间的关系
  • Ⅴ. MySQL体系架构
    • 1、体系架构总览
    • 2、连接层
    • 3、数据库服务层
      • ① `Connection Pool`连接池
      • ② `Caches`缓存
      • ③ `Parser`解析树
      • ④ `Optimizer`优化器
      • ⑤ `SQL Interface`接口
      • ⑥ `Services & Utilities`系统管理和控制工具
    • 4、存储引擎层
      • 如何在两种存储引擎中进行选择❓❓❓
      • 如何查看存储引擎
    • 5、系统文件存储层
      • ① 数据文件
      • ② 日志文件
      • ③ 配置文件
      • ④ pid文件
      • ⑤ socket文件
  • Ⅵ. MySQL执行流程
  • Ⅶ. SQL分类

Ⅰ. 什么是数据库

1、普通文件的缺点

存储数据用文件就可以了,为什么还要弄个数据库❓❓❓

​ 这就不得不提文件保存数据的以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

​ 什么意思呢,比如说我们如果用普通文件作为数据库的话,那么就会有访问控制、数据加密、完整性保护、备份和恢复、病毒和恶意软件等安全性问题的存在;或者说此时有一大批数据,比如说有几万条 IP 地址,那么如果我们想筛选出以 192 开头的 IP 地址,对于普通文件来说我们就得用编程语言去读取文件,然后再依次判断每个 IP 地址是否符合要求,这显然是有点挫!

​ 而上述问题,有人就帮我们解决了!专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标

2、数据库的概念

​ 数据库是一个 组织和存储数据的集合。它是一个 结构化 的数据存储系统,用于管理和访问大量相关数据的集合。数据库可以存储各种类型的数据,如文本、数字、图像、音频和视频等。

​ 数据库的主要目的是 提供一种有效的方式来组织、存储和检索数据。它可以用于在各种应用程序和系统中存储和管理数据,例如企业资源规划(ERP)系统、客户关系管理(CRM)系统、电子商务网站和社交媒体平台等。

数据库通常由一个或多个表组成,每个表包含多个行和列行表示数据的记录,列表示数据的属性或字段。通过使用结构化查询语言(SQL)或其他查询语言,可以对数据库进行查询、插入、更新和删除操作,以满足特定的数据需求。

​ 数据库的优点包括数据的集中管理、数据的一致性和完整性、数据的安全性和可靠性,以及对大规模数据的高效处理能力。它们在许多领域中都得到广泛应用,包括企业管理、科学研究、金融服务、医疗保健和物流等。

3、主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,适合中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如 MySQL
  • MySQL:世界上最受欢迎的数据库,属于甲骨文公司,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的 SQL 处理效果好。
  • PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统,它包含在一个相对小的 C 库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

4、MySQL

MySQL 是一种 开源的关系型数据库管理系统(RDBMS,它是最流行和广泛使用的数据库之一。MySQL 由瑞典公司 MySQL AB 开发,并于 2000 年首次发布。现在 MySQLOracle 公司维护和支持。

MySQL使用结构化查询语言(SQL)作为其主要查询语言,它允许用户创建、修改和管理数据库中的数据。MySQL 支持多种操作系统,包括 WindowsLinuxmacOS 等。

MySQL具有以下特点:

  1. 可靠性:MySQL被广泛用于大型企业和网站,因为它具有高度可靠性和稳定性。它可以处理大量的并发连接和高负载。
  2. 可扩展性:MySQL支持水平和垂直扩展,可以根据需求增加服务器的处理能力和存储容量。
  3. 安全性:MySQL提供了各种安全功能,如用户认证、访问控制和数据加密等,以保护数据库中的数据免受未经授权的访问和恶意攻击。
  4. 灵活性:MySQL支持多种存储引擎,如InnoDBMyISAMMemory 等,每个存储引擎都有不同的特性和适用场景,使用户可以根据需求选择合适的存储引擎。
  5. 开源性:MySQL是开源软件,用户可以自由地使用、修改和分发它,这使得它成为许多开发者和组织的首选数据库解决方案。

MySQL广泛应用于各种应用程序和系统,包括 Web 应用程序、企业应用程序、电子商务网站和大数据分析等。它被许多知名公司和组织使用,如 FacebookTwitterYouTube 和亚马逊等。

​ 下面的学习我们都是围绕 MySQL 进行展开!

Ⅱ. MySQL中客户端、服务端、数据库的关系

​ 是不是很奇怪,为什么我们在安装 mysql 服务的时候,会有一个 mysqld 呢❓❓❓

在这里插入图片描述

​ 其实 mysql 是数据库服务的客户端,而 mysqld 才是数据库服务的服务器端

​ 也就说,MySQL 的本质其实就是一种 C/S 模式的一种网络服务!

​ 我们还需要有其它的一些共识:

  • mysql 是一套给我们 提供数据存取服务的网络程序
  • 数据库一般指的是在磁盘或者内存中存储的特定组织结构的数据,也可以成为在磁盘或者内存中存储的一套 数据库方案
  • 也就是说,磁盘上存储的文件,不是普通的文件,而是特定结构的数据文件

​ 通过下图就能看出三者之间的关系:

在这里插入图片描述

​ 一般我们不仅仅称磁盘那部分为数据库,还有人称整个系统都是数据库,求同存异!

​ 所以在今后学习数据库的时候,为了统一性,这里来规定一下我们自己的说法:

  • mysql:表示数据库客户端。
  • mysqld:表示数据库服务端。
  • 数据库:表示磁盘上存储的一套数据库文件。

Ⅲ. 见一见数据库

​ 实践得真知,下面我们给出一个样例:

​ 使用 mysql 建立一个数据库叫做 helloworld,然后在该数据库中建立一张表结构 student,在该表中插入一些数据,最后就是对比一下 mysqllinux 中是如何体现的!

1、数据库文件存放的位置

在这里插入图片描述

​ 首先我们得先知道我们的 mysql 数据库文件都存放在哪里,这可以在配置文件中看到:

在这里插入图片描述

​ 我们打开该路径看看:

在这里插入图片描述

​ 可以很明显的看到这些目录,和我们使用服务端指令 show databases 中看到的数据库文件是一样的,也就是说,数据库文件本质就是一个目录

2、创建数据库

mysql> create database helloworld;

​ 此时可以看到如下效果:

在这里插入图片描述

3、使用数据库

​ 在操作库之前,首先就需要选择操作哪个库:

mysql> use helloworld;

4、创建数据库表结构

mysql> create table student(-> name varchar(32),-> age int,-> gender varchar(2)-> );

​ 具体的类型我们后面会讲!

在这里插入图片描述

​ 可以得到结论,所谓的 在数据库内创建表,本质就是在数据库文件目录下创建对应的文件即可

5、表中插入数据

mysql> insert into student (name, age, gender) values ('lirendada', 20, '男');

6、查询表中数据

mysql> select * from student;
+-----------+------+--------+
| name      | age  | gender |
+-----------+------+--------+
| lirendada |   20 ||
+-----------+------+--------+
1 row in set (0.00 sec)

7、数据的存储逻辑

​ 数据库文件虽然是二进制文件,但是它是有结构组织的,当我们想要打印结果的时候,其会按照行列式结构打印出来:

在这里插入图片描述

💥小总结

  1. 建立数据库,本质就是 linux 下创建的一个目录。
  2. 在数据库中创建一张表,本质就是在 linux 中的某个数据库目录下对应创建的文件。
  3. 数据库本质也是文件,只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作。

Ⅳ. 服务器、数据库、表之间的关系

  • 所谓安装数据库服务器,其实就是在机器上安装了一个数据库管理系统程序(守护进程,一直在后台运行着),这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

​ 数据库服务器、数据库和表的关系如下:

在这里插入图片描述

Ⅴ. MySQL体系架构

1、体系架构总览

在这里插入图片描述

​ 从架构图我们可以看出 MySQL 的架构自顶向下大致可以分为 连接层数据库服务层存储引擎层系统文件层 四大部分。接下来,我们就来简单说说每个部分的组成信息。

2、连接层

在这里插入图片描述

​ 连接层位于整个 MySQL 体系架构的最上层,主要担任客户端连接器的角色。提供与 MySQL 服务器建立连接的能力,几乎支持所有主流的服务端语言,例如:JavaCC++Python 等,各语言都是通过各自的 API 接口与 MySQL 建立连接。

​ 也就是我们使用的 mysql 客户端,也可能是一些图形化的数据库客户端等等!

3、数据库服务层

在这里插入图片描述

数据库服务层是整个数据库服务器的核心,主要包括了系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存等部分。

Connection Pool连接池

​ 主要是负责存储和管理客户端与数据库的链接,连接池里的一个线程负责管理一个客户端到数据库的连接信息。自从引入了连接池以后,官方报道:到连接数达到 128 后,使用连接池与没有连接池的性能是提升了 n 倍(反正就是性能大大的提升了!)。

​ 连接建立完成后,就可以执行 SQL 语句了。执行逻辑就会来到缓存模块。

Caches缓存

MySQL的缓存是由一系列的小缓存组成的。例如:MySQL的表缓存,记录缓存,MySQL中的权限缓存,引擎缓存等。

​ 当 MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 键值对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端

如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

🎏 但是大多数情况下建议不要使用查询缓存,为什么呢❓❓❓

​ 因为查询缓存往往弊大于利。查询缓存的失效非常频繁,只要有对一个表的某一条数据更新,这个表上所有的查询缓存都会被清空。

​ 因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。

​ 比如:一个系统配置表,那这张表上的查询才适合使用查询缓存。

​ 好在 MySQL 也提供了这种“按需使用”的方式。你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。

注意MySQL 8.0 版本直接将查询缓存的整块功能删掉了,标志着 MySQL 8.0 开始彻底没有缓存这个功能了。

Parser解析树

主要负责对请求的 SQL 解析成一棵 “解析树”,然后根据 MySQL 中的一些规则对 “解析树” 做进一步的语法验证,确认其是否合法。

​ 注意,如果没有命中查询缓存,才会开始真正执行语句!

​ 步骤差不多如下所示:

  1. 首先,MySQL 需要知道你要做什么,因此需要SQL 语句做解析
  2. 分析器先会做 “词法分析” 。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么、代表什么。
  3. 做完了词法分析以后,就要做 “语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。

​ 如果我们在拼写 SQL 语句的时候漏了某个字母,或者某个关键字写错了,就会收到 "You have an error in your SQL syntax" 的错误提醒,如下所示:
在这里插入图片描述

一般语法错误会提示第一个出现错误的位置,所以你要关注的是紧接 “use near” 的内容。(仅供参考,有时候这个提示也不是非常靠谱)

​ 经过分析器对 SQL 进行了分析,并且没有报错。那么此时就进入优化器中,对 SQL 进行优化。

Optimizer优化器

​ 在 MySQL 中,如果 “解析树” 通过了解析器的语法检查,此时就会由优化器将其转化为执行计划,然后与存储引擎进行交互,通过存储引擎与底层的数据文件进行交互。

​ 简单地说,优化器就是在我们的数据库表中,如果存在多个索引的时候,自动决定使用哪个索引;或者当一个语句有多表关联的时候,自动决定各个表的连接顺序 。

  • 首先,肯定是要判断权限,就是有没有权限执行这条 SQL。工作中可能会对某些客户端进行权限控制。比如说:生产环境中,对于大部分开发人员都只开查询权限,没有增删改权限(部分小公司除外)。
  • 如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

SQL Interface接口

​ 主要负责接收客户端发送过来的各种 SQL 命令,并将 SQL 命令发送到其他部分,并接收其他部分返回的结果数据,将结果数据返回给客户端。

Services & Utilities系统管理和控制工具

​ 提供数据库系统的管理和控制功能,例如对数据库中的数据进行**备份和恢复,保证整个数据库的安全性,提供安全管理,对整个数据库的集群进行协调和管理**等。

4、存储引擎层

在这里插入图片描述

​ 存储引擎的概念是 MySQL 里面才有的,不是所有的关系型数据库都有存储引擎这个概念

​ 存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。也就是说,其实所有的 底层工作就是由存储引擎帮我们干的,而上层的其它服务都只是对存储引擎进行选择和调用!

​ 因为 在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(Table Type,即存储和操作此表的类型)。

MySQL 中的存储引擎层主要负责数据的写入和读取,与底层的文件进行交互。值得一提的是,MySQL 中的存储引擎是插件式,服务器中的查询执行引擎通过相关的接口与存储引擎进行通信,同时,接口屏蔽了不同存储引擎之间的差异。

  • MySQL5.5 版本以前,默认使用的存储引擎是 MyISAM
  • MySQL5.5 版本以后,默认使用的存储引擎是 InnoDB

​ 下面对部分相对使用多的引擎进行一个对比:

在这里插入图片描述

​ 在实际项目中,大多数使用 InnoDB,然后是 MyISAM,至于其他存储引擎使用的非常至少。

​ 两个主要原因:第一个原因是 MyISAM 是表级锁定,限制了数据库读/写的性能;另外一个原因是 MyISAM 不支持事务,基于以上两点,InnoDB 引擎可以到行。

MyISAMInnoDB 引擎的区别:

  • 事务支持:InnoDB 引擎支持事务处理,可以使用 ACID(原子性、一致性、隔离性和持久性)属性来确保数据的完整性和一致性。而 MyISAM 引擎不支持事务处理。
  • 锁定级别:InnoDB 引擎支持行级锁定,这意味着在并发访问时,只锁定需要修改的行,而不是整个表。这提高了并发性能。而 MyISAM 引擎只支持表级锁定,这意味着在并发访问时,需要锁定整个表,可能导致性能瓶颈。
  • 外键支持:InnoDB 引擎支持外键约束,可以确保数据的完整性和一致性。而 MyISAM 引擎不支持外键约束。
  • 全文索引:InnoDB 引擎从 MySQL 5.6 版本开始支持全文索引。而 MyISAM 引擎一直支持全文索引。
  • 崩溃恢复:InnoDB 引擎具有崩溃恢复能力,可以在数据库崩溃后自动恢复数据。而 MyISAM 引擎在崩溃后可能需要手动修复表。
  • 性能特点:对于大量的读操作和稳定的查询,MyISAM 引擎通常具有更好的性能。而对于大量的写操作、事务处理和并发访问,InnoDB 引擎通常具有更好的性能。

如何在两种存储引擎中进行选择❓❓❓

① 是否有事务操作?有,InnoDB

② 是否存储并发修改?有,InnoDB

③ 是否追求快速查询,且数据修改较少?是,MyISAM

④ 是否使用全文索引?如果不引用第三方框架,可以选择 MyISAM,但是可以选用第三方框架和 InnDB 效率会更高

如何查看存储引擎

​ 我们可以直接通过下面指令查看当前 mysql 中的存储引擎:

show engines

在这里插入图片描述

5、系统文件存储层

在这里插入图片描述

​ 系统文件存储层主要是 负责将数据库的数据和日志存储在系统的文件中,同时完成与存储引擎的之间的打交道,是文件的物理存储层。其存储的文件主要有:日志文件、数据文件、配置文件、MySQL 的进行 pid 文件和 socket 文件等。

① 数据文件

  • db.opt 文件:记录当前数据库的默认使用的字符集和校验规则。

  • frm文件:存储数据表的结构信息,主要是数据表相关的元数据信息,包括数据表的表结构定义信息,每张表都会有一个frm文件

    • 值得注意的是:MySQL8 版本中的 innodb 存储引擎的表没有 frm 文件。
  • MYD文件:MyISAM 存储引擎专用的文件格式,主要存放 MyISAM 存储引擎数据表中的数据,每张 MyISAM 存储引擎表对应一个 .MYD 文件。

  • MYI文件:MyISAM 存储引擎专用的文件格式,主要存放与 MyISAM 存储引擎数据表相关的索引信息,每张 MyISAM 存储引擎表对应一个 .MYI 文件。

  • ibd文件:存放 Innodb 存储引擎的数据文件和索引文件,主要存放的是独享表空间的数据和索引,每张表对应一个 .ibd 文件。

  • ibdata文件:存放 Innodb 存储引擎的数据文件和索引文件,主要存放的是共享表空间的数据和索引,所有表共用一个(或者多个).ibdata 文件,可以根据配置来指定共用的 .ibdata 文件个数。

  • ibdata1 文件:系统表空间数据文件,主要存储 MySQL 的数据表元数据、Undo 日志等信息。

  • ib_logfile0ib_logfile1 文件:数据库中的 Redo log 文件,主要用于 MySQL 实现事务的持久性。如果在某个时间点 MySQL 发生了故障,此时如果有脏页没有写入到数据库的 ibd 文件中,在重启 MySQL 的时候,MySQL 会根据 Redo Log 信息进行重做,将写入 Redo Log 并且尚未写入数据表的数据进行持久化操作。

② 日志文件

  • 错误日志

    • 主要存储的是 MySQL 运行过程中产生的错误信息。

      show variables like '%log_error%';
      
  • 通用查询日志

    • 主要记录 MySQL 运行过程中的一般查询信息。

      show variables like '%general%';
      
  • 二进制日志

    • 主要记录对 MySQL 数据库执行的插入、修改和删除操作,并且也会记录 SQL 语句执行的时间、执行的时长,但是二进制日志不记录 selectshow 等不修改数据库的 SQL。主要用于恢复数据库的数据和实现 MySQL 主从复制。

    • 查看二进制日志是否开启:

      show variables like '%log_bin%';
      
    • 查看二进制日志的参数:

      show variables like '%binlog%'
      
    • 查看日志文件:

      show binary logs;
      
  • 慢查询日志

    • 慢查询主要记录的是执行时间超过指定时间的 SQL 语句,这个时间默认是 10 秒。

    • 查看是否开启慢查询日志

      show variables like '%slow_query%';
      
    • 查看慢查询设置的时长:

      show variables like '%long_query_time%'
      

③ 配置文件

​ 用于存在 MySQL 所有的配置信息,Unix/Linux 环境中是 my.cnf 文件,在 Windows 环境中是 my.ini 文件。

④ pid文件

pid 文件是 mysqld 应用程序在 LinuxUnix 操作系统下才有的的一个进程文件,和许多其他 Linux 或者 Unix 服务端程序一样,该文件 放着自己的进程 id

⑤ socket文件

socket 文件也是 Linux/Unix 操作系统下才有的,用户在 Linux/Unix 操作系统下客户端连接可以不通过 TCP/IP 网络而直接使用 Unix socket 来连接 MySQL 数据库。

Ⅵ. MySQL执行流程

在这里插入图片描述

Ⅶ. SQL分类

  • DDL【data definition language】 数据定义语言,用来 维护存储数据的结构,如创建数据库、创建表结构等,代表指令如 createdropalter 等。
  • DML【data manipulation language】 数据操纵语言,用来 对数据进行操作,如增删改等。代表指令如 insertdeleteupdate 等。
    • DML 中又单独分了一个 DQL,数据查询语言,用来对数据进行查询,代表指令如 select
  • DCL【Data Control Language】 数据控制语言,主要 负责权限管理和事务。代表指令如 grantrevokecommit 等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑vcruntime140.dll丢失的解决方法!vcruntime140.dll丢失是

一、文件丢失问题:vcruntime140.dll丢失的解决方法 vcruntime140.dll是Visual C Redistributable for Visual Studio的一个关键组件,许多应用程序和游戏都需要它才能正常运行。当系统提示vcruntime140.dll丢失时,通常意味着你的系统中缺少了…

【SpringBoot教程】IDEA快速搭建正确的SpringBoot版本和Java版本的项目

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🍉今天毛毛张分享的是在做SpringBoot项目中遇到的三个问题,这三个问题看似都是小问题🍓,但是却是做项目的基础常识⚠️…

MultiDiff 论文解读

一、CameraCtrl AnimateDiff->MotionCtrl->CameraCtrl CameraCtrl将多帧图像的Plucker射线输入到Camera Encoder,Plucker射线可以表示每个像素对应的光线方向。 Camera Encoder包括ResNet block和Temporal Attention,来提取每一帧相机位姿的时序…

C语言性能优化:从基础到高级的全面指南

引言 C 语言以其高效、灵活和功能强大而著称,被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而,要写出高性能的 C 语言代码,需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术,并通过…

用点包图洞察医学数据:以血压分析为例

在医学数据分析的广袤天地里,可视化手段无疑是我们快速洞察数据、挖掘关键信息的有力 “武器”。今天,就来给各位医学同仁介绍一种别具一格的可视化图表 —— 点包图(Diverging Dotplot),顺便分享一段用 Python 实操绘…

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取,还是运用的是requests方法 首先进入此网站中,选取你想要爬取的视频,进入视频页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…

C# 中使用 MassTransit

在生产环境中使用 MassTransit 时,通常需要进行详细的配置,包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例,展示了如何在 ASP.NET Core 应用程序中配置 MassTransit,包括请求/响应模式和…

【Hackthebox 中英 Write-Up】Manipulating a CRUD API | 操控 CRUD API:一步步提取 Flag

Objective | 目标 This challenge demonstrates how to interact with a CRUD API to perform Update, Delete, and Search operations to retrieve the flag. 本次挑战旨在演示如何与 CRUD API 交互,通过执行 更新、删除 和 搜索 操作来获取 Flag。 操控 CRUD AP…

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符(in、out、inout)、函数参数限定符等内容,另外提供了一个 include 工具,方便多文件管理 glsl 代码&a…

【Compose multiplatform教程18】多平台资源的设置和配置

要正确配置项目以使用多平台资源,请执行以下操作: 添加库依赖项。 为每种资源创建必要的目录。 为限定资源创建其他目录(例如,深色 UI 主题或本地化字符串的不同图像)。 依赖项和目录设置 要访问多平台项目中的资源…

线索二叉树的实现(c语言)

一、前言:什么是二叉树的线索化?(为什么要有二叉树的线索化?) 通过前面内容的学习,我们知道了二叉树的存储结构其实是通过二叉链表的方式实现的。但二叉链表由于每个结点均有左右孩子域,这使得…

通过python对excel进行数据分析和可视化

import pandas as pd import matplotlib.pyplot as plt import seaborn as snsfile_path "C:\\Users\\86138\\Desktop\\book_list-计算机-机器学习-linux-android-数据库-互联网.xlsx" data pd.read_excel(file_path)need_data data[[书名, 评分, 评价人数]].copy…

考研互学互助系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

SpringCloud整合skywalking实现链路追踪和日志采集

1.部署skywalking https://blog.csdn.net/qq_40942490/article/details/144701194 2.添加依赖 <!-- 日志采集 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version&g…

【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理

文章目录 前言1. 图示2. 源码坐标后记 前言 今天看了一段老业务代码&#xff0c;HttpServletRequest 被注入后直接用于业务逻辑。 好奇Spring是如何解决线程安全问题。 Controller public class TestController {ResourceHttpServletRequest request;ResponseBodyGetMapping(…

0基础学前端-----CSS DAY11

0基础学前端-----CSS DAY11 视频参考&#xff1a;B站Pink老师 今天是CSS学习的第十一天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第六天的内容。 本节重点&#xff1a;CSS定位 本章目录 0基础学前端-----CSS DAY11本节目标1. 定位1.1 为什么需要定位1.2 定位组成1.…

frameworks 之 WMS添加窗口流程

frameworks 之 触摸事件窗口查找 1.获取WindowManager对象2.客户端添加view3. 服务端添加view (NO_SURFACE)4.重新布局 (DRAW_PENDING)4.1 创建 SurfaceControl 5.通知绘制 (COMMIT_DRAW_PENDING&#xff0c; READY_TO_SHOW&#xff0c; HAS_DRAWN)5. 1 布局测量和刷新 6.总结 …

ARM单片机定时器

定时器分类 定时器资源。基于GD32F103

【Java】IO流练习

IO流练习 题干&#xff1a; 根据指定要求&#xff0c;完成电话记录、 注册、登录 注册 题干&#xff1a; 完成【注册】功能&#xff1a; 要求&#xff1a; 用户输入用户名、密码存入users.txt文件中 若users.txt文件不存在&#xff0c;创建该文件若users.txt文件存在 输入…

Windows API Set:那些“只存在但不被使用“的DLL

API Set 是什么&#xff1f; 想象一下&#xff0c;Windows就像一个大型图书馆&#xff0c;而API Set就是这个图书馆的索引系统。但这个索引系统非常特别&#xff1a;它是直接内置在Windows加载器中的"虚拟目录"。 // 一个典型的API Set映射示例 api-ms-win-core-mem…