MySQL面试进阶:从慢SQL优化到事务锁与主从复制实战解析
1. 面试真题整体观某大厂OD技术面MySQL到底考什么1.1 面试官出题逻辑从一条慢SQL说起关于某大厂OD技术面里的数据库MySQL环节想先给各位交个底。它不像很多人想象的那样一上来就深挖原理、逼你背八股。我面试过的候选人里被淘汰的往往不是基础差而是“知道结论不知道结论是怎么来的”。比如最常见的一类开局“你有一条SQL特别慢怎么排查”这问题听着简单但面试官后面会连环追问Explain里哪些字段值得看为什么明明建了索引还是慢索引失效是优化器的问题还是索引本身的问题到了事务部分又会问可重复读下真的能完全避免幻读吗一条update语句从发起到提交日志是怎么配合的主从延迟到底怎么治这些问题串起来基本就是MySQL面试的主干。到了第三篇真题我们要聊的不再是“索引是什么”这种入门题而是围绕“能不能把一条SQL调好、能不能把一个事务讲透、能不能把一次故障恢复讲清楚”来展开。适合正在准备这类岗位面试、或者日常工作里要和慢SQL、死锁、主从延迟打交道的人。1.2 高频考点清单第三辑为什么聚焦这几个模块我整理了一下近期收集到的同类型面试反馈MySQL部分的高频考察点非常集中几乎可以画成一张能力地图。考察模块典型问法需要达到的理解深度索引与SQL优化“这条SQL怎么建索引最快”能从执行计划反推索引结构事务与隔离级别“脏读、不可重复读、幻读分别什么场景”能从MVCC层面解释隔离实现锁机制“两个事务同时更新同一行怎么办”能说清行锁、间隙锁、死锁日志机制“一条update执行后MySQL突然宕机重启后数据怎么恢复”能讲透redo、undo、binlog配合主从复制“从库延迟太严重怎么处理”能结合binlog格式和并行复制说明分库分表“单表两千万数据你怎么拆分”能给出分片键、扩容、一致性方案这一辑的编排顺序其实就是我建议大家的复习顺序先把SQL优化解决掉因为这是最直观的加分项然后攻事务和锁因为这里最容易露怯最后看日志和高可用这部分答好了面试官会觉得你有生产环境经验。2. 索引与SQL优化笔试和手撕题的重灾区2.1 一条慢SQL的完整优化实录先拿一个我经常拿来练手的场景。假设有一张订单表结构大致如下CREATE TABLE user_order ( id BIGINT NOT NULL AUTO_INCREMENT, user_id BIGINT NOT NULL, order_no VARCHAR(64) NOT NULL, amount DECIMAL(10,2) DEFAULT NULL, status TINYINT DEFAULT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY idx_user_id (user_id), KEY idx_created_at (created_at) ) ENGINEInnoDB;业务上有个高频查询查某个用户最近的20条订单。SELECT id, user_id, order_no, amount, status, created_at FROM user_order WHERE user_id 1001 ORDER BY created_at DESC LIMIT 20;乍一看user_id上有索引created_at上也有索引好像没问题。但实际跑一下会发现当这个用户的下单记录很多时这条SQL会越来越慢。用Explain看一眼type: ref key: idx_user_id rows: 8000 Extra: Using filesort问题就出在Extra: Using filesort上。MySQL先按idx_user_id找到这个用户的所有记录然后还要对created_at做一次排序这个排序发生在内存或磁盘的临时文件里。用户订单量越大排序代价越高。这种场景的常规解法是联合索引ALTER TABLE user_order ADD KEY idx_user_created (user_id, created_at);建完以后Explain的Extra变成了Using index conditionfilesort消失了因为联合索引的第二个字段已经天然按created_at排好序。查询直接从索引定位到该用户的最早或最新位置顺序扫描即可。我实际测下来在百万级数据量、单用户几千条订单的场景下这条SQL的耗时能从几十毫秒降到个位数毫秒。但这里只是第一层优化如果业务还要查金额、状态等列呢Using filesort没了但可能还会回表。所以下一层要解决的是覆盖索引和回表问题。2.2 索引失效的十大套路与底层原因面试里关于索引失效的题本质上是考察你对B树有序性的理解。索引为什么失效不是记规则而是看“破坏有序性”和“无法定位区间”这两个核心。我自己归纳了十个高频场景每个都在实际生产或实验环境里踩过对索引列使用函数比如WHERE DATE(created_at) 2025-01-01。索引存的是原始DATETIME值函数运算把比较基准变了走不了树搜索。隐式类型转换比如订单号是VARCHARSQL里写成order_no 202501011234MySQL会把字符串列转成数字再比较索引失效。前导模糊查询LIKE %abc。B树只能按前缀匹配定位前导通配符破坏了前缀定位能力。OR条件连接了非索引列比如user_id1001 OR status1。优化器很难组合多个索引范围可能退化成全表扫描。联合索引里范围查询右侧的列失效。索引(a,b)在a1 AND b2时b列没法精确匹配因为B树先按a排序再按b排序a的范围跨越导致b不再有序。NOT IN、!、优化器经常认为全表扫描代价更低特别数据量不大时。排序字段和索引顺序、方向不一致。ORDER BY a DESC, b ASC在联合索引(a ASC, b ASC)下可能无法直接利用。索引列参与运算WHERE id 1 10索引列的非独立形式本质上和函数一样。某些情况下IS NOT NULL无法使用索引取决于优化器判断的区分度。JOIN的两表字符集不一致导致隐式字符集转换索引失效。记忆这些规则没有用关键是面试官追问“为什么”时你能说出“因为索引树的节点按索引列原始值有序排列任何包装、运算、转换都会让这个顺序失效”。2.3 回表、覆盖索引与ICP面试官常说的“深入一点”“回表”这个概念是区分初中级开发的一道分水岭。简单说InnoDB的二级索引叶子节点存的是索引列值和主键值。查询如果除了索引列还需要其他列时就要拿着主键再去主键的B树里查一次完整行这个动作就是回表。比如上面的SQL即使有了(user_id, created_at)联合索引SELECT里还有order_no、amount、status这些列不在索引中所以每一条符合条件的记录都要回表。回表是随机I/O如果命中几千行代价就很可观。解决办法之一是覆盖索引把需要的列都塞进索引。ALTER TABLE user_order ADD KEY idx_user_created_cover (user_id, created_at, order_no, amount, status);这样查询需要的字段全部在二级索引里Extra会显示Using index不需要回表。代价是索引占空间更大写入也变慢所以实际应该按高频查询设计而不是一股脑加列。ICP是另一个容易被忽略的点。MySQL 5.6以后支持的索引条件下推允许存储引擎在索引层面先过滤一部分数据再回表。比如复合索引(user_id, created_at)查询user_id1001 AND created_at 2025-01-01在没有ICP时是先按user_id把主键都取出来回表再在Server层过滤created_at有了ICP存储引擎会在索引里先把created_at过滤掉减少回表次数。Explain的Extra显示Using index condition这个细节很多候选人讲不清楚但你一旦说出来面试官通常都会加分。3. 事务、隔离级别与MVCC概念不能只背口诀3.1 四种隔离级别到底隔离了什么事务隔离级别的题最怕背口诀。背得出“读未提交有脏读、读已提交解决脏读、可重复读解决不可重复读、串行化解幻读”只是第一层真正拉开差距的是下面的解释。先说脏读。读未提交下一个事务能读到另一个事务还没提交的修改一旦对方回滚你读到的数据就是“脏”的。读已提交把这一点堵住了只认已提交版本。再说不可重复读。同一事务内两次SELECT读到其他事务已提交的修改前后结果不一致。注意这里不是“读到了脏数据”而是“数据内容变了”。读已提交下会出现可重复读下不会。最后是幻读。同一事务内两次范围查询第二次多出几行记录原因是其他事务插入了符合条件的新数据。可重复读并不能天然杜绝幻读InnoDB的解法是MVCC加临键锁组合这块下面专门讲。面试官很喜欢问“你实际生产环境用的是什么隔离级别”如果项目里用的是MySQL默认的REPEATABLE READ你要能解释为什么选它以及它和读已提交在生产上的差异。很多团队会为了减少死锁改成READ COMMITTED这是合理决策但面试官想听的是“你知道两者在锁和MVCC上的差别”。3.2 一条更新语句在事务里经历了什么这道题是面试官最爱的综合性问题。把一条UPDATE拆开能串联起Buffer Pool、Undo Log、Redo Log、Binlog、锁、两阶段提交。假设事务里执行UPDATE user_order SET amount 100 WHERE id 200;大致流程是这样的找到id200的行。如果不在Buffer Pool先从磁盘读入。对这行加上排他锁防止其他事务并发修改。把修改前的旧值写入Undo Log方便回滚和MVCC快照。更新内存中的记录这行数据变成脏页。生成Redo Log记录“在哪个页的哪个偏移量做了修改”先写入Redo Log Buffer。事务提交时Redo Log进入prepare状态写入Binlog并落盘。Binlog落盘成功Redo Log再从prepare转成commit状态。这里最有价值的点是两阶段提交。为什么不能先写Binlog再写Redo或者反过来因为两份日志记录的是不同层次的东西Binlog是Server层逻辑日志Redo是InnoDB物理日志。如果崩溃发生在中间状态不一致会造成主从数据对不上。我自己的记忆方法是Redo像施工方的施工记录Binlog像监理方的验收记录两份记录必须对得上账施工才算完成。3.3 MVCC实现原理与快照读/当前读MVCC的全称是多版本并发控制。InnoDB实现它靠的是每行记录里两个隐藏字段DB_TRX_ID最近修改该行的事务ID和DB_ROLL_PTR指向Undo Log中旧版本链的头节点。事务做快照读时会生成一个ReadView。ReadView里主要包含四部分创建视图时活跃事务ID列表、列表最小值、下一个将要分配的事务ID、当前事务自己的ID。判断某行是否可见就是拿DB_TRX_ID和这几个值比大小。可重复读和读已提交的核心区别在于ReadView的创建时机。读已提交是每次SELECT都重新生成ReadView所以能看到其他事务已提交的新版本可重复读是事务里第一次快照读时创建ReadView之后整个事务复用同一个视图于是读不到其他事务提交的新版本。这里有个容易被问倒的点快照读和当前读。普通SELECT是快照读靠Undo Log版本链读取历史版本。UPDATE、DELETE、INSERT以及SELECT ... FOR UPDATE、SELECT ... LOCK IN SHARE MODE都是当前读读的是最新已提交版本并且加锁。理解了快照读和当前读才能真正理解可重复读下的幻读。快照读阶段靠ReadView保证一致性快照所以看不到新插入的行。但如果一个事务先快照读、再执行当前读当前读是能看到其他事务已经提交的新行的这时就会出现幻读现象。InnoDB真正在RR隔离级别下禁止幻读的手段是当前读配合的临键锁锁住记录和间隙防止其他事务在范围内插入新记录。4. 锁机制从表锁到行锁的面试问答4.1 锁的类型与兼容矩阵MySQL锁这块面试官考察点很集中但我发现很多人把概念混在一起。这里给一张我总结的对应关系。从粒度看有表级锁和行级锁。InnoDB支持行锁MyISAM只有表锁。行锁又分成共享锁S锁和排他锁X锁兼容关系很简单锁类型共享锁S排他锁X共享锁S兼容冲突排他锁X冲突冲突InnoDB还有一个很容易在面试里被忽略的表级意向锁。事务想在某行加S锁得先在表上加意向共享锁想加X锁得先加意向排他锁。意向锁的作用是让后续表锁操作快速判断表里是否有行被锁住不用遍历所有行。再往细里分行锁在实现上有三种形态记录锁Record Lock锁住索引记录本身。间隙锁Gap Lock锁住两个索引记录之间的区间防止其他事务在这个区间插入数据。临键锁Next-Key Lock记录锁加间隙锁的组合既锁记录又锁区间。间隙锁是解决幻读的关键也是生产环境死锁的高发原因。它能防止INSERT插入到间隙中但也可能锁住本不存在的记录范围导致无谓阻塞。4.2 死锁排查与模拟案例死锁的经典戏码是两个事务交替锁住对方下一步要用的资源。我把这个案例记得很牢因为它面试讲起来特别直观。事务A先执行UPDATE inventory SET stock stock - 1 WHERE product_id 1;事务B先执行UPDATE inventory SET stock stock - 1 WHERE product_id 2;然后事务A接着更新product_id2事务B接着更新product_id1。A持有1等待2B持有2等待1双方都不放手InnoDB死锁检测立即介入回滚代价较小的一方。排查死锁的现场操作我提一个实用命令SHOW ENGINE INNODB STATUS\G在输出里找LATEST DETECTED DEADLOCK这一段能看到两个事务的执行SQL、持有的锁和等待的锁以及被回滚的事务。生产环境如果频繁出现死锁先收集这个信息再定位业务代码别盲目加索引或改SQL。预防死锁的实用手段有三件套一是让所有事务按相同顺序访问资源比如都先更新product_id小的再更新大的二是缩小事务体量把不必要的查询从事务里挪出去减少锁持有时间三是用乐观锁重试机制代替悲观锁减少互相等待。4.3 锁等待超时与热点行更新优化除了死锁锁等待超时也是一个高频问题。默认参数innodb_lock_wait_timeout是50秒如果事务A持锁不提交事务B等锁超过了这个时间就会报超时错误。我在生产环境见过一个典型的坑秒杀场景里所有请求都更新同一个商品的库存事务一个个排队但每个事务里还夹杂着很多慢查询锁持有时间被拉长后面的请求大量超时。这种热点行的优化思路从根上说不是拼命调大锁等待时间而是减少持锁时间。实务里常用的方案包括把大事务拆小库存扣减单独一个短事务其他非核心逻辑放事务外。用原子UPDATE而不是先SELECT再UPDATE避免不必要的锁范围扩大。考虑库存预扣和异步对账把热点写操作从数据库压力中剥离。热点行排队严重时用Redis做扣减DB异步落账DB只负责最终一致性。面试官如果想考这部分往往会顺着“热点更新”往分布式方向引。能说出“数据库层面只能等待必须从业务架构上分流”这句话基本就过关了。5. 日志与崩溃恢复答好这道题直接加分5.1 binlog、redo log、undo log 三者的分工日志机制是MySQL面试里性价比最高的考点因为它串起了事务、复制、恢复三个大模块。很多人只知道三份日志的名字却说不出为什么需要三份。Binlog是MySQL Server层产生的二进制日志记录的是逻辑变更比如“更新了哪一行、变成什么值”。它的核心用途有两个主从复制和基于时间点的数据恢复。Binlog是追加写的不会覆盖历史。Redo Log是InnoDB存储引擎层的物理逻辑日志记录的是“数据页做了什么修改”。它解决的是崩溃恢复问题事务提交后数据页可能还在内存里没刷到磁盘如果这时候宕机要靠Redo Log重放保证已提交事务不丢失。Redo Log是循环写的文件固定大小写满会覆盖。Undo Log则是事务回滚和MVCC的基础记录的是“修改前的旧值”。事务发生回滚时要按Undo Log恢复旧版本。三道日志各管一摊Undo保证原子性Redo保证持久性Binlog负责归档和复制。面试时能一句话概括再配合update流程展开印象分很高。5.2 redo log刷盘与性能取舍Redo Log并不是每次提交都立刻刷到磁盘。MySQL通过参数innodb_flush_log_at_trx_commit控制刷盘策略这个参数是面试官爱问的生产配置。三个取值对应三种权衡0提交时不刷盘由后台线程每秒刷一次。性能最好但崩溃时可能丢失最后一秒内的已提交事务。1每次事务提交都刷盘。最安全不会丢已提交事务。2每次提交只写入操作系统缓存每秒再fsync刷盘。崩溃时操作系统没宕的话不丢宕机可能丢。生产环境默认推荐1因为数据安全性优先。但对高并发写场景每次提交都fsync会成为瓶颈。MySQL为此做了组提交Group Commit多个事务的Redo Log刷盘合并成一次I/O大大降低了频繁fsync的代价。实际调优时还会配合sync_binlog一起调。它的取值为1时每次提交事务都会把Binlog刷到磁盘保证Binlog不丢。如果想追求极致性能有人会设成0或100但这是把双刃剑掉电可能丢Binlog进而导致主从不一致我不建议线上乱调。5.3 “更新后突然断电”怎么答这道题几乎是一道必考综合题建议每个人都在本地把流程完整推演一遍。假设事务已经提交binlog也落盘了但数据页还没刷到磁盘这时断电。重启后InnoDB先扫描Redo Log把记录了但未应用的重做操作重放已提交数据不会丢失。假设事务还没提交只写了Redo Log Buffer但没进入commit断电重启。Redo Log里可能只有prepare记录没有完整commit记录。恢复时MySQL会在崩溃恢复阶段检查Binlog是否完整如果Binlog里对应事务也完整说明主从库都可能已经应用于是提交这个事务如果Binlog不完整说明这个事务没被完整记录就回滚。这就是两阶段提交的用处。它的存在保证了Redo Log和Binlog的状态一致。答题时把“prepare-commit”和“检查Binlog完整性”这两个关键动作讲出来和只背日志概念的候选人差距立刻就出来了。6. 主从复制与高可用实战题最后一道防线6.1 复制原理与三种复制格式主从复制是生产环境绕不开的话题也是MySQL面试的常规压轴。基础流程要能顺畅讲出主库把变更写入Binlog。主库上有Dump线程负责把Binlog发送给从库。从库上有两个线程IO线程负责接收Binlog并写入本地的Relay LogSQL线程负责读取Relay Log并重放让从库数据追上主库。这中间最容易被追问的是Binlog格式。MySQL的Binlog有三种格式格式特点风险STATEMENT记录SQL语句本身函数、存储过程等可能在主从库执行结果不一致ROW记录每一行变更前后内容最安全但Binlog体积大MIXED默认用STATEMENT遇到不安全SQL自动切ROW折中选择实际生产我更推荐ROW格式。虽然体积大但可回溯性强误操作后还能从Binlog里反推出原始数据做闪回恢复也更方便。面试里说“因为ROW能精确记录行变更避免主从数据不一致”比笼统回答更到位。6.2 主从延迟的排查与解决主从延迟是面试官最喜欢结合实际问的题。它的表象是从库落后主库几千秒本质是复制通道消费不过来。常见的延迟原因有三个层次第一层是主库写入压力太大。主库的Binlog生成速度超过从库SQL线程的重放速度尤其是从库SQL线程在旧版本MySQL里是单线程的一个大事务能拖垮追进度。第二层是大事务。比如一次性UPDATE十万行MySQL在从库重放时要一条条或分段执行其他小事务全部排队等。第三层是硬件和参数问题。从库磁盘I/O慢、网络带宽不够、从库开着Binlog又没优化刷盘都会放大延迟。解决办法也分层从MySQL 5.7开始启用并行复制配置slave_parallel_workers大于1让多个SQL线程并行重放不同事务能明显缓解延迟。避免大事务把批量更新拆成小批次。从库临时关闭或调整sync_binlog、innodb_flush_log_at_trx_commit减少刷盘开销。如果业务允许从库加独立的临时表、内存配置调整保证足够Buffer Pool。对延迟高度敏感的场景考虑半同步复制主库等待从库确认收到Binlog再返回降低数据丢失概率。面试里如果能补一句“延迟是必然存在的读写分离架构要考虑数据最终一致性比如用户刚下单立刻去查订单可能查不到”会让面试官觉得你有真实业务经验。6.3 分库分表与中间件选型单表数据量过亿、写入吞吐打不上去就得聊分库分表了。这块不是MySQL自身能力而是架构方案但面试题里经常出现因为它考验的是综合设计能力。分库分表分两类垂直拆分和水平拆分。垂直拆分是把一张宽表按业务字段拆成多张表比如把订单基本信息、订单扩展信息拆开减少单行数据宽度。水平拆分是把同一张表的数据按规则分散到多张表比如按user_id取模分16张表。水平拆分最关键的是分片键选择。分片键必须贴近高频查询条件否则每个查询都要全库路由性能反而更差。比如订单表经常按user_id查就以user_id做分片键如果还经常按order_no查就需要维护一份order_no到user_id的映射或者建全局索引表。分库分表的会带来分布式主键、跨库JOIN、分布式事务、扩容数据迁移问题。主键不能用数据库自增常见是雪花算法或号段模式。跨库JOIN尽量拆成多次单表查询在应用层组装。分布式事务可以用本地消息表、事务消息或TCC框架。扩容最怕的是按取模分片导致数据全部重排所以很多新项目选择一致性哈希或按时间范围分片降低挪动成本。这题想要答出深度一定要避免上来就喊“我们用中间件”。先评估数据量和业务形态再决定是分库还是分表、选什么分片键、用什么中间件这才是面试官真正想看到的思维。7. 避坑清单我在面试中翻过的车和总结7.1 四道典型真题的“满分回答模板”这里整理四道我在面试实战里见过的高频真题每道给出一个答题骨架不追求完美但保证逻辑完整。第一题排查一条慢SQL。答题顺序建议是先确认慢查询日志或压测表现拿到SQL再用Explain看执行计划重点关注type、key、rows、Extra四项根据结果判断是全表扫描、用了索引但回表太多、还是filesort再对症下药能建联合索引就建能改SQL写法就改最后用执行计划前后对比验证优化效果。第二题可重复读下为什么还有幻读风险。答题思路是区分快照读和当前读快照读靠ReadView保证一致性快照不会看到新插入的行当前读读最新版本如果没间隙锁保护两次当前读之间可能插入新行造成幻读InnoDB通过临键锁锁住范围和间隙来阻止插入。要强调“完全杜绝”要看场景MVCC加锁组合之下正常的RR隔离级别事务不会出现幻读但锁冲突会上升。第三题主从延迟怎么办。从原因入手先看有没有大事务、是不是单线程复制、从库有没有刷盘瓶颈再给方案拆大事务、开并行复制、调整刷盘参数、必要时上半同步最后补充业务兜底延迟敏感场景强制走主库或短期容忍最终一致。第四题如何设计分库分表。不要一上来就设计先问数据量、查询模式、写入峰值再从垂直拆分和水平拆分里选方向分片键选高频等值查询字段考虑数据倾斜、扩容、全局表和分布式事务最终给出从单库到分库分表的平滑迁移路径比如双写方案。7.2 复习顺序与资料建议MySQL面试准备最忌讳东一榔头西一棒子。我自己的复习路线是第一周先把SQL执行流程、索引结构、执行计划吃透。不要求背代码但要做到给你一条SQL能准确说出它大概怎么走。第二周攻事务隔离级别、MVCC、锁。这块要画图理解把ReadView、锁兼容矩阵、死锁场景画出来比纯文字记忆有效得多。第三周看日志和主从复制。建议在本地用Docker起一个主从环境手动停库、重启、观察恢复行为。实践一遍之后很多概念自然就记住了。资料方面MySQL官方文档是最准确的适合当字典《高性能MySQL》适合系统阅读但不用全书逐字啃挑索引、事务、复制这几章重点看。另外多收集真实面试场景的追问链自己对着镜子讲一遍你会发现很多“以为懂”的知识其实经不起推敲。最后说一点个人体会。MySQL面试题看似零散其实暗含一条主线面试官想确认的不是你会背多少概念而是遇到一个数据库问题时你能不能找到根因、能不能给出可落地的方案。搞清楚锁和日志的底层逻辑再结合自己的真实项目场景去演练比刷一百道填空题有用得多。我建议你在准备期间哪怕只是临时搭个单机环境也要亲手造一次慢SQL、造一次死锁、看一次主从延迟这比任何资料都值得花时间。

