孤尽班第七次课–代码避坑指南
浮点数据的处理
## 浮点数最大的避坑问题 可能就是精度丢失了
1. 单精度的存储实例: 整数部分
改写整数部分 【将整数部分十进值改为二进制】
2. 单精度的存储实例
通常我们可以把十进制的小数部分乘以2,取整数部分作为二进制的一位,剩余小数继续乘以2, 直至不存在剩余小数为止。
是一个无限循环的二进制数所以 十进值小数转换为 二进制的小数的时候会丢失精度。
日期数据的处理
1. Java 中传统日期Api
Date: 表示特定的瞬间,精确到毫秒
SimpleDateFormat: 继承DateFormat 类,主要用来进行格式转换
Calendar: 一个工具类, 为特定瞬间和一组日历字段提供了方法
2. Java8 新增日期Api
LocalDate: 代理日期
LocalTime: 代理时刻
LocalDateTime: 代理具体时间
Instant: 代笔的是时间戳
传统日期API 的问题
所有的日期类都是线程不安全的
日期 时间 时间戳 没有明确对应得类
对于格式化和解析得需求
日期格式化需要注意的问题
在日期格式中分清楚大写的M 和 小写的m ,大写的H 和小写的分别指代意义
1. 表示月份是大写的M
2. 表示分钟则是小写的m
3. 24小时制的是大写的H
4. 12 小时制的则是小写的h
日期处理需要注意的问题 获取当前毫秒数:
1. System,currentTimeMills(); 而不是new Date().getTime()
2. 如果想获取更精确的纳秒级时间值,使用System.nanoTime的方式
3. 在Jdk8 中,针对统计时间等场景,推荐使用Instant 类
控制语句的避坑规范
控制语句之switch (二)
每个case要么通过continue/break/return 等来终止
要么注释说明程序将继续执行到哪一个case 为止
在一个switch 块内,都必须包含一个default 语句并放在最后
控制语句规约(一)
在if/else/for/while/do 语句中必须使用大括号
表达异常的分支时,少用if-else 方式
控制语句强制规约(二)
三目运算符高度注意类型对齐时,可能抛出因自动拆箱导致的NPE 异常
condition? 表达式1: 表达式2
说明: 以下两种场景会触发类型对齐的拆箱操作
1. 表达式1 或者表达式2 的值 只是一个是原始类型
2. 表达式1或表达式2 的值的类型的不一致,会强制拆箱升级成范围更大的哪个类型 。
控制语句好习惯
不要在其他表达式(尤其是条件表达式)中,插入赋值语句
不要在条件判断中执行其它复杂的语句,以提高可读性
控制语句好习惯
避免采用取反逻辑运算符
必须取反逻辑运算
在高并发场景中控制语句规约
在高并发场景中,避免使用“等于” 判断作为中断或退出的条件 如果并发控制没有处理好,容易产生等值判断 “击穿”的情况,使用大于或小于的区间判断条件来代替
需要参数校验的场合
1.调用频次低的方法
2. 执行时间开销很大的方法。此情形中,参数校验时间几乎可以忽略不计,但如果因参数错误导致中间执行回退,或者错误,那得不偿失.
3. 需要极高稳定性和可用性得方法。
4. 对外提供得开放接口,不管是RPC/API/ HTTP 接口
5. 敏感权限入口
6. 公开接口需要进行入参保护,尤其是批量操作的接口。
不需要参数校验的场合
极有可能被循环调用的方法
1. 极有可能被循环调用的方法。但在方法说明里必须注明外部参数检查。
底层调用频度比较高的方法
2. 底层调用频度比较高的方法。毕竟是像纯净水过滤的最后一到,参数错误不太可能到底层才会暴露问题。一般DAO 层与Service 层 都在同一应用中,部署在同一台服务器中,所以DAO的参数校验,可以省略。
被声明成Private
3. 被声明成private 只会被自己代码所调用的方法,如果能够确定调用方法的代码传入参数已经做过检查或者肯定不会有问题,此时可以不参数校验。
优雅的面向对象
抽象 封装 继承 多态
七大设计原则
1. 单一原则
2. 迪米特原则
3. 里氏替换
4. 依赖倒置原则
5. 组合复用原则
6. 隔离原则
7.开闭原则
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77133.html