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


    一、总结

    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行的代码。

    六、

  • 相关阅读:
    内存溢出和内存泄漏的区别
    各种集合类的区别以及原理
    如何设置java虚拟机参数
    [机器学习] 简单的机器学习算法和sklearn实现
    [机器视觉] SIFT特征-尺度不变特征理解
    [学习笔记] Markdown语法备忘
    [学习总结] python语言学习总结 (三)
    [学习笔记]Linux下mysql的基础操作
    [学习笔记] C++ 历年试题解析(三)--小补充
    [学习总结] python语言学习总结 (二)
  • 原文地址:https://www.cnblogs.com/RunForLove/p/5824877.html
Copyright © 2020-2023  润新知