相关新闻

CF C. GCD Treasury

CF C. GCD Treasury

题目大意:给出一个 的值,每次可以找一个数,满足它们之间不互质,使得 同时 ,这一次操作可以产生 的贡献,求最大贡献值。思路:首先如果 ,可以白嫖 的贡献, 值不变。考虑…

2026/10/11 3:03:21 阅读更多 →
WebSocket测试工具实战:选型、命令、脚本与避坑指南

WebSocket测试工具实战:选型、命令、脚本与避坑指南

简介:面向WebSocket服务端与客户端开发调试的测试工具包,适用于实时通信功能自测、连接握手验证及简单压力探测,帮助开发者快速检查连接的建立与数据收发。资源共19个文件,压缩包仅2.87MB,包含HTML在线测试页面、JavaS…

2026/10/11 3:03:21 阅读更多 →
pQTLtools实战:从样本对齐到共定位的完整pQTL分析流程

pQTLtools实战:从样本对齐到共定位的完整pQTL分析流程

简介:pQTLtools 是一套面向蛋白质定量性状基因座(pQTL)研究的 R 语言工具包,适合从事遗传学、蛋白质组学与生物信息分析的科研人员及研究生使用,用于整合与处理 Olink、SomaLogic、Caprion 等不同平台的面板数据&#…

