自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

寒山道杳

合抱之木,生於毫末;九層之台,起於累土;千里之行,始於足下。

原创 为什么不建议数据库建外键

导语 有人可能在面试的时候被问到过,你觉得为什么不建议数据库通过构建外键做约束?你可以回答说,在《阿里Java开发手册》中是这样说的:不得使用外键与级联,一切外键概念必须在应用层解决。而且这个规约是强制的。但是我想这样的答案,可能并不能让面试官满意。当然,可能也有人说:在每次对表数据进行操作时,...

2020-01-16 20:52:21

阅读数 122

评论数 0

原创 深入浅出Mybatis源码解析——结果集映射流程

前言 在前一篇文章中,笔者补上了一篇文章,在那篇文章中,主要说了关于SQL语句的执行流程,当SQL执行完成后,那么肯定会返回一个结果集,对于这样的结果集是需要做一个映射的,就譬如你所返回的数据是表中的数据,但是要映射成Java中的实体类对象,便需要进行映射处理。 说起来很抽象,那么就不多说了,...

2020-01-14 20:13:31

阅读数 1355

评论数 0

原创 深入浅出Mybatis源码解析——SqlSession执行主流程(补)

前言 由于Mybatis的源码系列文章,期间有长时间的脱节,导致笔者在写代码解析的时候中间出现了断裂,这个要和大家说声对不起,因此本篇文章是补深入浅出Mybatis源码解析——获取Mapper代理对象流程照片文章的,在这篇文章中简单的说了一下SqlSession执行主流程,也只是简单的说了说,后...

2020-01-08 22:24:06

阅读数 80

评论数 0

原创 深入浅出Mybatis源码解析——BoundSql获取流程

前言 停更了一个多月,博主一直在忙于技术的学习与工作的繁忙之间,其实更多的是迷茫于技术中,但是想想还是要把Mybatis系列继续更新下去。博主也给自己在20年立了几个flag:深入学习Java、研究研究c++、第三个就是健身咯,只要是因为回首2019年,感觉自己在技术学习的道路上是在没走多少,因...

2020-01-06 19:32:57

阅读数 76

评论数 0

原创 深入浅出Mybatis源码解析——获取Mapper代理对象流程

前言 在上一篇文章深入浅出Mybatis源码解析——SqlSource的创建流程中,说了SqlSource的创建流程这样一个完整的创建流程,在这个流程中包含了:动态SQL标签处理器、解析动态SQL、创建MappedStatement对象。这样给我们对SQLSource这样的整个流程有了一个大概的...

2019-11-20 23:34:44

阅读数 91

评论数 0

原创 深入浅出Mybatis源码解析——SqlSource的创建流程

前言 在前一篇文章深入浅出Mybatis源码解析——映射文件加载流程中,最后说到了创建SqlSource和创建MappedStatement对象,由于篇幅原因最后只好终止了,所以便只好在写一篇文章来说说SqlSource这样的一个创建流程是怎样的,在本系列第一篇完成后,也曾问过一两个认识的读者,...

2019-11-19 23:53:20

阅读数 75

评论数 0

原创 深入浅出Mybatis源码解析——映射文件加载流程

前言 在前两篇文章中,简单了说了下Mybatis全局配置文件解析加载流程和和全局配置文件的部分标签解析,但是还并没有涉及到核心的解析。所以本篇文章将开始核心解析的部分,那就是mappers标签的解析。可能有人很奇怪这为什么不在前两篇文章中拿出来说,因为mapper标签的解析在configurat...

2019-11-18 23:46:19

阅读数 51

评论数 0

原创 深入浅出Mybatis源码解析——全局配置文件解析(全局配置文件解析加载流程附篇)

前言 首先要说下停更这么久的原因,因为工作上最近有点忙,加上学习债的繁重以至于没有继续更新Mybatis源码解析的文章,所以趁着忙里偷闲,来简单的更新一篇。 在上一篇文章深入浅出Mybatis源码解析——全局配置文件解析加载流程中,我们讲到了全局配置文件的一个加载的过程,既然只是一个加载的流程...

2019-11-16 23:18:56

阅读数 47

评论数 0

原创 深入浅出Mybatis源码解析——全局配置文件解析加载流程

前言 前面笔者其实已经写了两篇关于Mybatis源码解析的文章,可后面自觉其解析的不够全面,但是那两篇文章完全是按照debug模式,简单的走了一遍流程去解析的,对于Mybatis内部的很多类的属性以及类的作用都没有做相关介绍。后来想想还是觉得好好写几篇关于Mybatis的文章,其实这也是为了强逼...

2019-09-27 17:55:54

