把 zip 当作 Path 访问:创建时磁盘只有 22 字节的空 zip、close 后 743 字节;往 50 MB 的 zip 加一个条目 close 耗时 53 ms 并换成新文件;releaseVersion 让同一路径读到多版本 jar 里不同版本的类;jar: URI 重复打开抛 FileSystemAlreadyExistsException。
真实验证 direct buffer:内存不在堆里、要等 GC 的 Cleaner 释放;allocateDirect 比堆分配贵(1 MB:45249 ns 对 21712 ns)而复用几乎免费;Netty 池化 16 KB 每次 52 ns 对 JDK 的 1640 ns;MaxDirectMemorySize=64m 且 DisableExplicitGC 时,丢弃的 buffer 也会在第 65 个 OOM。
本机真实测量 TLS 会话复用:完整握手 TLS 1.3 4.9 ms / TLS 1.2 4.4 ms,复用后 1.4 / 0.5 ms;TLS 1.3 每次发新票据(session id 不同)而 TLS 1.2 的 id 不变;按 主机名:端口 缓存;默认启用票据时服务器的会话超时与缓存大小不起作用,关闭票据后才生效。
真实验证 ALPN:JDK 服务器按自己的协议列表顺序挑选;没有交集抛 no_application_protocol,一方没设置则握手成功且协议为空字符串;selector 返回 null 失败、返回空字符串不使用 ALPN;用真实的 nginx、openssl、curl 与 Java HttpClient 验证 h2 与 http/1.1 的协商和回落。
真实验证双向 TLS:need/want/none 与客户端证书的各种组合,TLS 1.3 下没有证书时 startHandshake 先返回、第一次读写才失败;不被信任的客户端证书根本不会被发送;客户端有多个身份时按服务器给出的 CA 列表选;并用 nginx 的 ssl_verify_client on/optional、curl、openssl 对照。
真实验证 TCP 半关闭:shutdownOutput 之后仍可读而再写抛异常;用 lsof 看到 FIN_WAIT_2 与 CLOSE_WAIT;直接 close 会丢响应(Broken pipe);SocketChannel 里对端半关闭表现为 OP_READ 就绪且读到 -1,不处理会空转;SO_LINGER 0 的 close 发 RST,对端第 2 次读 Connection reset。
真实验证 Java 网络超时的几种含义:连接超时(没有回应)与端口无人监听的立刻拒绝;SO_TIMEOUT 管的是每次 read,滴水的服务器 4 s 都不会触发 500 ms 的读超时;HttpRequest.timeout 只管到响应头;整体截止时间要用 orTimeout 或自己维护;Future.get 超时不取消任务。
用 jSerialComm 在伪终端(pty)上演示串口协议的常见问题:一个 45 字节的帧被分成 12, 12, 12, 9 几次读到;带 CRC 与重同步的解析器丢掉 21 字节噪声;三种读超时模式的差别;请求超时重试时用序号丢弃迟到的旧响应。没有接真实的串口硬件。
用 keytool 建一棵真实的证书树并用 CertPathValidator 验证:缺中间证书、顺序、信任锚;有效期必须覆盖整条链;pathlen、keyUsage、basicConstraints 违规各自的失败原因(getReason 与链下标);撤销检查默认开启、没有撤销信息时 SOFT_FAIL 也不放行。
用 JDK 的 AES-GCM 验证 nonce 重用的危害:任何输入被改都抛 AEADBadTagException;同一个 Cipher 对象会拦住 IV 重用但不同对象拦不住;同一密钥与 IV 加密两条消息密文 XOR 等于明文 XOR;随机 32 位 nonce 发 65536 条的碰撞率 39.3% 与生日公式吻合;GCM 解密不会提前释放明文。
用 KeyAgreement 验证:X25519 / P-256 / P-384 的密钥与共享秘密大小;X25519 120 μs 对 P-256 590 μs;不在曲线上与小阶点的公钥被拒绝;用自己实现并通过 RFC 5869 向量的 HKDF 派生密钥;无认证 DH 被中间人替换公钥,加签名后能发现。
用 JDK 真实运行 HMAC 与数字签名:验证方持有 HMAC 密钥就能伪造任意消息;Ed25519、ECDSA、RSA 的签名大小与确定性;验证失败是 false 还是 SignatureException;HMAC 1.8 μs、Ed25519 验证 420.7 μs、RSA-2048 验证 34.1 μs。