- 博客(27)
- 收藏
- 关注
原创 zookeeper集群节点个数配置
以上分析,我们从容错率以及防止脑裂两方面说明了3台服务器是搭建集群的最少数目,4台发生脑裂时会造成没有leader节点的错误。
2023-11-17 13:38:52
202
原创 JVM垃圾回收算法&回收器
学习本文之前需要对JVM里的内存空间有所了解,可以查看[博学谷学习记录]超强总结,用心分享|架构 运行时数据区_code只是爱好的博客-CSDN博客时间、地点、人物1)我们先把所有的收集器做个汇总:2)一些规律新生代都是标记 - 复制算法,老年代采用标记 - 整理,或清除(CMS)历史性的收集器大多针对某个代,但是G1,以及未来的ZGC都是全代可用没有绝对好用的收集器,需要在 吞吐量、延迟性、内存占用量上做权衡数据分析、科学计算等场合,偏重吞吐量。
2023-07-20 12:06:29
240
原创 RabbitMQ常用交换器有哪些?
交换器是消息被发送的 AMQP 实体,交换器拿到消息然后把它路由给0或多个队列,路由算法基于交换器的类型和 bindings
2023-07-04 11:10:08
657
原创 对象的创建
其他文章我们介绍了从class字节码文件加载到jvm内存的过程。接下来,我们看jvm里的代码跑起来以后,在运行过程中,对象的创建和销毁在内存中经历了什么样的事情。以下是本篇文章正文内容从你new一个对象开始,发生了什么?遇到new指令,jvm首先要做的事是检查有没有这个类,没有的话,加载它!这里对文章进行总结:对象头实例数据对齐填充句柄访问直接地址。
2023-06-24 17:24:03
343
原创 类的加载(架构)
通过字节码,我们了解了class文件的结构通过运行数据区,我们了解了jvm内部的内存划分及结构接下来,让我们看看,字节码怎么进入jvm的内存空间,各自进入那个空间,以及怎么跑起来。以下是本篇文章正文内容类的加载就是将class文件中的二进制数据读取到内存中,然后将该字节流所代表的静态数据结构转化为方法区中运行的数据结构,并且在堆内存中生成一个java.lang.Class对象作为访问方法区数据结构的入口。加载的字节码来源,不一定非得是class文件,可以是符合字节码规范的任意地方,甚至二进制流等。
2023-06-24 13:33:07
80
原创 运行时数据区
字节码只是一个二进制文件存放在那里。要想在jvm里跑起来,先得有个运行的内存环境。也就是我们所说的jvm运行时数据区。1)运行时数据区的位置运行时数据区是jvm中最为重要的部分,执行引擎频繁操作的就是它。类的初始化,以及后面我们讲的对象空间的分配、垃圾的回收都是在这块区域发生的。2)区域划分根据《Java虚拟机规范》中的规定,在运行时数据区将内存细分为几个部分。
2023-06-23 20:09:49
659
原创 JVM整体架构&类文件结构
1.源码编译:通过Java源码编译器将Java代码编译成JVM字节码(.class文件)2.类加载:通过ClassLoader及其子类来完成JVM的类加载3.类执行:字节码被装入内存,进入JVM虚拟机,被解释器解释执行4.JVM虚拟机中主要是由三部分构成,分别是类加载子系统、运行时数据区、执行引擎。
2023-06-23 18:20:30
185
原创 ConcurrentHashMap(JDK源码分析)
Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。
2023-06-21 14:17:52
63
原创 Synchronized(JDK源码分析)
如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。synchronized两种形式上锁的底层实现其实都一样,在进入同步代码之前先获取锁,获取到锁之后锁的计数器+1,同步代码执行完锁的计数器-1,如果获取失败就阻塞式等待锁的释放。
2023-06-21 11:46:45
45
原创 HashMap类(JDK源码分析)
1.HashMap底层数据结构(为什么引入红黑树,存储数据的过程,哈希碰撞相关问题)2.HashMap成员变量(初始化容量是多少,负载因子,数组长度为什么是2的n次幂)3.HashMap扩容机制(什么时候需要扩容,怎么进行扩容)4.JDK7和JDK8比较,JDK8进行了什么优化以下是本篇文章正文内容HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。
2023-06-20 18:15:05
56
原创 ArrayList类(JDK源码分析)
arrayList可以存放null。arrayList本质上就是一个elementData数组。arrayList区别于数组的地方在于能够自动扩展大小,其中关键的方法就是gorw()方法。arrayList由于本质是数组,所以它在数据的查询方面会很快,而在插入删除这些方面,性能下降很多,有移动很多数据才能达到应有的效果。
2023-06-20 17:14:49
32
原创 Object类(JDK源码分析)
所有类的基类——java.lang.ObjectObject 类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类Object 类属于 java.lang 包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。思考:Object是如何成为默认父类的?System.out.println("JDK8源码环境构建...");推测:情况1:编译器处理。
2023-06-20 15:56:01
280
原创 布隆过滤器(BloomFilter)
布隆过滤器(英语:Bloom Filter)是 1970 年由Burton Howard Bloom提出的,是一种空间效率高的概率型数据结构,以下简称BF。本质上其实就是一个很长的二进制向量和一系列随机映射函数。专门用来检测集合中是否存在特定
2023-06-19 17:27:03
230
原创 Redis高可用之Redis Cluster(集群)
主从 + 哨兵 问题分析(1)在主从 + 哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力(2) 在Redis Sentinel模式中,每个节点需要保存全量数据,冗余比较多以下是本篇文章正文内容1.Redis-Cluster采用无中心结构2.只有当集群中的大多数节点同时fail整个集群才fail。
2023-06-19 15:41:11
136
原创 Redis过期删除策略&内存淘汰策略
Redis过期删除策略是采用惰性删除和定期删除这两种方式组合进行的,惰性删除能够保证过期的数据我们在获取时一定获取不到,而定期删除设置合适的频率,则可以保证无效的数据及时得到释放,而不会一直占用内存数据
2023-06-16 17:43:45
71
原创 Redis持久化原理之AOF
Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置,redis提供了两种不同的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)
2023-06-16 15:37:36
71
原创 Redis持久化原理之RDB
Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置redis提供了两种不同的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)
2023-06-16 14:45:22
66
原创 Redis数据类型选择&应用场景
Redis数据类型:1.string字符串类型2.hash类型3.list列表类型4.set集合类型5.sortedset有序集合类型6.bitmap位图类型7.geo地理位置类型。
2023-06-15 18:11:22
65
原创 MySql索引优化原则&索引失效情况
日常开发中就注意索引的使用优化以及失效情况,不仅能提高sql查询效率还能避免一些因索引失效带来的慢查询,从而大大提升接口响应速度
2023-06-14 17:29:46
91
原创 MySql的索引实现
1.除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。2.根据在辅助索引树中获取的主键id,到主键索引树检索数据的过程称为回表查询。3.使用组合索引查询时,mysql会一直向右匹配直至遇到范围查询(>、
2023-06-14 11:52:07
58
原创 MySql索引数据结构
B+树保证等值查快速询同时支持范围查询的快速查找由于B+树节点不存储行记录数据,每个节点可以存储更多记录信息,树的高度更低,减少IO次数
2023-06-13 16:56:10
43
原创 MySql数据库MVCC多版本并发控制总结
针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读;针对当前读(select ... for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读
2023-06-13 13:25:04
76
原创 Java IO模型(网络编程基础)总结
在计算机操作系统中,所谓的I/O就是输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘IO模型和网络IO模型。I/O 就是计算机内存与外部设备之间拷贝数据的过程数据从网卡拷贝到内核空间。
2023-06-12 12:15:32
61
原创 MySql锁机制
锁机制是为了解决数据库的并发控制问题而产生的。如在同一时刻,客户端对同一个表做更新或查询操作,为了保证数据的一致性,必须对并发操作进行控制。同时,锁机制也为实现 MySQL 的各个隔离级别提供了保证,可以将锁机制理解为使各种资源在被并发访问时变得有序所设计的一种规则。
2023-06-11 16:33:03
81
原创 MySql事务隔离级别及对应解决的事务问题
脏写在所有的隔离级别中都不会发生,如果某个事务想修改另一个事务未提交的数据,就必须阻塞,等待那个事务结束要解决脏读现象,就要升级到「读已提交」以上的隔离级别要解决不可重复读现象,就要升级到「可重复读」的隔离级别要解决幻读现象不建议将隔离级别升级到「串行化」
2023-06-09 18:25:05
436
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人