热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

常见CodeReview过程中发现的问题-续

上一篇列举了一些比较常见的CodeReview问题列表,文末有链接,可追溯查看。本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来。

上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看。本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来。

  • 测试数据不具有代表性,导致功能分支测试覆盖率不够,真正提交测试时很容易暴露出问题,对已对人都不好。

  • 事务使用不合理,是否在事务方法中调用外部服务。有些在只读事务操作数据,在启用事务配置时要特别注意,应避免此类操作。

  • 对于关键数据未进行为空判定,一个空NullPointer异常足以打乱所有正常的业务逻辑走向。

  • 涉及分布式系统间交互数据时,无补偿机制来保证数据的最终一致性。也就是说非正常情况下的保障措施缺失。

  • 系统间关键交易交互时,无交易记录留存,后期数据分析、系统间数据核对基本无从下手,造成一些不弥补的损失。

  • 与第三方系统接口交互,仅考虑同步数据返回,异步数据返回未编写对应方法,导致一部分业务场景下数据不一致。

  • 异常信息处理欠妥当,直接将错误信息返给前端用户,体验较差。此类信息需要包装,尽量对用户友好。

  • 从文件布局考虑,包结构、文件目录结构等安排不合理,文件存放错乱,统一职能文件未能统一规范摆放存储,这给后续系统维护增加难度。

  • 从单个功能处理看,很正常,但推演到全局功能来讲,有些功能类型或流程相同,可以采用模板模式等前人抽象出来的设计模式来重构,提升代码的精简性。

  • 对于后期可能发生变更的功能,缺少潜在可见的扩展性,这个可事先规划好,完全可以兼容可以预见的变更。

  • 代码兼容性比较弱的或者有些淘汰不建议的方法依旧在使用,建议换成兼容性较好的方法或替代方法,一旦时间长远,这些不再兼容,极易引起bug。

  • 多线程中使用了一些线程不安全的对象,比如常见的日期数据格式化类SimpleDateFormate,建议采用concurrent工具包里面的或Guava里面的方法或实体。

  • 采用数据库进行共享锁操作时,存在漏洞。先select再update时有时间空档,容易被其它线程更改数据。应直接采用update的方式直接拿数据,如update table set colum=1 where colum=0

  • 最后一条,也是比较关键的一条。代码逻辑正常,但与业务逻辑不符,好比此处需要一个螺母固定,却放了把瑞士军刀,虽然很强大,但无用。此类问题隐藏较深,所以需要Review人员经验丰富且对业务熟知,否则仅是经验丰富也很容易遗漏掉,造成题不对文的局面。

        

        这两篇内容是笔者实际工作中总结出的几点经验,肯定还有其它Code Review过程产生的其它问题文章里没有提及到的,有兴趣的朋友可以留言在文章底部,把问题抛出来,群策群力不失为一个进步的好办法。

        上一篇传送门:常见Code Review过程中发现的问题


基于SpringCloud的Microservices架构实战案例

介绍几款常用的在线API管理工具

你不得不知的几个互联网ID生成器方案

Spring Boot + Elasticsearch 实现索引的日常维护

软件生命周期与技术人的职业周期




推荐阅读
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • vue使用
    关键词: ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文讨论了在使用Timer控件和键盘触发时可能出现的冲突问题,并提供了解决方法。同时还介绍了如何实现一个类似QQ的小图标只出现在右下角而不在状态栏的程序。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
心雨1006600
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有