自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 redis通过pipe 批量插入数据

【背景】线上的redis缓存中大量数据和数据库对应不上,需要统一同步一次,数据量在20w+左右了解到redis有一个上传牛逼的方式pipe管道方式官方说明:(https://redis.io/topics/mass-insert)下面是实际操作:首先发现线上环境redis-cli命令不支持,最后发现是当前命令没有配置到环境中把redis的redis-cli 相关内容复制到bin目录下sudo cp src/redis-cli /usr/local/bin/可以使用redis-cli命令

2020-07-22 09:52:42 439

原创 Spring源码解析(五)-Spring中事物@Transaction原理

@[TOC] spring事物----》 @Transactional#在上一篇文章中,详细介绍了spring中的AOP的入口和实例化,调用增强相关的基本原理。本篇文章将重点介绍spring中一个重要的AOP:@Transactional注解的修饰的事物切面,事物切面是springAOP切面中的一种切面,所以他也是遵循springAOP切面的一切特点和调用过程,不同的是当前切面的切点和增强的实现不同。在看当前文章前,建议先看一下上一篇文章!!!https://blog.csdn.net/xqqTech

2020-06-23 16:08:43 474

原创 Spring源码解析(四)-Spring中AOP原理

@[TOC] spring AOP----》 实例化+拦截#在前几篇文章中,详细介绍了spring的bean初始化和实例化的过程,在了解了bean的实例化过程后,对于后面spring的知识了解就有了一个很好的基础。本文主要是介绍spring中一个重要的知识点:AOP切面,这个在我们的开发中运用非常广泛,像 日志切面,事物切面,缓存切面等功能都是在本文的基础上进行实现,所以本文主要会介绍AOP的入口和基本信息的初始化,和调用过程。这里强调一下AOP的必要属性:一个切面Advisor有两个属性构成:切

2020-06-22 14:19:29 339 2

原创 Spring源码解析(三)-Spring中循环依赖解决

@[TOC] spring Bean实例化----》 循环依赖#在上一篇文章中,详细介绍了spring的实例化过程,但是没有介绍spring中循环依赖的解决方案,这边文章将在上一篇文章的基础上,重点讲解spring在实例化过程中是如何处理循环依赖的问题。part1:循环依赖我们首先来到实例化的入口,可以看到,只有单例,非懒加载,非抽象的才会提前实例化,多例天生就具有懒加载的特性,使用的时候才会进行实例化,但是实例化的时候也是调用getBean方法,所以这里主要看getBean方法具体的实现。来到

2020-06-17 14:43:19 292 1

原创 Spring源码解析(二)-Spring中Bean实例化过程

@[TOC] spring解析流程----》 xml+注解#在上一篇文章中,我们队spring中对xml和注解的解析过程进行了详细的介绍,解析完成后都封装成对应的beandefinition对象注册到beanfactory中,接下来就是遍历beanfactory中的beandefinition对象,依次进行实例化的操作。part1:Bean实例化过程我们首先来到实例化的入口,上一篇文章的最后也给出了实例化的入口finishBeanFactoryInitialization:跟踪到代码里面中pre

2020-06-16 16:16:56 581

原创 Spring源码解析(一)-XML+注解解析

@[TOC] spring解析流程----》 xml+注解#spring是目前java开发中一个非常重要的框架,基本上目前各种项目都和他有关,spring完美的实现了对象和创建和管理,使得我们的开发人员不用关注对象创建和管理,主需要关注自己的业务实现即可,这样也提高了开发人员的开发效率。所以我们有必要了解spring的基本原理,spring是一个综合性的框架,所以涉及的内容非常多,我会分多篇文章进行介绍spring相关的重要知识点,本篇文章主要从源码讲解spring加载xml和解析注解的实现原理。pa

2020-06-16 14:06:24 867

原创 Mybatis源码解析(六)-数据执行阶段Executor(模板模式)

@[TOC] Executor—》 模板模式#当前阶段可以说是MyBatis 最神秘的阶段,要理解它,就需要对 Mybatis 的接口层和 binding模块数据源模块进行深入的学习。首先mybatis内部虽然有各种配置文件解析,数据封装,sql执行等复杂的流程,但是基本上都可以通过SqlSession接口进行操作,这种设计就是运用了门面模式;另外mybatis支持通过配置文件灵活配置连接数据库的时候是否使用连接池,这种对操作的封装也是运用了策略模式来实现。下面来详细介绍。part1:模板模式 模板

2020-06-11 17:37:29 219

原创 Mybatis源码解析(五)-接口绑定阶段(门面模式+策略模式)

@[TOC] 代理封装阶段—》 门面模式+策略模式#当前阶段可以说是MyBatis 最神秘的阶段,要理解它,就需要对 Mybatis 的接口层和 binding模块数据源模块进行深入的学习。首先mybatis内部虽然有各种配置文件解析,数据封装,sql执行等复杂的流程,但是基本上都可以通过SqlSession接口进行操作,这种设计就是运用了门面模式;另外mybatis支持通过配置文件灵活配置连接数据库的时候是否使用连接池,这种对操作的封装也是运用了策略模式来实现。下面来详细介绍。part1:门面模式

2020-06-11 16:01:58 457

原创 Mybatis源码解析(四)-配置加载初始化(建造者模式)

@[TOC] 配置加载初始化—》 建造者模式#MyBatis 在我们的开发中,主要是各种配置文件是特别多,包括mybatis-config.xml和各种mapp.xml文件,这些配置文件是程序启动的时候加载到内存中,并且实例化mybatis相关的实例对象,这个实例化,解析的过程是非常复杂。主要涉及SqlSessionFactoryBuilder,XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder、ResultMapping

2020-06-11 11:02:42 215

原创 Mybatis源码解析(三)-缓存模块(装饰器模式)

@[TOC] 缓存模块—》 装饰器模式#MyBatis 缓存模块需满足如下需求:MyBatis 缓存的实现是基于 Map 的,从缓存里面读写数据是缓存模块的核心基础功能;除核心功能之外,有很多额外的附加功能,如:防止缓存击穿,添加缓存清空策略(fifo、lru)、序列化功能、日志能力、定时清空能力等;附加功能可以以任意的组合附加到核心基础功能之上;基于 Map 核心缓存能力,将阻塞、清空策略、序列化、日志等等能力以任意组合的方式优雅的增强是 Mybatis 缓存模块实现最大的难题,用动态代理或者

2020-06-10 11:25:21 259

原创 Mybatis源码解析(二)-数据源模块(工厂模式)

@[TOC] 数据源模块----》 工厂模式#数据源是mybatis里面非常重要的一个模块,是数据的入口,涉及连接池等相关的池化技术。所以数据源对象是比较复杂的对象,其创建过程相对比较复杂,所以在mybatis中使用了工厂模式进行连接池对象的创建,便于管理和维护。part1:工厂模式原理谈到工厂模式,主要有两种简单工厂模式和工厂模式:1.1 简单工厂模式简单工厂属于类的创建型设计模式, 通过专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。类图如下:工厂接口(Fact

2020-06-09 17:28:16 302

原创 Mybatis源码解析(一)-日志模块(适配器模式+代理模式)

@[TOC] 日志模块----》 适配器模式#mybatis在目前的java开发中使用非常频繁,所以接下来几篇文章都是介绍Mybatis主要模块相关源码,从源码中我们可以了解到,mybatis可以说是非常合理的运用了设计模式和设计原则,接下来几篇文章主要从mybatis的日志模块,数据源模块,缓存模块,反射模块。part1:设计原则谈到设计模式,我们首先想到的就是基本的设计原则:单一职责原则:一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口;依赖倒转原则:高层模块不应该依赖低层模

2020-06-09 13:46:00 305

原创 java线程安全常用手段总结

@[TOC](`java线程安全手段汇总)#在前几篇文章中,从不同的维度介绍了java多线程开发相关的一些技术和原理实现,这里对前面几篇文章的内容进行一个汇总,总结java中我们常用的保证线程安全的手段。什么是线程安全性?在《Java 并发编程实战》中,定义如下:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。1.线程封闭:实现好的并发是一件困难的事情,所以很多

2020-06-01 15:16:26 272

原创 探索阻塞队列(BlockingQueue)和线程池(Executor)的关系和应用

@[TOC](BlockingQueue && Executor)#BlockingQueue和Executor在我们的多线程开发中,使用时非常广泛的,阻塞队列我们一般可以单独使用,但是一旦使用了线程池Executor,基本都会用到阻塞队列相关功能,所以在这里把两者的基本原理和使用方式做简单的介绍。part1:初识BlockingQueue什么是阻塞队列1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除方法:意思是在队列为空时,获

2020-06-01 14:44:25 914

原创 jdk 1.8 ConcurrentHashMap和1.7 ConcurrentHashMap区别 原理解析

@[TOC](`jdk 1.8 ConcurrentHashMap和1.7 ConcurrentHashMap区别 原理解析)#在上一篇文章中,我们详细链接了HashMap在1.7和1.8和实现区别,但是我们都知道HashMap在多线程下是不安全的,所以jdk也为我们提供了并发安全的容器进行使用,那就是我们这篇文章的主角:ConcurrentHashMap。part1:1.7ConcurrentHashMap探索我们首先看一下内部结构 从源码我们了解到,ConcurrentHashMap 是

2020-05-31 16:08:01 559

原创 jdk 1.8 hashmap和1.7 hashmap区别 原理解析

@[TOC](`jdk 1.8 hashmap和1.7 hashmap区别 原理解析)#在jdk中,目前使用比较多的主要是1.8,主要是因为1.8在1.7的基础上优化了很多内容,尤其是hashmap这个集合 在内部结构和实现上都是进行了优化和调整。下面主要讲了1.7发生死循环的原因和过程,以及1.8在添加元素的实现,最后总结了1.7和1.8的主要区别。part1:hashmap比较 通过jdk的源码我们可以了解到,1.8在1.7的基础上,hashmap做了比较大的改动,下面具体说明:1.7

2020-05-31 14:35:24 335

原创 Java等待通知机制比较(wait,notify,notifyAll;CountDownLatch;Condition)

@[TOC](wait,notify,notifyAll;CountDownLatch;Condition原理和解析)#在Java多线程开发中,涉及到线程之间的协作,配合。为了满足不同场景的开发需求,Java也提供了多种方式供开发人员选择。part1:wait,notify,notifyAll首先可以看一下这三个方法的源码位置,从源码我们可以知道,这三个方法都是java的最顶层的类Object的方法,并且是native方法,也就是说着三个方法执行时需要对象级别的锁,在调用 wait () 、no

2020-05-27 12:50:30 411

原创 ThreadLocal原理关于内存泄漏和线程安全的手段

@[TOC](ThreadLocal关于内存泄漏和线程安全的手段#ThreadLocal作为java的一种保证线程安全的手段,和常用的 synchronized等同步手段是有有比较大的区别的。synchronized主要是解决多线程对共享变量的安全操作,ThreadLocal主要是通过保证每个线程有一个自己线程的变量副本进行安全操作part1:ThreadLocal基本解析ThreadLocal主要的对外方法从源码我们了解到,三个方式都有用到ThreadLocalMap,他就是ThreadLoc

2020-05-24 12:02:00 168

原创 第一次安装CentOs7无法设置root密码 安装完成后设置root

@[TOC](第一次安装CentOs7无法设置root密码 安装完成后设置root#第一次安装了CentOs7,但是在安装的过程中无法设置root密码,导致后面用自己账号登陆后,很多操作无法进行,才想起使用root账号,结果root账号又没有密码,就按照网上的方式进行修改,发现试了多次都不成功,修改了提示(authentication token manipulation error)最后综合众多方案,成功修改步骤一:进入开机模式启动linux 在如下界面 快速按 e第二步:在以如下界面中Linu

2020-05-23 17:08:49 5990 2

空空如也

空空如也

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

TA关注的人

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