記錄一次bug解決過程:else未補全致使數據泄露和代碼優化

1、總結java

  1. 快捷鍵ctrl + alt + 四個方向鍵 --> 倒置屏幕
  2. 未補全else邏輯,倒置查詢數據泄露
  3. 空指針是最容易犯的錯誤,數據的空指針,能夠廣泛採用三目運算符來解決
  4. SVN衝突解決關鍵字:<<<<<<< .working     =======     >>>>>>> .merge-right.r10329
  5. 線上實時查看日誌的命令:tail -f -n 200 all.log

2、BUG描述:else邏輯未補全,倒置查詢數據泄露數據庫

在查詢篩選參數的時候,有以下邏輯:app

            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」,作爲查詢條件。但這裏同時要注意,若是數據庫中該字段是無符號整型,那麼就不能夠這樣作了。編輯器

3、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()。優化

4、BUG描述:SVN衝突解決編碼

  在主幹和多分支開發的過程當中,在往平常發佈代碼的過程當中,會常常出現合併代碼衝突的發生。在衝突的文件中,一般,衝突的地方會有三個標記其衝突位置:atom

<<<<<<< .working
 
=======

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

  注意,在解決衝突的過程當中,建議使用notepad、visual code、sublime等工具來解決衝突,若是使用txt文本編輯器來解決衝突的話,一般會帶來編碼錯誤的:java:[1,0] illegal character: \65279,這樣的話,能夠依次退出當前分之,不要合併到主幹truck分支上。即退出部署,再從新部署來嘗試解決它。spa

5、線上實時查看日誌的命令指針

tail -f -n 200 all.log

該命令表示,查看all.log文件中最後新增的200行的代碼。

6、

相關文章
相關標籤/搜索