自定义博客皮肤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、分布式、数据库等精品原创文章,期待你的关注。

  • 博客(26)
  • 收藏
  • 关注

原创 InnoDB原理篇:为什么使用索引会变快?

前言大家好,我是阿星。本文就接上一篇文章【InnoDB原理篇:聊聊数据页变成索引这件事】来聊聊索引。建议看完上篇文章再看本篇,食用效果最佳。索引假设给你一本非常厚的《Java编程思想》阅读,没有目录,你想快速找到某一个章节的知识点,那估计得找一会了,如果有目录就不一样。索引其实就是为了提高数据查询的效率,就像书的目录一样,对于数据库的表而言,索引其实就是它的目录。二叉搜索树索引的实现种类繁多,比如常见的有序数组、哈希表、树等,不同的结构都有自己的适用场景和局限性,在数据库领域中,树结构是被广

2022-03-13 10:52:32 258

原创 InnoDB原理篇:聊聊数据页变成索引这件事

前言大家好,我是阿星,真.好久不见。我们从上一篇文章【InnoDB 对 Buffer Pool 的奇思妙想】得知,每个缓存页对应一个数据页。正好就以数据页为起点,来聊聊InnoDB的索引。数据页我们都知道平时执行crud的时候,都会从磁盘上加载数据页到Buffer Pool的缓存页里去,更新缓存页后,由异步线程刷回磁盘的数据页。所以MySQL进行数据操作的最小单位是数据页,接下来就分析分析,数据页到底长什么样。每个数据页默认16kb的大小,数据页由多个部分组成,如下图所示当然这么多概念,

2022-02-24 16:46:21 1017

原创 Buffer Pool 为了让 MySQL 变快都做了什么?

前言大家好,我是阿星,又跟大家见面了。相信很多小伙伴在面试中都被问过「为什么要用缓存?」,大部分人都是回答:「减少数据库的磁盘IO压力」。但是MySQL真的有如此不堪吗?每次增删改查都要去走磁盘IO吗?今天就聊聊InnoDB对Buffer Pool的奇思妙想。Buffer Pool先梳理出问题,再思考如何解决问题。假设我们就是InnoDB,我们要如何去解决磁盘IO问题?这个简单,做缓存就好了,所以MySQL需要申请一块内存空间,这块内存空间称为Buffer Pool。Buffer Po

2021-08-23 11:10:33 439

原创 redo log与binlog间的破事

前言阿星在前面两篇文章都详细聊过redo log与binlog,有兴趣的朋友可以去看看前面两篇文章:聊聊redo log是什么?你必须知道的binlog日志今天就来聊聊InnoDB是如何保证redo log与binlog两份日志之间的逻辑一致。两阶段提交redo log(重做日志)让InnoDB存储引擎拥有了崩溃恢复能力。binlog(归档日志)保证了MySQL集群架构的数据一致性。虽然它们都属于持久化的保证,但是则重点不同。在执行更新语句过程,会记录redo log与binlog两块

2021-08-12 13:43:36 262

原创 不会吧,不会吧,还有人不知道 binlog ?

前言上篇阿星详细聊了 redo log(重做日志),但是在MySQL数据库中还有一种二进制日志叫binlog(归档日志)。redo log它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎。而binlog是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQL Server层。binlog不管用什么存储引擎,只要发生了表数据更新,都会产生binlog日志。那binlog到底是用来干嘛的?可以说MySQL数据库的数据备份、主备、

2021-08-04 18:18:42 381

原创 聊聊redo log是什么?

前言说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Servce层的 binlog(归档日志)。只要是数据更新操作,就一定会涉及它们,今天就来聊聊redo log(重做日志)。redo logredo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。上一篇中阿星讲过,MySQ

2021-07-28 12:03:23 502

原创 浅谈 MySQL InnoDB 的内存组件

前言MySQL中执行一条SQL语句,相应表数据的读写都是由存储引擎去做(更新数据、查询数据)。在这个过程,存储引擎需要决策一些事情数据是从内存查还是从硬盘查数据是更新在内存,还是硬盘内存的数据什么时候同步到硬盘所以存储引擎会按照内部逻辑与内存、硬盘交互。我们可以按需选择存储引擎,比如常见的 InnoDB、MyISAM、Memory 等等。众多存储引擎中,InnoDB是最为常用的,从 MySQL5.5.8 版本开始,InnoDB是默认的存储引擎。InnoDB简介InnoDB存储引擎

