news 2026/8/29 1:44:35

MySQL面试45连问:从索引原理到SQL优化,深度自测知识链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL面试45连问:从索引原理到SQL优化,深度自测知识链路

1. 为什么“45连问”比“500道整理题”更值得刷

先把话说在前面:MySQL面试题从来不是考“你背了多少个定义”,而是在考“你把数据库这棵树种得多深”。

很多人准备面试是这样的——收藏了十篇《MySQL高频面试题合集》,每篇30到50问,从头到尾过两遍,觉得自己会了。结果面试官一句“你刚说的覆盖索引,具体怎么避免回表?回表和索引下推是什么关系?”瞬间卡壳。原因很简单:你背的是孤立的知识点,而面试官问的是知识点之间的连接线。

“连环45问”恰恰是为了解决这个问题。它把索引、事务、锁、日志、优化、主从复制这些板块串成了一条问题链,每一问都是上一问的延伸,每一问都在逼你解释“为什么”。这不是某个面试官故意刁难,而是他真正想确认:你只是听过这些名词,还是真的在项目里被这些问题坑过、想过、查过、解决过。

所以这篇内容,我不想再罗列一堆“标准答案”让你去背。我的方式是:把45问拆成几大板块,每个板块告诉你面试官会怎么起头、怎么追问、你的回答应该踩在哪些点上。你可以把它当成一份自测清单——能答到第几问,基本就是你对MySQL理解深度的真实水位线。

2. 五个必考板块的连环问法拆解

2.1 索引与B+树:从“什么是索引”一路问到“索引下推”

这一板块几乎是每场MySQL面试的开胃菜,也是最容易暴露水平的地方。一般会从最基础的问题开始:

第1问:什么是索引?为什么用B+树而不用哈希表或二叉查找树?

这一问别急着背定义。面试官实际想听的是:你知道索引是“加速查询的数据结构”,但你有没有想过为什么是B+树。哈希表等值查询O(1),但做不了范围查询;二叉查找树在数据量大的时候会退化成链表;B树虽然也能多路平衡,但它的非叶子节点也存数据,同样高度的树能容纳的索引项更少,磁盘IO次数更多。B+树把所有数据都放在叶子节点,并且叶子节点用双向链表串起来,范围查询和排序都能直接走链表顺序扫描,这才是它被选中的真正原因。

第2问:聚簇索引和二级索引有什么区别?什么是回表?

建表时主键就是聚簇索引,叶子节点存的是整行数据;二级索引的叶子节点存的是主键值。只要你用的索引不是主键索引,查到主键之后还要再到聚簇索引里把整行捞出来,这个过程就叫回表。这个回答本身不难,难点在下一个追问。

第3问:怎么避免回表?什么情况下会用到覆盖索引?

这就是连问的威力。你回答了回表,面试官马上会问“你项目里怎么优化回表”。正确思路是:把要查询的字段都塞进同一个二级索引里,让索引叶子节点就能提供所有需要的列,直接走索引返回结果,不需要回表。比如你经常select name from user where age > 20,那就建联合索引(age, name),这就是覆盖索引。

第4问:联合索引的最左前缀原则,到底怎么理解?

很多人会背“最左优先”,但一问到具体例子就含糊。比如联合索引(a, b, c),查询条件是b = 1 and c = 2,用不用得上索引?答案是用不上。而a = 1 and c = 2,能用到a这一列。这里有一个反直觉的点:a = 1 and b > 10 and c = 5c能不能走索引?答案是不能,因为b是范围条件,它后面的索引列就失效了。这个细节我在项目里真是踩过,查出来的慢SQL就是这种写法。

第5问:索引下推是什么?它优化了什么?

这是一个常被忽视但面试官特别爱问的点。MySQL 5.6引入的索引下推,简单说就是:在遍历索引的时候,直接对索引中包含的字段先做一次过滤,减少回表次数。举例子,联合索引(age, city),查询age > 20 and city = '上海',没有索引下推时,先按age范围把记录找出来回表,再筛city;有下推时,会在索引遍历阶段直接把city不匹配的过滤掉,回表次数明显变少。这个机制对like 'abc%'这种前缀模糊查询里的索引列过滤特别有效。

这一串问下来,如果你每一问都能接住,面试官基本就认定你索引这块是有实操积累的。如果卡在“覆盖索引”或“索引下推”,那回去该补的就是B+树底层结构、执行计划层面的东西,而不是去背更多索引口诀。

