知其然,知其所以然
Java 内部原理 2026-08-10

Collectors.groupingBy() 真实验证:默认返回的是可变HashMap,不是不可变集合

真实验证Collectors.groupingBy()最基础形式真实返回Map<K,List<T>>;真实验证配合counting()/averagingInt()/mapping()等downstream collector真实能一步完成分组统计;真实验证默认返回的Map真实类型是HashMap,而指定TreeMap::new工厂真实能拿到按key排序的结果。

Java Stream Collectors 动画演示
Java 内部原理 2026-08-09

Optional.orElse() vs orElseGet() 真实验证:即使有值,orElse的参数也真实被求值了

真实验证Optional有值时调用orElse(expensiveMethod()),expensiveMethod()真实还是被执行了一次;真实验证orElseGet(supplier)在Optional有值时,supplier真实完全没有被调用;真实用会抛异常的方法证明orElse在Optional有值时依然会触发这个异常。

Java Optional 陷阱 动画演示
MySQL / InnoDB 2026-08-08

Buffer Pool 为什么不怕你扫全表

LRU 冷热分区如何防止一次全表扫描冲垮缓存命中率。

内存管理 InnoDB 动画演示
MySQL / InnoDB 2026-08-08

断电之后,MySQL 怎么知道该留下什么

真实 kill -9 崩溃测试,redo log 如何保证已提交事务不丢。

持久化 崩溃恢复 动画演示
MySQL / InnoDB 2026-08-08

MVCC 如何做到读写不互相阻塞

undo log 版本链与 ReadView 可见性判断的真实过程。

事务 并发控制 动画演示
MySQL / InnoDB 2026-08-08

InnoDB 是怎么发现并解开死锁的

真实构造死锁场景,等待图检测与牺牲者选择机制。

事务 锁 动画演示
MySQL / InnoDB 2026-08-08

复合索引的列顺序,为什么不能随便排

最左前缀原则背后,复合索引在 B+树里的真实排序方式。

索引 B+树 动画演示
MySQL / InnoDB 2026-08-08

Change Buffer 是怎么把随机写攒成批量写的

二级索引随机写入如何被延迟合并成顺序 I/O。

索引 写入优化 动画演示
MySQL / InnoDB 2026-08-08

redo log 和 binlog 是怎么保持一致的

两阶段提交协议如何防止主从数据不一致。

持久化 两阶段提交 动画演示
Java 内部原理 2026-08-08

String.strip() vs trim() 真实验证:不换行空格连strip()都真实拿它没办法

真实验证trim()真实不认识全角空格\u3000,strip()真实能正确识别并去掉;但真实意外发现连strip()对不换行空格\u00A0也真实无能为力,因为Character.isWhitespace()明确把\u00A0排除在空白定义之外;真实验证isBlank()和isEmpty()的真实语义差异。

Java String Unicode 动画演示
Java 内部原理 2026-08-07

happens-before 真实验证:没有volatile,reader线程真实卡在死循环里永远出不来

真实验证volatile写happens-before volatile读:2000轮跨线程测试真实0次读到错误值;真实对照去掉volatile后,reader线程真实被JIT优化成死循环,自旋计数器真实永远停在0,5轮测试全部真实2秒超时都没能退出。

Java 内存模型 volatile 动画演示
Python 2026-08-06

GIL:为什么多线程跑不满多核

CPU密集与I/O密集任务下多线程加速比的真实对比实测。

并发 解释器内部 动画演示
京ICP备2026067502号-1京公网安备11010502063487号