2021-07-23 12:50:05 256 1

原创 CRUD这么多年,你有了解过MySQL架构吗?

前言目前大部分的后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。对MySQL基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查。所有很多后端开发人员眼中的MySQL如下图所示导致在实际工作中碰到MySQL中死锁异常、SQL性能太差、异常报错等问题时,直接百度搜索。然后跟着博客捣鼓就解决了,可能自己都没搞明白里面的原理。为了解决这种知其然而不知其所以然的问题,阿星的重学MySQL系列会带着大家去探索MySQL底层原理的方方面面。这样大家碰到MySQL的一些异常或者问题时,能够

2021-07-12 11:17:58 400

原创 33张图解析ReentrantReadWriteLock源码

大家好,我是阿星,今天是一篇硬核文,请各位读者大大们系好安全带,马上要发车了。晕车的朋友,可以先吃一颗阿星独家秘制的晕车药,童叟无欺,货真价实,还免费,白嫖党狂喜(16张图揭开AQS)。本文大纲如下纵观全局我的英文名叫ReentrantReadWriteLock(后面简称RRW),大家喜欢叫我读写锁,因为我常年混迹在读多写少的场景。读写锁规范作为合格的读写锁,先要有读锁与写锁才行。所以声明了ReadWriteLock接口,作为读写锁的基本规范。之后都是围绕着规范去实现读锁与写锁。读锁

2021-06-30 09:49:38 342

原创 图解Java线程状态转换

大家好,我是阿星,好久不见,欢迎来到Java并发编程系列番外篇线程状态转换,内容通俗易懂,请放心食用。线程状态先来个开场四连问Java线程状态有几个?Java线程状态是如何转换?Java线程状态转换什么情况会进入锁的等待队列?Java线程状态转换什么情况会进入锁的同步队列?一提到Java线程状态,不少读者立马想到线程状态转换图,但细想,印象又不深刻,只记得有那么几个状态。再要你说出Java线程状态是如何转换的,脑子里可能就如下图一样,已经是一团浆糊了。别慌,阿星为了帮

2021-06-17 08:11:49 564

原创 ReentrantReadWriteLock的位运算解析

大家好,我是阿星,欢迎来到Java并发编程系列第六篇ReentrantReadWriteLock基础,今天我们来聊一聊读写状态的设计。我相信不少读者,在看JDK源码时,会看到位运算代码,可能有些人和阿星一样是转行的,缺乏计算机相关的基础知识,看的是一头雾水。导致有些人直接被劝退,也有些人选择理解字面上的意思,细节跳过。但是一颗疑惑的种子在我们心中埋了下来「为什么使用位运算就能达到这样的效果?」。恰好ReentrantReadWriteLock读写状态的设计用到了位运算,我们以此来展开今天的话题。

2021-05-26 07:30:29 310 1

原创 基于Mybatis手撸一个分表插件

大家好,我是摸鱼失败的阿星背景事情是酱紫的,阿星的上级leader负责记录信息的业务,每日预估数据量是15万左右,所以引入sharding-jdbc做分表。上级leader完成业务的开发后,走了一波自测,git push后,就忙其他的事情去了。项目的框架是SpringBoot+Mybaits出问题了阿星负责的业务也开发完了,熟练的git pull,准备自测,单元测试run一下,上个厕所回来收工,就是这么自信。回来后,看下控制台,人都傻了,一片红,内心不禁感叹“如果这是股票基金该多好”。出了问题就要解决,随着

2021-05-15 00:03:10 3320 45

原创 Java类加载器:坑爹是我的特色

大家好,我是头发还很多的阿星今天的主角是「在日常开发中,存在感非常低的类加载器」,众所周知大佬除了头发比较少,还非常低调,如果想和大佬交朋友,那一定要先认识大佬,下面阿星来带大家认识一下类加载器(本文不涉及源码)。什么是类加载器我们平时写了那么多的Java代码,却不知Java类的加载过程,岂不是很尴尬,为了打破尴尬,阿星得从Java类说起。我们编写的Java类也就是.java文件,通过Java编译器编译成.class文件,.class文件中保存着Java代码转换后的虚拟机指令。当程序使用某个Java类时,J

2021-05-08 12:06:17 643 9

