在开发过程中 很多时候会遇到一些很低端的错误 为了避免这些错误 通过定制规则来减少错误
开发相关
- 循环次数设置上限 避免使用递归 方式代码失控
- 字符串比较 最好用已知的固定的去比较不确定的- result.getString("error_code").equals("gw.TimestampExpired")
- "gw.TimestampExpired".equals(result.getString("error_code"))
- 上述两种方法 第一种可能会产生空指针错误 而第二种则不会
 
断言相关
- 断言用于检查程序运行中本不应该出现的的异常情况 断言密度因保持在每个函数至少2个断言的另一个重要之处在于,它是防御性编程(Defensive Coding)策略的重要组成部分。我们可以使用断言验证函数执行前后的状况,函数的执行参数和返回值,以及循环不变式(Loop-Invariant)。在完成性能关键代码的测试工作后,可将断言选择性地禁用。 
网络请求
- 所有网络请求必须有超时时间设定 防止长时间请求占用资源
线程相关
- 需要大量线程操作的地方必须使用线程池 线程的创建和销毁很消耗资源
数据库相关
- [强制]所有表必须添加的字段- id不得表示任何业务逻辑
- gmt_create创建时间 类型为- TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL- 1 - ALTER TABLE `table` ADD gmt_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间'; 
- gmt_modified修改/更新时间 类型为- TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL- 1 - ALTER TABLE `table` ADD gmt_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '修改时间'; 
- is_deleted软删除标记(1:已删除, 0:未删除) 类型为- TINYINT(1) UNSIGNED DEFAULT 0 NOT NULL- 1 - ALTER TABLE `table` ADD is_deleted TINYINT DEFAULT 0 NOT NULL COMMENT '软删除标记'; 
- 统一字段添加SQL1 
 2
 3
 4ALTER TABLE `table` 
 ADD COLUMN `gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 ADD COLUMN `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' AFTER `gmt_create`,
 ADD COLUMN `is_deleted` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '软删除标记' AFTER `gmt_modified`;
 
- [强制]表达Boolean的类型 必须用 is_xxx命名 数据类型都是tinyint(1) UNSIGNED NOT NULL(1:True, 0:False)
- [强制]小数类型请使用 decimal禁止使用float和double
- [强制]不要使用 count(xxx)或count(1)之类来替代count(*)因为count(*)就是SQL92定义的标准统计行数的语法 跟数据库无关 跟NULL无关
- [推荐]状态设计 必须使用数字 在程序使用枚举转换 数据库禁止使用字符串 (性能考虑) 为了防止修改需求插入状态 可以预先设计状态为 3 6 9等
- [推荐]把 IP地址存成UNSIGNED INT尤其是当 你需要使用这样的WHERE条件IP BETWEEN ip1 AND ip2我们必需要使用UNSIGNED INT因为 IP地址会使用整个32位的无符号整形- 你可以使用 INET_ATON()来把一个字符串IP转成一个整形 并使用INET_NTOA()把一个整形转成一个字符串IP
 
- 你可以使用