2.2 事务与隔离级别:从“ACID”问到“MVCC实现原理”

这个板块是MySQL八股文里最核心的部分,没有之一。因为它关乎数据一致性和并发控制,几乎所有做后端的人都绕不开。

第6问:事务四大特性ACID,分别由什么机制保证?

这是经典的开场。你需要把四个特性拆开:原子性靠undo log,持久性靠redo log,隔离性靠锁和MVCC,一致性靠前三者共同保障。这里有个重点——大多数人在回答一致性的会说“事务让数据库从一个一致状态变到另一个一致状态”,这句话本身没错,但最好能说出:如果一个事务中途失败,已经执行的操作全部回滚,这个回滚机制就是undo log在支撑;如果要崩溃恢复,已提交的事务也能重放,这是redo log的价值。

第7问:四种隔离级别分别解决什么问题?脏读、不可重复读、幻读到底怎么区分?

读未提交、读已提交、可重复读、串行化,这四级要放到具体场景里去理解。脏读是读到了别人没提交的数据;不可重复读是同一个事务里,两次读同一行数据,结果不一样,因为别人提交了更新;幻读是同一个事务里,两次查询得到的结果集数量不一样,因为别人插入了新行。MySQL默认的可重复读,用MVCC解决了普通select的幻读问题,但当前读(比如select for update)还是可能出现的,真正要彻底防幻读还是得靠间隙锁。

第8问:MVCC到底是什么?它和隔离级别是怎么配合的?

这是连环问的分水岭。MVCC的核心是三个隐藏字段——DB_TRX_ID(数据行版本)、DB_ROLL_PTR(回滚指针)、DB_ROW_ID(隐藏主键),以及read view(一致性视图)。可重复读的原理是:事务开始后第一次select时创建read view,整个事务期间复用这个视图,所以其他事务提交的新数据对你不可见;读已提交则是每次select都生成新的read view,所以能读到别的事务最新提交的数据。这一问能回答到read view这个粒度,基本就合格了。

第9问:可重复读下当前读还会出现幻读吗?怎么防?

这个问题特别刁钻。常规业务里,可重复读已经隔离了快照读的幻读,但一旦你用select ... for updateupdatedelete这类当前读,就会去读最新版本的数据。假如一个事务先select name from user where id > 100 for update查到了3条,另一个事务插入了第4条,再select又能查到4条。要彻底防住,InnoDB会用间隙锁把id > 100这个范围锁住,让别的事务在这个范围里插不进数据。面试官问这一连串,其实就是想考察你对InnoDB锁和MVCC协同工作的理解是否到位。

第10问:事务隔离级别越高越好吗?为什么默认用可重复读?

一个容易被忽略但很好的加分点。MySQL默认可重复读,是为了兼容binlog在statement格式下的主从复制一致性——如果默认读已提交,某些非确定性的更新语句在从库重放时可能产生不一致。串行化虽然最严格,但性能瓶颈非常明显,基本只有银行转账一类高安全场景才考虑。这一问回答好了,能显得你不仅懂原理,还明白“技术选型背后全是权衡”。

2.3 锁机制:从“行锁表锁”问到“死锁排查”

锁是一个很容易聊出深度的话题,也是连环问最容易从理论切入实战的地方。

第11问:MySQL有哪些锁?表锁和行锁有什么区别?

先说概念:表锁锁整张表,MySQL Server层的metadata lock就是表锁;行锁是InnoDB存储引擎层的,锁的是索引记录。InnoDB的行锁又分共享锁(S锁)和排他锁(X锁)。理论上,行锁并发度比表锁高,粒度更细,但代价是锁管理更复杂。

第12问:行锁的三种算法——Record Lock、Gap Lock、Next-Key Lock,分别锁什么?

这是必考细节。Record Lock锁单条索引记录;Gap Lock锁间隙,防止其他事务在间隙里插入;Next-Key Lock是记录锁加间隙锁的组合,左开右闭区间。InnoDB默认隔离级别可重复读下,普通查询是快照读不加锁,但update、delete、select for update会加Next-Key Lock。这一步特别容易答漏,很多人只记得“间隙锁防幻读”,说不出Next-Key Lock是组合锁。

第13问:什么时候会锁表?什么时候会锁行?

在InnoDB里,如果你更新条件没用索引字段,行锁就会升级成全表扫描,相当于加了表锁。比如update user set name='x' where age=20,如果age列没有索引,MySQL要一行行扫,每一行都加锁,实际效果就是表锁。这个面试题背后其实在考执行计划里的type字段——全表扫描和索引扫描的区别。

