博客园 - detectiveHLH
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=26049
2023-05-26T02:54:55Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
feed.cnblogs.com
https://www.cnblogs.com/detectiveHLH/p/17434166.html
Kafka 杂谈 - detectiveHLH
开始之前 首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。 概览 什么是 Kafka? 这里先给出结论,我不太希望在解释概念 X 的时候,说到「为了了
2023-05-26T02:53:00Z
2023-05-26T02:53:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】开始之前 首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。 概览 什么是 Kafka? 这里先给出结论,我不太希望在解释概念 X 的时候,说到「为了了 <a href="https://www.cnblogs.com/detectiveHLH/p/17434166.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/16374614.html
磁盘原理简要分析 - detectiveHLH
欢迎 wx 关注 SH的全栈笔记 磁盘这玩意儿,即使不作为一个开发人员我们也会经常跟它打交道。比如你家里的台式机,或者拿来办公的电脑,再比如你装个操作系统,会涉及到对磁盘进行分区。 而作为开发人员,自然更加需要关注磁盘。 平时你开发的代码会暂存在磁盘上;开发中用的最多的数据库 MySQL,其数据是持
2022-06-15T03:29:00Z
2022-06-15T03:29:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】欢迎 wx 关注 SH的全栈笔记 磁盘这玩意儿,即使不作为一个开发人员我们也会经常跟它打交道。比如你家里的台式机,或者拿来办公的电脑,再比如你装个操作系统,会涉及到对磁盘进行分区。 而作为开发人员,自然更加需要关注磁盘。 平时你开发的代码会暂存在磁盘上;开发中用的最多的数据库 MySQL,其数据是持 <a href="https://www.cnblogs.com/detectiveHLH/p/16374614.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/16189013.html
简单了解 TiDB 架构 - detectiveHLH
一、前言 大家如果看过我之前发过的文章就知道,我写过很多篇关于 MySQL 的文章,从我的 Github 汇总仓库 中可以看出来: 可能还不是很全,算是对 MySQL 有一个浅显但较为全面的理解。之前跟朋友聊天也会聊到,基于现有的微服务架构,绝大多数的性能瓶颈都不在服务,因为我们的服务是可以横向扩展
2022-04-25T02:16:00Z
2022-04-25T02:16:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】一、前言 大家如果看过我之前发过的文章就知道,我写过很多篇关于 MySQL 的文章,从我的 Github 汇总仓库 中可以看出来: 可能还不是很全,算是对 MySQL 有一个浅显但较为全面的理解。之前跟朋友聊天也会聊到,基于现有的微服务架构,绝大多数的性能瓶颈都不在服务,因为我们的服务是可以横向扩展 <a href="https://www.cnblogs.com/detectiveHLH/p/16189013.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/16109881.html
MySQL 表数据多久刷一次盘? - detectiveHLH
前言 事情是这样的,在某乎的邀请回答中看到了这个问题: - 然后当时我没多想就啪一下写下来这样的答案: 这个其实要通过 MySQL 后台线程来刷的,在 Buffer Pool 中被修改的过的 Page(页)都会被标记成脏页,放到一个链表(Flush 链表)里。 然后 MySQL 通过启动后台线程,在
2022-04-07T01:47:00Z
2022-04-07T01:47:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】前言 事情是这样的,在某乎的邀请回答中看到了这个问题: - 然后当时我没多想就啪一下写下来这样的答案: 这个其实要通过 MySQL 后台线程来刷的,在 Buffer Pool 中被修改的过的 Page(页)都会被标记成脏页,放到一个链表(Flush 链表)里。 然后 MySQL 通过启动后台线程,在 <a href="https://www.cnblogs.com/detectiveHLH/p/16109881.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15977893.html
详细了解 synchronized 锁升级过程 - detectiveHLH
前言 首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把锁。 可以用来干嘛?锁,当然当然是用于线程间的同步,以及保护临界区内的资源。我们知道,锁是个非常笼统的概念,像生活中有指纹锁、密码锁等等多个种类,那 synchronized 代表的锁具体是把什么锁呢? 答
2022-03-08T01:28:00Z
2022-03-08T01:28:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】前言 首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把锁。 可以用来干嘛?锁,当然当然是用于线程间的同步,以及保护临界区内的资源。我们知道,锁是个非常笼统的概念,像生活中有指纹锁、密码锁等等多个种类,那 synchronized 代表的锁具体是把什么锁呢? 答 <a href="https://www.cnblogs.com/detectiveHLH/p/15977893.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15927650.html
Java NIO Selector 的使用 - detectiveHLH
之前的文章已经把 Java 中 NIO 的 Buffer、Channel 讲解完了,不太了解的可以先回过头去看看。这篇文章我们就来聊聊 Selector —— 选择器。 首先 Selector 是用来干嘛的呢?不熟悉这个概念的话我们其实可以这么理解: selector 把它当作 SQL 中的 sel
2022-02-23T07:29:00Z
2022-02-23T07:29:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】之前的文章已经把 Java 中 NIO 的 Buffer、Channel 讲解完了,不太了解的可以先回过头去看看。这篇文章我们就来聊聊 Selector —— 选择器。 首先 Selector 是用来干嘛的呢?不熟悉这个概念的话我们其实可以这么理解: selector 把它当作 SQL 中的 sel <a href="https://www.cnblogs.com/detectiveHLH/p/15927650.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15791151.html
Java NIO Channel 使用 - detectiveHLH
Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel FileChannel: 主要用于文件的读写,可以从磁盘上读取文件,也可以向磁盘上写入文件。 SocketChannel:用于
2022-01-12T01:35:00Z
2022-01-12T01:35:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel FileChannel: 主要用于文件的读写,可以从磁盘上读取文件,也可以向磁盘上写入文件。 SocketChannel:用于 <a href="https://www.cnblogs.com/detectiveHLH/p/15791151.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15765528.html
图解四种 IO 模型 - detectiveHLH
最近越来越认为,在讲解技术相关问题时,大白话固然很重要,通俗易懂,让人有想读下去的欲望。但几乎所有的事,都有两面性,在看到其带来好处时,不妨想想是否也引入了不好的地方。 例如在博客中,过于大白话的语言的确会让你阅读起来更加顺畅,也更容易理解。但这都是其他人理解,已经咀嚼过了的,人家是已经完全理解了,
2022-01-05T01:44:00Z
2022-01-05T01:44:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】最近越来越认为,在讲解技术相关问题时,大白话固然很重要,通俗易懂,让人有想读下去的欲望。但几乎所有的事,都有两面性,在看到其带来好处时,不妨想想是否也引入了不好的地方。 例如在博客中,过于大白话的语言的确会让你阅读起来更加顺畅,也更容易理解。但这都是其他人理解,已经咀嚼过了的,人家是已经完全理解了, <a href="https://www.cnblogs.com/detectiveHLH/p/15765528.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15743669.html
玩转 ByteBuffer - detectiveHLH
为什么要讲 Buffer 首先为什么一个小小的 Buffer 我们需要单独拎出来聊?或者说,Buffer 具体是在哪些地方被用到的呢? 例如,我们从磁盘上读取一个文件,并不是直接就从磁盘加载到内存中,而是首先会将磁盘中的数据复制到内核缓冲区中,然后再将数据从内核缓冲区复制到用户缓冲区内,在图里看起来
2021-12-29T01:40:00Z
2021-12-29T01:40:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】为什么要讲 Buffer 首先为什么一个小小的 Buffer 我们需要单独拎出来聊?或者说,Buffer 具体是在哪些地方被用到的呢? 例如,我们从磁盘上读取一个文件,并不是直接就从磁盘加载到内存中,而是首先会将磁盘中的数据复制到内核缓冲区中,然后再将数据从内核缓冲区复制到用户缓冲区内,在图里看起来 <a href="https://www.cnblogs.com/detectiveHLH/p/15743669.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15709676.html
用户态和内核态的区别是啥 - detectiveHLH
这篇文章的深度不会太深,重点就是了解一下用户态和内核态的区别就 OK 了。 先给不了解内核态、用户态的简单介绍一下,我们在什么时候会提到这两个概念。 例如我们的应用程序需要从磁盘读取某个文件的数据,此时并不是直接从磁盘加载到应用内存中,而是: 先将数据从「磁盘」复制到「内核 Buffer」再将数据从
2021-12-20T02:05:00Z
2021-12-20T02:05:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】这篇文章的深度不会太深,重点就是了解一下用户态和内核态的区别就 OK 了。 先给不了解内核态、用户态的简单介绍一下,我们在什么时候会提到这两个概念。 例如我们的应用程序需要从磁盘读取某个文件的数据,此时并不是直接从磁盘加载到应用内存中,而是: 先将数据从「磁盘」复制到「内核 Buffer」再将数据从 <a href="https://www.cnblogs.com/detectiveHLH/p/15709676.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15590220.html
关于 RocketMQ ClientID 相同引发的消息堆积的问题 - detectiveHLH
首先,造成这个问题的 BUG RocketMQ 官方已经在 3月16号 的这个提交中修复了,这里只是探讨一下在修复之前造成问题的具体细节,更多的上下文可以参考我之前写的 《RocketMQ Consumer 启动时都干了些啥?》 ,这篇文章讲解了 RocketMQ 的 Consumer 启动之后都做
2021-11-23T07:38:00Z
2021-11-23T07:38:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】首先,造成这个问题的 BUG RocketMQ 官方已经在 3月16号 的这个提交中修复了,这里只是探讨一下在修复之前造成问题的具体细节,更多的上下文可以参考我之前写的 《RocketMQ Consumer 启动时都干了些啥?》 ,这篇文章讲解了 RocketMQ 的 Consumer 启动之后都做 <a href="https://www.cnblogs.com/detectiveHLH/p/15590220.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15507639.html
RocketMQ Consumer 启动时都干了些啥? - detectiveHLH
可能我们对 RocketMQ 的消费者认知乍一想很简单,就是一个拿来消费消息的客户端而已,你只需要指定对应的 Topic 和 ConsumerGroup,剩下的就是只需要: 接收消息处理消息 就完事了。 简略消费模型 当然,可能在实际业务场景下,确实是这样。但是如果我们不清楚 Consumer 启动
2021-11-04T04:26:00Z
2021-11-04T04:26:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】可能我们对 RocketMQ 的消费者认知乍一想很简单,就是一个拿来消费消息的客户端而已,你只需要指定对应的 Topic 和 ConsumerGroup,剩下的就是只需要: 接收消息处理消息 就完事了。 简略消费模型 当然,可能在实际业务场景下,确实是这样。但是如果我们不清楚 Consumer 启动 <a href="https://www.cnblogs.com/detectiveHLH/p/15507639.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15378549.html
请求数据包从发送到接收,都经历什么? - detectiveHLH
我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。 看到三次握手
2021-10-08T02:24:00Z
2021-10-08T02:24:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。 看到三次握手 <a href="https://www.cnblogs.com/detectiveHLH/p/15378549.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15213382.html
你的域名是如何变成 IP 地址的? - detectiveHLH
我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 可能大家都知道或者被问过一个问题,那就是很经典的「从浏览器输入 URL 再到页面展示,都发生了什么」。这个问题虽然简单,但是真的能够从回答的各种细节上看出不同人之间的水平差距。 这篇文章主要是聊一聊输入 URL
2021-09-01T02:00:00Z
2021-09-01T02:00:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 可能大家都知道或者被问过一个问题,那就是很经典的「从浏览器输入 URL 再到页面展示,都发生了什么」。这个问题虽然简单,但是真的能够从回答的各种细节上看出不同人之间的水平差距。 这篇文章主要是聊一聊输入 URL <a href="https://www.cnblogs.com/detectiveHLH/p/15213382.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15179259.html
Base64 原理 - detectiveHLH
Base64 Base64 是什么?是将字节流转换成可打印字符、将可打印字符转换为字节流的一种算法。Base64 使用 64 个可打印字符来表示转换后的数据。 准确的来说,Base64 不算是一种加、解密的算法,它是一种编码、解码的算法。这也是为什么我的用词是编码、解码,而不是加密、解密。 编码原理
2021-08-24T02:43:00Z
2021-08-24T02:43:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】Base64 Base64 是什么?是将字节流转换成可打印字符、将可打印字符转换为字节流的一种算法。Base64 使用 64 个可打印字符来表示转换后的数据。 准确的来说,Base64 不算是一种加、解密的算法,它是一种编码、解码的算法。这也是为什么我的用词是编码、解码,而不是加密、解密。 编码原理 <a href="https://www.cnblogs.com/detectiveHLH/p/15179259.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15155696.html
MySQL 不完全入门指南 - detectiveHLH
由于 MySQL 的整个体系太过于庞大,文章的篇幅有限,不能够完全的覆盖所有的方面。所以我会尽可能的从更加贴进我们日常使用的方式来进行解释。 小白眼中的 MySQL 首先,对于我们来说,MySQL 是个啥?我们从一个最简单的例子来回顾一下。 这可能就是最开始大家认知中的 MySQL。那 MySQL
2021-08-18T02:30:00Z
2021-08-18T02:30:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】由于 MySQL 的整个体系太过于庞大,文章的篇幅有限,不能够完全的覆盖所有的方面。所以我会尽可能的从更加贴进我们日常使用的方式来进行解释。 小白眼中的 MySQL 首先,对于我们来说,MySQL 是个啥?我们从一个最简单的例子来回顾一下。 这可能就是最开始大家认知中的 MySQL。那 MySQL <a href="https://www.cnblogs.com/detectiveHLH/p/15155696.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15126923.html
MySQL 中删除的数据都去哪儿了? - detectiveHLH
不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情况下,如果事务A删除了 id=1 的数据,同时事务B又去读取 id=1 的数据,如果这条数据真的被删
2021-08-11T06:04:00Z
2021-08-11T06:04:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情况下,如果事务A删除了 id=1 的数据,同时事务B又去读取 id=1 的数据,如果这条数据真的被删 <a href="https://www.cnblogs.com/detectiveHLH/p/15126923.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15088641.html
MySQL 到底是如何做到多版本并发的? - detectiveHLH
之前的文章简单的介绍了 MySQL 的事务隔离级别,它们分别是:读未提交、读已提交、可重复读、串行化。这篇文章我们就来探索一下 MySQL 事务隔离级别的底层原理。 本篇文章针对 InnoDB 存储引擎 多版本并发控制 我们知道,读未提交会造成脏读、幻读、不可重复读,读已提交会造成幻读、不可重复读,
2021-08-02T01:36:00Z
2021-08-02T01:36:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】之前的文章简单的介绍了 MySQL 的事务隔离级别,它们分别是:读未提交、读已提交、可重复读、串行化。这篇文章我们就来探索一下 MySQL 事务隔离级别的底层原理。 本篇文章针对 InnoDB 存储引擎 多版本并发控制 我们知道,读未提交会造成脏读、幻读、不可重复读,读已提交会造成幻读、不可重复读, <a href="https://www.cnblogs.com/detectiveHLH/p/15088641.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15060422.html
啥是 MySQL 事务隔离级别? - detectiveHLH
之前发过一篇文章,简单了解 MySQL 中相关的锁,里面提到了,如果我们使用的 MySQL 存储引擎为 InnoDB ,并且其事务隔离级别是 RR 可重复读的话,是可以避免幻读的。 但是没想到,都 1202 年了都还有人杠,说 InnoDB 的 RR 隔离级别下会出现幻读,只能依靠 gap 和 ne
2021-07-26T02:45:00Z
2021-07-26T02:45:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】之前发过一篇文章,简单了解 MySQL 中相关的锁,里面提到了,如果我们使用的 MySQL 存储引擎为 InnoDB ,并且其事务隔离级别是 RR 可重复读的话,是可以避免幻读的。 但是没想到,都 1202 年了都还有人杠,说 InnoDB 的 RR 隔离级别下会出现幻读,只能依靠 gap 和 ne <a href="https://www.cnblogs.com/detectiveHLH/p/15060422.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/detectiveHLH/p/15033621.html
ArrayList 从源码角度剖析底层原理 - detectiveHLH
本篇文章已放到 Github github.com/sh-blog 仓库中,里面对我写的所有文章都做了分类,更加方便阅读。同时也会发布一些职位信息,持续更新中,欢迎 Star 对于 ArrayList 来说,我们平常用的最多的方法应该就是 add 和 remove 了,本文就主要通过这两个基础的方法
2021-07-20T02:28:00Z
2021-07-20T02:28:00Z
detectiveHLH
https://www.cnblogs.com/detectiveHLH/
【摘要】本篇文章已放到 Github github.com/sh-blog 仓库中,里面对我写的所有文章都做了分类,更加方便阅读。同时也会发布一些职位信息,持续更新中,欢迎 Star 对于 ArrayList 来说,我们平常用的最多的方法应该就是 add 和 remove 了,本文就主要通过这两个基础的方法 <a href="https://www.cnblogs.com/detectiveHLH/p/15033621.html" target="_blank">阅读全文</a>