阿里云大学 关注
手机版
  1. 云栖社区>
  2. 阿里云大学>
  3. 博客>
  4. 正文

【Java编码规范】《阿里巴巴Java开发手册》终极版更新,IDE插件即将发布

云木西 2017-02-08 17:01:38 浏览387804 评论115 发表于: 阿里云大学

java 阿里巴巴 开发手册 研发协同

摘要: 阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。

         -------------- 2017.9.25更新 --------------


《阿里巴巴Java开发手册(终极版)》正式发布,这是史上内容最全、修正最为彻底的一个版本,并且增加了单元测试规约内容,这也是阿里官方对外发布的最后一个PDF版本,值得收藏。

 

《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL规约、工程规约、安全规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善。这是阿里回馈给Java社区的一份礼物,希望能够帮助企业开发团队在Java开发上更高效、容错、有协作性,提高代码质量,降低项目维护成本。


点击下载《阿里巴巴Java开发手册》(终极版):https://yq.aliyun.com/attachment/download/?id=2008

考试认证:https://edu.aliyun.com/certification/cldt02


cb114de55d693f6287bccd8a047f137523cbd1f9



单元测试规约

单元测试有助于开发团队有效监测软件模块质量、促进代码深度优化,进而降低线上故障率,长期执行有助于提升项目迭代效率,减少重构成本。此次在终极版本中,阿里根据内部单元测试的实践经验,详细描述了单元测试的相关原则和重要建议:

  • AIR原则:

         A:Automatic,单元测试需要测试框架自动化执行,才有意义。

         I:Independent,单元测试用例之间互相独立,不存在依赖关系。

         R:Repeatable,单元测试可以被重复执行,且结果一致

  • BCDE原则:

         B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点等。

         C:Correct,正确的输入,并得到预期的结果。

         D:Design,与设计文档相结合,来编写单元测试。

         E:Error,强制错误信息输入(如:非法数据),并得到预期的结果。


IDE代码检测插件 

自《阿里巴巴Java开发手册》正式版发布以来,Java开发者就一直关注何时推出IDE代码监测插件。经过研发和内部测试,现在插件终于要和大家见面了——10月14日,杭州云栖大会研发效能峰会场,阿里将正式对外开放插件及源码。

该插件在扫描代码后,将不符合《手册》的代码按block/critical/major三个等级显示在下方;实时编写代码时,还会给出智能提示,告诉你如何编写可以更优雅;对于历史代码,部分规则实现了批量一键修复的功能。是不是很方便? 


「阿里巴巴编码规范」考试认证

阿里云大学结合《阿里巴巴Java开发手册》,推出了「阿里巴巴编码规范」认证,通过在线考试,检测你对手册中开发规范的掌握程度,并发放官方认证证书。

立即考试:https://edu.aliyun.com/certification/cldt02 



------------------------------------------

关于《阿里巴巴Java开发手册》


你是否曾因Java代码规范版本纷杂而无所适从?

你是否想过代码规范能将系统故障率降低20%?

你是否曾因团队代码风格迥异而协同困难?

你是否正在review一些原本可以避免的故障?

你是否无法确定自己的代码足够健壮? 

码出高效,码出质量!

相比C++代码规范业界已经达成共识,Java代码规范业界比较混乱,我们期待这次发布的Java代码规范能够给业界带来一个标准,促使整体行业代码规范水平得到提高,最终能够帮助企业和开发者提升代码质量和降低代码故障率。

 

阿里出品,质量保证!

阿里Java技术团队一手打造出Dubbo、JStorm、Fastjson等诸多流行开源框架,部分已成为Apache基金会孵化项目;

阿里在Java后端领域支撑起全球访问量最大的服务器集群;

Java代码构建的阿里双11业务系统订单处理能力达到17.5万笔/秒;

到目前已累计数亿行高并发、高稳定性的最佳Java代码实践;

……

此次公开的Java开发手册正是出自这样的团队,近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了这本高含金量的阿里Java开发手册。该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规约、安全规约五大块,再根据内容特征,细分成若干二级子目录。根据约束力强弱和故障敏感性,规约依次分为强制、推荐、参考三大类。此套规范不仅能让代码一目了然, 更有助于加强团队分工与合作、真正提升效率。 


无规矩不成方圆 无规范不能协作

众所周知,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全。试想如果没有限速,没有红绿灯,没有规定靠右行驶,谁还敢上路行驶。 

同理,对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的方式一起做事,降低故障率,提升协作效率。开发手册详细列举如何开发更加高效,更加容错,更加有协作性,力求知其然,更知其不然,结合正反例,提高代码质量。比如,异常日志处理时的各种不规范行为;集合转换的各种坑;创建线程池出现的等待队列OOM等。 


阿里技术资深大咖联袂推荐

