Spring AOP(二) 修饰者模式和JDK Proxy

 在上边一篇文章中我们介绍了Spring AOP的基本概念,今天我们就来学习一下与AOP实现相关的修饰者模式和Java Proxy相关的原理,为之后源码分析打下基础。 修饰者模式 Java设计模式中的修饰者模式能动态地给目标对象增加额外的职责(Responsibility)。它使用组合(object composition),即将目标对象作为修饰者对象(代理)的成员变量,由修饰者对象决定调用目标对象的时机和调用前后所 ......

Read More...

Spring AOP(一) AOP基本概念

 Spring框架自诞生之日就拯救我等程序员于水火之中,它有两大法宝,一个是IoC控制反转,另一个便是AOP面向切面编程。今日我们就来破一下它的AOP法宝,以便以后也能自由使出一手AOP大法。  AOP全名Aspect-oriented programming面向切面编程大法,它有很多兄弟,分别是经常见的面向对象编程,朴素的面向过程编程和神秘的函数式编程等。所谓AOP的具体解释,以及和OOP的区别不清楚的同学可以自行 ......

Read More...

AbstractQueuedSynchronizer超详细原理解析

 今天我们来研究学习一下AbstractQueuedSynchronizer类的相关原理,java.util.concurrent包中很多类都依赖于这个类所提供队列式同步器,比如说常用的ReentranLock,Semaphore和CountDownLatch等。 为了方便理解,我们以一段使用ReentranLock的代码为例,讲解ReentranLock每个方法中有关AQS的使用。 ReentranLock示例&e ......

Read More...

LongAdder原理完全解析

 对LongAdder的最初了解是从Coolshell上的一篇文章中获得的,但是一直都没有深入的了解过其实现,只知道它相较于AtomicLong来说,更加适合写多读少的并发情景。今天,我们就研究一下LongAdder的原理,探究一下它如此高效的原因。 基本原理和思想 Java有很多并发控制机制,比如说以AQS为基础的锁或者以CAS为原理的自旋锁。不了解AQS的朋友可以阅读我之前的AQS源码解析文章。一般来说,CAS适 ......

Read More...

MySQL探秘(八):InnoDB的事务

 事务是数据库最为重要的机制之一,凡是使用过数据库的人,都了解数据库的事务机制,也对ACID四个基本特性如数家珍。但是聊起事务或者ACID的底层实现原理,往往言之不详,不明所以。所以,今天我们就一起来分析和探讨InnoDB的事务机制,希望能建立起对事务底层实现原理的具体了解。  数据库事务具有ACID四大特性。ACID是以下4个词的缩写: 原子性(atomicity) :事务最小工作单元,要么全成功,要么全失败 ......

Read More...

MySQL探秘(六):InnoDB一致性非锁定读

 一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(MVVC)读取当前数据库中行数据的方式。如果读取的行正在执行DELETE或UPDATE操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB会去读取行的一个快照。  上图直观地展现了InnoDB一致性非锁定读的机制。之所以称其为非锁定读,是因为不需要等待行上排他锁的释放。快照数据是指该行的之前 ......

Read More...

2018年,计划目录

 和17年计划一样,建立一个计划目录,记录一下18年的计划和实现情况,进行不定时的更新。 计划列表工作 测试用例自动化生成技术研究生活书籍 计算机程序的构造和解释更新2018.3.26日测试用例自动化生成技术研究 依据代码逻辑自动生成junit代码。用于追求覆盖率的junit代码自动生成计算机程序的构造和解释 再次挑战这本书,希望能坚持下去。 ......

Read More...

Spring Cloud Stream(一):Spring基础知识

 我研究和阅读Spring Cloud Stream源码已经有一个多月了,但是由于自己的Spring基础知识不是很充足,所以导致很多地方都没有融会贯通,并且相关的文章一直无从下手。于是我先整理了当时阅读代码时的知识点记录,算是源码分析之前的基础知识储备吧,整理的有些杂乱,希望大家理解。 本文涉及的Spring知识如下: Spring Boot的@Import用法和原理,与Configuration和ImportBe ......

Read More...

Spring Boot (一): Spring Boot starter自定义

 前些日子在公司接触了spring boot和spring cloud,有感于其大大简化了spring的配置过程,十分方便使用者快速构建项目,而且拥有丰富的starter供开发者使用。但是由于其自动化配置的原因,往往导致出现问题,新手无法快速定位问题。这里我就来总结一下spring boot 自定义starter的过程,相信大家看完这篇文章之后,能够对spring boot starter的运行原理有了基本的认识。 为了节约你的时间,本 ......

Read More...

Raft算法

 前段时间一直在学习mit的分布式课程Distributed Systems,仔细阅读了raft论文,但是中间又跑去搞docker了,所以一直没有整理raft相关的文章,今天就来总结一下。 文章中没有多少详细的图片,但是大家可以边看文章边看Raft演示动画 之前介绍的Paxos算法一直都是分布式一致性协议的标准,但是Paxos难以理解,更难以理解。于是Stanford的教授提出了Raft协议,它是一个为真实世界应用建立的协议, ......

Read More...