记录一次bug解决过程:else未补全导致数据泄露和代码优化
2016-08-31 10:58
651 查看
一、总结
快捷键ctrl + alt + 四个方向键 --> 倒置屏幕
未补全else逻辑,倒置查询数据泄露
空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决
SVN冲突解决关键字:<<<<<<< .working ======= >>>>>>> .merge-right.r10329
线上实时查看日志的命令:tail -f -n 200 all.log
二、BUG描述:else逻辑未补全,倒置查询数据泄露
在查询筛选参数的时候,有如下逻辑:
由于未补全orderIds为空的逻辑,导致没有把参数传入,因此全量数据被查询了出来。因此要补全else情况,插入“-1”,做为查询条件。但这里同时要注意,如果数据库中该字段是无符号整型,那么就不可以这样做了。
三、BUG描述:空指针导致线上的bug
上述代码优化了线上空指针的问题,先查询,然后再构造。在构造过程中,如果可能出现字段为空的情况,要记得用逻辑中要处理,并且要用三目运算符对其处理:null == sourceSiteVo.getSiteId() ? StringUtils.EMPTY : sourceSiteVo.getSiteId().toString()。
四、BUG描述:SVN冲突解决
在主干和多分支开发的过程中,在往日常发布代码的过程中,会经常出现合并代码冲突的发生。在冲突的文件中,通常,冲突的地方会有三个标记其冲突位置:
注意,在解决冲突的过程中,建议使用notepad、visual code、sublime等工具来解决冲突,如果使用txt文本编辑器来解决冲突的话,通常会带来编码错误的:java:[1,0] illegal character: \65279,这样的话,可以依次退出当前分之,不要合并到主干truck分支上。即退出部署,再重新部署来尝试解决它。
五、线上实时查看日志的命令
该命令表示,查看all.log文件中最后新增的200行的代码。
六、
快捷键ctrl + alt + 四个方向键 --> 倒置屏幕
未补全else逻辑,倒置查询数据泄露
空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决
SVN冲突解决关键字:<<<<<<< .working ======= >>>>>>> .merge-right.r10329
线上实时查看日志的命令: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解决过程:可维护性和性能优化
- 记录一次bug解决过程:velocity中获取url中的参数
- 记录一次bug解决过程:git深入学习和JDK8新特性
- 记录一次bug解决过程:resultType和手动开启事务
- 记录一次bug解决过程:eclipse集成lombok插件
- GIT : 记录IntelliJ IDEA 合并冲突时的一个bug(冲突解决后代码和本地仓库一样时导致merge失败)
- SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。
- 记录一次bug解决过程:mybatis中$和#的使用
- 记录一次bug解决过程:eclipse Installed JREs 配置引出的问题
- Extjs 中实现combox多选,已经解决了原有的bug 【选择多条记录后,鼠标点击其他空白处,选择的数据丢失,】
- hdu4318 Power transmission 最短路 当数据很大的时候的解决办法 一道题目的解题全过程记录 小水
- [AspNetPager 4.3.3]DataGrid url分页的小Bug导致更新过程无法取得编辑文本框数据
- 主板故障导致服务器不定时频繁重启故障解决过程全记录
- 性能优化-一次OOM的解决经验分享-谈动态扩容可能导致的内存隐患
- 用berkelyDB持久化memcached时bug解决过程记录——第一次读取报MEMCACHED_UNKOWN_READ_FAILURE错误
- 多么痛的领悟-代码优化导致的BUG
- 一次线上GC故障解决过程记录
- 记录一次对代码完全陌生的问题排查过程
- 一次非法关机导致mysql数据表损坏的实例解决