标签:throw 类信息 注意 不能 含义 就是 append entryset metadata
反例: _name / #Object
2. 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
反例: toubao / lipei。
3. 类名使用UpperCamelCase风格,必须遵从驼峰形式。
正例:CommonUtils / BaseVo
4. 方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。
正例: orderService / getOrderService()
5. 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例: ZK_CONFIG_ROOTNODE
6. 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
7. 包名使用com.hetai.服务名.分层名。
正例: oauth系统的DAO, com.hetai.oauth.dao
8. 如果使用到了设计模式或具有明确职责,建议在类名中体现出具体模式或职责。
正例:ExecutorFactory / AbstractProducer
9. 各分层都需要接口和实现类,实现类用Impl作后缀与接口区别。
正例:OrderServiceImpl实现OrderService接口。
10. 枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。
正例:枚举名字:PolicyIdTypeEnum,成员名称:ID_CARD/ PASSPORT。
11. 各层方法命名规范: 1) 查询的方法用get/ query做前缀。
2) 插入的方法用add 或insert做前缀。
3) 删除的方法用remove 或delete做前缀。
4) 修改的方法用modify/ update做前缀。
5) 获取多个对象的方法用List做结尾。
6) 获取统计值的方法用Count做结尾。
12. 全局常量类名建议“模块名Constant”。
正例:枚举名字:OrderConstant / CommonConstants。
13. 不要出现任何魔法值(即未经定义的常量)直接出现在代码中,应作常量声明。
反例: return "UNDERWRITE_RESULT_" + order_no;
说明:注意serialVersionUID不一致会抛出序列化运行时异常。
说明:在方法执行抛出异常时,可以直接调用POJO的toString()方法打印其属性值,便于排查问题。
2) 对象参数前加final,表示不允许修改引用的指向。
3) 类方法确定不允许被重写。
10. 使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。
正例:values()返回的是V值集合,是一个list集合对象;keySet()返回的是K值集合,是一个Set集合对象;entrySet()返回的是K-V值组合集合
11. 高度注意Map类集合K/V能不能存储null值的情况,如下表格:
集合类 |
Key |
Value |
Super |
说明 |
Hashtable |
不允许为null |
不允许为null |
Dictionary |
线程安全 |
ConcurrentHashMap |
不允许为null |
不允许为null |
AbstractMap |
分段锁技术 |
TreeMap |
不允许为null |
允许为null |
AbstractMap |
线程不安全 |
HashMap |
允许为null |
允许为null |
AbstractMap |
线程不安全 |
在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。
2) 执行时间开销很大的方法,参数校验时间几乎可以忽略不计,但如果因为参数错误导致中间执行回退,或者错误,那得不偿失。
3) 需要极高稳定性和可用性的方法。
4) 对外提供的开放接口,不管是RPC/API/HTTP接口。
5) 敏感权限入口。
代码格式化参考<<eclipse编码规范约定>>
正例:注意线程安全,使用DateUtils。亦推荐如下处理:
private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
说明:如果是JDK8的应用,可以使用Instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替Simpledateformatter,官方给出的解释:simple beautiful strong immutable thread-safe。
说明:Random实例包括java.util.Random 的实例或者 Math.random()实例。 正例:在JDK7之后,可以直接使用API ThreadLocalRandom,在 JDK7之前,可以做到每个线程一个实例。
10. ThreadLocal无法解决共享对象的更新问题,ThreadLocal对象建议使用static修饰。这个变量是针对一个线程内所有操作共有的,所以设置为静态变量,所有此类实例共享此静态变量 ,也就是说在类第一次被使用时装载,只分配一块存储空间,所有此类的对象(只要是这个线程内定义的)都可以操控这个变量;
11. 单例模式推荐使用静态内部类方式实现, 参考com.hetai.common.util. PropertiesUtils;
正例:if(obj != null) {...}
反例:try { obj.method() } catch(NullPointerException e){...};
说明:本规约明确防止NPE是调用者的责任。即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败,运行时异常等场景返回null的情况;
10. 避免出现重复的代码(Don’t Repeat Yourself),即DRY原则。 说明:随意复制和粘贴代码,必然会导致代码的重复,在以后需要修改时,需要修改所有的副本,容易遗漏。必要时抽取共性方法,或者抽象公共类,甚至是共用模块;
正例:<logger name="com.taobao.dubbo.config" additivity="false">;
正例:log.error(各类参数或者对象toString + "_" + e.getMessage(), e);
说明:logger.debug("Processing trade with id: " + id + " symbol: " + symbol); 如果日志级别是warn,上述日志不会打印,但是会执行字符串拼接操作,如果symbol是对象,会执行toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印;
模块 |
说明 |
resource |
服务资源接口层,REST Resource,定义服务对外的REST 接口 |
service |
服务业务层,在service组装业务逻辑 |
sao |
服务远程方法调用层,封装调用其他服务接口 |
dao |
服务持久化层,调用DB接口 |
vo |
服务bean对象 |
common |
服务公共代码,如工具类、常量类等 |
mapping |
调用DB sql配置文件 |
extension |
过滤器、拦截器filter/Interceptor |
handler |
线程处理实现类,参考《线程池使用指引》 |
模块 |
说明 |
dev |
开发环境配置文件 |
commit |
测试环境(api)配置文件 |
commit_stg2 |
测试环境(api_stg2)配置文件 |
commit_app |
测试环境(app)配置文件 |
formal |
正式环境配置文件 |
formal_app |
正式环境(app)配置文件 |
common |
服务公共配置文件 |
说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在CSRF漏洞的应用/网站,攻击者可以事先构造好URL,只要受害者用户一访问,后台便在用户不知情情况下对数据库中用户参数进行相应修改;
标签:throw 类信息 注意 不能 含义 就是 append entryset metadata
原文地址:https://www.cnblogs.com/lqh969696/p/10016054.html