摘要: 欢迎 wx 关注 SH的全栈笔记 磁盘这玩意儿,即使不作为一个开发人员我们也会经常跟它打交道。比如你家里的台式机,或者拿来办公的电脑,再比如你装个操作系统,会涉及到对磁盘进行分区。 而作为开发人员,自然更加需要关注磁盘。 平时你开发的代码会暂存在磁盘上;开发中用的最多的数据库 MySQL,其数据是持 阅读全文
posted @ 2022-06-15 11:29 detectiveHLH 阅读(760) 评论(1) 推荐(3) 编辑
摘要: 一、前言 大家如果看过我之前发过的文章就知道,我写过很多篇关于 MySQL 的文章,从我的 Github 汇总仓库 中可以看出来: 可能还不是很全,算是对 MySQL 有一个浅显但较为全面的理解。之前跟朋友聊天也会聊到,基于现有的微服务架构,绝大多数的性能瓶颈都不在服务,因为我们的服务是可以横向扩展 阅读全文
posted @ 2022-04-25 10:16 detectiveHLH 阅读(905) 评论(0) 推荐(0) 编辑
摘要: 前言 事情是这样的,在某乎的邀请回答中看到了这个问题: - 然后当时我没多想就啪一下写下来这样的答案: 这个其实要通过 MySQL 后台线程来刷的,在 Buffer Pool 中被修改的过的 Page(页)都会被标记成脏页,放到一个链表(Flush 链表)里。 然后 MySQL 通过启动后台线程,在 阅读全文
posted @ 2022-04-07 09:47 detectiveHLH 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 前言 首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把锁。 可以用来干嘛?锁,当然当然是用于线程间的同步,以及保护临界区内的资源。我们知道,锁是个非常笼统的概念,像生活中有指纹锁、密码锁等等多个种类,那 synchronized 代表的锁具体是把什么锁呢? 答 阅读全文
posted @ 2022-03-08 09:28 detectiveHLH 阅读(1246) 评论(0) 推荐(1) 编辑
摘要: 之前的文章已经把 Java 中 NIO 的 Buffer、Channel 讲解完了,不太了解的可以先回过头去看看。这篇文章我们就来聊聊 Selector —— 选择器。 首先 Selector 是用来干嘛的呢?不熟悉这个概念的话我们其实可以这么理解: selector 把它当作 SQL 中的 sel 阅读全文
posted @ 2022-02-23 15:29 detectiveHLH 阅读(625) 评论(0) 推荐(0) 编辑
摘要: Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel FileChannel: 主要用于文件的读写,可以从磁盘上读取文件,也可以向磁盘上写入文件。 SocketChannel:用于 阅读全文
posted @ 2022-01-12 09:35 detectiveHLH 阅读(362) 评论(2) 推荐(2) 编辑
摘要: 最近越来越认为,在讲解技术相关问题时,大白话固然很重要,通俗易懂,让人有想读下去的欲望。但几乎所有的事,都有两面性,在看到其带来好处时,不妨想想是否也引入了不好的地方。 例如在博客中,过于大白话的语言的确会让你阅读起来更加顺畅,也更容易理解。但这都是其他人理解,已经咀嚼过了的,人家是已经完全理解了, 阅读全文
posted @ 2022-01-05 09:44 detectiveHLH 阅读(930) 评论(1) 推荐(2) 编辑
摘要: 为什么要讲 Buffer 首先为什么一个小小的 Buffer 我们需要单独拎出来聊?或者说,Buffer 具体是在哪些地方被用到的呢? 例如,我们从磁盘上读取一个文件,并不是直接就从磁盘加载到内存中,而是首先会将磁盘中的数据复制到内核缓冲区中,然后再将数据从内核缓冲区复制到用户缓冲区内,在图里看起来 阅读全文
posted @ 2021-12-29 09:40 detectiveHLH 阅读(507) 评论(2) 推荐(0) 编辑
摘要: 这篇文章的深度不会太深,重点就是了解一下用户态和内核态的区别就 OK 了。 先给不了解内核态、用户态的简单介绍一下,我们在什么时候会提到这两个概念。 例如我们的应用程序需要从磁盘读取某个文件的数据,此时并不是直接从磁盘加载到应用内存中,而是: 先将数据从「磁盘」复制到「内核 Buffer」再将数据从 阅读全文
posted @ 2021-12-20 10:05 detectiveHLH 阅读(1259) 评论(0) 推荐(3) 编辑
摘要: 首先,造成这个问题的 BUG RocketMQ 官方已经在 3月16号 的这个提交中修复了,这里只是探讨一下在修复之前造成问题的具体细节,更多的上下文可以参考我之前写的 《RocketMQ Consumer 启动时都干了些啥?》 ,这篇文章讲解了 RocketMQ 的 Consumer 启动之后都做 阅读全文
posted @ 2021-11-23 15:38 detectiveHLH 阅读(1158) 评论(0) 推荐(1) 编辑
摘要: 可能我们对 RocketMQ 的消费者认知乍一想很简单,就是一个拿来消费消息的客户端而已,你只需要指定对应的 Topic 和 ConsumerGroup,剩下的就是只需要: 接收消息处理消息 就完事了。 简略消费模型 当然,可能在实际业务场景下,确实是这样。但是如果我们不清楚 Consumer 启动 阅读全文
posted @ 2021-11-04 12:26 detectiveHLH 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。 看到三次握手 阅读全文
posted @ 2021-10-08 10:24 detectiveHLH 阅读(690) 评论(1) 推荐(0) 编辑
摘要: 你的域名是如何变成 IP 地址的? 我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 可能大家都知道或者被问过一个问题,那就是很经典的「从浏览器输入 URL 再到页面展示,都发生了什么」。这个问题虽然简单,但是真的能够从回答的各种细节上看出不同人之间的水平差距。 这篇文章主要是聊一聊输入 URL 阅读全文
posted @ 2021-09-01 10:00 detectiveHLH 阅读(709) 评论(0) 推荐(2) 编辑
摘要: Base64 Base64 是什么?是将字节流转换成可打印字符、将可打印字符转换为字节流的一种算法。Base64 使用 64 个可打印字符来表示转换后的数据。 准确的来说,Base64 不算是一种加、解密的算法,它是一种编码、解码的算法。这也是为什么我的用词是编码、解码,而不是加密、解密。 编码原理 阅读全文
posted @ 2021-08-24 10:43 detectiveHLH 阅读(602) 评论(5) 推荐(3) 编辑
摘要: 由于 MySQL 的整个体系太过于庞大,文章的篇幅有限,不能够完全的覆盖所有的方面。所以我会尽可能的从更加贴进我们日常使用的方式来进行解释。 小白眼中的 MySQL 首先,对于我们来说,MySQL 是个啥?我们从一个最简单的例子来回顾一下。 这可能就是最开始大家认知中的 MySQL。那 MySQL 阅读全文
posted @ 2021-08-18 10:30 detectiveHLH 阅读(921) 评论(1) 推荐(6) 编辑
摘要: 不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情况下,如果事务A删除了 id=1 的数据,同时事务B又去读取 id=1 的数据,如果这条数据真的被删 阅读全文
posted @ 2021-08-11 14:04 detectiveHLH 阅读(1066) 评论(0) 推荐(5) 编辑
摘要: 之前发过一篇文章,简单了解 MySQL 中相关的锁,里面提到了,如果我们使用的 MySQL 存储引擎为 InnoDB ,并且其事务隔离级别是 RR 可重复读的话,是可以避免幻读的。 但是没想到,都 1202 年了都还有人杠,说 InnoDB 的 RR 隔离级别下会出现幻读,只能依靠 gap 和 ne 阅读全文
posted @ 2021-07-26 10:45 detectiveHLH 阅读(582) 评论(0) 推荐(2) 编辑
摘要: 之前写了一些关于 MySQL 的 InnoDB 存储引擎的文章,里面好几次都提到了页(Pages)这个概念,但是都只是简要的提了一下。例如之前在聊 InnoDB内存结构 时提到过,但当时的重点是内存架构,就没有展开深入。 我发现有好几次都需要提到页,那我就正好拿一篇来详细的讲讲 InnoDB 中的页 阅读全文
posted @ 2021-06-21 09:57 detectiveHLH 阅读(1815) 评论(0) 推荐(2) 编辑
摘要: 这几天瞎逛,不知道在哪里瞟到了缓存的双写,就突然想起来这块虽然简单,但是细节上还是有足够多我们可以去关注的点。这篇文章就来详细聊聊双写一致性。 首先我们知道,现在将高速缓存应用于业务当中已经十分常见了,甚至可能跟数据库的频率不相上下。你的用户量如果上去了,直接将一个裸的 MySQL 去扛住所有压力明 阅读全文
posted @ 2021-06-11 09:28 detectiveHLH 阅读(1023) 评论(2) 推荐(1) 编辑
摘要: 简单了解索引 首先,索引(Index)是什么?如果我直接告诉你索引是数据库管理系统中的一个有序的数据结构,你可能会有点懵逼。 为了避免这种情况,我打算举几个例子来帮助你更容易的认识索引。 我们查询字典的时候可以根据字的部首、笔画来查找到对应的字,这样可以快速的找到对应的字所在页,在字典开头那玩意就叫 阅读全文
posted @ 2021-05-17 10:03 detectiveHLH 阅读(729) 评论(0) 推荐(4) 编辑
摘要: 开始之前 首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。 概览 什么是 Kafka? 这里先给出结论,我不太希望在解释概念 X 的时候,说到「为了了 阅读全文
posted @ 2023-05-26 10:53 detectiveHLH 阅读(273) 评论(0) 推荐(0) 编辑