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

每日学习Java之一万个为什么?[MySQL面试篇]

分析SQL语句执行流程中遇到的问题

  • 前言
  • 1 MySQL是怎么在一台服务器上启动的
  • 2 MySQL主库和从库是同时启动保持Alive的吗?
  • 3 如果不是主从怎么在启动的时候保证数据一致性
  • 4 ACID原则在MySQL上的体现
  • 5 数据在MySQL是通过什么DTO实现的
  • 6 客户端怎么与MySQL Server建立连接,有哪些建立连接的方式,默认是什么,可以选什么,有哪些应用场景
  • 7.SQL组件接受的SQL是什么形式?为什么单一一条SQL不做任何处理就被MySQL认为是一个事务?
  • 8.查询后的结果是由哪个组件以什么形式返回?
  • 9.解析器是怎么解析的,解析器会调用API吗?
  • 10.优化器是怎么优化的?会调用API吗?
  • 11.SQL报错机制会在哪些区域出现?以什么形式发给客户端?以什么形式写到哪个日志中?
  • 12.执行器本质上是什么?
  • 13 MySQL内部有哪些线程?怎么分类?
  • 14 MySQL进程包含哪些内容
  • 15 执行器会将sql提交给引擎还是调用引擎,又是怎么调用的
  • 16 buffer pool区域中的数据页有多少,以什么结构存储,脏页呢?
  • 17 buffer pool 中的数据页怎么更新的,淘汰后的数据页由谁清理
  • 18 后台线程对脏页刷盘是怎么实现的
  • 19 sql语句中加锁在哪个部分实现的
  • 20 事务在engine中怎么实现
  • 21 MVCC怎么实现
  • 22 redolog分为哪几块内容?有什么作用
  • 23 binlog呢
  • 24 undolog 呢
  • 25 数据写磁盘怎么实现的,怎么传输的,怎么保证一致性的
  • 26 MySQL断开连接可以从线程和客户端区分吗
  • 27 MySQL进程结束会执行哪些持久化操作

前言

面试想要过关斩将,你就必须扪心自问,问得越多问的越细,才能披荆斩棘。盔甲若是漏洞百出,不被戳死才怪。

下列问题为作者提出,回答搜集而来。
由于作者并没有系统化从零开始学习MySQL,所以可能某些非常基础的问题并不了解。

欢迎读者留言比较重要的基础,wink👍

1 MySQL是怎么在一台服务器上启动的

  • MySQL通过配置文件:my.cnf my.ini 来指定各种参数,如端口号、数据目录等。
  • 初始化数据库:首次启动的时候,MySQL需要初始化系统表(这里指定的是系统表空间吗)
  • 启动系统,生成日志

2 MySQL主库和从库是同时启动保持Alive的吗?

为了实现数据同步,通过binlog+并行复制维持数据一致性,主库应该首先启动并正常运行,然后从库再启动并连接到主库。

3 如果不是主从怎么在启动的时候保证数据一致性

  • 如果不是主从库,没法保证,可以自己设置一些通信维护。
    如果没有同时启动,其实无所谓。
  • 保证数据一致性,主从之间首先需要通信,分为三类异步、同步、半同步。由于是主库写日志,等待从库响应。所以主库到底等不等从库是一个影响性能的问题。异步-半同步-同步,一致性会越来越高,期望响应时间越来越长。(那么这里的sql写日志都是事务写进去的吗)
  • 一句话概括:主库提交会写binlog,会由一个dump线程监听binlog文件的变更,如果有更新会推送更新时间到从库,从库接收到事件后会拉取数据,有一个IO线程将binlog传过来的数据写到自己的relaylog中,慢慢消化。所以,我们先更新的是事务语句,至于执行则是慢慢来。
  • 5.6库级别并行复制:
  • 5.7 Group Commit 级别 并行复制
  • logical_clock 逻辑时钟复制
  • Write Set复制

4 ACID原则在MySQL上的体现

  • A:MySQL使用BEGIN /COMMIT /ROLLBACK 来管理事务
  • C:通过约束和触发器确保数据库的状态始终符合预期
  • I:支持四种隔离级别,读未提交,读已提交,可重复读,串行化,通过锁定机制和MVCC实现
  • D:一旦事务提交,数据就会永久保存,即使发生系统崩溃也不会丢失。MySQL使用重做日志 和 双写缓冲区来实现持久性

5 数据在MySQL是通过什么DTO实现的

6 客户端怎么与MySQL Server建立连接,有哪些建立连接的方式,默认是什么,可以选什么,有哪些应用场景

  • TCP IP 通过网络地址和端口连接到MySQL服务器,适用于远程连接
  • Unix Socket连接:在本地Linux/Unix系统上,可以通过Unix域套接字连接到MySQL服务器。这种方式比TCP IP更快,因为它避免了网络层的开销
