自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

醒不来的梦的博客

从前从前。。。

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

原创 Sentinel---滑动窗口限流

上一段demopublic class SentinelDemo { private static final String resouce = "doGet"; public static void initFlowRules() { List<FlowRule> flowRules = new ArrayList<>()...

2020-04-28 14:41:52 540

原创 dubbo核心之服务端接收请求过程(七)

一、服务端启动NettyServer入口1、由dubbo服务端开启端口为20880的netty服务为入口1、NettyServer接收客户端请求@Overrideprotected void doOpen() throws Throwable { bootstrap = new ServerBootstrap(); bossGroup = new NioEventLoop...

2020-04-23 21:43:50 1423

原创 dubbo核心之客户端发起请求过程(六)

一、客户端代理类请求过程1、在Controller中使用dubbo的@Reference注入的对象是在ReferenceConfig中生成的代理类 1、ReferenceConfig中构建invoker并创建代理类 private T createProxy(Map<String, String> map) { //代码省略。。。 // create...

2020-04-23 20:14:20 335

原创 dubbo核心之消费端的Invoker(五)

一、消费端Invoker

2020-04-22 17:47:24 612

原创 dubbo核心之服务端的Invoker(四)

一、InvokerInvoker是一个代理,与dubbo中的SPI一样重要,在ServiceConfig中在调用export方法时会将一个invoker对象传递进去,分析下这个private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List<URL> registryURLs) { //省略。。...

2020-03-21 23:58:45 600

原创 dubbo核心之服务注册(三)

一、服务注册过程上一章分析到ServiceBean → ServiceConfig → RegistryProtocol,继续看它的export方法1、RegistryProtocol的export方法//实现服务的注册和发布@Overridepublic <T> Exporter<T> export(final Invoker<T> originIn...

2020-03-21 22:50:28 109

原创 dubbo核心之服务发布(二)

一、服务发布的过程dubbo要想发布一个服务需要做到以下几点1、解析配置文件2、通过netty去暴露一个服务3、序列化和反序列化4、将信息发布到zk上dubbo依赖spring的SPI进行服务发布,通过继承spring提供的NamespaceHandlerSupport加载application.xml的配置信息,并通过继承spring提供的BeanDefinitionParser...

2020-03-19 16:04:02 138

原创 dubbo核心---SPI(一)

一、SPIjava中的SPI(service provider interface),数据库驱动 java.sql.Driver, 通过加载在MATA-INF/services下以java.sql.Driver,命名的文件数据库驱动厂商自己实现,比如mysqldubbo很好的借鉴了这种SPI机制,dubbo会加载META-INF/services,META-INF/dubbo和M...

2020-03-03 21:20:36 135

原创 zookeeper的watcher源码(四)

一、客户端注册watcher引入zkClient的maven依赖客户端注册 watcher 有 3 种方式,getData、exists、getChildren;public class WatcherDemo { public static final String host = "122.51.167.43:2181"; public static final Stri...

2020-02-06 03:44:13 125

原创 zookeeper集群leader选举源码分析(三)

一、zookeeper的顺序一致性google的chubby就是解决分布式环境下多个服务选举出leader时,由于网络环境的不可靠性,会出现丢失、篡改问题(拜占庭将军),因此服务间用paxos算法实现分布式锁和master选举。zk就是chubby的开源实现。zk是使用zab协议完成数据同步,并不是强一致性,而是简化版的顺序一致性,如图:1.当客户端B和C在zk修改时去读取x的值,如果B...

2020-02-05 00:52:48 272

原创 zookeeper分布式锁基于curator源码(二)

在 apache封装的zk客户端操作组件curator中,有不同的锁InterProcessMutex:分布式可重入排它锁InterProcessSemaphoreMutex:分布式排它锁InterProcessReadWriteLock:分布式读写锁以InterProcessMutex为例public class LockDemo { public static f...

2020-02-04 01:24:28 106

原创 Zookeeper(一)

Zookeeper不单单是服务注册中心,它是一个分布式协调服务。最早是google开发出chubby服务于GFS系统,chubby又是基于poxos算法zookeeper通过ZAB(Zookeeper Atomic Broadcast )协议实现分布式数据一致性。ZAB分为:崩溃恢复和原子广播原子广播:1. leader 接收到消息请求后,将消息赋予一个全局唯一的64 位自增 id,叫:...

2020-02-03 15:41:33 222

原创 Netty源码分析(四)--- NioEventLoop如何读取消息

一、NioEventLoop工作过程贴一段Netty Server端和Client端的demo//1. Server端public class NettyServerTest { public static void main(String[] args) { EventLoopGroup boss = new NioEventLoopGroup(1); ...

2019-12-27 02:57:54 155

原创 Netty源码分析(三)--- 新连接进来如何初始化NioSocketChannel

一、NioSocketChannel的初始化从NioEventLoop开始说起我们在服务端启动后,boss线程组会启动一个NioEventLoop线程,它会在run方法中无限循环接收感兴趣的事件//1. NioEventLoop//新连接进来会触发ACCEPT事件@Overrideprotected void run() { for (;;) { try { ...

2019-12-26 18:15:20 230

原创 Netty源码分析(二)--- Server端启动流程

一、Netty-Server端启动流程从ServerBootstrap的bind方法开始:initAndRegister();方法//1. 绑定端口public ChannelFuture bind(SocketAddress localAddress) { validate(); if (localAddress == null) { throw new ...

2019-12-26 15:13:30 175

原创 Netty源码分析(一)--- 核心组件NioEventLoopGroup和NioEventLoop的初始化

一、NioEventLoopGroup和NioEventLoop的UML类图二、NioEventLoopGroup初始化流程从new一个NioEventLoopGroup开始//一、NioEventLoopGroup的构造器//1.传入线程数public NioEventLoopGroup(int nThreads) { //新增传入为null的执行器 this(nThrea...

2019-12-25 17:47:19 303

原创 JVM GC日志篇(五)

一、GC时机GC发生的时机是由JVM决定的,根据JVM系统环境设定,发生的时机是不确定的,我们可以手动的GC,比如调用System.gc(),但这也仅仅是通知JVM需要进行GC,具体GC时间还是由JVM决定。不建议手动GC,消耗资源比较大。发生GC的情况1、Eden区或者S区空间不够了2、Old区空间不够了3、方法区空间不够了4、System.gc()二、GC文件创建一个...

2019-12-20 10:21:55 100

原创 初识JVM(一)

一、.java文件到.class文件编译过程执行 javac Customer.java生成Customer.class文件编译的流程:Customer.java → 词法分析器 → tokens流 → 语法分析器 → 语法树/抽象语法树 → 语义分析器 → 注解抽象语法树 → 字节码生成器 → Customer.class文件Class文件cafe babe 0000 003...

2019-12-12 16:57:11 103

原创 Maven简要概述

pom文件部分内容:主要构成是基础部分:描述本包的依赖坐标:,type多为pom和jar,pom是文件,没有具体内容,jar包是有类的父类:parent:用来指定一个父类,只能是pom类型,所有在父类配置的内容,子类都会拥有,可用在这里配置所有子包都需要使用的一些内容,例如构建参数,依赖管理等属性配置:主要用来标识各个依赖包的版本号,统一管理,依赖包里的版本使用变量替代,例如<sp...

2019-12-06 10:29:08 73

原创 初识Kubernetes(一)

一、Kubernetes组件与架构图Pod:k8s中最小操作单位,一个或多个container的组合ReplicaSet:k8s中通过selector管理Pod的组件Deployment: k8s中管理ReplicaSet和Pod组件Label:k8s中以key/value形式为Pod分类Service:具有相同的Label的集合体Node:Pod运行的地方(比如cento...

2019-11-11 16:19:39 208 2

原创 Docker实战(四)

一、持久化Dockerfile中能看到VOLUME这个关键字,先创建个containerdocker run -d --name=mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.21会返回一串编号:a0ff652112059926c5e82bda0a832948e1c4ce11294afb17481a278b4627...

2019-11-08 14:02:10 125

原创 Docker网络(三)

一、计算机网络模型二、Linux中网卡查看网卡详情命令:ip link show查询网卡:ls /sys/class/net查看ip信息: ip a状态 UP/DOWN/UNKNOWlink/ether:MAC地址inet :ip地址我们可以通过修改文件或者命令的方式改ip地址文件:/etc/sysconfig/network-scripts目录...

2019-11-08 14:02:05 140

原创 Docker核心(二)

一、什么是Imageimage是由一层层的layer构成image是read-only看看官方提供tomcat的imageimage就是一个Dockerfile,分析一下Dockerfile的语法FROM: 指定基础镜像(centos、 openjdk:8 等等)eg:FROM openjdk:8-jdkENV:环境变量(可以通过docker run --e key=va...

2019-11-08 14:02:00 101

原创 Docker入门(一)

一、为什么用docker对比部署方式传统部署:成本高、部署慢、不利于扩展虚拟化部署:相对传统部署来说扩展和资源利用较好,但是虚拟机太重,占用太多资源docker部署:1、充分利用机器资源;2、有助于MicroService部署;3、推动DevOps落地淘汰敏捷开发,提高开发、测试、部署效率;4、云原生落地、利于应用迁移;二、docker的安装首先有一台Centos7系统...

2019-11-08 14:01:52 101

原创 Mybatis整合Spring实现Mapper自动注入原理

通过Spring的扩展点,实现bean的管理 + 封装Template方法一、Bean的管理在引入mybatis-spring.jar后,我们需要在applicationContext.xml中配置 SqlSessionFactoryBean具体看看这个类:1、FactoryBean:这是spring的工厂bean,我们获取bean的时候会得到它getObject方法返回的对象,只...

2019-10-06 18:38:18 2370 1

原创 Mybatis插件的使用

插件执行时序图链接: 时序图.插件能干的事sql执行日志sql执行效率插件根据条件水平分表查询(方法上加注解)权限控制数据库敏感信息加密...

2019-10-06 15:04:56 68

原创 Mybatis的动态sql、懒加载

一、 动态sqlif标签:满足某某条件<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if>...

2019-10-06 01:17:21 710 1

原创 Mybatis缓存分析

一、mybatis四个核心对象的生命周期SqlSessionFactoryBuilder:只用一次 存在于方法体中,用于解析配置文件,构建SqlSessionFactorySqlSessionFactory:全局单例 存在整个生命周期,用于创建SqlSessionSqlSession:线程不安全的,存在于每次操作数据库创建这个对象, 用于创建MapperMapper:都是代理对象,存在于...

2019-10-06 01:13:17 100

原创 Mybatis时序图

一、创建SqlSessionFactory时序图: 链接: 创建SqlSessionFactory.二、创建SqlSession时序图: 链接: 创建SqlSession.三、创建Mapper代理对象时序图: 链接: 创建Mapper代理对象.四、代理Mapper对象调用查询方法时序图: 链接: 代理Mapper对象调用查询方法....

2019-10-06 01:12:37 449

原创 提炼spring核心代码,如果仿写源码不是为了装逼,那将毫无意义

代码托管到github主要还是站在设计者角度,减轻开发人员繁琐配置,让他们专注于业务https://github.com/neo0116/my-spring-framework.git目录:

2019-10-03 17:01:09 152

原创 300行代码提炼Spring核心原理(超级乞丐版)

1、项目结构2、自定义注解@BDController@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface BDController { String value() default "";}@BDService@Target({ElementType.TYP...

2019-09-24 15:58:04 786

原创 cglib动态代理--简单原理

cglib动态代理引入cglib.jar+asm.jar包。不同于JDK动态代理,cglib代理是通过继承方式实现的(方法不能是final修饰的)创建代理类:/** * @ClassName Sweetheart * @Description TODO 代理类 * @Version 1.0 **/public class Sweetheart implements Meth...

2019-09-19 13:26:30 348

原创 仿写JDK动态代理

仿写JDK动态代理单纯就是理解下JDK动态代理生成源码1、JDK动态代理2、仿写JDK动态代理单纯就是理解下JDK动态代理生成源码1、JDK动态代理JDK动态代理必须实现接口 接口: /** * @Description //TODO 漫威 * @Author wfq * @Date 9:25 2019/9/18 **/ public interface Marvel...

2019-09-18 16:32:10 163

空空如也

空空如也

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

TA关注的人

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