自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

随笔

学习随笔

  • 博客(35)
  • 收藏
  • 关注

原创 C语言指针相关

C语言指针相关

2022-01-23 13:07:34 308

原创 zookeeper之watcher机制探索

简介 这篇文章主要谈论下zookeeper是如何实现watcher机制的,在此之前我们来搞清楚下zookeeper是如何通信的。 通信不是我们研究的重点,这里就不多说了,直接从应用层面谈watcher。watcher机制...

2021-03-24 19:30:32 241

原创 seata-整体执行流程

简述 今天回顾下之前seata的内容,发现之前把seata拆解的有些零散,故想着做一个简单的整体执行流程的描述。流程 如图为seata的几个核心模块的主要组件,流程上下面仔细来看 ,我们知道事务的源头就是TM,首先就是GlobalTransactionalInterceptor,前面细说过核心模块的处理,不多说这个,直接结合TransactionalTemplate来说整体流程。public Object execute(TransactionalExecutor business..

2021-03-21 13:15:32 787

原创 redis集群搭建简记

简介redis版本6.0.10,准备3台物理机,192.168.22.1(node1 7001,7004),192.68.22.2(node2 7002,7005),192.168.22.3(node3 7003,7006),搭建3主3从cluster。详细配置daemonize yesprotected-mode nopidfile /var/run/redis-7001.pidlogfile 7001.logdir /usr/local/soft/app/redis-6.0.10/

2021-03-10 09:40:13 117

原创 sentinel探索

简介微服务系列组件用来保证服务之前调用的稳定性,阿里提供了sentinel这个组件来解决这个问题。借用下官网的图片。可以看到,sentinel大体工作原理就是每个slot对资源的保护处理。组件分析......

2021-02-21 17:14:15 282 2

原创 mysql tar包安装简记

简介 mysql版本5.7.30.详细配置/etc/my.cnf[mysqld]basedir=/usr/local/soft/app/mysql-5.7.30/#data目录创建好datadir=/usr/local/soft/app/mysql-5.7.30/dataport=3306character-set-server=utf8#socket目录创建好socket=/usr/local/soft/app/mysql-5.7.30/socket/mysql.so..

2021-02-18 14:28:45 125

原创 sentinel-滑动时间窗口算法探索

简介 其实sentinel核心原理并不难理解,就是在访问被保护资源时,根据实时的统计信息和预先定义的规则,检查是否可以访问。对我自己而言,可能统计的算法是比较关心的,都知道sentinel的统计算法是滑动时间窗口算法,这个算法一这么说就不接地气了,下面谈谈我们农村的说法。探索 说这个算法主要要解决什么事呢?就是说在某个时间间隔要做点统计,比如说现在时间是16:06:21,320,我现在想知道16:06:21,000-16:06:21,320我的应用app通过了多少个请求,即当前的32...

2021-02-10 10:04:57 1029

原创 初识shardingsphere-jdbc

简介 趁着seata的热乎气,继续谈谈分布式数据的问题,今天谈谈对shardingsphere-jdbc的初识。分析 先看看对shardingsphere-jdbc的整体认识,看看来自官网的一张图。 第一想法是什么?图画的不错,不不,好像是拿着Sharding-JDBC取代了jdbc,通过Sharding-JDBC来访问数据库,靠猜不行看看代码怎么搞的,这种入门程序就不多说了,直接到官网截一段使用的代码片段。 呀哈,确定过眼神好像见过这个图,没毛病老铁,...

2021-02-05 17:19:38 150

原创 seata-tc模块浅析

简介 终于说到了TC了,我们都知道整个seata的核心模块就RM、TM、TC三个模块,当然seata的核心包也就是core包其实是主要是做通信的,但是我觉得通信不是seata理念部分,netty的源码研究过了,通信这里不应该是太大问题,所以说完TC,seata也就说完了。浅析 从哪开始说TC呢,我们知道TC相对TM和RM来说,主要是用来提供服务的,那就看看它能有啥服务,就从netty的hangdler说起。NettyRemotingServer实例化时会设置handler。Ab...

2021-02-04 17:24:40 1090

原创 seata-rm模块浅析

简介 这篇文章继续谈谈RM、TC模块,之前说过TM,发现说过这个之后剩下的RM和TC也不会剩余太多东西了,就放在一起谈谈吧。从哪说起呢,还是结合springboot配置那说吧。浅析 TM里谈过SeataAutoConfiguration,但是未提及SeataAutoDataSourceProxyCreator,这里就从它说起吧。public SeataAutoDataSourceProxyCreator(boolean useJdkProxy, String[] exclude...

2021-02-04 15:16:50 774

原创 seata-不是公网ip注册

背景 首先说明下,是在springcloud整合seata时出现的问题,即nacos+seata。问题描述 在腾讯云上启动seata-server,本地RM注册时总是失败,失败如下。问题 这个问题很简单,因为涉及ip未截取有关ip的日志,就是因为连接内网ip没连上,问题是简单,但是为什么会出现这个问题呢,或者说怎么解决呢?分析 要说这个问题得先谈谈SeataAutoConfiguration这个自动配置对象,在初始化SeataDataSourceBea...

2021-02-03 09:02:51 2466

原创 mybatis源码浅析

简介 一直以来都在使用mybatis,但却没有深入的了解下它,这么一款常用的持久层框架还是有必要翻翻源代码的。先上一张我自己初学mybatis的图。当时一看这图,觉得mybatis全都懂了。。。,再把后来看过的mybatis资料图附上。架构图组件关系 看完这些图立马觉得懂了。。。浅析 话不多说直接看代码,就看官网的入门篇代码吧。DataSource dataSource = BlogDataSourceFactory.getBlogD...

2021-02-01 17:28:06 142 1

原创 踩坑记录-nacos

简介 最近发现记忆力不怎么靠谱,许多搞过的代码都记不太清了,决定把平时遇到的问题都记录一下。问题问题一 很简单就是搞一个spirngcloud的nacos整合。 配置如下。//bootstrap.ymlspring: cloud: nacos: discovery: server-addr: ip:port//application.ymlserver: port:...

2021-01-29 14:09:36 198 1

原创 spring之requestMappingHandlerMapping深入探究

简介 说到springmvc都有过使用过程,也都对格组件流转过程有所认识,但是一直没有特地看看requestMappinHandlerMapping组件,故今天深入探究下这个组件。分析 先来看看这个组件全景图。 先不分析为何这么设计,先看看组件使用,从使用过程来探究设计原因,首先看看组件初始化。 从这里很容易看清,初始化主要过程就是容器实例化单实例化RequestMappingHandlerMapping时,会触发其InitializingBean...

2021-01-28 16:46:44 890 1

原创 seata-tm模块解析

简介 之前分析了seata-config模块,接下来继续分析下下seata的几个模块,core模块先不提了,很多模块都要用到,而且从其包结构来看大致能了解到,core模块主要是做通信和那3个数据对象(GlobalTransactionDo、BranchTransactionDo、LockDo)的存储的,虽说按模块肢解来谈有些不连续,但一起谈seata的TC、TM、RM,害怕吐血,还是一个个谈吧。先说说TM吧。浅析 话不多说直接上代码,在客户端编程时就是引入jar包,然后写上注解就完了...

2021-01-25 11:07:46 1149

原创 seata-config模块解析

简介 分布式事务解决方案,找个成熟的方案看看,得谈谈seata。看看其源码,主要模块有core、server、tm、rm、tcc、config、discovery。。。,还挺多的,没办法要搞懂这个技术就得一个个看看,其实是看server的时候对config有了疑问,因此才转而想把config优先弄懂。浅析 之前说到看server的时候有了疑问,那就是为什么分布式配置时nacos要用那个脚本(nacos-config.sh)把单值一个个配置项加载进nacos,而不是直接在nacos搞一...

2021-01-21 17:30:14 1023

原创 rocketmq简记

关于mq的概念、优缺点不再多说,主要谈谈rocketmq的通信和存储,了解rocketmq的都知道其主要分3个组件或者说4个组件:Producer、Consumer、Broker、Namesrv,既然说存储,那就谈谈Broker。用过rocketmq原生api的都了解其编程模型,大体上就是搞个Producer、设置上namesrvAddr、发送消息就完事了,对于Producer不在这里多说,比较简单,大体就是和namesrv通信选择一个broker,发送消息,也就是相对broker来说就是个客户端(注意

2021-01-04 11:15:30 164

原创 spring-aop浅析

简介 这篇说说spring的aop对AspectJ的支持,我们知道AspectJ植入时机有3种:compile-time、post-compile、load-time,那spring是如何支持AspectJ的呢?要搞清楚这些得搞个demo工程翻翻代码,可以基于spring构建,也可以基于springboot构建,当然2种方式都挺简单,boot不过是替我们开启了AopAutoConfiguration。因为demo非常简单,这里不说这个demo了,直接看看原理。...

2020-08-30 14:13:17 94

原创 springcloud-feign浅析

今天继续学习feign,feign从使用上来说非常简单,就是spring的常用使用方法,开启feign功能,使用feign注解就可以了,那今天就看看怎么开启的,如何运行的。组件分析 既然是从@EnableFeignClients开始使用的,那就从这个注解说起,这个注解向容器导入了FeignClientsRegistrar这个组件,那就来看看这个组件。这样看来这就是个ImportBeanDefinitionRegistrar,用来注册bean定义的,那都注册哪些bean定义呢?...

2020-08-27 23:32:13 121

原创 springcloud-ribbon

继续学习负载均衡组件Ribbon。组件分析 从springcloud开始分析。public interface LoadBalancerClient extends ServiceInstanceChooser { <T> T execute(String serviceId, LoadBalancerRequest<T> request) throws IOException; <T> T execute(String serviceI.

2020-08-21 23:14:52 124

原创 springcloud-gateway浅析

背景 用过API网关,还是zuul实现呢,要不就是nginx,现在还有springcloud gateway,但一直没有个整体的认识,什么是API网关,为什么用它?它是如何工作的? 在计算机领域网关是一种网络设备(网间连接器、协议转换器),我们知道在不同ip网段的2个ip是不能相互通信的,那来个路由器就可以通信了,...

2020-08-17 23:15:39 485

原创 springcloud-nacos组件浅析-3

背景 之前2篇学习过nacos客户端注册相关组件的注册,这里要继续学习下nacos服务端注册原理。组件分析如上所示分别为Service、Cluster、Instance三个服务模型结构,可有如下关系。接下来看看ServiceManager。 ServiceManager执行注册时,首先创建服务放到Map中,然后初始化service,s...

2020-08-16 16:02:17 241

原创 springcloud-nacos组件浅析-2

继续nacos的学习,之前说了nacos对springcloud规范的结合,这里说说客户端如何进行服务注册的。组件分析 主要就是NacosNamingService这个组件如何工作的。NacosNamingService让NamingProxy去发起http请求去注册,并且同时一定时间后执行心跳任务,心跳任务里会继续执行心跳任务(总体来看,可以看成是定时的执行心跳任务),执行心跳任务时发送心跳不成功时,会执行注册...

2020-08-14 22:09:14 91 1

原创 springcloud-nacos组件浅析-1

背景 随着netflix各组件的闭源,可能得拥抱其它开源方案了,恰好阿里开源了nacos,那今天说说nacos作为注册中心的spirngcloud部分,后续部分再陆续学习。组件分析 打开nacos官网,就能看到nacos的springcloud项目的快速开始,会发现非常简单,无非就是3步,添加依赖、开启配置、配置属性,当然要提前准备好服务端并启动,这些都相当easy就不多说了,直接说说核心组件,今天主要学习下NacosServiceRegistryAutoConfiguration和Na..

2020-08-14 17:52:55 795

原创 springmvc-不说主要组件-说说参数处理

目录背景执行流程思考背景 要说springmvc原理可能大多数人都要说它的几个主要组件DispatcherServlet、HandlerMapping、HadlerAdapter、ViewResolver、View,但是这篇文章不说这个,进一步说说HandlerAdapter具体是怎么工作的,即controller中随便写什么参数都能得到处理,返回想要的结果。执行流程 在说参数的问题之前先说说为啥从HadlerAdapter说起吧,话不多说上图。 ...

2020-07-05 14:41:34 127

原创 jvm复习-从jvm整体印象说起

前言 最近想系统的了解下jvm,于是打算以宏观到微观这样的方法论,来了解下jvm结构。开始 话不多说,先来张图看看jvm长啥样,到底漂不漂亮。jvm结构大致如上图所示,执行流程为,类加载子系统加载cass文件,将文件中的静态量放到方法区中,并且在内存中创建Class对象(注意虚拟机规范并未对哪部分内存做限定,hotspot的Class对象是在方法区中的),...

2020-06-26 18:04:38 137

原创 简谈jdk8-stream

Spliterator用于遍历和分割源元素的对象,Spliterator操作的源元素可以有许多,例如:数组、集合、io channel、生成器函数。Spliterator可以逐个遍历元素,或者按顺序批量遍历。为了在可能的并行操作中被使用,Spliterator可以把它的元素分割成另一个Spliterator。Spliterator是为了支持并行迭代的,Iterator是顺序迭代。public static void main(String[] args) { Spliterator&l

2020-06-21 11:47:11 189

原创 springboot浅析

目录背景试水总结思考背景 由于springcloud基于boot构建,要了解一些cloud规范的实现,就需要对boot的流程有所了解,而不同boot版本可能有所变化,故基于boot2.3.0来看看启动流程。试水 直接上代码,看着代码说事。@SpringBootApplicationpublic class GatewaySampleApplication { public static void main(String[] args) { ...

2020-06-11 16:27:22 135

原创 @ConfigurationProperties原理浅析

背景 用springboot开发总会涉及Properties的处理,@ConfigurationProperties这个注解就是用来处理配置文件到属性类的映射问题的,用起来挺简单的,但是到底咋回事一直也没去了解过,现在看看到底怎么一回事。试水 还是先放上一段代码好说话。//pom<dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp...

2020-06-10 17:32:36 844

原创 浅谈SPI扩展机制

近来看Hasor、Dubbo等框架都说到微内核(Microkernel),想想jdk、srping、dubbo、hasor等都谈SPI,决定随笔记录下各个框架的spi,文章主要谈jdk、spring、dubbo的spi机制,出于目前的水平看来,spi就是一种偷懒方式,框架内都是针对接口编程,而实现自己可做可不做,谁做的好可以插进来就用就完了。1、jdk的spi jdk的spi先说说java.util.ServiceLoader这个类吧,先看看咋用的尝试下spi,//定义服务提供接口p...

2020-06-07 12:02:12 3610 1

原创 JNi初探-环境搭建

最近想了解下jni,因此需要搭建一下基于win10的开发环境,那本文主要讲win下jni开发c/c++环境的搭建,因为我们知道jni主要是起到一个桥梁的作用,主要的实现是c/c++程序,java来调用jni很简单,只需要了解下javah,因为发现很多jni文章都在说给提供so库的过程,而没有说dll如何提供,而恰巧本人是win10系统,故阐述下jni尝试的问题。1、搭建Clion开发环境 首先搭建开发环境,本人有过一篇基于wsl搭建开发环境配置wsl的ssh服务开机启动文章,当然那篇文...

2020-06-04 19:26:04 242

原创 jvm源码工具clion

最近在clion中配置Toolchains,想用win10的WSL,但是配置中遇到一些问题,每次开机需要手动启用WSL的ssh服务,不然clion会报错,因此想让WSL的ssh服务开机自动启动,参考这篇文章-原文地址。一、安装ssh 虽然已经安装了ssh服务,但是默认自带的不能用。所以需要先卸载再安装(可以先试着远程连一下,报错的话记录下错误信息,稍后重新安装完对比下多了好多文件,注:过了许多天忘了多的文件)。执行以下命令进行卸载和安装。sudo apt remove o...

2020-05-31 11:10:26 495

原创 初识Dubbo-1

今天认识下Dubbo,按套路来先看看为啥整个这个技术,看看官网,官网说背景里说分布式架构RPC是关键,然后在需求里说了一大堆,总结下来就是说需要注册中心、监控中心、调度中心,用过Eureka、Nacos这些注册中心的都知道,注册中心就是RPC实现的一种形式,通过注册中心解决分布式服务之间的远程调用,那啥是RPC(远程过程调用),对于java来说,RPC就是我本地没有这个方法的实现但是我还想调用这个方法,目的搞清楚了,接下来看看怎么跑起来,为了读源码方便,直接不基于Spring编写。<dep...

2020-05-11 11:59:21 126

原创 初识线程池-2

继续上一篇文章,这篇内容主要是为学习netty做铺垫,上篇主要谈Executor框架和它的线程池ThreadPoolExecutor,那么现在我们谈谈Netty的线程池实现,Netty的线程池是NioEventLoopGroup,现在我们看看怎么搞个这线程池帮我们执行任务,那先看看怎么创建一个NioEventLoopGroup,查看Api有无参构造,那还说啥直接啥都别管先new一个,跑起来再说。NioEventLoopGroup group = new NioEventLoopGro...

2020-05-09 16:39:56 142

原创 线程池

线程池,线程的容器,线程池是一个应用层面的调度器,该调度器调度一些线程来执行一些任务,通俗的讲就是线程池负责让一些线程执行一些任务,如图为executor的两级级调度模型,executor框架调度线程执行任务,而java线程被一对一的映射为操作系统线程,通过图1可以看出executor负责上层调度,而下层调度由系统内核控制。(参考自《java并发编程的艺术》) 图2为ex...

2020-05-08 16:06:55 131

空空如也

空空如也

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

TA关注的人

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