自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis常见3种集群架构及其原理

Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外 提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。Redis这么快是因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。Redis处理那么多的并发客户端连接,使用的是IO多路复用技术。

2023-02-12 18:04:41 1144

原创 Redis分布式锁实现及其Redis性能优化

以上我们针对的都是读多写少的情况加入缓存提高性能,如果写多读多的情况又不能容忍缓存数据不一致,那就没必要加缓存了,可以直接操作数据库。当然,如果数据库抗不住压力,还可以把缓存作为数据读写的主存储,异步将数据同步到数据库,数据库只是作为数据的备份。放入缓存的数据应该是对实时性、一致性要求不是很高的数据。切记不要为了用缓存,同时又要保证绝对的一致性做大量的过度设计和控制,增加系统复杂性。

2023-02-03 22:22:17 474

原创 Springboot自动装配以及启动原理解析

SpringBoot中众多的条件注解,都是基于Spring中的@Conditional来实现的。使用自定义条件注解try {} } }ConditionContext:表示条件上下文,可以通过ConditionContext获取到当前的类加载器、BeanFactory、Environment环境变量对象AnnotatedTypeMetadata:表示当前正在进行条件判断的Bean所对应的类信息,或方法信息(比如@Bean定义。

2023-01-10 22:24:02 451

原创 一文理解MySQL事务隔离级别与锁机制

1、对MyISAM表的读操作(加读锁) ,不会阻寒其他进程对同一表的读请求,但会阻赛对同一表的写请求。只有当 读锁释放后,才会执行其它进程的写操作。2、对MylSAM表的写操作(加写锁) ,会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进 程的读写操作。

2022-12-26 23:13:06 154

原创 InnoDB引擎底层存储和缓存原理

InnoDB 是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我们想从表中获取某些记录时,InnoDB将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB 中页的大小一般为 16 KB。

2022-12-18 22:42:18 140

原创 MySQL索引原理及性能优化

索引的本质是为了帮助mysql高效获取数据的排好序的数据结构。

2022-12-10 23:05:47 240

原创 ConcurrentHashMap 实现分析(JDK1.7&JDK1.8)

ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。Segment 是一种可重入锁(ReentrantLock),在 ConcurrentHashMap 里扮演锁的角色;HashEntry 则用于存储键值对数据。一个 ConcurrentHashMap 里包含一个 Segment 数组。Segment 的结构和 HashMap 类似,是一种数组和链表结构。

2022-11-25 23:24:48 420

原创 HashMap底层原理(JDK1.8)

HashMap是由数据+链表+红黑树的形式组成的。数组:是一块连续的存储空间,存储的每一个元素都有自己的下标。链表:每一个元素存储下一个元素的内存地址,链式存储,存储元素离散。HashMap底层的数据结构是hash散列表,结合了数组+链表两种数据结构。采用Node(继承自Entry)数组来存储key-value的键值对,一个Node对应一个键值对,Node类是一个单向链表的结构,通过next(Node类型)指针连接下一个Node节点(解决hash冲突问题)。

2022-11-23 22:58:06 1016

原创 线程池底层原理

线程池是一种类似于 Mysql 的池化思想管理工具。Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。

2022-11-17 22:15:38 227

原创 ReentrantLock使用及其原理解析

2 ReentrantLock详解ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手 段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。相对于 synchronized, ReentrantLock具备如下特点:Synchronized与ReentrantLock区别:可重入可中断锁超时公平锁、非公平锁ReentrantLock 的构造函数中,默认的无参构造函数将会把 Sync 对象创建为 NonfairSync 对象,这是一个“

2022-11-11 22:33:22 272

原创 从代码和底层探究Synchronized锁实现

并发编程能充分利用CPU资源,提高用户响应时间,但同时共享内存模型也带来了线程安全问题。当两个线程同时对一个共享静态变量操作时,一个做自增操作,一个做自减操作,能达到想要的结果吗发现程序并没达到想要的结果零。之前我们分析过,加了 volatile 关键字的变量能保证可见性,但此时多线程中并未达到“可见性”效果,我们在编译器中安装一个jclasslib,查看JVM中的字节码指令。increment方法的i++操作字节码指令:decrement方法的i–操作字节码指令:单线程下这些字节码指令顺序执行

2022-11-07 22:33:50 227

原创 探究CAS底层原理

CAS(Compare And Swap,比较与交换),CAS的操作过程包含三个运算符:内存地址V,期望值A和新值B,操作时如果地址上的值等于期望值A,则将地址上的值赋为新值B,否则不做任何操作。

2022-11-02 22:08:36 288

原创 一文带你深入理解并发编程底层原理

操作系统会议进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。线程是进程中的实体,一个进程可拥有多个线程,一个线程必须有一个父进程,线程是CPU调度的最小单位。从图中可以看出线程是进程一个子集,线程存在于进程内,而进程是相互独立的。进程拥有共享的内存空间,供内部线程共享。线程是更加轻量的,切换成本要比进程上下文切换低。

2022-10-30 00:02:13 554

原创 JVM命令行工具和JVM调优实战

虚拟机进程工具。

2022-10-18 23:36:25 427

原创 垃圾回收算法、垃圾回收器CMS、G1、ZGC详解

当前虚拟机的垃圾收集都采用分代收集算法,根据对象存活周期的不同将内存分为几块。一般将Java堆分为新生代、老年代,这样就可根据各代特点选择合适的垃圾收集器。新生代中,每次收集都会有大量对象(99%)死去,所以选择复制算法,只需少量对象的复制成本就可完成每次对象的垃圾回收。老年代的存活几率是比较高的,所以选择“标记-清除”或“标记-整理”算法进行垃圾收集。注意,“标记-清除”和“标记-整理”算法比复制算法慢10倍以上。

2022-10-10 20:34:11 2405 1

原创 JVM-深入理解JVM内存模型、类加载机制、内存分配机制

运行该段代码,查看大体流程,如图其中loadClass的类加载过程分为:加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载1.通过类型的完全限定名,产生一个代表该类型的二进制数据流(没有指明从哪里获取、怎么获取,是一个非常开放的平台),加载源包括:文件(Class文件,jar文件)、网络、计算生成(代理$Proxy)、由其它文件生成(jsp)、数据库中;2.将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构;

2022-09-30 22:42:02 505 1

空空如也

空空如也

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

TA关注的人

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