原创 Java日志的心路历程

大家好,我是头发还很多的阿星今天来和大家聊聊Java日志体系,Java日志体系可以说是五花八门,眼花缭乱。导致很小多伙伴因为日志标准库之间复杂的关系而感到烦恼,不知道统一系统的日志标准库需要依赖哪些jar包,百度一下所谓的博客,照着人家复制,却无法弄懂原理,甚至还有搞了半天项目因jar冲突跑不起来的,心态直接爆炸。咳咳,淡定淡定,别慌,阿星带你们弄懂其中的原理,只要你静下心,跟着本文来,再给个一键三连,你就能随心所欲的更改日志标准库,统一日志输出。发展史我们要正确的配置好日志,让jar相互生效

2021-04-30 21:47:14 437 4

原创 趣谈ReentrantLock,看完直呼通俗易懂

前言自己开的坑,跪着也要填完,欢迎来到Java并发编程系列第五篇ReentrantLock,文章风格依然是图文并茂,通俗易懂,本文带读者们深入理解ReentrantLock设计思想。如果读过阿星写的前篇万字长文 | 16张图解开AbstractQueuedSynchronizer,本篇的效果拉满,未读过也没关系,依然能get到ReentrantLock原理。认识下ReentrantLock阿星先带读者们和ReentrantLock见个面,简单的认识下什么是ReentrantLock。Reentra

2021-04-22 14:06:28 8659 28

原创 深入理解AbstractQueuedSynchronizer只需15张图

前言Java并发编程系列第四篇AbstractQueuedSynchronizer,文章风格依然是图文并茂,通俗易懂,本文带读者们深入理解AbstractQueuedSynchronizer设计思想。内容大纲基础AbstractQueuedSynchronizer抽象同步队列简称A Q S,它是实现同步器的基础组件,如常用的ReentrantLock、Semaphore、CountDownLatch等。A Q S定义了一套多线程访问共享资源的同步模板,解决了实现同步器时涉及的大量细节问题,能够极

2021-04-16 12:51:29 1960 11

原创 写给小白看的LockSupport

前言Java并发编程系列第三篇LockSupport,上一篇Synchronized文章中有提过,不推荐读者们使用Object的wait、notify、notifyAll等函数做多线程间的通信协同,使用LockSupport会是更好的选择,本篇就来谈谈LockSupport,也正好为下篇的A Q S(AbstractQueuedSynchronized)打基础。内容大纲LockSupport基本概念LockSupport是线程工具类,主要作用是阻塞和唤醒线程,底层实现依赖Unsafe,同时它还是锁

2021-04-06 13:11:09 736 7

原创 BAT面试多线程最常问的一个问题:谈谈你对Synchronized的理解?

前言Java并发编程系列第二篇Synchronized,文章风格依然是图文并茂,通俗易懂,本文带读者们由浅入深理解Synchronized,让读者们也能与面试官疯狂对线。在并发编程中Synchronized一直都是元老级的角色,Jdk 1.6以前大家都称呼它为重量级锁,相对于J U C包提供的Lock,它会显得笨重,不过随着Jdk 1.6对Synchronized进行各种优化后,Synchronized性能已经非常快了。内容大纲Synchronized使用方式Synchronized是Java提

2021-03-26 12:51:33 3571 11

原创 由浅入深CAS原理,小白也能与BAT面试官对线

前言Java并发编程系列番外篇C A S(Compare and swap),文章风格依然是图文并茂,通俗易懂,让读者们也能与面试官疯狂对线。C A S作为并发编程必不可少的基础知识,面试时C A S也是个高频考点,所以说C A S是必知必会,本文将带读者们深入理解C A S。大纲C A S基本概念C A S(compareAndSwap)也叫比较交换,是一种无锁原子算法,映射到操作系统就是一条cmpxchg硬件汇编指令(保证原子性),其作用是让C P U将内存值更新为新值,但是有个条件,内存值

2021-03-20 20:49:34 614 2

原创 小白也能看懂的Java内存模型

前言Java并发编程系列开坑了,Java并发编程可以说是中高级研发工程师的必备素养,也是中高级岗位面试必问的问题,本系列就是为了带读者们系统的一步一步击破Java并发编程各个难点,打破屏障,在面试中所向披靡,拿到心仪的offer,Java并发编程系列文章依然采用图文并茂的风格,让小白也能秒懂。Java内存模型(Java Memory Model)简称J M M,作为Java并发编程系列的开篇,它是Java并发编程的基础知识,理解它能让你更好的明白线程安全到底是怎么一回事。内容大纲硬件内存模型程序

