《Java 编程实战》目录

《Java 编程实战》全书导航页:说明从卷一 CLI 到 libraryd 服务的升级路线、读者画像与前置知识,给出六周实战路径与四类读者的入口建议,并按六个部分列出 16 章 48 节的完整索引,另附序、前言、附录 A–D,每节配一句话定位与项目状态说明。

《Java 编程实战》目录

这一页是全书的总入口。它列出 16 章 48 节,也给出三条可以照着走的阅读路径。如果你不确定自己该从哪一章开始,先读下面的「读者画像与前置知识」,再对照「学习路径」选一条;如果你已经有明确目标,直接跳到「分部分章节」按编号定位。

全书结构是:前置 3 篇 + 正文 16 章 48 节 + 附录 4 篇,共 55 篇。正文按工程推进顺序分为六个部分,每一部分对应 libraryd 的一个真实阶段。

这本书解决什么问题

《Java 编程入门》结束在一个能跑的命令行程序上:内存仓储、六个 CLI 命令、JUnit 测试、可执行 jar。它能演示规则,但离开你的终端就活不了——数据重启即丢,没有并发访问,没有部署形态,也没有可观测性。

《Java 编程实战》要做的事情只有一件:把这个程序变成一个能部署、能被别人调用、出问题能查的服务。

具体拆开,是六个问题:

  1. 代码量上来后,单模块怎么拆,依赖怎么管,构建怎么可复现。
  2. 数据从内存搬到 PostgreSQL,JDBC、连接池、索引、事务、并发控制分别怎么用。
  3. 对外暴露 HTTP 接口时,路由、DTO、参数校验、错误契约怎么设计。
  4. 请求变多后,线程池、虚拟线程、异步编排、定时任务怎么组织。
  5. 线上出问题时,日志、指标、追踪、健康检查怎么提供证据。
  6. 发布时,缓存、集成测试、镜像、回滚怎么形成闭环。

这六个问题不是并列的知识点,而是一条有先后依赖的工程路线。书里的顺序就是推荐的实施顺序。

读者画像与前置知识

这本书默认你已经读完卷一,或者具备同等能力。具体来说:

  • 能用 javac 和 mvn 编译、测试、打包一个 Java 项目。
  • 熟悉类、接口、record、enum、集合、泛型、Lambda、Stream、异常与 JUnit 5。
  • 知道 pom.xml 里的依赖、作用域和生命周期,但不一定管过多模块项目。
  • 写过一些 SQL,知道 select、join、where,但没有系统处理过事务和索引。

如果上面有一条明显不成立,建议先回卷一补对应章节:语法问题看第 4–12 章,测试看第 16 章,Maven 看第 17 章。卷二的代码默认你能读懂 record 和 Stream,不会再解释基础语法。

四类读者的入口不同:

第一类:刚读完卷一,想按顺序做项目。 从第 1 章开始,一章不跳。每章的代码都建立在前一章的工程上,跳章会遇到「这个类上一章才出现」的问题。

第二类:会 Java,但没做过服务端。 第 1–2 章可以快速过,第 3–8 章细读,这是从单机程序到 Web 服务最陡的一段。第 9 章之后按需选读。

第三类:做过 Spring Boot,想理解框架替你做了什么。 重点读第 1、3、5、7、8、13 章,对照附录 D 的概念映射表。你不需要重新学一遍 JDBC,但需要看清事务边界、错误映射和可观测性在没有框架时是什么样子。

第四类:只查某个问题。 直接看「分部分章节」。每节末尾有小结和前后导航,跳读不会丢上下文;但涉及 schema 和领域模型的章节(3、4、5、6 章)建议按顺序读。

学习路径

路径一:完整实战(推荐,约 6 周)

周内容交付物
第 1 周第 1–2 章五模块工程能 mvn package,质量门禁能跑
第 2 周第 3–4 章PostgreSQL 接上,图书与借阅能落库,查询有索引
第 3 周第 5–6 章借阅、归还、续借在事务里正确执行,JSON 契约稳定
第 4 周第 7–8 章libraryd 能对外提供图书、借阅、归还、续借的完整 HTTP 接口,错误格式统一
第 5 周第 9–11 章并发、异步与定时任务有明确边界
第 6 周第 12–16 章日志、指标、追踪、缓存、集成测试、镜像与发布闭环

