一、总结

  1. 快捷键ctrl + alt + 四个方向键 --> 倒置屏幕
  2. 未补全else逻辑,倒置查询数据泄露
  3. 空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决
  4. SVN冲突解决关键字:<<<<<<< .working     =======     >>>>>>> .merge-right.r10329
  5. 线上实时查看日志的命令:tail -f -n 200 all.log

二、BUG描述:else逻辑未补全,倒置查询数据泄露

在查询筛选参数的时候,有如下逻辑:

            if (StringUtils.isNotBlank(logisticsOrder.getParentIds())) { // 所属复合单
String[] ids = SqlStringUtil.sliptQueryStr(logisticsOrder.getParentIds());
for (String id : ids) {
if (!StringUtils.isNumeric(id)) {
throw new ServiceException(ErrorCode.param_number);
}
} List<Integer> orderIds = assetBeanMapperExt.getOrderIdsByParentIds(SqlStringUtil.formatInStr(logisticsOrder.getParentIds())); if (CollectionUtils.isNotEmpty(orderIds)) {
StringBuffer sb = new StringBuffer();
for (Integer orderId : orderIds) {
sb.append(orderId.toString());
sb.append(",");
}
if (StringUtils.isBlank(logisticsOrder.getQueryIds())) {
_map_result.put("queryIds", sb.substring(0, sb.length() - 1));
} else { // 工单编号、所属复核单 同时查询
_map_result.put("queryIds",
sb.append(SqlStringUtil.formatInStr(logisticsOrder.getQueryIds())).toString());
}
} else {
_map_result.put("queryIds", "-1");
}
}

由于未补全orderIds为空的逻辑,导致没有把参数传入,因此全量数据被查询了出来。因此要补全else情况,插入“-1”,做为查询条件。但这里同时要注意,如果数据库中该字段是无符号整型,那么就不可以这样做了。

三、BUG描述:空指针导致线上的bug

//SiteVo sourceSiteVo = siteMapperExt.getSiteFullInfo(Integer.valueOf(atomic.getOldSite()));
//SiteVo targetSiteVo = siteMapperExt.getSiteFullInfo(Integer.valueOf(atomic.getTargetSite()));
//RuleInfos ruleInfos = constructRuleInfos(sourceSiteVo, targetSiteVo);

  上述代码优化了线上空指针的问题,先查询,然后再构造。在构造过程中,如果可能出现字段为空的情况,要记得用逻辑中要处理,并且要用三目运算符对其处理:null == sourceSiteVo.getSiteId() ? StringUtils.EMPTY : sourceSiteVo.getSiteId().toString()。

四、BUG描述:SVN冲突解决

  在主干和多分支开发的过程中,在往日常发布代码的过程中,会经常出现合并代码冲突的发生。在冲突的文件中,通常,冲突的地方会有三个标记其冲突位置:

<<<<<<< .working

=======

>>>>>>> .merge-right.r10329

  注意,在解决冲突的过程中,建议使用notepad、visual code、sublime等工具来解决冲突,如果使用txt文本编辑器来解决冲突的话,通常会带来编码错误的:java:[1,0] illegal character: \65279,这样的话,可以依次退出当前分之,不要合并到主干truck分支上。即退出部署,再重新部署来尝试解决它。

五、线上实时查看日志的命令

tail -f -n 200 all.log

该命令表示,查看all.log文件中最后新增的200行的代码。

六、

记录一次bug解决过程:else未补全导致数据泄露和代码优化的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 记录一次bug解决过程:可维护性和性能优化

    一.总结 使用某些变量的地方在2次以上的,强烈建议使用枚举值来维护变量,日后方便扩展. 查数据库的方法调用,能合并就净量去合并. 二.Bug描述 枚举变量的维护以及方法使用: public class ...

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

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

随机推荐

  1. 【微信小程序开发】之如何获取免费ssl证书【图文步骤】

    微信小程序要求所有网络请求都走ssl加密,因此我们开发服务端接口需要配置为https 这篇文章介绍一下如何 在 startssl 申请一个免费的ca证书. 1. 打开网站  https://www.s ...

  2. AspNetPager分页控件样式的使用

    分页是Web应用程序中最常用到的功能之一,AspNetPager  简单实用,应用到项目后台中,棒极了! 自定义样式: <style type="text/css"> ...

  3. BPM始终服务于人,落脚于人

    数字经济时代下,云计算.大数据.移动互联已经成为当下企业必须采取的武装力量.随着互联网+.中国制造2025.工业4.0等国家战略的引导与支持,无数的企业在这场数字化浪潮中使尽浑身解数,想要抓住机遇奋力 ...

  4. iOS之开发中一些相关的路径以及获取路径的方法

    模拟器的位置: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs ...

  5. Java 进阶 hello world! - 中级程序员之路

    Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

  6. php利用root权限执行shell脚本

    vi /etc/sudoers , 为apache用户赋予root权限,并且不需要密码,还有一步重要的修改(我被困扰的就是这个地方) root  ALL=(ALL)  ALL apache  ALL= ...

  7. Linux上运行NET

    今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...

  8. 冗余代码都走开——前端模块打包利器 Rollup.js 入门

    之前翻译过一篇文章,介绍了通过 ES2015 的解构赋值语法引入模块,可以让打包工具(browserify)最终编译出来的代码量最小化. 殊不知在 webpack 1.X 版本是无法利用该特性来避免引 ...

  9. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  10. Atitit 图像处理的摩西五经attilax总结

    Atitit 图像处理的摩西五经attilax总结 1. 数字图像处理(第三版)1 2. 图像处理基础(第2版)(世界著名计算机教材精选)1 3. 计算机视觉特征提取与图像处理(第三版)2 4. Op ...