阅读数 65

评论数 0

原创 Mybatis源码解析《二》

导语 在前一篇文章Mybatis源码解析《一》中,已经简单了捋了一下mybatis核心文件和mapper配置文件的一个基本的解析流程,这是理解mybatis的基本,和spring中的配置文件的加载解析是一样的道理。 既然说完了文件的加载,那么接下来便是关于mybatis的核心流程了,SqlSe...

2019-08-05 17:09:25

阅读数 107

评论数 0

原创 Mybatis源码解析《一》

导语 在当前的日常开发中,mybatis这样的一个框架的使用,是很多程序员都无法避开的。大多数人都知道mybatis 的作用是为了避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。因为在开始接触使用Java操作数据库的时候,我们都是使用JDBC的。 自从有了持久化框架之后,使用持久...

2019-08-02 09:59:32

阅读数 97

评论数 0

原创 Spring源码深度解析系列——自定义bean标签解析

导语 前面已经通过两篇文章说了一下bean标签的解析,感兴趣的同学可以去看一下(Spring源码深度解析系列——bean标签解析《一》和Spring源码深度解析系列——bean标签解析《二》),而这两篇是关于默认标签解析的,既然存在默认的,那么自然就有自定义的了,本篇文章便开始自定义标签的解析。...

2019-07-16 15:56:39

阅读数 45

评论数 0

原创 Spring源码深度解析系列——bean的加载《一》

导语 通过前面的几天文章,已经对xml的解析流程进行了阐述,那么在Spring中bean的工作就完成了?其实还没有,在第一篇文章“Spring源码深度解析系列——Bean的基本实现”的测试类中,第一行的代码是对bean解析的操作,第二句便是开始实行bean的加载动作了。那么这篇文章,就是对bea...

2019-07-10 11:24:13

阅读数 111

评论数 0

原创 Spring源码深度解析系列——bean标签解析《二》

导语 前一篇文章中,已经把bean的属性解析完成了,也讲到了把xml文档转换为GenericBeanDefinition,这样在GenericDefinition中可以找到对应的配置。但是GenericDefinition也只是子实现类,大部分的属性还是保存在AbstractBeanDefini...

2019-07-03 16:27:01

阅读数 61

评论数 0

原创 Spring源码深度解析系列——bean标签解析《一》

导语 在上一篇文章Spring源码深度解析系列——Bean的基本实现中,阐述了bean的加载、xml的验证模式、以及文件的获取等。但这还只是一个开始,在我们获取到文件后,且进行验证之后,我们便需要对这样的文件进行解析的工作了。所以,本篇文章将开始文件解析的代码讲解。 在Spring中对于标签有...

2019-07-02 16:43:34

阅读数 151

评论数 0

原创 Spring源码深度解析系列——Bean的基本实现

导语 笔者之前虽然草草的读了关于Spring方面的源码,但也仅仅是草草的读了一下。并未作任何笔记,无奈记性太差,近些时间想起前人的话:好记性不如烂笔头。于是想着再重新阅读一下Spring方面的源码,顺便复习一下一些基础知识。接下来便开始Spring源码之旅了。 首先在Spring源码系列中,笔...

2019-06-27 18:27:17

阅读数 123

评论数 0

原创 Java并发编程之ReentrantLock源码解析

一、关于ReetrantLock 在上篇文章Java并发编程之AQS中,比较详细的说了一下关于AQS的设计和AQS的代码相关原理。在上篇文章中也说了,AQS是J.U.C的核心,是用来构建锁或其他同步组件的基础框架,这其中就包括了ReentrantLock。由于前面已经详细的说了AQS的原理,在本...

2019-04-15 15:20:58

阅读数 100

评论数 0

原创 Java并发编程之AQS

一、关于AQS 队列同步器 AbstractQueuedSynchronizer 简称AQS,是用来构建锁或其他同步组件的基础框架(ReentrantLock、ReentrantReadWriteLock、Condition、LockSupport等等),它使用了一个int成员变量表示同步的状态...

2019-04-12 10:27:49

阅读数 210

评论数 0

原创 Java并发编程之synchronized底层实现原理

一、为什么出现synchronized 对于程序员而言,不管是在平常的工作中还是面试中,都会经常用到或者被问到synchronized。在多线程并发编程中,synchronized早已是元老级的角色了,很多人都称其为重量级锁,但是随着Java SE 1.6对其进行各种优化之后,便显得不再是那么的...

2019-04-09 19:24:26

阅读数 771

评论数 0

原创 JDK集合源码解析——LinkedList

