简单说说mysql的日志
今天我们通过mysql日志了解mysqld的错误日志、慢查询日志、二进制日志,redolog, undolog等。揭示它们的作用和用途,让我们工作中更能驾驭mysql。
redo 日志
如果mysql事务提交后发生了宕机现象,那怎么保证数据的持久性与完整性?
mysql 提供了 redo 来防止 数据丢失。
什么是 redo 日志
redo 日志(也叫重做日志)是一种基于磁盘的数据结构,用于记录事务操作变化,记录的是数据被修改之后的值,在崩溃恢复后恢复事务写入的数据。特别注意:redo 日志是inndb 引擎独有的一种日志
mysql 读取数据不是一条一条读取的,而是会加载 硬盘中的一页数据放到 缓冲区中,后续读取会先看缓冲区是否命中,然后决定是否在冲磁盘。在redo 日志里,也是会有缓冲区的概念,下面我们看看 redo 日志是由哪几个组成的?
组成
- 内存中的重做日志缓冲(redo log buffer)
- 重做日志文件(redo log file)
有日志缓冲区,有磁盘文件,那么他们是怎么更新的呢,下面我们就看看redo 日志的刷盘策略
刷盘策略
每次数据更新会先更新 redo log buffer,然后根据 innodb_flush_log_at_trx_commit 来控制 redo log buffer 更新到 redo log file 的时机。innodb_flush_log_at_trx_commit 有三个值可选:
- innodb_flush_log_at_trx_commit=0:事务提交时,在事务提交时,每秒触发一次 redo log buffer 写磁盘操作,并调用操作系统 fsync 刷新 IO 缓存。
- innodb_flush_log_at_trx_commit=1:事务提交时,InnoDB 立即将缓存中的 redo 日志写到日志文件中,并调用操作系统 fsync 刷新 IO 缓存;
- innodb_flush_log_at_trx_commit=2:事务提交时,InnoDB 立即将缓存中的 redo 日志写到日志文件中,但不是马上调用 fsync 刷新 IO 缓存,而是每秒只做一次磁盘 IO 缓存刷新操作
innodb_flush_log_at_trx_commit三种持久化选项的优劣势
innodb_flush_log_at_trx_commit=0:如果数据库奔溃,有一秒的数据丢失。
innodb_flush_log_at_trx_commit=1: InnoDB的默认配置,为的是保证事务ACID特性。
innodb_flush_log_at_trx_commit=2: 如果操作系统奔溃,最多有一秒的数据丢失。
为什么需要 redo
1- 如果刷脏页还未完成,MySQL这时候因为某些原因宕机,重启后 Buffer Pool中修改的数据还没有及时的刷到磁盘中,就会导致数据丢失,无法保证事务的持久性。
为redo 就可以解决这个问题:redo 记录的是数据库中每个页的修改,而不是某一行修改成怎样.。 这样就可以用来恢复提交后的数据(物理数据页)且只能恢复到最后一次提交的位置。
这样再修改数据时,InnoDB引擎会把更新记录先写在redo log中。在修改Buffer Pool中的数据,当提交事务时,调用fsync把redo log刷入磁盘。
2- 保证事务的持久性:对于一个已经提交的事务,在事务提交后即使系统发生了崩溃,这个事务对数据库中所做的更改也不能丢失。
我很重要:
1- 这里redo 日志用到了 WAL(Write-Ahead Logging)技术,这个技术的核心就在于修改记录前,一定要先写日志,并保证日志先落盘,才能算事务提交完成。
2- innodb 因为 redo 日志 具有了crash-safe 的能力( MySQL宕机,重启后会自动去检查redo log,将修改还未写入磁盘的数据从 redo log 恢复到MySQL中)
相关配置
innodb_log_group_home_dir :定义InnoDB日志文件的目录路径。如果未配置此选项, InnoDB则会在 MySQL 数据目录 ( datadir) 中创建日志文件。
innodb_log_file_size:要更改日志文件大小
innodb_log_files_in_group:要增加日志文件的数量,默认和推荐值为 2。
redo 文件怎么样的
从上面配置可以看出,redo日志不是一个文件出现的,而是以一个文件组出现的。他是一一个环形,从头开始写,写完又从头开始写:
在个日志文件组中还有两个重要的属性,分别是 write pos、checkpoint
- write pos 是当前记录的位置,一边写一边后移
- checkpoint 是当前要擦除的位置,也是往后推移
额外补充
- 预写日志方式(WAL): 数据落盘前,需要先写日志,比如说当一个事务开始时,会记录该事物的LSN(日志序列号),当事务执行的时候,会往日志缓存中插入事务日志,提交的时候将日志缓存落盘, 这种方式称为预写日志方式
- checkpoint: checkpoint是为了定期将db buffer的内容刷新到data file。当遇到内存不足、db buffer已满等情况时,需要将db buffer中的内容/部分内容(特别是脏数据)转储到data file中。在转储时,会记录checkpoint发生的”时刻“。在故障回复时候,只需要redo/undo最近的一次checkpoint之后的操作
- 以下场景出发redo 日志 写文件:
3.1 Redo log buffer空间不足时
3.2 事务commit
3.3 mysql 重启
3.4 binlog切换时
binlog
什么是binlog
binlog是数据库Server层(和引擎无关),它记录了所有的 DDL(数据定义语句)和 DML(数据操纵语句),但是不包括 select 和 show 操作(可以看常规查询日志)。
作用
- 恢复:某些数据的恢复需要二进制日志,如当一个数据库全备文件恢复后,我们可以通过二进制日志进行point-in-time的恢复
- 复制:通过复制和执行二进制日志使的一台远程的mysql数据库(salve)与一台mysql数据库(master)进行实时同步
数据类型
- Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中。
- Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。
- Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。
优点 | 缺点 | |
Statement | 1- 只需要记录执行sql ,避免了记录每一行的变化,相较于row 能大大减少binlog日志量,节约IO,提高性能 2- 实时的还原 3- 主从版本可以不一样,从服务器版本可以比主服务器版本高 | 如果sql中包含函数,可能会出现执行结果不一致。这样就会导致数据不一致(主从,备份等等) |
row | 清晰的记录每行数据的修改细节,任何情况都可以被复制且能加快从库重放日志的效率,保证从库数据的一致性 | 日志量太大了:特别是批量 update、整表 delete、alter 表等操作,由于要记录每一行数据的变化,此时会产生大量的日志,大量的日志也会带来 IO 性能问题。 此外,新版的MySQL中对row级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行 |
Mixed | Mixed level对以上两种类型的结合。不过,新版本的MySQL对row level模式也被做了优化: 1- 并不是所有的修改都会以row 格式记录,如果遇到表结构变更的时候就会以statement模式来记录; 2- 如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更;因此,现在一般使用row level即可 3- 选取规则如果是采用 INSERT,UPDATE,DELETE 直接操作表的情况,则日志格式根据 binlog_format 的设定而记录 | 需要判断使用使用那种模式,需要判断使用哪种格式,所以更慢。 |
启动binlog
二进制日志文件默认的情况下是没有启动的,我们需要手动配置log-bin[=name]进行启动二进制日志。如果我们不指定name,则默认二进制日志文件名为主机名,后缀名为二进制日志的序列号。虽然开启二进制日志会对mysql数据库性能有所影响,但是这个影响是有限的,相对于可以使用复制和point-in-time的恢复,这些性能可以接受。
查看当前是否开启
mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
注意:
- 根据mysql官方手册的测试表名,开启二进制日志会使得性能下降1%
- SHOW VARIABLES LIKE "datadir" 可以查看数据库所在目录
- 写入二进制日志的语句中的密码由服务器重写,不会以纯文本形式出现
- 5.7 启动的时候报错:You have enabled the binary log, but you haven't provided the mandatory server-id. 在配置log-bin同时加一个 server-id
binlog配置
- max_binlog_size: 单个二进制日志文件的最大值(mysql5.0开始默认1G),超过该值就产生新的日志文件,后缀名+1,并记录到.index文件
- binlog_cache_size: 当一个线程开始一个事务的时候,mysql会自动分配一个大小为binlog_cache_size(默认32KB)的缓存,等到事务提交的时候直接将缓冲中的二进制日志写入二进制日志文件中。另外如果事务记录大于binlog_cache_size时,mysql会将缓冲中的日志写入一个临时文件中。为了更好的设置binlog_cache_size值的大小,可以通过SHOW GLOBAL STATUS查看binlog_cache_use, binlog_cache_disk_use来判断当前的的设置是否合理
- binlog_cache_use: 记录使用缓冲写二进制日志的次数
- binlog_cache_disk_use: 记录了使用临时文件写二进制日志的次数
- sync_binlog: 表示每写缓冲多少次就同步到磁盘中:
sync_binlog=0:表示每次提交事务都只write,不fsync
sync_binlog=1:表示每次提交事务都会执行fsync;
sync_binlog=N(N>1):表示每次提交事务都write,累积N个事务后才fsync 。注意:当sync_binlog=1时,使用innodb存储引擎时,在一个事务发出commit动作之前,由于sync_binlog=1,因此会立即将二进制日志文件写入磁盘。如果这时已经写入二进制日志,但没有提交,并且此时发生宕机,那么下次数据库启动时候,因commit操作没有发生,所以这个事务会被回滚,但是二进制日志已经记录了该事务信息,不能回滚。这个问题可以通过将参数innodb_support_xa设为1解决。
- binlog-do-db: 需要写入哪些库的日志
- binlog-ignore-db: 忽略写入哪些库的日志
- binlog_format: 记录二进制日志的格式(5.1版本后引入)
redo 日志和 binlog日志的区别
- redolog 在InnoDB引擎中才有,binlog 是MySQL的服务器层实现的(任何储存引擎都有binlog)
- Redo日志主要用于崩溃恢复过程,保证MySQL宕机也不会影响持久性。Binlog日志主要用于数据恢复、主从复制和数据同步
- redo log 是物理日志,内容基于磁盘的页Page;bin log的内容是二进制,可以根据binlog_format参数自行设置。
- redo log在事务开始时即开始写入并 采用循环写的方式记录;binlog 在事务提交时写入并通过追加的方式记录,当文件大小大于给定值后,后续的日志会记录到新的文件上。
- redo日志能维持crash-safe 能力
undo log
什么是undo 日志
Undo: 逻辑日志(回滚日志),将数据库逻辑地恢复到原来的样子,所有修改都被逻辑地取消了。Undo存在数据库内部的一个特殊的段(undo 段)中,undo段位于共享表空间内。undo 日志保证事务的原子性,也就是事务中的操作要么全部完成,要么什么也不做。
原理
undo日志一般被称为回滚日志,一般执行ROLLBACK时,会将数据恢复到事务开始的状态。注意我们这里并不是将数据库物理的恢复到执行语句或事务之前的样子,而是我们操作一步就会生成一个相反的操作放入undo 段中。比如说:当我们insert一条记录的时候,那么undo段中也会生成对应delete 一条记录。
作用
- 实现MVCC::隐藏字段、Read View、undo log。在内部实现中,InnoDB 通过数据行的 DB_TRX_ID 和 Read View 来判断数据的可见性,如不可见,则通过数据行的 DB_ROLL_PTR 找到 undo log 中的历史版本。
- 回滚数据:undo log记录了每个操作的逆操作,可以逻辑恢复数据
undo 类型
InnoDB存储引擎中Undo Log可以分为以下两种类型:
- insert Undo Log
insert Undo Log是指在insert操作中产生的Undo Log。事务具有隔离的特性,所以insert操作的记录,只对事务本身可见,故该Undo Log可以在事务提交后直接删除。 - update Undo Log
update Undo Log记录的是对delete和update操作产生的Undo Log。该Undo Log可能需要提供MVCC机制,因此不能在事务提交时就进行删除。提交时放入Undo Log链表,等待purge线程进行最后的删除。
Undo Log的配置参数
innodb_max_undo_log_size:Undo日志文件的最大值,默认1GB,初始化大小10M
innodb_undo_log_truncate:标识是否开启自动收缩Undo Log表空间的操作
innodb_undo_tablespaces:设置独立表空间的个数,默认为0,标识不开启独立表空间,Undo日志保存在ibdata1中
innodb_undo_directory:Undo日志存储的目录位置 innodb_undo_logs: 回滚的个数 默认128
慢日志
概念
执行时间超过 long_query_time 且至少需要 min_examined_row_limit(默认是0) 检查行的 SQL 语句组成的日志文件,这个日志文件就叫做慢查询日志。
慢查询日志的主要作用:帮助我们发现那些特别耗时SQL,让我们有针对性地进行优化,从而提高系统的整体效率。如果发现数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助(一般需要结合explain进行全面分析)。
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响慢查询日志支持将日志记录写入文件。
配置
查看慢日志相关配置
# 查看慢SQL是否开启
show variables like "slow_query_log%";
# 查看慢查询设定的阈值 单位:秒
show variables like "long_query_time";
# 慢日志开关: 0为关闭,1为开启
set global slow_query_log='ON';
# 日志文件
set global slow_query_log_file='/xxx/xxx/xxx/host_name-slow.log';
# 设置慢日志阈值的时间
set global long_query_time=2;
也可以在/etc/my.cnf配置
slow_query_log = ON
slow_query_log_file = /xx/xx/xx/host_name-slow.log
# 定义SQL的执行时间阈值(单位为秒),默认是10,最小值为0,可以指定0.1表示100ms。
long_query_time = 2# 输出(有效值:TABLE|FILE|NONE)
log_output = "FILE"# 查询扫描过的最少记录数
min_examined_row_limit = 0# 该参数决定是否记录未使用索引的SQL
log_queries_not_using_indexes = OFF# 该参数决定是否记录管理类的命令:ALTER TABLE,ANALYZE TABLE、CHECK TABLE、CREATE INDEX、DROP INDEX、OPTIMIZE TABLE,REPAIR TABLE
log_slow_admin_statements = OFF # 默认是不记录这一类语句到慢日志# 该参数决定每分钟记录未使用索引的SQL的数量上限,因为未使用索引的SQL可能会非常多,导致慢日志空间增长飞快。
log_throttle_queries_not_using_indexes = 0# 该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL,如果binlog格式是row,则即使开启了该参数,也不会记录相关SQL。
log_slow_slave_statements = OFF
慢日志是怎么生成的
服务器按以下顺序使用控制参数来确定是否将查询写入慢查询日志:
1. 管理类语句不会记录,除非开启了log_slow_admin_statements;
2. 执行时间需要超过long_query_time,或者log_queries_not_using_indexes 开启的,并且记录数量在log_throttle_queries_not_using_indexes之下;
3. SQL需要读取数据行数超过min_examined_row_limit;
4. 从库的复制语句默认不记录,除非binlog格式是statement且开启log_slow_slave_statements;
查看慢查询日志
- 可以通过mysqldumpslow查看,比如说查看时间最长的10条sql语句: mysqldumpslow -s al -n 10 日志文件
- 我们可以通过设置慢查询输出到表中。通过SHOW VARIABLES LIKE "log_output" 查看当前是输入file还是表,通过 set global log_output ="TABLE"设置输入表中查看
通用查询日志
什么是通用查询日志
通用查询日志是用户所做事情的所有记录。当客户端连接或断开连接时,服务器将信息写入此日志,并记录从客户端接收到的每个 SQL 语句。当你怀疑客户端中存在错误并想要准确了解客户端发送到mysqld的内容时,常规查询日志可能非常有用。
配置
SHOW VARIABLES LIKE '%general%';
返回结果
general_log: 日志开关
general_log_file: 日志文件(默认名称为 host_name.log)
部分日志内容
刚在我们在客户端执行了 SHOW VARIABLES LIKE '%general%'; , 打开日志可以看到这条记录
错误日志
概念
错误日志(Error Log) 是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信息。它还包含服务器启动和关闭期间以及服务器运行期间发生的错误、警告和注释等诊断消息。例如,如果mysqld注意到需要自动检查或修复某个表,它就会向错误日志写入一条消息。
配置
错误日志默认是开启的,没有关闭这个操作。可以通过 show variables like 'log_err%'; 查看 错误日志配置,默认是stderr, 我们需要去/etc/my.cnf 进行配置 log_error = '文件目录' 。
log_error_verbosity日志记录等级:
log_error_verbosity Value | Permitted Message Priorities |
1 | ERROR |
2 | ERROR, WARNING |
3 | ERROR, WARNING, INFORMATION |
log_timestamps控制写入错误日志(以及一般查询日志和慢查询日志文件)的消息中时间戳的时区。
允许的log_timestamps值为UTC(默认值)和 SYSTEM(本地系统时区)。时间戳使用 ISO 8601 / RFC 3339 格式编写: 加上表示 Zulu 时间 (UTC) 的尾值或(指示相对于 UTC 的本地系统时区调整的偏移量)。例如: YYYY-MM-DDThh:mm:ss.uuuuuuZ±hh:mm
2020-08-07T15:02:00.832521Z (UTC)
2020-08-07T10:02:00.832521-05:00 (SYSTEM)# my.cnf 配置
[mysqld]
log_timestamps=system
错误日志文件刷新和重命名
可以将这些错误日志删除,以保证 MySQL 服务器上的硬盘空间。MySQL 的错误日志是以文本文件的形式存储在文件系统中的,可以直接删除。
mysqladmin -uroot -p flush-logs
中继日志
中继日志(relay log)只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。
名词解释
1- 脏页:当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。
2- 干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。
3- LSN:称为日志的逻辑序列号(log sequence number),在innodb存储引擎中,lsn占用8个字节。LSN的值会随着日志的写入而逐渐增大。事务中更新操作会产生一个新的LSN。LSN不仅存在于redo log中,还存在于数据页中。
4- 物理日志和逻辑日志
逻辑日志就是sql语句,记录这个逻辑操作
物理日志就是具体到某个磁盘页
相关文章:

