开发手册
晓宇码匠
尽信书,不如无书
展开
-
Java开发手册之服务器
【推荐】高并发服务器建议调小TCP协议的time_wait超时时间。说明:操作系统默认240秒后,才会关闭处于time_wait状态的连接,在高并发访问下,服务器端会因为处于time_wait的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。正例:在linux服务器上请通过变更/etc/sysctl.conf文件去修改该缺省值(秒): net.ipv4.tcp_f...原创 2019-07-17 20:44:21 · 231 阅读 · 0 评论 -
Java开发手册之注释规约
【强制】类、类属性、类方法的注释必须使用Javadoc规范,使用/**内容*/格式,不得使用// xxx方式。说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。【强制】所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常...原创 2019-07-15 10:02:02 · 462 阅读 · 0 评论 -
Java开发手册之控制语句
【强制】在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。【强制】在if/else/for/while/do语句中必须使用大括号。即使只有一行代码,避免采用单行的编码方式:if (condition) statements;...原创 2019-07-15 09:59:59 · 206 阅读 · 0 评论 -
Java开发手册之并发处理
【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。说明:资源驱动类、工具类、单例工厂类都需要注意。【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。正例:public class TimerTaskThread extends Thread { public TimerTaskThread() { super.setNam...原创 2019-07-14 22:16:36 · 181 阅读 · 0 评论 -
Java开发手册之集合处理
【强制】关于hashCode和equals的处理,遵循如下规则: 1) 只要重写equals,就必须重写hashCode。2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。3) 如果自定义对象做为Map的键,那么必须重写hashCode和equals。说明:String重写了hashCode和equals方法,所以我们...原创 2019-07-14 22:13:15 · 121 阅读 · 0 评论 -
Java开发手册之OOP规约
【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。【强制】所有的覆写方法,必须加@Override注解。说明:getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override 可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。【强制】相同参数类型,相同...原创 2019-07-14 22:07:51 · 154 阅读 · 0 评论 -
Java开发手册之代码格式
【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:1) 左大括号前不换行。2) 左大括号后换行。3) 右大括号前换行。4) 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。【强制】 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。详见第5条下方正例提示。空格 a == b 空格反例:if ()...原创 2019-07-14 22:05:18 · 193 阅读 · 0 评论 -
Java开发手册之常量定义
【强制】不允许任何魔法值(即未经定义的常量)直接出现在代码中。反例:String key = "Id#taobao_" + tradeId; cache.put(key, value);【强制】long或者Long初始赋值时,使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。说明:Long a = 2l; 写的是数字的21,还是Long型的2?【推荐】不要使用一个常量类维护所...原创 2019-07-14 21:19:54 · 417 阅读 · 0 评论 -
Java开发手册之命名风格
【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name / __name / $Object / name_ / name$ / Object$【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。正例:alibaba / tao...原创 2019-07-14 21:17:49 · 201 阅读 · 0 评论 -
Java开发手册之其它规范
【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则);【强制】velocity调用POJO类的属性时,建议直接使用属性名取值即可,模板引擎会自动按规范调用POJO的getXxx(),如果是boolean基本数据类型变量(boolean命名不需要加is 前缀),会自动调用...原创 2019-07-15 10:05:10 · 227 阅读 · 0 评论 -
Java开发手册之异常处理
【强制】Java 类库中定义的一类RuntimeException可以通过预先检查进行规避,而不应该通过catch 来处理,比如:IndexOutOfBoundsException,NullPointerException等等。说明:无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过catchNumberFormatException来实现。正例:if (obj != n...原创 2019-07-15 23:46:04 · 248 阅读 · 0 评论 -
Java开发手册之日志规约
【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFa...原创 2019-07-15 23:49:19 · 190 阅读 · 0 评论 -
Java开发手册之二方库依赖
【强制】定义GAV遵从以下规则:1) GroupID格式:com.{公司/BU }.业务线.[子业务线],最多4级。说明:{公司/BU}例如:alibaba/taobao/tmall/aliexpress等BU一级;子业务线可选。正例:com.taobao.jstorm 或 com.alibaba.dubbo.register2) ArtifactID格式:产品线名-模块名。语义不重复...原创 2019-07-17 20:42:46 · 1772 阅读 · 0 评论 -
Java开发手册之应用分层
【推荐】图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web层,也可以直接依赖于Service层,依此类推:开放接口层:可直接封装Service方法暴露成RPC接口;通过Web封装成http接口;进行网关安全控制、流量控制等。终端显示层:各个端的模板渲染并执行显示的层。当前主要是velocity渲染,JS渲染,JSP渲染,移动端展示等。Web层:主要是对...原创 2019-07-17 20:39:28 · 365 阅读 · 0 评论 -
Java开发手册之 ORM映射
【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。说明:1)增加查询分析器解析成本。2)增减字段容易与resultMap配置不一致。【强制】POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行字段与属性之间的映射。说明:参见定义POJO类以及数据库字段定义规定,在<resultMap>中增加映射,是必须的...原创 2019-07-16 20:55:06 · 376 阅读 · 0 评论 -
Java开发手册之SQL语句
【强制】不要使用count(列名)或count(常量)来替代count(),count()是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。【强制】count(distinct col) 计算该列除NULL之外的不重复行数,注意 count(distinct col1...原创 2019-07-16 20:51:46 · 175 阅读 · 0 评论 -
Java开发手册之索引规约
【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。【强制】超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。说明:即使双表...原创 2019-07-16 20:50:12 · 236 阅读 · 0 评论 -
Java开发手册之建表规约
【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint( 1表示是,0表示否)。说明:任何字段如果为非负数,必须是unsigned。正例:表达逻辑删除的字段名is_deleted,1 表示删除,0 表示未删除。【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进...原创 2019-07-16 20:48:05 · 263 阅读 · 0 评论 -
Java开发手册之安全规约
【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容、修改他人的订单。【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。说明:查看个人手机号码会显示成:158****9119,隐藏中间4位,防止隐私泄露。【强制】用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL...原创 2019-07-15 23:52:46 · 393 阅读 · 0 评论 -
Java开发手册之单元测试
【强制】好的单元测试必须遵守AIR原则。说明:单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。A:Automatic(自动化)I:Independent(独立性)R:Repeatable(可重复)【强制】单元测试应该是全自动执行的,并且非交互式的。测试框架通常是定期执行的,...原创 2019-07-15 23:51:24 · 295 阅读 · 0 评论