Java部落格
码龄10年
关注
提问 私信
  • 博客:42,046
    42,046
    总访问量
  • 63
    原创
  • 510,456
    排名
  • 7
    粉丝
  • 0
    铁粉

个人简介:为了部落!!!

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:江苏省
  • 加入CSDN时间: 2014-11-11
博客简介:

Java部落格

博客描述:
为了部落!!!
查看详细资料
个人成就
  • 获得16次点赞
  • 内容获得20次评论
  • 获得60次收藏
创作历程
  • 47篇
    2021年
  • 10篇
    2020年
  • 14篇
    2019年
成就勋章
TA的专栏
  • Spring
    21篇
  • mybatis
    5篇
  • 并发编程
    10篇
  • netty
    2篇
  • 设计模式
    2篇
  • tomcat
    6篇
  • dubbo
    4篇
  • rpc
    4篇
  • synchronized
  • zookeeper
    1篇
  • 分布式事务
    1篇
  • 代码优化
    1篇
  • 多线程
    13篇
  • 消息中间件
    7篇
  • JVM
    2篇
  • IO
    2篇
  • 分布式
    6篇
  • mysql
    1篇
  • 事务
    3篇
  • 计算机基础
    2篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

343人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Spring Cloud Alibaba-Sentinel源码阅读(三)-流控原理

  由上一篇《Spring Cloud Alibaba-Sentinel源码阅读(二)-流控的主流程》可知,Sentinel的流控主流程就是一条ProcessorSlot 处理链,调用 ProcessorSlotChain 的 entry 方法,就是依次调用这些ProcessorSlot 的方法。而流控相关的最重要的两个ProcessorSlot 就是StatisticSlot和FlowSlot。一、StatisticSlot 收集实时消息StatisticSlot#entrypublic void
原创
发布博客 2021.03.31 ·
281 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring Cloud Alibaba-Sentinel源码阅读(二)-流控的主流程

一、流控的主流程1、流控的入口从上一篇《Spring Cloud Alibaba-Sentinel源码阅读(一)-Sentinel的使用》中可知,Sentinel流控的入口是SphU#entry方法,而SphU类据说是semaphore 信号量的缩写,这个SphU#entry方法的大概就是进入流控了,如果方法抛BlockException,则代表被流控了,如果正常返回一个Entry则正常放行。SphU#entry(java.lang.String, int, com.alibaba.csp.senti
原创
发布博客 2021.03.31 ·
261 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring Cloud Alibaba-Sentinel源码阅读(一)-Sentinel的使用

一、调用sentinel-core API方式1、加入依赖<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.4.1</version></dependency>2、使用public static void main(String[]
原创
发布博客 2021.03.31 ·
464 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

配置中心-Lion源码学习

一、源码入口<dependency> <groupId>com.dianping.lion</groupId> <artifactId>spring-boot-starter-lion</artifactId> <version>2.2.4</version></dependency>spring.factoriesorg.springframework.boot.autoconfigure.En
原创
发布博客 2021.03.26 ·
2425 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JUC源码阅读(三)-CountDownLatch

一、CountDownLatch简介  CountDownLatch是一个基于AQS实现的同步辅助类,它允许一个或多个主任务线程一直等待,直到一组子任务线程完成。内部采用的公平锁和共享锁的机制实现。  由AQS的数据模型可推测,CountDownLatch应该是将一个或多个主任务线程放入到CLH等待队列中,等待所有子线程执行完后再获取锁执行下一步操作,而每个子任务执行完都会将计数-1,CLH等待队列中主任务需要不停的检测计数是否归零。二、CountDownLatch的核心方法1、CountDownL
原创
发布博客 2021.03.16 ·
92 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JUC源码阅读(二)-ReentrantLock

一、ReentrantLock简介ReentrantLock基于AQS实现的可重入锁,是一个跟synchronized具有相同行为和语义的持有锁来访问方法和语句的互斥锁,但是reentrant还拥有被扩展的能力,可以有公平锁和非公平锁的不同实现,只要在构造它的时候传入不同的布尔值,就可以实现。public ReentrantLock(boolean fair) { // 默认是非公平锁 sync = fair ? new FairSync() : new NonfairSync();}二、Re
原创
发布博客 2021.03.16 ·
100 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JUC源码阅读(一)-AQS

一、AQS简介AbstractQueuedSynchronizer,简称AQS,JUC并发包中常用的ReentrantLock, CountDownLatch等都依赖AQS。子类通过继承AQS并实现它的抽象方法来管理同步状态,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作,但是通过AQS实现的功能却是不同的。二、AQS数据结构下图就是AQS的数据模型:接下来再来看看AbstractQueuedSynchronizer的成员变量// CLH队列头结点private t
原创
发布博客 2021.03.14 ·
310 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

HashMap、ConcurrentHashMap核心要点

一、HashMap1、JDK7数组+单向链表头插法存在死循环bug2、JDK8数组+单向链表+红黑树尾插法3、HashMap头插法死循环问题可以参考如下文章:《HashMap头插法为什么会出现死循环 产生循环链表的影响是什么》二、ConcurrentHashMap1、JDK7分段锁,每个Segment有独立的锁,Segment实现了ReentrantLock,也就带有锁的功能。1、分为16个Segment(相当于HashTable)2、对每一个小的Segment加
原创
发布博客 2021.03.13 ·
131 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Kafka参数调优(二)-消费者Consumer

一、Consumer参数说明1、enable.auto.commit该属性指定了消费者是否自动提交偏移量,默认值是true。为了尽量避免出现重复数据(假如,某个消费者poll消息后,应用正在处理消息,在3秒后kafka进行了重平衡,那么由于没有更新位移导致重平衡后这部分消息重复消费)和数据丢失,可以把它设为 false,由自己控制何时提交偏移量。如果把它设为true,还可以通过配置 auto.commit.interval.ms 属性来控制提交的频率。2、auto.commit.interval.
原创
发布博客 2021.03.13 ·
2197 阅读 ·
0 点赞 ·
0 评论 ·
6 收藏

Spring源码阅读(八)-设计模式

一、责任链模式1、DispatcherServlet#doDispatchgetHandler 方法的处理使用到了责任链模式,handlerMappings 是之前 Spring 容器初始化好的,通过遍历 handlerMappings 查找与 request 匹配的 Handler, 这里返回 HandlerExecutionChain 对象2、Spring AOPJdkDynamicAopProxy#invoke()方法核心代码:public Object invoke(Object pro
原创
发布博客 2021.03.07 ·
236 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

ThreadPoolExecutor源码阅读

一、Executors创建线程池的工厂方法Executors是线程池的工具类,它提供了四种创建线程池的工厂方法:newFixedThreadPool:该方法返回一个固定数量的线程池,线程数不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中,等待有空闲的线程去执行;newSingleThreadExecutor: 创建一个线程的线程池,若空闲则执行,若没有空闲线程则暂缓在任务队列中;newCachedThreadPool:返回一个可根据实际情况调整线程个数的线
原创
发布博客 2021.03.07 ·
115 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

线程私有变量—ThreadLocal

一、ThreadLocal数据结构Thread类中有个变量threadLocals,这个类型为ThreadLocal中的一个内部类ThreadLocalMap,这个类没有实现map接口,就是一个普通的Java类,但是实现的类似map的功能。Thread中的成员变量threadLocals: /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */
原创
发布博客 2021.02.28 ·
722 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

高性能内存队列—Disruptor

一、Disruptor介绍1、Disruptor特点:基于数组实现的,数组相比链表,查询更快,但是新增/修改操作较慢,而Disruptor的数组是环形数组,是定长的数组,无需扩容,直接覆盖旧数据,所以相比ConcurrentLinkedQueue,性能更好。对比下也是基于数组实现的HashMap,每次扩容耗时较长;基于CAS无锁化,高并发,使用环形Buffer,直接覆盖(不用清除)旧的数据,降低GC频率;实现了基于事件的生产者消费者模式(观察者模式);2、Disruptor的使用定义
原创
发布博客 2021.02.28 ·
649 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Spring自定义注解实战

  JDK1.5开始引入了注解,Spring框架也正好把Java注解发挥得淋漓尽致,以下通过自定义一个日志注解@LogAnnotation,在被注解的方法执行前后打印日志,来深入了解Spring注解。一、创建自定义注解创建注解类LogAnnotationpackage com.ztesoft.bss.prod.cust.service.impl.annotation;import java.lang.annotation.Documented;import java.lang.annotatio
原创
发布博客 2021.02.26 ·
336 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

零拷贝技术:mmap和sendFile

一、传统的IO操作通过上面的步骤可以发现传统的 IO 操作执行,有 4 次上下文的切换(用户态—内核态之前的切换)和 4 次拷贝(2次CPU拷贝,2次DMA拷贝),操作繁琐,性能较差。接下来就来看看两种所谓的“零拷贝”技术,mmap和sendFile。二、mmapmmap 是一种内存映射技术,将用户空间的虚拟地址和内核空间的虚拟地址指向同一个物理内存地址,这样用户空间和内核空间共享同一个内存数据。上图中的虚线方框中就是mmap技术的应用,相比传统的IO操作,减少了一次内核缓冲区—用户缓冲区的拷贝
原创
发布博客 2021.02.25 ·
966 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Dubbo源码阅读(四)-Dubbo 服务发现

一、Dubbo服务注册成ReferenceBean和上篇一样,消费端也是通过DubboComponentScanRegistrar注册成ReferenceBean,它用到的处理器是ReferenceAnnotationBeanPostProcessor,具体注册过程暂不详细展开,可以自行翻阅源码。二、Dubbo服务发现上面的服务注册到Spring IOC容器每一个服务其实就是一个ReferenceBean,ReferenceBean是一个FactoryBean,直接看下这个工厂Bean的getObje
原创
发布博客 2021.02.23 ·
168 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Dubbo源码阅读(三)-Dubbo 服务注册

一、Dubbo服务注册通过注解来注册Dubbo服务的时候,在服务端和消费端都需要用到一个组件DubboComponentScanRegistrar,先看下registerBeanDefinitions()方法:public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { Set<String> packagesToScan
原创
发布博客 2021.02.23 ·
256 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

Dubbo源码阅读(二)-Dubbo SPI机制

一、Java原生 SPISPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。1、使用在扩展类的 jar 包内,放置扩展点配置文件 META-INF/services/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。2、缺点:a、接口的所有实现类全部都需要加载并实例化;b、无法根据参数来指定实现类;c、不能解决IOC、A
原创
发布博客 2021.02.23 ·
95 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

RocketMQ源码阅读(二)-Consumer消费消息

一、Consumer启动流程Consumer启动时序图:DefaultMQPushConsumerImpl#startpublic synchronized void start() throws MQClientException { switch (this.serviceState) { case CREATE_JUST: this.defaultMQPushConsumer.getMessageModel(),
原创
发布博客 2021.02.21 ·
876 阅读 ·
0 点赞 ·
5 评论 ·
0 收藏

RocketMQ源码阅读(一)-Producer消息发送

一、Producer消息发送时序图二、Producer消息发送源码分析DefaultMQProducerImpl#sendDefaultImpl
原创
发布博客 2021.02.20 ·
378 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多