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/ 评论
0 条
还没有评论,先写一条吧。