Skip to content

2026-03-21 星期天

今日收获

回顾昨日情况

👌

Daily English Dictation 13 14

  • [Daily English Dictation 13](......\English Learning\Daily English Dictation\011-020\Dictation-013.md)
  • [Daily English Dictation 14](......\English Learning\Daily English Dictation\011-020\Dictation-014.md)

提交作业

  • 离散数学第一章: 做了一道比较难理解的证明题。关于 析取范式、合取范式、真值表 概念的证明题
  • 概率统计第 1 次作业:之前就做好了
  • 中教制作简历

算法题

  • 1143. 最长公共子序列 - 力扣(LeetCode)

框架了解

  • Swagger: API 文档自动生成 + 接口调试工具。现在的名字: SpringDoc
    • 主流的 API 接口管理方式:1. SpringDoc 2. Postman 3. Apifox

编码格式使用科普


数据库编码注意事项

  • utf8mb3:早期 MySQL 的 utf8 别名,阉割版 utf8 。每个字符最多占用 3 个字节。存储包括常用汉字、英文、数字等。

  • utf8mb4:(标准 utf8)每个字符最多占用 4 个字节。!包括 BMP 字符和补充字符(如 emoji、生僻字、甲骨文等)。

  • 优先选择 utf8mb4:现代应用(如社交、聊天、内容平台)常需存储 emoji 或特殊字符,utf8mb4 兼容性更好

  • 核心原则统一用 utf8mb4 + 显式配置(指定字符集) + 全链路一致

  • 在 JDBC 中配置数据库驱动时,指定的编码格式 characterEncoding=utf8传输编码,只是声明用 utf8 进行解码,与数据库原始编码格式无关,并且这里的 utf8 是标准编码,4 个字节。建议一一对应,utf8mb4 就是 utf8mb4。

  • utf8mb3 跟 utf8mb4 是 MySQL 独有的 (?)

  • 企业级开发的唯一通用选择是标准 UTF-8,禁止多编码混用。补充:有些为了数据安全,会对编码进行额外处理

  • 关联查询索引失效:两张表的关联字段排序规则不一致(一个utf8mb4_general_ci,一个utf8mb4_unicode_ci),会导致索引失效、查询性能暴跌,必须全库排序规则统一。

  • 数据迁移乱码:备份时未指定字符集,使用了默认的 latin1,导入后全量乱码且无法恢复,必须备份 / 导入双端显式指定utf8mb4


常见编码的边界与适用场景

编码格式字节长度核心能力企业级适用场景禁用场景
ASCII1 字节仅支持英文、数字、基础符号底层协议兼容任何中文 / 多语言场景
ISO-8859-1(Latin-1)1 字节兼容 ASCII,覆盖西欧字符HTTP 头、URL 协议底层、老系统兼容中文 / 多语言存储与传输
GB2312/GBK/GB180302-4 字节中文专属编码,GB18030 为国标强制标准仅对接强制要求 GBK 的老国企 / 政务系统所有新系统、新业务
UTF-8(标准)1-4 字节变长兼容 ASCII,覆盖完整 Unicode 字符集全链路强制默认编码
  • Windows 默认 GBK
  • Linux 默认 UTF-8
  • Tomcat 老版本默认 ISO-8859-1

经典乱码特征定位

  • 中文变成???:中文被 ISO-8859-1 编码,信息永久丢失,无法恢复。CPP
  • 中文变成å¼ ä¸‰类乱码:UTF-8 编码的字节被 GBK 解码,编码不匹配,可通过正确编码恢复。
  • 中文变成????????:MySQL 的 utf8mb3 存储了 4 字节字符,被截断丢弃。
  • 一个中文变成两个问号:GBK 编码的中文被 ISO-8859-1 解码,信息丢失。

换行符科普


换行符本质

换行符是控制文本换行的不可见控制字符,核心有两个基础字符:

  • CR(Carriage Return):ASCII 码 0x0D,转义表示 \r,本义是 “回车”(让光标回到行首)。return \r

  • LF(Line Feed):ASCII 码 0x0A,转义表示 \n,本义是 “换行”(让光标下移一行)。next line \n


不同操作系统的默认换行符(90% 跨系统问题的根源)

操作系统 / 环境默认换行符转义表示说明
WindowsCRLF\r\n继承自 DOS 系统,需同时用 CR+LF 实现 “回车 + 换行”。
Linux/macOS(OS X 10.0+)LF\nUnix 系系统统一使用 LF,简洁高效。
老版 macOS(OS 9 及以前)CR\r已淘汰,仅极老系统可能遇到。
HTTP 协议、邮件协议(SMTP/POP3)CRLF\r\n协议强制规范,必须使用 CRLF,否则会导致协议解析失败。

常见场景

  • Git 默认会根据操作系统自动转换换行符
  • 代码中硬编码换行符:跨平台运行异常
// 硬编码\r\n,仅Windows正常,Linux/macOS会显示多余的\r
String content = "第一行\r\n第二行";
  • 所有代码、配置、文档、日志文件统一使用 LF(\n) 作为换行符,禁止使用 CRLF 或 CR。

项目进度

  • commit × 3

异常处理规范

  • 一句话总结:Service 层主动 throw 业务异常,全局处理器被动 catch 所有异常,Controller 层什么都不管
  • Controller 层通过参数校验异常(Validation 等注解)自动抛出异常
  • Service 层做条件判断,主动抛出不同类型的异常(违反业务规则、数据状态异常、权限不足)
  • 其余统一自动拦截,基本属于全局异常
  • 企业常用:断言工具类,简化手动抛出

经验分享

明日期望

  • 复习课程知识点
  • 大创项目
  • 背 3 条面试题

记录学习,分享技术