1.8k 2 分钟

# java 程序日志规范 (转自:http://www.vxzsk.com/584.html) 【强制】应用中不可直接使用日志系统( Log4j、 Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(Abc.class); 【强制】日志文件推荐至少保存 15...
6.2k 6 分钟

# 数据库建表规范 (http://www.vxzsk.com/523.html) 【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是, 0 表示否),此规则同样适用于 odps 建表。 说明: 任何字段如果为非负数,必须是 unsigned。 【强制】表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 正例: getter_admin, task_config, level3_name 反例:...
2.9k 3 分钟

【强制】获取单例对象要线程安全。在单例对象里面做操作也要保证线程安全。 说明: 资源驱动类、工具类、单例工厂类都需要注意。 【强制】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资 源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者 “过度切换” 的问题。 (多线程,使用线程池,就像数据库有数据库连接池,http 有 http 连接池) 【强制】 SimpleDateFormat 是线程不安全的类,一般不要定义为 static...
1.2k 1 分钟

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

【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 说明: 不要在方法体内定义: Pattern pattern = Pattern.compile (规则); 【强制】避免用 Apache Beanutils 进行属性的 copy。 说明: Apache BeanUtils 性能较差,可以使用其他方案比如 Spring BeanUtils, Cglib BeanCopier。 (可以使用 modelmapper) 【强制】 velocity 调用 POJO 类的属性时,建议直接使用属性名取值即可,模板引擎会自动按 规范调用 POJO 的 getXxx (),如果是...
2.6k 2 分钟

本文转自 “V 型知识库”(http://www.vxzsk.com/519.html)(http://www.vxzsk.com/677.html) 【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name /__name/ Object/name/nameObject / name_ / nameObject/name/​name / Object$ (没干过这事) 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,...
2.8k 3 分钟

【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。 反例: String key="Id#taobao_"+tradeId;cache.put(key, value);(这个编译会报错的,通常 ide 会自检) 【强制】 long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。 说明: Long a = 2l; 写的是数字的 21,还是 Long 型的 2? (这个,长得太像了哈哈) 【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存 相关的常量放在类:...
1k 1 分钟

【强制】在一个 switch 块内,每个 case 要么通过 break/return 来终止,要么注释说明程序 将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default 语句并且放在 最后,即使它什么代码也没有。 【强制】在 if/else/for/while/do 语句中必须使用大括号,即使只有一行代码,避免使用下 面的形式: if (condition) statements; 【推荐】推荐尽量少用 else, if-else 的方式可以改写成: if(condition){ … return...
2.9k 3 分钟

【强制】 Map/Set 的 key 为自定义对象时,必须重写 hashCode 和 equals。 正例: String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作 为 key 来使用。 (不想重写,可以把你的对象转成 String) 【强制】 ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出 ClassCastException 异常: java.util.RandomAccessSubList cannot be cast to java.util.ArrayList ; 说明:...
3.7k 3 分钟

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