Java最佳实践
文章平均质量分 84
java卓越工程实战, 让你的代码变得更加优雅。
庄家钜Java
EasyExcel作者,互联网大厂程序员。
展开
-
java 中 i++ 到底是否线程安全?
大家在写代码中i++经常用到,那大家是否知道他是否安全的?更进一步的问为什么呢?今天我们就一起深入研究中i++。为什么i++是线程不安全的?为什么是线程安全的?的源码解读首先给我们的编辑器安装一个插件专门用来看直接码的。int i = 0;// IINC 1 1 将指定int型变量增加指定值 线程不安全i++;//ILOAD 1 将指定的int型本地变量推送至栈顶//ICONST_1 将int型1推送至栈顶//IADD 将栈顶两int型数值相加并将结果压入栈顶。原创 2024-07-26 20:53:46 · 527 阅读 · 0 评论 -
史上最详细的 HashMap 的 get 方法的源码注释
HashMap 大家工作中遇到的太多了,已经成了必须使用的类了, 在面试的时候 HashMap 基本是必问题,但是很多同学只是打开看过原理,没有真正的去研究过。今天我们就一起来看看 HashMap 的 get/remove 方法的源码,保证你从来没见过这么详细注释的源码。完全熟悉 HashMap 的 get/remove 的原理HashMap 是怎么用最高的性能来实现移除操作的?原创 2024-07-24 20:51:29 · 773 阅读 · 0 评论 -
史上最详细的 HashMap 的 put 方法的源码注释
HashMap 大家工作中遇到的太多了,已经成了必须使用的类了, 在面试的时候 HashMap 基本是必问题,但是很多同学只是打开看过原理,没有真正的去研究过。今天我们就一起来看看 HashMap 的 put 方法的源码,保证你从来没见过这么详细注释的源码。完全 HashMap 的 put 的原理为什么 HashMap 里面 table 数组长度一定是2的次幂?HashMap 是如何 resize table 数组的?做了哪些性能优化?原创 2024-07-23 22:26:49 · 867 阅读 · 0 评论 -
手把手带你写一个精简版 HashMap 的 get 方法
HashMap 大家工作中遇到的太多了,已经成了必须使用的类了, 在面试的时候 HashMap 基本是必问题,但是很多同学只是打开看过原理,没有真正的去研究过。里面是大佬写代码,为了性能和我们的业务代码写法差别很大,今天我带大家手写一个简单的 get 和 remove 方法,保证用大家看得懂的代码来写。需要看 put 方法实现的可以点开首页自己查找。最近2次课程带大家手写了HashMap的put、get、remove 几个核心的方法,大家一定要自己去尝试写着试试,这样才不会忘记。原创 2024-07-22 20:45:12 · 581 阅读 · 0 评论 -
手把手带你写一个精简版 HashMap 的 put 方法
HashMap 大家工作中遇到的太多了,已经成了必须使用的类了, 在面试的时候 HashMap 基本是必问题,但是很多同学只是打开看过原理,没有真正的去研究过。里面是大佬写代码,为了性能和我们的业务代码写法差别很大,今天我带大家手写一个简单put 方法,保证用大家看得懂的代码来写。今天带着大家了手写了 HashMap 的 put方法,大家是不是感觉 HashMap 原来可以这么简单,看过还需要自己去试一下哟。下一节会给大家介绍 HashMap 的 get 方法,大家敬请期待。原创 2024-07-19 21:54:25 · 1327 阅读 · 0 评论 -
Java对象复制系列六: 史上最快的对象复制工具 Mapper Struct 原理浅析
Mapper Struct 是目前最好的 Java 对象复制的工具之一。上一节我们介绍了 Mapper Struct 高阶应用,今天我们来看下为什么可以做到这么快。今天带着大家了解了为什么 Mapper Struct 为上面这么快,知根知底以后大家可以在工作中使用起来了,本人在项目中引入收到的反馈非常棒,绝对是一款项目必备的工具。给大家推荐一个非常完整的Java项目搭建的最佳实践,也是本文的源码出处,由大厂程序员&EasyExcel作者维护。原创 2024-07-18 22:20:13 · 564 阅读 · 0 评论 -
Java对象复制系列五: 最快速度、方便的对象复制工具 Mapper Struct 的高阶应用
Mapper Struct 是目前最好的 Java 对象复制的工具之一。上一节我们讲到了 Mapper Struct 的应用,以及测试了他的性能,发现他的性能已经无限接近直接 get/set 了。今天我们来讲一下如何集成spring 以及一些高阶用法。让你在工作中各种对象转换游刃有余。今天给大家介绍了各种高阶的使用方法,平时工作应该完全胜任了,代码会别的特别优雅,把复杂的逻辑写到转换器里面,代码会变得特别优雅。原创 2024-07-17 22:31:26 · 602 阅读 · 0 评论 -
Java对象复制系列四: 还在使用 Spring BeanUtils 复制属性?这个工具性能秒杀它
我们在平时的工作中经常会遇到两个对象的拷贝,很多同学使用 Spring BeanUtils ,感觉性能不错。但是他无法解决属性名不一样的情况,也无法解决属性类型的转换,性能和原生的 get/set 比也差的很多。今天我来介绍一款性能堪比原生 get/set 的对象复制工具:MapperStruct。对 Spring BeanUtils 或者 Apache BeanUtils 原理好奇的同学可以去主页查看对应的文章。原创 2024-07-16 21:40:23 · 901 阅读 · 0 评论 -
Java对象复制系列三: 手把手带你写一个 Spring BeanUtils
上一节我带大家手写了一个 Apache BeanUtils,并阅读了源码,大家应该都自己去阅读过源码了吧?今天我大家手写一个 Spring BeanUtils,不像 Apache BeanUtils 我们就写了一个简单的案例,这次我们要写一个完整的 Spring BeanUtils 并带上和 Apache BeanUtils ,看看我们自己写的和 Apache BeanUtils 性能会有啥差别?原创 2024-07-15 20:48:00 · 1020 阅读 · 0 评论 -
Java对象复制系列二: 手把手带你写一个Apache BeanUtils
上一篇文章我们讲到了 Apache BeanUtils 性能相对比较差,今天我不仅仅要带你学习源代码 ,更要带你手把手写一个Apache BeanUtils。今天学习了 Apache BeanUtils 的源码,总体上就是一个缓存+反射的调用,看是记不住的,大家赶快打开自己的电脑跟几遍源码吧。后面还会带大家看 Spring BeanUtils 的源码,欢迎持续关注。原创 2024-07-12 21:12:30 · 2001 阅读 · 0 评论 -
Java对象复制系列一: Apache 这么常用的工具类,性能居然如此差?
对象复制是编码过程中非常超级常见,为了方便大量字段复制,一般都会使用 Apache 的 BeanUtils 或者 Spring 的 BeanUtils。但是大家有没有想过,这两个 BeanUtils 类的有啥区别?性能到底好不好?今天我就带大家来测试下,结果可能会出乎大家意料。所以大家在工作中尽量使用 Spring BeanUtils 来替换 Apache BeanUtils,这个替换成本非常低,但是效果收货很不错。为啥 Spring BeanUtils 比 Apache BeanUtils 性能好。原创 2024-07-11 22:01:44 · 983 阅读 · 0 评论 -
大厂面试必备系列:一文彻底搞懂 Jdk 动态代理
大家在面试中经常被问到 Cglib 和 JDK动态代理有啥区别?然后每次回答都是 Jdk 动态代理是实现接口。这个回答当然是对的,但是太敷衍了,没得加分,今天我带大家深入了解下,带你搞清楚到时实现了啥东西。通过这篇文章给大家普及了 Jdk 动态代理的基础知识,让 Jdk 动态代理变的不在神秘,大家有时间就去动手试试吧,试过才是自己的。原创 2024-07-09 22:58:56 · 525 阅读 · 0 评论 -
大厂面试必备系列:一文彻底搞懂 Cglib 代理
大家在面试中经常被问到 Cglib 和 JDK动态代理有啥区别?然后每次回答都是 Cglib 通过创建目标类的子类来实现代理。这个回答当然是对的,但是太敷衍了,没得加分,今天我带大家深入了解下。通过这篇文章大家是不是对吹的神乎其技的 Cglib 有了新的理解,实际上他比大家想象的容易非常多,只是大家没有时间去实践一下,大家去动手试试吧,试过才是自己的。原创 2024-07-08 21:24:34 · 425 阅读 · 0 评论 -
java 开源项目是如何将多个 module 版本统一配置的?
现在大部分开源项目也包括我们自己的项目,现都会创建model,然后每个model都会配置一个版本,在升级版本的时候需要一个个的去修改。原创 2024-07-05 20:37:58 · 540 阅读 · 0 评论 -
基于hibernate-validator,java前端入参校验最佳实践
今天要给大家介绍的是基于 spring + hibernate-validator 完成前端入参校验。原创 2024-07-05 20:36:59 · 557 阅读 · 0 评论 -
告别代码中遍地的 try-catch,使用 spring 全局统一异常处理
今天要给大家介绍的是如何告别业务代码中大量的try-catch,让你专注于业务代码而不用考虑异常处理。大家是不是在业务代码里面经常看到这种代码:在每个类里都写上这些代码,不仅仅看起来丑陋,后续维护也非常麻烦,万一要改个异常或者日志,要改一万个地方。今天我要手把手教大家使用使用统一拦截器来告别这种丑陋的代码。基本思路使用提供的注解来统一拦截异常,并返回给前端。原创 2024-07-04 22:13:43 · 528 阅读 · 0 评论 -
Java中使用统一Reuslt对象最佳实践
在工作中看到很多项目都封装了一个统一的Result对象来封装返回值,但是封装的经常不太友好,是否好奇大厂是怎么来做结果封装的呢?今天我来分享一个非常完善的实战。我们可以到很多大项目都会使用统一的Result对象来封装返回值,那使用统一的Result对象有什么好处呢?提升开发效率:统一封装Result可以显著提升开发效率。开发者无需在每个方法中重复编写错误处理和数据封装的逻辑,而是可以集中精力于业务逻辑的实现。这种封装方式简化了代码结构,使得开发人员能够快速地编写和测试代码。原创 2024-07-03 23:30:34 · 907 阅读 · 1 评论 -
Java到底能不能使用异常来控制流程
我们经常在很多项目里面看到用异常来处理业务逻辑,发现不符合逾期直接抛出异常,然后在最外面捕获异常统一处理,这样使用非常方便。但是又有很多文章写着异常处理性能,所以不建议使用异常来做流程控制。那么问题来了:究竟能不能用异常来做流程控制?效率低是低多少?看完这一篇文章你就知道了。原创 2023-02-09 16:25:19 · 538 阅读 · 0 评论