首页 / 分类 / P3C规范
CATEGORY

P3C规范

共 23 篇已发布文章

{ }}P3C规范

附2:本手册专有名词

附2:本手册专有名词POJO(PlainOrdinaryJavaObject):在本手册中,POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。GAV(GroupId、ArtifactId、Version):Maven坐标,是用来唯一标识jar包。OOP(ObjectOrientedProgramming):本手册泛指类、对象的编程处理方式。ORM

P3C规范2019.07.065247 阅读
{ }}P3C规范

附1:版本历史

版本号更新日期备注1.0.02017.2.9阿里巴巴集团正式对外发布1.0.12017.2.131)修正String[]的前后矛盾。2)vm修正成velocity。3)修正countdown描述错误。1.0.22017.2.201)去除文底水印。2)数据类型中引用太阳系年龄问题。3)修正关于异常和方法签名的部分描述。4)修正final描述。5)去除Comparator部分描述。1.1.02017.

P3C规范2019.07.064651 阅读
{ }}P3C规范

六、工程结构 (三) 服务器

(三)服务器【推荐】高并发服务器建议调小TCP协议的time_wait超时时间。说明:操作系统默认240秒后,才会关闭处于time_wait状态的连接,在高并发访问下,服务器端会因为处于time_wait的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。 正例:在linux服务器上请通过变更/etc/sysctl.conf文件去修改该缺省值(秒):net.ipv4.tc

P3C规范2019.07.064916 阅读
{ }}P3C规范

六、工程结构 (二) 二方库依赖

(二)二方库依赖【强制】定义GAV遵从以下规则:1) GroupID格式:com.{公司/BU}.业务线.[子业务线],最多4级。说明:{公司/BU}例如:alibaba/taobao/tmall/aliexpress等BU一级;子业务线可选。正例:com.taobao.jstorm或com.alibaba.dubbo.register 2) ArtifactID格式

P3C规范2019.07.064884 阅读
{ }}P3C规范

六、工程结构 (一) 应用分层

【推荐】图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web层,也可以直接依赖于Service层,依此类推: 开放接口层:可直接封装Service方法暴露成RPC接口;通过Web封装成http接口;进行网关安全控制、流量控制等。终端显示层:各个端的模板渲染并执行显示的层。当前主要是velocity渲染,JS渲染,JSP渲染,移动端展示等。Web层:主要是对访问控

P3C规范2019.07.064781 阅读
{ }}P3C规范

五、MySQL数据库 (四) ORM映射

【强制】在表查询中,一律不要使用*作为查询的字段列表,需要哪些字段必须明确写明。 说明:1)增加查询分析器解析成本。2)增减字段容易与resultMap配置不一致。【强制】POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行字段与属性之间的映射。 说明:参见定义POJO类以及数据库字段定义规定,在中增加映射,是必须的。在MyBatisGene

P3C规范2019.07.065113 阅读
{ }}P3C规范

五、MySQL数据库 (三) SQL语句

【强制】不要使用count(列名)或count(常量)来替代count(),count()是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。 说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。【强制】count(distinctcol)计算该列除NULL之外的不重复行数,注意count(distinctcol1,

P3C规范2019.07.064708 阅读
{ }}P3C规范

五、MySQL数据库 (二) 索引规约

【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。 说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。【强制】超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

P3C规范2019.07.064795 阅读
{ }}P3C规范

五、MySQL数据库 (一) 建表规约

(一)建表规约【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否)。 说明:任何字段如果为非负数,必须是unsigned。 正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未删除。【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改

P3C规范2019.07.064882 阅读
{ }}P3C规范

四、安全规约

【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容、修改他人的订单。【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明:个人手机号码显示为:158**9119,隐藏中间4位,防止隐私泄露。【强制】用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止S

P3C规范2019.07.064767 阅读
{ }}P3C规范

三、单元测试

【强制】好的单元测试必须遵守AIR原则。 说明:单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。A:Automatic(自动化)I:Independent(独立性)R:Repeatable(可重复)【强制】单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行

P3C规范2019.07.063160 阅读
{ }}P3C规范

二、异常日志 (三) 其它

【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 说明:不要在方法体内定义:Patternpattern=Pattern.compile(规则);【强制】velocity调用POJO类的属性时,建议直接使用属性名取值即可,模板引擎会自动按规范调用POJO的getXxx(),如果是boolean基本数据类型变量(boolean命名不需要加is前缀),会自动调用is

P3C规范2019.07.062824 阅读
{ }}P3C规范

二、异常日志 (二) 日志规约

(二)日志规约【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。import org.slf4j.Logger;import org.slf4j.LoggerFactory;private static final Lo

P3C规范2019.07.062615 阅读
{ }}P3C规范

二、异常日志 (一) 异常处理

(一)异常处理【强制】Java类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch的方式来处理,比如:NullPointerException,IndexOutOfBoundsException等等。 说明:无法通过预检查的异常除外,比如,在解析字符串形式的数字时,不得不通过catchNumberFormatException来实现。 正

P3C规范2019.07.062831 阅读
{ }}P3C规范

一、编程规约 (八) 注释规约

【强制】类、类属性、类方法的注释必须使用Javadoc规范,使用/*内容/格式,不得使用//xxx方式。 说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。【强制】所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常说

P3C规范2019.07.062924 阅读
{ }}P3C规范

一、编程规约 (七) 控制语句

【强制】在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使空代码。【强制】在if/else/for/while/do语句中必须使用大括号。即使只有一行代码,避免采用单行的编码方式:if (condition) statements

P3C规范2019.07.062992 阅读
{ }}P3C规范

一、编程规约 (六) 并发处理

【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明:资源驱动类、工具类、单例工厂类都需要注意。【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。 正例: public class TimerTaskThread extends Thread { &

P3C规范2019.07.062863 阅读
{ }}P3C规范

一、编程规约 (五) 集合处理

【强制】关于hashCode和equals的处理,遵循如下规则: 1)只要重写equals,就必须重写hashCode。 2)因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。 3)如果自定义对象作为Map的键,那么必须重写hashCode和equals。 说明:String重写了hashCo

P3C规范2019.07.062883 阅读
{ }}P3C规范

一、编程规约 (四) OOP规约

【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。【强制】所有的覆写方法,必须加@Override注解。 说明:getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。【强制】相同参数类型,相

P3C规范2019.07.062859 阅读
{ }}P3C规范

一、编程规约 (三)代码格式

【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则: 1)左大括号前不换行。 2)左大括号后换行。 3)右大括号前换行。 4)右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。【强制】左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。详见第5条下方正例提示。 反例:

P3C规范2019.07.062479 阅读