自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 集合 ConcurrentHashMap

Java 集合 ConcurrentHashMap

2024-04-24 09:53:25 322

原创 Java 集合 HashMap

Java 集合 HashMap

2024-04-22 14:56:52 477

原创 NIO 理论基础(IO 模型、线程模型)

NIO 理论基础(IO 模型、线程模型)

2024-04-10 15:12:30 311

原创 关于零拷贝(Zero-copy)

具体来说,从操作系统角度看,在读取和写入数据的过程中,CPU 没有参与拷贝数据,所以叫零拷贝。Kafka 则使用了 sendFile。在数据读取和写入的过程中,会发生2次 DMA 拷贝,0次 CPU 拷贝,3次上下文切换,这就是所谓的零拷贝。在数据读取和写入的过程中,会发生2次 DMA 拷贝,2次 CPU 拷贝,4次上下文切换。在数据读取和写入的过程中,会发生2次 DMA 拷贝,1次 CPU 拷贝,4次上下文切换。在数据读取和写入的过程中,会发生2次 DMA 拷贝,1次 CPU 拷贝,3次上下文切换。

2024-04-09 15:28:51 325

原创 Java 基础 IO(字节流、字符流、大文件拷贝)

Java 基础 IO 代码示例

2024-04-09 10:04:13 98 1

原创 Java 网络 IO(BIO、NIO、AIO)

NIO提供的MappedByteBuffer支持支持在内存(堆外内存)中修改文件,可以减少一次数据拷贝。代码示例/*** 说明 1.MappedByteBuffer 可让文件直接在内存(堆外内存)修改,操作系统不需要拷贝一次*///获取对应的通道/*** 参数 1:FileChannel.MapMode.READ_WRITE 使用的读写模式* 参数 2:0:可以直接修改的起始位置* 参数 3:5: 是映射到内存的大小(不是索引位置),即将 1.txt 的多少个字节映射到内存。

2024-04-07 21:56:47 487

原创 Java面试知识点汇总

Java面试知识点汇总

2024-03-14 18:01:05 357

原创 Java文字转二维码

【代码】Java文字转二维码。

2024-01-18 15:52:56 458

原创 并查集Java模板

并查集Java模板

2024-01-04 14:23:32 454

原创 多种背包问题的解法模板

给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。其中第i个物品的重量为w[i],价值为v[i],现在让你用这个背包装物品,最多能装的价值是多少?经典0/1背包的思路就是二维动态规划,定义好二维数组dp[i][j]表示从0-i个物品中选择总重量不超过j的物品的最大价值,确认边界条件,根据每一步的状态和选择找状态转移方程。解法代码。

2024-01-02 16:07:26 849

原创 应用频繁 Full GC 排查记录2022.07.28

应用频繁 Full GC 排查记录

2023-12-27 10:05:19 840

原创 用Java实现LRUCache的2种方式

自己实现双向链表节点Node,再基于Node节点实现一个双向链表DoubleList,配合HashMap可以比较简单地实现一个LRUCache。框架搭好之后,实现起来相对是比较简单的。这里把最近最少使用的元素放在链表的头部,细节上,Node是双向链表,且必须同时存储key和value。在删除最近最少使用元素时,需要使用Node的key去哈希表中删除对应的元素。

2023-11-02 15:17:10 314

原创 LCR 076. 数组中的第 K 个最大元素(快排+堆排序)

【代码】LCR 076. 数组中的第 K 个最大元素(快排+堆排序)

2023-10-27 00:34:32 49

原创 Java赋值语句顺序的一个特例

但是在以下代码中,会先执行等号左侧的 peek() 逻辑,再执行右侧的 pop() 逻辑。按照先右侧后左侧的惯例,这里的代码应该反过来写,即先取值计算后再出栈。但是反过来写的话,就会报错。,在使用单调栈的过程中发现一个等号赋值的特殊现象。正常来说,一般是先执行等号右侧的逻辑,执行完成后再执行等号左侧的逻辑。以下代码是可以正确执行的,猜测可能跟数组有关,具体原因不是很确定。

2023-10-18 18:53:55 619

原创 Java在内存中修改图片格式

【代码】Java在内存中修改图片格式。

2023-10-12 17:51:51 43