2021-03-09 14:28:39 2320 15

原创 一文通关苦涩难懂的Java泛型

前言相信大家对Java泛型并不陌生,无论是开源框架还是JDK源码都能看到它,毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确使用泛型,是一门必修课,本文将解开大家对泛型的疑惑,并通过大量实践,让你get到泛型正确的使用姿势,下面开始进入正题吧!大纲基础因为本文重实践,而且面对的是Java开发人员群体,大家对泛型都有基础,所以泛型基础这块会快速过,帮助大家回忆下即可,后面主要的则重点是通配符编译期与运行期编译期是指把源码交给编译器编译成计算机可执行文件的过程,运行期是指把编译后的

2021-02-19 18:24:57 483

原创 从根上理解用户态与内核态

欢迎来到操作系统系列,采用图解 + 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门。本篇文章开始探秘用户态与内核态,虽然一般面试不会问这个,但搞清楚这块,对我们理解整个计算机系统是及其有意义的,这会让你在今后的学习中豁然开朗,你肯定会发出:“啊,原来如此的感叹!”内容大纲小故事张三是某科技公司的初级Java开发工程师(低权限),目前在15楼办公码代码,公司提供的资源仅有一套电脑(用户态),张三想着这一线的房价,倍感压力山大,于是给自己定下一个目标,一定要做技术总监,在一线扎根,奋斗B张

2021-01-31 17:59:29 2547 3

原创 什么是线程安全?一文带你深入理解

跳转目录前言内容大纲小故事竞争条件汇编指令小结互斥与同步互斥概念同步概念互斥与同步的区别互斥与同步的实现锁忙等锁无忙等锁信号量实践互斥事件同步生产者与消费者关于我前言欢迎来到操作系统系列,采用图解 + 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门。上篇文章有介绍过进程与线程的基础知识,进程下拥有多个线程,虽然多线程间通信十分方便(同进程),但是却带来了线程安全问题,本篇主要就是介绍操作系统中是用什么方法解决多线程安全,废话不多说,进入正文吧。博主希望读者阅读文章后可以养成思考与总结的习

2021-01-18 18:59:54 1695 4

原创 保姆级教学,22张图揭开ThreadLocal

目录前言内容大纲Java对象引用级别强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)ThreadLocalThreadLocal是什么ThreadLocal源码为何采用弱引用源码图内存图源码图内存图remove背后的意义唠叨唠叨关于我前言本文采用图解方式来带大伙通关 ThreadLocal ,同时我希望大伙有一定的 J V M 基础,这样食用起来会更香。相信大伙对 ThreadLocal 并不陌生

2021-01-03 18:48:55 1372 5

原创 进程、线程与协程傻傻分不清?一文带你吃透!

前言欢迎来到操作系统系列,依然采用图解 + 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门本篇开始介绍进程、线程、协程,相信很多小白们对这几个概念理解的不清晰,这里全部给你们安排的明明白白,我们开始进入正文吧内容大纲小故事小明(操作系统)开了一家互联网小公司,因为准备同时开发A与B两个软件,所以小明请了两个开发团队来做这件事情,分别是小王开发团队与小李开发团队,可是公司特别小,不仅只有一个房间(C P U),而且房间(C P U)只能容纳一个开发团队,为了能两个软件开发不被耽误,小

2020-12-22 18:51:24 5776 11

原创 15分钟!一文帮小白搞懂操作系统之内存

前言操作系统是一门比较难啃的课程,同时操作系统知识对开发者们来说是十分重要,相信各位在学操作系统的时候,有太多的抽象难以理解的词汇与概念,把我们直接劝退,即使怀着满腔热血的心情学操作系统,不过 3 分钟睡意就突然袭来。所以作者想通过自己的想法以图解+大白话的形式,产出操作系统系列文章,让小白也能看懂,帮助大家快速科普入门本篇开始介绍内存,内存在操作系统中还是比较重要的,理解了它,对整个操作系统的工作会有一个初步的轮廓。内容大纲...

2020-12-08 18:00:56 1233 5

空空如也

空空如也

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

TA关注的人

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