适用读者:已经能独立开发(B01–B11 已读),需要"选哪个库/工具"时来查表的人。
定位:速查型附录,可跳读。本系列不在此展开原理——每类都给出主讲系列的入口。
前置:S01-B01–B11(术语已通)。
覆盖旧文:19 张卡共 1899 个点位(明细见下表),其中 10 张原属 C09「原专题补充与待复核」。
新增扩展:E-S01-034(JSON 库选型与 fastjson 历史漏洞)。
上一篇:S01-B11 · Git 托管与网络可达性:GitHub / Gitee / Gitcode
下一篇:S01-J01 · Git 内部模型(进入进阶层)。
标注约定:「待核」= 该说法依赖当前版本,未在本次点验;版本号不写死,写了就标来源。
1. 怎么用这篇
| 你的问题 | 跳到 |
|---|---|
| JSON 用哪个? | §2.1 |
| 日志用什么?要不要门面? | §2.4 |
| 单元测试框架怎么选? | §4.1 |
| 数据库客户端装哪个? | §3.3 |
| 接口文档/调试工具 | §3.1、§3.2 |
| 那些"AI 编码客户端""NAS""开发机"是什么定位 | §5、§6 |
| 该看哪个后续系列 | §7 |
2. 库与框架(跨系列主讲)
2.1 JSON 解析:三个主流 + 一个历史包袱
| 库 | 定位 | 用它的理由 | 不用的理由 | 主讲 |
|---|---|---|---|---|
| Jackson | Spring 生态默认 | 与 Spring Boot 零摩擦;功能全(树模型、注解、多态) | API 略啰嗦;大对象性能需调优 | S06 |
| Gson | 轻量、API 简单 | 依赖极少,脚本/工具类项目够用 | 对 Kotlin/record/泛型复杂场景不如 Jackson | S06 |
| fastjson2 | 高性能国产库 | 极致序列化性能场景 | 生态绑定较浅;与 Spring 默认栈不统一 | S06 |
| ~~fastjson 1.x~~ | 历史包袱 | — | 已有多起反序列化漏洞,且 1.x 不再演进 | S06(安全章节) |
判据:
- 项目里已经有 Spring Boot → 直接用 Jackson(它已经在依赖树里,多引一个只是增加冲突面)。
- 独立小工具、只要"能转" → Gson。
- 有明确性能瓶颈且已测量过 → 再考虑 fastjson2。
E-S01-034 的核心结论:fastjson 1.x 的历史漏洞(自动类型
autoType绕过导致远程代码执行)不是"配置一下就好"的问题,而是默认不安全的设计。旧文 A-1787 把它作为"阿里巴巴开源的 JSON 解析库"推荐,缺少版本与安全提示——本篇按"仅历史参考"处理,主讲与安全细节移交 S06。
待核:fastjson 1.x 当前是否仍在维护、fastjson2 的最新稳定版本号。
2.2 HTTP 客户端:Forest(声明式)
| 项 | 说明 |
|---|---|
| 定位 | 用接口 + 注解发 HTTP 请求(类似 Feign 的独立版) |
| 适合 | 中小项目不想引入 OpenFeign/Spring Cloud 时 |
| 不适合 | 已在 Spring Cloud 体系内(直接用 Feign/WebClient) |
| 主讲 | S17(微服务与分布式) |
2.3 单元测试
| 框架 | 版本线 | 说明 |
|---|---|---|
| JUnit 5(Jupiter) | 5.x | 当前主选:@Test、参数化、扩展模型 |
| JUnit 4 | 4.13.x | 存量项目仍大量存在;JUnit 5 通过 vintage 引擎兼容运行 |
| TestNG | 6/7 | 测试分组与依赖编排更强,企业存量项目可见 |
判据:新项目 JUnit 5 + AssertJ;老项目别急着迁移,先看构建配置(Surefire 版本决定能不能跑 5)。主讲:S16。
2.4 日志:门面 + 实现,别混用
你的代码 ──► SLF4J(门面/API) ──► Logback / Log4j2(实现)
| 组件 | 角色 | 现状 | 判据 |
|---|---|---|---|
| SLF4J | 门面(API) | 2.x 用 ServiceLoader 找实现(不再需要 StaticLoggerBinder) |
代码里只写 SLF4J,永不直接依赖实现类 |
| Logback | 实现 | Spring Boot 默认 | 绝大多数项目用它就够 |
| Log4j2 | 实现 | 高性能异步日志 | 高吞吐场景;注意 2021 年 Log4Shell 事件后的版本基线 |
| Log4j 1.x | 历史实现 | 已 EOL(2015 年停止维护) | 不要新用;存量项目应迁移 |
关键区分(旧文没讲透):slf4j-api 是"接口",logback-classic / log4j-slf4j2-impl 是"实现"。只引 API 不引实现 → 启动报 No SLF4J providers were found;同时引两个实现 → 行为不确定。
主讲:S06(依赖治理那节会讲冲突排查)。
3. 工具
3.1 接口文档 / 调试
| 工具 | 定位 | 判据 |
|---|---|---|
| Knife4j | 基于 OpenAPI/Swagger 的增强 UI(国内常用) | Spring Boot 3 项目需用适配 Spring Boot 3 的版本(待核具体版本线) |
| Swagger UI | 官方 UI | 只用官方栈时 |
| 内置 HTTP Client(IDEA) | 写 .http 文件直接发请求 |
已在 IDEA 里,零安装 |
主讲:S07(Spring 框架)。
3.2 数据库设计 / 客户端
| 工具 | 定位 | 判据 |
|---|---|---|
| DBeaver(Community) | 通用数据库客户端,支持 MySQL/PG/Oracle… | 免费、跨平台、驱动齐全 → 首选 |
| chiner | 国产数据库建模(ER 设计) | 需要画模型/生成 DDL 时;团队是否统一工具要看协作成本 |
| Navicat | 商业客户端 | 公司采购才用;个人破解版在商业环境属许可风险 |
| IDEA Database 面板 | IDE 内置(Ultimate) | 已用 Ultimate 的话,省一个客户端 |
主讲:S11(数据库与 SQL)、S16。
3.3 一张"装什么"的最小清单
| 需求 | 装 |
|---|---|
| 看/改数据 | DBeaver Community |
| 画 ER 图、导 DDL | chiner(或 DBeaver 的 ER 图,够用就别装两个) |
| 调接口 | IDEA 内置 HTTP Client |
| 看 JSON | IDE 内置格式化(Ctrl+Alt+L)即可,不必装插件 |
4. 旧文 19 张卡的去向(一张总表)
| 旧卡 | 主题 | 本系列处理 | 主讲系列 |
|---|---|---|---|
| A-1787 | fastjson | §2.1 标注"仅历史参考" + 漏洞提示 | S06 |
| A-1789 | Gson | §2.1 | S06 |
| A-1790 | Jackson | §2.1(Spring 默认首选) | S06 |
| A-1793 | Log4j 1.x | §2.4 标注 EOL | S06 |
| A-1794 | Log4j2 | §2.4 | S06 |
| A-1795 | Logback | §2.4 | S06 |
| A-1797 | SLF4J | §2.4(门面 vs 实现) | S06 |
| A-1788 | Forest | §2.2 | S17 |
| A-1791 | JUnit | §2.3 | S16 |
| A-1784 | chiner | §3.2 | S11 |
| A-1786 | DBeaver | §3.2 | S11/S16 |
| A-1792 | Knife4j | §3.1 | S07 |
| A-1796 | 其他辅助工具/轮子 | §3.3 最小清单 | — |
| A-1600 | 并发编程小册(书目介绍) | 仅登记:书目信息,非技术内容 | S05(技术内容另建) |
| A-1404 | MacBook Pro(开发机选购) | §6 | — |
| A-1405 | NAS(自建存储) | §6 | — |
| A-1406 / A-1407 / A-1408 | WaLiCode / Trae / JoyCode(AI 编码客户端) | §5 | S24 |
5. AI 编码客户端速查(A-1406/1407/1408)
旧文三篇是"新工具介绍"型内容,共性大于差异。判据不看功能列表,看三件事:
| 判断项 | 为什么重要 |
|---|---|
| 上下文范围:只能看当前文件,还是能读整个仓库? | 决定它能否做跨文件修改 |
| 执行能力:只给建议,还是能跑命令/改文件? | 决定风险边界(能改文件的必须可 diff 可回滚) |
| 数据去向:代码是否上传、是否用于训练? | 公司项目的第一道红线 |
共同结论:这类客户端在演进,任何具体功能描述都会在半年内过期。所以本篇不做功能对比,只在 S24 讲"如何评估一个新客户端"(评测清单 + 安全边界)。待核:三款产品当前的授权与数据条款。
6. 开发机与外设(A-1404/1405)
| 项 | 结论 | 说明 |
|---|---|---|
| 开发机(MacBook 等) | 内存 ≥ 32 GB、SSD ≥ 1 TB 是"能用四年"的门槛 | IDE + Docker + 多个 JDK 同时跑,16 GB 会频繁换页 |
| NAS | 与开发主线的交集是"备份与制品存储" | 若用于团队共享,注意它替代不了版本控制与制品库(S01-A02) |
这两张卡属消费决策而非技术知识,本系列只登记结论,不展开评测。
7. 跨系列出口(可点击的前置关系)
| 主题 | 本系列位置 | 下一站 |
|---|---|---|
| 依赖冲突与版本治理 | B03、J07 | S06、S01-J07 |
| JSON/日志实现细节 | §2 | S06 |
| 测试体系 | §2.3 | S16 |
| 数据库与 SQL | §3.2 | S11 |
| 接口文档与 Spring | §3.1 | S07 |
| 微服务与 HTTP 客户端 | §2.2 | S17 |
| AI 编码工具评估 | §5 | S24 |
这些出口不是"以后再写",而是在 S01 的 coverage.csv 里已登记
duplicate_ref,并指明目标系列——后续系列建目录时会反向认领,不会重复处理。
8. 旧文对照(本篇的取舍)
| 项 | 旧文 | 本篇 |
|---|---|---|
| 组织方式 | 一库一篇(19 篇),无横向比较 | 按"类别 + 判据"重组,同类横向对比 |
| 版本与安全 | 基本不提 | fastjson 1.x 标注历史包袱;Log4j 1.x 标注 EOL;SLF4J 门面/实现分离 |
| 选型 | "它很强大/星标很多" | 给"用 / 不用"判据 + 与生态默认值的关系 |
| 时效性 | 功能罗列,半年即过期 | 只保留稳定判断,功能细节标注待核并移交后续系列 |
9. 自测
- 项目已经是 Spring Boot,为什么不该再引入 Gson/fastjson?
No SLF4J providers were found说明什么?怎么修?- 为什么"代码里只写 SLF4J,不写 Logback 的类名"?
- 评估一个新的 AI 编码客户端,你会先问哪三个问题?
- 为什么 DBeaver 与 chiner 不必都装?
10. 下一篇
S01-J01 · Git 内部模型:快照、对象、引用与内容寻址
基础层到此结束。进阶层从 Git 的"内部"开始:为什么每次提交都存全量快照却几乎不占空间?.git/objects 里到底有什么?下一篇用手工 git cat-file 把 blob/tree/commit 拆开看一遍,并解释 reset --hard 之后对象为什么还能被 reflog 找回。
本篇属于系列《S01 · 开发环境与工具链》,是基础层的附录篇。旧文来源:A-1404/1405/1406/1407/1408/1600/1784/1786/1787/1788/1789/1790/1791/1792/1793/1794/1795/1796/1797;扩展点 E-S01-034。