自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Zookeeper源码编译

1. 准备工作 1.1 下载Ant 由于Zookeeper是由Ant编译,需下载Ant并安装配置; 下载地址:https://ant.apache.org/bindownload.cgi 1.2 解压Ant 1.3 配置Ant环境变量 变量名: ANT_HOME 变量值: D...

2020-02-20 13:43:04

阅读数 41

评论数 0

原创 基于Zookeeper实现简单的服务注册与订阅

注册中心 Zookeeper服务类: package com.lic; import org.apache.zookeeper.*; import java.io.IOException; /*** * 注册中心 对外提供注册服务的 */ public class ZookeeperSe...

2020-02-19 13:42:01

阅读数 24

评论数 0

原创 Zookeeper

1. 环境搭建 播客:HDFS(zookeeper、hadoop)环境搭建 2. 概念 1. Zookeeper的主要作用是为分布式系统提供协调服务, 包括但不限于: 分布式锁, 统一命名服务, 配置管理, 负载均衡, 主控服务器选举以及主从切换等 2. Zookeeper自身通常也以分布...

2020-02-17 20:55:03

阅读数 60

评论数 0

原创 基于Netty实现RPC框架

目录 项目结构 序列化类信息 序列化接口 序列化实现类 序列化工厂类 通用类信息 服务接口类 Class工具类 RPC请求解码类 RPC请求编码类 自定义异常类 RPC请求类 RPC Response类 服务端类信息 服务实现类 RPC服务维护类 服务端类 服务...

2020-02-14 20:36:45

阅读数 25

评论数 0

原创 NettyHttp协议解析实现

Http协议交互过程 协议交互本质是指协议两端(客户端、服务端)如何传输数据?如何交换数据? 传输数据一般基于TCP/IP 实现,体现到开发语言上就是我们所熟悉的Socket 编程。交换数据本质是指,两端(客户端、服务端)能各自识别对方所发送的数据。那么这就需要制定一套报文编码格式,双方以该...

2020-02-13 12:46:11

阅读数 104

评论数 0

原创 PDFObject无法加载远程url和不支持IE浏览器解决方案

目录 一、PDFObject.js简单使用 二、PDFObject无法加载远程url 问题描述: 解决方案: 三、PDFObject不支持IE(8,9,11)浏览器 问题描述: 解决方案: 一、PDFObject.js简单使用 PDFObject.js可以实现在html页面动态加...

2020-02-11 14:07:01

阅读数 49

评论数 0

原创 Netty粘包/半包问题解析

目录 一、什么是粘包/半包问题 二、TCP粘包/半包发生的原因 三、粘包/半包解决办法 四、Netty中粘包/半包解决示例 1. 采用固定长度数据包编解码方式 2. 采用特殊字符作为边界字符编解码方式 3. 基于长度解码器 一、什么是粘包/半包问题 在客户端发送数据时,实际是把数...

2020-02-10 16:24:09

阅读数 40

评论数 0

原创 Netty

目录 1. Netty主要组件 1.1 Channel 1.2 EventLoop 1.3 ChannelHandler 1.3.1ChannelInboundHandler 1.3.2ChannelOutboundHandler 1.4 ChannelPipeline 1.5 B...

2020-02-08 17:24:57

阅读数 38

评论数 0

原创 Java_NIO详解

目录 1. Buffer 1.1 定义 HeapByteBuffer DirectByteBuffer 1.2 Buffer的创建 1.3 Buffer的读取 1.4 Buffer复制 – 浅复制 2. Channel 3. Selector 4. 测试示例(单线程模式) I...

2020-02-03 20:46:42

阅读数 162

评论数 0

原创 Mysql锁与事务隔离级别解析

目录 1. 概述 1.1 定义 1.2 锁的分类 2. 锁 2.1 表锁(偏向读操作) 2.1.1 基本操作 2.1.2 案例分析(加读锁) 2.1.3 案例分析(加写锁) 2.1.4 案例结论 2.2 行锁(偏向写操作) 2.2.1 行锁支持事务 2.2.2 行锁案例分析...

