- 博客(95)
- 收藏
- 关注
原创 高并发四种IO模型的底层原理
为了避免用户进程直接操作内核,保证内核安全,操作系统将内存(虚拟内存)划分为两部分:一部分是内核空间(Kernel-Space),另一部分是用户空间(User-Space)。在Linux系统中,内核模块运行在内核空间,对应的进程处于内核态;用户程序运行在用户空间,对应的进程处于用户态。操作系统的核心是内核程序,它独立于普通的应用程序,既有权限访问受保护的内核空间,也有权限访问硬件设备,而普通的应用程序并没有这样的权限。内核空间总是驻留在内存中,是为操作系统的内核保留的。
2025-07-15 23:19:52
784
原创 Java 并发AQS为什么是双向链表
AQS采用双向链表设计的主要原因在于其高效性:双向链表便于快速插入/删除节点(如线程中断时移除节点),能直接访问前驱节点判断线程状态,减少头部竞争,支持条件队列高效迁移,以及从尾部遍历快速定位线程。这些特性使双向链表成为AQS实现高并发同步机制的最佳选择,有效提升了线程管理和同步操作的效率。
2025-07-11 22:48:55
282
原创 Java 并发 Monitor机制
设objectX是任意一个对象,monitorX是这个对象对应的内部锁,假设有线程A、B、C同时申请monitorX,那么由于任意一个时刻只有一个线程能够获得(占用/持有)这个锁,因此除了胜出(即获得了锁)的线程(这里假设是B)外,其他线程(这里就是A和C)都会被暂停(线程的生命周期状态会被调整为BLOCKED)。如果有个线程执行了objectX.wait(),那么该线程就会被暂停(线程的生命周期状态会被调整为WAITTING)并被存入objectX的Wait Set(以下记为waitSetX)之中。
2025-07-09 17:20:38
868
原创 Redis 持久化
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。命令有那么只要满足以下三个条件中的任意一个,BGSAVE。
2025-06-26 23:02:00
328
原创 Redis 为什么选用跳跃表,而不是红黑树
一般来说,平衡树每个节点包含2个指针(分别指向左右子树),而skiplist每个节点包含的指针数目平均为1/(1-p),具体取决于参数p的大小。而哈希表在保持较低的哈希值冲突概率的前提下,查找时间复杂度接近O(1),性能更高一些。Redis只在两个地方用到了跳跃表,一个是实现有序集合键(zset),另一个是在集群节点中用作内部数据结构,除此之外,跳表在Redis里面没有其他用途。2)平衡树的插入和删除操作可能引发子树的调整,逻辑复杂,而skiplist的插入和删除只需要修改相邻节点的指针,操作简单又快速。
2025-06-26 23:01:00
233
原创 Redis 缓存穿透、雪崩、击穿
缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。代码流程想象一下这个情况,如果传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象。就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。即便是采用UUID,也是很容易找到一个不存在的KEY,进行攻击。
2025-06-26 22:59:17
278
原创 Java 并发掌握AQS的原理及应用
本文深入解析了Java并发编程中的AQS(AbstractQueuedSynchronizer)框架及其应用。主要内容包括: AQS是Java同步类(Lock、Semaphore等)的基础框架,提供原子状态管理、线程阻塞/唤醒和队列模型功能 以ReentrantLock为例,对比分析其与synchronized的特性差异,展示AQS在实际锁实现中的应用 详细剖析AQS的五层架构设计,从API层到底层数据结构,重点讲解独占锁的实现机制 介绍AQS核心数据结构Node,解析CLH变体队列的节点实现和状态管理 通
2025-06-18 14:46:46
797
原创 JVM 四种垃圾收集算法
标记-清除算法是最基础的收集算法,如同它的名字一样,算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,标记过程其实就是通过引用计数算法或者根搜索算法来判断对象是否存活。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。它的主要不足有两个:一个是效率问题,标记和清除两个过程的效率都不高;
2025-06-16 10:48:09
815
原创 Java 中 Synchronized和Static Synchronized的区别
Java 中 Synchronized和Static Synchronized的区别
2025-05-14 10:30:00
350
原创 Java 禁止在 foreach 循环里进行元素的 remove/add 操作
Java 禁止在 foreach 循环里进行元素的 remove/add 操作
2025-05-13 13:01:14
673
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人