jdbc:mysql://database_name?socket=/temp/mysql.sck
  • 命名管道:仅适用于win 本地连接

  • 共享内存:另一种win特有的连接方法

  • 默认使用TCP IP

7.SQL组件接受的SQL是什么形式?为什么单一一条SQL不做任何处理就被MySQL认为是一个事务?

MySQL接收到的SQL是标准的SQL语句,通常以文本的形式发给服务层

在MySQL中,默认情况下,每条单独提交的SQL语句都被视为一个独立的事务。这是因为autocommit模式下,每条语句执行完毕后会自动提交事务。如果autocommit被关闭,需要显式的 使用 BEGIN 和 COMMIT 提交事务

8.查询后的结果是由哪个组件以什么形式返回?

执行器也就是sql线程生成结果集,通过网络协议返回给客户端

  • 执行器:执行查询并生成结果集 MYSQL_RES结构
  • 网络层:将结果集打包成适当的格式(如二进制或文本),并通过连接通道返回给客户端。
typedef struct st_mysql_res
{
my_ulonglong row_count;
unsigned int field_count,current_field;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
MEM_ROOT field_alloc;
MYSQL_ROW row;
MYSQL_ROW current_row;
unsigned long *lengths;
MYSQL *handle;
my_bool eof;
}MYSQL_REStypedef struct st_mysql_rows 
{struct st_mysql_rows *next;	//列表的行MYSQL_ROW data;
} MYSQL_ROWS;   //mysql的数据的链表节点。可见mysql的结果集是链表结构typedef struct st_mysql_data 
{my_ulonglong rows;unsigned int fields;MYSQL_ROWS *data;MEM_ROOT alloc;
} MYSQL_DATA;   // 数据集的结构typedef struct st_mysql_field 
{char *name;					// 列名称 char *table;	                //如果列是字段,列表char *def;	                //默认值(由mysql_list_fields设置)enum enum_field_types type;	//类型的字段。Se mysql_com。h的类型unsigned int length;	        //列的宽度unsigned int max_length;	    //选择集的最大宽度unsigned int flags;	        //Div标记集unsigned int decimals;	    //字段中的小数位数
} MYSQL_FIELD;  //列信息的结构typedef struct st_used_mem      //结构为once_alloc
{	struct st_used_mem *next;   	//下一个块使用unsigned int left;	        //记忆留在块unsigned int size;	        //块的大小
} USED_MEM;     //内存结构typedef struct st_mem_root 
{USED_MEM *free;USED_MEM *used;USED_MEM *pre_alloc;unsigned int	min_malloc;unsigned int	block_size;void (*error_handler)(void);
} MEM_ROOT;  //内存结构

可以看到MySQL是用C++/C 开发的

9.解析器是怎么解析的,解析器会调用API吗?

  • 词法分析:将SQL语句分解为一个个token

  • 语法分析:tokens转换语法树

  • 语义分析

  • 解析器本身并不调用外部API,但他可能会调用内部函数或者模块来完成某些任务,例如:

  • 元数据访问:访问系统表或缓存中的元数据,以验证表和列的存在性。

  • 权限检查:调用权限管理模块,确保用户有足够的权限执行该操作

10.优化器是怎么优化的?会调用API吗?

  • 查询重写:对查询初步重写,以简化查询结构
  • 统计信息收集:收集表的统计信息(例如行数、索引选择性等),用于生成最优执行计划。
  • 生成候选计划:基于不同的访问路径(如全表扫描、索引扫描),生成多个候选执行计划(生成策略?)
  • 选择最佳计划:评估每个候选计划的成本(评估算法?),选择成本最低的计划作为最终执行计划
  • 优化器内部统计信息模块:获取表的统计信息(包含什么?)
  • 代价模型:计算成本 (理论支持?)
  • 访问路径模块:确定可用的访问路径(索引、表扫描等)

11.SQL报错机制会在哪些区域出现?以什么形式发给客户端?以什么形式写到哪个日志中?

报错机制出现的区域:

  • 解析阶段:SQL语法错误或未知表/列名
  • 优化阶段:无法生成有效的执行计划
  • 执行阶段:运行时错误,如违反约束、超时等
  • 网络传输阶段:连接断开或其他通信错误

发给客户端的形式:

  • 错误代码:一个唯一的数字标识。
  • 错误消息:详细的描述信息,帮助理解错误原因。
{"code":1054,"message":"Unknown column 'nonexistent_column'in 'field list'"
}

写入日志的形式:

  • 错误日志:记录所有严重的错误和警告,默认位于/var/log/mysql/error.log 或安装目录下的data文件夹中。
  • 慢查询日志:记录执行时间超过阈值的查询,默认位于/var/log/mysql/slow-query.log
2025-02-27T11:41:23.123456Z 0 [ERROR] [MY-01054] Unknown column 'nonexistent_column' in 'field list'

