1168 字
约 3 分钟
3
S04-X03 · 技巧、错误总结与片段登记(附录)

适用读者:想核对"那些零散旧文去哪了"的读者 / 本系列维护者。
性质:登记表,不重复讲知识。表内每篇旧文给出归宿、理由与它唯一值得保留的结论。
覆盖旧文:4429(正则)、2766/3010(日志与调试)、2767/3011(单元测试)、2768/3012(设计模式)、2772(互联网技术关键词大全)→ 9 篇。


1. 处置口径

处置 含义
appendix 有价值但不独立成文,登记去向
duplicate_ref 与补编某篇同题重复(3010/3011/3012 是 2766/2767/2768 的另一份导出)
non_knowledge 纯清单/词表,无讲解主线

2. 登记表

旧文 主题 处置 归宿 唯一值得保留的结论
4429 正则表达式 appendix 本文 §3.1 Java 正则灾难性回溯(ReDoS)可用 timeout/互斥必要,别把用户输入直接拼进模式
2766 日志与调试 appendix 本文 §3.2 日志要"结构化 + 级别正确 + 不打印敏感信息",System.out 不用于生产
3010 日志与调试(重复导出) duplicate_ref → 2766 — 内容同 2766
2767 单元测试 appendix 本文 §3.3 测试要"快、独立、确定";JUnit 5 的参数化与断言是主力(S06 详讲)
3011 单元测试(重复导出) duplicate_ref → 2767 — 内容同 2767
2768 设计模式 appendix 本文 §3.4 模式要按"变化点"选,不是按名字堆;Java 里多数创建型模式已被 DI 容器吸收
3012 设计模式(重复导出) duplicate_ref → 2768 — 内容同 2768
2772 互联网技术关键词大全(433 字符) non_knowledge — 词表,无讲解主线;术语解释统一在 terms-index.md

3. 四条上升结论

3.1 正则:ReDoS 与超时

Pattern p = Pattern.compile("^(a+)+$");       // ❌ 嵌套量词 → 指数级回溯
p.matcher("aaaaaaaaaaaaaaaaaaaaaaaaaab").matches();   // 灾难性回溯(可挂死线程)
风险 处理
ReDoS 避免嵌套量词、用占有量词 a++/原子组、限制输入长度
挂死 在独立线程 + 超时;或改用线性匹配算法(如 RE2 风格库)
可读性 复杂正则加注释/分段拼接,别一行写完

3.2 日志:三档级别与三不要

log.debug("cache hit key={}", key);     // 占位符,避免字符串拼接开销
log.error("db failed", e);              // 异常必须带栈
准则 说明
级别语义 ERROR=需人介入;WARN=可自愈但异常;INFO=关键业务节点;DEBUG=排障细节
三不要 不打印密码/令牌/身份证;不 catch 后只 printStackTrace;不在循环里打 INFO
上下文 带上 traceId/userId(MDC),否则日志无法串联

3.3 单元测试:FIRST 原则

Fast      毫秒级,不碰网络/DB(用 mock 或测试容器)
Independent 无顺序依赖
Repeatable 无随机/时间依赖(用 Clock 注入)
Self-validating 断言明确,不靠人看输出
Timely    与实现同步写

JUnit 5 要点:@Test/@ParameterizedTest + @DisplayName;assertAll 聚合断言;@Nested 组织场景;断言库优先 AssertJ(可读性)。

3.4 设计模式:按变化点选

变化点 模式 现代替代
对象创建复杂 工厂/建造者 DI 容器 + Builder(Lombok @Builder)
算法可替换 策略 函数式接口 + Map 注册表
跨层通知 观察者 事件总线 / Spring ApplicationEvent
接口不兼容 适配器 包装类 + 函数式转换
责任链 责任链 Filter/Interceptor 链

判据:先找"变化点",再选模式;把 23 个模式背下来当答案,是典型的"名词驱动设计"。


4. 缺口

项 状态
日志框架选型(SLF4J + Logback vs Log4j2) 在 S06(工程化) 详讲,此处只登记
单元测试与集成测试边界 S06 主讲
设计模式 23 种完整清单 S08 主讲;本文只给"按变化点选"的索引

5. 下一篇

S04 系列验收(v2) —— 24 篇 / 三万七千余点位 / 五项判据核对 / 下一系列(P6:S11 MySQL 70 篇)前置依赖。


本篇属于系列《S04 · Java 语言核心》。旧文来源:A-4429、A-2766–2768、A-2772 及重复导出;扩展点 —(登记表)。


上一篇:S04-A03 · Java 8/17/21 新特性与团队基线补编

S04-X03 · 技巧、错误总结与片段登记(附录)
https://www.clxhxhhr.top/posts/5241/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。