阿里高级研究员多隆:工程师对于代码,一定要“精益求精”,不论从性能,还是简洁优雅,都要具备“精益求精”的工匠精神,认真打磨自己的作品。 

阿里研究员毕玄:一个优秀的工程师和一个普通工程师的区别,不是现在满天飞的架构图,他的功底就是体现在他写的每一行代码上。 

阿里研究员玄难:代码是软件工程里面的产品设计、系统架构设计等工作的最后承载体,代码的质量决定了一切工作的成败。 

阿里巴巴B2B事业群CTO李纯:好的软件产品离不开工程师高质量的代码及相互间顺畅的沟通与合作。简单,适用的代码规约背后所传递的是技术上的追求卓越、协同合作的精神,是每个技术团队不可缺失的重要利器。 

阿里研究员、HipHop作者:赵海平(花名:福贝):程序员是创造个性化作品的艺术家,但同时也是需要团队合作的工种。个性化应尽量表现在代码效率和算法方面,牺牲小我,成就大我。 


拥抱规范,远离伤害!

开发的同学们赶紧行动起来,遵守代码规范,你好,我好,大家好! 


关注云栖社区微信公众号:

2adbbb40545618044d6ebff62c513480e7591581

本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】浅析混合云和跨地域网络构建实践,分享高性能负载均衡设计,9月21日阿里云专家和你说说网络那些事儿,足不出户看直播,赶紧预约吧!  详情请点击

网友评论

101F
1304715849105571

“(三)格式规约”里的“4. 【强制】任何运算符左右必须加一个空格”,对于单目运算符(如++, --等),常见做法是不留空格。

孤尽 赞同
孤尽

我相信大家能够明白背后的语义,但是如果上升到法规的严谨性,的确是需要加限定词。

评论
102F
zhuguowei2

(六) 并发处理 5. Java8可以这样处理: public final static ThreadLocal formatter = ThreadLocal.withInitial(() -> new DateFormatter(new SimpleDateFormat("yyyy-MM-dd")));

优点:
1. 代码更清晰
2. JVM会少加载一个类

摘自:Java8函数式编程 Richard Warburton著

103F
leilove321

为什么没有关于Java REST的相关规范?

104F
qianman

是否可以不要使用 pdf?开源到 Github 上边,大家可以不断提交,扩展。

孤尽

云栖大会见。

评论
105F
alimph

期待NoSQL的部分

106F
smile665

这个最新的v1.2.0版本确实比 第一个版本好多了 赞!~
另外,确实开源到github上也更好一些

1309316280376633 赞同
孤尽

请关注云栖大会。

评论
107F
neochang

求能出前端规范手册!

108F
wenbolwm

好东西,来收藏了

109F
musi
  1. 【推荐】集合初始化时,指定集合初始值大小。 说明:HashMap 使用 HashMap(int initialCapacity) 初始化, 正例: initialCapacity = (需要存储的元素个数 / 负载因子) + 1。 注意负载因子 (即loader factor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16。

默认就是16,为什么还要显示的指定为16?

孤尽

因为开发者必须去思考。抽样调查发现,也只有三分之一的同学知道默认是16,也只有十分之一的同学知道它是以2的指数次进行resize。

评论
110F
zn123

@云木西 发现小错误
8条 Boolean 不是基本数据类型, 写错了

孤尽 赞同
孤尽

能够发现这么细微的地方,真是难得,下个版本中会进行改进。

评论
111F
j焕

发现一个(应该是)错别字。"一、命名风格"章节的"14"条,“UNKOWN_REASON”,unkown...

112F
掷骰子声音

阿里巴巴Java开发手册(正式版)》更新(v1.2.0版)
(五)集合处理 "11. 【推荐】高度注意 Map 类集合 K/V 能不能存储 null 值的情况,如下表格:"有一个问题,请赶快修正:

ConcurrentHashMap 不允许为 null 不允许为 null AbstractMap 分段锁技术 ?

在Java6与Java7中ConcurrentHashMap中是分段锁技术。
但在在Java 8中, ConcurrentHashMap已经不是采用分段锁方式来控制并发的粒度了!

掷骰子声音 赞同
113F
不在酒

呵呵 java官方提了么?

114F
1875375730735398

下个东西也要收集信息,怪不得蜂巢怼你,说你收集信息

115F
phdbbs

很不错,很有感触,阿里人很用心!

关注
云木西
云计算、大数据、人工智能技术之路上的徒步者
56篇文章|546关注
大数据开发套件(Data IDE),提供可视化开发界面、离线任务调度运维、快速数据集成、多人协同工作等功能,为您...

云上企业级一站式智能研发协同平台,为企业用户提供从需求、编码到测试、发布、反馈等端到端的持续交付服务。

一站式提供企业即时通讯、销售管理、协同办公。

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...