第14问:死锁是怎么产生的?怎么避免?怎么排查?

死锁的经典场景是:事务A先锁了表1的行1,再要锁表2的行2;事务B先锁了表2的行2,再要锁表1的行1,两边互相等待,死锁就产生了。避免方法无非是:让所有事务按相同顺序访问表、减少事务持有锁的时间、合理设置索引让行锁粒度更小。排查方式也比较固定——用show engine innodb status查看LATEST DETECTED DEADLOCK信息,或者打开innodb_print_all_deadlocks参数把死锁记录到错误日志里。我在实际项目里排查过一次死锁,最后发现真凶就是两条update语句走了不同的索引顺序,改掉事务内的SQL顺序就解了。

第15问:锁和MVCC是怎么共存的?

这一问是进阶中的进阶。MVCC解决的是快照读的并发问题,读不加锁、写不加锁、读写不冲突;锁解决的是当前读的并发控制。两者分工明确:普通select走MVCC,update/delete/select for update走锁机制,这样的组合让数据库在高并发下能维持比较高的吞吐。说到这,面试官基本就不会再往下追问了,因为他对你锁这块的掌握已经有底。

2.4 日志体系与主从复制:从“redo log”问到“主从延迟”

这个板块偏底层,也是区分“能不能扛住生产问题”的一道坎。平时不做DBA的后端,遇到MySQL出了问题第一反应是重启,但理解日志和复制机制的人会先从日志里找线索。

第16问:redo log、undo log、binlog分别负责什么?

三个日志经常被混在一起,但职责完全不同。redo log是InnoDB存储引擎独有的,负责崩溃恢复,保证已提交事务不丢失;undo log是回滚日志,负责事务回滚和MVCC旧版本读取;binlog是MySQL Server层的日志,负责主从复制、数据恢复,任何存储引擎都能用。一个是引擎层、一个server层,这个区别一定要说清楚。

第17问:为什么要两阶段提交(redo log和binlog的写入)?

因为redo log和binlog是两个独立的日志,如果不做协调,写库中途崩溃就会出现一个日志写了、另一个没写的状态,主从数据就会不一致。两阶段提交的思路是:先写redo log并处于prepare状态,再写binlog并落盘,最后把redo log改为commit状态。这一问能回答出来,面试官会认为你是真的读过InnoDB的提交逻辑,而不是只背了名词。

第18问:binlog有哪几种格式?statement和row有什么区别?

statement格式记录的是SQL原语句,日志量小,但某些函数或非确定性操作在主从重放时可能产生不同结果;row格式记录的是实际变更的行,一致性最可靠,但日志量会膨胀;mixed是折中方案。现在生产环境大多推荐row格式,虽然日志大,但不会因为执行环境不同导致主从不一致。

第19问:主从复制原理是什么?从库是怎么拿到数据的?

主从复制的核心链条是:主库写入binlog——从库IO线程把binlog拉过来写到中继日志(relay log)——从库SQL线程读取中继日志并重放。这里面有一个关键点,旧版MySQL主从切换后,从库要指定binlog文件名和位置点重新同步;而GTID模式下,主从通过全局事务标识符自动定位同步位置,切换更简单。

第20问:主从延迟怎么产生?怎么解决?

主从延迟几乎是所有读写分离系统的老大难。产生原因比较典型:从库是单线程重放,如果主库写入并发很高,从库SQL线程跟不上;或者是大事务,一个超大update在主库执行1秒,从库重放也要这么久。优化思路一般有:升级并行复制(MTS多线程复制)、把大事务拆成小事务、对报表类只读业务走独立从库或延迟从库。面试时说出“并行复制和拆分大事务”这两个方向就够了,真有经验的话再补一句“监控seconds_behind_master指标”。

2.5 SQL优化与运维实践:从“慢查询”问到“分库分表”

最后一个板块,重点考察项目落地能力。这一块回答得好,能盖过前面所有纯理论的亏欠。

第21问:一条SQL执行得很慢,你会怎么排查?

标准流程基本是:先确认是不是真的慢,用慢查询日志或performance_schema抓出来;然后用explain看执行计划,重点看type、key、rows、extra几个字段;接着分析是不是没走索引、索引选择性差、数据量大、或者存在锁等待;最后针对性优化SQL或建索引。这里有一个非常容易被忽视的点:先看是不是锁等待导致——用show processlist看状态,如果卡在waiting for table metadata lockLock wait timeout exceeded,优化SQL没用,得先处理锁。

