《Java开发手册》-部分编码规范分享
0. 前言
本文来自《阿里巴巴Java开发手册》,以下内容均根据自己偏好摘抄、总结、分享。
1. 编程规约
- 包名单数,类名复数。例如:
com.tao.util.JsonUtils.java - 不要使用一个类来维护所有的常量,要根据功能进行分类。例如:
- 缓存常量类:
CacheConsts - 配置常量类:
ConfigConsts
- 缓存常量类:
Object的equals容易抛出空指针,推荐使用java.util.Objects#equals:public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
String#split会丢弃后面的空白。例如:"1,2,,," => ["1","2"]Collections#emptyList()/singletonList()都是不可变对象,不能添加删除元素。ArrayList中subList返回的内部类SubList,并不是ArrayList,而是ArrayList的一个视图,操作subList,ArrayList数据也会跟着变化。- 如果
if语句条件复杂,可以复制给一个变量。 - 批量操作接口入参需要进行保护,超过多少条不进行处理。
- 参数校验:
- 很少进行执行的,参数校验也不会耗费多少性能。
- 执行时间开销大的,执行时间长,尽可能保证别执行一半出错了。
- 需要稳定性高的,如银行系统,必须进行参数校验,不稳定,损失的都是真金白银。
- 对外提供的开放接口,不知道别人会给你传过来什么数据,脏数据不处理,你的系统就成垃圾场了。
- 权限敏感接口,参数校验失败,出现删库跑路。
2. 异常日志
- 细粒度处理异常,不要
catch一大段(catch一大段,你很难知道什么地方抛出了异常,从而很难进行正确的异常处理)。 - 可以使用
warn记录用户输入参数的错误情况,如非必要不要再此场景打出error级别,error只记录系统逻辑出错、异常等重要的错误信息。(比如用户数据参数错误,你给了"xxx 参数不正确"的返回,此场景不需要打error,用户能根据错误提示进行修正。)
3. 单元测试
- 对数据库的操作应该设置回滚操作,单元测试不应该污染数据库,且单元测试的数据应该使用单元测试的标识,方便区分。
4. 安全规约
- 用户请求传入的任何参数必须做有效的验证:
pageSize过大容易导致内存溢出。- 恶意使用
orderBy导致慢查询。 - 短信、邮件、电话、下单、支付等场景必须实现正确的防重放机制(公司的短信都是先发送到MQ,然后消费者去消费,某次消费者逻辑出现异常,导致消息被重复消费好几遍,还好消费逻辑有校验是否发送过短信,否则一个用户会发送好多遍短信)。
5. MYSQL
建表规约
- 表达是否概念的字段必须使用
is_xxx的方式,类型为unsigned tinyint(1是0否)(is_xxx仁者见仁智者见智)。 - 表名不使用复数的形式。
- 单表超过500万才建议分库分表。
索引规约
- 业务上具有唯一特性,即使多个字段,也必须建成唯一索引。
- 页面搜索禁止全模糊或左模糊(因为大多数情况,这俩不走索引)。
- 建组合索引,区分度高的放左边。
语句
count(*)统计null行,count(列名)不统计null行。- 使用
ISNULL判断是不是null值。 - 分页逻辑,如果
count=0直接返回,避免执行后面的分页语句。 in后面的集合元素的个数,最好控制在1000内。- 不要写大而全的数据更新接口。
@Transactionanl事务不要滥用,事务会影响数据库的QPS。使用事务要考虑,缓存回滚、消息补偿,统计修正等。
6. 工程结构
- DO 与数据库表一一对应。
- DTO:service向外传输的对象。
- BO:由service输出的封装业务逻辑的对象。
- Query参数超过2个,需要进行封装。
- 二方库:
- JSON:fastjson
- MD5:commons-codec
- 数据操作:ArraysUtils
- 集合操作:CollectionsUtils
7. 总结
以上为看书总结自认为有用的部分,推荐阅读原书。
《Java开发手册》-部分编码规范分享的更多相关文章
- 阿里巴巴Java开发手册(命名规范/常量定义篇)——查自己的漏-补自己的缺
一.编程规约 (一) 命名规约 1. [强制]所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / ...
- 【Java编码规范】《阿里巴巴Java开发手册(正式版)》【转载】
2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率.大大降低代 ...
- 阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》
终极版 v1.3.0 2017年开春之际,阿里诚意献上重磅大礼:<阿里巴巴Java开发手册>,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平, ...
- 阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载
https://bbs.aliyun.com/read/306592.html?page=e 2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准. 这 ...
- 阿里巴巴Java开发手册正确学习姿势是怎样的?刷新代码规范认知
很多人都知道,阿里巴巴在2017发布了<阿里巴巴Java开发手册>,前后推出了很多个版本,并在后续推出了与之配套的IDEA插件和书籍. 相信很多Java开发都或多或少看过这份手册,这份手册 ...
- 《阿里巴巴Java开发手册》码出高效详解(一)- 为什么要学习阿里编码手册
<Java 开发手册>(以下简称<手册>)是每个 Java 工程师人手必备的一本参考指南.该手册包括 编程规约.异常日志.单元测试.安全规约.MySQL 数据库.工程结构.设计 ...
- 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...
- 《阿里巴巴 Java 开发手册》读书笔记
偶然看到阿里巴巴居然出书了???趁着满减活动(节约节约....)我赶紧买来准备看看,刚拿到的时候掂量了好多下,总觉得商家给我少发了一本书,结果打开才知道..原来这本书这么小.... 编码规范的重要性 ...
- 《阿里巴巴 Java开发手册》读后感
前言 只有光头才能变强 前一阵子一直在学Redis,结果在黄金段位被虐了,暂时升不了段位了,每天都拿不到首胜(好烦). 趁着学校校运会,合理地给自己放了一个小长假,然后就回家了.回到家才发现当时618 ...
- 《阿里巴巴Java开发手册》扫描插件正式发布--插件安装和使用分析
"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!" 阿里巴巴于10月14日上午9:00在杭州云栖大会<研发效能峰会>上,正式发布<阿里巴巴Java开发 ...
随机推荐
- Angular Material 18+ 高级教程 – CDK Overlay
Overlay, Dialog, Modal, Popover 傻傻分不清楚 参考: Medium – Modal?Dialog?你真的知道他們是什麼嗎? Popups, dialogs, toolt ...
- ChatGPT中Java相关问答(包括Java基础知识和一些面试题)
分享一个自己学习Java时的记录ChatGPT中的对话:https://chatgpt.com/share/66e8f009-0fd0-8000-b458-8c5812d0b631 包括如下问题 Ho ...
- 立足信创国产化运维,打造安全可控IT运维管理系统
随着国产化信创应用试点行业的不断扩大,应用信创产品的企事业单位逐渐增多.大多数企业均面临着陌生的国产化环境与产品,其使用习惯和解决问题的方式都面临改变.北京智和信通切实立足用户需求,提供信创运维服务. ...
- llama.cpp推理流程和常用函数介绍
llama.cpp是一个高性能的CPU/GPU大语言模型推理框架,适用于消费级设备或边缘设备.开发者可以通过工具将各类开源大语言模型转换并量化成gguf格式的文件,然后通过llama.cpp实现本地推 ...
- `std::string_view`(c++17) 和 `std::stringstream` 使用区别·
std::string_view 和 std::stringstream 都是 C++ 中处理字符串的工具,但它们的设计目标和使用场景非常不同.我们可以通过几方面进行对比. 1. 设计目的和核心功能 ...
- 71.登录失效,token过期怎么处理
1. 清除用户数据,直接跳转登录页重新登录 : 2. 短token 过期,使用 长 token 重新获取短 token ,然后重新请求 : 如果长 token 也过期了,就去重新登录获取 token ...
- Need BLUETOOTH PRIVILEGED permission以及requestMtu导致蓝牙断连问题
在部分Android手机上,当连接上GATTService后直接requestMtu有可能会造成蓝牙连接中断,随后继续重新连接会报错Need BLUETOOTH PRIVILEGED permissi ...
- 装有docker的虚拟机环境ping宿主机失败
当我用docker network create 创建了一个网络后 [root@localhost ~]# docker network create kong-net 5c035564f9b4649 ...
- KubeSphere 社区双周报 | OpenFunction v1.2.0 发布 | 2023.09.15-09.28
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- python将html批量转换为md
一.安装依赖 pip install html2text 代码实现 import os import shutil import html2text def convert_html2md(src_h ...