12.执行器本质上是什么?

执行器是MySQL查询处理过程中实际执行查询计划的部分。它根据优化器生成的执行计划,调用存储引擎接口来访问和修改数据。

执行器的主要职责:

1.物理操作执行:根据执行计划中的物理操作(如表扫描、索引查找等)执行相应的数据库操作。
2.数据获取与处理:从存储引擎中获取数据,并进行必要的过滤、排序、聚合等操作。
3.结果集生成:将处理后的数据组织成结果集,准备返回给客户端。

执行器的工作流程:
1.初始化执行计划:加载执行计划并准备执行环境。
2.执行物理操作:按顺序执行各个物理操作步骤。
3.返回结果

13 MySQL内部有哪些线程?怎么分类?

1.主线程(Main Thread)

  • 职责:负责启动和管理其他的线程
  • 实例:mysql进程的主线程

2.连接处理线程(Connection Threads)

  • 职责:处理客户端连接请求,每个客户端连接对应一个独立的线程
  • 实例:thd线程对象,用于处理每个客户端连接

3.后台线程(Background Threads)

  • 职责:执行各种后台任务,如日志刷新、数据页刷盘等。
  • 示例:InnoDB缓冲池线程:负责缓冲池管理和脏页刷盘。Binlog Dump线程:监听binlog 发送给从库。Purge线程:负责清理不再需要的undo日志

4.IO线程(I/O Threads)

  • 职责:处理与存储设备的IO操作
  • 示例:Redo Log线程:负责写入重做日志。 Binlog线程:负责写入二进制日志。

5.事务处理线程(Transaction Handing Threads)

  • 职责:管理事务的开始、提交和回滚操作。
  • 示例:事务管理线程,负责协调事务的状态。

14 MySQL进程包含哪些内容

MySQL进程(mysqld)包含多个组件和模块,主要分为以下几个部分:

  • 1.服务器核心 Server Core

    1. 存储引擎 Strorage Engines
  • 3.缓存和缓冲区(Caches and Buffers)

    • Buffer Pool:用于缓存数据和索引数据。
    • Query Cache:缓存查询结果以提高查询效率(读缓存已被移除)
  • 日志系统 (Logging System)

    • Binlog:用于主从复制和数据备份,记录所有更改操作。
    • Undo Log:用于事务回滚,记录事务的反向操作
    • Redo Log:用于崩溃恢复,记录所有未提交的事务
  • 网络层(Network Layer)

    • 处理客户端连接、数据传输和协议解析。
  • 安全管理(Security Management)

    • 执行各种后台任务,如日志刷新、数据页刷盘等。

15 执行器会将sql提交给引擎还是调用引擎,又是怎么调用的

执行器会通过调用存储引擎的接口来执行具体的数据库操作

调用方式:

  • 接口调用:执行器通过调用存储引擎提供的接口(如InnoDB的API)来执行具体的操作。
  • 物理操作执行:根据优化器生成的执行计划,执行器调用相应的存储引擎接口来访问和修改数据。

16 buffer pool区域中的数据页有多少,以什么结构存储,脏页呢?

数据页数量:

  • 大小可配置:Buffer Pool的大小可以通过配置文件中的innodb_buffer_pool_size参数设置,默认值通常为系统内存的70%-80%。
  • 每页大小:默认情况下,每页大小为16KB。

存储结构:

  • LRU链表:Buffer Pool 使用LRU(Least Recently Used)链表来管理数据也。最近使用的页面位于链表前端,较少使用的页面位于链表末端。
  • Flush链表:脏页(已修改但尚未写入磁盘的页面)会被放入Flush链表中,等待刷盘

脏页:

  • 定义:脏页是指已经被修改但还写回到磁盘的数据页。
  • 存储位置:脏页同样存储在Buffer Pool中,并被标记为脏页。
  • 管理:脏页通过Flush链表管理,定期或在特定条件下(如内存不足或打到一定阈值)被刷回磁盘。

17 buffer pool 中的数据页怎么更新的,淘汰后的数据页由谁清理

数据页更新:

  • 读取当前数据页:当需要访问某个数据页时,如果该页不在Buffer Pool中,则从磁盘加载到Buffer Pool。
  • 修改数据页:对数据页进行修改后,将其标记为脏页。
  • 写回磁盘:脏页会在适当的时候(如内存不足或达到一定的阈值)通过后台线程写回到磁盘。

淘汰后的数据页清理:

  • LRU链表:当Buffer Pool 满时,使用LRU算法淘汰最近最少使用的页面

  • 清理过程:

    • 如果被淘汰的页面是干净的(未修改),可以直接丢弃。
    • 如果被淘汰的页面是脏页,则必须先将其写回磁盘(通过Flush链表管理)。

18 后台线程对脏页刷盘是怎么实现的

