自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kafka 基础入门

一个kafka架构包括若干个Producer(服务器日志、业务数据、web前端产生的page view等),若干个Broker(kafka支持水平扩展,一般broker数量越多集群的吞吐量越大),若干个consumer group,一个Zookeeper集群(kafka通过Zookeeper管理集群配置、选举leader、consumer group发生变化时进行rebalance)以下是本篇文章正文内容。

2024-10-29 16:01:43 1689 1

原创 RabbitMQ 基础入门

RabbitMQ 与 AMQP 遵循相同的模型架构,其架构示例图如下以下是本篇文章正文内容。

2024-09-14 11:02:09 1045 2

原创 RabbitMQ(高阶使用)延时任务

在开发中,往往会遇到一些关于延时任务的需求,例如生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信滴滴打车订单完成后,如果用户一直不评价,48小时后会将自动评价为5星。

2024-09-14 10:31:14 2091

原创 RocketMQ 基础入门

RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、延时消息、消息回溯等前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。

2024-09-12 14:54:53 2412

原创 RabbitMQ(高阶使用)死信队列

先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信,自然就有了死信队列;

2024-09-12 10:50:14 766

原创 RabbitMQ(高阶使用)消息可靠性保障

消息的可靠性投递是使用消息中间件不可避免的问题,不管是使用kafka、RocketMQ或者RabbitMQ,那么在RabbitMQ中如何保证消息的可靠性投递呢?生产者broker消费者提示:以下是本篇文章正文内容,下面案例可供参考通过以上方式,可以保证大部分消息在broker不会丢失,但是还是有很小的概率会丢失消息,什么情况下会丢失呢?假如消息到达队列之后,还未保存到磁盘mq就挂掉了,此时还是有很小的几率会导致消息丢失的。

2024-09-10 13:38:17 1303

原创 Redis经典面试题

redis整体来说并非只有一个线程(多线程),只是redis在处理网络请求,k/v读写操作这个过程是用一个线程来处理的,它的其他功能:其他功能:持久化,异步删除,集群同步都是采用额外的线程来完成的。因此,你也不需要担心线程安全问题。概念:redis过期后的一瞬间,有大量用户请求同一个缓存数据,导致这些请求都去请求数据库,造成数据库压力倍增的情,针对一个key而言。缓存击穿与缓存雪崩的区别是这里针对的是某一热门key缓存,而雪崩针对的是大量缓存的集中失效。开启多线程后,还需要设置线程数,否则是不生效的。

2024-09-10 10:35:28 2213

原创 zookeeper集群节点个数配置

以上分析,我们从容错率以及防止脑裂两方面说明了3台服务器是搭建集群的最少数目,4台发生脑裂时会造成没有leader节点的错误。

2023-11-17 13:38:52 268

原创 JVM垃圾回收算法&回收器

学习本文之前需要对JVM里的内存空间有所了解,可以查看[博学谷学习记录]超强总结,用心分享|架构 运行时数据区_code只是爱好的博客-优快云博客时间、地点、人物1)我们先把所有的收集器做个汇总:2)一些规律新生代都是标记 - 复制算法,老年代采用标记 - 整理,或清除(CMS)历史性的收集器大多针对某个代,但是G1,以及未来的ZGC都是全代可用没有绝对好用的收集器,需要在 吞吐量、延迟性、内存占用量上做权衡数据分析、科学计算等场合,偏重吞吐量。

2023-07-20 12:06:29 450

原创 RabbitMQ常用交换器有哪些?

交换器是消息被发送的 AMQP 实体,交换器拿到消息然后把它路由给0或多个队列,路由算法基于交换器的类型和 bindings

2023-07-04 11:10:08 777

原创 对象的创建

其他文章我们介绍了从class字节码文件加载到jvm内存的过程。接下来,我们看jvm里的代码跑起来以后,在运行过程中,对象的创建和销毁在内存中经历了什么样的事情。以下是本篇文章正文内容从你new一个对象开始,发生了什么?遇到new指令,jvm首先要做的事是检查有没有这个类,没有的话,加载它!这里对文章进行总结:对象头实例数据对齐填充句柄访问直接地址。

2023-06-24 17:24:03 370

原创 类的加载(架构)

通过字节码,我们了解了class文件的结构通过运行数据区,我们了解了jvm内部的内存划分及结构接下来,让我们看看,字节码怎么进入jvm的内存空间,各自进入那个空间,以及怎么跑起来。以下是本篇文章正文内容类的加载就是将class文件中的二进制数据读取到内存中,然后将该字节流所代表的静态数据结构转化为方法区中运行的数据结构,并且在堆内存中生成一个java.lang.Class对象作为访问方法区数据结构的入口。加载的字节码来源,不一定非得是class文件,可以是符合字节码规范的任意地方,甚至二进制流等。

2023-06-24 13:33:07 259

原创 运行时数据区

字节码只是一个二进制文件存放在那里。要想在jvm里跑起来,先得有个运行的内存环境。也就是我们所说的jvm运行时数据区。1)运行时数据区的位置运行时数据区是jvm中最为重要的部分,执行引擎频繁操作的就是它。类的初始化,以及后面我们讲的对象空间的分配、垃圾的回收都是在这块区域发生的。2)区域划分根据《Java虚拟机规范》中的规定,在运行时数据区将内存细分为几个部分。

2023-06-23 20:09:49 692

原创 JVM整体架构&类文件结构

