自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 @AllArgsConstructor详解

Lombok 实际是直接向 AST 中注入构造器节点,最终产出的字节码与手写构造器完全一致,不引入运行时依赖。反编译 class 会看到标准的构造方法实现。后,编译器阶段会自动添加一个包含“全部字段参数并逐一赋值”的构造器,而在源代码中无需手写。在 Java 编译阶段扫描到。(且未在声明处赋值)的成员字段。

2025-11-28 15:31:50 208

原创 对比EasyExcel和流式输出CSV文件的性能差距

Excel (.xlsx) 文件具有固定的结构,包括文件头、数据行和文件尾。因此,EasyExcel 需要所有数据才能正确构建文件,无法实现逐行实时推送(因为文件头和尾必须在最后写入)。相比之下,CSV 文件虽然导出时体积较大,但支持实时逐行传输。

2025-10-30 11:59:16 436

原创 单线程红黑树对比多线程跳表

但是,如果excel的列过多,导致每行的处理时间增加,例如当前的1ms(较为极端,我的实际场景,写入1万条记录平均耗时2.5s-2.8s),跳表有压倒性的优势。因为最近在进行百万计Excel导出优化,发下apache.poi的底层实现是基于TreeMap的,在进行多线程改写的时候遇到了困难,因此相对下两者的性能差距。可见,在插入性能足够好的前提下,红黑树并不支持多线程优化,但是本身单线程的性能已经足够优秀。ConcurrentSkipListMap多线程插入1万条数据耗时: 3620 毫秒。

2025-10-23 18:14:18 165

原创 HashMap扩容机制

在treeifyBin方法中,出现了条件2,MIN_TREEIFY_CAPACITY,如果tab,也就是数组的长度小于64,则先进行resize(),而不直接转为红黑树。如果不是树节点,先计数,大于8个节点,就将当前链表转为红黑树,也就是treeifyBin。在HashMap源码中,有三个变量控制链表和红黑树之间的转换。如果出现了hash碰撞,首先检查是否是二次插入相同的key。在每次进行put操作时。实际上执行的时putVal方法。如果已经是红黑树了,直接插入树节点。如果没有,就直接存入新增的节点。

2023-08-07 16:49:15 172 1

原创 Java多线程,获取线程池中线程的返回结果

Future类的get()方法会阻塞主线程,导致多线程执行变成了单线程。

2023-08-03 16:14:56 1235

原创 判断线程中断不同JDK版本的区别interrupted()

这里将native做的事情更详细的展示出来了,就是判断当前线程中断标识的状态,如果是true,那么就重置为false,再调用navite方法。在JDK1.8中,interrupted()方法的源码是这样的,是通过调用native方法进行的判断,具体的做法还得阅读cpp源码。比较好奇是如何重置中断标识的,这里比较了一下jdk1.8和jdk18之间的区别,发现源码在这部分有很大的不同。

2023-07-13 17:25:59 188 1

原创 JavaJUC不指定线程池的情况下,ForkJoinPool不从1开始

今天遇到一个奇怪的问题,在学习JUC(java.util.concurrent)时,不指定线程池的情况下,线程是会使用JVM默认的ForkJoinPool,但是运行的结果,线程编号并不是从1开始的,而是9,比较好奇为什么会出现这种情况。插一嘴,我这里是在Spring框架里测试的,所以怀疑可能是Spring初始化的时候有线程跑在了这个方法之前,但是后来新建了maven项目,发现还是从9号开始的。开始我怀疑是可能存在之前的线程没有清除干净导致的,但执行后可以说明,并不是。遗留一下,以后有问题再再复述。

2023-07-10 20:15:30 165 1

原创 LinkedHashMap底层实现

首先,LinkedHashMap的底层实现是双向链表,是在HashMap.Node的基础上添加了双向指针。accessOrder是LinkedHashMap独有的一个变量,true是访问顺序,false是插入顺序。既然是链表,相对的就会有插入和删除。在LRU实现里,一个元素的key同时在HashMap和自定义的LinkedHashMap中保存两次,满足查询速度和删除速度。在这个方法的说明中,提到的,可以通过override重写这个方法进行插入。在进行插入时,当前节点和头节点不为空,并且容量没有达到上限。

2023-07-07 11:22:23 317 1

原创 深度学习简单的结果重定向

之前在训练的时候,有些开源没有配置完善的logger,没有加入tensorboard,只是通过控制台输出的方式显示每个迭代的结果,最近加个简单的结果重定向,仅修改了main的部分,可以直接将本次训练的结果保存在以时间命名的txt格式的日志中。足够简单,基本够用。

2023-06-07 10:18:27 115 1

原创 光度立体(Photometric Stereo)领域中的GBR问题

对GBE问题的简单描述

2022-08-19 20:18:05 793

原创 数据预处理-三光源图片分类

个人笔记

2022-08-18 11:16:19 171

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除