当前位置: 首页 > news >正文

代码整洁之道,评审问题分享记录

1. 代码评审的成长

在这里插入图片描述

大家好,我是方圆。最近针对近半年的代码评审做了一次总结分享,主要是一些很简单的问题及代码优化注意事项。

2. 详细问题及注意事项

2.1 Integer, Long, String 类型要使用equals来判断相等

在这里插入图片描述

为什么IntegerLong多数情况下用==比较结果也正确呢?

  • intInteger类型比较,都为true,因为会把Integer拆箱后再去比
  • 两个非new出来的Integer(eg: Integer a = 5),使用 ==比较且大小在-128 ~ 127之间,则为true,否则为false。
    这个范围可以使用 -XX:AutoBoxCacheMax=?来进行调整
  • 两个Integer进行比较,其中一个是new出来的==比较的话为false,因为==比较在对引用类型比较时比较的是存放在堆中的地址值

2.2 加密异常需要抛出来

在这里插入图片描述

这种情况下如果加密出现异常被catch住之后,它还会让代码继续向下执行,所以应该在catch块中把异常抛出来

2.3 double类型加减运算精度丢失问题

在这里插入图片描述

这个是老生常谈的问题,在《Effective Java》这本书中有过关于浮点数计算的提醒:浮点数不用于精确计算,可用在实验室取近似值,所以在代码中进行小数运算要使用BigDecimal

2.4 count(字段)替换为count(0)

如果想在字段值为null的时候同样也计数,需要使用count(0),count(字段)当字段为null时不计数

2.5 事务注解需要加上rollbackFor

在这里插入图片描述

如果不加的话,只针对RuntimeException回滚

3. 代码优化

3.1 通用方法复用

在这里插入图片描述

例子中是计算两个时间间隔天数的逻辑,这种通用方法需要加到工具类中复用

3.2 操作资源用try-with-resources资源

在这里插入图片描述

在这里插入图片描述

3.3 SQL 条件字段不要加函数

在这里插入图片描述

否则会使索引失效

3.4 代码注释和方法拆分复用

在这里插入图片描述

  • 代码注释描述清晰,其他小方法进行拆分,尽可能复用代码使逻辑清晰

“That’s all”

相关文章:

  • 【调研】详解Transformer结构——Attention Is All You Need
  • Linux基础组件之消息协议设计概述
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • 微服务Spring Boot 整合 Redis 分布式锁 Redission 实现优惠卷秒杀 一人一单
  • java毕业设计医护人员排班系统Mybatis+系统+数据库+调试部署
  • 分库分表实战之从根上带你吃透MySQL的索引
  • 学习大数据环境搭建
  • STM32——SD卡实验(SDIO方式)
  • JavaWeb(部分)
  • 还在盲目内卷?腾讯强推Spring Security 速成笔记,认证授权一键拿下
  • 【Vue】Vue中的侦听器watch
  • 合宙AIR32F103CBT6刷回CMSIS-DAP固件以及刷ST-LINK固件方法
  • 【C++修炼之路】4. 类和对象(中):日期类实现
  • 【百日刷题计划 第三天】——熟悉语法 语法基础题
  • 【Vue】初识Vue,Vue简介及Vue Devtools配置
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 「译」Node.js Streams 基础
  • 78. Subsets
  • canvas 高仿 Apple Watch 表盘
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS魔法堂:Absolute Positioning就这个样
  • ECMAScript入门(七)--Module语法
  • Java深入 - 深入理解Java集合
  • JS学习笔记——闭包
  • Laravel 菜鸟晋级之路
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Octave 入门
  • 人脸识别最新开发经验demo
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用Swoole加速Laravel(正式环境中)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 正则表达式-基础知识Review
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (9)目标检测_SSD的原理
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm码农论坛 毕业设计 231126
  • (力扣)1314.矩阵区域和
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (生成器)yield与(迭代器)generator
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (已解决)什么是vue导航守卫
  • ***检测工具之RKHunter AIDE
  • ***通过什么方式***网吧
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 反射 Reflect
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net 知识杂记
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET4.0并行计算技术基础(1)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • /dev/sda2 is mounted; will not make a filesystem here!