MySQL存储引擎原理解析:InnoDB为何成为默认,选型与事务机制
说实话MySQL 里的“存储引擎”这四个字我刚开始学的时候是完全没概念的。跟着教程建表别人写 ENGINEInnoDB我也跟着写 ENGINEInnoDB心里却一直在嘀咕这个 InnoDB 是啥为什么不直接写 MySQL后来随着自己动手建表、跑事务、看日志才算真正把这个概念吃透。所以这一篇笔记我特别想把“存储引擎”这件事讲清楚——它不只是一个建表参数而是决定了你数据怎么存、怎么读、并发怎么控、崩溃了怎么办的底层核心。文章适合两类人看一类是正在学 MySQL、建表时看到 ENGINE 参数觉得困惑的新手另一类是写了好几年 SQL 但从来没细想过表到底存在哪种引擎里的开发。读完你至少能回答这几个问题InnoDB 为什么是默认选项MyISAM 到底差在哪Memory 表能不能当缓存用以及线上要改表引擎代价有多大。1. 存储引擎到底是什么为什么一上来就要面对它我最开始理解存储引擎靠的是一个类比图片格式。同一张照片你可以存成 JPEG也可以存成 PNG屏幕上看效果差不多但底层的压缩算法、是否支持透明通道、文件大小完全不一样。存储引擎也是这样同样的用户表用 InnoDB 建和用 MyISAM 建你执行 SELECT 时看不出来多大差别但数据在磁盘上的组织方式、有没有事务、锁的粒度、崩溃之后能不能自动恢复差得十万八千里。MySQL 最特别的一点是插件式存储引擎架构。这句话拆开说就是MySQL 把存储层做成了一个通用接口底层接哪个“插件”谁来做数据管理可以由每张表自己决定。所以你可以在同一个实例里让订单表用 InnoDB让日志表用 MyISAM再让临时缓存表用 Memory互相不冲突。这种“一库多芯”的设计在主流数据库里很少见也是 MySQL 灵活性的来源。但也正因为灵活新手经常被带进一个困惑为什么我建的表没有事务为什么这个表锁住了影响那么大答案往往就藏在建表语句的 ENGINE 参数里。所以我一直觉得学 MySQL 不应该先背 SQL 语法而是先把存储引擎这条主线搭起来。主线通了后面看索引、看锁、看日志全部都能串起来。1.1 存储引擎到底解决了哪几类问题我把存储引擎的职责拆成四件事你把它当做一个“数据管家”的四个基本任务来看数据怎么存行格式怎么定义数据文件怎么组织是聚簇存储还是数据和索引分离。数据怎么读索引结构选 B 树还是哈希查询能不能走索引有没有全文索引能力。并发怎么控锁粒度是行级还是表级有没有多版本并发控制读写之间会不会互相阻塞。崩溃怎么办有没有独立的日志体系能不能自动恢复还是需要人工修补。拿四类主流引擎做个粗略对比你就能感受到差异有多大引擎数据组织索引结构锁粒度事务崩溃恢复InnoDB聚簇索引表空间B 树行锁为主支持redo log 自动恢复MyISAM.MYD 数据与 .MYI 索引分离B 树表锁不支持需手动检查修复Memory全部放内存B 树或哈希表锁不支持重启即清空Archivezlib 压缩行存储仅支持自增主键并发能力有限不支持基本没有恢复能力这张“对比表”就是很典型的宏观视图。同为 MySQL 引擎能力差异极大。理解这些差异之后你看到某些表的行为很奇怪就很容易找到解释。1.2 为什么默认引擎从 MyISAM 变成了 InnoDB我刚学的时候还有个疑问既然 InnoDB 这么好为什么 MySQL 早期默认引擎不是它而是 MyISAM后来翻资料才知道MySQL 在 5.5 版本之前默认引擎确实是 MyISAM。原因也很朴素早期互联网业务没有现在这么高的并发写入查询密集是常态MyISAM 的 B 树索引结构简单无损压缩、全文索引都是它的亮点而且实现简洁崩溃了有 myisamchk 工具可以手动修。但业务越来越复杂之后事务的需求变得不可回避。经典案例就是转账扣款和入账必须同时成功或同时失败没有事务支撑就得在业务代码里做一堆补偿动作还未必可靠。InnoDB 从诞生起就强调事务能力加上崩溃恢复的 redo log 机制在可靠性和并发控制上明显更成熟。因此从 MySQL 5.5 开始InnoDB 转正成默认引擎并且一路保持到今天。理解这段历史再看现在的使用建议就一点也不违和了。2. InnoDB事务、崩溃恢复和那把行锁2.1 事务机制不是背 ACID而是理解为什么需要 ACIDInnoDB 是 MySQL 里目前最主流的事务型存储引擎。“事务”这个词听起来重打个比方就明白了你去超市买两瓶饮料拿起第一瓶扫码、拿起第二瓶扫码最后一起结账。如果第一瓶扫完码、第二瓶条码出问题收银员会取消整笔交易重新再扫。事务就是数据库版的“整笔交易”一组操作打包在一起要么全成功要么全失败。在这个基础上ACID 就显得很自然而不是玄学原子性一组操作不可分割一旦中间失败用 undo log 把已完成的修改还原。一致性约束不被破坏数据从一种合法状态进入另一种合法状态。隔离性多个事务同时跑彼此不应该看到对方的中间状态。持久性事务一旦提交即使宕机断电数据也不能丢靠 redo log 实现。很多人把 ACID 当名词解释背我建议换个思路把它对应到机制上。原子性对应 undo log持久性对应 redo log隔离性对应锁和 MVCC一致性是前三者组合出来的结果。这样到了面试、或者线上排查问题时你脑子里不是四个单词而是一套可以动手分析的工具。2.2 聚簇索引为什么 InnoDB 表特别强调主键InnoDB 的数据组织方式和 MyISAM 有本质区别。InnoDB 的表数据跟主键索引绑在一起这叫聚簇索引。换句话说表本身就是以主键为顺序排列的索引结构主键索引的叶子节点直接就存着整行数据。所以查询走主键永远是最短路径不需要先找到索引位置再回表取数。这个设计带来一个硬性要求InnoDB 表一定要有主键。你如果不显式声明它会挑一个唯一索引当主键连唯一索引都没有它会生成一个隐藏的 6 字节 rowid 当主键。隐藏主键这东西非常不可控你既不知道它的生成规则也不能拿它来优化查询所以建表时显式声明主键是必须养成的习惯。主键的类型也很考验设计功底。我实测下来自增整数主键在绝大多数场景下是最稳的选择。为什么因为新插入的行主键值总是比已有的行大InnoDB 只需要把新数据追加到索引末尾B 树发生页分裂的概率很低。反过来如果你用 UUID 或者随机字符串做主键每条新记录在索引树里的位置都是随机的InnoDB 得不断调整叶子节点结构、移动数据不仅写入慢碎片率也会明显上升。这个差异在数据量小的时候无所谓到千万级就能测出肉眼可见的差距。2.3 MVCC 和锁InnoDB 高并发的底气很多人以为 InnoDB 性能好是因为它“锁得细”其实另一个隐藏功臣是 MVCC多版本并发控制。可以这样理解 MVCC一行记录被事务 A 修改后旧版本不会立刻被销毁而是通过 undo log 链接保留下来。事务 B 来读数据时会根据自己的事务 ID 和可见性规则找到符合时间点的那个旧版本。这样一来普通的 SELECT 查询与正在进行的 UPDATE 大部分情况下互不阻塞读不需要等写写也不需要等读。这就是为什么默认隔离级别下InnoDB 的并发表现能这么好。锁方面InnoDB 常用的是行锁、间隙锁和临键锁。间隙锁这个词很容易劝退新手但我用一个例子就能说清假设表里有 id1 和 id10 两条记录事务 A 查询 id 在 1 到 10 之间的数据InnoDB 不仅锁定这两行还会锁住 2 到 9 这个“空区间”防止别的事务在中间插入 id5这就避免了幻读。所以 RR 隔离级别下 InnoDB 依然能保持较高的数据一致性靠的就是这种精细锁策略。但我必须泼一盆冷水InnoDB 有行锁不代表你可以乱写 SQL。如果你的 WHERE 条件没有走索引InnoDB 不得不到表里逐行扫描加锁本质退化成全表锁。我实际排查过不少案例一条 UPDATE 因为没命中索引把一张十万行的表锁了十几秒线上业务直接卡顿。所以InnoDB 的行锁能力是强但前提是查询设计得像样。2.4 崩溃恢复redo log 与 undo log 的分工InnoDB 号称崩溃后基本能自愈靠的是两套日志。redo log 是“重做日志”记录的是某个数据页做了什么修改事务提交时把更新刷进 redo log即使内存里的数据页没来得及落盘崩溃后也能根据 redo log 重新做一遍保证持久性。undo log 是“回滚日志”记录的是修改前的镜像事务需要回滚时用它把数据恢复到之前状态保证原子性。打个比方redo log 像是游戏里的自动存档你操作之后系统崩溃了重新开游戏能读档恢复到崩溃前的位置undo log 像是撤销快捷键你觉得这次操作不对按 CtrlZ 就能退回去。两个机制互相配合InnoDB 才敢承诺“事务提交了就不会丢”。3. MyISAM过去的主力现在还剩哪些场景3.1 数据与索引分离的存储一眼看懂它的结构MyISAM 的存储方式用一个词总结就是“文件分离”。每张 MyISAM 表对应三个文件表结构文件 .frm8.0 之后元数据也统一到数据字典、数据文件 .MYD、索引文件 .MYI。数据文件按行存储索引文件里存放 B 树结构索引叶子节点指向数据文件中的物理行地址。查索引时先在 .MYI 里定位再回到 .MYD 取数据有点像查书的目录再翻到对应页。这种设计的优势是结构简单数据文件不需要按主键物理排序插入新记录可以直接追加或找空位复用。但同时数据和索引分离也意味着“读取一次数据”通常需要两次 IO复杂查询的性能不一定比 InnoDB 好。再加上没有任何日志体系崩溃恢复基本只能靠 myisamchk 或 REPAIR TABLE 碰运气可靠性是这个引擎最大的短板。3.2 表锁和全文索引一柄双刃剑MyISAM 的锁粒度是表级锁这是它最明显的并发瓶颈。表级锁的含义是读锁共享、写锁独占。也就是说同一时刻可以有多个人读同一张表但只要有一个人写其他读写全部排队。这个特性在低并发、只读场景下问题不大但在互联网这种高并发写环境里就非常致命。它还有一个经常被提起的优点全文索引。MySQL 5.6 之前InnoDB 是没有全文索引能力的想用全文检索只能上 MyISAM这导致很多老项目对它恋恋不舍。但从 5.6 开始 InnoDB 逐渐支持全文索引到 8.0 已经比较成熟这一条其实不再是选 MyISAM 的理由。此外 MyISAM 还支持压缩表压缩之后只读能省不少磁盘空间但代价是写入代价极高。3.3 现在什么情况下还值得碰 MyISAM我的态度很明确新项目一律默认 InnoDB不要因为某些“性能神话”去选 MyISAM。但实事求是讲存量系统和极端场景里它还有合理位置。纯只读的字典表、配置表数据量不大并发很低用 MyISAM 结构简单、历史包袱小。日志归档库数据只增不查偶尔统计一次可以接受表锁和手动修复。老系统迁移前还没做好改造可以暂时保留 MyISAM但要有迁移计划。如果你正在从零搭一个新系统我建议直接跳过这个选项。MySQL 8.0 里 InnoDB 无论功能还是整体性能都盖过了 MyISAM事务和崩溃恢复带来的安全感远比省下的那一点空间和资源重要。4. Memory、Archive、CSV、Blackhole几个容易被忽视的存在4.1 Memory 引擎快是真的快危险也是真的危险Memory 引擎把数据全部放在内存里读写速度极快很适合临时表、字典表、或者一些极低延迟的小数据量场景。但“重启清空”这个特性决定了它不能放重要数据。我见过有人想用它做一个缓存表结果服务一重启缓存数据全部消失业务直接打回原始状态这个教训很典型。另外用 Memory 还有两个隐藏细节第一它默认的索引类型是哈希索引哈希索引对等值查询极快但范围查询和 ORDER BY 会很难受你需要在建表时显式指定 BTREE 索引第二所有数据都挤在内存里如果表数据量估算错误内存占用飙升会影响整机甚至拖慢 MySQL 整体性能。所以想拿它当缓存不如直接用专门的缓存产品至少不担心数据丢失。4.2 Archive 引擎专为归档而生的“只增不改”Archive 引擎的定位非常单一只支持 INSERT 和 SELECT不支持 UPDATE 和 DELETE。它会把数据用 zlib 压缩后落盘磁盘占用极小所以特别适合日志流水、订单历史、行为归档这类“写后不删不改”的场景。你可能会问Archive 连 DELETE 都不支持万一数据写错了怎么办这正是它的设计取舍它不需要修改能力也不需要索引维护存储结构就能尽量简单换取压缩率和写入速度。相应的它的查询能力也非常弱基本没有索引绝大多数查询都要全表扫。如果你想拿它做高频统计会被它的查询表现折磨到怀疑人生。所以Archive 的存在价值只在归档场景别指望它做在线业务。4.3 CSV 引擎与 Blackhole小角色也有专属任务CSV 引擎的存在非常有意思它让 MySQL 能直接读写 CSV 文件。比如你需要把外部系统的数据导入数据库或者把某张表导出给别人做数据分析用 CSV 引擎建一张表直接指向文件就行不需要额外的导入导出工具。代价是没有索引、没有锁机制不适合正经业务查询。Blackhole 引擎从名字就能看出来它是一个“黑洞”数据写入后直接丢弃不做持久化。听起来很废但它有一个实际用途在主从复制或者某些日志场景里主库只需要把同步事件广播到从库本身不需要保存数据这时代可以用 Blackhole 表。另外在压测场景里用它来验证“写入路径是否正常”也很常见。5. 选型与实操从 SHOW ENGINES 到 ALTER TABLE5.1 选型判据问自己几个问题而不是直接抄别人的答案网上一搜“MySQL 存储引擎选型”十个答案九个说“选 InnoDB 就完了”。这话确实没错但它没告诉你为什么也没告诉你遇到特殊场景怎么办。我的方法是先问自己一组问题把约束条件列出来再说结论表的核心操作是偏向读还是写还是读写都有是否需要事务和外键需要那基本只有 InnoDB 可选。数据库崩溃后这份数据能不能丢不能丢InnoDB 或带日志的引擎。表的数据量级是多大是否需要滚动归档能不能接受全表锁带来的并发影响不能就必须远离表锁引擎。数据是不是只追加、从不修改如果是Archive 可以纳入考虑。大多数情况下你会走到同一个结论InnoDB。但多问几个问题你就不会在碰到特殊场景时手足无措。5.2 查看引擎和表引擎的常用命令先看 MySQL 支持哪些引擎方法非常简单SHOW ENGINES;执行之后会返回一张表列里有 Engine、Support、Comment。Support 列的取值值得注意DEFAULT 代表默认引擎YES 表示已启用NO 表示编译时没启用DISABLED 表示支持但服务端配置把它关闭了。想看某张具体表的引擎我用得最多的有两种方式SHOW CREATE TABLE user\G; SHOW TABLE STATUS FROM yourdb WHERE Name user\G;第一种会直接返回建表语句能看到 ENGINEInnoDB 这样的字眼第二种会返回一堆表状态信息里面 Engine 一列就是当前引擎。如果你发现建表语句里明明没写 ENGINEMySQL 却自动带上了默认引擎可以用下面的语句确认默认配置SHOW VARIABLES LIKE default_storage_engine;5.3 建表指定引擎以及修改引擎的真实代价建表时指定引擎很容易CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ) ENGINEInnoDB;修改已有表的引擎ALTER TABLE user ENGINEMyISAM;这行命令看起来轻飘飘的内部动作却很重。ALTER TABLE 修改引擎本质上是在后台建一张新表把旧表的全部数据复制进去重建所有索引最后删除旧表并改名。这意味着什么数据量越大耗时越长操作期间表会被锁住线上读写都会受影响。千万级大表改引擎实际操作执行几个小时都出现过业务基本处于不可用状态。所以我的建议是小表随便改大表绝对不要在业务高峰期直接 ALTER。更稳妥的做法是创建一个新表指定目标引擎通过数据迁移方式把数据搬过去再在低峰期切换表名。如果数据量实在太大可以考虑用在线改表工具但也要充分评估触发器和外键影响。总之存储引擎这种事最好在建表阶段定下来不要等到上了生产环境再折腾。5.4 顺手理解一下事务持久化参数0、1、2如果说存储引擎是宏观选型那事务日志的刷新策略就是微观调优。InnoDB 里有一个参数 innodb_flush_log_at_trx_commit它直接影响事务提交时的性能和数据安全权衡值为 1每次事务提交都把 redo log 刷到磁盘最安全但性能开销最大。值为 0每秒刷一次磁盘性能好但事务提交瞬间如果宕机可能丢最近一秒的数据。值为 2每次提交写入操作系统缓存每秒再刷一次磁盘性能和安全性居中。我在生产环境默认保持 1因为数据安全性优先在可以接受秒级丢失的测试或报表环境会酌情设为 2。你看到这里应该就能理解为什么说“事务的持久性”和“性能”一直是在做权衡而不是一味的快。6. 新手阶段最容易踩的坑以及一条靠谱的学习路线6.1 四个高频误区我当初也没少踩误区一以为所有引擎都支持事务。这是流传最广的误解。实际上 MyISAM、Memory、Archive 都不支持事务。你在这类表上执行多条 SQL中途一条失败之前成功的不会回滚。确认表引擎能不能跑事务最简单就是 SHOW CREATE TABLE看 ENGINE。误区二用了 InnoDB 就不会锁表。InnoDB 的行锁生效前提是查询能走索引。如果你的 UPDATE 或 DELETE 条件没有索引可用它会扫描全表并逐行加锁实际效果就是锁表。所以应用的 SQL 质量直接决定 InnoDB 的优势能不能发挥出来。误区三改表引擎只是“改个单词”。这个我前面已经强调过ALTER TABLE 修改引擎等于重建整张表复制数据、重建索引、锁表是大工程不是小操作。误区四拿 Memory 表当持久化缓存用。Memory 表的数据在 MySQL 重启后直接清空想当缓存和业务数据库之间的缓冲层可以但必须能接受“随时丢失”这个前提否则就换专业缓存方案。6.2 动手做一个 10 分钟的对比实验胜过背十遍概念听再多概念不如亲手验证一次。我强烈建议你打开本地 MySQL建两张一样的表一张 InnoDB一张 MyISAMCREATE TABLE t_innodb ( id INT PRIMARY KEY AUTO_INCREMENT, val VARCHAR(50) ) ENGINEInnoDB; CREATE TABLE t_myisam ( id INT PRIMARY KEY AUTO_INCREMENT, val VARCHAR(50) ) ENGINEMyISAM;然后分别执行事务测试START TRANSACTION; INSERT INTO t_innodb (val) VALUES (test); ROLLBACK; SELECT COUNT(*) FROM t_innodb;你会发现 InnoDB 表里 count 还是 0因为事务回滚了但把同样的三条 SQL 里的表名换成 t_myisam在 MyISAM 表上执行后count 返回 1。这一个实验做下来你对“MyISAM 不支持事务”的印象绝对比看书留下的印象深得多。6.3 学习路线怎么安排才不容易被劝退如果你也是正在学 MySQL 的新手我建议把 80% 精力放在 InnoDB 上不要一开始就铺开所有引擎。第一层先搞定事务、锁、索引这三块是 InnoDB 的核心也是面试和日常工作出现频率最高的内容。第二层再看日志体系搞懂 redo log、undo log、binlog 分别负责什么。第三层有余力再去研究 MyISAM、Memory、Archive 这些引擎的差异这时候你对“为什么默认是 InnoDB”的理解就很立体了。学习过程中切忌死记硬背。你可以用 SHOW ENGINES 命令查看引擎列表用 SHOW CREATE TABLE 观察每张表的引擎再亲手验证事务、索引这些行为。我写这篇笔记本质也是把自己从“跟着写 ENGINEInnoDB”到“理解存储引擎为什么这么选”的过程重新梳理了一遍。中间跨过的不是多少个小时的听课时间而是亲手建表、跑实验、踩坑换来的经验。你如果能照着上面的步骤自己跑一遍我相信你对存储引擎的理解会比光看任何文章都扎实得多。