2020-02-02 17:53:40

阅读数 195

评论数 0

原创 Explain索引优化

目录 一、表信息 二、分析以下Case索引使用情况 三、in和exsits优化 一、表信息 Mysql版本: 5.6.33 创建表 drop table if exists test; create table test( id int primary key auto_...

2020-02-02 12:08:22

阅读数 202

评论数 0

原创 Explain详解

目录 一、表信息 二、explain 的两种使用方式 三、explain中的列 1. id列 2. select_type列 3. table列 4. type列 5. possible_keys列 6. key列 7. key_len列 8. ref列 9. rows列 ...

2020-02-01 16:05:56

阅读数 2519

评论数 0

原创 Mysql索引底层数据结构与算法

目录 1. 索引概念 2. 索引结构 3. MyISAM和InnoDB的索引实现 4. 联合索引 5. 什么情况下应不建或少建索引 6. MySql在建立索引优化时需要注意的问题 1. 索引概念 索引概念:索引是帮助MySQL高效获取数据的排好序的数据结构,更通俗的说数据库索引好比...

2020-02-01 12:23:18

阅读数 1471

评论数 0

原创 从字节码角度分析Java异常实现原理

目录 一、异常在字节码层面的实现 二、throw捕获异常解析 三、Java异常处理中的return和throw命令解析 一、异常在字节码层面的实现 示例: public class ExceptionParse { public static void main(String[] ...

2020-01-29 12:36:30

阅读数 295

评论数 0

原创 Mybatis源码解析四(Spring整合Mybatis)

SqlSessionFactoryBean 在Mybatis中, 通过SqlSessionFactory创建SqlSession来进行数据持久化操作, 在Spring整合Mybatis中也存在类似对象:SqlSessionFactoryBean SqlSessionFactoryBean实现了...

2020-01-27 15:25:25

阅读数 175

评论数 0

原创 Tomcat是如何启动Spring,SpringMVC,Mybatis整合的web项目的?

1. 当我们启动一个web项目时, 会先去启动tomcat, 也就是Bootstrap的mian()方法, tomcat开始由server组件开始一层一层向下初始化以及启动; 2. 当启动Host容器之后, 会触发HostConfig的监听操作, 开始部署/webapps目录下的web项目, 然...

2020-01-27 11:58:10

阅读数 155

评论数 0

原创 SpringMVC请求过程设计思路

在我们使用tomcat时, 通常会继承HttpServlet, 然后重写里面的doGet和doPost方法, 然后在web.xml配置请求路径与servlet处理类的映射 示例一: public class AddItemServlet extends HttpServlet { prot...

2020-01-17 16:07:55

阅读数 124

评论数 0

原创 Tomcat源码解析七(Http请求过程解析(基于NIO)_容器解析过程)

在连接器对请求信息进行解析, 封装为Request和Response, 然后通过适配器CoyoteAdapter的service()方法调用引擎中管道pipeline的第一个Valve, 开始对请求进行处理; CoyoteAdapter#service实现: @Override public...

2020-01-17 11:58:58

阅读数 68

评论数 0

原创 Spring源码解析六 (Bean的初始化)

目录 1. 循环依赖解决 2. FactoryBean情况处理 3. 依赖检查 4. Bean的创建 4.1 实例化bean 4.2 依赖处理 4.3 属性填充 4.4 执行初始化方法 5. Bean生命周期流程 6. IOC容器的关闭 6.1 Web应用中容器的销毁 6....

2020-01-08 19:46:21

阅读数 108

评论数 0

原创 Spring源码解析五 (IOC容器初始化方式四: AnnotationConfigApplicationContext[Java配置类方式])

目录 1. 注册内部处理器类 2. 注册Java配置类 3. 注册普通BeanDefinition 3.1刷新, 获取Bean工厂 3.2Bean工厂配置的设置 3.3. 激活Bean工厂后处理器(重点) 3.4注册bean后处理处理器 3.5 初始化非延迟加载的的单例Bean (...

2020-01-07 19:36:55

阅读数 156

评论数 0

原创 Spring源码解析四 (IOC容器初始化方式三: AnnotationConfigApplicationContext[包路径配置方式])

目录 1. 注册内部处理器类 2. 注册普通BeanDefinition 3. 应用环境刷新 使用示例: AnnotationConfigApplicationContext annotationConfigApplicationContext11 = new AnnotationCo...

2020-01-07 16:20:39

阅读数 187

评论数 0

原创 Spring源码解析一 (IOC容器初始化深度解析)

IOC容器的初始化的三种方式 XmlBeanFactory ClassPathXmlApplicationContext AnnotationConfigApplicationContext 三种初始化方式流程图: 分析: 由调用图可以看到不论使用哪一种方式去初始化IOC容器, 注册...

2020-01-07 15:19:24

阅读数 260

评论数 0

原创 Spring源码解析三 (IOC容器初始化方式二:ClassPathXmlApplicationContext)

目录 1. 刷新, 获取Bean工厂 1.1 Bean工厂的刷新以及相关配置 1.2 BeanDefinition的预加载 2. 注册BeanDefinition 2.1 默认命名空间解析 2.1.1 标签处理解析 2.1.2 BeanDefinition的注册 2.2 自定义命名...

2020-01-07 15:16:15

阅读数 162

评论数 0

原创 Spring源码解析二 (IOC容器初始化方式一:XmlBeanFactory)

目录 1. 配置资源加载 2. 配置资源解析以及根节点的获取 3. 注册BeanDefinition 3.1 默认命名空间解析 3.1.1 标签处理解析 3.1.2 BeanDefinition的注册 3.2 自定义命名空间解析 3.2.1 获取名称处理器 3.2.2 根据标签名...

2020-01-06 20:13:31

阅读数 287

评论数 0

原创 Spring源码解析七 (AOP深度解析)

目录 1. 目标bean实例化完成后调用初始化方法 2. 初始化方法执行之后应用后处理器(BeanPostProcessor) 3. 尝试扩展目标bean 4. 获取所有适合目标bean的所有Advisor 4.1从容器获取所有已注册的增强 4.2寻找所有的增强中适用于目标bean的增...

2020-01-05 16:51:29

阅读数 1313

评论数 1

原创 SpringMVC源码解析七(初始化过程解析)

在SpringMVC中处理请求的核心类是DispatcherServlet; SpringMVC在DispatcherServlet类的doDispatch()中维护着请求处理流程的主要逻辑 DispatcherServlet的继承关系图: SpringMVC初始化的触发点: Spr...

2019-12-26 19:30:37

阅读数 191

评论数 0

原创 SpringMVC源码解析六(ModelAndView解析)

在上一篇博客中解析到在InvocableHandlerMethod#doInvoke()中通过反射执行处理方法, 返回值为ModelAndView实例 InvocableHandlerMethod#doInvoke()方法调用链: 在RequestMappingHandlerAdapte...

2019-12-26 11:12:47

阅读数 177

评论数 0

原创 SpringMVC源码解析五(HandlerMethod执行过程解析)

在获取HandlerMethodAdapter适配器之后, 调用适配器的handle()方法执行处理器, 也就是Control类中我们编写的处理方法 AbstractHandlerMethodAdapter#handle()方法实现: @Override @Nullable public ...

2019-12-25 19:18:12

阅读数 145

评论数 0

原创 SpringMVC源码解析四(处理适配器HandlerAdapter的解析)

HandlerAdapter继承关系图: DispatcherServlet#getHandlerAdapter()方法实现: protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletExcepti...

2019-12-24 10:39:28

阅读数 161

评论数 0

原创 SpringMVC源码解析三(处理映射器HandlerMapping的解析)

HandlerMapping继承关系图: 1.BeanNameUrlHandlerMapping 配置文件中配置controller的bean,且bean的id必须以“/”开头,id就是controller可以处理的url <bean id = "/hello"...

2019-12-23 17:00:58

阅读数 144

评论数 0

原创 SpringMVC源码解析二(请求过程解析)

当服务器接收到从浏览器发送的一个请求后, 首先进入HttpServlet#service()方法中, 想要了解请求进入service()方法之前的逻辑请看这篇博客:Tomcat源码解析六(Http请求过程解析_基于NIO) HttpServlet#service()方法实现: @Overri...

2019-12-23 15:55:30

阅读数 216

评论数 0

原创 SpringMVC源码解析一(在Spring源码项目中搭建SpringMVC源码模块)

1.在Spring源码项目中右键,新建一个Module模块, 在弹窗中选择Gradle, 并且勾选Java和Web 2. 选择根目录并输入ArtifactId,点击确定 3. 项目构建 3.1 配置build.gradle plugins { id 'java...

2019-12-19 11:20:27

阅读数 77

评论数 0

原创 Mybatis源码解析三(模拟Mybatis)

在阅读一遍源码后, 决定根据自己的理解模拟一下mybatis 先对mybatis的整个流程进行梳理: 分析: 创建SqlSessionFactory; mybatis首先会去解析configuration.xml配置文件, 在解析这个配置文件时会对一些配置进行初始化, 例如数据源, m...

2019-12-16 18:37:08

阅读数 68

评论数 0

原创 Mybatis源码解析二(请求处理过程解析)

测试示例: package com.lic.ibatis.test; import com.lic.ibatis.dao.UserMapper; import com.lic.ibatis.entity.User; import org.apache.ibatis.binding.Mappe...

2019-12-12 18:41:45

阅读数 59

评论数 0

原创 Mybatis源码解析一(SqlSessionFactory和SqlSession的获取)

一、SqlSessionFactory SqlSessionFactory是MyBatis的关键对象, 它是个单个数据库映射关系经过编译后的内存镜像; SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得; SqlSessionFacto...

2019-12-10 18:30:17

阅读数 60

评论数 0

原创 Tomcat源码解析六(Http请求过程解析[基于NIO]_连接器解析过程)

一、启动线程接收客户端请求 在NioEndpoint的startInternal()方法中启动Acceptor线程, 开始接收客户端请求 NioEndpoint#startInternal()方法实现: @Override public void startInternal...

2019-12-08 21:07:20

阅读数 93

评论数 0

原创 Tomcat源码解析五(容器的启动过程解析)

目录 1. 逻辑分析 2. 源码分析 2.1 引擎启动 2.2 启动Host 2.2.1 初始化Host 2.2.2 启动Host 2.2.3 Host生命周期监听 2.2.4 部署webApps 2.2.5 创建Context 2.3 触发启动Context 2.4 触发W...

2019-12-07 14:37:13

阅读数 68

评论数 0

原创 Tomcat源码解析四(连接器启动过程解析)

一、逻辑分析: 连接器中有三个核心组件:Endpoint、Processor 和 Adapter, 其中Endpoint 和 Processor 放在一起抽象成了 ProtocolHandler 组件, 关系图如下: Endpoint Endpoint 是通信端点,即通信监听的接口,是具...

2019-12-06 15:35:42

阅读数 59

评论数 0

原创 Tomcat源码解析三(Tomcat启动过程解析)

Tomcat初始化以及启动流程图: 在BootStrap的main方法中调用Bootstrap的start()方法 1. Bootstrap#start()方法实现 public void start() throws Exception { if(...

2019-12-06 09:03:23

阅读数 60

评论数 0

原创 Java_IO模型

目录 概念 一、同步阻塞IO 二、同步非阻塞IO 三、IO多路复用 四、异步IO 五、信号驱动式IO 各种I/O模型的比较 概念 I/O:就是计算机内存与外部设备之间拷贝数据的过程。我们知道 CPU 访问内存的速度远远高于外部设备,因此 CPU 是先把外部设备的数据读到内存里,然...

2019-12-04 16:02:50

阅读数 70

评论数 0

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