第22问:explain里的type字段分别代表什么?

all是全表扫描,index是扫描整个索引树,range是范围扫描,ref是非唯一索引等值匹配,eq_ref是唯一索引等值匹配,const是主键或唯一索引等值匹配,system是const的特例。生产优化目标通常是range以上。我见过很多人只会说“all最慢”就停了,但如果你能补充一句“index虽然也叫扫全索引,但覆盖索引查询时也可能走index”,就显得更有操作经验。

第23问:什么情况下索引会失效?

失效场景挺多:对索引列用了函数,比如where date(create_time) = '2024-01-01';隐式类型转换,比如字符串字段用了where mobile = 13800138000;前导模糊查询like '%abc';联合索引不满足最左前缀;or两边有一个条件没有索引而选择全表扫描。每个失效场景都值得展开讲,我最常遇到的坑就是隐式类型转换,自认为走了索引,实际是隐式cast后全表扫。

第24问:数据量太大,分库分表还是分区表?怎么权衡?

这个要说得慎重。分区表是对单库单表内部做物理分区,能改善维护效率,但对查询性能和写入瓶颈的提升有限;分库分表是真正把数据分散到多个库、多张表上,解决的是单实例容量和单表写入瓶颈。但分库分表会引入分布式事务、跨库join、全局主键、数据迁移等一堆问题。所以我的建议是:能不分就不分,早期先做好索引、归档、缓存,到了单表千万到亿级、写入压力确实扛不住时才考虑分片,而且优先分表,再考虑分库。

第25问:分库分表后,非分片键怎么查询?

这是分片方案落地的老大难。比如按userId分片,但业务要按orderNo查订单。常见解法是建立映射表(orderNo -> userId),或者干脆在分片表中用orderNo做全局唯一索引加冗余userId字段,查询时先查映射关系再路由到对应分片。也有场景会用es或宽表做二级索引,但那已经是另一个架构问题了。

这个板块连续问下来,最后还会带几个小但极高频的问题:join查询怎么优化?order bygroup by怎么用索引?count(*)为什么慢?limit offset大深分页怎么优化?每一个都值得单独开一篇,但整体思路都是“让SQL走索引、减少扫描行数、避免不必要的排序和临时表”。

3. 45问自测清单:你能坚持到第几问

为了方便你日常自测,我把45问做成了表格。不附带完整答案,只写考查核心,因为只有你先自己答一遍,对不上来的地方才是你真正需要补的地方。

序号问题核心考点
1MySQL索引底层为什么用B+树数据结构选型、磁盘IO
2聚簇索引和二级索引的区别索引存储结构、回表
3什么是覆盖索引回表优化
4最左前缀原则,举一个失效例子联合索引
5索引下推是什么5.6优化特性
6ACID分别由什么保证undo、redo、MVCC、锁
7四种隔离级别怎么区分并发问题
8MVCC底层实现原理read view、隐藏字段
9可重复读下当前读为什么会幻读当前读、间隙锁
10为什么MySQL默认可重复读binlog与复制一致性
11表锁和行锁的区别锁粒度
12Record Lock、Gap Lock、Next-Key Lock三种行锁算法
13什么时候行锁变表锁无索引更新
14死锁怎么产生、怎么排查锁等待、死锁日志
15MVCC和锁怎么共存读写分离机制
16redo log和binlog的区别引擎层与server层
17两阶段提交解决什么问题崩溃一致性
18binlog三种格式怎么选主从一致性
19主从复制全流程binlog、中继日志
20主从延迟原因与解法并行复制、大事务
21慢SQL排查完整流程explain、processlist
22explain type字段含义执行计划解读
23列举索引失效场景最左前缀、函数、隐式转换
24分库分表还是分区表架构选型
25非分片键怎么查询映射表、全局索引
26char和varchar怎么选字段设计
27int(11)里的11是什么意思数据显示宽度
28数据库三大范式要不要遵守反范式设计
29大表加索引要注意什么在线DDL
30count(*)为什么慢二级索引统计
31group by如何用索引优化临时表、索引排序
32深分页limit怎么优化游标分页、延迟关联
33join查询如何优化驱动表、关联字段索引
34存储过程在项目里还常用吗存储过程优缺点
35触发器有什么隐患隐式逻辑、难以排查
36字段名是关键字怎么办反引号与命名规范
37唯一索引有重复数据怎么建数据清洗与重建
38数据库连接池大小怎么设置连接数、IO模型
39为什么数据库连接要用连接池三次握手开销
40MySQL8.0和5.7的差异caching_sha2_password等
412059错误是为什么认证插件兼容
42数据归档怎么做冷热分离
43一条update语句的执行流程一边写一遍读
44一致性哈希在分库分表中的应用数据倾斜
45线上索引怎么维护pt工具与自适应哈希