每周投入 8–12 小时。第 5 周和第 6 周内容密度最高,时间不够可以各拉长一周,但不建议跳过第 15 章的集成测试。

路径二:服务端速成(约 3 周)

第 1 章只读模块拆分与依赖治理两节,第 2 章跳过,第 3–8 章按顺序读,第 9–11 章只读虚拟线程和定时任务,第 12–13 章读日志与指标,第 15–16 章读 Testcontainers 与容器化。适合需要在两三周内接手一个 Java 服务的人。

路径三:按问题查(按需)

  • 多模块 POM 越写越乱 → 1.1、1.2。
  • 连接池耗尽或连接泄漏 → 3.2、附录 C。
  • 查询慢、索引不生效 → 4.2。
  • 两个人同时借同一本书 → 5.3。
  • 接口错误格式不统一 → 8.2、8.3。
  • 线程池打满、任务堆积 → 9.1、9.3。
  • 线上只有日志没有指标 → 12.2、13.1、13.2。
  • 发布后不敢回滚 → 16.3。

六个部分之间的依赖关系

第一部分 工程基座(1–2)
      ↓
第二部分 数据访问(3–6)
      ↓
第三部分 HTTP 服务(7–8)
      ↓
第四部分 并发与异步(9–11)
      ↓
第五部分 可观测性与缓存(12–14)
      ↓
第六部分 测试与交付(15–16)

第 3 章的仓储实现依赖第 1 章的模块边界;第 5 章的事务依赖第 3 章的连接池;第 7 章的路由依赖第 6 章的 DTO;第 13 章的指标依赖第 7 章的中间件;第 15 章的集成测试依赖前面全部章节。可以跳读,但不要跳依赖。

与卷一、Spring Boot 卷的分工

三套书解决三个不同阶段的问题:

书起点终点不写什么
《Java 编程入门》没写过 Java能测试、能打包的 CLI数据库、HTTP 框架、并发
《Java 编程实战》(本书)会 Java 与 Maven可部署的 libraryd 服务JVM 内部机制、GC 调优
《Spring Boot》三部曲会 Java 基础用 Spring 生态交付服务不用框架时的手工装配

本书刻意不用 Spring。原因不是 Spring 不好,而是如果一上来就用 @Transactional、@Valid、Actuator,你会知道「怎么配置」,但不知道「框架在哪个位置替你做了事」。本书先把这些位置手工实现一遍:事务边界、参数校验、错误映射、健康检查、指标端点。读完再对照附录 D 的映射表看 Spring Boot,你会更容易判断哪些是框架能力、哪些是业务约束。

版本与示例约定

  • 主线 JDK 25 LTS(Temurin 25.0.5),Maven 3.9.12,PostgreSQL 17。
  • Web 层用 Javalin 7.2.4,JSON 用 Jackson 2.22.4;测试用 JUnit 5.14.4 与 Testcontainers 1.21.4。
  • 所有依赖版本在父 POM 统一锁定,子模块不写版本;具体清单见附录 B。
  • 代码块标语言:java、sql、bash、text、xml、yaml、json、dockerfile。
  • 输出与代码分离:Java 代码之后的 text 块是真实输出;没有实际运行的内容会标注「示意」。
  • 不写未验证的性能数字。涉及性能的地方给出可复现命令,结论留给读者在自己的机器上验证。
  • 数据库实验用容器:postgres:17-alpine,连接参数在每节开头给出。

分部分章节

第一部分:工程基座(第 1–2 章)

节标题一句话说明
1.1从单模块到多模块五个模块的边界怎么划,依赖方向怎么定
1.2依赖治理BOM、作用域、冲突调解与 Enforcer
1.3可复现构建插件锁定、时间戳与可重复打包
2.1编译告警把 -Xlint 从建议变成门禁
2.2静态分析Checkstyle 与 SpotBugs 的规则取舍
2.3质量门禁JaCoCo 覆盖率与 CI 流水线

