云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍

摘要: 本文带大家简单理解阿里巴巴Java开发手册中的规约内容以及P3C项目,可以帮助开发者扫描出所有潜在的代码隐患。在中间也聊了一些对于不同语言设计的理解,如何去看待语言的设计,其实是我们去学习一个语言的核心。

演讲嘉宾简介:
澳明,阿里巴巴高级开发工程师。

本次直播视频精彩回顾,戳这里!

以下内容根据演讲嘉宾视频分享以及PPT整理而成。

本次的分享主要围绕以下三个方面:

一、手册简介
二、聊聊语言
三、P3C项目

一、手册简介

下面主要从三个方面介绍阿里巴巴为什么需要这个Java开发手册。第一个方面,其实是协作效率的问题。众所周知,秦朝统一时期,推出了“车同轨,书同文”的法令,事实上,这个法令背后的目的是让整个国家人民做事的方式进行统一。那么在现在,比如对于一个公司而言,一些规范的不一致可能会导致很多问题,不仅仅是个人与个人之间,甚至让部门与部门之间会出现不必要的沟通损耗和沟通壁垒。

第二个方面其实是在系统质量方面。在阿里巴巴,这种不规范编码导致的线上故障非常非常多,在整个线上故障的比率也非常高。所以,阿里巴巴希望能够统一整个集团的编码规范,进而能够提升整体的系统质量。

第三个方面,工匠精神。阿里巴巴希望工程师们具备一个工匠精神。即希望工程师非常非常认真的对待编码过程及编码产物。因为无论怎么样设计Java开发手册,它所包含的条目始终是有限的,是一个死的东西,更多的希望大家能够体会的是Java开发手册背后的思想,因为背后的思想其实是可以举一反三,灵活运用的。阿里巴巴希望工程师们可以具备这样一种工匠精神,能够不断的认真打磨好自己的代码。


目前,Java开发手册分为七大部分,下图中的七大部分在日常的开发中是非常通用的。大家可以依据这七条规约,逐步逐步的从第一条规约低阶往高阶去进展。与大家平时开发项目一样,比如说,在最开始编码时,可以参考编程规约;然后我们在编程过程中,考虑异常场景时,那么可以考虑异常日志规约;在写单元测试时,可以参考单元测试规约;比如说,在整体的架构设计完毕并且代码开发完毕之后,对于其非功能性需求,比如安全方面的问题,可以参考安全规约;那么在与数据库进行交互时,可以参考MySQL数据库规约;有的时候,在整个一个大的公司内部,希望大家的工程结果能够统一,这样的话大家在阅读别人的代码,或者说复用别人的代码的时候会非常的直观和方便,这时候可以参考工程规约;最后一个设计规约,指在设计软件,设计程序和设计架构时可以参照一些规约。

尽管我们的Java开发手册页数不是很多,之所以称之为手册,是希望大家方便阅读,可以当做枕边书,业余时间翻一翻。手册中除了一些制定的规约内容,还提到了很多工程师会遇到的问题场景。这些问题场景中有一部分也结合了阿里巴巴近年来的真实案例,目的是让大家能够更好的理解规约,更重要的是理解规约背后的所体现的思想。这本Java开发手册虽然不厚,但是相信对于刚入门学习Java的同学,可以尝试阅读并体会,肯定会对大家有所帮助,并在编程规范的形成上有很大提高。

二、聊聊语言

1.面向对象语言与面向过程语言的区别

大家应该知道Java是面向对象的语言,也叫做OOP。那么面向对象语言和面向过程的语言有什么区别呢?在实现某个动作时,无论是使用面向对象语言或者面向过程的语言都可以实现,那么为什么说面向过程比较直观,比较方便呢?下面来简单举例说明。首先确定需求,比如说想开一个门,在面向过程的程序设计里,很有可能是一个Open行为或者叫Open函数的一个动作的实现,然后Open依赖的数据结构是Door对象,那么这个开门的动作就非常简单,直接Open the door。在面向对象的程序中,直接将对象Door设计出来,然后在赋予对象一些行为,如Open。

