自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日有寸进

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。

原创 面试官:为什么使用 Mapper 接口就能对数据库进行访问?
原力计划

目录宏观理解源码验证MapperRegistryMapperProxyFactoryMapperProxyMapperMethod 宏观理解 拿到的 mapper 其实是一个代理对象,底层调用的是 SqlSession 的方法,SqlSession 的方法里其实调用的 Executor 的方法。 ...

2020-05-07 12:12:51 168 0

原创 结合 Mybatis 的 logging 包源码理解适配器模式、代理模式
原力计划

适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Target:目标角色,期待得到的接口. Adaptee:适配者角色,被适配的接口. Ad...

2020-04-30 21:49:05 108 0

原创 Spring5 源码阅读笔记 (1.4)知识点汇总:解决循环依赖

什么是循环依赖? 如下两段代码所示,Spring 在将 CircularRefA 实例化的时候需要注入 CircularRefB,因此会先实例化 CircularRefB。但实例化 CircularRefB 的时候又会发现需要先实例化 CircularRefA。实例化 CircularRefA 又...

2020-02-23 20:47:17 70 0

原创 详解MySQL中的事务(四种隔离级别、间隙锁等),看完还不懂你来打我

MySQL中的事务为什么需要事务什么存储引擎支持事务事务特性原子性一致性隔离性四种隔离级别Read Uncommitted(读取未提交内容)Read Committed(读取提交内容)Repeatable Read(可重复读)Serializable(可串行化)间隙锁(gap锁)持久性 前置文章...

2019-09-20 11:52:26 1029 0

原创 JVM的类加载机制

