【命名规约】
抽象类命名使用Abstract或者Base开头
测试类名使用Test结尾
如果使用到了设计模式,在类名中体现具体的模式 OrderFactory LonginProxy
【常量定义】
long类型的初始赋值必须使用大写的L
使用专门的类来维护常量ConfigConsts
包装类全部使用equals判断
所有P0JO类属性必须使用包装数据类型.
定义POJO时不要定义默认值;
构造函数不要加入任何的逻辑 如需要加入放在init方法中
final可提高程序的响应效率
任何类、方法、参数、变量需要控制访问范围,过于宽泛的范围访问不利于模块的解耦。
【集合处理】
只要重写equals 就必须重写hashCode
如果自定义对象作为Map的键,那么必须重写hashCode和equals
集合转数组 必须使用带参传递 以防出现classCastException错误
ConcurrentHashMap key value均不允许为null;
【并发处理】
线程资源必须通过线程池提供,如果不使用有可能造成系统创建大量同类线程而
导致消耗完内存或者过度切换的问题。
线程池必须使用ThreadPoolExecutor去创建,这样的目的是规避资源耗尽的风险。
高并发时应该考虑锁的性能损耗,能用无锁数据结构就不要用锁,能锁区域就
不要锁整体,能用对象锁就不要用类
对多个资源加锁,需要保持一致的加锁顺序,否则有可能会造成死锁.
多线程使用定时任务使用ScheduledExecutorService
CountDownLatch异步转同步时,需要调用countDown方法。
【循环语句】
if 必须有else;
switch必须有default;
不要在条件判断中执行其他复杂的语句,将复杂的逻辑判断的结果赋值给一个有意义的
布尔变量名,以提高可读性。
Math.random使用netInt专用方法
任何数据结构的构造或初始化都应指定大小,避免吃光内存。
对于明确停止使用的代码和配置,如方法、变量、类、配置文件、动态配置属性都应该清理,避免过多的垃圾。
【异常规约】
异常不要用来做流程控制 条件控制 因为异常的处理效率比条件分支低
只能对不稳定代码进行try catch,并且对齐进行区别化的处理
finally块必须对资源对象、流对象进行关闭,有异常也要做try catch
finally 禁止使用return会导致try中禁止执行.
防止NPE问题
自动解箱 Integer为null转int
数据库查询的值为null;
集合中有null;
远程调用返回对象,一律要求NPE
对于Session中获取的数据,建议NPE
级联调用Obj.getA().getB().getC()有可能出现NPE对象。
对于公司外的http/api开放接口必须使用"错误码"
【日志规约】