自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 rocketMQ学习笔记——消息读写与存储结构

消息读写与存储结构commitLogReputMessageService.doReputconsumeQueue总结在rocketMQ中, 消息存储在硬盘中, commitLog与consumeQueue在结构概念上是一个队列, 但是在具体实现上是用多文件存储结构commitLog的文件默认大小为1G, consumeQueue的文件默认大小为600w字节, 即可以存放30w个条目 public int getMappedFileSizeConsumeQueue() { // mappe

2020-11-04 15:00:16 547 1

原创 rocketMQ学习笔记——consumer与broker的消息交互

rocketMQ的消费流程Consumerbroker保持拉取请求consumer的消费发起后记Consumer之前我们对消息队列体系中的注册中心、生产者、代理人(broker)有过初步的了解broker启动后会将自己的信息注册进namesrvproducer启动后会通过namesrv获取broker信息消息生产后producer会将消息推送至brokerbroker收到消息后, 执行刷盘策略, 构建consumerQueue和indexFile以上, 我们的消息已经存在与broker中了

2020-10-29 17:24:36 1708

原创 rocketMQ学习笔记——生产者启动和消息发送流程

生产者启动和消息发送流程Producerstart()消息生产broker接收消息后记Producer名词解释与设计架构可以阅读官方文档生产者由于是用户使用的, 所以自然是用户创建的, 设置参数包括生产者的启动都应该是用户来进行,所以我们从DefaultMQProducerTest默认的MQ生产者测试类作为入口看看producer的启动流程, 并且看看producer与broker的消息交互start()在测试类中, 有一个初始化方法init(), 其中给producer设置了namesrv地址

2020-10-23 16:18:05 496

原创 rocketMQ学习笔记——broker的启动和高可用服务

broker的启动和高可用服务brokercontrollerstartmessage的startHAServicemaster与slave的通信netty服务启动后记broker本文仅仅探讨broker的启动和高可用注册, 以及如何提供消息服务这里有一个不理解的地方就是, broker的高可用服务并没有使用到netty, 而是使用了NIO的socketbroker就是个代理商, 生产者的消息发送给broker后, 消费者再去broker上面拉消息rocketMQ的broker有高可用机制, 可以

2020-10-22 17:14:57 672 2

原创 rocketMQ学习笔记——nameServer

rocketMQ学习笔记——nameServernameServerbroker的注册consumer根据topic获取broker信息后记nameServernameServer是一个服务中心, 用于broker的注册, 然后consumer和producer通过连接namesrv获取broker的信息, namesrv是无状态的节点, 这意味着它不会有主从之分以下是官方文档对namesrv的概念说明名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列

2020-10-20 11:17:06 518 2

原创 结合时间片调度的java自旋锁分析

自旋锁互斥锁: 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。自旋锁: 自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。以上是百度百科中对于互斥锁与自旋锁的定义.在java中, 常见的互斥锁有关键字synchronized, 有Lo

2020-10-09 15:56:46 349

原创 java阻塞队列---BlockingQueue

java阻塞队列---BlockingQueuejava阻塞队列---BlockingQueue阻塞队列解决的问题ArrayBlockingQueueoffer()enqueue()take()dequeue()总结java阻塞队列—BlockingQueue阻塞队列解决的问题为什么要用阻塞队列?在日常编码中, 我们会使用到生产者消费者模式, 使用阻塞队列可以快速的实现这一模式线程池中阻塞队列的使用在ThreadPoolExecutor中, 当核心线程数给占用完毕后, 后来的任务都会被加

2020-09-18 11:24:05 136

原创 netty的学习与rpc实践---rpc整合zookeeper的服务注册发现

rpc整合zookeeper的服务注册发现zookeeper客户端zookeeper服务端注册manager整个rpc的流程图后记前文:使用spring框架进行整合本文使用的zookeeper为3.5.8版本zookeeper客户端客户端需要与zk连接, 并且监听zk下某一节点的变化, 在节点发生变化后, 我们的服务缓存需要刷新,刷新的时候重新去zk上读取所有服务进行map缓存监听器监听节点变化, 节点发生变化则会调用refresh方法, 但是我们在第一次加载zk的时候在spring中已经做了r

2020-09-01 15:22:48 194

原创 netty的学习与rpc实践---使用spring框架进行整合

使用spring框架进行整合需求分析获取spring的上下文clientserverRegistrar自定义的Bean工厂代理类后记前文:构建Netty应用需求分析netty在启动spring的时候自动启动需要编写代理类, 代理需要通信的接口需要使用rpc的接口在spring生成bean之前被代理通过服务或接口名与方法名找到服务端中对应的方法接口名对应的实现类在spring容器中做预处理获取spring的上下文通过实现ApplicationContextAware接口, 重写setAp

2020-08-31 16:29:04 247 1

原创 netty的学习与rpc实践---构建Netty应用

构建Netty应用构建Netty应用clientHandlerserverhandler编码解码器统一的数据接收发送如何找到具体调用方法后记构建Netty应用client这里只说明与Netty有关的, 其他功能会略作解释用了spring框架, 获得上下文容器因为我们需要获取yml中配置的zookeeper地址 public void setApplicationContext(ApplicationContext applicationContext) throws BeansExcept

2020-08-28 14:33:10 169

原创 netty的学习与rpc实践---了解netty

了解nettynetty初步学习简介与特性Netty的核心组件netty初步学习本文结合自己的一些思考和netty实战书写简介与特性分类Netty的特性设计统一的API支持多种传输类型 阻塞的和非阻塞的简单而强大的线程模型 真正的无连接数据报套接字支持 链接逻辑组件以支持复用易于使用详实的Javadoc和大量的示例集不需要超过JDK 1.6+③的依赖。(一些可选的特性可能需要Java 1.7+和/或额外的依赖)性能拥有比 Java 的核心 API 更高的吞吐量以

2020-08-28 10:00:24 208 1

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

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

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

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

原创 java源码学习-Mybatis(1)加载mapper流程

Mybatis加载mapperMapperScan后记首先说明一下, 我是在Springboot中使用的Mybatis所以并没有使用xml配置这里我整合了一份脑图, 需要的自取思维导图正好给我赚点积分下载资源MapperScanMapperScan这个注解的作用就是将我们的mapper包中的所有mapper接口注册入mybatis,所以我从这里开始入手全局搜索这个MapperScan上图中可以看见MapperScannerRegistrar这个类是唯一一个有使用到这个注解类的类, 这个类

2020-06-18 17:09:29 528

原创 springCloud--- 使用seata开启全局事务的时候,出现java.net.SocketTimeoutException: Read timed out

问题描述在刚启动项目的时候, 服务注册入nacos, 在业务逻辑中打上GlobalTransactional启动seata全局事务, 这个时候就会触发feign的超时, 之后再次发起相同请求, 就不会超时解决办法首先 feign超时的问题可以在application.yml中加上ribbon: ConnectTimeout: 5000 ReadTimeout: 5000feign默认调用是1秒超时, 在第一次开启全局事务的时候, seata需要等待加载, 所以会耗时会有所增长,...

2020-06-03 20:28:58 1086

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

原创 java中实现单例模式的两种方式, 饿汉与懒汉

java中实现单例模式的两种方式饿汉模式懒汉模式单例模式的应用场景之前学习单例模式都是看别人是如何实现的, 今天就自己写一下实现单例模式的代码, 在这里分享一下饿汉模式饿汉模式其实就是大部分人最常使用的一种单例模式public class SingletonTest { private final static SingletonTest singletonTest = new ...

2020-04-29 21:53:15 284

原创 java源码学习-线程池ThreadPoolExecutor

线程池ThreadPoolExecutormain方法构造器Worker内部类executoraddWorkerrunWorkergetTask后记main方法先贴上我做实验使用的main方法public class ThreadPoolExecutorTest { public static void main(String[] args) { int coreP...

2020-04-26 01:20:07 283

原创 Java源码学习-String类源码的常用api阅读

String类源码阅读String构造器init和cinitgetChars && getBytesequalscompareTohashCodeindexOfsubStringString初学java的时候被问最多的一个问题就是String在java里是对象还是基本类型, 现在很明显, 这是个类, String其实也就是个字符数组private final char val...

2020-04-21 22:27:38 248

原创 java源码学习-ArrayList

ArrayList源码学习ArrayList构造器addcontainsclonegetsetremoveremoveAllsubList后记ArrayListArrayList是一个被频繁使用的类, 本篇源码学习主要围绕着构造器/add/get/set/remove以及一些简单的api来学习, 首先得明白ArrayList的继承关系在List中通过继承了Collection接口, 在it...

2020-04-19 20:41:06 186

原创 java学习-jvm的可达性分析与G1收集器

jvm的可达性分析与G1收集器GC RootsG1收集器初始标记并发标记并发的可达性分析增量更新原始快照最终标记筛选回收记忆集与卡表GC Roots可达性分析, 可达到的地方是GC Roots, 只要与GC Roots之间存在引用链, 则说明这个对象有可达性的, 这个对象不应该被回收, 固定可以作为GC Roots的对象有以下几种:在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程...

2020-04-18 14:53:50 460

原创 java j=j++解析

写一个mian函数 用javap指令来看看他的字节码指令 public static void main(String[] args) { int j = 0; j = j++; int i = 0; i = ++ i; System.out.println(j); System.out.pri...

2020-04-17 14:06:44 886

原创 java源码学习-ReentrantLock

上文AQS源码学习java源码学习-ReentrantLockReentrantLockSync构造器lock与unlocktoString后记ReentrantLockprivate final Sync sync;在可重入锁的源码中, 由内部类Sync确定了加锁和释放锁, 由NonfairSync和FairSync类继承Sync来实现非公平锁和公平锁的实现SyncSync是一个继...

2020-04-17 11:57:39 188

原创 java AQS源码学习

java AQS源码学习AbstractQueuedSynchronizerNode一些变量和方法addWaiter和enqacquire以及相关方法release后记AbstractQueuedSynchronizerAbstractQueuedSynchronizer抽象队列同步器, 简称AQS, 只有读懂了AQS的源码才能看懂ReentrantLock可重入锁是如何实现的Nodeno...

2020-04-16 21:31:01 254

原创 红黑树学习 java实现简单的红黑树(2)

上文: 红黑树学习 java实现简单的红黑树(1)红黑树学习 java实现简单的红黑树removedeleteNodefixAfterDel后记remove传入要删除的值public Integer remove(Integer val) { // 找到值为val的结点 Node p = getNode(val); // 找不到则直接返回nu...

2020-04-14 20:19:29 183

原创 红黑树学习 java实现简单的红黑树(1)

java实现简单的红黑树红黑树定义代码实现结点定义insertfixBRTree测试后记红黑树定义(1)所有的叶子结点为黑色(2)红色结点的孩子只是黑色(3)根结点一定是黑色(4)从一个结点到该结点可以到达的叶子结点的路径上黑色结点数目相同(5)结点的颜色是红色或者黑色代码实现这里我只是为了学习红黑树而只实现了整数作为value, 没有用自定义类型结点定义// 定义颜色pri...

2020-04-12 00:34:04 224 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 203

原创 java8 ConcurrentHashMap源码学习

java8 ConcurrentHashMap源码学习ConcurrentHashMapputaddCountfullAddCounttransfer插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图...

2020-04-10 12:41:42 296 2

原创 两个字符串的hashCode相同但这两个字符串不相等的情况

由hashcode的源码可知str.charAt(0) * 31^(n-1) + str.charAt(1) * 31^(n-2) + ... + str.charAt(n-1)那我们最简单的操作就是当n=2的时候x1*31 + x2 = y1*31 + y2可得(x1-y1) * 31 = y2 - x2;大家可以去查查Ascii表中的Ascii码 找出x1,x2与y1,y2...

2020-03-14 22:49:59 1415

原创 A+B

给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。现在请计算A+B的结果,并以正常形式输出。Input输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。Output请计算A+B的结果,并以正常形式输出,每组数据占一行。Sample Input-234,56

2018-02-03 16:38:59 251

原创 MagicBuilding

Problem DescriptionAs the increase of population, the living space for people is becoming smaller and smaller. In MagicStar the problem is much worse. Dr. Mathematica is trying to save land by clu

2018-02-02 15:56:23 203

原创 Self Numbers

Problem DescriptionIn 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of n

2018-01-30 18:40:13 436

原创 Factorial

Problem DescriptionThe most important part of a GSM network is so called Base Transceiver Station (BTS). These transceivers form the areas called cells (this term gave the name to the cellular pho

2018-01-30 17:18:00 258

原创 Climbing Worm

Description An inch worm is at the bottom of a well n inches deep. It has enough energy to climb u inches every minute, but then has to rest a minute before climbing again. During the rest, it slips

2018-01-28 16:41:10 294

原创 As Easy As A+B

Description These days, I am thinking about a question, how can I get a problem as easy as A+B? It is fairly difficulty to do such a thing. Of course, I got it after many waking nights. Give you s

2018-01-28 16:31:08 244

原创 Keep on Truckin'

Problem DescriptionBoudreaux and Thibodeaux are on the road again . . ."Boudreaux, we have to get this shipment of mudbugs to Baton Rouge by tonight!""Don't worry, Thibodeaux, I already ch

2018-01-28 16:26:45 227

原创 Edge

Problem DescriptionFor products that are wrapped in small packings it is necessary that the sheet of paper containing the directions for use is folded until its size becomes small enough. We assum

2018-01-27 18:10:06 262

原创 The 3n + 1 problem

Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose

2018-01-27 17:46:58 880

Mybatis.mmap

java中Mybatis的脑图, 使用MindManager打开, 思维导图, 脑图, 有助于mybatis的学习与深入理解

2020-06-18

空空如也

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

TA关注的人

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