前言 在阅读<阿里巴巴Java开发手册>时,看到命名规则中有这样一条 虽然知道这些是根据Java对象的角色所分配名称的后缀,但是没有弄清楚分别是什么意思,日常开发中也没有使用到. 网上查找了一些资料,但是感觉大多数都是一样的,可能大家都是互相copy,篇幅过长并且不易理解. 别灰心!<阿里巴巴Java开发手册>中对于上面这些在领域模型的命名使用上给出了规范,说的很清楚,分享给大家. 领域模型命名规约 1.数据对象:xxxDO,xxx即为数据表名: 2.数据传输对象:xxxDTO,x…
概述 在阅读完阿里Java开发手册(嵩山版)后,发现自己在开发过程中有一些没有按照规范开发的情况,这里将容易忘记的规范记录下来,并且添加自己的理解,一方面方便自己巩固记忆,另一方面希望对其他同学能够提供一下帮助.这里将收集的阿里Java开发手册文档放在了 github 仓库,更多详细内容可以下载文档查看. 编程规约 [强制] 抽象类命名使用 Abstract 或 Base 开头:异常类命名使用 Exception 结尾:测试类 命名以它要测试的类的名称开始,以 Test 结尾. [强制] POJ…
版本: 1.3.0 update: 2017.9.25 一.编程规约 (一) 命名风格 1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例:_name _name_name / __name__name __name __name / $Object$Object $Object $Object / name_name_ name_ / name$ name$ name$ / Object$ Object$ Object$ Object$2. [强制]代…
在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个问题: 如果不看<阿里巴巴Java开发手册>,如何知道 Integer var = ? 会缓存 -128 到 127 之间的赋值? 为什么会缓存这个范围的赋值? 如何学习和分析类似的问题? Integer 缓存问题分析 先看下面的示例代码,并思考该段代码的输出结果: public class In…
转载请注明原创出处,谢谢! 缘由 阿里JAVA开发手册已经发表有很长时间了,值得认真研究思考推广 阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好好阅读. 可谓包罗万象,几乎日常Java开发中方方面面都有所涉及. 每一条都是前人踩过的坑,通过血的教训总结出来的. 能公布出来真是造福全部Java开发者. 开发手册详细列举如何开发更加高效,更加容错,更加有协作性,力求知其然,更知其不然,结合正反例,提高代码质量.比如,异常日志处理时的各种不规范行…
转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAVA开发手册零度的思考理解(一)得到作者孤尽的肯定支持,那是一个小激动啊,我会继续努力,继续阅读和思考阿里JAVA开发手册,毕竟每一条都是前人踩过的坑,通过血的教训总结出来的. 上篇题目回顾 看完这条,个人觉得主要是集合相关操作,在JAVA基础中集合这块的重要性也的确非常重要(毕竟是用到最多的),本期…
jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口  |–ExecutorService:Executor的子接口,线程池的主要接口  |–ThreadPoolExecutor:ExecutorService的实现类  |–ScheduledExecutorService:ExecutorService的子接口,负责线程的调度  |–ScheduledThreadPo…
时隔一年多,再次开始更新博客,各位粉丝们久等了.大家是不是以为我像大多数开发者一样三分钟热度,坚持了一年半载就放弃了,其实不是.在过去的一年时间我学习了<Java编程思想>这本书,因为都是写基础性的东西,所以没必要在博客上写出来.现在终于把700多页的编程思想看完了,回归博客,开始整理一波Java开发手册. 1.类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO /PO / UID 等 2.方法名.参数名.成员变量.局部变量都统一使用…
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 一个优秀的工程师和一个普通的工程师的区别,不是满天飞的架构图,他的功底体现在所写的每一行代码上.-- 毕玄 1. 命名风格 [书摘]类名用 UpperCamelCase 风格,比如 DO/BO/VO/PO [书摘]方法用 lowerCamelCase 风格,尽量是动词 小思考:例如常用的- 获取单个对象,getUserById- 获取对象累不,listUser…
在阅读<阿里巴巴Java开发手册>时,发现有一条关于关于常量定义的规约,具体内容如下: 图中的反例是将数据缓存起来,并使用魔法值加链路 id 组成 key,这就可能会出现其他开发人员在复制粘贴的时候,少复制 _ 的情况发生,这种错误很难去检查到,因为读取缓存不存在,可能会去数据库读取,很难察觉到. 如果在生产环境中,大量的请求进来,缓存全部失效,直接请求数据库,导致数据库连接过多,查询效率变低的问题发生,因此看来魔法值确实应该避免出现在代码中. 另外在 <Clean Code> 和…
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险. 结合最近面试的经历,发现这条建议还是十分有用的,因为自己经常使用Executors提供的工厂方法创建线程池,所以忽略了线程池内部的实现. 特别是拒绝策略,面试被问到两次,还好因为这条建议,自己提前熟悉了一下ThreadPoolExecutor. Thr…
一·命名约定 类名使用大驼峰式命名(领域模式相关命名除外:如DAO\VO\DO等). 常量必须全部大写,单词中间用“_”隔开(如MAX_COUNT). 抽象类命名使用Abstract或Base开头.异常类命名使用Exception结尾.测试类命名以它要测试的类的名称开始,然后以Test结尾. 中括号是数组类型的一部分:String[] args:不要使用String args[]来定义. 简单Java对象(pojo)类中的布尔类型的变量,都不要加is,否则框架解析会引起序列化错误.比如Boole…
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险. 结合最近面试的经历,发现这条建议还是十分有用的,因为自己经常使用Executors提供的工厂方法创建线程池,所以忽略了线程池内部的实现.特别是拒绝策略,面试被问到两次,因为使用Executors创建线程池不会传入这个参数而使用默认值所以我们常常忽略这一参…
一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / name / name$ / Object$ 2.[强制] 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式. 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意,即使纯拼音命名方式 也要避免采用.(代码规范,易读) 反例: DaZhePromotion [打折] /…
在阅读<阿里巴巴Java开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下: 错误演示 我们首先在 IDEA 中编写一个在 foreach 循环里进行 remove 操作的代码: import java.util.ArrayList; import java.util.List; public class ForEachTest { public static void main(String[] args) { List<S…
在阅读<阿里巴巴Java开发手册>时,发现有一条关于二方库依赖中接口返回值不允许使用枚举类型的规约,具体内容如下: 在谈论为什么之前先来科普下什么是二方库,二方库也称作二方包,一般指公司内部发布到中央仓库,可供公司内部其他应用依赖的库(jar 包). 那么一方库便是本工程内部子项目模块依赖的库:三方库为公司之外的开源库,比如像 fastjson.easyexcel 这种. 下面我们就通过一个例子来看下为什么阿里巴巴不允许返回枚举类型或者包含枚举类型的 POJO 对象. 比如星巴克提供了 0.0…
之前在阅读<阿里巴巴Java开发手册>时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率如何吧(JDK版本为 jdk1.8.0_201). package com.wupx.demo; /** * @author wupx * @date 2019/10/23 */ public class StringConcatDemo { public static void main(Str…
分层领域模型规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象. DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象. BO( Business Object):业务对象. 由Service层输出的封装业务逻辑的对象. AO( Application Object):应用对象. 在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高. VO( View Object…
1.1 命名风格 (1)常量命名全部大写,单词间用下划线隔开. (2)抽象类命名以Abstract或Base开头:异常类命名以Exception结尾:测试类命名以它要测试的类名开始,以Test结尾. (3)类型与中括号之间无空格定义数组(例:String[] args). (4)Boolean类型的变量不要加is前缀(例:Boolean isDeleted,它的方法名称也是isDeleted(),会造成部分框架解析失败). (5)包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词(例:…
开发手册 不推荐用java.sql.Date.java.sql.Time网上说的文章有很多. 参考文章:一文告诉你Java日期时间API到底有多烂 但为什么不推荐使用java.sql.Timestamp文章比较少. 原因 Oracle官网文档中这么写: 可以看到,根源是因为java.sql.Timestamp父类java.sql.Date的fastTime属性存储秒,而java.sql.Timestamp的nanos存储秒以外的毫秒.所以秒和毫秒是分别存储的,从Timestamp的构造方法也可以…
给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来.   IDEA 插件安装 IDEA 版的插件已发布到 IDEA 官方仓库中(最低支持版本 14.1.7,JDK1.7+). 只需打开 Settings >> Plugins >> Browse repositories 输入 Alibaba 搜索一下便可以看到对应插件了,点击安装等待安装…
一.编程规约 (一) 命名规约 1. [强制]所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / name$ / Object$ 6. [强制]抽象类命名使用Abstract或Base开头:异常类命名使用Exception结尾:测试类命名以它要测试的类的名称开始,以Test结尾. 8. [强制]POJO类中的任何布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误. 反例:定义为基本…
1.不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 2.count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1,col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0. 3.当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返…
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 建表规约 1.表达是与否概念的字段,必须使用is_XXX的方式命名,数据类型是 unsigned tinyint (1表示是,0表示否). 2.表名不使用复数名词. 3.禁用保留字. 4.小数类型为decimal,禁止使用float和double. 5.表的命名最好是…
应用分层 1.分层如下 1)开放接口层:可以直接封装Service接口暴露成RPC:通过web封装成http接口:网关控制层等. 2)终端显示层:各个端的模板渲染并执行显示层. 3)Web层:主要是度访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理. 4)Service层:对具体的业务逻辑进行处理. 5)Manager层:通用业务处理层 1️⃣ 对三方库的接口,预处理返回结果及转化异常信息: 2️⃣ 对Service层通用能力的下沉,如缓存方案.中间件通用处理: 3️⃣ 与DAO层交…
(三) 格式规约 1. [强制]大括号的使用约定.如果是大括号内为空,则简洁地写成{}即可,不需要换行:如果是非空代码块则: 1) 左大括号前不换行.行. 2) 左大括号后换行. 3) 右大括号前换行. 4) 右大括号后还有else等代码则不换行:表示终止右大括号后必须换行. 2. [强制] 左括号和后一个字符之间不出现空格:同样,右括号和前一个字符之间也不出现空格.详见第5条下方正例提示. 3. [强制]if/for/while/switch/do等保留字与左右括号之间都必须加空格. 4. […
异常日志 异常处理 1.不要捕获继承自RuntimeException的运行时异常类,这类异常通常由程序员来校验,来保证查询的健壮性. 2. 不要对大段代码 try catch,分清稳定代码和非稳定代码.对于非稳定代码,区分情况经行catch. 3.如果有try快放到了事物代码中,catch异常后,如果要回滚事物一定要手动回滚事物. 4.方法的返回值为null,必须添加注释充分说明说明情况下会返回null . 5. 放置NPE,是程序员的基本修养,注意产生NPE的场景 1)返回类型为包装数据类型…
1. [强制]类.类属性.类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用 //xxx 方式. 说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注 释:在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法.参数.返回值的意义,提高 阅读效率. 2. [强制]所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释.除了返回值.参数. 异常说明外,还必须指出该方法做什么事情,实现什么功能. 说明:对子…
1.用户敏感数据禁止直接展示,必须对展示数据进行脱敏.例如手机号.银行卡号等,中间要用*隐藏. 2.发贴.评论.发送即时消息等用户生成内容的场景必须实现防刷.文本内容违禁词过滤等风控策略,一般是用验证码来拦截. 3.禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据.需要将敏感信息隐藏,并且将程序中的默认的字段转换为用户看得懂的实际字段. 4.MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写.因此,数据库名.表名.字段名,都不允许出现任何大写字母,避…
调用迭代器的remove的方法(它的方法实现是:调用ArrayList的remove(index)方法 ) 然后游标cursor相应的进行减1操作…