![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码学习
子波zibo
这个人是条懒狗,什么也没写
展开
-
rocketMQ学习笔记——消息读写与存储结构
消息读写与存储结构commitLogReputMessageService.doReputconsumeQueue总结在rocketMQ中, 消息存储在硬盘中, commitLog与consumeQueue在结构概念上是一个队列, 但是在具体实现上是用多文件存储结构commitLog的文件默认大小为1G, consumeQueue的文件默认大小为600w字节, 即可以存放30w个条目 public int getMappedFileSizeConsumeQueue() { // mappe原创 2020-11-04 15:00:16 · 557 阅读 · 1 评论 -
rocketMQ学习笔记——consumer与broker的消息交互
rocketMQ的消费流程Consumerbroker保持拉取请求consumer的消费发起后记Consumer之前我们对消息队列体系中的注册中心、生产者、代理人(broker)有过初步的了解broker启动后会将自己的信息注册进namesrvproducer启动后会通过namesrv获取broker信息消息生产后producer会将消息推送至brokerbroker收到消息后, 执行刷盘策略, 构建consumerQueue和indexFile以上, 我们的消息已经存在与broker中了原创 2020-10-29 17:24:36 · 1739 阅读 · 0 评论 -
rocketMQ学习笔记——生产者启动和消息发送流程
生产者启动和消息发送流程Producerstart()消息生产broker接收消息后记Producer名词解释与设计架构可以阅读官方文档生产者由于是用户使用的, 所以自然是用户创建的, 设置参数包括生产者的启动都应该是用户来进行,所以我们从DefaultMQProducerTest默认的MQ生产者测试类作为入口看看producer的启动流程, 并且看看producer与broker的消息交互start()在测试类中, 有一个初始化方法init(), 其中给producer设置了namesrv地址原创 2020-10-23 16:18:05 · 510 阅读 · 0 评论 -
rocketMQ学习笔记——broker的启动和高可用服务
broker的启动和高可用服务brokercontrollerstartmessage的startHAServicemaster与slave的通信netty服务启动后记broker本文仅仅探讨broker的启动和高可用注册, 以及如何提供消息服务这里有一个不理解的地方就是, broker的高可用服务并没有使用到netty, 而是使用了NIO的socketbroker就是个代理商, 生产者的消息发送给broker后, 消费者再去broker上面拉消息rocketMQ的broker有高可用机制, 可以原创 2020-10-22 17:14:57 · 677 阅读 · 2 评论 -
rocketMQ学习笔记——nameServer
rocketMQ学习笔记——nameServernameServerbroker的注册consumer根据topic获取broker信息后记nameServernameServer是一个服务中心, 用于broker的注册, 然后consumer和producer通过连接namesrv获取broker的信息, namesrv是无状态的节点, 这意味着它不会有主从之分以下是官方文档对namesrv的概念说明名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列原创 2020-10-20 11:17:06 · 541 阅读 · 2 评论 -
java-AQS源码学习-响应中断的lock
AQS-响应中断的lock前文:AQS源码学习在lock中, 我们有响应中断处理和不响应中断处理的lock, 而在日常使用中, 经常使用的是不响应的.lock操作本文就来学习一下, 在aqs中是如何做到响应线程interrupt的获取锁操作的public final void acquireInterruptibly(int arg) throws InterruptedException { // 在尝试获取之前判断线程异常状态 // 这里的原创 2020-08-17 15:43:34 · 682 阅读 · 0 评论 -
java源码学习-Mybatis(4)创建statement和结果集生成
Mybatis创建statement和结果集生成statementHandler前文:Mybatis(3)执行sql过程statementHandler在Mybatis的Configuration类中, 存在下面三个方法, 我们想要生成一个statment就需要通过一个statemeng的处理器 public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, B原创 2020-06-25 15:52:17 · 1386 阅读 · 0 评论 -
java源码学习-Mybatis(3)执行sql过程
Mybatis执行sql过程jdbc执行流程图方法调用链后记前文:Mybatis与数据库建立连接jdbc执行流程图执行sql的过程就是发起请求的过程, 前文中已经学习了如何建立并获取数据库连接, 本文主要就是学习一下在service调用mapper获取结果的过程, 也就是上图的3~6的过程方法调用链首先通过上文, 我们知道了Mybatis执行sql必须要先获取数据库的连接, 所以我们在SimpleExecutor这个类中的prepareStatement方法中获取了connection, 我们找原创 2020-06-21 20:33:53 · 360 阅读 · 0 评论 -
java源码学习-Mybatis(2)与数据库建立连接
Mybatis与数据库建立连接jdbc执行流程图Mybatis初始化Hikari连接池的启动Mybatis获取数据库连接后记前文:Mybatis加载mapper流程由于mybatis是在jdbc的基础上进行封装的, 所以jdbc执行流程 获取连接->创建statements->resultSet这些步骤mybatis都是存在的, 本篇学习一下Mybatis获取Connection的步骤jdbc执行流程图Mybatis初始化由于我这里是在springboot中整合使用的mybatis并原创 2020-06-19 22:09:10 · 469 阅读 · 0 评论 -
java源码学习-Mybatis(1)加载mapper流程
Mybatis加载mapperMapperScan后记首先说明一下, 我是在Springboot中使用的Mybatis所以并没有使用xml配置这里我整合了一份脑图, 需要的自取思维导图正好给我赚点积分下载资源MapperScanMapperScan这个注解的作用就是将我们的mapper包中的所有mapper接口注册入mybatis,所以我从这里开始入手全局搜索这个MapperScan上图中可以看见MapperScannerRegistrar这个类是唯一一个有使用到这个注解类的类, 这个类原创 2020-06-18 17:09:29 · 533 阅读 · 0 评论 -
java源码学习-线程池ThreadPoolExecutor的shutdown流程以及线程的销毁
线程池shutdown流程以及线程的销毁流程图shutDown()tryTerminate()后记流程图shutDown() public void shutdown() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { // 检查权限, 是否可以终止线程池 checkShutdownAccess();原创 2020-05-17 17:10:54 · 1373 阅读 · 0 评论 -
java源码学习-线程池ThreadPoolExecutor
线程池ThreadPoolExecutormain方法构造器Worker内部类executoraddWorkerrunWorkergetTask后记main方法先贴上我做实验使用的main方法public class ThreadPoolExecutorTest { public static void main(String[] args) { int coreP...原创 2020-04-26 01:20:07 · 284 阅读 · 0 评论 -
Java源码学习-String类源码的常用api阅读
String类源码阅读String构造器init和cinitgetChars && getBytesequalscompareTohashCodeindexOfsubStringString初学java的时候被问最多的一个问题就是String在java里是对象还是基本类型, 现在很明显, 这是个类, String其实也就是个字符数组private final char val...原创 2020-04-21 22:27:38 · 250 阅读 · 0 评论 -
java源码学习-ArrayList
ArrayList源码学习ArrayList构造器addcontainsclonegetsetremoveremoveAllsubList后记ArrayListArrayList是一个被频繁使用的类, 本篇源码学习主要围绕着构造器/add/get/set/remove以及一些简单的api来学习, 首先得明白ArrayList的继承关系在List中通过继承了Collection接口, 在it...原创 2020-04-19 20:41:06 · 188 阅读 · 0 评论 -
java源码学习-ReentrantLock
上文AQS源码学习java源码学习-ReentrantLockReentrantLockSync构造器lock与unlocktoString后记ReentrantLockprivate final Sync sync;在可重入锁的源码中, 由内部类Sync确定了加锁和释放锁, 由NonfairSync和FairSync类继承Sync来实现非公平锁和公平锁的实现SyncSync是一个继...原创 2020-04-17 11:57:39 · 189 阅读 · 0 评论 -
java AQS源码学习
java AQS源码学习AbstractQueuedSynchronizerNode一些变量和方法addWaiter和enqacquire以及相关方法release后记AbstractQueuedSynchronizerAbstractQueuedSynchronizer抽象队列同步器, 简称AQS, 只有读懂了AQS的源码才能看懂ReentrantLock可重入锁是如何实现的Nodeno...原创 2020-04-16 21:31:01 · 263 阅读 · 0 评论 -
红黑树学习 java实现简单的红黑树(2)
上文: 红黑树学习 java实现简单的红黑树(1)红黑树学习 java实现简单的红黑树removedeleteNodefixAfterDel后记remove传入要删除的值public Integer remove(Integer val) { // 找到值为val的结点 Node p = getNode(val); // 找不到则直接返回nu...原创 2020-04-14 20:19:29 · 184 阅读 · 0 评论 -
红黑树学习 java实现简单的红黑树(1)
java实现简单的红黑树红黑树定义代码实现结点定义insertfixBRTree测试后记红黑树定义(1)所有的叶子结点为黑色(2)红色结点的孩子只是黑色(3)根结点一定是黑色(4)从一个结点到该结点可以到达的叶子结点的路径上黑色结点数目相同(5)结点的颜色是红色或者黑色代码实现这里我只是为了学习红黑树而只实现了整数作为value, 没有用自定义类型结点定义// 定义颜色pri...原创 2020-04-12 00:34:04 · 227 阅读 · 2 评论 -
java8 ConcurrentHashMap源码学习(2)
@[TOC](java8 ConcurrentHashMap源码学习(2))上文: java8 ConcurrentHashMap源码学习.ConcurrentHashMap之前发现常用的remove方法还有helptransfer并没有整理出来, 这里把学习心得整理一下, 顺便把get也贴上来remove其实这里跟put一样也是直接引用另一个方法public V remove(Obj...原创 2020-04-11 18:20:39 · 207 阅读 · 0 评论 -
java8 ConcurrentHashMap源码学习
java8 ConcurrentHashMap源码学习ConcurrentHashMapputaddCountfullAddCounttransfer插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图...原创 2020-04-10 12:41:42 · 299 阅读 · 2 评论