一、总结

  1. 使用某些变量的地方在2次以上的,强烈建议使用枚举值来维护变量,日后方便扩展。
  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 = "#@#";
}

那么可以做到保证在一个集群机器上,只保存一个静态变量ONEDAYDATA。因为类的静态变量是此类的所有实例化对象全局共享的。即指向同一块内存,只要一个对象更改了静态变量,其他对象读到的都是更改后的静态变量。因此从设计上而言,也很容易理解,静态变量也称之为类变量,可以直接使用类名访问而不需要通过类对象访问。这要看你的业务需求,原则上是尽量减少不必要的静态变量。故此处设置为静态变量,可以保证集群的一台机器上,只维护一个静态变量。

//#JVM内存总体四部分:(stack segment、heap segment、code segment、data segment)

//当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中;
//当new 一个对象的时候,此对象放在了heap segment(堆)当中;
//而static的变量或者字符串常量 则存在在 data segment(数据区)中;
//那么类中方法的话,是存在在 code segment(代码区)中了。

mapper层传入一个参数,筛选出最近三个月的数据:

SELECT
COUNT(1)
FROM
idc_work_order_main
WHERE
gmt_create < CONCAT('2016-08-03','23:59:59')
AND gmt_create > date_sub('2016-08-03 00:00:00', INTERVAL 3 MONTH)

一行代码初始化ArrayList:

//ArrayList<String> list_01 = new ArrayList<String>(){{add("1");add("2");add("3");}};
//ArrayList<String> list_02 = new ArrayList<String>(Arrays.asList("1","2","3"));

如何在Navicat中查看一条SQL语句的执行时间:

关于走索引的主键id和不走索引的in查询速度哪个快的情况,结果in比主键索引快,讨论如下:

  1. navicat中如何查看执行一条SQL语句的耗时
  2. 根据主键查询两次那个效率高?

完结。

记录一次bug解决过程:可维护性和性能优化的更多相关文章

  1. 记录一次bug解决过程:velocity中获取url中的参数

    一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...

  2. 记录一次bug解决过程:else未补全导致数据泄露和代码优化

    一.总结 快捷键ctrl + alt + 四个方向键 --> 倒置屏幕 未补全else逻辑,倒置查询数据泄露 空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决 SVN冲突解决关 ...

  3. 记录一次bug解决过程:数据迁移

    一 总结 不擅长语言表达,勤于沟通,多锻炼 调试MyBatis中SQL语法:foreach 问题:缺少关键字VALUES.很遗憾:它的错误报的让人找不着北. 二 BUG描述:MyBatis中批量插入数 ...

  4. 记录一次bug解决过程:git深入学习和JDK8新特性

    一 总结 熟悉廖雪峰git基础; 由于git跟踪的是修改,而不是版本号:因此对于修改撤销的操作,文件在eclipse中依旧有>修改标记,这点不同于svn. 二 BUG描述:熟悉Git基础 在Gi ...

  5. 记录一次bug解决过程:规范变量名称和mybatis的使用以及代码优化

    一.总结 Mybatis中当parameterType为基本数据类型的时候,统一采用_parameter来代替基本数据类型变量. Mybatis中resultMap返回一个对象,resultType返 ...

  6. 记录一次bug解决过程:eclipse集成lombok插件

    一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...

  7. 记录一次bug解决过程:eclipse Installed JREs 配置引出的问题

    一 总结 eclipse Installed JREs 配置引出的问题:编译以来JDK,不是JRE spring boot内嵌tomcat运行程序,tomcat:run 二 Bug描述:eclipse ...

  8. 记录一次bug解决过程:resultType和手动开启事务

    一.总结 二.BUG描述:MyBatis中resultType使用 MyBatis中的resultType类似于入参:parameterType.先看IDCM项目中的实际使用案例代码,如下: // L ...

  9. 记录一次bug解决过程:mybatis中$和#的使用

    一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ...

随机推荐

  1. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  2. SOLID 设计原则

    SOLID 原则基本概念: 程序设计领域, SOLID (单一功能.开闭原则.里氏替换.接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期 引入的记忆术首字母缩略字,指代了面向对象编程和面向对象 ...

  3. 浏览器的兼容模式下的button中文字垂直方向不居中显示

    <button style="cursor:pointer;vertical-align: middle;" >删除</button> 这时候垂直不居中. ...

  4. iOS之绘制虚线

    /*   ** lineFrame:     虚线的 frame   ** length:        虚线中短线的宽度   ** spacing:       虚线中短线之间的间距   ** co ...

  5. 关于javascript中的this关键字

    this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...

  6. Centos 7.0 安装Mono 3.4 和 Jexus 5.6

    2013-07-26 写过一篇<CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4>,CentOS 7在CentOS 6的基础上有很大的调整,本文是这篇文章的更新,主要介 ...

  7. Linux1 在Linux(CentOS)上安装MySql详细记录

    前记:  毕业两年了,前两天换了份工作,由以前的传统行业跳到了互联网行业.之前的公司一直在用WinServer2003+Tomcat+SqlServer/Oracle这套部署环境.对于Linux+To ...

  8. 站在风口,你或许就是那年薪20w+的程序猿

    最近面试了一些人,也在群上跟一些群友聊起,发现现在的互联网真是热,一些工作才两三年的期望的薪资都是十几K的起,这真是让我们这些早几年就成为程序猿的情何以堪!正所谓是站在风口上,猪也能飞起来!我在这里就 ...

  9. 深入浅出Struts2+Spring+Hibernate框架

    一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...

  10. SVN:Previous operation has not finished; run 'cleanup' if it was interrupted

    异常处理汇总-开发工具  http://www.cnblogs.com/dunitian/p/4522988.html cleanup failed to process the following ...