前言 上一篇文章对ArrayList的源码进行了一个简单的解析,那么本篇将对ArrayList的“兄弟”集合类LinkedList进行解析,相对于ArrayList而言,LinkedList的源码相对复杂一点点,但还没难道难以阅读的地步,稍微用点心还是可以滴。 那么说到LinkedList,在...

2019-09-06 20:44:06

阅读数 42

评论数 0

原创 JDK集合源码解析——ArrayList

导语 首先说下为什么要写集合类的博文,毕竟这类的文章网上也是数不胜数,可是并不能因为这个就成了自己不写的理由,写博文其实主要是为了锻炼自己思考问题的思路,很多时候一篇文章写的好坏与否,主要就看写作者的思路如何。当你的思路很清晰的时候,同时也说明了你对它的熟悉度如何。 虽然集合源码的解析又很多人...

2019-09-05 21:52:00

阅读数 31

评论数 0

原创 Java设计模式之——抽象工厂方法

导语 上一篇文章《Java设计模式之——工厂方法》中对工厂方法进行了一个简单的概述,那么本篇将开始阐述一下抽象工厂方法的概念,以及它在jdk等源码中的使用。 对于抽象工厂而言,它实际上是工厂方法的一个升级版,在有多个业务品种、业务类型时,通过抽象工厂来生产所需要的对象,实际上是一中非常好的解决...

2019-06-10 16:50:36

阅读数 76

评论数 0

原创 Java设计模式之——工厂方法

导语 前一篇文章,简单的讲述了关于简单工厂模式,本篇将继续 讲述工厂方法的定义,以及它的相关实现。且看看在JDK源码或框架源码中,有哪些地方有使用。 一、工厂方法的定义和类型 定义:定义一个对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:...

2019-06-03 09:56:24

阅读数 41

评论数 0

原创 Java设计模式之——简单工厂

导语 在日常开发中,一般而言是很少涉及到设计模式的,或者说很多时候就算接触到了设计模式,很多人或许却并不知道自己遇见了设计模式。所以在这次这个系列的文章中,还是想简单的介绍一下一些设计模式,以及这些设计模式的概念、适用场景等等。其中只用少量的文字来叙述,大部分还是用代码来展示,因为个人觉得这样其...

2019-05-28 16:04:06

阅读数 40

评论数 0

原创 Redis 之武林大会 - 哨兵(Sentinel)

前言   Redis在出从复制的模式下,一旦主节点由于故障不能提供服务,需要人工降从节点晋升为主节点,同时还要通知应用方更新主节点的地址,在很多应用场景下,这样的故障处理方式是无法被接受的。不过幸运的是Redis自从2.8之后,便正式提供了Redis Sentinel(哨兵)架构来解决这个问题,...

2018-12-03 08:54:00

阅读数 55

评论数 0

原创 Redis 之江湖遇险-复制运维及优化

Redis 之江湖遇险-复制运维及优化 一. 前言   上一篇Redis 之深入江湖-复制原理中说了复制的原理,那么在理解复制原理之后,还要知道在这复制功能的背后,还有哪些坑要注意一下,毕竟坑是要跳过去的,而不是跳进去的。   二. 读写分离的一...

2018-12-01 13:33:00

阅读数 33

评论数 0

原创 使用Hexo + GitHub Pages 搭建个人博客

使用Hexo + GitHub Pages 搭建个人博客 一.前言   之前是在CSDN上写博客的,但是无奈其广告满天飞,还有因为个人不太喜欢CSDN博客里的一些东西,加上看到很多技术大牛都有自己的个人博客,于是乎!便想着搭建一个自己的个人博客。其...

2018-11-28 08:18:00

阅读数 78

评论数 0

原创 Redis 之深入江湖-复制原理

Redis 之深入江湖-复制原理 一.前言   上一篇文章Redis 之复制-初入江湖中,讲了关于Redis复制配置,如:如何建立配置、如何断开复制、关于链接的安全性等等,那么本篇文章将深入的去说一下关于Redis复制原理,如下: 复制过程 数据同步 全量复制 部分复制 心跳 异步...

2018-11-27 08:46:00

阅读数 48

评论数 0

原创 Redis 之复制-初入江湖

Redis 之复制-初入江湖 一.前言   在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复合负载均衡等需求.Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副本.复制功能是Redis高可用的基础,后面的哨兵和集群都是在复制的基...

2018-11-26 10:58:00

阅读数 40

评论数 0

原创 Redis 之持久化

目录 一.前言 二.持久化类型之 RDB 三.持节化类型之AOF 四.Redis 持久化类型的抉择 五.持久化的恢复 六.持久化问题的分析定位与优化 七.回顾总结 一.前言 首先,来回顾下前面文章的知识.Redis的特性之一就是读取速度快,因为它的数据是存储在内存中的,但是这样还...