1.源码编译:通过Java源码编译器将Java代码编译成JVM字节码(.class文件)2.类加载:通过ClassLoader及其子类来完成JVM的类加载3.类执行:字节码被装入内存,进入JVM虚拟机,被解释器解释执行4.JVM虚拟机中主要是由三部分构成,分别是类加载子系统、运行时数据区、执行引擎。

2023-06-23 18:20:30 226

原创 ConcurrentHashMap(JDK源码分析)

Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。

2023-06-21 14:17:52 189

原创 Synchronized(JDK源码分析)

如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。synchronized两种形式上锁的底层实现其实都一样,在进入同步代码之前先获取锁,获取到锁之后锁的计数器+1,同步代码执行完锁的计数器-1,如果获取失败就阻塞式等待锁的释放。

2023-06-21 11:46:45 139

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

原创 ArrayList类(JDK源码分析)

arrayList可以存放null。arrayList本质上就是一个elementData数组。arrayList区别于数组的地方在于能够自动扩展大小,其中关键的方法就是gorw()方法。arrayList由于本质是数组,所以它在数据的查询方面会很快,而在插入删除这些方面,性能下降很多,有移动很多数据才能达到应有的效果。

2023-06-20 17:14:49 59

原创 Object类(JDK源码分析)

所有类的基类——java.lang.ObjectObject 类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类Object 类属于 java.lang 包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。思考:Object是如何成为默认父类的?System.out.println("JDK8源码环境构建...");推测:情况1:编译器处理。

2023-06-20 15:56:01 323

原创 布隆过滤器(BloomFilter)

布隆过滤器(英语:Bloom Filter)是 1970 年由Burton Howard Bloom提出的,是一种空间效率高的概率型数据结构,以下简称BF。本质上其实就是一个很长的二进制向量和一系列随机映射函数。专门用来检测集合中是否存在特定

2023-06-19 17:27:03 1915

原创 Redis高可用之Redis Cluster(集群)

主从 + 哨兵 问题分析(1)在主从 + 哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力(2) 在Redis Sentinel模式中,每个节点需要保存全量数据,冗余比较多以下是本篇文章正文内容1.Redis-Cluster采用无中心结构2.只有当集群中的大多数节点同时fail整个集群才fail。

2023-06-19 15:41:11 536

原创 Redis高可用之主从复制&sentinel哨兵模式

1.一主多从 主机写,从机读2.薪火相传1.全量复制2.增量复制。

2023-06-19 14:44:14 97

原创 Redis过期删除策略&内存淘汰策略

Redis过期删除策略是采用惰性删除和定期删除这两种方式组合进行的,惰性删除能够保证过期的数据我们在获取时一定获取不到,而定期删除设置合适的频率,则可以保证无效的数据及时得到释放,而不会一直占用内存数据

2023-06-16 17:43:45 152

原创 Redis持久化原理之AOF

Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置,redis提供了两种不同的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)

2023-06-16 15:37:36 170

原创 Redis持久化原理之RDB

Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置redis提供了两种不同的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)

2023-06-16 14:45:22 183

原创 Redis数据类型选择&应用场景

Redis数据类型:1.string字符串类型2.hash类型3.list列表类型4.set集合类型5.sortedset有序集合类型6.bitmap位图类型7.geo地理位置类型。

2023-06-15 18:11:22 115

原创 MySql索引优化原则&索引失效情况

日常开发中就注意索引的使用优化以及失效情况,不仅能提高sql查询效率还能避免一些因索引失效带来的慢查询,从而大大提升接口响应速度

2023-06-14 17:29:46 160

原创 MySql的索引实现

1.除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。2.根据在辅助索引树中获取的主键id,到主键索引树检索数据的过程称为回表查询。3.使用组合索引查询时,mysql会一直向右匹配直至遇到范围查询(>、

2023-06-14 11:52:07 140

原创 MySql索引数据结构

B+树保证等值查快速询同时支持范围查询的快速查找由于B+树节点不存储行记录数据,每个节点可以存储更多记录信息,树的高度更低,减少IO次数

2023-06-13 16:56:10 134

原创 MySql索引分类

数据库表中并不是索引越多越好,而是仅为那些常用的搜索字段建立索引效果最佳!

2023-06-13 15:37:34 163

原创 MySql数据库MVCC多版本并发控制总结

针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读;针对当前读(select ... for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读

2023-06-13 13:25:04 161

原创 Java IO模型(网络编程基础)总结

在计算机操作系统中,所谓的I/O就是输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘IO模型和网络IO模型。I/O 就是计算机内存与外部设备之间拷贝数据的过程数据从网卡拷贝到内核空间。

2023-06-12 12:15:32 106

原创 MySql锁机制

锁机制是为了解决数据库的并发控制问题而产生的。如在同一时刻,客户端对同一个表做更新或查询操作,为了保证数据的一致性,必须对并发操作进行控制。同时,锁机制也为实现 MySQL 的各个隔离级别提供了保证,可以将锁机制理解为使各种资源在被并发访问时变得有序所设计的一种规则。

2023-06-11 16:33:03 100

原创 MySql事务隔离级别及对应解决的事务问题

脏写在所有的隔离级别中都不会发生,如果某个事务想修改另一个事务未提交的数据,就必须阻塞,等待那个事务结束要解决脏读现象,就要升级到「读已提交」以上的隔离级别要解决不可重复读现象,就要升级到「可重复读」的隔离级别要解决幻读现象不建议将隔离级别升级到「串行化」

2023-06-09 18:25:05 504

空空如也

空空如也

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

TA关注的人

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