codereview CodeReview 常见代码问题( 上 )
www.cnblogs.com/lovesqcc/p/9271781.html
线路图
文章图片
常见代码问题
常见的潜在代码问题是直接导致错误、故障或产品功能无法正常工作的类别。
空值
空 value大概是最容易出现的地方之一。常见错误如下:a . NULL值导致空指针异常;b .参数字符串包含前导或后缀空,没有Trim,所以查询为空。出现上述结果的主要原因是:没有这样的记录,由于异常的SQL访问没有找到这个记录,网络调用失败,记录中有脏数据,参数没有传输。
原则上,对于任何异常,我都希望打印出具体的错误消息,并根据错误消息迅速了解原因,而不是一个null,同时也在代码中推敲为什么是空。这样就必须识别程序中可能出现的null,及时检测、捕获和抛出异常。
对于空的值,最好的保护是“防御性编程”。得到对象后,在使用之前一定要判断它是空,并抛出异常,记录错误或者适当做其他处理。有人认为如果语句检测为空会破坏代码的可维护性。我的建议是:
空值检测一定要有, 有胜于无。在空值检测总是存在的前提下, 可以优化空值检测的方法和存在形式。 比如集中于一个类 NullChecker 中管理,并与系统的整体错误处理设计保持一致。集中管理和处理一致性原则可以作为系统设计的一个准则。 这样主流程中只要增加一行调用即可, 既可以天网恢恢疏而不漏地检测对象为空, 也不会让代码显得难看。类NullChecker {
公共静态无效检查空(对象对象,错误错误){
if (obj == null) {引发新的BizException(错误);}
}
}
在参数入口处统一做 trim。 如果在业务逻辑里做 trim , 就会导致有的业务逻辑做了 trim , 有的没做, 体现在产品上就会有令用户困惑的事情发生。 比如搜索和导出业务, 搜索能搜索出来, 导出却没有。未捕获潜在的异常
第二个容易出错的地方是潜在的异常没有被捕获。调用API接口、库函数或系统服务等。仅利用便利性而不采取保护措施的通常会导致影响整体功能的部分故障。最好的保护还是“防御性编程”。要么在当前方法中捕获异常并返回适当的空值或空对象,要么将其抛出给更高级别的处理。
千万不要默默“吞下错误和异常”。这样做的话,出了问题,等着加班,花很多脑细胞。
CodeReview期间一定要仔细问:这里有可能抛出异常吗?抛出异常怎么办?会影响整体服务和退货结果吗?
低性能
性能低下会导致产品功能使用不良、不可用,甚至导致产品失效。
常见情况如下:a .逐个调用单个接口获取数据或循环访问数据库;b .重复创建几乎相同(昂贵)的对象;c .数据库访问、网络调用等服务超时不处理;d .多循环对于大数据处理算法性能低;e .大量字符串拼接时用String代替StringBuilder。
对于A,最好提供批量接口或者批量并发数据采集;对于B,将可重用对象拉出循环,创建一次,使用多次;对于c,设置合理的超时和捕获超时异常处理;对于D,采用预排序或预处理来构造合适的数据结构,使算法的平均性能为O(n)或O(NLOGN);对于E,记住:String用于少量字符串,StringBuilder用于大量字符串,StringBuffer一般不用。
影响范围太大
对多个模块依赖的共同功能进行修改,很容易导致超出当前业务的影响范围的变化,不自觉地破坏其他依赖共同功能的业务。要非常小心。可靠的办法是先查一下公共函数的调用,如果只是为了自己的事情,可以大胆一点;如果存在多个依赖关系,则拉出一个新的函数,拉出原函数的可重用部分,然后基于可重用部分构建一个新的函数。修改原则遵循“开合”原则,尽可能减小修改的影响。
推荐阅读
- 南瓜和面粉最常见的做法,胖嘟嘟的肉虫子,十分可爱
- 省中医名医教路吸氧可以长寿? | 超过两成老人都有!这种症状为什么那么常见?
- 什么时间吃降糖药效果更好?10类常见降糖药,服用时间各不同
- 运动神经元病常见治疗方法有哪些?
- 王者荣耀:新赛季60级奖励终于加入了不常见的皮肤,终于有你了
- 警惕!牙膏中的这种常见物质,会引发肠道炎症
- 从一个善良的姑娘到“恶媳妇”,最常见的三种可能
- 健康公开课 | 家有儿女,冬季常见病应对技能get一下
- 家有儿女,冬季常见病应对技能get一下
- 紧急提醒!女子体内取出2条活虫,竟是这种水果惹祸!四川很常见