[汇总]代码级别经验
用1个月重构了同事写的烂代码,我总结出了15条重写烂代码的经验!
分享几个工作里实用的代码优化技巧,保证领导看了你的代码都点赞!
在涉及到精度计算的过程中,我们尽量使用 String 类型来进行转换。
很不起眼的6个bug,90%的程序员就算写了10年代码也肯定都踩过!
也有的同学会热衷用类型 TIMESTEMP
存储日期,因为类型 TIMESTAMP
占用 4 个字节,比 DATETIME
小一半的存储空间。
但若要将时间精确到毫秒,TIMESTAMP
要 7 个字节,和 DATETIME
8 字节差不太多。另一方面,现在距离 TIMESTAMP
的最大值‘2038-01-19 03:14:07
’已经很近,这是需要开发同学好好思考的问题。
总的来说,我建议你使用类型
DATETIME
。对于时区问题,可以由前端或者服务这里做一次转化,不一定非要在数据库中解决。
PropertyValuesProvider在日期绑定和校验中的应用
使用Google Guava可以让你快乐编程,写出优雅的JAVA代码
为什么要谨慎使用ArrayList中的subList方法
ArrayList的subList的返回值不能强转成ArrayList
因此,Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。竞争的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。这也是我们在大循环里面经常会写一句Thread.Sleep(0) ,因为这样就给了其他线程比如Paint线程获得CPU控制权的权力,这样界面就不会假死在那里。
把 HashMap 换成了性能更好的 IntObjectHashMap,数据压缩,节约了 591 台机器
Disruptor 是一个开源框架,研发的初衷是为了解决高并发下队列锁的问题,最早由 LMAX 提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理 6 百万笔订单。
Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!
- 使用Channel
- 使用内存映射文件
- 使用Pipe
Java 8 的 Stream 不好调试?别逗了!IDEA 调试就能轻松搞定!
Database Repository 在batch update/delete时出错,因为数据量太大
1 2 3 |
import com.google.common.collect.Lists; Lists.partition(elements, 100).forEach(aaaaRepository::deleteInBatch); |
如果要存ip地址,用什么数据类型比较好 当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储IP地址,而不是使用字符串
基本类型和包装类型的区别
InternalThreadLocal比ThreadLocal叼多了,吓得我赶紧分享出来
程序员新人上午使用 isXxx 形式定义布尔类型,下午就被劝退?
支付宝二面:使用 try-catch 捕获异常会影响性能吗?大部分人都会答错!
try catch
不会造成巨大的性能影响,换句话说,我们平时写代码最优先考虑的是程序的健壮性
0.0和-0.0调用equals方法是否相等:
一个普通的对象,能够作为 HashMap 的 Key 么?可以的,但需要注意重写 hashCode 和 equals 方法。如果忘记重写的话,大概率会造成内存泄漏。
首先拿出了 Key,然后判空,再塞值。这明显不是一个原子操作。使用 putIfAbsent 方法是一个原子操作。Synchronized 也行,但是不高效。
SpringBoot 官方强烈推荐,连接池Hikari