0102【阿里开发手册 学习笔记】
学习规范编码学习笔记
努力的阳光蓝孩
学习一时爽,一直学习一直爽
展开
-
阿里开发手册泰山版学习笔记二十一、工程结构-二方库依赖
【强制】定义 GAV 遵从以下规则:1) GroupID 格式:com.{公司/BU }.业务线 [.子业务线],最多 4 级。说明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一级;子业务线可选。正例:com.taobao.jstorm 或 com.alibaba.dubbo.register2) ArtifactID 格式:产品线名-模块名。语义不重复不遗漏,先到中央仓库去查证一下。正例:dubbo-client / fastjson-a..原创 2020-05-27 09:17:55 · 380 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记二十二、专有名词解释
1.CAS(Compare And Swap): 阿里巴巴专指数据库表一一对应的 POJO 类。解决多线程并行 情况下使用锁造成性能损耗的一种机制,这是硬件实现的原子操作。CAS 操作包含三个操作 数:内存位置、预期原值和新值。如果内存位置的值与预期原值相匹配,那么处理器会自动将 该位置值更新为新值。否则,处理器不做任何操作。2. DO(Data Object): 阿里巴巴专指数据库表一一对应的 POJO 类。3. GAV(GroupId、ArtifactId、Version): Maven 坐标.原创 2020-05-27 09:10:09 · 190 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记二十、工程结构-应用分层
【推荐】图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于Service 层,依此类推:1 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;网关控制层等。2 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染,JSP 渲染,移动端展示等。3 Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。4 Servi.原创 2020-05-27 09:05:11 · 237 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十八、MySQL 数据库-ORM 映射
【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。3)无用字段增加网络消耗,尤其是 text 类型的字段。【强制】POJO 类的布尔属性不能加is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属性之间的映射。说明:参见定义 POJO 类以及数据库字段定义规定,在 sql.xml 增加映射,是必须的。【强制】不要用 resultClas.原创 2020-05-26 23:27:50 · 151 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十七、MySQL 数据库-SQL 语句
【强制】不要使用 count(列名)或 count(常量)来替代 count(),count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。说明:count()会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1,col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回..原创 2020-05-26 23:20:25 · 143 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十六、MySQL 数据库-索引规约
【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引。说明:即使双表 join 也要注意表索引、SQL 性能。【强制】在 varchar 字段上建立索引时,必须指定..原创 2020-05-26 23:07:44 · 190 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十九、MySQL 数据库-建表规约
【强制】表达是与否概念的字段,必须使用is_xxx 的方式命名,数据类型是unsigned tinyint(1 表示是,0表示否)。说明:任何字段如果为非负数,必须是 unsigned。注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在设置从 is_xxx 到Xxx 的映射关系。数据库表示是与否的值,使用 tinyint 类型,坚持 is_xxx 的命名方式是为了明确其取值含义与取值范围。正例:表达逻辑删除的字段名is_deleted,1 表示删除,0 表示未删除。..原创 2020-05-26 22:56:29 · 266 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十五、安全规约
【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。说明:中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露。【强制】用户输入的SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。反例:某系统签名大量被恶意修改,即是因为对于危险字符 # ..原创 2020-05-26 09:20:59 · 261 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十四、单元测试
【强制】好的单元测试必须遵守AIR 原则。说明:单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。 A:Automatic(自动化) I:Independent(独立性) R:Repeatable(可重复) 【强制】单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元测试中不准.原创 2020-05-26 09:13:53 · 160 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十三、异常日志-日志规约
【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架(SLF4J、JCL–Jakarta Commons Logging)中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。说明:日志框架(SLF4J、JCL–Jakarta Commons Logging)的使用方式(推荐使用 SLF4J)使用 SLF4J:import org.slf4j.Logger;import org.slf4j.LoggerFactory;pri.原创 2020-05-25 09:31:40 · 373 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十二、异常日志-异常处理
【强制】Java 类库中定义的可以通过预检查方式规避的 RuntimeException 异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBoundsException 等等。说明:无法通过预检查的异常除外,比如,在解析字符串形式的数字时,可能存在数字格式错误,不得不通过 catch NumberFormatException 来实现。正例:if (obj != null) {...}反例:try { obj.method();.原创 2020-05-22 09:33:18 · 446 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十一、异常日志-错误码
【强制】错误码的制定原则:快速溯源、简单易记、沟通标准化。说明: 错误码想得过于完美和复杂,就像康熙字典中的生僻字一样,用词似乎精准,但是字典不容易随身携带并且简单易懂。正例:错误码回答的问题是谁的错?错在哪?1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。2)错误码易于记忆和比对(代码中容易 equals)。3)错误码能够脱离文档和系统平台达到线下轻量化地自由沟通的目的。【强制】错误码不体现版本号和错误等级信息。说明:错误码以不断追加的方式进行兼容。错误等级由日志和错误码..原创 2020-05-22 09:25:03 · 788 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记十、编程规约-其他
【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。说明:不要在方法体内定义:Pattern pattern = Pattern.compile(“规则”);【强制】避免用 Apache Beanutils进行属性的 copy。说明:Apache BeanUtils 性能较差,可以使用其他方案比如 Spring BeanUtils, Cglib BeanCopier,注意均是浅拷贝。【强制】velocity调用 POJO 类的属性时,直接使用属性名取值即可,模板引擎..原创 2020-05-21 09:13:41 · 257 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记九、编程规约-注释规约
【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用// xxx 方式。说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。【强制】所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。说明:对子类的实现要求,或者调用注意事..原创 2020-05-21 09:06:25 · 255 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记八、编程规约-控制语句
【强制】在一个 switch 块内,每个 case 要么通过 continue/break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default语句并且放在最后,即使它什么代码也没有。说明:注意 break 是退出 switch 语句块,而 return 是退出方法体【强制】当 switch 括号内的变量类型为 String 并且此变量为外部参数时,必须先进行 null判断。反例:如下的代码输出是什么?p..原创 2020-05-20 23:18:01 · 337 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记七、编程规约-并发处理
【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。说明:资源驱动类、工具类、单例工厂类都需要注意。【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。正例:自定义线程工厂,并且根据外部特征进行分组,比如,来自同一机房的调用,把机房编号赋值给whatFeaturOfGrouppublic class UserThreadFactory implements ThreadFactory { private final String namePrefix;..原创 2020-05-20 22:57:48 · 304 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记六、编程规约-集合处理
【强制】关于 hashCode 和 equals 的处理,遵循如下规则:1) 只要重写 equals,就必须重写 hashCode。2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法。3) 如果自定义对象作为 Map 的键,那么必须覆写 hashCode 和 equals。说明:String 因为重写了 hashCode 和 equals 方法,所以我们可以愉快地使用 String 对象作为 key 来使用。.原创 2020-05-20 22:29:03 · 324 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记五、编程规约-日期时间
【强制】日期格式化时,传入 pattern 中表示年份统一使用小写的 y。说明:日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY就是下一年。正例:表示日期和时间的格式如下所示:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")【强制】在日期格式中分清楚大写的 M 和小写的 m,大写的.原创 2020-05-20 21:50:16 · 361 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记四、编程规约-OOP规约
【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可。【强制】所有的覆写方法,必须加@Override 注解。说明:getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override 可以准确判 断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。说明:可变参数必须放..原创 2020-05-20 09:30:32 · 260 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记三、编程规约-代码格式
【强制】如果是大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格;如果是非空代码块则:1) 左大括号前不换行。2) 左大括号后换行。3) 右大括号前换行。4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。【强制】左小括号和右边相邻字符之间不出现空格;右小括号和左边相邻字符之间也不出现空格;而左大括号前需要加空格。详见第 5 条下方正例提示。反例:if (空格 a == b 空格)【强制】if/for/while/switch/do 等保留字..原创 2020-05-19 09:06:24 · 270 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记二、编程规约-常量定义
【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。反例://本例中同学 A 定义了缓存的 key,然后缓存提取的同学 B 使用了 Id#taobao 来提取,少了下划线,导致故障。String key = “Id#taobao_” + tradeId;cache.put(key, value);【强制】在 long 或者 Long 赋值时,数值后使用大写的 L,不能是小写的 l,小写容易跟数字混淆,造成误解。说明:Long a = 2l; 写的是数字的 21,还是 Lo..原创 2020-05-19 08:57:48 · 253 阅读 · 0 评论 -
阿里开发手册泰山版学习笔记一、编程规约-命名风格
命名风格【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name / name / name/name/namename / name_ / namename/name/name / name【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。正例:ali / alibaba / taobao / cainiao/ aliyu原创 2020-05-19 08:46:28 · 282 阅读 · 0 评论