后台线程通过以下几种机制实现脏页的刷盘:
1.定时刷盘:

  • InnoDB自动刷新:InnoDB会定期检查脏页的比例,如果超过设定的阈值(如innodb_max_dirty_pages_pct),则触发自动刷新操作。

2.后台线程:

  • Page Cleaner线程:负责将脏页写回到磁盘。它会定期检查Flush链表中的脏页,并将这些脏页回到磁盘。

3.事务提交:

  • 同步刷盘:在某些情况下(如事务提交),为了保证数据一致性,需要立即刷盘。此时会调用fsync()函数确保数据已经写入磁盘。

4.内存压力:

  • 当Buffer Pool内存不足时,会优先淘汰脏页,并将其写回磁盘。

19 sql语句中加锁在哪个部分实现的

SQL语句的加锁操作主要在执行器和存储引擎中实现:

1.解析阶段:

  • 解析器解析SQL语句,识别出需要加锁的对象(如表、行等)

2.执行器:

  • 执行器根据解析结果,在执行过程中调用存储引擎的加锁接口,对相关对象加锁。

3.存储引擎:

  • 存储引擎实现具体的加锁机制。例如,InnoDB支持行级锁(共享锁,排他锁)和表级锁。
SELECT * FROM users WHERE id = 1 FOR UPDATE;

执行器在执行这条查询时,会调用InnoDB的加锁接口,对users表中id=1的行加排它锁

20 事务在engine中怎么实现

事务在存储引擎中的实现主要包括以下几个方面:

1.事务管理器:

  • 负责事务的生命周期,包括开始、提交、回滚。

2.日志系统:

  • Redo Log:记录所有未提交的事务操作,用于崩溃恢复。
  • Undo Log:记录事务的反向操作

3.并发控制:

  • MVCC(多版本并发控制):支持高并发下的读写操作,避免锁冲突
  • 锁机制:提供行级锁和表级锁,确保事务的隔离性。

4.持久化:

  • 双写缓冲区(Doublewrite Buffer):确保数据页在写入磁盘时的一致性。
  • 刷盘操作:通过后台线程定期将脏页协会到磁盘里。

21 MVCC怎么实现

MVCC,通过维护数据不同的版本来支持高并发下的读写操作。其主要实现机制如下:

  • 隐藏列:每个数据行包含两个隐藏列:DB_TRX_ID 事务ID DB_ROLL_PTR 指向undo的指针。
  • 快照读:读操作(如SELECT)不会阻塞写操作,而是读取数据的历史版本。读操作会根据当前事务的Read View来决定读取哪个版本的数据
  • 写操作:写操作会在新版本的数据上进行操作,并记录undo日志以便回滚。
  • Undo日志:记录事务的反向操作,用于事务回滚和旧版本构建

假如有一个事务在时间点T1插入一条记录,另一个事务B在时间点T2更新了该记录。事务C在T3时间点进行读取操作时,会读取到T2时间点之前的数据版本。

22 redolog分为哪几块内容?有什么作用

Redo Log 是 InnoDB 存储引擎用于崩溃恢复的日志系统,其主要分为以下几个部分:

  • 1.Log Blocks:

    • Redo Log被划分为多个固定大小的块(通常是512字节),每个块称为一个 Log Block。
  • 2.Log Sequence Number(LSN):

    • 每条日志记录都有一个唯一的LSN,表示日志记录的顺序号。
  • 3.Checkpoint

    • Checkpoint 是 Redo Log中的一个特殊标记,表示已成功写入磁盘的数据页。它用于加速崩溃恢复的过程。
  • 崩溃恢复:在MySQL崩溃重启时,通过Redo Log恢复未完成的事务,确保数据的一致性。

  • 提高性能:通过批量写入Redo Log,减少频繁的磁盘IO操作。

23 binlog呢

主要用于主从复制和数据备份。

  • 事件类型:

    • Query Event:记录SQL查询语句。
    • Row Event:记录行级别的变更。
    • XID Event:记录事务提交信息。
  • 格式:

    • Statement-Based Logging:记录SQL语句。
    • Row-Based Logging : 记录每一行的变化。
    • Mixed-Based Logging :混合使用Statement和Row格式。

24 undolog 呢

Undo Log 是 InnoDB 存储引擎用于事务回滚和MVCC 的日志系统。其主要分为以下几个部分:

  • 1.Undo Segment:每个事务分配一个Undo Segment,用于记录该事务的所有Undo日志。

  • 2.Undo Record:每条Undo日志记录一次事务的反向操作,用于回滚和旧版本数据的构建。

  • 事务回滚:在事务回滚时,通过Undo Log 将数据恢复到事务开始前的状态。

  • MVCC:提供历史版本的数据,支持高并发下的操作。

25 数据写磁盘怎么实现的,怎么传输的,怎么保证一致性的