2026/10/11 3:03:21 阅读更多 →

最新新闻

RT-Thread—STM32—EasyFlash

RT-Thread—STM32—EasyFlash

RT-Thread—STM32—EasyFlash 概述 本教程主要根据官方推荐的教程进行改编,详细信息请参考EasyFlash软件包 本例程的模板使用通用模板环境搭建里面的模板 RT-Thread——STM32——FAL库 示例工程请参见文末的源码仓库链接, 建议从头开始移植, 加深印象。 配置 打开工…

2026/10/11 3:59:54 阅读更多 →
gitlab4j-api 实战:Java 客户端封装 GitLab REST API 与 CI/CD 避坑指南

gitlab4j-api 实战:Java 客户端封装 GitLab REST API 与 CI/CD 避坑指南

简介:GitLab4J API 是一套面向 Java 开发者的 GitLab REST API 客户端库,适合需要在自有系统中集成 GitLab 仓库管理、CI/CD 或用户权限等能力的后端工程师与运维开发人员。它封装了项目、分组、合并请求、用户、议题、提交等常用子 API,并支…

2026/10/11 3:59:54 阅读更多 →
HarmonyOS V2状态管理实战:从@local开始搞懂深拷贝与嵌套观测

HarmonyOS V2状态管理实战:从@local开始搞懂深拷贝与嵌套观测