第二部分:数据访问(第 3–6 章)

节标题一句话说明
3.1JDBC 基础Connection、PreparedStatement 与结果集
3.2HikariCP连接池参数、泄漏排查与监控
3.3数据访问层把 SQL 装进 Repository
4.1表设计约束、范式与 libraryd 的 schema
4.2索引与执行计划读懂 EXPLAIN,判断索引是否生效
4.3分页、批量写与 N+1列表接口最常见的三类性能问题
5.1JDBC 事务提交、回滚与事务边界
5.2隔离级别与 MVCCPostgreSQL 在每种隔离级别下的真实行为
5.3并发控制唯一索引、条件更新与幂等
6.1Jackson 基础绑定、命名策略与日期序列化
6.2DTO 设计请求、响应与领域对象的边界
6.3序列化边界多态、循环引用与 JSONB

第三部分:HTTP 服务(第 7–8 章)

节标题一句话说明
7.1Javalin 起步路由、路径参数与 JSON 响应
7.2中间件请求 ID、访问日志与错误处理
7.3优雅停机停止接收、排空请求、释放资源
8.1参数校验Jakarta Validation 与手写规则的边界
8.2错误契约RFC 9457 Problem Details 的字段设计
8.3异常映射从领域错误到 HTTP 状态码

第四部分:并发与异步(第 9–11 章)

节标题一句话说明
9.1ExecutorService线程池参数、队列与饱和
9.2虚拟线程在 libraryd 里替换平台线程
9.3背压与拒绝策略让过载可见,而不是悄悄排队
10.1CompletableFuture组合、异常与超时
10.2异步编排并行查询与结果合并
10.3异步边界阻塞、上下文与可观测性
11.1ScheduledExecutorService周期任务、时钟与关闭
11.2批处理游标、分片与罚金结算
11.3任务幂等重复执行不出错

第五部分:可观测性与缓存(第 12–14 章)

节标题一句话说明
12.1SLF4J 与 Logback级别、Appender 与配置分层
12.2结构化日志JSON、MDC 与请求上下文
12.3日志规范脱敏、采样与存储成本
13.1Micrometer计数器、计时器与 Prometheus
13.2追踪OpenTelemetry 与 W3C traceparent
13.3健康检查依赖探测与就绪/存活
14.1本地缓存Caffeine 与失效策略
14.2缓存模式Cache-Aside、穿透与雪崩
14.3分布式缓存Redis 与一致性取舍

第六部分:测试与交付(第 15–16 章)

节标题一句话说明
15.1测试金字塔单元、集成与端到端的分工
15.2Testcontainers用真实 PostgreSQL 做集成测试
15.3端到端与 CI把服务跑起来验证
16.1打包fat jar、jlink 与运行时镜像
16.2容器化多阶段 Dockerfile 与 Jib
16.3发布与回滚配置、迁移与灰度

前置与附录

篇内容
序从「能运行」到「能上线」缺的是什么
前言本书的写法、约定与验证方式
附录 A多模块 POM 与常用插件配置模板
附录 BJDBC、HTTP、JSON、日志、测试、缓存的选型对比
附录 C端口、连接池、Flyway、容器与测试排错
附录 D与《Spring Boot》三部曲的概念映射

学习本书的三个提醒

  1. 每节代码至少跑一遍。 第 3 章之后几乎每节都依赖数据库或容器,跳过运行会让「看起来懂了」和「能排错」之间的差距越来越大。
  2. 先写测试再改规则。 借阅、归还、续借的规则跨了五章,没有测试保护时,一处改动很容易破坏前面的行为。
  3. 不要同时引入所有能力。 第 9–14 章的线程池、异步、缓存、指标,每一项都有适用边界;先把一件事做对,再叠加下一件。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「java」更多文章

  1. 《Netty 高性能网络编程》15.3 linkd-v2 验收与复盘
  2. 《Netty 高性能网络编程》15.2 限流、超时与降级
  3. 《Netty 高性能网络编程》15.1 网关路由与转发