记录一次Bug解决过程:可维护性和性能优化
作者:RunforLove 发布时间:[ 2016/8/26 15:46:20 ] 推荐标签:软件测试管理 缺陷管理 性能优化
一、总结
使用某些变量的地方在2次以上的,强烈建议使用枚举值来维护变量,日后方便扩展。
查数据库的方法调用,能合并净量去合并。
二、Bug描述
枚举变量的维护以及方法使用:
public class UsedOnce {
public static enum ruleDetailsEnum {
SOURCEREGIN("原区域"), TARGETREGIN("目的区域"), SOURCECITY("原城市"), TARGETCITY("目的城市"), SOURCESITE("原机房"),
TARGETSITE("目的机房"), DEVICETYPE("设备类型");
private final String strValue;
private ruleDetailsEnum(String strValue){
this.strValue = strValue;
}
public String getStrValue() {
return strValue;
}
public static String getStrValueByName(String name) {
for (ruleDetailsEnum orderDeviceType : ruleDetailsEnum.values()) {
if (name.equals(orderDeviceType.name())) {
return orderDeviceType.getStrValue();
}
}
return null;
}
}
public static void main(String[] args) {
UsedOnce.ruleDetailsEnum e = UsedOnce.ruleDetailsEnum.valueOf("DEVICETYPE");
switch (e.ordinal()) {
case 0:
System.out.println("原区域");
break;
case 6:
System.out.println("设备类型");
break;
default:
System.out.println("没有匹配到");
}
}
}
// 结果输出:设备类型
查询数据库合并性能优化:
JVM堆中缓存当天的数据性能优化:
private Map<String, String> getAssignRates() {
Date start = DateUtil.removeDays(new Date(), 1);
String startTm = DateUtil.toString(start, DateUtil.DATE_FORMAT);
String endTm = DateUtil.toString(DateUtil.removeDays(start, 90), DateUtil.DATE_FORMAT);
List<LogisticsAtomic> list = new ArrayList<LogisticsAtomic>();
/* 缓存入JVM堆中;减少哈希碰撞;且只维护一个数据 */
String now = DateUtil.toString(new Date(), DateUtil.DATE_FORMAT);
Map<String, List<LogisticsAtomic>> oneDayData = WorkOrderCst.ONEDAYDATA;if (oneDayData.keySet().contains(now)) {
list = oneDayData.get(now);
} else {
list = logisticsWorkOrderBo.getLogisticsList90DaysBefore(startTm, endTm);
oneDayData.clear();
oneDayData.put(now, list);
}
Map<String, String> map = new HashMap<String, String>();
for (LogisticsAtomic bean : list) {
if (null != bean.getSpId()) {
map.put(bean.getSpId().toString(), bean.getAssetCounts().toString());
}
}
return map;
}
//带null的数据:JSONUtils.toJSONString(map);
//不带null的数据:JSON.toJSONString(map);
注意:存放在JVM堆中的map要放在枚举变量中。放在方法中,每次new一个Map不正确。此外,JVM的单例必须限定在一个JVM中,像是JVM只会存在一个实例,这句话也是限定在一个 JVM 中的,如果是多个 JVM 会每个 JVM 存在一个实例。java语言层面的单例说的是同一个jvm里面,集群没办法搞。如果你想设置的单例目的是为了数据共享,那数据存数据库或是redis之类的地方。故放在*BoImpl层中,或维护在枚举值变量中,而我们的项目又是部署在集群之上的,故无法保证集群上共享的是同一个Map。
public class WorkOrderCst {
// 维护的数据
public static Map<String, List<LogisticsAtomic>> ONEDAYDATA = new ConcurrentHashMap<String, List<LogisticsAtomic>>();
// 拆单时机房分隔符
public static final String SiteSplit = "#@#";
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11