自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(191)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

转载 Redis突然变慢问题排查总结(转载自微信公众号)

Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头雾水。很多时候,Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。这篇文章我们就来分析一下Redis在使用过程中,经常会遇到的延迟问题以及如何定位和分析。使用复杂度高的命令如果在使用Redis时,发现访问延迟突然增大,如何进行排查?首先,第一步,建议你去查看一下Redis的慢

2020-09-14 18:14:41 472

原创 Django--模型

目录1 概述2 示例3 字段说明3.1 字段类型3.2 字段选项4 模型属性5 模型方法6 模型继承6.1 抽象基类6.2 非抽象继承(多表继承)6.3 代理继承6.4 多重继承7 结语1 概述本文档着眼于快速入门,参考自官方文档(https://docs.djangoproject.com/zh-hans/3.0/topics/...

2020-02-08 09:57:52 413

原创 JDK1.8 -- 函数式接口应用示例

package com.liutao.java8;import org.apache.commons.lang3.StringUtils;import java.util.function.Consumer;import java.util.function.Function;import java.util.function.Predicate;import java.util....

2019-06-05 09:45:19 895

原创 JDK1.8 -- Stream应用示例

package com.liutao.java8;import java.util.*;import java.util.stream.Collectors;import static java.util.stream.Collectors.*;/** * @author: LIUTAO * @Date: Created in 2019/6/4 10:00 * @Modif...

2019-06-04 17:18:23 257

转载 Nginx 极简教程

目录概述什么是 Nginx?什么是反向代理?安装与使用安装使用nginx 配置实战http 反向代理配置负载均衡配置网站有多个 webapp 的配置https 反向代理配置静态站点配置搭建文件服务器跨域解决方案概述什么是 Nginx?Nginx (engine x)是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(...

2019-05-31 10:45:16 222

原创 jUC--LinkedTransferQueue源码分析(基于JDK1.8)

1 概述LinkedTransferQueue是一个基于链表的阻塞队列。采用了一种预占模式。消费者线程获取数据的时候,如果在队列中没有任何数据,则消费者线程生成一个节点,这个节点的元素为空,然后消费者线程等待在这个节点上。当生产者线程入队的时候发现了有意个元素为空的节点,则直接将数据赋予这个节点,并且唤醒节点上的等待线程。如果没有元素为空的节点,则根据how进行入队。下面我们来看一下具体使用方...

2019-02-28 09:41:22 294

原创 jUC--PriorityBlockingQueue源码分析(基于JDK1.8)

1 概述在阅读这一篇文章之前,建议大家线阅读我的另一篇文章JUC--PriorityQueue源码分析(基于JDK1.8)。PriorityBlockingQueue是有界的阻塞队列,根据这个名字我们就可以看出PriorityBlockingQueue的数据存储原理和PriorityQueue是相同的,都采用了最小堆的逻辑,并且使用了数据来存储数据。所不同的就是这个优先队列时候线程安全的,...

2019-02-27 11:14:36 259

原创 jUC--DelayQueue源码分析(基于JDK1.8)

1 概述DelayQueue是一个有界的阻塞队列,这里面的元素具有延迟释放的功能,仅仅当元素的延迟时间到了的时候才能够被获取。队列的头节点是延迟时间最久的元素。如果没有元素的延迟时间过期,这里将没有头节点,而且poll函数将返回null。这个工具主要用来标记那些应该在给定时间之后实现的对象。注意:这个工具是线程安全的。2 基本信息DelayQueue是一个阻塞的延迟队列,针对添加到...

2019-02-26 19:57:10 366

原创 JUC--PriorityQueue源码分析(基于JDK1.8)

1 概述PriorityQueue是基于优先堆实现的无界优先队列,它的底层是通过最小堆来实现的。我们知道普通的队列具有FIFO的特性,队列的出和入与进入队列的时间有关,但是针对优先队列,每个队列的元素中都有一个属性来表示队列的优先级,然后队列的出队就根据队列中元素的优先级来确定先后顺序。这样就可以实现生活中一些需要根据优先级来处理数据的场景,比如说根据会员级别,优先消费的场景。下面我们来看看P...

2019-02-25 17:53:20 233

原创 JUC--ConcurrentSkipListSet源码分析(基于JDK1.8)

1 概述前面的文章中,我们分析了HashSet的实现原理(可以参考Java集合框架--HashSet源码分析(基于JDK1.8))。HashSet的实现其实是依赖于HashMap的,直接使用了HashMap的key来存储HashSet的值,对应的HashMap的value就存为虚拟值。所以,在这里我们可以大胆猜测ConcurrentSkipListSet的实现是完全依赖于ConcurrentS...

2019-02-25 16:29:45 301

原创 JUC--ConcurrentSkipListMap源码分析(基于JDK1.8)

1 概述我们知道JDK针对键值对的存储提供了HashMap、TreeMap、HashTable和ConcurrentHashMap等工具。这些工具在多线程的情况下,使存入的数据有序同时方便数据的遍历,就显得不那么理想了,所以JDK又为我们提供了一个工具ConcurrentSkipListMap。这个工具能够保证线程安全,同时保证插入数据使有序的(根据key来排序)。下面我们就开始来分析一下Co...

2019-02-25 11:20:48 364

原创 JUC--CopyOnWriteArraySet源码分析(基于JDK1.8)

1 概述有一定Java基础知识的同学都知道HashSet是通过散列表实现的,并且存储的内容是无序的而且不能重复。但是HashSet有一个比较明显的缺点,就是HashSet不是线程安全的,那么有没有线程安全的HashSet呢?在这里我们就可以引出CopyOnWriteArraySet了。CopyOnWriteArraySet提供根据读写分离的思想,提供了线程安全的HashSet的功能,但是C...

2019-02-22 14:36:20 307

原创 JUC--CopyOnWriteArrayList源码分析(基于JDK1.8)

1 概述我们来设想一个场景,在并发的情况下,我们想要使用一个List来保存对象,这个时候为了让List是线程安全的,我们能怎么做呢?首先我们能够想到的应该是使用synchronized对List对象加锁,或者在使用List对象的地方使用ReentrantLock来保证线程同步,但是这样就有一个问题,我们知道对List中的对象进行读操作的时候并不会存在数据一致性的问题,只有在写的时候才有数据一致...

2019-02-22 13:50:56 264

原创 Java的Future模式(基于JDK1.8)

1 概述在我们使用多线程的时候,如果我们需要在主线程中拿到其余线程执行输出的内容,同时在子线程运行的时候,我们主线程依然运行,只是在合适的时候来拿子线程的结果就行了,这个时候我们怎么办呢?这就需要用到Future模式了。下面我们直接上一个列子来直观地演示Future模式。2 实例import java.util.concurrent.Callable;import java.uti...

2019-02-22 10:44:05 414

原创 Spring Cloud Sleuth(二)整合zipkin

本文基于Finchley.SR2。1 概述 

2019-01-30 14:09:32 305

原创 Spring Cloud Sleuth(一)简单实例及概念

本文基于Finchley.SR2。1 概述Spring Cloud Sleuth为Spring Cloud实现了分布式服务跟踪的解决方案。我们可以通过Spring Cloud Sleuth来获得一个调用链中,各个阶段的时间消耗、服务的异常信息、服务的性能瓶颈等信息。2 简单实例在我们进行基本概念的学习之前,我们先来看个Sleuth的简单实例。将“spring-cloud-sta...

2019-01-30 11:15:56 670

原创 Spring配置文件解析(四)BeanDefinitionParserDelegate源码分析

1 概述通过对BeanDefinitioDocumentReader源码(Spring配置文件解析(三)BeanDefinitionDocumentReader源码分析)的分析,我们知道BeanDefinitioDocumentReader的作用就是将Document对象中获取到Element对象,最终交给BeanDefinitionParserDelegate来完成BeanDefinitio...

2018-12-29 17:00:33 295

原创 Spring配置文件解析(三)BeanDefinitionDocumentReader源码分析

1 概述前面我们分析了BeanDefinitionReader的源码(Spring配置文件解析(二)BeanDefinitionReader源码分析 ),我们知道BeanDefinitionReader的作用其实就是将Spring的Bean定义的XML文件最终解析成Document对象,然后将这个对象交给BeanDefinitionDocumentReader来完成最终的XML文档的解析和Be...

2018-12-21 17:29:29 291

原创 Spring配置文件解析(二)BeanDefinitionReader源码分析

1 概述这一篇文章的作用主要是接着上篇文章(Spring配置文件解析(一)ClassPathXmlApplicationContext源码分析)继续分析在Spring中配置文件的加载和解析,但是在分析之前,我们有必要对BeanDefinitionReader家族进行一个简单地介绍。这个BeanDefinitionReader接口是bean定义读取的基础接口,它的函数根据不同的资源获取方式进行...

2018-12-21 11:43:55 316

原创 Spring配置文件解析(一)ClassPathXmlApplicationContext源码分析

1 概述针对前面的SpringIOC的源码分析,我们看见了在整个Spring容器初始化的时候,配置文件的解析是相当重要的,所以从这篇文章开始,我们将对配置文件的解析进行深入的分析。这里我们仅仅拿ClassPathXmlApplicationContext类来进行分析,因为FileSystemXmlApplicationContext的配置文件解析的过程和ClassPathXmlApplica...

2018-12-20 16:12:44 870 1

原创 Spring源码之IOC(五)ApplicationContext源码分析

1 概述ApplicationContext即应用上下文,它是建立在BeanFactory基础之上的 ApplicationContext有两个主要的实现类:ClassPathXmlApplicationContext:默认从类路径加载配置文件,还有FileSystemXmlApplicationContext:默认从文件系统中装载配置文件,通常我们使用的比较多的是ClassPathXmlA...

2018-12-19 17:09:43 358

原创 Spring源码之IOC(四)BeanFactory派生类

1 概述从前面的文章(Spring源码之IOC(三)BeanFactory源码分析)我们学习到BeanFactory提供了Spring bean容器的基础入口,也就是我们可以通过BeanFactory来获取到bean。而其子类通过扩展BeanFactory来提供了更加丰富的功能,接下来我们就来看一看子类到底提供了哪些功能。2 UML类图3 派生类详解3.1 Hierarchical...

2018-12-14 10:02:54 248

原创 Spring源码之IOC(三)BeanFactory源码分析

1 概述这是进入Spring bean容器的基础接口,她的子类(例如:ListableBeanFactory、ConfigurableBeanFactory)还提供了更多个用处,我们后面会对其子类进行分析。这个接口的实现类拥有beanDefinition对象,每个beanDefinition对象都和一个唯一的name对应,并将这种对应关系用Map保存起来。通过这个BeanFactory我们...

2018-12-14 09:36:41 245

原创 Spring源码之IOC(二)BeanDefinition派生类

1 概述通过前面的文章,我们对BeanDefinition接口有个深入的认识,我们知道BeanDefinition提供了bean的特性的封装,可以通过BeanDefinition对Bean的属性访问和修改,获取是否是抽象类等属性。针对更多的功能,我们就可以通过使用BeanDefinition的派生类来获取。2 UML类图我们来看一下BeanDefinition有哪些派生类,以及这些派生...

2018-12-10 15:33:03 428

原创 Spring源码之IOC(一)BeanDefinition源码解析

1 概述Bean的定义主要是由BeanDefinition来描述的。BeanDefinition是Spring中包装bean的数据结构,她描述了一个bean实例属性、构造参数。当然针对她的具体实现类提供了更加丰富的功能。这仅仅是一个基本的接口,这个接口的主要目的是允许修改和获取bean的属性和元数据。2 类关系针对BeanDefinition,我们首先来看一下UML类图。从上图...

2018-12-04 19:55:42 359

原创 Mybatis源码--XMLMapperBuilder源码分析

1 概述

2018-11-16 16:10:32 284

原创 Mybatis源码--XMLConfigBuilder源码分析

注意:文章内容较多,请耐心阅读。1 概述前面我们分析了BaseBuilder,BaseBuilder提供的主要功能是处理类型的转换。现在我们就来分心XMLConfigBuilder,这个类的主要作用就是解析mybatis的配置文件。2 属性2.1 parsedprivate boolean parsed;这个属性用于控制XMLConfigBuilder是否被使用,因为一个...

2018-11-14 19:54:19 269

原创 Mybatis源码--BaseBuilder源码分析

1 概述BaseBuilder家族的主要作用就是处理配置文件的内容,包括mapper配置文件和config文件,在这里我们有必要首先对其基类进行简单地说明。2 属性2.1 configuration持有配置文件对象,方便解析配置文件后对数据进行设置。2.2 typeAliasRegistry类别名注册器,里面持有类别名和类的键值对。2.3 typeHandlerRegi...

2018-11-12 18:41:33 678

原创 Mybatis工具--分页插件

1 概述在我们使用Mybatis的时候希望对以映射语句进行拦截处理,这个时候就可以用到Mybatis的插件。接下来我们就来Mybatis中的插件是如何实现的,然后来实现分页插件。2 实现MyBatis 允许使用插件来拦截的方法调用包括: Executor (update, query, flushStatements, commit, rollback, getTransaction...

2018-11-07 15:40:28 259

原创 Mybatis源码--Resources源码分析

1 概述在我们使用Mybatis的时候都需要将配置文件转换成InputStream,这使用我们通常是使用Resources的getResourceAsStream函数。通过查看Resources源码的注释我们也可以发现,Resources提供了通过类加载器获取资源的功能2 ClassLoaderWrapper类查看Resources源码,可以看见其拥有一个ClassLoaderWrap...

2018-11-02 16:23:43 364

原创 Mybatis源码--Sql执行分析

1 概述前面我们分析了一些Sql解析过程中的一些重要类(Executor、StatementHandler等)的源码,现在就需要对将这些类串起来的流程进行一个详细的分析,所以我们现在来分析一下Mybatis中Sql执行的流程。2 流程图从流程图我们大致将Sql执行分成四步,针对第一步在前面的文章中我们已经有过分析,所以现在我们就对后面三步进行深入分析。3 流程分析在这里我们...

2018-10-31 16:53:08 388

原创 Mybatis源码--SqlSessionFactory&SqlSession源码分析

1 概述这两个类,SqlSessionFactory作为Mybatis的入口提供了各种获取SqlSession的函数。SqlSessionFactory大部分情况下生成唯一的实例,读写分离和多数据库除外。SqlSession主要用于提供CRUD操作。2 SqlSessionFactory我们来看一下SqlSessionFactory的源码。public interface Sql...

2018-10-31 16:37:44 248

原创 Mybatis源码--ParameterHandler源码分析

1 概述通过前面文章(Mybatis源码分析--StatementHandler源码分析 )的学习,我们已经知道了ParameterHandler是用于绑定参数的。通过查看ParameterHandler的源码,我们知道ParameterHandler是一个接口,而且找个接口仅仅有DefaultParameterHandler一个实现类。我们这里就来看看DefaultParameterHand...

2018-10-31 11:39:12 257

原创 Mybatis源码--StatementHandler源码分析

1 概述在上一篇文章(Mybatis源码分析--Executor源码分析),我们分析Executor源码的时候就提到了StatementHandler的作用是和数据库对话。当然StatementHandler和数据库对话是依赖于Statement来完成的。在这里随便说一下ParameterHandler和ResultHandler的作用分别是绑定SQL参数和组装最后的结果返回。2 生成St...

2018-10-31 10:53:21 349

原创 Mybatis源码--Executor源码分析

1 概述 Mybatis中所有的Mapper语句的执行都是通过Executor进行的,Executor是Mybatis的一个核心接口。针对Executor的学习,我们先来说说Executor的生成和Executor的分类,然后再来看看其中某个典型方法的具体执行。2 Executor生成Executor是通过Configuration的newExecutor函数来生成的,我们来看一看ne...

2018-10-30 20:48:19 661

原创 Mybatis源码--MapperProxyFactory&MapperProxy源码分析

1 概述针对这里的源码分析,我们首先要搞清楚java动态代理,因为就因为这里使用了java动态代理,才能够让我们在并没有mapper接口实现类对应的bean的情况下也能够进行依赖注入。2 MapperProxyFactory这个类的主要作用是用于生成mapper接口的Proxy代理。我们直接来看一下源码。import org.apache.ibatis.session.SqlS...

2018-10-30 20:19:09 516

原创 Mybatis源码--MapperMethod源码分析

1 概述为了便于对Configuration对象的初始化过程的分析,我们这里首先来看看MapperMethod的源码。MapperMethod的作用就是处理Mapper接口函数的注解、参数和返回值。2 内部类2.1 MethodSignature这个内部类主要用于处理函数的参数、注解和返回值。(1) hasNamedParams函数该函数用于判断方法上是否有Param注解。...

2018-10-30 20:05:57 425

原创 Java设计模式--责任链模式

1 定义有多个对象,每个对象持有下一个对象的引用,这样就形成了一条链,请求在这条链上传递,直到某个对象处理了该请求,但是请求的发出者并不知道是哪个对象处理了该请求,所以,在这里我们可以发现责任链模式可以在隐瞒客户端的情况下对系统的逻辑进行动态调整。2 类图及实例2.1 类图这里我们看一下责任链模式的UML类图。从上图我们可以看出,处理者持有下一个处理者,并且拥有对请求处理的...

2018-10-29 10:40:11 216

原创 Mybatis源码--XML配置文件解析(未完待续)

1 概述前面的文章我们针对Mybatis的初始化的整个过程做了一个分析,我们知道Mybatis的初始化其实就是将配置文件的配置信息最终转换成Configuration对象的一个过程,现在我们就来看一看这个过程到底做了些什么。2 Configuration类详解我们知道XML配置文件最终都会解析成Configuration配置类,那么这里我们就来看看Configuraion这个类中到底包...

2018-10-22 11:53:00 301

原创 Mybatis源码--初始化过程分析

1 概述所有框架的初始化其实就是读取配置文件中的数据来生成配置对应的类的对象。针对Mybatis框架的初始化其实就是读取配置文件和Mapper配置文件来生成Condiguration类的对象。下面我们来看一下具体的初始化过程。2 利用XML初始化2.1 应用示例首先我们来看一个使用Mybatis的简单示例。示例工程结构如下:针对上面的示例,关键源码如下:(1)datas...

2018-10-15 17:15:08 406

Mybatis--SQL解析流程图

此图用于展示Mybatis的SQL解析的具体流程,包含了SqlSession和Mapper动态代理对象的获取步骤。通过查阅此图可以对Mybatis的SQL解析流程有一个清晰的认识。

2018-11-02

Xshell+Xftp

使用时直接解压,并打开使用必读.txt文件查看使用方法。

2018-06-06

JAVA面向对象之继承

Java编程语言,对于面向对象中继承的使用

2015-09-13

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

TA关注的人

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