自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

旧时光 | YoungChen's 博客

【技术栈 Java & Go,兴趣方向分布式存储,博客地址 chenjiayang.me,公众号 Young_Blog】...

原创 闲聊注册中心——ZK、Eureka、Sofa-Registry
原力计划

文字 | jiayangchen封面图片| UnsplashClay Banks1. 写在前面最开始服务之间的调用借助的是域名,域名其实是个好东西,使用起来很方便,但所有调用请求都得...

2020-04-25 11:00:00 119 0

原创 图文解析 Nacos 配置中心的实现

图文解析 Nacos 配置中心的实现 本文不会贴太多源码,基本靠图片和文字叙述 全文共 2582 字,预计阅读时间 12 分钟 什么是 Nacos Nacos 是阿里发起的开源项目,地址:https://github.com/alibaba/nacos。Nacos 主要提供两种服务,一是配置...

2020-01-17 16:32:13 3203 1

原创 借 Go 语言 database/sql 包谈数据库驱动和连接池设计

1.这是公众号的第 40 篇文章2. 即使不了解 Go 语言,阅读本文也不会有障碍3. 封面图片来自Mael BALLANDonUnsplash什么是池化技术da...

2019-08-10 20:30:14 294 0

原创 [图文] Seata AT 模式分布式事务源码分析

推荐阅读 Seata TCC 分布式事务源码分析 公众号 Young_Blog 什么是 Seata AT 模式 Seata AT 的使用方法 第一步,增加全局事务注解 第二步,配置代理数据源 第三步,新建 undo_log 表 Seata AT 的工作流程 工作流程总览 图解 AT ...

2019-07-05 19:56:42 1504 7

原创 【旧文重新排版】重读 Amazon Dynamo 论文有感

文 | YoungChen封面图片 | Unsplash旧文重新排版,方便阅读本文内容不仅仅局限于 Dynamo1. 什么是 Dynamo亚马逊在业务发展期间面临一些问题,主要受限于关系...

2020-04-30 23:01:54 30 0

原创 【旧文重新排版】RocketMQ 分享全纪实

文 |YoungChen图片 | Unsplash为了解决之前发布的旧文排版粗糙、不易阅读的问题1. 为什么分享 RocketMQ为什么没有选择 Kafka 而是 RocketMQ 呢...

2020-04-28 08:40:00 44 0

原创 【旧文重新排版】借 Go 语言 database/sql 包谈数据库驱动和连接池设计

文 | jiayangchen封面图片 |Unsplash因为之前的文章感觉排版太差了,不容易阅读接下来会把一些旧文重新排版再发一下即使你不了解 Go 语言,阅读本文也不会有障碍1. ...

2020-04-26 23:27:58 54 0

转载 Google Summer of Code 学生申请指南

(投稿一篇 17 年写的文章划划水)本文的受众主要是想在暑假找点事情做,挣点外快的同学,亦或是想积累一下参与真实软件开发经验的同学。背景介绍Google Summer of Code[...

2020-04-02 19:16:17 240 0

原创 盘点下近一年我关注的 UP 主

多事之秋,希望这个年大家过得平平安安近一年,在B站和油管关注了一批很不错的 UP 主,涉及教育、财经、摄影、旅行、电影、美食等等,这里来说说一些我觉得比较好的,如果是B站油管都有频道的,...

2020-01-21 19:15:12 400 0

原创 图文解析 Nacos(1) 配置中心的实现

1. 全文共 2582 字,预计阅读时间 12 分钟2. 本文不会贴太多源码,基本靠图片和文字叙述3. 这是公众号的第53 篇文章什么是 Nacos配置中心的架构Nacos 使用示例官...

2020-01-17 20:06:42 432 0

原创 毕业一年,我的 2019,新年伊始新的开始

我的肩上是风,风上是闪烁的星群。—— 北岛《结局或开始》2019 年回想起来,聚焦在工作、学习和生活上讲的话,工作能力上有了不小的进步,离全栈工程师的目标愈发接近了,增强了面对困难的自信...

2020-01-01 16:01:41 681 1

原创 重读 Amazon Dynamo 论文有感

本文内容不仅仅局限于 Dynamo 什么是 Dynamo Dynamo 和 MySQL 的关系? 数据分片 数据分片的实现方式 Redis 集群的数据分片 Dynamo 的数据分片 一致性哈希的改进 数据复制 Dynamo 的读写流程 数据一致性和冲突解决 Dynamo 集群成员状态监测...

2019-12-21 15:11:15 644 0

原创 再谈 InnoDB MVCC 机制

之前写过一篇 MVCC 的文章,文章里出现了一些错误容易误导阅读的同学,错误集中在 RR 生成 ReadView 的时间点不清晰和未考虑到某些情况并不能完全套用 MVCC...

2019-06-22 17:06:30 119 0

原创 一天半的黄山之行总结

花了一天半的时间走了一圈黄山加宏村,原以为时间会很紧张,可能会走的很累,结果玩下来感觉时间上还是挺充裕的,就是一些行程安排上还可以再优化。本篇写一下我的行程总结,想去黄山...

2019-06-02 17:34:35 204 0

原创 [深度] Seata TCC 分布式事务源码分析

Seata 是什么 Seata 是阿里近期开源的分布式事务框架,地址:https://github.com/seata/seata。框架包括了集团的 TXC(云版本叫 GTS)和蚂蚁金服的 TCC 两种模式,短短数月 Github 上的 star 数已经接近一万,算是目前唯一有大厂背书的分布式事务...

2019-05-21 16:04:32 478 0

原创 Seata TCC 分布式事务源码分析

Seata 是什么 Seata是阿里近期开源的分布式事务框架,地址:https://github.com/seata/seata。框架包括了集团的TXC(云版本叫GTS)和蚂蚁金服的TCC两种模式,短短数月Github上的star数已经接近一万,算是目前唯一有大厂背书的分布式事务解决方案。 T...

2019-05-03 14:13:05 350 0

原创 MySQL InnoDB MVCC 机制的原理及实现

什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL、Oracle、PostgreSQL 等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。 如此一来,不同事务并发...

2019-05-01 15:18:18 178 0

原创 MySQL InnoDB 中的 redo/undo log

写在前面 讲到 InnoDB、MVCC 等概念时,我们时常听到 redo log 和 undo log 的名字,那么二者的作用是什么呢?其实二者并非事务操作独有,索引更新时也会记录 redo/undo log,甚至记录 undo log 时也会记录 redo log,而本文聚焦于事务方面的 red...

2019-05-01 15:12:50 279 0

原创 InnoDB 中的 redo 和 undo log

写在前面讲到InnoDB、MVCC等概念时,我们时常听到redo log和undo log的名字,那么二者的作用是什么呢?其实二者并非事务操作独有,索引更新时...

2019-04-13 17:20:38 169 0

转载 毕业后终于来打卡的顾村公园

顾村公园从大一开始就想去的,拖了四年多终于成行,虽然是挑了清明这个人挤人的日子,不过也没办法。顾村公园临近在七号线的尾巴,从中山公园出发大概一小时左右,门票可以点评上买,...

2019-04-05 22:31:10 86 0

原创 MySQL 索引背后的隐藏之道

索引的 “哲学思想”我们为什么需要索引?显而易见,使用索引可以加快我们检索数据的速度,生活中书籍的目录、图书馆里的各种书架编号、号码簿上的检索页等,都少不了索引的身影。回...

2019-03-23 18:01:30 96 0

原创 MySQL 索引机制背后的隐藏之道

索引的 “哲学思想” 我们为什么需要索引? 显而易见,使用索引可以加快我们检索数据的速度,生活中书籍的目录、图书馆里的各种书架编号、号码簿上的检索页等,都少不了索引的身影。 回到计算机的世界,任何一种数据结构都不是凭空产生的,一定会有它的诞生背景和解决的问题。我们先举个最简单的例子,下图是一个...

2019-03-23 17:47:59 131 0

原创 先锋之矛 — MySQL InnoDB 中的锁

写在前面数据库本质上是一种共享资源,因此在最大程度提供并发访问性能的同时,仍需要确保每个用户能以一致的方式读取和修改数据。锁机制(Locking)就是解决这类问题的最好武...

2019-03-10 18:28:54 76 0

原创 MySQL InnoDB 中的锁机制详解

写在前面 数据库本质上是一种共享资源,因此在最大程度提供并发访问性能的同时,仍需要确保每个用户能以一致的方式读取和修改数据。锁机制(Locking)就是解决这类问题的最好武器。 首先新建表 test,其中 id 为主键,name 为辅助索引,address 为唯一索引。 CREATE TABLE ...

2019-03-10 18:19:18 117 0

原创 概述!MySQL InnoDB 存储引擎

InnoDB 存储引擎MySQL得益于开放的可插拔设计,允许替换不同的底层存储引擎,InnoDB就是其中的代表,最初由第三方公司开发后被Oracle收购,是OL...

2019-03-09 16:49:45 82 0

原创 MySQL InnoDB 存储引擎简介

参考资料 《MySQL 技术内幕 InnoDB 存储引擎》第二版 姜承尧著

2019-03-09 16:10:35 109 0

原创 Thread setUncaughtExceptionHandler

setUncaughtExceptionHandler 用于获取线程运行时异常 线程在执行时是不能抛出 checked 异常的,IDE 只会提示你用 try-catch 包裹起来。因此主线程无法直接获取子线程的线程信息,而每个 Thread 可以通过 setUncaughtExceptionHan...

2019-03-01 19:50:25 382 0

原创 基于 “不可变类” 实现一个线程安全的 Integer 计数器

ImmutableIntegerCounter // final 修饰,不能继承 public final class ImmutableIntegerCounter { // final 修饰,不允许其他线程对其更改 private final int initial; ...

2019-02-28 19:52:03 178 0

原创 用 Wait 和 Notify 实现 “生产者-消费者” 模型

生产者-消费者模型 import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class ProducerConsumer { public static void main(Stri...

2019-02-27 20:11:36 111 0

原创 详解 Java 中的 Wait 和 Notify 机制

写在前面 Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到。大家或多或少知道些背景知识,例如二者均为 Object 类的方法,而不是 Thread 特有的(因为锁是每个对象都具有的特性,因此操作锁的方法也紧跟对象,没毛病),且都只能在同步代码块中调用(即前...

2019-02-26 20:09:42 854 0

原创 你需要知道的,缓存架构的设计和常见问题

缓存架构的设计 缓存层通常架设在 DB 和业务逻辑层之间,核心功能就是从DB生成一条缓存数据,可以在后续若干次查询请求过程中不再访问DB,请求在缓存层直接命中后返回,从而可以达到加快访问速度的作用,同时也能在流量暴增时充当保护层防止DB被打垮。 缓存的引入虽然有优势,但也会带来一些问题,例如缓存穿...

2019-02-23 15:07:55 106 0

原创 回顾《深入理解 Java 虚拟机》之线程安全与锁优化

什么叫线程安全 我之前面试的时候就被问到过这个问题,其实说几句话描述下线程安全估计谁都能做到,问题是如何下一个准确的定义呢?书中选取了 Brain Goetz 的定义: 当多线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他...

2019-02-17 17:28:55 132 0

原创 “火箭男孩” 的毕业旅行

这是一篇迟到半年的总结 -_-|| 孟美岐不出意外的出道了,但看到陈意涵和刘人语落选还是很遗憾。 团队叫火箭少女就有点硬核了。。。 先说土创 6.23 晚我们四个还在重庆去成都的高铁上,当晚是土创的总决选,小赵想在高铁上拿手机看,但因为路上隧道很多,信号时断时续,画面一直卡成 PPT 所以最后...

2019-02-17 13:03:23 180 0

原创 回顾《深入理解 Java 虚拟机》之 Java 和线程

首先,并发不一定要依赖多线程,例如 PHP 中可以存在多进程并发。但是当我们在 Java 里面谈论并发时,一般都与线程脱不了干系,因此我们先来谈谈什么是线程,它跟进程有什么区别。 再谈进程与线程 如果一个服务器同时只能为一个客户端连接服务,其他都需要阻塞,那么效率定然会很感人,为了让服务器能同时服...

2019-02-16 16:48:07 138 0

原创 回顾《深入理解 Java 虚拟机》 之内存模型和 volatile 关键字

定义 Java 内存模型并不是一件容易的事情,这个模型必须定义得足够严谨,才能让 Java 的并发操作不会产生歧义;但是,也必须得足够宽松,使得虚拟机的实现能有足够的自由空间去利用硬件的各种特性(寄存器、高速缓存等)来获取更好的执行速度。经过长时间的验证和修补,在JDK1.5发布后,Java内存模...

2019-02-12 21:43:22 111 0

原创 回顾《深入理解 Java 虚拟机》之类加载器

虚拟机团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己去决定如何获取所需要的类,实现这个动作的代码模块称为** “类加载器”**。 首先,先要知道什么是类加载器。简单说,类加载器就是根据指定全限定名称将 Cla...

2019-02-08 22:33:08 88 0

原创 回顾《深入理解 Java 虚拟机》之类加载机制

虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段: 除却解析...

2019-02-07 20:53:36 120 0

原创 回顾《深入理解 Java 虚拟机》之垃圾收集器

GC 并非 Java 的专利,事实上最早 Lisp 语言就有了 GC 和内存动态分配的概念。GC 的重点在于两个: 如何判定对象的存活与否 如何进行垃圾回收,这里又分为不同的回收算法 如何判断对象存活 关于GC roots 选取的这个问题,知乎上 R大 有过详细的回答,这里贴上链接:Java...

2019-02-06 19:42:00 114 0

原创 回顾《深入理解 Java 虚拟机》之 Java 内存区域

过年会把《深入理解 Java 虚拟机》回看一遍,整理下知识点 C/C++ 的内存管理都在编码人员自己的手里进行控制,delete/free 虽能让人感受到上帝视角的快感,却也加大了对编码人员的考验。Java、Golang、Nodejs 等现代语言因为有虚拟机这层,所以将内存管理的工作移交给了虚...

2019-02-05 19:41:22 169 0

原创 ThreadPoolExecutor 核心源码深度解析

本文只介绍 ThreadPoolExecutor 源码的关键部分,开篇会先介绍 ThreadPoolExecutor 中的一些核心常量定义,然后选取线程池工作周期中的几个关键方法分析其源码实现。其实,看 JDK 源码的最好途径就是看类文件注释,作者把想说的全都写在里面了。 一些重要的常量 Thr...

2019-02-04 20:00:29 215 0

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