Open the door,这是面向过程的代码,可以认为Door其实是一个数据结构,我们可以很方便的再添加面向过程的代码,如添加新函数,比如Close the door。那么在面向对象的代码中,更多的是在不同的数据结构中,实现Open这一功能。简而言之,面向对象的语言更希望把操作的行为附加在不同的抽象类之上。

下图中摘抄了我们的一本书,《代码整洁之道》中的一段话“面向过程的代码便于在不改动既有数据结构的前提下添加函数,面向对象代码便于不改动既有函数的前提下添加类。反之,过程式代码难以添加新数据结构,面向对象代码难以添加新函数,因为必须修改所有类。对于面向对象比较南的事情,对于面向过程的代码比较容易,反之亦然。”


2.异常行为

我们相信大多数开发者都可以写出能够正常运行的代码,这是大家非常非常擅长做的事情。但是并不是所有的开发者都能够把异常处理的非常非常好。因为大家喜欢写按既定的流程能够正确执行的程序,但往往忽略了很多异常的情况。下面带大家从Java语言方面尝试理解一下它是如何对于异常行为进行抽象和设计的。举个简单例子,从旅游坐飞机说起,正常的流程应该是坐飞机起飞,那么想象一下中途有哪些异常场景出现。第一种情况,机场被恐怖份子袭击发生爆炸,虽然机率非常低,但也有可能发生。这种情况相当于发生非常严重的错误,对应在平时开发过程中,其实是系统级别的异常,比如磁盘坏掉,机器宕掉,网络断掉。第二种,假设机场是OK的,但是在去机场的路上,突然之间道路出现拥堵的情况,本来30分钟的路程,额外增加了1个小时的时间,所以必须换成其他交通工具赶到机场。这种相当于编程时异常,这类异常是可以有一些补救的措施的,如刚刚的场景中换成其他交通工具,从而继续让程序表现出我们理想的行为。系统异常与之不同的是,系统异常场景中开发者是没有补救方法的,几乎是无能为力的。第三种情况,假设顺利到达机场,但是护照被拒签无法登机,与上面几种异常不同的是,这种护照被拒签是可以被预测到的,大家都知道是有这种可能的,这种异常场景叫做预检时场景。最后一种,在登机口准备登机时扫描器发生故障,虽然这种异常也算作突发异常,但是是可以登机的。因为这种异常最终会以一种信息方式让机场的维修师会来解决,或者换另一个登机口登机,这类异常叫做可透出异常。

在Java中出现的异常其实可以对上上面的四种异常。首先,第一层级会被抽象为错误和异常,然后异常分为检查异常和未检查异常。大家如果把Java中的异常跟图中的异常进行结合,相信大家会有一些新的输入和理解。

三、P3C项目

大家可能会困惑P3C到底是什么?实际上,P-3C是世界知名反潜机,它有美国克洛希德公司在民用客机的基础上改进而来,绰号“猎户”。“猎户”诞生至今已经40多年了,尽管是一员老将,但在海湾战争中,它还是披挂上阵,为多国部队提供了大量情报。因为它是非常经典的反潜机,所以阿里巴巴也以它作为项目的代号,其中的寓意是以Java开发手册为前提扫描出所有潜在的代码隐患。那么阿里巴巴为何要成立这个项目?主要原因是因为如果单纯地制定了Java开发手册里面的一些规范,它其实是类似于意识形态上的东西,飘在空中,通过口头传达这些规范很难落地,仍然无法保证在开发过程中,不会再犯此类错误。所以在阿里巴巴内部,当时成立了P3C项目组,希望依托于Java开发手册,能够把内容,以及平时的扫描,还有IDE进行一些集成的工作,从而让我们的开发人员能够保证遵循我们的Java开发手册进行工作。

