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...

Kubernetes部署

 学习完Docker之后,发现了kubernetes这个容器云框架,于是就自己部署来玩玩。大家也可以按照这个和我一步步部署 kubernetes 集群文章来部署。最近在这里花费了大量的时间,之后希望整理一下相关的原理介绍。 问题列表和解决方案 google源找不到解决方案:http://www.jianshu.com/p/4f5066dad9b4公钥未安装导致无法安装 Created API client, waiting ......

Read More...

Docker系列之Jenkins自动化部署

 Devops的概念已经火了很久了,我一直想对这方面进行一定的了解;再加上实验室项目环境依赖比较复杂,希望使用Docker来解决,所以最近就好好研究了一波Docker的相关实践和原理。这里整理一下,希望组成一个系列,从实践到原理详细讲解一下Docker的使用。 第一篇就讲一下Jenkins+Docker的自动化部署实践。大致的流程如下:目前我有两个服务器,分别是阿里云和bandwagon,代码存储在github上,每次push都会触发阿 ......

Read More...

《多处理器编程艺术》-链表:锁的作用

 最近在阅读《多处理器编程艺术》一书,掌握了很多Java多线程的底层知识,现在就做一下书中链表-锁的作用一章的总结。 为了节约你的时间,本文主要内容如下: 带锁的链表队列 细粒度同步 乐观同步 惰性同步 非阻塞同步 粗粒度同步 所谓粗粒度同步其实很简单,就是在List的add,remove,contains函数的开始就直接使用Lock加锁,然后在函数结尾释放。 add函数的代码如下所示,函数的主体就是链 ......

Read More...