这张表你可以直接当作一次模拟面试来用。找个人给你提问,或者自己录个音,每问争取在一分钟内说出核心答案。能答到25问以上,说明基础扎实;能答到35问以上,说明有项目实战沉淀;如果前三问就卡住了,别急着背45问,先好好翻一遍InnoDB内核原理。

4. 背八股文最容易踩的坑

4.1 只记结论,不记推导过程

我见过太多人回答“为什么选B+树”,张口就是“树矮、磁盘IO少、适合范围查询”,但问他“为什么不用红黑树”就说不出来。这就是典型的只记结论。面试官一追问“红黑树在内存里也很矮,为什么数据库不用”,答不上来就显得很虚。正确的准备方式,是把结论推演一遍:数据量大到GB级,内存放不下,必须频繁访问磁盘,一次磁盘IO相当于百万次内存访问,所以树的高度是核心矛盾——B+树三层就能放千万级数据,而红黑树高度动辄二三十层,每个节点都要一次IO,性能完全不在一个量级。把推导过程理解了,怎么追问都不怕。

4.2 概念背熟了,但不会结合项目场景

光背“覆盖索引”的定义没用,面试官会问“你线上有一个SQL很慢,判断出来是回表了,后来你怎么改的”。这种问题必须靠真实场景回答。哪怕你只是在自己练手的项目里碰到过,都比背概念强。我的建议是:每学一个知识点,都想想“这个原理在我的业务里对应什么情况”。比如select * from orders where user_id = ?,当你发现这条SQL在数据量大之后变慢,explain显示possible_keys有user_id索引,但extra里出现了Using filesort,你就知道是排序字段没进联合索引。只背概念的人,看到Using filesort只会阿巴阿巴,而实操过的人马上就有优化思路:把排序字段加进联合索引,让索引本身就是有序的。

4.3 忽略版本和环境差异

MySQL 5.7和8.0在很多细节上不一样。比如8.0默认的认证插件是caching_sha2_password,很多用旧客户端连接时直接报2059错误;8.0取消了查询缓存;8.0的with ... as支持递归等等。如果你在面试里说“MySQL的utf8是utf8mb3”,然后紧接着说“我线上在用表情符号存emoji”,那这一句话就暴露了你根本没看过字符集设置。准备八股文一定要注意版本大版本差异,最好把5.7和8.0的关键差异列清楚,这样才显得你是有线上环境的人。

4.4 忽略工具使用能力

说实话,光会答理论题的候选人大有人在,但面试官只要问一句“你的慢查询日志怎么打开,一般配置阈值设多少”就能看出实操水平。long_query_time=2slow_query_log=ON、用mysqldumpslow或pt-query-digest分析,这些工具如果没用过,临时抱佛脚也说不自然。同样的情况还有:show processlist看状态、explain analyze看实际执行耗时、optimizer_trace看优化器决策。这些命令不要求全背,但你至少要在项目里用过两三个。

5. 面试现场应对连环问的技巧

连环问的杀伤力在于,你答完第一问,面试官紧接着会基于你的回答引出第二问,一直到你答不上来为止。从面试官视角看,这种层层递进的提问不是想刁难你,而是想找到你能力的天花板。对应地,你的策略不是防住每一问,而是让每一次回答都清晰、准确、有边界,让面试官能快速判断“这个人在哪个位置”。有几个经验值得分享。

第一,会的问题不要只给定义,要给“定义+原理+例子”。比如“什么是间隙锁”,不要只说“锁的是索引记录之间的间隙,防止幻读”,最好补一句“比如一个事务锁住了id in (5, 10)的间隙,另一个事务想插id=7的记录就会被阻塞”。有了具体例子,面试官会认为你是真懂,而不是背了“间隙锁”三个字。

第二,不会的问题不要硬编。你可以明确说“这块我了解得比较浅,但按我的理解,它大概和XXX机制有关,具体细节我需要确认”。这既暴露了边界,又展现了你建立知识连接的能力。硬编一个错误答案,比诚实承认后果严重得多——因为面试官很可能顺着你的错误继续追问,最后你整个知识体系的可信度都会崩塌。