原创 Java 生成随机数字验证码

生成指定区间的随机数,只需要用区间下限加上区间内可能存在的数字即可。例如生成[100001, 999999]范围内的数字,只需要用100000加上[1, 900000)范围内的随机数。

2023-09-05 17:38:50 98

原创 Java 之 volatile 关键字

作用volatile 能够保证可见性、有序性,不保证复合操作的原子性。在单线程中,为了提高程序执行效率,编译器和处理器可能对指令进行重排序。单线程环境下,这种优化是没有问题的,但是多线程环境下,如果两个线程之间存在数据依赖,就可能导致程序出错,volatile 可以用来协调不同线程间的变量共享。volatile 的写-读具有和锁的释放-获取相同的内存语义,所以我们有时候也会说 volatile 是轻量级的 synchronized 。具体来说,当写一个 volatile 变量时,JMM 会把该线程对

2021-03-15 17:57:49 97 1

原创 Java 之 final 关键字

目录作用1、构造不可变对象2、确保对象正确初始化实现原理重排序规则底层实现1、写 final 域的实现2、读 final 域的实现对象逸出问题JSR-133为什么要增强 final 的内存语义?作用1、构造不可变对象用于构造不可变对象, final 类型的域是不能修改的。但是如果 final 引用的对象是可变的,那么这些被引用的对象是可以修改的。2、确保对象正确初始化确保线程读取包含 final 域的对象时看到的一定是初始化完成后的 final 域。如果能够通过引用读取到对象,且对象不为空,那么一

2021-03-15 17:11:55 140 1

原创 Java系列文章目录

Java并发finalvolatilesynchronizedReentrantLockReentrantReadWriteLockCountDownLatchSemaphoreCyclicBarrier集合HashMapLinkedHashMapConcurrentHashMapIO零拷贝JVM类加载机制垃圾收集算法垃圾收集器SpringBean的生命周期AOP的底层实现,不同实现方式的区别?为什么说反射存在性能问题?Spring事务与事务传播机制循环依赖

2021-03-15 16:34:35 101

原创 关于synchronized批量重偏向和批量撤销的一个小实验

前段时间学习synchronized的时候做过一个关于批量重偏向和批量撤销的小实验,感觉挺有意思的,所以想分享一下。虽然是比较底层的东西,但是结论可以通过做实验看出来,就挺有意思。我们都知道synchronized分为偏向锁、轻量级锁和重量级锁这三种,这个实验主要是和偏向锁相关的。关于偏向锁,我们又知道,偏向锁在偏向了某一个线程之后,不会主动释放锁,只有出现竞争了才会执行偏向锁撤销。先说结论吧,开启偏向锁时,在「规定的时间」内,如果偏向锁撤销的次数达到20次,就会执行批量重偏向,如果撤销..

2020-11-20 17:22:59 411 2

原创 Spring嵌套事务机制

之前写过一篇文章,是关于Spring嵌套事务机制的,回过头来看发现有不少问题,但暂时不想删掉它,所以再写一篇文章更正一下之前的错误。这里先再次说明一下PROPAGATION_NESTED的作用,若当前存在事务则以嵌套事务方式执行,若不存在事务则创建一个新事务。考虑到动态代理的实现方式,同一个类内部不同方法之间的调用只有外部方法的代理会生效,因此这里的讨论不考虑同一个类内部方法之间互相调用的情况,只考虑不同的类之间的方法进行调用的情况。我们知道嵌套事务底层实际是利用SAVEPOINT实现的,因此外部事务回

2020-11-15 18:55:58 315 1

原创 关于HashMap的一个有趣的小问题

最近被问到了一个很有意思的问题,是关于HashMap的。之前没看到过类似的问题,感觉很有趣,所以想记录一下。问题很简单,基于一个很简单的常识,即重写equals方法必须同时重写hashCode方法。问题的内容是,假如只重写了equals方法,或者只重写了hashCode方法,分别会出现什么情况?因为比较细节,所以通过源码来分析一下。可以考虑这两个场景,①put之后用等价的key再次put,②put之后用等价的key尝试get。首先看只重写equals方法的情况。场景①会发生什么情况?场景②会发生什么情况

2020-11-15 00:19:10 64

空空如也

空空如也

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

TA关注的人

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