知其然,知其所以然
Django 2026-08-19

management command:谁在决定 manage.py 认识哪些命令

真实实测自定义命令顶替内置命令、同名命令胜出规则、@functools.cache 缓存行为。

管理命令 CLI 动画演示
Java 内部原理 2026-08-19

Collections.nCopies() 真实验证:三个位置真实是同一个对象,不是三份拷贝

真实验证Collections.nCopies(3, sharedObj)返回的List真实每个位置都是同一个对象引用;真实验证修改这个共享对象后,列表所有位置真实同步变化;真实验证nCopies()返回的List本身真实不可变,set()真实抛出UnsupportedOperationException。

Java Collections 陷阱 动画演示
Java 内部原理 2026-08-18

Files.walk() 真实验证:300次不关闭调用,文件描述符真实精确多出300个

真实用lsof统计进程真实打开的文件描述符数量,300轮不关闭的Files.walk()调用后,文件描述符数真实精确增加了300个,1:1对应每一次未关闭的调用;真实验证手动close()全部Stream后,文件描述符数真实恢复到循环开始前的水平。

Java NIO 资源泄漏 动画演示
Elasticsearch 2026-08-17

倒排索引是什么

从词项到文档列表的倒排索引结构与真实检索过程。

索引 搜索引擎 动画演示
Elasticsearch 2026-08-17

Elasticsearch 为什么是"近实时"

refresh/flush/translog 如何共同决定数据可见的延迟。

索引 刷新机制 动画演示
Java 内部原理 2026-08-17

文本块真实验证:最后一行的缩进真实决定了公共前导空白去除多少

真实验证文本块自动去除公共前导空白并保留相对缩进,去除的量真实由结束分隔符所在行的缩进决定;真实验证行尾空白默认被自动去除,但用\s转义真实能显式保留一个空格;真实验证用\能真实阻止插入换行符。

Java 文本块 语法 动画演示
Java 内部原理 2026-08-16

sealed class 真实验证:未在permits列表里的类真实编译不过

真实用sealed interface声明一个封闭接口,真实写一个没有出现在permits列表里的类去实现它,真实编译失败,错误信息真实是class is not allowed to extend sealed class;真实用反射验证isSealed()和getPermittedSubclasses()的真实结果和源码完全一致。

Java sealed 类型系统 动画演示
Java 内部原理 2026-08-15

Record 紧凑构造器真实验证:在构造器里修改参数,真实字段值也会跟着变

真实验证Record紧凑构造器能真实做参数校验,非法值真实抛出异常;真实验证在紧凑构造器里对参数变量重新赋值(把负数修正为0),这次修改真实会体现在最终的字段值上;真实验证反射看到的字段依然是final的,构造器签名和普通构造器没有区别。

Java Record 构造器 动画演示
Java 内部原理 2026-08-14

equals()里用getClass()还是instanceof真实验证:两种写法对子类相等性给出真实相反的答案

真实验证用instanceof写的equals(),父类实例和坐标相同的子类实例真实被判定为相等,且真实保持对称;真实验证用getClass()==写的equals(),即使坐标完全相同父类和子类实例真实永远不相等;真实复现instanceof版本在子类新增字段时真实容易打破对称性的经典陷阱。

Java equals 继承 动画演示
Java 内部原理 2026-08-13

compareTo与equals不一致真实验证:TreeSet真实把BigDecimal("2.0")和("2.00")当成同一个值

真实验证BigDecimal("1.0")和("1.00")的equals()真实认为不相等但compareTo()真实认为相等;真实验证HashSet真实把两者当成两个不同元素都存了进去,而TreeSet真实认为是同一个元素;真实验证TreeMap能用不同scale的key查到值,HashMap不能。

Java BigDecimal 集合 动画演示
Java 内部原理 2026-08-12

线程未捕获异常处理器真实验证:默认行为、自定义handler与全局兜底handler

真实验证子线程抛出未捕获异常后main线程真实不受影响;真实用setUncaughtExceptionHandler()注册的handler真实拦截到了异常线程名和消息;真实验证线程池里的任务异常必须通过Future.get()的ExecutionException才能真实拿到,直接submit不会打印堆栈。

Java 异常 线程 动画演示
Java 内部原理 2026-08-11

锯齿数组真实验证:Java的二维数组本质是数组的数组,每行可以不同长度

真实用new int[4][]创建二维数组,每一行真实分配不同长度的独立内层数组;真实验证new int[3][4]这种矩形写法本质上也是4个独立的内层数组对象;真实用锯齿数组实现杨辉三角,并真实计算出锯齿存储相比完整矩形能节省约50%的元素存储量。

Java 数组 数据结构 动画演示
京ICP备2026067502号-1京公网安备11010502063487号