自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 HashMap已存在的值是否覆盖

Java HashMap已存在的值是否覆盖

2025-07-10 22:15:05 512

原创 Java HashMap 扩容数组中单链表的位置变化分析

Java HashMap 扩容数组中单链表的位置变化分析

2025-07-10 17:32:51 176

原创 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

原创 MySQL 间隙锁

MySQL 间隙锁

2025-07-09 17:11:31 214

原创 MySQL 多版本并发控制MVVC

MySQL 多版本并发控制MVVC

2025-07-09 17:10:13 746

原创 LRU算法原理及实现,最近最少使用算法

LRU算法原理及实现,最近最少使用算法

2025-07-05 17:30:49 740

原创 数据结构,跳跃表的实现原理和适用场景

数据结构,跳跃表的实现原理和适用场景

2025-07-05 15:29:50 841

原创 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

原创 Redis 对象和数据结构

对象的typeTYPETYPE命令的实现方式也与此类似,当我们对一个数据库键执行TYPE。

2025-06-26 22:57:46 518

原创 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

原创 MySQL 理解B树与B+树

MySQL 理解B树与B+树

2025-05-21 10:18:27 1156

原创 MySQL 索引的增删改查

MySQL 索引的增删改查

2025-05-21 10:10:53 583

原创 Java 线程池 ThreadPoolExecutor

Java 线程池 ThreadPoolExecutor

2025-05-20 17:58:23 895

原创 MySQL的锁机制

MySQL的锁机制

2025-05-19 14:00:00 1127

原创 MySQL 理解事务以及存在的并发问题

MySQL 理解事务以及存在的并发问题

2025-05-19 09:45:00 1061

原创 java8 Stream 分组groupingBy 判断空的几种场景

java8 Stream 分组groupingBy 判断空的几种场景

2025-05-19 08:30:00 282

原创 Elasticsearch 初步认识

Elasticsearch 初步认识

2025-05-18 15:06:36 553

原创 Java多线程并发JUC包 Exchanger 交换者

Java多线程并发JUC包 Exchanger 交换者

2025-05-16 14:00:00 225

原创 Java多线程并发JUC包 Semaphore 计数信号量

Java多线程并发JUC包 Semaphore 计数信号量

2025-05-16 13:30:00 266

原创 Java多线程并发JUC包 CyclicBarrier 栅栏

Java多线程并发JUC包 CyclicBarrier 栅栏

2025-05-16 09:45:00 189

原创 Java多线程并发JUC包 CountDownLatch 闭锁

Java多线程并发JUC包 CountDownLatch 闭锁

2025-05-16 09:00:00 109

原创 Java多线程并发 Unsafe与CAS的理解

Java多线程并发 Unsafe与CAS的理解

2025-05-15 13:05:06 738

原创 Java多线程并发JUC包 ReentrantLock 显示锁

Java多线程并发JUC包 ReentrantLock 显示锁

2025-05-15 10:15:00 164

原创 Java源码ArrayList与LinkedList的最大容量

Java源码ArrayList与LinkedList的最大容量

2025-05-15 09:15:00 262

原创 Java 源码 HashMap源码分析

Java 源码 HashMap源码分析

2025-05-14 19:47:12 933

原创 Java 多线程应用循环输出ABC

Java 多线程应用循环输出ABC

2025-05-14 13:47:31 372

原创 Java 中 Synchronized和Static Synchronized的区别

Java 中 Synchronized和Static Synchronized的区别

2025-05-14 10:30:00 350

原创 Java Object的wait和notify方法

Java Object的wait和notify方法需要知道的一些事情

2025-05-14 09:00:00 687

原创 Java 线程Thread类中的方法

Java 线程Thread类中的方法

2025-05-13 15:36:24 1115

原创 Java 线程状态有哪几种

Java 线程状态有几种呢

2025-05-13 13:27:12 332

原创 Java 禁止在 foreach 循环里进行元素的 remove/add 操作

Java 禁止在 foreach 循环里进行元素的 remove/add 操作

2025-05-13 13:01:14 673

原创 Java 的 swich case 执行顺序

Java 的 swich case 执行顺序

2025-05-13 08:54:44 573

原创 Java 的 try catch finally 执行顺序

Java 的 try catch finally 执行顺序

2025-05-13 08:50:00 1807

原创 Redis分布式锁真的就万无一失吗

Redis分布式锁真的就万无一失吗

2025-05-13 08:45:19 602

原创 Redis分布式锁Redlock实现

Redis分布式锁Redlock实现

2025-05-12 15:47:02 976

空空如也

空空如也

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

TA关注的人

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