下图中给出了P3C项目地址,放在了Github上。其中主要包含三个部分,第一部分是就是开发手册的扫描问题的实现,是基于PMD实现的。第二部分是IntelliJ IDEA plugin,是一个Java IDE的插件。第三部分是Eclipse的插件。插件的部分会实时的在开发过程中,扫描出的代码中不满足Java开发手册内容的一些代码。

P3C项目目前非常火爆,在刚刚宣布了开源之后,整个社区活跃度是非常之高的。推荐大家也访问一下P3C项目,首先大家可以下载都自己的IDE中集成起来,这样会对大家平时编码的规范性有个很好的督促作用,另外这里也给出了Java开发手册的在线免费下载版本和淘宝购买地址。


作者:mongolguier

原文链接

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你的数据安全么?Hadoop再曝安全漏洞| 黑客利用Hadoop Yarn资源管理系统未授权访问漏洞进行攻击

摘要: 4月30日,阿里云发现,俄罗斯黑客利用Hadoop Yarn资源管理系统REST API未授权访问漏洞进行攻击。 Hadoop是一款由Apache基金会推出的分布式系统框架,它通过著名的 MapReduce 算法进行分布式处理,Yarn是Hadoop集群的…

博文强识|进阶企业大咖

出品 | CSDN云计算 每个周三周五,和小编共同分享优秀博文,一起遨游在知识的海洋。 你需要知道的那些 redis 数据结构(前篇) redis 对于团队中的同学们来说是非常熟悉的存在了,我们常用它来做缓存、或是实现分布式锁等…

php 类似微信下拉菜单,微信小程序模拟下拉菜单开发实例

本文主要和大家分享微信小程序模拟下拉菜单开发实例,希望能帮助到大家。一.知识点1.实现动态显示和隐藏某个控件列表1data:{open:false},showitem:function(){this.setData({open:!this.data.open})},.display_show{display: block;}.display_none{display: none;}2…

算法导论 pdf_学习数据结构和算法最好的书是什么?

-----------通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友。由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜。我这免费写给你看,多宣传原创作者是…

Tensorflow快餐教程(8) - 深度学习简史

摘要: 深度学习简史深度学习简史从机器学习流派说起如果要给机器学习划分流派的话,初步划分可以分为『归纳学习』和『统计学习』两大类。所谓『归纳学习』,就跟我们平时学习所用的归纳法差不多,也叫『从样例中学习』。归纳学习又分…

usb设备驱动程序(一)

代码&#xff1a; #include <linux/atomic.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/usb.h> #include <linux/videodev2.h> #include <linux…

Tensorflow快餐教程(9) - 卷积

摘要&#xff1a; 卷积的计算方法卷积卷积就是滑动中提取特征的过程在数学中&#xff0c;卷积convolution是一种函数的定义。它是通过两个函数f和g生成第三个函数的一种数学算子&#xff0c;表征函数f与g经过翻转和平移的重叠部分的面积。其定义为&#xff1a;h(x)f(x)∗g(x)∫…

商家笑了 设计师哭了,京东+英特尔的AI这招太绝

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;在如今“无促销不电商”的大环境熏陶下&#xff0c;商家需要榨干了脑浆想尽各种奇招&#xff0c;玩法虽多&#xff0c;但万变不离其宗。面对上万、甚至…

明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...

类型别名(type alias)一个名字&#xff0c;是某种类型的同义词。使用类型名有很多好处&#xff0c;能让复杂的类型名字变得简单明了&#xff0c;易于理解和使用。有两种方法可用于定义类型别名。传统的方法是使用关键字typedef :typedef double wages; //wages是double的同义词…

基于OGG Datahub插件将Oracle数据同步上云

摘要&#xff1a;随着数据规模的不断扩大&#xff0c;传统的RDBMS难以满足OLAP的需求&#xff0c;本文将介绍如何将Oracle的数据实时同步到阿里云的大数据处理平台当中&#xff0c;并利用大数据工具对数据进行分析。一、背景介绍随着数据规模的不断扩大&#xff0c;传统的RDBMS…

那些阿里的年轻人

