2735 字
约 9 分钟
4
S01-X02 · 工具与库速查:JSON、日志、测试、数据库、AI 编码客户端

适用读者:已经能独立开发(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(安全章节)

判据:

  1. 项目里已经有 Spring Boot → 直接用 Jackson(它已经在依赖树里,多引一个只是增加冲突面)。
  2. 独立小工具、只要"能转" → Gson。
  3. 有明确性能瓶颈且已测量过 → 再考虑 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. 自测

  1. 项目已经是 Spring Boot,为什么不该再引入 Gson/fastjson?
  2. No SLF4J providers were found 说明什么?怎么修?
  3. 为什么"代码里只写 SLF4J,不写 Logback 的类名"?
  4. 评估一个新的 AI 编码客户端,你会先问哪三个问题?
  5. 为什么 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。

S01-X02 · 工具与库速查:JSON、日志、测试、数据库、AI 编码客户端
https://www.clxhxhhr.top/posts/5181/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。