2018-11-21 16:40:55

阅读数 59

评论数 0

原创 Redis API的理解与使用

目录 一.通用命令 二.数据结构与内部编码 三.单线程架构 一.通用命令 Redis有五种数据结构,它们是键值对中的值,对于键来说有一些通用的命令.Redis的全局通用命令有:keys,dbsize,exists key,del key [key …],expire key seco...

2018-11-02 15:02:50

阅读数 66

评论数 0

原创 初识Redis

一.关于Redis redis是什么 redis的特性 redis的应用场景 redis单机安装及使用 二.Redis是什么 redis是一个基于键值的存储服务系统 开源(可以自己学习源代码,可以做个性化定制) 支持多种数据结构 高性能/性能丰富 三.Redis特性 1.速度快 ...

2018-11-01 16:43:53

阅读数 60

评论数 0

原创 数据结构09—— 并查集(Union-Find)

一、关于并查集 并查集(Union-Find)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。并查集(Union-Find)从名字可以看出,主要它涉及两种基本操作:合并和查找。这说明,初始时并查集中的元素是不相交的,经过一系列的基本操作(Union)...

2018-10-15 10:26:40

阅读数 105

评论数 0

原创 数据结构08——Trie

一、什么是Trie? Trie树,一般被称为字典树、前缀树等等,Trie是一种多叉树,这个和二分搜索树、堆、线段树这些数据结构不一样,因为这些都是二叉树。,Trie树除了是一种多叉树,它是一种哈希树的变种。因此Trie典型作用,是应用于统计和排序大量的字符串,所以经常被搜索引擎系统用于文本词频统...

2018-08-21 08:46:29

阅读数 105

评论数 0

原创 数据结构07——线段树

  一.线段树的定义 首先,线段树它是一棵二叉树,但它又不是一个完全二叉树,却是一个平衡二叉树。它和二叉树一样,有一个一个的节点,但是对于线段树而言,它的每一个节点表示的都是一个区间类相应的信息。以求和为例,线段树每个节点,存储的就是一段区间的数字和。根节点存储的就是整个区间的相应的数字和,之...

2018-08-19 09:15:51

阅读数 91

评论数 0

原创 数据结构06——优先队列和堆

开头语 因为这些日子的懒惰,所以一直没有更新博客,实在在很抱歉。这里我将继续和大家分享数据结构的知识,希望大家可以喜欢。本篇文章我将会分享关于优先队列和堆的相关知识,那么我们来说下,关于这两种数据结构的各自相关的文字定义。 首先,先说下什么是优先队列,其实在前面数据结构02——栈和队列这篇文章...

2018-08-18 19:31:09

阅读数 106

评论数 0

原创 数据结构05——集合与映射

  一、集合和映射的概念 对于集合,我们只要学过编程的人一般都是了解的,在编程中,我们常常需要集中存放多个数据。从传统意义上来讲,数组是我们的一个很好的选择,但前提是我们必须事先已经明确知道我们将要保存的对象的数量。一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保...

2018-08-05 01:46:12

阅读数 142

评论数 0

原创 数据结构04——二叉树

  一、开头语 说到二叉树,我们是否应该考虑一下,为什么要使用树?那是因为树结构是集有序数组和链表的优点于一身,在树中查找数据的速度和在有序数组中查找的速度是一样快的,并且插入数据和删除数据的速度和链表的也是一样的,说的直白一点,就是两个字:高效。在本篇文章,我们主要讲的是一种特殊的树——二叉...

2018-07-29 09:54:06

阅读数 215

评论数 1

原创 数据结构03——链表

  一.开头语 对于链表是我们一个非常熟悉的数据结构,它的定义:链表是一种递归的数据结构,它或者为空(null),或者指向一个节点(node)的引用,该节点含有一个泛型的元素和一个指向另一条链表的引用。当然这只是一种比较教科书式的定义。对于链表的数据是存储在“节点”中的,它的优点是真正的动态,...

2018-07-26 08:43:20

阅读数 196

评论数 0

原创 数据结构02——栈和队列

“栈”是我们常常听到的一个术语,那么什么是栈呢,很简单,栈(Stack)是一个后进先出(Last in first out,简称:LIFO)的线性表,它只能从一端添加元素,也只能从一端去除元素,这一端就称为:栈顶。在计算机的世界中,栈是有着一些不可思议的作用的,例如你在编辑器中输入你想要输入的文字...

2018-07-25 08:31:01

阅读数 85

评论数 0

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