为爱奔跑


无论在家出家。必须上敬下和。忍人所不能忍。行人所不能行。代人之劳。成人之美。静坐长思己过。闲谈不论人非。行住坐卧。穿衣吃饭。从幕至朝。一名佛号。不令间断。或小声念。或默念。除念佛外。不起别念。若或妄念一起。当下就要教他消灭。当生惭愧心及忏悔心。从有修持。总觉我工夫很浅。不自矜夸。只管自家。不管人家。只看好样子。不看坏样子。看一切人都是菩萨。唯我一人是凡夫!

一、总结

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

六、

posted on 2016-08-31 10:58  RunforLove  阅读(512)  评论(0编辑  收藏  举报