第三,注意控制回答节奏。一个问题回答两到三分钟是合理的,超过五分钟就要小心跑偏。如果面试官中途追问某个细节,比如你提到“覆盖索引”后他直接打断说“那你觉得覆盖索引和联合索引排序有什么关系”,这时候要快速切换思路,别再自顾自地讲“回表”了。灵活应变本身就是面试的一部分。

6. 关于“45问”的一点实话:它是一面镜子,不是一座山

最后说点我的个人感受。

我最早刷MySQL面试题的时候,也是打开一个“八股文合集”,从头背到尾。背了差不多二十几问,觉得自己稳了,结果一套模拟面试下来,被朋友的连环追问打得毫无招架之力。后来才明白,问题不在“该不该背八股文”,而在“背的时候有没有带着理解去问为什么”。

这份45问清单,你与其把它当成一份“考试范围”,真不如把它当成一面镜子——每一问都是你知识体系上的一根探针。能答得滚瓜烂熟的,说明这部分你真的会了;答得磕磕绊绊的,恭喜你,找到了一个值得查漏补缺的地方;完全答不上来的,那是你接下来两周的提升重点。具体到怎么练:我的建议是每天专门抠一个板块,先自己默写答案,再拿真实的explain输出做验证,最后试着把你自己的项目里对应的SQL拉出来看一遍执行计划。这样坚持一段时间,你收获的绝不只是“能过面试”,而是一套真正能用来处理线上问题的底层能力。

还有一个小技巧送给正在准备的朋友:把这份清单发给你的同学或同事,互相提问,一个人问、一个人答。因为一个人自测的时候很容易“觉得懂了”,但张嘴回答的时候就会暴露思维卡点。互相提问还能锻炼临场反应,比闷头刷题效率高得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 1:43:40

Arduino ADC模数转换详解:从原理到电路设计与代码实战

1. 项目概述:从模拟世界到数字世界的桥梁如果你玩过Arduino,大概率用过analogRead()这个函数来读取电位器或者光敏电阻的值。这个看似简单的函数背后,连接的正是Arduino与真实物理世界最关键的接口之一:模数转换器,也就…

作者头像 李华
网站建设 2026/8/29 1:43:16

C++四大经典排序算法实现与工程优化指南

简介:排序算法是计算机科学的基础概念,其核心在于分治、减治与优先队列等计算思想在真实内存模型中的落地。理解时间复杂度只是起点,真正影响性能的是缓存局部性、栈深度控制、内存分配策略与分支预测等底层工程因素。C作为系统级语言&#x…

作者头像 李华
网站建设 2026/8/29 1:42:31

从集合到范畴:用图解轻松理解函子、Monad 与函数式编程抽象

如果你在学函数式编程时,看到Functor、Monad、Applicative这些名词一头雾水,那么最终的根源往往都指向同一个地方:范畴论(Category Theory)。很多资料喜欢直接抛定义,结果初学者被“对象”“态射”“自然变…

作者头像 李华
网站建设 2026/8/29 1:42:13

大脑活动量化与数据建模:Edgi 的 Strava 式活动流设计

打开电脑,看一眼自己的浏览器历史、笔记软件、Kindle 高亮和稍后读列表,混乱得像一间没有整理过的书房。但你手机上有一张很漂亮的 Strava 图表,记录着上周跑了多少公里;有一份详尽的 Letterboxd 看片清单,标注着每部电…

作者头像 李华
网站建设 2026/8/29 1:40:19

OT/ICS安全训练数据稀缺?从5%溯源样本看懂数据组织与异常检测

刚接手一个工控安全项目时,你会很自然地想找一套现成的 OT/ICS 安全训练数据集来跑通异常检测流程。但真正找过一遍的人大多会碰壁:公开数据要么是模拟流量,要么标签不完整,要么缺少攻击步骤的上下文。最近看到的一个方向&#xf…

作者头像 李华
网站建设 2026/8/29 1:40:14

LSM6DS3六轴传感器实战:从寄存器配置到低功耗可穿戴方案

从去年开始,我手上的几个可穿戴项目几乎都换上了 LSM6DS3,原因不复杂:它把 3D 加速度计和 3D 陀螺仪塞进一颗 3mm x 3mm 的封装里,还支持“始终开启”的低功耗工作模式,这让做 TWS 耳机、智能手环、姿态追踪标签这类设…

作者头像 李华