简单说说mysql的日志
今天我们通过mysql日志了解mysqld的错误日志、慢查询日志、二进制日志,redolog, undolog等。揭示它们的作用和用途,让我们工作中更能驾驭mysql。 redo 日志 如果mysql事务提交后发生了宕机现象,那怎么保证数据的持久性与完整性?…...

如何在CentOS安装DataEase数据分析服务并实现远程访问管理界面
如何在CentOS安装DataEase数据分析服务并实现远程访问管理界面 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 🌈你好呀!我是 是Yu欸 🌌 202…...
HTTP请求传递参数方式【2024-02-01】
1、HTTP请求传递参数分类 1.1、按照请求方式分类 GET方法:通过查询字符串(Query String,每个参数由参数名和参数值组成,使用等号 连接,不同参数之间使用 & 符号分隔)的方式或直接将参数放在URL中来传递参数POST…...

Error: Projects must list all files or use an ‘include‘ pattern.
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...

移动应用开发的方式
移动应用开发的方式(三种) Native App: 本地应用程序(原生App) Web App:网页应用程序(移动web) Hybrid App:混合应用程序(混合App) hybrid应用场景 1、微信公众号&…...

C#学习笔记_类(Class)
类的定义 类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。 语法格式如下: 访问标识符 class 类名 {//变量定义访问标识符 数据类型 变量名;访问标识符 数据类型 变量名;访问标识符 数据类型 变量名;......//方…...

壹[1],Xamarin开发环境配置
1,环境 VS2022 注: 1,本来计划使用AndroidStudio,但是也是一堆莫名的配置让人搞得很神伤,还是回归C#。 2,MAUI操作类似,但是很多错误解来解去,且调试起来很卡。 3,最…...

SAM:基于 prompt 的通用图像分割模型
Paper: Kirillov A, Mintun E, Ravi N, et al. Segment anything[J]. arXiv preprint arXiv:2304.02643, 2023. Introduction: https://segment-anything.com/ Code: https://github.com/facebookresearch/segment-anything SAM 是 Meta AI 开发的一款基于 prompt 的通用视觉大…...
2024美赛数学建模C题思路+模型+代码+论文
2024美赛A-F题思路代码模型论文:2.2开赛第一时间更新,获取见文末名片 美赛流程以及经验分享 今天主要和大家分享一下我之前参加美赛的经验,主要分两部分来讲。一部分是美赛流程,另一部分是美赛经验。 一 美赛流程 比赛前&#x…...
npm run serve和npm run dev的区别
1. 功能:通常,"npm run serve"用于启动开发服务器,提供实时的开发环境,支持自动重新加载和热模块替换。这样可以在开发过程中实时查看代码更改的效果。而"npm run dev"可以是一个自定义的指令,用于…...

已解决:winform开发中删除某方法导致窗体设计报错
一、报错截图 二、解决方案 第一步,点击上图的转到代码 第二步,注释掉报错的部分(代码前面加//) 第三步,重新编译 最后,恢复正常...
开源软件的影响力
开源软件如何推动技术创新 开源软件通过开放源代码,为全球开发者提供了共同的平台,促进了协作、交流,并推动了软件技术的创新和发展。以下是一些关键方面的分析: 透明度与信任: 开源软件的源代码是公开可见的,这种透明度带来了更高水平的信任。开发者和用户能够审查代码,…...
postgresql lc_ctype不同值之间的转换
LC_CTYPE 用于决定字元是否为数字,字母,空格,标点符号,及大小写等[1]。将 LC_CTYPE 设为「C」表示 isupper(c) 或 tolower(c) 等 C 语言函数[2]仅针对 US-ASCII 范围内的字元给出预期结果。因为像 upper()、lower() 或 initcap 这类型的Postgres SQL 语句是在libc 函数上实…...
纸盒生产ERP软件怎么样?常用纸盒生产ERP系统有哪几种
市场上的纸盒种类繁多,这些差异化的商品对应多元化的销售渠道和营销策略,日常的经营管理工作较为繁琐。而纸盒生产涉及原材料、发料、车间、工时评估、排产、质检、委外、工单等诸多流程,想要随时掌握各环节进度,及时处理存在的问…...

2024年重庆市考报名照上传失败的原因
2024年重庆市考报名照需要根据以下要求生成: 1、近期6个月,免冠证件照。 2、照片背景白底或者蓝底或者红底背景。 3、照片文件jpg格式,大小在20KB以下 4、照片像素大小,295*413像素 5、照片必须使用审核工具审核后才能上传...

2023年出版的新书中提到的《人月神话》(202402更新)(1)
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《人月神话》于1975年出版,1995年出二十周年版。自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退。 2023年,清华大学出版社推…...

gtkmm xml ui 例子(from string)
文章目录 前言来看一个从字符串中生成UI的例子 前言 glade生成的xml格式不被gtkmm4支持, 需要作修改 来看一个从字符串中生成UI的例子 #include <gtkmm/application.h> #include <gtkmm.h> #include <iostream> using namespace std;class ExampleWindow :…...
第2章 Linux 中执行命令
第2章 Linux 中执行命令 命令格式 命令 [选项] [参数....] 在linux 中命令分为内部命令和外部命令。 ctrll 可以清屏 查看帮助的命令 在使用命令之前,我们可以通过帮助来查看这个命令的格式和使用方式。在 Linux 中有两个帮助命令, help 和 man help…...

python3.8 安装缺少ssl、_ctypes模块解决办法
问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错: Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…...

鸿蒙开发-UI-页面路由
鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...

leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...