数据写磁盘的实现:

  • 1.Buffer Pool:数据首先写入Buffer Pool,而不是直接写入磁盘。
  • 2.Dirty Page:修改后的数据页标记为脏页,等待后续刷盘操作。
  • 3.后台线程:通过后台线程定期将脏页写回磁盘。

数据传输:

  • 异步写入:大多数情况下,数据写入磁盘是异步的,以提高性能。
  • 同步写入:在某些情况下(如事务提交),需要确保数据已经写入磁盘,此时会调用fsync()函数。

保证一致性:

  • Redolog:记录所有未提交的事务操作,用于数据恢复。
  • 双写缓冲区:确保数据页在写入磁盘时的一致性。
  • 两阶段提交:在分布式环境中,使用两阶段提交协议,确保事务的原子性和一致性。

26 MySQL断开连接可以从线程和客户端区分吗

线程角度:
线程终止:MySQL 服务器端会终止对应的连接线程,并释放相关的资源。
日志记录:断开连接的信息会被记录到错误日志中。
客户端角度:
异常处理:客户端应用程序需要捕获连接断开的异常,并进行相应的处理(如重新连接)。
超时机制:客户端可以通过设置超时参数(如 wait_timeout 和 interactive_timeout)来控制连接的有效期。

27 MySQL进程结束会执行哪些持久化操作

MySQL 进程结束时会执行一系列持久化操作,以确保数据的一致性和完整性:

Redo Log 刷盘:
将所有未提交的事务操作写入 Redo Log,确保在崩溃恢复时能够恢复这些事务。
Dirty Page 刷盘:
将 Buffer Pool 中的所有脏页写回到磁盘,确保数据的一致性。
Binlog 刷盘:
将 Binlog 中的所有更改操作写入磁盘,确保主从复制和数据备份的一致性。
Checkpoints:
创建 Checkpoint,标记已成功写入磁盘的数据页,加快崩溃恢复的速度。
关闭存储引擎:
关闭所有存储引擎实例,释放相关资源。
日志记录:
记录进程结束的相关信息到错误日志中,便于后续排查问题。

相关文章:

每日学习Java之一万个为什么?[MySQL面试篇]

分析SQL语句执行流程中遇到的问题 前言1 MySQL是怎么在一台服务器上启动的2 MySQL主库和从库是同时启动保持Alive的吗?3 如果不是主从怎么在启动的时候保证数据一致性4 ACID原则在MySQL上的体现5 数据在MySQL是通过什么DTO实现的6 客户端怎么与MySQL Server建立连接…...

git笔记

定义:分布式版本控制工具,免费开源的,快速高效的处理从小到大的项目,git占地面积小,性能快,有廉价的本地库 安装:官网最新版 全部点下一步就行 版本控制工具:使用中央服务器&#…...

Full GC 排查

在 Java 中,Full GC(完全垃圾回收)会对整个堆(包括年轻代和老年代,甚至可能包括永久代/元空间)进行垃圾回收,通常会导致较长的停顿(STW,Stop-The-World)。如果…...

VS2022远程调试Ubuntu中的C++程序

前言 最近想基于星火大模型的SDK开发第一些应用。但是,发现星火的SDK当中Linux版本的比较丰富,Windows 版本支持的比较少。但是,从调试的IDE而言,Visual Studio又是最方便的。所以,考虑采用Visual Studio Ubuntu的形式…...

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 目录 Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 一、简单介绍 二、简单介绍 flutter_screenutil 三、安装 carousel_slider 四、简单案例实现 五、关键代码 六、补…...

【华为OD机考】华为OD笔试真题解析(16)--微服务的集成测试

题目描述 现在有n个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次,服务自身启动加载会消耗一些时间。 给你一个 n n n \times n nn的二维矩阵useTime,其中useTime[i][i]10表示服务…...

NCCL AI 分布式训练集合通讯库技术基本原理

目录 文章目录 目录AI 分布式训练NCCL 的简介NCCL 的核心功能NCCL 的基本工作流程NCCL 的集合通信操作方式NCCL 的 API 编程示例 AI 分布式训练 在一个最初的 AI 模型训练场景中,由于模型自身的程序体积、输入的参数量以及样本的数据量都比较有限,一张 …...

算法-回溯篇01-组合

组合 力扣题目链接 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 解题思路 刚开始做回溯的题目,关于回溯的相关知识推荐大家去看代码随想录的视频。 做了几道题,感觉回溯题…...

泵吸式激光可燃气体监测仪:快速精准守护燃气管网安全

在城市化进程加速的今天,燃气泄漏、地下管网老化等问题时刻威胁着城市安全。如何实现精准、高效的可燃气体监测,守护“城市生命线”,成为新型基础设施建设的核心课题。泵吸式激光可燃气体监测仪,以创新科技赋能安全监测&#xff0…...

Lumoz Chain正式上线:AI 时代的新算力破局者

新的叙事和技术突破永远是推动行业前行的核心动力。当下,AI Agent无疑是最炙手可热的赛道之一。 当加密世界将目光投向AI领域时,大多数项目仍停留在以AI为工具或应用场景的层面,试图通过集成AI模型或优化链上功能来吸引用户。然而&#xff0…...

算法之排序算法

排序算法 ♥常见排序算法知识体系详解♥ | Java 全栈知识体系 算法 - 排序 | CS-Notes 面试笔记 十大经典排序算法总结 | JavaGuide...

Java面试第七山!《MySQL索引》

一、索引的本质与作用 索引是帮助MySQL高效获取数据的数据结构,类似于书籍的目录。它通过减少磁盘I/O次数(即减少数据扫描量)来加速查询,尤其在百万级数据场景下,索引可将查询效率提升数十倍。 核心作用:…...

基于 Rust 与 GBT32960 规范的编解码层

根据架构设计,实现编解码层的代码设计 Cargo.toml 加入二进制序列化支持 # 序列化支持 ... bincode "1.3" # 添加二进制序列化支持 bytes-utils "0.1" # 添加字节处理工具 开始编码 错误处理(error.rs&#x…...

二、Redis 安装与基本配置:全平台安装指南 服务器配置详解

Redis 安装与基本配置:全平台安装指南 & 服务器配置详解 Redis 作为高性能的内存数据库,其安装和配置是使用 Redis 的第一步。本篇文章将全面介绍 Redis 的安装方式,覆盖 Windows、Linux、Docker 环境,并详细讲解 Redis 的基础配置,包括 持久化、日志、端口设置等。此…...

⭐算法OJ⭐矩阵的相关操作【动态规划 + 组合数学】(C++ 实现)Unique Paths 系列

文章目录 62. Unique Paths动态规划思路实现代码复杂度分析 组合数学思路实现代码复杂度分析 63. Unique Paths II动态规划定义状态状态转移方程初始化复杂度分析 优化空间复杂度状态转移方程 62. Unique Paths There is a robot on an m x n grid. The robot is initially lo…...

基于 Elasticsearch 和 Milvus 的 RAG 运维知识库的架构设计和部署落地实现指南

最近在整理一些业务场景的架构设计和部署落地实现指南 先放一个 【基于RAG的运维知识库 (ElasticSearch + Milvus) 的详细实现指南】,其中包含了详尽的技术实现细节、可运行的示例代码、原理分析、优缺点分析和应用场景分析。 架构描述: 基于RAG的运维知识库 (ElasticSearch…...

山西青年杂志山西青年杂志社山西青年编辑部2025年第3期目录

青年争鸣 教师发展中心行动转向的价值意蕴分析框架研究与启示 于宝证;李军红;郑钰莹;何易雯; 产教融合视角下职业本科工商管理专业人才培养模式探析 杜芯铭; 青年教育研究 教育数字化背景下高职院校的课堂教学研究 张晨; 统筹职业教育、高等教育、继续教育协同…...

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...

【GenBI优化】提升text2sql准确率:建议使用推理大模型,增加重试

引言 Text-to-SQL(文本转 SQL)是自然语言处理(NLP)领域的一项重要任务,旨在将自然语言问题自动转换为可在数据库上执行的 SQL 查询语句。这项技术在智能助手、数据分析工具、商业智能(BI)平台等领域具有广泛的应用前景,能够极大地降低数据查询和分析的门槛,让非技术用…...

LLVM - 编译器前端 - 学习将源文件转换为抽象语法树(二)

一:处理消息 在一个庞大的软件(比如编译器)中,我们不希望将消息字符串分散在各个地方。如果需要修改消息内容或将其翻译成另一种语言,最好将它们集中存放在一个地方!目前缺少的是对消息的集中定义。下面我们看看来如何实现它。 一种简单的方法是,每条消息都有一个 ID(一…...

T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取

目录 介绍目录视图 获取表和架构名称获取列信息 信息架构视图 获取表信息获取列信息 系统存储过程和函数 获取对象列表获取对象详细信息获取约束信息获取数据库属性信息 总结引用 介绍 在 SQL 数据库管理中,获取数据库对象的元数据信息是至关重要的。元数据提供了…...

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大,游戏玩家对游戏资讯、攻略、评测等内容的需求日…...

批量提取 Word 文档中的页面

如何将 Word 文档中的页面提取出来形成一个新的文档呢?比如将 Word 文档中的第一页提取出来、将 Word 文档中的最后一页提取出来、再或者将 Word 文档中的中间几页提取出来等等。人工的处理肯定非常的麻烦,需要新建 Word 文档,然后将内容复制…...

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链,继续使用基于 langgraph 链 ,对结构化数据库 SQlite 进行查询的方法。该系统建立以后,我们不需要掌握专业的 SQL 技能,可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…...

csrf与ssrf学习笔记

一、CSRF(Cross-Site Request Forgery) 1. 定义 攻击目标:利用用户已登录的合法身份,在用户不知情的情况下发起恶意请求。 核心条件:受害者需已登录目标系统,且浏览器会自动携带身份凭证(如 C…...

安装Maven配置阿里云地址 详细教程

下面以安装Maven公认最稳定版本(使用最多)3.6.1为例 1、访问maven官网 Maven官网 直接跳转Maven3.6.1 Maven3.6.1 2、点击下载 跳转页面后继续单击 Maven 3 archives 下载后解压放到自己的软件目录下 ~ 2.配置本地仓库 在目录下创建repo文件夹 &…...

我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品

基础的物品大家都会做了对吧?包括武器的释放技能,这次来点难度,让物品的贴图呈现动画效果和扔出后显示3D立体效果,这个3D立体效果需要先学习blockbench,学习如何制作贴图。 Blockbench Blockbench是一个用于创建和编辑三维模型的免费软件,特别适用于Minecraft模型的设计…...

火语言RPA--PDF提取表格

【组件功能】:提取PDF文档指定位置表格 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待提取表格的PDF文件的完整路径。 提取位置 全部、指定页、指定范围3种位置供选择。 PDF文件密码 支持T或# 打开PDF文件的密码。 页码 支持T或# 提取指定页的页…...

【开源-线程池(Thread Pool)项目对比】

一些实现**线程池(Thread Pool)**功能的开源项目的对比分析。 线程池功能的开源项目 项目名称语言优点缺点适用场景开源代码链接ThreadPoolC简单易用,代码简洁;适合快速原型开发。功能较为基础,不支持动态调整线程数…...

JavaScript系列05-现代JavaScript新特性

JavaScript作为网络的核心语言之一,近年来发展迅速。从ES6(ECMAScript 2015)开始,JavaScript几乎每年都有新的语言特性加入,极大地改善了开发体验和代码质量。本文主要内容包括: ES6关键特性:解构赋值与扩展运算符&am…...

【二.提示词工程与实战应用篇】【3.Prompt调优:让AI更懂你的需求】

最近老张在朋友圈秀出用AI生成的国风水墨画,隔壁王姐用AI写了份惊艳全场的年终总结,就连楼下小卖部老板都在用AI生成营销文案。你看着自己跟AI对话时满屏的"我不太明白您的意思",是不是怀疑自己买了台假电脑?别慌,这可能是你的打开方式不对。今天咱们就聊聊这个…...

C++学习之C++初识、C++对C语言增强、对C语言扩展

一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 &#xff0c;理解为打开一个房间&#xff0c;房间里有我们所需…...

基于eRDMA实测DeepSeek开源的3FS

DeepSeek昨天开源了3FS分布式文件系统, 通过180个存储节点提供了 6.6TiB/s的存储性能, 全面支持大模型的训练和推理的KVCache转存以及向量数据库等能力, 每个客户端节点支持40GB/s峰值吞吐用于KVCache查找. 发布后, 我们在阿里云ECS上进行了快速的复现, 并进行了性能测试, ECS…...

写Oracle表耗时25分钟缩短到23秒——SeaTunnel性能优化

本文主要给大家介绍JDBC Source批处理任务动态切分优化&#xff0c;希望大家批评指正 JDBC Source 如果配置了table_path 和 partition_column&#xff0c;引擎会对数据进行动态切分&#xff0c;可以通过分析样本数据优化切分区间&#xff0c;规避数据倾斜问题。 目前发现任务…...

Golang的图形用户界面设计

一、Golang图形用户界面设计的基本概念 了解Golang 也称为Go语言&#xff0c;是一种由Google开发的开源编程语言。它具有良好的并发性&#xff0c;能够更好地利用多核处理器&#xff0c;同时也拥有丰富的标准库和强大的工具链。 什么是图形用户界面 图形用户界面&#xff08;GU…...

蓝桥杯备赛Day12 动态规划1基础

动态规划 动态规划基础 动态规划将复杂问题分解成很多重叠的子问题&#xff0c;再通过子问题的解得到整个问题的解 分析步骤: 确定状态:dp[i][j]val,“到第i个为止&#xff0c;xx为j的方案数/最小代价/最大价值” 状态转移方程: 确定最终状态 要求: (1)最优子结构 (2)无后效性…...

我的AI工具箱Tauri版-通用音频转文本

本模块支持FunAsr和FasterWhisper两种模式&#xff0c;可批量处理音频与视频文件&#xff0c;自动生成txt文本与srt字幕&#xff0c;满足多种应用场景需求。 工具内置FunAsr&#xff0c;无需额外参数调整&#xff0c;特别适用于中文语音的高质量转录&#xff0c;确保识别准确率…...

C#—Settings配置详解

C#—Settings配置详解 在C#项目中&#xff0c;全局配置通常指的是应用程序的设置&#xff08;settings&#xff09;&#xff0c;这些设置可以跨多个类或组件使用&#xff0c;并且通常用于存储应用程序的配置信息&#xff0c;如数据库连接字符串、用户偏好设置等。 Settings配置…...

机器学习算法——分类任务

算法&#xff1a; 1、决策树 2、随机森林 3、梯度提升树 4、逻辑回归 5、支持向量机SVM 6、K近邻 KNN 7、朴素贝叶斯 8、多层感知机 9、统一分类 10、比较总结 11、完整代码 1、决策树 1.1 Decision Tree Analysis (C4.5,CART,CHAID)决策树 算法树结构特征选择连续值处理缺失…...

聆听PostgreSQL数据库的使用

参考&#xff1a;&#xff08;1&#xff09;零基础入门PostgreSQL教程 &#xff08;2&#xff09;菜鸟教程 文章目录 一、PostgreSQL是什么&#xff1f;二、基本使用1.下载2.操作&#xff08;1&#xff09;数据库&#xff08;2&#xff09;表 一、PostgreSQL是什么&#xff1f;…...

C# 装箱(Boxing)与拆箱(Unboxing)

C# 装箱&#xff08;Boxing&#xff09;与拆箱&#xff08;Unboxing&#xff09; 在 C# 中&#xff0c;装箱和拆箱是与值类型&#xff08;如结构体&#xff09;和引用类型&#xff08;如类&#xff09;之间的转换相关的操作。它们是类型系统的一部分&#xff0c;但如果不正确使…...

vue实例

// vue应用通过createApp函数创建一个新的应用实例&#xff0c;相当于根组件 import { createApp } from vue import App from ./App.vue // 在一个vue项目当中&#xff0c;有且只有一个vue的实例对象 const appcreateApp(App) // App:根组件 // 实例必须调用了.mount&am…...

Spring Boot的启动流程

Spring Boot 的启动流程是一个复杂且有序的过程&#xff1a; 创建SpringApplication实例 — 调用run方法 — 启动完成(发布应用启动事件&#xff0c;配置环境&#xff0c;创建ApplicationContext&#xff0c;准备ApplicationContext&#xff0c;刷新ApplicationContext[【创建B…...

springboot整合pagehelper实现mybatis分页

1.依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.0</version></dependency><dependency><groupId>com.github.pagehelper<…...

Qt信号与槽机制

‌Qt信号与槽机制&#xff08;Signal and Slot Mechanism&#xff09;‌是Qt框架中用于对象间通信的一种机制。信号和槽是Qt的核心特性之一&#xff0c;它们允许对象在特定事件发生时发送信号&#xff0c;并由其他对象通过槽函数进行响应。这种机制不仅简化了对象间的通信&…...

Qt空项目代码解释

一、 背景 创建的是一个 QWidget 项目。 二、main.cpp 1、图片 2、代码解释 &#xff08;1&#xff09;QApplication Qt 图形化界面中一定有 QApplication &#xff08;2&#xff09;Widget w; 是 QWidget 的子类。 &#xff08;3&#xff09;w.show(); 继承父类的显示…...

【Git】版本控制系统Git命令详解

2024.06.06 2024.06.06\ 2024.06.06 Resources 强推&#xff1a;Pro Git - Book (git-scm.com).中文版. 强烈推荐网址&#xff1a;https://learngitbranching.js.org/?localezh_CN. LearnGit Game&#xff1a; 基础&#xff08;Git 主要命令&#xff09; Git Commit&#…...

Java【多线程】(2)线程属性与线程安全

目录 1.前言 2.正文 2.1线程的进阶实现 2.2线程的核心属性 2.3线程安全 2.3.1线程安全问题的原因 2.3.2加锁和互斥 2.3.3可重入&#xff08;如何自己实现可重入锁&#xff09; 2.4.4死锁&#xff08;三种情况&#xff09; 2.4.4.1第一种情况 2.4.4.2第二种情况 2.4…...

浅克隆与深克隆区别

package d12_api_object;public class Test2 {public static void main(String[] args) throws CloneNotSupportedException {//目标&#xff1a;掌握Object类提供的对象克隆方法//1、protected Object clone():对象克隆User u1 new User(1,"min","1120",…...

【计算机网络入门】初学计算机网络(九)

目录 1.令牌传递协议 2. 局域网&IEEE802 2.1 局域网基本概念和体系结构 3. 以太网&IEEE802.3 3.1 MAC层标准 3.1.1 以太网V2标准 ​编辑 3.2 单播广播 3.3 冲突域广播域 4. 虚拟局域网VLAN 1.令牌传递协议 先回顾一下令牌环网技术&#xff0c;多个主机形成…...