相关新闻

从SVPWM到AZSPWM:共模电压抑制原理与Simulink仿真对比

从SVPWM到AZSPWM:共模电压抑制原理与Simulink仿真对比

做电机驱动或者电力电子这块,很少有人能绕开SVPWM(空间矢量脉宽调制)这个默认选项。电压利用率高、谐波表现好、数字化实现顺手,教科书里的公式现成,工程上也验证充分。但只要你把设备接到真实电机上,尤其是…

2026/10/19 11:07:00 阅读更多 →
社会网络分析实战:从关系建模到中心性指标与社群发现

社会网络分析实战:从关系建模到中心性指标与社群发现

1. 从“关系”出发:社会网络分析到底在解决什么问题很多人第一次听到“社会网络分析”这个词,脑子里浮现的可能是社交软件的好友关系图,或者某部电影里FBI在墙上钉满照片和红线的那种场景。实际上,社会网络分析(Social…

2026/10/19 11:07:00 阅读更多 →
Java跨平台视频大文件切片上传:从分片策略到兼容性避坑实践

Java跨平台视频大文件切片上传:从分片策略到兼容性避坑实践

做过视频上传这块的同学应该都有体会,单文件超过1GB、2GB之后,再往服务器传就不是“加个进度条”那么简单了。网络抖动、超时、服务器拒收、内存撑爆,各种问题轮着来。更头疼的是视频不像文本文件,它有明确的时长和编码结构&#…

2026/10/19 11:07:00 阅读更多 →

最新新闻

Keras大文件训练内存溢出解决方案:三层数据流架构

Keras大文件训练内存溢出解决方案:三层数据流架构

1. 为什么“大文件无法一次性读入内存”是Keras用户绕不开的坎?Keras作为高层深度学习API,最大的优势是简洁、直观、上手快——写个model.fit(X_train, y_train)就能跑通一个模型。但这个看似简单的接口背后,藏着一个被新手反复踩坑、被老手默…

2026/10/20 5:39:13 阅读更多 →
为什么代码写得对却不值钱?工程师价值重估指南

为什么代码写得对却不值钱?工程师价值重估指南

1. 这不是代码批判,而是工程师价值重估的现场“你的代码不值钱,你为什么这么写才值钱”——这句话刚在技术社区刷屏时,我正帮某高校实验室重构一套运行了七年的教学评估系统。那套代码语法完全合规,单元测试覆盖率92%,…

2026/10/20 5:39:13 阅读更多 →
Playwright驱动浏览器自动化:破解无限瀑布流动态加载的爬虫实战

Playwright驱动浏览器自动化:破解无限瀑布流动态加载的爬虫实战

直接开始。玩爬虫的人多少都遇到过这种场景:目标网站数据明明就摆在页面上,但用 requests 怎么抓都只能拿到首页那一小段,往下翻页面,心跳都跟着滚轮一起加速,可手里的代码就是纹丝不动。小红书这种重 JS 交互的平台&a…

2026/10/20 5:39:13 阅读更多 →
32位系统内存补丁实战:PatchPae2让老电脑用满4G以上内存

32位系统内存补丁实战:PatchPae2让老电脑用满4G以上内存

简介:PatchPae2补丁面向32位的Windows 8.1操作系统,通过启用系统物理地址扩展功能,突破4GB内存识别上限,解决系统只能使用部分物理内存的痛点,适合受内存容量制约的用户、开发者和运维人员;补丁以修改内核方…

2026/10/20 5:39:13 阅读更多 →
MCP工具调用机制与优化实践:从原理到工程落地

MCP工具调用机制与优化实践:从原理到工程落地

1. MCP 工具调用的核心机制拆解1.1 从“对话”到“行动”:MCP 到底解决了什么问题MCP(Model Context Protocol)现在几乎是 AI 应用开发绕不开的协议了,但很多刚接触的人容易把注意力放在“这是什么”上面,忽略了一个更…

2026/10/20 5:39:13 阅读更多 →
原生JavaScript实现贪吃蛇:核心逻辑与Canvas渲染实战

原生JavaScript实现贪吃蛇:核心逻辑与Canvas渲染实战

最近整理硬盘上的旧文件夹,翻出一个好几年前写的JavaScript贪吃蛇。当时是某段时间练手用的,代码写得很粗糙,注释也不全,但核心逻辑基本完整,跑起来没有问题。这几天花时间把代码理清爽、补上注释、顺手修掉几个当年没…

2026/10/20 5:38:13 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →