- 博客(281)
- 资源 (22)
- 问答 (6)
- 收藏
- 关注
原创 RocketMQ存储层原理
1.1 topic、订阅组group、消费进度consumerOffset1.2 多个配置文件config,故障恢复的存储Checkpoint和Filelock1.3 记录主备备份Epoch/SNtopic对应多个逻辑分区(Partition),称为队列(MessageQueue)其中ConsumeOffset用于管理订阅组消费进度(如Map)RocketMQ采...
2022-07-02 19:42:16
795
1
原创 FastThreadLocal源码解析
Netty为什么要用自己的FastThreadLocal?threadLocal Hash冲突,检索时间长。Netty自己定义的fastThreadLocal用的是数组,直接数组下标检索快。下面以ftl作为FastThreadLocal的简称例子ftl只有在FastThreadLocalThread线程中运行才生效,不然会走SlowGet模式(jdk threadLocal方式)public class Demo { public static void main(String[] args
2022-05-28 16:47:01
395
原创 Tomcat长轮训原理解析
长轮询长轮询基于HTTP,用于数据更新的实时通知广泛用于中间件配置实时同步通知如Apollo、Nacos什么是长轮询客户端向服务器请求,服务器接到请求后hold住连接,并等待数据返回(Java可以用AsyncContext来实现,spring中可以用DeferredResult来hold住请求),直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。缺点:客户端需要一直保持着这个链接,相当于这个资源一直在占用着。Spring实现异步请求客户端发起请求到To
2022-05-14 19:59:25
690
原创 Apollo Server服务端解析
如需参考源码解析,请访问:https://gitee.com/lidishan/apollo-code-analysis阅读前声明:本文不做相关用法说明,只解析Apollo源码Apollo整体架构图Apollo服务端的核心作用在于什么?配置变更和发现配置变更与发现配置的变更与发现基于一张表处理ReleaseMessage实现步骤Admin Service发布配置后,插入数据到ReleaseMessage表数据格式:AppId+Cluster(集群名称)+NameSpace(命名空间)
2022-02-26 23:40:25
1084
原创 Retry注解源码解析
@Retry注解是Spring提供的一个重试注解,使用简单(这里是为了分析其原理,其实个人认为guava的重试好用多了)。使用例子引入pom.xml依赖<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.3.1</version>&
2022-01-28 21:39:33
2331
2
原创 Transactional注解原理解析
什么是@Transactional? @Transactional是Spring这种用于处理事务的注解,基于拦截器进行commit或rollback使用例子下面举一个加了@Transactional注解的方法addUser(),并且调用了另一个隔离级别为NESTED的addUser2()方法@Servicepublic class UserService { // .. 省略其他 @Transactional public void addUser() {
2022-01-02 21:10:37
4196
1
原创 RocketMQ NameServer启动流程解析
具体分析可参考Gitee项目NameServer解析部分 =》代码地址什么是NameServer简易Topic路由注册中心,用于支持Broker的服务注册与发现。类似Dubbo的zookeeper主要能力Broker集群管理:管理Broker集群注册信息,心跳检测broker存活路由信息管理:保存Broker集群路由信息,然后producer、consumer通过nameserver获取路由信息进行投递、消费NameServer启动流程步骤创建controller解析命令及配置文
2021-11-30 22:52:14
1615
原创 RocketMQ调试环境搭建
参考资料:rocketmq那些事儿之本地调试环境搭建编译代码下载下载地址:Github地址单点部署执行步骤:先将三个xml文件拷贝到本地对应目录文件夹下。我这里放到D:\code\opensource\rocketmq\conf目录下,启动时会指定这个配置文件将broker.conf修改为如下(具体路径根据自己文件来)brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen =
2021-10-05 20:34:57
279
原创 Hystrix执行目标与断路执行分析
依赖如下<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version></dependency>什么是Hystrix2018.11发布了最后一个版本,目前处理维护阶段,不再升级版本用途:停止级联故障。
2021-10-05 10:49:22
317
原创 Hystrix数据收集及滑动窗口机制解析
依赖如下<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version></dependency>什么是Hystrix2018.11发布了最后一个版本,目前处理维护阶段,不再升级版本用途:停止级联故障。
2021-09-27 21:46:29
1551
原创 Hystrix配置插件化源码解析
依赖如下<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version></dependency>什么是Hystrix2018.11发布了最后一个版本,目前处理维护阶段,不再升级版本用途:停止级联故障。
2021-09-04 17:38:24
3661
原创 Hystrix Plugins插件机制解析
Hystrix Plugins插件机制Hystrix通过SPI提供了插件扩展机制,有如下几种插件:HystrixConcurrencyStrategy:并发HystrixEventNotifier:通知HystrixMetricsPublisher:度量HystrixPropertiesStrategy:Properties配置HystrixCommandExecutionHook:回调函数HystrixDynamicProperties:配置以上插件都由HystrixPlugins统一
2021-08-22 22:57:39
4198
原创 TransmittableThreadLocal原理解析
theme: channing-cyanhighlight: a11y-dark参考文章:https://github.com.cnpmjs.org//alibaba/transmittable-thread-local/issues/123TransmittableThreadLocal是什么?TransmittableThreadLocal(简称TTL)是alibaba提供的一个工具包中的类,主要作用就是解决线程池场景下的变量传递问题。继承自InheritableThreadLocal主要用.
2021-08-21 00:42:55
4381
1
原创 TransmittableThreadLocal使用JavaAgent动态代理机制分析
本文不提及TTL的作用,仅从源码层面分析TTL是怎么使用JavaAgent来动态代理的依赖如下:<dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>2.11.4</version></dependency>JavaAge.
2021-08-13 18:58:22
1738
2
原创 Apollo-client加载数据解析
如需参考源码解析,请访问:https://gitee.com/lidishan/apollo-code-analysis阅读前声明:本文不做相关用法说明,只解析Apollo-client源码阅读本文前请参考《Apollo-client 初始化入口流程解析》上面解析到了initialize()初始化,其是通过ConfigService.getConfig()来加载数据,那这个调用方式是怎么加载的?见下面实时获取apollo配置解析ConfigService.getConfig()如何使用?例子如下
2021-07-24 22:54:55
805
1
原创 Apollo-client 初始化入口流程解析
如需参考源码解析,请访问:https://gitee.com/lidishan/apollo-code-analysis阅读前声明:本文不做相关用法说明,只解析Apollo-client源码apollo中有一个注解,接下来先看一下这个启动注解@EnableApolloConfig 为什么要使用这个注解?系统启动时,会检索对应xml配置信息,并拉取apollo数据在postProcessAfterInitialization阶段进行覆盖配置注解初始化流程如下:第一步:在启动类上添加注解@
2021-07-24 22:51:49
1667
6
原创 Java插件扩展机制 - SPI
什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。其为框架提供了一个对外可扩展的能力。与 接口类-实现类 提供的RPC 方式有什么区别?传统的接口类实现形式为如下public interface AdOpFromApolloService {}public class AdOpFromDbServiceImpl implements AdOpFromDbService {}假设我们需要实现RPC,是怎么做的?RPC会在对应的接口
2021-07-24 17:05:21
785
2
原创 mybatis查询过程源码解析
本文只讲解mybatis的源码 ,不涉及过多的用法讲解,用法请百度。mybatis查询执行步骤(举SELECT分析)第一步:获取mapperProxy第二步:获取mapperMethod第三步:找到对应的执行类型(SELECT\UPDATE\INSERT\DELETE)第四步:查询前的缓存处理,判断是否需要从二级、一级缓存中取数据(先二级再一级)第五步:真正调用用jdbc调数据库,先预编译、再注入参数第六步:进行结果集解析填充...
2021-07-04 11:04:55
3839
原创 Guava cache源码解析
下面源码地址为:https://gitee.com/lidishan/guava-code-analysis/blob/master/guava/src/com/google/common/cache/LocalCache.java涉及依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId>
2021-07-02 23:57:29
524
1
原创 三色标记法及跨代引用
参考链接:https://www.jianshu.com/p/12544c0ad5c1、https://juejin.cn/post/6859931488352370702前言垃圾回收算法有标记整理、标记清除、复制等。但是垃圾怎么标记处理?这就涉及到标记算法,下面会仔细讲解三色标记算法三色标记法什么是三色标记法?垃圾回收过程大致如下:- 第一步:根据标记算法找到对应的待回收对象- 第二步:根据对应的回收算法如标记整理、标记清楚等来进行回收已标记好的待回...
2021-06-26 17:41:44
830
原创 ThreadLocal原理解析
什么是ThreadLocal?ThreadLocal是线程本地副本,就是每个线程都会有自己私有的副本值,互不干扰。典型的一种空间换时间的做法。基本流程如下:第一步:首先通过threadLocal.set("xxxx")获取当前线程副本值-- 大体流程:获取当前线程->拿到当前线程的threadLocals变量->根据map是否有来设置值还是创建值第二步:通过threadLocal.get()直接获取当前线程的本地副本值-- 大体流程:获取当前...
2021-06-13 16:15:12
278
原创 线程池源码简析
本文不讲解线程池执行过程过状态的判断,如要阅读可留言索要源码分析代码基本流程:用一个AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0))的原子类来保存线程数量和线程池状态,共32位,高3位保存运行状态,低29位保存线程数量。其中根据运行状态和线程数量来判断是否需要添加工作线程池。然后调用addWork()创建工作线程Work,每个Work包含thread、firstTask、completedTasks。工作线程创建会调用r...
2021-06-05 01:01:42
510
原创 Xxl-Job调度器原理解析
项目解析源码地址:https://gitee.com/lidishan/xxl-job-code-analysisxxl-job版本:2.3.0Xxl-Job分为执行器、调度器。而我们平时的客户端就属于一个执行器,执行器启动的时候会自动注册到调度器上,然后调度器进行远程调度。调度器初始化过程步骤如下1 国际化相关配置参数: xxl.job.i18n=zh_CN,这里设置为中文简体2 初始化快线程fastTriggerPool、慢线程池slowTr...
2021-06-01 22:48:43
3982
1
原创 Xxl-Job执行器原理解析
xxl-job版本:2.3.0Xxl-Job分为执行器、调度器。而我们平时的客户端就属于一个执行器,执行器启动的时候会自动注册到调度器上,然后调度器进行远程调度。执行器初始化过程步骤如下1通过加了@Conguration注解的XxlJobConfig初始化,并生成beanName=xxlJobExecutor的Bean2注册的BeanName=XxlJobConfig,会进行初始化,步骤如下:-扫描所有bean,加载加了@XxlJob注解类,并记录在job...
2021-05-31 22:49:40
8043
原创 Spring @Configuration如何注入
业务代码一般用拦截器拦截注解,并作相应定义。但Spring的注解如@Conguration是通过XxxxPostProcessor来进行注入。@Configuration有独属的postProcessor处理器 -ConfigurationClassPostProcessor@Configuration作用及使用案例作用:类型以前的XML配置注入对应的Bean,将比如application.properties的属性注入到对应的Bean实体类使用案例(比如下面...
2021-05-29 21:48:22
2377
原创 Redis AOF持久化原理解析
Redis版本:Redis 4.0.1Redis是一个键值对数据库服务器,存储在内存中,如果重启没进行持久化,数据会丢失。所以需要持久化策略RDB和AOF。涉及Redis源码解析:https://gitee.com/lidishan/redis-source-code-analysis/blob/master/src/aof.cAOF与RDB的区别- AOF保存Redis所执行的写命令来记录数据库状态,RDB是直接保存键值对数据- AOF纯文本,RDB二进制...
2021-05-27 23:25:58
642
2
原创 Redis RDB持久化原理解析
Redis版本:Redis 4.0.1Redis是一个键值对数据库服务器,存储在内存中,如果重启没进行持久化,数据会丢失。所以需要持久化策略RDB和AOF。涉及Redis源码解析:https://gitee.com/lidishan/redis-source-code-analysis/blob/master/src/rdb.c前提知识归纳RDB用于保存和恢复数据库所有键值对使用save或bgsave报错,其中bgsave是fork子进程不会造成阻塞rdb文...
2021-05-23 11:54:25
412
转载 Apollo客户端源码解析
本节主要对 Apollo 客户端设计原理进行解析。设计原理简要描述了 Apollo 客户端的实现原理注册bean spring启动时调用bean初始化 获取namespace并初始化配置并写一份配置到文件中,开启线程长轮训+定时拉取配置 添加监听listener 扫描字段、方法转化成SpringValue,保存在SpringValueRegistry中 http长轮训+定时拉取服务端配置 更新SpringValue准备工作利用EnableApolloConfig...
2021-05-17 21:57:48
1094
原创 Redis服务端初始化流程
参考链接:https://redissrc.readthedocs.io/en/latest/init/server.html https://www.jianshu.com/p/1166288c6d32?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation https://bl...
2021-05-16 09:10:21
3780
原创 Redis对象及其类型与编码
Redis对象包含多种数据结构和类型,其组成如RedisObjecttypedef struct redisObject { unsigned type:4;// 类型:字符串、列表、哈希、集合、有序集合 /** * 编码:long类型的整数、embstr编码的简单动态字符串、简单动态字符串、字典、双端链表、压缩列表、整数集合、跳表 * ** 不同类型对应的编码 * **** 字符串:long类型的整数、embstr编码的简单动态字符串、简单...
2021-05-15 19:52:23
599
原创 Redis压缩列表ziplist的实现
参考链接:-- 《Redis设计与实现》-- 源码解析:https://www.cnblogs.com/yinbiao/p/11249161.html关键代码位置:src/ziplist.c数据结构概述说明:-ziplist是 列表list 或 hash 的底层实现之一,只有数据量小的时候才会用,举个例子如下:-- hash结构:键值均<64字节 && 键值对数量 < 512-目的是为了节省内存,在数据量少的时候就省内存。由一系列特...
2021-05-14 21:26:19
646
原创 Redis整数集合的实现
参考链接:-- 《Redis设计与实现》-- 源码解析:https://www.cnblogs.com/yinbiao/p/11249161.html--结构说明:https://redissrc.readthedocs.io/en/latest/compress-datastruct/intset.html关键代码位置:src/intset.c数据结构概述说明:-是集合的底层实现之一-底层实现是数组(连续的内存结构),有序、无重复-整数集合类型可升级(16位-&...
2021-05-09 18:36:46
702
原创 Redis跳表数据结构
参考链接:-- 《Redis设计与实现》-- 源码解析:https://www.cnblogs.com/yinbiao/p/11238374.html关键代码位置:src/ t_zset.c时间复杂度:O(logN)数据结构概述说明:-每个跳表层高1~32层-跳跃表是有序集合的实现之一-按照分值升序排序其核心结构源码如下:typedef struct zskiplistNode {// 保存当前跳跃表的节点信息 sds ele;...
2021-05-08 21:47:37
222
原创 Redis字典数据结构
参考链接:-- 源码解析:https://www.cnblogs.com/yinbiao/p/10766357.html--结构说明:https://redissrc.readthedocs.io/en/latest/datastruct/dict.html关键代码位置:src/dict.h字典是一种键值对映射,但C语言无这种数据结构,Redis自己实现了一套。另外字典是hash的底层实现之一。数据结构概述说明:- ht数组有两个元素,没有rehash情况下,默认...
2021-05-08 21:44:22
357
原创 Redis列表数据结构
关键代码位置:src/adlist.h列表作为一种常用的数据结构,Redis也有,其数据结构含:- 头节点、尾节点、节点值复制函数、节点值释放函数、节点值对比函数、链表长度记录、dup复制函数、free释放函数、match匹配函数相关函数如下(随便看下就好了):源码分析如下:typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 st...
2021-05-08 21:40:29
307
原创 RocketMQ设计原理简析
参考连接:https://github.com/apache/rocketmq/tree/master/docs/cn一、消息存储1消息存储整体架构CommitLog:消息主体以及元数据的存储主体(可包含多个topic)-- 定长,文件默认1G,文件名为20位,为偏移量的数值来命名。文件顺序写(性能几乎等于内存读)。---- 比如第一个文件名:00000000000000000000,由于第一个文件大小为1G=1073741824,第二个文件名应该为:00...
2021-04-27 23:05:43
344
原创 Skywalking启动加载过程
搭建文档:https://www.jianshu.com/p/ec8ef2b91e92本次讲解版本:apache-skywalking-apm-8.5.01 Skywalking整体架构主要组成:UI(数据显示)、Storage(存储层)、Agent(客户端数据收集)、OAP(服务端数据接受处理)2源码解析如下首先skywalking用的是javaagent技术,入口为:org.apache.skywalking.apm.agent.SkyWalkingAge...
2021-04-24 15:36:59
2355
原创 Redis常用数据结构及其场景归纳
1 mset、mget、msetnx批量处理字符串更新、获取、加锁场景:文章的标题、内容、作者等多个key 批量发布和查看(对于这种可以直接用序列化反序列化。。)2 strlen、getrange统计文章字数、预览文章(截取文章)场景:博客字数统计和文章预览3 append拼接字符串场景:日志拼接(也是很少用)4 hset、hget场景:记录生成次数5 lindex、lset、linsert、ltrim、lrem、lpus...
2021-04-18 10:30:11
577
原创 Redis String底层数据结构
参考链接: https://www.jianshu.com/p/160fb0f73841如想看源码就看上面的链接就好~~~~~~~~~~~~~~~~~~~1 Redis底层存储是一个hash结构,与HashMap差不多,都是一个数据+链表组成的,然后拉链法解决冲突2 其hash节点含key、value、next指针,如下:/** 哈希表节点*/typedef struct dictEntry {// 键void *key;// 值...
2021-04-18 10:23:13
1622
Linux高性能服务器编程.pdf
2018-12-18
Maven权威指南中文版pdf(高清带完整目录).pdf
2018-12-17
构建高性能Web站点(修订版).pdf
2018-12-16
TOMCAT权威指南(中文版).pdf
2018-12-16
架构探险 从零开始写Java Web框架.pdf
2018-12-16
程序员的SQL金典(完整清晰版).pdf
2018-12-16
大数据概念介绍.pdf
2018-12-16
深入分析Java Web技术内幕修订版书籍.pdf
2018-12-16
七周七并发模型_PDF电子书下载 带书签目录 高清完整版
2018-12-16
《操作系统精髓与设计原理(原书第6版)》PDF中文版
2018-12-15
《算法导论》课后习题完整答案(包含思考题)
2018-12-15
Java面试宝典2017版
2018-12-15
Java面试题总览
2018-12-15
swoole websocket实现五子棋
2017-05-11
swoole实现的你画我猜
2017-03-28
nodejs基于express简易聊天室
2016-07-27
PHP SOCKET如何释放所占用的端口
2015-11-24
PHP SOCKET如何释放所占用的端口
2015-11-23
PHP SOCKET如何释放所占用的端口
2015-11-23
PHP的curl模拟·登录老是失败出现了405错误
2015-08-20
Laravel5.0如何引入js,css,image这些啊
2015-08-19
php中如何用curl模拟http头信息进行模拟登陆并获取信息
2015-08-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人