Java 后端技术进阶:IO、并发、数据库与缓存
大约 3 分钟技术进阶Java并发MySQLRedis
技术进阶常常发生在一个概念解释不了现场的时候:读文件为什么只读到一部分?线程池里的用户信息为什么串了?同一个事务中,两条查询为什么看到不同的行?这里从这些具体问题展开,连接 API 契约、内部机制和工程中的失败场景。
Java 示例以 JDK 21 为基线;涉及预览特性、后续版本变化和实现细节的地方单独说明。MySQL 以 InnoDB 8.0 / 8.4、Redis 以 7 / 8 为主,数据库会话示意与实际运行结果分别标注。
IO 与 NIO
先理解字节与字符的转换,再看 Buffer 的状态、Channel 的部分读写和 Selector 的就绪通知。它们共同解释了网络框架为什么需要维护连接状态。
| 文章 | 要解释的问题 |
|---|---|
| Java IO:字节、字符与资源管理 | UTF-8 字符被拆在两次读取中,怎样正确解码? |
| Buffer 与 Channel:状态与部分读写 | flip、clear 与 compact 改变了什么? |
| Selector:就绪事件与连接生命周期 | 为什么一直注册 OP_WRITE 会让 CPU 空转? |
| FileChannel:复制、映射与零拷贝边界 | transferTo 返回了,为什么文件仍没传完? |
并发工具与 JDK 演进
从互斥、等待和唤醒理解同步器,再讨论线程池上下文、异步任务与虚拟线程。高并发的目标是把有限资源安排清楚。
| 文章 | 分析重点 |
|---|---|
| AQS 与 ReentrantLock | state、竞争队列、Condition 与公平性 |
| ThreadLocal 与线程池复用 | 线程持有的值、请求串扰与 finally 清理 |
| CompletableFuture 的组合与失败传播 | 执行器、异常链与超时后的底层任务 |
| Java 21 虚拟线程 | 阻塞等待、下游容量与 pinning 版本差异 |
| JDK 17 到 21 | 正式特性、预览特性与迁移检查 |
结合线程池过载、JMM 选读和接口方法版本差异,可以把语言规则与运行时机制连起来。
MySQL:可见性、锁与恢复
查询结果取决于事务隔离、访问路径和执行时刻。先区分快照读与当前读,再沿索引观察锁范围,最后看提交与崩溃恢复。
前置阅读:MySQL 知识梳理 · 索引结构选读 · Spring 事务边界。
Redis:复制、持久化与高可用
复制、落盘和故障切换各自解决一部分问题。分析数据风险时,需要同时考虑客户端收到成功的时刻、复制进度、磁盘状态与新主选择。
继续阅读:Redis 知识梳理 · 缓存一致性与失败补偿。
源码与配套阅读
后端工程阅读包汇集本栏文章和配套 Java 小例子。项目级实现见Java 与 AI 项目解析,完整知识目录见进阶之路。发现版本差异或解释问题,可以按引用与纠错说明反馈。