JVM的类加载机制概述初始化 概述 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(U...

2019-09-16 11:17:46 56 0

原创 一文彻底搞清楚之JVM里最重要的垃圾回收算法与垃圾回收器

垃圾回收算法与垃圾回收器学习垃圾回收的意义如何判断对象的存活引用计数算法(JVM中没有使用)可达性分析算法(JVM中使用)关于finalize()四种引用(Reference)强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引...

2019-09-05 20:58:06 119 2

原创 深入理解显式锁(Lock)和AQS(AbstractQueuedSynchronizer)(超详细)

显式锁和AQS显式锁Lock特性使用范式APIReentrantLock(可重入锁)锁的可重入锁的公平和非公平APICondition使用范式APILockSupportCLH(队列锁) 显式锁 Lock 接口,实现类:ReentrantLock , ReentrantReadWriteLo...

2019-08-04 12:18:34 1381 2

原创 走进Java里的线程世界

线程基础、线程之间的共享和协作基础概念什么是进程和线程CPU时间片轮转机制澄清并行和并发高并发编程的意义、好处和注意事项认识Java里的线程 基础概念 什么是进程和线程 进程是程序运行资源分配的最小单位 进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘IO等,...

2019-07-28 17:14:40 441 3

原创 Netty 源码阅读笔记(5) NioServerSocketChannel

目录类关系图5.1 构造方法 类关系图 5.1 构造方法 public NioServerSocketChannel() { this(newSocket(DEFAULT_SELECTOR_PROVIDER)); } public NioServerSocketChannel(Serv...

2020-07-04 21:03:56 21 0

原创 Netty 源码阅读笔记(6) DefaultChannelPipeline

目录类关系图6.1 构造方法6.1.1 TailContext6.1.2 HeadContext 类关系图 6.1 构造方法 protected DefaultChannelPipeline(Channel channel) { this.channel = ObjectUtil.che...

2020-07-04 21:01:34 20 0

原创 Netty 源码阅读笔记(1) NioEventLoopGroup

目录类结构图1.1 构造方法1.1.1 newChild 类结构图 1.1 构造方法 public NioEventLoopGroup() { this(0); } public NioEventLoopGroup(int nThreads) { this(nThreads, ...

2020-07-04 19:39:18 23 0

原创 Netty 源码阅读笔记(3) NioEventLoop

目录类关系图3.1 构造方法3.2 run3.2.1 select3.2.2 processSelectedKeys 类关系图 3.1 构造方法 NioEventLoop(NioEventLoopGroup parent, Executor executor, SelectorProvider ...

2020-07-04 19:33:51 19 0

原创 Netty 源码阅读笔记(2)ThreadPerTaskExecutor

public final class ThreadPerTaskExecutor implements Executor { private final ThreadFactory threadFactory; public ThreadPerTaskExecutor(Threa...

2020-07-04 15:32:46 13 0

原创 基于 SpringBoot 手写 RPC 框架
原力计划

目录文件目录Messageconsumer@EnableRpcConsumer@ReferenceReferenceInvokeProxyRpcHandlerprovider@EnableRpcProvider@ServiceBeanMethodInitialMediatorMediatorSer...

2020-06-20 11:46:48 52 0

原创 序列化相关面试题

1.如果一个子类实现了序列化,父类没有实现,那么父类中的成员变量能否被序列化? 不会。 2.transient是干嘛的?有什么方法能够绕过transient的机制?这个实现机制的原理是什么? transient是干嘛的? transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字...

2020-06-16 16:05:47 55 0

原创 如何选择线程池最优线程数

目录任务分类公式公式一公式二对比联想CPU密集型IO密集型 任务分类 我们一般用一个线程池做同一种类型的任务,而不是把各种类型的任务都丢进同一个线程池执行。 而任务可以分成2种类型:CPU 密集型、IO密集型。 公式 先来看看2个公式,这两个公式适用任何一种类型。 公式一 Nthreads = N...

2020-06-12 16:51:22 70 0

原创 什么是 RESTful ?

目录约束Representational State TransferResourcesRepresentationalState Transfer 约束 前后端分离出现后,后端提供给前端的 API 应该如何设计成则便于理解、容易使用的,成了一个问题。而所谓的 RESTful 就是用来规范后端提供...

2020-06-10 10:13:17 51 0

原创 面试题:NIO/Netty 中的零拷贝体现在哪里?
原力计划

目录DirectByteBuffer 与 HeapByteBuffer 的关系面试题:NIO 的零拷贝体现在哪里? 关于 Java 里的 IO 这一块,相关代码大量调用了 JNI(Java Native Interface),JNI 是由 c/c++ 写的。而这些底层语言关于 IO 这一块,调用的...

2020-06-06 08:54:39 71 0

原创 门面模式

门面模式( Facade Pattern) 又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口 特征:门面模式定义了一个高层接口,让子系统更容易使用 属于结构型模式 与代理模式的区别 从实现上看,其实就是一种静态代理。 但是它的重点在于封装与对外展示。 而静态代理,重点在于增强。 学...

2020-06-04 16:48:12 39 0

原创 Redis Cluster 集群原理
原力计划

简介 Redis Cluster 是 Redis3.0 版本后推出的分布式解决方案,当遇到单机内存、并发等瓶颈时,可使用此方案来解决。 和 主从模式 和 哨兵模式 不同的是: 主从模式和哨兵模式只能保证高可用,每一台机器存储的内容是相同的。 Cluster 能够让 Redis 存储更多的内容,集...

2020-06-03 08:42:29 44 0

原创 System.exit(0) 与 System.exit(1) 在运行上有何区别

疑问 看到很多博客上说,System.exit(status) ,status 为 0 就是正常退出,status 为 1 是非正常退出。 真的是这样吗? 代码测试 public class Test { public static void main(String[] args) { ...

2020-06-01 09:16:45 118 0

原创 常见面试题:交换 Integer
原力计划

目录代码知识点值传递与引用传递Integer 的 value 和 IntegerCachevalueIntegerCache反射图解 代码 import java.lang.reflect.Field; public class Test { public static void mai...

2020-05-29 21:53:40 49 0

原创 MySQL 主从复制架构
原力计划

目录主从复制结构Replication 机制配置MySQL 的 Docker 安装分别配置 my.conf主从登录 MySQL主赋权限查看日志文件位置和位置从设置主机启动 IO 进程和 SQL 进程查看进程信息主从验证 主从复制结构 在实际应用场景中,MySQL 复制 90% 以上都是一个 Mas...

2020-05-29 12:49:18 83 0

原创 CentOS7 下 Docker 安装

卸载 yum list installed | grep docker 查询到相关的,通通用以下方式卸载 yum -y remove docker-engine.x86_64 cd /etc/yum.repos.d/ 删除 docker.repo 等与 docker 有关的 安装 cd /e...

2020-05-24 14:15:54 74 0

原创 分布式事务之 LCN 框架实现方案的原理、配置与使用
原力计划

目录LCN 原理背景框架定位事务控制原理原理图配置依赖配置启动类配置使用服务提供方服务发现方TCC 原理思想原理图使用服务提供方 LCN 原理 背景 LCN 名称是由早期版本的 LCN 框架命名,在设计框架之初的1.0~2.0的版本时框架设计的步骤是如下,各取其首字母得来的 LCN 命名。 锁定...

2020-05-20 13:17:04 112 0

原创 开发必备:MD5 加密工具、非空判断工具

目录MD5 加密工具非空判断工具 MD5 加密工具 public class MD5Util { public static String encrypt(String source) { return encodeMd5(source.getBytes()); ...

2020-05-10 15:38:52 26 0

原创 开发必备:响应封装、异常封装、异常捕获

目录整合 fastjson响应封装异常封装Service 层业务异常数据异常Controller 层参数验证异常异常捕获 整合 fastjson 让返回的 json 更漂亮 SpringBoot 整合 fastjson 响应封装 @Data public final class BaseRespo...

2020-05-10 13:25:07 57 0

原创 SpringBoot 整合 fastjson

依赖配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.56<...

2020-05-10 12:43:25 82 0

原创 SpringBoot 整合 mybatis-plus

步骤一 pom.xml 依赖配置 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId>...

2020-05-09 21:45:20 34 0

原创 Mybatis 插件开发与责任链模式
原力计划

概述 插件是用来改变或者扩展 Mybatis 的原有的功能,Mybatis 的插件就是通过继承 Interceptor 拦截器实现的。在没有完全理解插件之前禁止使用插件对 Mybatis 进行扩展,又可能会导致严重的问题。 Mybatis 中能使用插件进行拦截的接口和方法如下: Execut...

2020-05-08 13:26:25 58 0

原创 Spring 整合 Mybatis 与源码分析

目录配置依赖配置配置文件配置源码SqlSessionFactoryBeanMapperScannerConfigurer 配置 依赖配置 pom.xml <!-- mysql驱动 --> <dependency> <groupId>mysql</grou...

2020-05-07 15:46:04 40 0

原创 Mybatis 里的 Configuration 储存了什么

目录Configuration 的重要性重要属性 Configuration 的重要性 Mybatis 启动初始化的核心就是将所有 xml 配置文件信息加载到 Configuration 对象中, Configuration是单例的,生命周期是应用级的。 重要属性 protected Env...

2020-05-05 16:40:40 61 0

原创 Admin 的使用

目录简介配置依赖配置启动类配置配置文件配置配置类配置监控界面 简介 Admin 把 Actuator 统计的数据进行展示,可以很好的监控整个微服务系统中的实例运行情况信息。 所有想要监控的微服务都得依赖 Actuator <dependency> <groupId>...

2020-05-05 14:19:31 38 0

原创 Zuul 服务网关的搭建

Zuul 简介 Zuul 是分布式 SpringCloud 项目的流量入口,理论上所有进入到微服务系统的请求都要经过 Zuul 来过滤和路由。 配置 依赖配置 <dependency> <groupId>org.springframework.cloud</g...

2020-05-05 11:39:24 89 0

原创 SpringCloud 分布式配置中心搭建

服务端配置 配置中心单独作为一个服务 依赖配置 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>...

2020-05-04 19:26:20 84 0

原创 Mybatis 的初始化与建造者模式

目录建造者模式结构角色使用场景与工厂模式的区别建造者模式在Mybatis里的应用Mybatis 的初始化入口XMLConfigBuilderXMLMapperBuilderMapperBuilderAssistant 建造者模式 建造者模式(Builder Pattern)指的是将一个复杂的构建与...

2020-05-04 10:54:46 60 0

原创 CachingExecutor 和 BaseExecutor 里的 query

CachingExecutor @Override public <E> List<E> query(MappedStatement ms, Object parameterObject, RowBounds rowBounds, ResultHandler res...

2020-05-02 14:48:38 74 0

原创 Mybatis 的 CacheKey

前置文章 Mybatis 的一级缓存与二级缓存 结合 Mybatis 的 cache 包源码理解装饰器模式 CacheKey 是干嘛的 简单的说就是 cache 的 key 值,如下图 MyBatis 中涉及到动态 SQL 的原因,缓存项的 key 不能仅仅通过一个 String 来表示,所以通...

2020-05-02 12:05:56 84 0

原创 结合 Mybatis 的 cache 包源码理解装饰器模式

目录装饰器模式结构角色优势cache 包里的装饰器模式抽象构件 Cache具体构件 PerpetualCache具体装饰 BlockingCache 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,是一种用于代替继承的技术,无需通过继承增加子类就能扩展...

2020-05-01 21:57:00 76 0

原创 Mybatis 的获取连接与回收连接:popConnection 与 pushConnection

目录PooledConnectionPollStatePooledDataSourcepopConnection获取连接流程图pushConnection回收连接流程图 PooledConnection class PooledConnection implements InvocationHa...

2020-05-01 17:55:44 111 0

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