MySQL篇(五)MySQL主从同步原理深度剖析
MySQL篇(五)MySQL主从同步原理深度剖析
- MySQL篇(五)MySQL主从同步原理深度剖析
- 一、引言
- 二、MySQL主从同步基础概念
- 主库(Master)
- 从库(Slave)
- 二进制日志(Binary Log)
- 中继日志(Relay Log)
- 三、MySQL主从同步的具体流程
- 主库操作记录阶段
- 从库连接与获取日志阶段
- 从库重放执行阶段
- 四、关键线程与日志的协同工作
- I/O线程的作用与工作细节
- SQL线程的作用与工作细节
- 二进制日志与中继日志的关联
- 五、MySQL主从同步的几种模式
- 基于语句的复制(Statement - Based Replication,SBR)
- 基于行的复制(Row - Based Replication,RBR)
- 混合模式的复制(Mixed - Based Replication,MBR)
- 六、主从同步中的常见问题与解决思路
- 主从数据延迟问题
- 主从同步中断问题
- 数据一致性问题
- 七、总结
MySQL篇(五)MySQL主从同步原理深度剖析
一、引言
在当今数据驱动的时代,数据库的高可用性和性能扩展至关重要。MySQL主从同步作为一种广泛应用的技术手段,能够有效地实现数据冗余备份、读写分离以提升系统整体性能等功能。深入理解MySQL主从同步原理,对于数据库管理员进行系统架构设计、故障排查以及性能优化都有着不可忽视的意义。接下来,我们将逐步揭开MySQL主从同步原理的神秘面纱。
二、MySQL主从同步基础概念
主库(Master)
主库是数据写入的源头,负责处理客户端的写操作请求,如INSERT、UPDATE、DELETE等语句。在主从同步架构中,主库将自身执行的写操作记录下来,以便后续能传递给从库,确保从库的数据与主库保持一致。
从库(Slave)
从库主要承担数据读取的任务,它通过与主库建立连接,接收主库发送过来的写操作记录,并在本地进行重放执行,从而实现与主库数据的同步。从库可以有多个,它们可以分担主库的读压力,提高整个系统的并发读取能力。
二进制日志(Binary Log)
二进制日志是MySQL主库中非常关键的一个组件,它记录了主库上所有的写操作事件。这些事件按照时间顺序依次记录,包括操作的类型(如插入、更新、删除)、涉及的表、具体的操作数据等信息。二进制日志是主从同步过程中主库向从库传递数据变更信息的核心载体。
中继日志(Relay Log)
中继日志是从库特有的日志文件。从库在接收到主库发送过来的二进制日志内容后,会先将其写入到中继日志中。中继日志起到一个缓冲和中转的作用,从库的SQL线程会从中继日志中读取事件并在本地执行,进而完成数据的同步。
三、MySQL主从同步的具体流程
主库操作记录阶段
当客户端向主库发起写操作请求时,主库会在内存中对数据进行相应的修改,并将该写操作以事件的形式记录到二进制日志中。例如,当执行一条INSERT语句向某张表中插入一条记录时,主库首先会在内存的相关数据结构中完成数据插入操作,同时生成一个对应的二进制日志事件,该事件包含了INSERT操作的具体信息,如插入的表名、字段值等。主库会按照事务提交的顺序,将这些写操作事件依次追加到二进制日志文件中。
从库连接与获取日志阶段
- 建立连接
从库通过配置的主库连接信息(包括主库的IP地址、端口、用户名、密码等),使用MySQL的复制协议与主库建立连接。连接建立成功后,从库会向主库发送请求,获取主库当前二进制日志的文件名和位置信息(即File和Position),这些信息将作为从库后续读取主库二进制日志的起始点。 - 启动I/O线程
从库会启动一个I/O线程,该线程负责与主库进行通信,从主库的二进制日志中读取写操作事件。I/O线程根据之前获取到的二进制日志文件名和位置信息,向主库发送读取请求,主库接收到请求后,会从对应的位置开始,将二进制日志中的事件发送给从库的I/O线程。I/O线程接收到这些事件后,会将其写入到从库的中继日志中。在这个过程中,I/O线程会持续不断地与主库进行交互,只要主库有新的写操作记录到二进制日志中,I/O线程就会及时获取并写入中继日志。
从库重放执行阶段
从库在将主库的写操作事件写入中继日志后,会启动另一个重要的线程——SQL线程。SQL线程负责从中继日志中读取事件,并按照事件在中继日志中的顺序,在从库本地进行重放执行。例如,对于从主库接收到的INSERT事件,SQL线程会在从库对应的表中执行相同的INSERT操作,将数据插入到表中。通过这种方式,从库能够逐步将主库上的写操作在本地进行复制,从而实现与主库数据的同步。SQL线程在执行过程中,会严格遵循事务的顺序,确保数据同步的准确性和一致性。
四、关键线程与日志的协同工作
I/O线程的作用与工作细节
I/O线程在MySQL主从同步过程中扮演着数据传输桥梁的角色。它与主库保持着持续的连接,不断监听主库二进制日志的变化。在获取二进制日志事件时,I/O线程需要处理网络传输、数据缓冲等一系列问题。为了保证数据传输的稳定性和高效性,I/O线程会采用一些优化策略,如批量读取二进制日志事件,减少网络传输的次数。同时,I/O线程还需要处理可能出现的网络故障、主库连接中断等异常情况,当遇到这些问题时,它会尝试进行重连和恢复数据传输,以确保从库能够持续获取主库的写操作记录。
SQL线程的作用与工作细节
SQL线程专注于在从库本地执行中继日志中的事件。它需要对中继日志中的各种操作事件进行解析和执行。在执行过程中,SQL线程要保证操作的顺序性和准确性,避免因为并发执行或者执行顺序错误而导致数据不一致。对于一些复杂的操作,如涉及到事务、外键约束等情况,SQL线程需要严格按照MySQL的事务处理规则和约束机制进行处理。此外,SQL线程还会对执行结果进行记录和校验,确保操作成功执行并且数据同步准确。
二进制日志与中继日志的关联
二进制日志是主库写操作的原始记录,而中继日志则是从库接收主库数据变更信息的中间存储。从库的I/O线程将二进制日志中的内容复制到中继日志中,中继日志成为了从库SQL线程执行操作的数据源。两者之间的关联确保了主库的写操作能够准确无误地传递到从库并得到执行,是MySQL主从同步实现数据一致性的关键环节。
五、MySQL主从同步的几种模式
基于语句的复制(Statement - Based Replication,SBR)
在这种模式下,主库将执行的SQL语句记录到二进制日志中,从库在重放时直接执行这些SQL语句。例如,主库执行了一条简单的UPDATE语句“UPDATE users SET age = age + 1 WHERE id = 1;”,主库会将这条语句记录到二进制日志中,从库的SQL线程从中继日志中读取到这条语句后,会在本地执行相同的UPDATE操作。这种模式的优点是二进制日志文件相对较小,因为它只记录SQL语句,而不是实际的数据变更,能够节省磁盘空间和网络传输带宽。然而,它也存在一些局限性,比如对于一些具有不确定性的函数(如NOW()、RAND()等),在主从库上执行可能会得到不同的结果,导致数据不一致。
基于行的复制(Row - Based Replication,RBR)
基于行的复制模式下,主库会记录每一行数据的实际变更情况到二进制日志中。当主库对某一行数据进行修改时,二进制日志会记录修改前和修改后该行数据的具体内容。例如,对于上述UPDATE操作,二进制日志会记录users表中id为1的这一行数据修改前的age值和修改后的age值。从库在重放时,会根据这些具体的数据变更信息进行操作。这种模式的优点是能够保证主从库数据的高度一致性,避免了基于语句复制中因函数不确定性等问题导致的数据不一致情况。但缺点是二进制日志文件会相对较大,因为它记录了每一行数据的详细变更,会占用更多的磁盘空间和网络带宽。
混合模式的复制(Mixed - Based Replication,MBR)
混合模式结合了基于语句的复制和基于行的复制的优点。在这种模式下,MySQL会根据具体的操作情况自动选择合适的复制方式。一般情况下,对于普通的、确定性的SQL语句,会采用基于语句的复制方式;而对于可能导致数据不一致的操作(如涉及不确定性函数的操作),则会自动切换为基于行的复制方式。这种模式在一定程度上平衡了日志文件大小和数据一致性之间的关系,是MySQL较为常用的一种主从同步复制模式。
六、主从同步中的常见问题与解决思路
主从数据延迟问题
- 原因分析
主从数据延迟是指从库的数据同步落后于主库,导致主从库之间数据不一致。造成这种问题的原因有很多,例如从库的硬件性能较差,导致SQL线程执行中继日志事件的速度较慢;主库上有大量的并发写操作,产生的二进制日志量过大,从库的I/O线程和SQL线程处理速度跟不上;网络延迟过高,影响了从库从主库获取二进制日志的速度等。 - 解决思路
针对从库硬件性能问题,可以考虑升级从库的硬件配置,如增加CPU、内存等资源,提高SQL线程的执行效率。对于主库写操作过于频繁的情况,可以通过优化主库的业务逻辑,减少不必要的写操作,或者采用分库分表等方式分散写压力。此外,还可以通过调整MySQL的相关参数,如适当增大从库的innodb_log_buffer_size参数,提高I/O线程的读取效率;调整slave_parallel_workers参数,开启并行复制功能(在MySQL 5.6及以上版本支持),让SQL线程能够并行执行中继日志事件,加快数据同步速度。同时,优化网络环境,降低网络延迟,也有助于缓解主从数据延迟问题。
主从同步中断问题
- 原因分析
主从同步中断可能是由于网络故障导致从库与主库的连接断开,或者主库或从库出现异常重启等情况。另外,如果主库的二进制日志文件损坏,从库在读取时也会出现错误,从而导致同步中断。 - 解决思路
当出现网络故障导致连接断开时,从库会自动尝试重连主库。数据库管理员可以通过监控工具及时发现连接中断情况,并检查网络配置,确保网络恢复正常。对于主库或从库异常重启的情况,需要在重启后检查主从同步的状态,可以通过查看从库的状态信息(如使用SHOW SLAVE STATUS语句),确认I/O线程和SQL线程是否正常运行。如果主库的二进制日志文件损坏,可以尝试从备份中恢复二进制日志,或者通过重新初始化主从同步关系来解决问题。具体操作可以先在从库上停止复制(STOP SLAVE;),然后重新配置主库连接信息并启动复制(CHANGE MASTER TO…; START SLAVE;)。
数据一致性问题
- 原因分析
除了前面提到的基于语句复制模式下因函数不确定性导致的数据不一致外,在主从同步过程中,如果主库和从库的MySQL版本不一致,或者配置参数存在差异,也可能会导致数据一致性问题。此外,在一些特殊的场景下,如主库和从库同时对同一条数据进行操作(虽然这种情况应该尽量避免,但在复杂的业务环境中可能会出现),也会引发数据冲突和不一致。 - 解决思路
为了保证数据一致性,首先要确保主库和从库的MySQL版本相同,并且配置参数保持一致。在业务设计上,要严格避免主库和从库同时对同一条数据进行操作的情况。如果出现了数据冲突,可以通过一些数据校验和修复工具来检查和修复不一致的数据。例如,可以使用pt - table - checksum工具来检测主从库之间的数据差异,并根据检测结果进行相应的数据修复操作。
七、总结
MySQL主从同步原理是一个复杂而又精妙的机制,它通过主库记录操作、从库获取并重放操作的流程,借助二进制日志、中继日志以及I/O线程、SQL线程等组件的协同工作,实现了主从库之间的数据同步。了解不同的复制模式以及常见问题的解决思路,对于构建稳定、高效的MySQL主从架构至关重要。随着数据库技术的不断发展,MySQL主从同步也在不断演进和优化,数据库管理员需要持续关注和学习,以更好地应用这一技术来满足业务对数据存储和处理的需求。希望通过本文的介绍,读者能够对MySQL主从同步原理有一个全面而深入的理解。
相关文章:
MySQL篇(五)MySQL主从同步原理深度剖析
MySQL篇(五)MySQL主从同步原理深度剖析 MySQL篇(五)MySQL主从同步原理深度剖析一、引言二、MySQL主从同步基础概念主库(Master)从库(Slave)二进制日志(Binary Log&#x…...
AGI大模型(10):prompt逆向-巧借prompt
1 提示词逆向 明确逆向提示词⼯程概念 我们可以给ChatGPT提供⼀个简洁的提示词,让它能够更准确地理解我们所讨论的“逆向提示词⼯程”是什么意思,并通过这个思考过程,帮它将相关知识集中起来,进⽽构建⼀个专业的知识领域 提示词:请你举⼀个简单的例⼦,解释⼀下逆向pro…...
【问题记录】C语言一个程序bug定位记录?(定义指针数组忘记[])
背景 写了个小的程序,一直段错误。特此记录 代码 主要代码 int main_mytest(int argc, char *argv) {char *argv_my {"echo","/proc/cpuinfo",};main_mytest(sizeof(argv_my)/sizeof(char*), argv_my); }int main_mytest(int argc, char *a…...
Systemd构建自动化备份服务与外部存储管理
实训背景 你是一家数据公司的系统管理员,需设计一套自动化备份系统,满足以下需求: 定期备份:每周日凌晨1点将 /data 目录压缩备份到 /backups。外部存储挂载:插入USB设备时自动挂载到 /mnt/usb,并触发增量…...
基于Python的微博数据采集
摘要 本系统通过逆向工程微博移动端API接口,实现了对热门板块微博内容及用户评论的自动化采集。系统采用Requests+多线程架构,支持递归分页采集和动态请求头模拟,每小时可处理3000+条数据记录。关键技术特征包括:1)基于max_id的评论分页递归算法 2)HTML标签清洗正则表达…...
Linux | I.MX6ULL开发板固件烧录所需文件详述(9)
01 搞清楚手里的开发板是 EMMC 还是 NAND FLASH 。默认我的商业级是EMMC ,开关:10011010 终结者i.MX6ULL 开卡板分为工业级和商业级两种不同的开发板。 商业级的核心板,它的存储是 EMMC 的,EMMC 的存储是类似于正方形的芯片,旁边是 NAND FLASH的一个封装,因为我们这里…...
单片机实现多线程的方法汇总
在单片机上实现“多线程”的方法有几种,下面按照从简单到复杂、从轻量到系统性来列出常见的方案: 🧵 一、伪多线程(最轻量) 方法:主循环 状态机 / 定时器轮询 主循环中轮流调用各个任务的处理函数&#x…...
探秘叁仟智盒设备:智慧城市的智能枢纽
在智慧城市建设的宏伟蓝图中,各类先进技术与设备层出不穷,叁仟智盒设备作为其中的关键一环,正悄然发挥着巨大作用,为城市的智能化转型注入强大动力。 一、叁仟智盒设备概述 叁仟智盒设备是杭州叁仟智慧城市科技有限公司旗下的重…...
(一)前端程序员转安卓开发分析和规划建议
最近因为公司前端业务萎缩,考虑内部转安卓开发岗,结合自己的经验分享几点建议。前端程序员转安卓开发是一个值得深入分析和规划的职业转型选择。以下是对这一转型的详细分析以及具体的规划建议,帮助大家更好地理解和准备这一转变。 一、技能和…...
配置管理:夯实软件开发与运维根基
配置管理是对系统配置信息进行管理的活动,以下从定义、目的、主要活动、实施流程等方面为你详细介绍: 一、定义 配置管理是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的目标是记录软件产品的演化过程&a…...
PyTorch构建自定义模型
PyTorch 提供了灵活的方式来构建自定义神经网络模型。下面我将详细介绍从基础到高级的自定义模型构建方法,包含实际代码示例和最佳实践。 一、基础模型构建 1. 继承 nn.Module 基类 所有自定义模型都应该继承 torch.nn.Module 类,并实现两个基本方法&…...
JVM虚拟机篇(一)深入理解JVM:组成部分、运行流程及程序计数器详解
JVM虚拟机篇(一)深入理解JVM:组成部分、运行流程及程序计数器详解 JVM虚拟机篇(一)深入理解JVM:组成部分、运行流程及程序计数器详解一、引言二、JVM的组成部分2.1 类加载子系统2.2 运行时数据区2.3 执行引…...
从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.1.2Tokenization策略:BPE算法与词表设计
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.1.2 Tokenization策略:BPE算法与词表设计1. BPE(Byte-Pair Encoding)算法原理与实现1.1 BPE核心思想1.2 BPE算法步骤2. 词表设计关键要素2.1 词表规模与模型性能2.2 特殊标记设计3. BPE变体与改进算…...
学透Spring Boot — 013. Spring Web-Flux 函数式风格的控制器
这是我的学透Spring Boot的第13篇文章,更多文章请移步我的专栏 学透 Spring Boot_postnull咖啡的博客-CSDN博客 目录 传统风格的Spring MVC 函数式编程风格的Spring MVC 引入WebFlux依赖 定义Handler类 定义Router类 WebFlux不生效 灵魂拷问 Spring Web MVC…...
L33.【LeetCode题解】快乐数(双指针思想)
目录 1.题目 2.分析 3.代码 4.提交结果 5.题外话 证明:一定是循环的 前置知识:鸽巢原理 不严格证明 1.题目 https://leetcode.cn/problems/happy-number/ 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将…...
gltf unity-Unity中Gltf模型的使用与优化技巧
在现代游戏开发和3D应用领域,高质量模型是提升用户体验的关键因素之一。GLTF(GL Transmission Format)作为一款开放标准的3D模型交换格式,已经被越来越多的开发者所认可。Unity引擎,作为全球领先的3D游戏开发平台&…...
Oracle数据库指南
目录 一、前言 二、Oracle数据库基础入门篇 1. Oracle体系结构概述 2. 安装与配置 3. SQL语言入门 三、PL/SQL编程与高级特性 1. PL/SQL基础语法 2. 触发器与任务调度 3. 高级特性 四、日常维护与监控 1. 备份与恢复策略 2. 日志管理与故障排查 3. 自动化运维 五…...
Qt -信号与槽
博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 目录 前言引入connect调用链模板类型的connectQObject::connectImplQObjectPrivate::connectImpl qobject_p_p.hconnect作用总结ai对信号与槽的模拟实现 前言 面向对象&am…...
macos 魔搭 模型下载 Wan-AI ComfyUI
环境安装 ➜ ~ sw_vers ProductName: macOS ProductVersion: 15.3.2 ➜ ~ pip --version pip 24.3.1 from /opt/homebrew/lib/python3.11/site-packages/pip (python 3.11)安装ModelScope SDK pip install modelscope➜ ~ modelscope download --help Traceback (most r…...
Xshell Plus 6下载与安装
文章目录 Xshell Plus 6 简介(一)网络连接与协议支持(二)会话管理(三)安全特性(四)文件传输功能(因集成Xftp 6 )(五)个性化与便捷功能…...
Kubernetes 集群搭建(一):从环境准备到 Calico 网络插件部署
(一)虚拟环境准备 名称ip备注m1192.168.101.131mastern1192.168.101.132workern2192.168.101.133worker (二)集群统一配置 2.1 关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld sed -i s/enforcin…...
【国产突围!致远电子ZXDoc如何打破Vector垄断,成为新能源车研发“神器”?】
摘要:在汽车“新四化”浪潮下,国产汽车总线工具链软件正迎来高光时刻!广州致远电子推出的ZXDoc以全栈自主化技术硬核国产芯片生态,斩获2024金辑奖“最佳技术实践应用奖”,成为新能源车企研发工程师的“效率倍增器”。本…...
3-Visual Studio 2022打包NET开发项目为安装包
引言 本文将上一期博文>>>门店管理系统开发<<<开发的项目打包为Windows安装包 一,安装扩展 安装此扩展:installer Projects 二,创建安装程序项目 创建项目 右键解决方案-添加-新建项目 选择setup Project项目 填写项目名…...
Cookie、Session、Token、JWT的区别和使用场景
Cookie、Session和Token的区别 存储位置数据容量安全性生命周期性能Cookie客户端(通常是浏览器)4KB、Cookie数量也有限制不安全、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)可以设置过期时间,过期后…...
P1883 【模板】三分 | 函数
题目描述 给定 n 个二次函数 f1(x),f2(x),…,fn(x)(均形如 ax2bxc),设 F(x)max{f1(x),f2(x),...,fn(x)},求 F(x) 在区间 [0,1000] 上的最小值。 输入格式 输入第一行为正整数 T,表示有 T 组数据。 每组…...
Ruoyi-vue plus 5.2.2 flowble设计流程点击开始流程图错误
网关设置条件或者是事件删除后出现,点击网关节点无法找到下面的事件节点。 配置页面事件错误,点背景配置进去了事件,发现再次加载,或者删除的时候VUE页面无法加载。 解决方式:查看XML文件,这个节点是否存在…...
MySQL学习笔记(三)——图形化界面工具DataGrip
目录 1. 图形化界面工具 2.下载 3. 安装 3.1 安装步骤 3.2 激活说明 4. 使用 4.1 汉化教程 4.2 使用 1. 图形化界面工具 上述,我们已经讲解了通过 DDL 语句,如何操作数据库、操作表、操作表中的字段,而通过 DDL 语句执行在命令进行操…...
keil软件仿真
设置 选择软件仿真。 修改参数。 获取参数 找到自己的芯片信号。这里用的是F103ZET6 复制下来,并对其进行修改。 接下来进入仿真即可...
每日一题(小白)模拟娱乐篇14
直接理解题意,一分钟扩散一次,那么2020分钟也就是需要循环2020次,然后加入扩散后的条件,每一个次扩散使方格子的总量1(只要有一个点扩散就无需看其他的点),若干次循环过后总数之和即所有黑色格子…...
(二)使用Android Studio开发基于Java+xml的安卓app之环境搭建
以下是使用Android Studio搭建基于Java和XML的Android应用开发环境的详细步骤: 一、系统要求 操作系统:Windows 7/8/10/11(64位)内存:建议8GB及以上磁盘空间:至少5GB空闲(建议预留10GB以上&…...
STM32定时器通道1-4(CH1-CH4)的引脚映射关系
以下是 STM32定时器通道1-4(CH1-CH4)的引脚映射关系的详细说明,以常见型号为例。由于不同系列/型号差异较大,请务必结合具体芯片的参考手册确认。 一、STM32F1系列(如STM32F103C8T6) 1. TIM1(高级定时器) 通道默认引脚重映射引脚(部分/完全)备注CH1PA8无互补输出CH1…...
看爬山虎学本领 软爬机器人来创新 各种场景能适应
*本文只做阅读笔记分享* 一、灵感来源:向植物取经 大家好!今天来聊一款超酷的软爬机器人,它的灵感来自会攀爬的植物——爬山虎。 大家都知道,爬墙高手爬山虎能在各种复杂墙面轻松生长攀爬,可现有的攀爬机器人在复杂…...
Spring AI Alibaba示例项目深度解析:dashscope-audio子模块详解
Spring AI Alibaba示例项目深度解析:dashscope-audio子模块详解 一、模块定位与核心价值 1.1 功能定位 • 音频处理核心组件:基于阿里云DashScope平台实现STT(语音识别)和TTS(文生语音)双模态能力 • 企业级解决方案:提供同步/异步/流式三种调用范式,适配不同业务场景…...
Linux 下 日志系统搭建全攻略
目录 一、引言 二、日志系统基础 日志级别 日志输出格式 三、创建日志所需函数 认识可变参数 编辑 获取时间的函数 小结 四、创建日志 一、引言 在 Linux 环境中开发 C/C 程序时,日志系统是不可或缺的一部分。它不仅有助于调试程序、排查问题ÿ…...
前端布局难题:父元素padding导致子元素无法全屏?3种解决方案
大家好,我是一诺。今天要跟大家分享一个我在实际项目中经常用到的CSS技巧——如何让子元素突破父元素的padding限制,实现真正的全屏宽度效果。 为什么会有这个需求? 记得我刚入行的时候,接到一个需求:要在内容区插入…...
写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码?
VB.NET 写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码? 分享 1. 在 VB.NET 中指定运行 Sub Main 在 VB.NET 里,你能够指定 Sub Main 作为程序的入口点。下面为你介绍两种实现方式: 方式一:在项目属性…...
蓝桥杯单片机频率
long int Freq; unsigned int Timer_1000Ms; 加上 TMOD | 0x05; void Timer0Init(void) //0毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0; //设置定时器模式TMOD | 0x05;TL0 0x00; //设置定时初值TH0 0x00; //设置定时初值TF0 0; //清除TF0标…...
word导出PDF老是目录格式变化的问题
这里是写给和我一样的笨蛋的经验帖,适合试了很多网上的经验,结果都用不成的傻瓜蛋,先说好,我是傻瓜蛋,我不是在攻击谁,我们只是客观的,缺根弦罢了。 这些帖子里讲的最多的应该是:“…...
P1577 切绳子(二分)
题目描述 有 N 条绳子,它们的长度分别为 Li。如果从它们中切割出 K 条长度相同的绳子,这 K 条绳子每条最长能有多长?答案保留到小数点后 2 位(直接舍掉 2 位后的小数)。 输入格式 第一行两个整数 N 和 K,接下来 N 行…...
高级:分布式系统面试题精讲
一、引言 分布式系统在现代软件开发中占据重要地位,其设计和实现需要考虑多个关键因素。面试官通过相关问题,考察候选人对分布式系统核心概念的理解、实际应用能力以及在复杂场景下的问题解决能力。本文将深入分析分布式系统的CAP定理、一致性协议、分布…...
【速写】SFT案例实操(以Qwen2.5-instruct-0.5B)
参考资料: https://openbayes.com/console/bbruceyuan/containers/OPg9Oo99ET6https://www.bilibili.com/video/BV1NM1tY3Eu5 LoRA微调案例 首先还是要安装: !pip install -q accelerate peft bitsandbytes transformers sentencepiece !pip install…...
springboot457-库存管理系统(源码+数据库+纯前后端分离+部署讲解等)
💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm…...
Node.js中间件的分类
目录 Node.js 中间件的分类与详细介绍 1. 目录结构 2. Express 中间件的主要分类 3. 代码实现 1. 应用级中间件(作用于整个应用) 示例:日志记录中间件 2. 路由级中间件(仅作用于特定路由) 示例:身份…...
棒球规则快速入门·棒球1号位
棒球规则快速入门: 得分方式 进攻方击球后,依次跑过一、二、三垒并返回本垒得1分。若击球直接飞出外场围栏(全垒打),击球员和已上垒的跑垒员均可得分。 比赛结构 共9局,每局分上下半场,双方各…...
【深度学习】通过colab将本地的数据集上传到drive
本地数据集上传到colab很慢,而且断开后就没了,因此通过colab将本地的数据集上传到drive,即使断开连接,第二次连接后挂载drive后即可直接使用数据集。 步骤一、将本地数据集上传到colab的临时文件夹中,由于将文件夹上传…...
MYSQL 存储引擎 和 日志
存储引擎 InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度。MyISAM 不提供事务支持。InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别。MyISAM 不支持外键,而 InnoDB 支持。MyISAM 不支持 MVCC,…...
【2022】【论文笔记】太赫兹量子阱——
前言 类型 太赫兹 + 量子阱 太赫兹 + 量子阱 太赫兹+量子阱 期刊 红外与毫米波学报 红外与毫米波学报 红外与毫米波学报 作者 张真真 ,...
【NLP 面经 7、常见transformer面试题】
目录 1. 为何使用多头注意力机制? 2. Q和K使用不同权重矩阵的原因 3. 选择点乘而非加法的原因 4. Attention进行scaled的原因 5. 对padding做mask操作 6. 多头注意力降维原因 7. Transformer Encoder模块简介 8. 乘以embedding size的开方的意义 9. 位置编码 10. 其…...
在js中数组相关用法讲解
数组 uniqueArray 简单数组去重 /*** 简单数组去重* param arr* returns*/ export const uniqueArray <T>(arr: T[]) > [...new Set(arr)];const arr1 [1,1,1,1 2, 3];uniqueArray(arr); // [1,2,3]uniqueArrayByKey 根据 key 数组去重 /*** 根据key数组去重* …...
第四章 react-redux,@reduxjs/toolkit依赖,学习
redux系列文章目录 第一章 简单学习redux,单个reducer 第二章 简单学习redux,多个reducer 第三章 redux和react-redux,reduxjs/toolkit依赖结合使用 第五章 两张图告诉你redux常使用的api有哪些 前言 本章将使用react-redux,reduxjs/toolkit依赖创…...