从V1那套状态管理切到V2之后,我第一个上手的就是local。说实话,刚开始看文档的时候觉得它就是State换了个名字,但真正在项目里用了两周才发现,这两个装饰器的设计思路根本不在一个维度。HarmonyOS 6.0的V2状态管理把“状态来源”这…

2026/10/11 3:59:54 阅读更多 →
Python情人节浪漫代码:心情泡泡动画小项目实现教程

Python情人节浪漫代码:心情泡泡动画小项目实现教程

每年情人节前后,总有人问我:Python除了写爬虫、做自动化,到底能不能搞点浪漫的东西?其实能,而且门槛低到让人意外。今天这篇就分享一个可以直接拿去送人的小项目:python情人节代码之心情泡泡。它的玩法很简…

2026/10/11 3:59:54 阅读更多 →
激光与电火花加工仿真:从热源到熔池流动的多物理场建模实践

激光与电火花加工仿真:从热源到熔池流动的多物理场建模实践

激光打孔看着简单——一束光打下去,材料上多了个眼。但你要是想提前算出来这个眼长什么样,事情立刻变复杂了。激光打孔时熔融金属会从孔口飞溅出来,孔壁上会留下重铸层,入口边缘还有一圈毛刺;电火花加工那边更热闹&…

2026/10/11 3:59:54 阅读更多 →
Java面试翻车现场:HashMap、线程池、JVM深度拆解

Java面试翻车现场:HashMap、线程池、JVM深度拆解

“严肃面试官 vs 搞笑水货程序员谢飞机(本名王大瓜)——互联网大厂 Java 面试实录与技术拆解”,光看这个标题你可能觉得是个段子,但我在现场的感觉是:这简直就是一场喜剧外壳下的技术解剖课。谢飞机,简历上…

2026/10/11 3:58:54 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →