MySQL的数据目录以及日志

1.MySQL数据目录

MySQL服务器的管理信息、业务数据、⽇志⽂件、磁盘缓冲⽂件默认存储在数据⽬录下.数据目录保存了我们用户的信息,以及我们创建的数据库和表的数据.维护了日志文件等.mysqld主要操作的就是我们的数据目录.

如何查看数据目录:

ll /var/lib/mysql#ll 是查看指令
#/var/lib/mysql 是数据目录文件的路径

数据目录包括的东西:

1.二进制日志:主要是处理我们mysql集群,一个主服务器负责写操作,主服务器就会有一个二进制日志,将写操作以二进制文件的形式写入二进制文件.而其他的从服务器(负责查询操作) 会有一个中继日志负责读取主服务器的二进制日志从而获取最新的写操作(指的是对数据的增删改).

2.SSL和RSA证书和密钥文件:

        SSL作用:

                a.加密通信:前面在网络的时候我们介绍到过,这里也是一样的,使用非对称加密和对称加密结合的方式

                b.SSL 证书可用于验证服务器和客户端的身份。服务器证书用于证明 MySQL 服务器的身份,客户端在连接时会验证该证书以确认连接到正确的服务器,防止中间人攻击

                c.SL 协议具备校验机制,能确保传输的数据在传输过程中没有被修改。一旦数据被篡改,通信双方可立刻发现 

RSA 是一种非对称加密算法,在 MySQL 证书体系中:

  • 密钥对生成:RSA 算法用于生成公钥和私钥对。公钥包含在证书中,可被公开分发;私钥由服务器或客户端安全保存。在 SSL 握手过程中,利用公钥和私钥进行加密和解密操作,协商出用于后续数据加密传输的对称加密密钥 。

    

3.双写缓冲区文件

InnoDB 默认数据页大小为 16KB ,而操作系统内存页常为 4KB,即一个 InnoDB 页对应 4 个系统页。数据写入磁盘时,若因断电、系统崩溃等意外,可能出现只写入部分系统页的情况,导致数据页损坏。

4.我们自己创建的数据库也会保存在数据目录

5.mysql⽬录对应于mysql系统库,包含mysql服务器运⾏时所需的信息,该数据库包含数据字典 表和系统表

6.performance_schema⽬录对应于PerformanceSchema,提供了在运⾏时⽤于检查服务器内 部执⾏的信息;

7.sys⽬录对应于sys系统库,提供⼀组对象来帮助解释性能模式相关信息;


2.日志简介

日志类型说明
一般查询日志(General log)已建⽴的客⼾端连接和从客⼾端接收到的语句
错误日志(Error log)mysqld在启动、运⾏或停⽌时遇到的问题
二进制日志更改数据的语句(也⽤于主从复制)
慢查询日志(slow query log)执⾏时间超过 long_query_time 指定秒数的查询
中继日志从源服务器接收到的数据更改
DDL日志DDL语句执⾏的操作
回滚⽇志/撤销⽇志(undolog)⽤于事务的回滚操作
重做⽇志(redolog)⽤于服务器崩溃恢复

1.默认情况下,除Windows上的错误⽇志外,不启⽤任何⽇志,Linux下默认开启错误⽇志和⼆进制⽇志 

2.在服务器运⾏期间可以控制⼀般查询和慢查询⽇志的禁⽤与开启,也可以更改⽇志⽂件名(支持动态修改)

3.⼀般查询⽇志和慢查询⽇志记录可以写⼊⽇志表、⽇志⽂件或两者同时写⼊

4.默认情况下,所有启⽤的⽇志将写⼊数据⽬录,可以通过刷新⽇志强制服务器关闭并重新打开⽇志⽂件

5.通过 FLUSH LOGS 语句刷新⽇志来强制服务器关闭并重新打开⽇志⽂件,也可以使⽤ mysqladmin的 flush-logs refresh 参数,或mysqldump的--flush-logs 或-master-data 选项

6.中继⽇志仅⽤于主从复制过程中的从服务器。


2.1 一般查询日志和慢查询日志输出形式

如果启用一般查询日志和慢查询日志,日志的输出方式可以指定为日志文件和表的形式(mysql系统库中的general_log(一般查询日志)和slow_log(慢查询日志)).两者也可以同时指定

2.2.1 服务器启动时日志控制

log_out指的是日志输入的方式,并不会真正的开始日志输出.log_out可以有三个值:FILE(文件形式),TABLE(表的形式),NONE(不输出).可以同时指定多个值,中间用逗号隔开.未指定的时候默认值是FILE.如果我们同时指定了(FILE,NONE)或者(TABLE,NONE).结果都是按照NONE(不输出).也就是只要是指定了NONE就不输出(NONE的优先级最高).

一般查询日志开启:通过指定general_log系统变量为0(关闭),1(开启).如果要为日志指定自定义的路径或者文件名可以使用general_log_file系统变量.

实例:(在配置文件 my.cnf 中设置)

1.将一般查询日志写入文件和表

[mysqld]#日志文件的输出形式log_out=FILE,TABLE#开始日志general_log=1

2.仅将⼀般查询⽇志和慢查询⽇志写⼊⽇志表

[mysqld]#日志文件的输出形式log_out=TABLE#开始一般查询日志general_log=1#开始慢查询日志slow_log=1

3.仅将慢查询⽇志写⼊⽇志⽂件

[mysqld]#日志输出形式log_out=FILE#开启慢查询日志slow_log=1

4.将⼀般查询⽇志和慢查询⽇志写⼊⽇志⽂件,并指定⾃定义的⽇志路径

[mysqld]#⽇志⽂件
log_output=FILE   #开启⼀般查询⽇志   
general_log=1  #指定⾃定义的⽂件名   
general_log_file=/var/lib/mysql/general.log #开启慢查询⽇志
slow_query_log=1     #指定⾃定义的⽂件名
slow_query_log_file=/var/lib/mysql/slow_query.log

修改上述配置文件之后一般都要重新启动MySQL服务器.

#重启mysql服务器
systemctl restart mysql

#查看mysql服务器状态
systemctl status mysql


 查看我们设置的日志配置文件是否生效

配置文件

一般查询日志是否开启

一般查询日志路径

慢查询日志是否开启

慢查询日志路径


2.2.2 使用表查看一般查询日志和慢查询日志

查看表内包含字段:

#\G作为结束标识符结果会以垂直格式输出
# ; \g 结果会以表格形式呈现#查看一般查询日志的表内字段
show  create table mysql.general_log\G#查看慢查询日志的表内字段
show  create table mysql.slow_log\G

一般查询日志

 慢查询日志

接下来介绍下一般查询日志.


3.一般查询日志

其实就是将我们所有操作sql的语句都保存到日志中了

1.General query log-⼀般查询⽇志,记录客⼾端连接或断开连接的信息,也会记录从客⼾端接收的 每个SQL语句。如果开启将会产⽣⼤量的内容,⾮常耗费服务器资源,所以默认为关闭(不开启), 要启⽤⼀般查询⽇志可以使⽤ general_log=0(禁用)或者1(开启).

2.默认⽇志⽂件名为 主机名 .log ,可以使⽤general_log_file={自定义文件名}

3.Mysqld按照接收到SQL语句的顺序将语句写⼊查询⽇志,这个顺序可能与语句执⾏的顺序不同

表结构如下:

 分析每个字段的作用:

如果我们想要查看操作的语句需要使用 CAST(argument AS char).

#使用CAST(argument AS char)
select event_time,user_host,thread_id,server_id,command_type,CAST(argument AS char) from mysql.general_log\G


4.慢查询日志

1.慢查询⽇志由执⾏时间超过系统变量 long_query_time 指定的秒数的SQL语句组成,并且检查的⾏数⼤于系统变量min_examined_row_limit 指定值.long_query_time和min_examined_row_limit都满足的时候才是慢查询.

2.获取初始锁的时间不计⼊执⾏时间,mysqld在执⾏完SQL语句并释放所有锁后才将符合条件的语 句写⼊慢速查询⽇志,因此⽇志顺序可能与执⾏顺序不同。

4.1 慢查询日志的参数

long_query_time:默认时间为10s

 min_examined_row_limit(默认行数为0行)

只有都满足才会定义为慢sql,才会将这条sql语句存储到慢查询日志中


1.默认情况下,不记录管理语句(数据库的创建、用户权限管理、备份恢复、性能监控等),也不记录不使⽤索引的查询(在创建数据库的时候一般会将id作为主键,也就是生成了主键索引.不记录不使用索引的查询就是查询数据的时候没有使用id字段的查询).

下面这种查询语句就是没有使用索引(默认即使符合慢查询也不会被记录,如果想要被记录就修改)

2.默认为关闭(不开启),要启⽤慢查询⽇志可以使⽤:请使⽤--slow_query_log[={0|1}]

3.默认⽇志⽂件名为 host_name-slow.log ,可以使⽤ slow_query_log_file= file_name 修改

4.使⽤--log-short-format 选项,以简要格式记录慢查询⽇志

5.要记录管理语句,启⽤ log_slow_admin_statements 系统变量。

6.要记录不使⽤索引的查询,启⽤ log_queries_not_using_indexes 系统变量。当记录不使 ⽤索引的查询时,⽇志会快速增⻓,通过设置系统变量log_throttle_queries_not_using_indexes 限制每分钟写⼊慢查询⽇志同类查询的数 量,默认值是0,表⽰⽆限制


4.2 慢查询日志的内容(文件)

Query_time:SQL语句执行的时间,单位是秒

Lock_time:获取到锁的时间,单位秒

Rows_sent:发送到客户端的行数(也就是返回的结果集的行数)

Rows_examined:服务器检查的行数(服务器扫描数据表中具体数据行的数量)

启⽤--log-slow-extra[={OFF|ON}]系统变量会将以下额外字段写⼊到FILE中,TABLE形式不受影 响 

Thread_id: 线程标识符

Errno: 错误码,没有发⽣错误则为0

Killed: 如果语句被终⽌,⽤错误码表⽰原因,如果语句正常终⽌则为0

Bytes_received: 接收到SQL语句的Bytes值。

Bytes_sent: 返回给客⼾端的Byte值。

Read_first: 索引中第⼀个条⽬被读取的次数,如果这个值很⾼,表明服务器正在执⾏⼤ 量完整索引扫描

Read_last: 读取索引中最后⼀个键的请求数

Read_key: 基于索引读取⼀⾏数据的请求数。如果这个值很⾼,表明表为当前查询建⽴了 正确的索引

Read_next: 按索引排序读取下⼀⾏的请求数,查询具有范围约束的索引列,或者进⾏索引 扫描,此值将递增。

Read_prev: 按索引排序读取前⼀⾏的请求数。主要⽤于优化ORDERBY DESC。

Read_rnd: 基于固定位置读取⼀⾏的请求数。这个值很⾼表⽰,正在执⾏⼤量需要对结果进 ⾏排序的查询,可能有很多查询进⾏了全表扫描整,或者没有正确使⽤索引的连接

Read_rnd_next: 读取数据⽂件中下⼀⾏的请求数。如果进⾏⼤量的表扫描,这个值会很 ⾼。通常,表⽰表没有建⽴正确地索引,或者查询没有利⽤索引。

Sort_merge_passes: 排序算法完成的归并次数,如果这个值很⼤,考虑增加 sort_buffer_size 系统变量的值。

Sort_range_count: 使⽤范围进⾏排序的次数

Sort_rows: 排序的⾏数。  

Sort_scan_count: 通过扫描表完成的排序数。

Created_tmp_disk_tables: 服务器在执⾏语句时创建内部磁盘临时表的数量。 Created_tmp_tables: 服务器在执⾏语句时创建的内部临时表的数量。

Start: 执⾏SQL语句开始时间

End: 执⾏SQL语句结束时间

4.3用表的形式输出

mysql> show create table mysql.slow_log\G


5.错误日志

错误⽇志⼀般会记录mysqld启动和关闭的次数、诊断消息,以及服务器运⾏期间发⽣的错误和警 告;例如MySQL需要⾃动检查或修复⼀个表,就会在错误⽇志中写⼊⼀条记录。错误⽇志默认使⽤ UTF-8 ( utf8mb3 )编码格式,并使⽤英语⽣成记录.

5.1配置错误日志文件

错误⽇志输出的位置,可以是控制台或指定⽂件,"控制台"表⽰stderr 标准错误输出。

5.1.1 Windows路径下

在Windows系统中,mysqld使⽤ --log-error和--console 选项来确定默认的错误⽇志⽬标是控制台还是⽂件,规则如下:

1.如果指定了--console 选项,默认在控制台输出错误⽇志,如果--console 和--log error 同时指定,则--console 优先级更⾼,并且--log-error 将失效。

2.如果没有指定--log-error 或者没有指定具体的⽂件名,默认在数据⽬录中⽣成名为host_name.err 的日志文件

3.可以通过指定绝对路径,来更改默认的⽇志位置。

[mysqld]
#⾃定义错误⽇志的路径log-error=D:/log/MySQL/Error/error_log.err  

5.1.2 Linux下

在Unix和Linux系统中,mysqld使⽤--log-error 选项来指定默认错误⽇志⽬标,可以指定控制台或是⽂件,如果是⽂件,规则如下

1.如果错误⽇志输出⽬标是控制台,则服务器将 log_error 系统变量设置为 stderr .否则,将 以⽂件形式输⼊错误⽇志,并以 log_error 的值为⽂件名

2.如果显⽰写出--log-error 但没有指定具体⽂件,则默认路径是数据⽬录中host_name.err 的⽂件

3.可以通过指定绝对路径,来更改默认的⽇志位置

[mysqld]
#⾃定义错误⽇志的路径
log-error=/var/log/mysql/error_log.err 


5.2 错误日志中事件的字段

time :件时间戳,精度为微秒;

msg :事件消息字符串;

prio :事件优先级,包括 System event-系统(0)、 Error event-错误(1)、 Warning event-警告(2)或 Note/information event-通知/提⽰事件(3),值越⼩优先级越⾼

MySQL内部维护的一套错误代码的定义

err_code :事件错误代码;

err_symbol :以字符串形式表⽰的事件错误符,例如 'ER_DUP_KEY' ;

SQL_state :事件SQLSTATE值,与 err_symbol 对应,例如 'ER_DUP_KEY' 对应的 SQLSTATE为23000

subsystem :事件发⽣的⼦系统。可能的值: InnoDB (InnoDB存储引擎)、 Repl (复制⼦系 统)、 Server (其他)。

#查看日志文件
cat /var/log/mysql/'日志文件名'

错误日志官网:

MySQL :: MySQL 8.0 Error Reference :: 4 Global Error Message Referencehttps://dev.mysql.com/doc/mysql-errors/8.0/en/global-error-reference.html#error_ee_sync


5.3 刷新错误日志和重命名

如果使⽤ FLUSH ERROR LOGS FLUSH LOGS 语句或 mysqladmin flush-logs 命令刷 新错误⽇志,服务器会将正在写⼊的任何错误⽇志⽂件关闭并重新打开。

如果要⼿动重命名错误⽇志⽂件,可以在重命名操作之后执⾏刷新操作,服务器会以原⽂件名⽣成 ⼀个新的错误⽇志⽂件,例如⽇志⽂件名为 host_name .err ,可以按以下步骤操作:

#重命名⽇志⽂件
mv host_name.err host_name.err-old # 刷新操作
mysqladmin flush-logs # 把重命名的⽇志⽂件移动到备份⽬录
mv host_name.err-old backup-directory

6.二进制日志

二进制日志可以用于MySQL集群用来主从复制.下面先简单介绍下MySQL集群.在我们项目访问量比较小.没必要对数据库进行分库分表.但是如果项目突然爆火,访问量骤增.此时数据库就顶不住压力此时就要使用MySQL集群.就是一个主服务器负责写操作,其他的从服务器负载查询操作.

那么如何实现数据同步呢?主服务器修改了数据如何将修改的数据同步给从服务器?

这里就使用到我们的二进制日志(主服务器修改完数据库后会存储到二进制日志),从服务器会有一个中继日志,二进制日志会将数据同步到从服务器的中继日志里,从服务器读取中继日志获取信息.


6.1 介绍

⼆进制⽇志包含数据库更改的"事件",不会记录 SELECT 和 SHOW ,例如:记录表的创建操作或 表数据的更改,⼆进制⽇志还包含每个语句更新数据时花费的时间信息,启动⼆进制⽇志,对服务 器性能稍微有些影响;

除了基于⾏的⽇志模式,它还包含可能进⾏更改数据的语句事件,例如 DELETE 操作没有匹配到 查找到的⾏

二进制日志的作用:

主从节点数据复制:上面简单介绍了

数据恢复:从某个时间点恢复备份数据后,将重新执⾏备份时间点之后记录在⼆进制⽇志中的 事件。这些事件使数据库从备份点更新到当前最新状态。

⼆进制⽇志的语句中如果涉及⽤⼾的密码,则由服务器进⾏加密,不会以纯⽂本形式出现

6.2查看二进制日志的系统变量

#查看二进制日志的系统变量
show variables like '%bin%';

6.3 查看二进制日志的状态变量

#查看二进制日志的状态变量
show  status like '%bin%';


6.4 二进制日志分析

1.默认情况下启⽤⼆进制⽇志, log_bin 系统变量 ON

2.禁⽤⼆进制⽇志,可以指定 --skip-log-bin --disable-log-bin 选项。如果同时指--log-bin后指定的选项优先;

3.选项--log-bin[= base_name] ⽤于指定⼆进制⽇志⽂件的基本名称,如果不指定 bin 选项,默认基本名称为 binlog ,建议为⼆进制⽇志指定⼀个基本名;

4.⼆进制⽇志⽂件名是由基本名+数字扩展名组成的,服务器每次创建⼀个新的⽇志⽂件时,数字扩展名都会增加,从⽽保证有序的⽂件系列,发⽣以下事件时,服务器都会在创建⼀个新的⽇志⽂件

服务器已启动或重新启动

服务器刷新⽇志

当前⽇志⽂件的⼤⼩达到 max_binlog_size (单个⽇志⽂件的最⼤字节数,最⼩值4096字 节,最⼤值和默认值1GB).

TIPS:⼆进制⽇志⽂件⼤⼩可能会超出 max_binlog_size 设定的值,因为⼆进制⽇志在记录事务 时,会完整的记录整个事务,不存在把⼀个事务拆分的情况,如果遇到⼀个⼤事务时,即使记录 整个事务会超过⽇志⼤⼩限制,也会保证事务的完整性

5.mysqld还会创建⼀个包含⼆进制⽇志⽂件名的⽇志索引⽂件,默认情况下,这与⼆进制⽇志⽂件 具有相同的基本名称,扩展名为 .index . 可以使⽤选项--log-bin-index[= file_name] 修改索引⽂件

6.⼆进制⽇志⽂件和索引⽂件的默认位置是数据⽬录。可以使⽤--log-bin[= file_name] 格式=绝对路径+基本名。 指定⾃定义路径, file_name] 选项--log-bin 对应的系统变量是 log_bin_basename 

注意下面四个选项或者系统变量:

7.MySQL5.7中,启⽤⼆进制⽇志必须指定服务器ID,对应 server_id 选项启动。否则服务器将⽆法启动.在MySQL8.0中 server_id 系统变量默认设置为1,在集群环境中,每台MySQL服务 器必须有唯⼀的service_id


6.5 查看二进制日志

6.5.1 使用客户端工具mysqlbinlog查看

mysqlbinlog binlog.000003 > binlog.000003

6.5.2 使用mysql 语句查看

mysql> show binlog events in 'binlog.000001' from N limit S;


6.6 二进制日志格式

1.基于语句的⽇志格式,最初MySQL是基于SQL语句复制实现主从节点同步,

通过指定选项 --binlog-format=STATEMENT 使⽤此格式

2.基于⾏的⽇志格式(默认)中,主节点将事件写⼊⼆进制⽇志,表⽰各个表的⾏受到的影响,可以通 过指定选项--binlog-format=ROW 使⽤此格式 

# 
基于⾏,记录每⼀⾏的更改
update student set age = 18 where id = 10;update student set age = 18 where id = 11;update student set age = 18 where id = 12;

3.混合⽇志记录格式,默认情况下使⽤基于语句的⽇志记录,如果MySQL认为基于语句的格式不能保 证主从复制过程中的数据安全时,会⾃动切换到基于⾏的⽇志格式


6.7 服务器日志维护

MySQL服务器可以创建多种不同的⽇志⽂件来帮助我们查看服务器的活动。但是必须定期清理这 些⽂件,以免⽇志占⽤过多的磁盘空间。在启⽤⽇志的情况下,通常希望备份和删除旧的⽇志⽂件, 并把⽇志写到新⽂件。

默认⼆进制⽇志的过期时间为30天,过期后将⾃动删除,要指定⾃定义过期时间,可以使⽤系统变 量 binlog_expire_logs_seconds=N 单位为秒,在下⼀次启动服务器和刷新⽇志时删除过期 ⽇志⽂件.

强制使⽤新的⽇志⽂件可以⼿动刷新⽇志,当执⾏ FLUSH LOGS 语句或 mysqladmin refresh logs mysqldump --flush-logs mysqladmin flush mysqldump - master-data 命令时,会发⽣⽇志刷新。此外当⼆进制⽇志⽂件⼤⼩达到 max_binlog_size 系统变量指定的值时,服务器会⾃动刷新⼆进制⽇志.

F LUSH LOGS ⽀持可选的修饰符以启⽤个别⽇志的选择性刷新

FLUSH BINARY LOGS  # 刷新⼆进制⽇志FLUSH ERROR LOGS   # 刷新错误⽇志FLUSH GENERAL LOGS # 刷新⼀般查询⽇志FLUSH RELAY FLUSH LOGS   #刷新中继⽇志SLOW LOGS    #刷新慢查询⽇志

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

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

相关文章

论文阅读:Dual Anchor Graph Fuzzy Clustering for Multiview Data

论文地址:Dual Anchor Graph Fuzzy Clustering for Multiview Data | IEEE Journals & Magazine | IEEE Xplore 代码地址:https://github.com/BBKing49/DAG_FC 摘要 多视角锚图聚类近年来成为一个重要的研究领域,催生了多个高效的方法。然而&#…

32f4,串口1,usart.c.h2025

usart.c #include "sys.h" #include "usart.h" #include "led.h" // #include "stdlib.h" #include "stdarg.h" #include "stdio.h" //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1#pragma…

C语言:一组位操作宏

解析协议时&#xff0c;取得位域的值是一种常见操作&#xff0c;这些宏可以辅助我们工作。 /* ** 将x的第n位置1 ** ** x 0x00000000 ** BIT_SET(x, 7) 0x00000080 */ #define BIT_SET(x, n) ((x) | (1 << (n)))/* ** 将x的第n位置为0 ** ** x 0x00000080 ** …

记一个使用BigDecimal所有类型变为整数的问题

场景 通过 Excel 导入数据&#xff0c;数据中包含金额。数据库类型 decimal(18, 6) 问题 Excel 导入后所有的金额列都被四舍五入。经过测试&#xff0c;只有数据有整数时所有数据才会被四舍五入&#xff0c;全部为浮点类型没有问题。 解决 强制设置小数位数 // RoundingM…

nodejs、socket.io、express + 实时线上聊天系统(自用笔记)

留个链接给自己参考用&#xff1a; socket.io官方文档&#xff1a;介绍 | Socket.IO nodejs基础语法&#xff1a;大前端技能讲解&#xff1a;NodeJS、Npm、Es6、Webpack_nodejs webpack-CSDN博客 socket.io教学&#xff1a;半小时学会socket.io【中英字幕】Learn Socket.Io …

配置网络编辑器

网络断开的原因 1.由于网络未连接的情况 解决方法 方法1&#xff1a;检查网卡配置 cd /etc/syscongfig/network_scripts vi ifcfg_ens31 方法2&#xff1a;打开虚拟机编辑--- 虚拟网络编辑器 查看ip地址是否在可用的网段范围内 修改后重启网络 systemctl restart netwo…

vscode代码片段的设置与使用

在 Visual Studio Code (VS Code) 中&#xff0c;可以通过自定义**代码片段&#xff08;Snippets&#xff09;**快速插入常用代码模板。以下是详细设置步骤&#xff1a; 步骤 1&#xff1a;打开代码片段设置 按下快捷键 Ctrl Shift P&#xff08;Windows/Linux&#xff09;或…

基于S函数的simulink仿真

基于S函数的simulink仿真 S函数可以用计算机语言来描述动态系统。在控制系统设计中&#xff0c;S函数可以用来描述控制算法、自适应算法和模型动力学方程。 S函数中使用文本方式输入公式和方程&#xff0c;适合复杂动态系统的数学描述&#xff0c;并且在仿真过程中可以对仿真…

做题记录:和为K的子数组

来自leetcode 560 前言 自己只会暴力&#xff0c;这里就是记录一下前缀和哈希表的做法&#xff0c;来自灵神的前缀和哈希表&#xff1a;从两次遍历到一次遍历&#xff0c;附变形题 正文 首先&#xff0c;这道题无法使用滑动窗口&#xff0c;因为滑动窗口需要满足单调性&am…

浅浅尝试Numpy的函数:

1.numpy.empty: numpy.empty方法用来创建一个指定形状&#xff08;shape&#xff09;&#xff0c;数据类型&#xff08;dtype&#xff09;且未被初始化的数组&#xff1a; numpy.empty(shape,dtype float,order C) 参数说明&#xff1a; shape:数组形状。 dtype:数据类型&am…

IM基本设计思路与有序ID的重要性

文章目录 概要问题解析思考问题数据基础读取写入总结 概要 说起IM程序我们都不陌生&#xff0c;本篇文章我们就为如何实现一个IM做一个简单的整体方案设计以及基本的数据结构 问题解析 我们先不上一大堆牛逼哄哄的中间件。 我们先从实现角度&#xff0c;来讲讲设计思路。 从…

数据结构学习

链表 单链表 头插 将x插到下标是k的点后面 将下标是k的点后面的点删掉 代码 // head 表示头结点的下标 // e[i] 表示节点i的值 // ne[i] 表示节点i的next指针是多少 // idx 存储当前已经用到了哪个点// 初始化 void init() {head -1;idx 0; }// 将x插到头结点 void add_to_…

0.DJI-PSDK开发准备及资料说明(基于DJI经纬M300RTK和M350RTK无人机上使用)

0.DJI-PSDK开发准备及资料说明&#xff08;基于DJI经纬M300RTK和M350RTK无人机上使用&#xff09; 【资料名称】 DJI经纬M300RTK和M350RTK无人机二次开发资料包。资料包在最下方的百度网盘 一、引言 在进行大疆无人机负载开发的过程中&#xff0c;我整理出一系列有价值的资…

Linux内核TCP/IP协议栈中的设计模式:从面向对象到系统级软件的跨界实践

引言 设计模式(Design Patterns)自GoF(Gang of Four)在1994年提出以来,已成为软件工程领域的核心概念。尽管其经典定义基于面向对象编程(OOP),但设计模式的本质是解决复杂问题的经验总结,而非局限于特定编程范式。本文以Linux内核的TCP/IP协议栈为例,探讨设计模式在…

第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(部分题解)

文章目录 前言日期统计题意&#xff1a; 冶炼金属题意&#xff1a; 岛屿个数题意&#xff1a; 子串简写题意&#xff1a; 整数删除题意&#xff1a; 总结 前言 一年一度的&#x1f3c0;杯马上就要开始了&#xff0c;为了取得更好的成绩&#xff0c;好名字写了下前年2023年蓝桥…

处理JWT Token失效需求

JWT 本身是无状态的&#xff0c;这意味着服务器不会保存任何关于 Token 的状态信息。但为了支持 JWT 的状态管理&#xff08;例如&#xff1a;强制使某些 Token 失效&#xff09;&#xff0c;可以借助 Redis 这样的外部存储来维护一个黑名单或白名单。 安装必要的 NuGet 包 首…

PHP代码审计-01

&#x1f338; 连接方式 PHP Mysql连接方式&#xff1a; Mysql&#xff08;废弃&#xff09;MysqliPDO &#x1f338; 常见过滤 intval/addslashes/mysql_real_escape mysqli_escape_string/mysqli_real_escape_string/mysqli::escape_string PDO::quote 参数化查询 a…

SpringKafka错误处理:重试机制与死信队列

文章目录 引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五、整合事务与错误处理总结 引言 在构建基于Kafka的消息系统时&#xff0c;错误处理是确保系统可靠性和稳定性的关键因素。即使设计再完善的系统&#xff0c;在运行过程中也…

蓝桥杯2024JavaB组的一道真题的解析

文章目录 1.问题描述2.问题描述3.思路分析4.代码分析 1.问题描述 这个是我很久之前写的一个题目&#xff0c;当时研究了这个题目好久&#xff0c;发布了一篇题解&#xff0c;后来很多人点赞&#xff0c;我都没有意识到这个问题的严重性&#xff0c;我甚至都在怀疑自己&#xf…

性能比拼: Go标准库 vs Python FastAPI(第二轮)

本内容是对知名性能评测博主 Anton Putra Python (FastAPI) vs Go (Golang) (Round 2) Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 介绍 这是第二轮关于 FastAPI 和 Golang 的对比测试。我几天前运行了前一次的基准测试&#xff0c;到目…