摘要&#xff1a; 今天是年轻人的节日 十九年前&#xff0c;杭州城西一间狭小简陋的民房里 有一群年轻人 他们衣着朴素、口袋里也没什么钱 但每个人的眼神是坚定的、热烈的 他们每天挂在嘴边的 是梦想要做一件改变世界的事儿 1999年&#xff0c;一群杭州的年轻人离开北京&#…

php的添加语句怎么写,php修改语句怎么写

php修改语句是“update student set 字段1新值1,…where id $id”,…;”&#xff0c;其中update语句就是用于修改数据库表中的数据。推荐&#xff1a;《PHP视频教程》PHP sql修改语句语法&#xff1a;$sql “update student set 字段1新值1,…where id $id”,…;注意&#xff…

招人!入职阿里仅1年,我和做AI的程序员薪资翻了2倍!

最近在知乎上&#xff0c;关于AI的这个话题又被顶起来&#xff0c;其中&#xff0c;这条回答让人印象深刻&#xff1a;在这短短的一条信息里&#xff0c;无疑显示出&#xff1a;AI行业缺人&#xff0c;高端岗位80万年薪恐怕也招不来&#xff01;小编上周在一个AI群里&#xff0…

使用Unoconv和LibreOffice进行格式转换实现在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

此项目根据企业真实需求制作而成&#xff0c;希望能帮助大家解决在线预览的问题&#xff01; 此项目已开源&#xff0c;欢迎大家来STAR 软件版本SpringBoot2.2.2.RELEASELibreOffice6.3.2unoconv0.6文章目录一、配置管理① pom② yml③ controller④ 文件格式转换工具类FileFor…

关于CNN图像分类的一份综合设计指南

摘要&#xff1a; 本文是一篇关于使用CNN完成图像分类的综合设计指南&#xff0c;涵盖了一些模型设计、模型优化以及数据处理经验&#xff0c;是一份适合图像分类方向研究者参考的综合设计指南。对于计算机视觉任务而言&#xff0c;图像分类是其中的主要任务之一&#xff0c;比…

从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个

摘要&#xff1a; 从GitHub中整理出的15个最受欢迎的Python开源框架。这些框架包括事件I/O&#xff0c;OLAP&#xff0c;Web开发&#xff0c;高性能网络通信&#xff0c;测试&#xff0c;爬虫等。 Django: Python Web应用开发框架 Django 应该是最出名的Python框架&#xff0c;…

greenplum配置高可用_高可用hadoop集群配置就收藏这一篇,动手搭建Hadoop(5)

01 ssh免密安装02 jdk安装03 hadoop伪分布式安装04 hadoop全分布式完成了前面四步&#xff0c;现在做hadoop的高可用。其实和之前的lvs的高可用差不多的。如果我们有两个namenode节点&#xff0c;分别是node01和node02。假设node01是主节点&#xff0c;node02是从节点&#xff…

聊聊我是如何在面试别人Spring事务时“套路”对方的

戳蓝字“CSDN云计算”关注我们哦&#xff01;“中国最好面试官”我希望把面试当作是一次交流&#xff0c;像朋友那样&#xff0c;而不是像一场Q & A。但也有人觉得&#xff0c;我对应聘者“太好了”&#xff0c;这完全没必要&#xff0c;反正最后他也不会来。好吧&#xff…

JAVA 雪花算法 唯一ID生成工具类

package com.gblfy;/*** Author&#xff1a;JCccc* Description&#xff1a;* Date&#xff1a; created in 15:31 2019/6/12*/ public class SnowflakeIdUtils {// Fields/** 开始时间截 (2015-01-01) */private final long twepoch 1420041600000L;/** 机器id所占的位数 */p…

华为 | 泰山之巅 鲲鹏展翅 扶摇直上九万里

戳蓝字“CSDN云计算”关注我们哦&#xff01; 文 | 阿晶、王银发于上海华为HC大会现场出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;华为在计算产业究竟要怎样LU起袖子加油干&#xff1f;五岳之首、泰山之巅、初升之日、鲲鹏展翅、昇腾万里、华为计…