跳至主要內容
SH的全栈笔记

SH的全栈笔记

Nothing is true, everything is permitted.

RocketMQ
生活场景驱动,由浅入深带你搞懂 RocketMQ
HTTPS 是如何运作的?它解决了什么问题?

HTTPS 是如何运作的?它解决了什么问题?

首先,HTTPS 并不是一个新的协议,而是 HTTP + SSL/TLS,即 SSL(Security Socket Layer)和 TLS(Transport Layer Security) 的缩写。但其实作为 SSL 的继任者,TLS 已经完全替代了 SSL,只是大概还是习惯使用 SSL 这个名词,为了严谨,后续都会继续使用 TLS。


LeonSH...大约 9 分钟计算机网络HTTP
网络杂谈

网络杂谈

互联网是什么相信不用在这里赘述,大家平时“网上冲浪”都离不开它。本篇文章中我们就来翻译翻译,什么 XX 的叫 XX 的网络。

网络的概念

对于网络,我们可能听过非常多的名词,比如因特网、万维网、互联网。三者的关系其实为:

互联网 > 因特网 > 万维网

那么一个简单的网络看起来会是这样:


LeonSH...大约 10 分钟计算机网络TCP/IP
搜索引擎告诉你如何“论资排辈”

搜索引擎告诉你如何“论资排辈”

在前文「搜索引擎告诉你如何大海捞针」中,我们简要的描述了搜索引擎是如何从成百上千亿的网站中,快速的搜索到我们要找的内容。但能够搜索到结果只是搜索流程中的一部分,还有另一个很重要组成部分 —— 排序。

现在我们随便搜索一些数据可能都会找到几十、甚至上百万条结果,如果是较为热门的内容甚至会有上千万条。那如何从这上千万个网页中,找到用户最想要的、或者说是跟用户搜索的关键词最相关的网页呢?这就是我们本章要探索的内容。


LeonSH...大约 7 分钟后端搜索引擎
搜索引擎告诉你如何大海捞针

搜索引擎告诉你如何大海捞针

如果问你这个问题:

像搜索引擎这样的全文搜索底层原理到底是什么?

对于有经验的人来说,很轻松的就能回答这个问题。因为现代的搜索引擎基本都是采用倒排索引来实现的。那什么是倒排索引呢?

建立倒排索引

有的同学看到「倒排」两个字可能有点慌。

我知道你很急,但你先别急(bushi)

这个不是「倒排需求」的倒排,而是「倒排索引」的倒排。假设我们现在有 3 个网页,包含了如下很简单的内容:


LeonSH...大约 4 分钟后端搜索引擎
Kafka 杂谈

Kafka 杂谈

开始之前

首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。

概览

什么是 Kafka?

这里先给出结论,我不太希望在解释概念 X 的时候,说到「为了了解 X,我们需要先了解一下 Y」,阅读的人思绪会被迁到另一个地方。既然小标题里说了要解释什么是 Kafka,那么我们就只说什么是 Kafka。


LeonSH...大约 11 分钟消息队列Kafka
磁盘原理简要分析

磁盘原理简要分析

磁盘这玩意儿,即使不作为一个开发人员我们也会经常跟它打交道。比如你家里的台式机,或者拿来办公的电脑,再比如你装个操作系统,会涉及到对磁盘进行分区。

而作为开发人员,自然更加需要关注磁盘。

平时你开发的代码会暂存在磁盘上;开发中用的最多的数据库 MySQL,其数据是持久化到磁盘中的;Redis 的持久化数据是落到磁盘的;Zookeeper 内存中的数据、事务日志、快照会持久化到磁盘;像 RocketMQ 这种消息队列也会将收到的 Message 持久化到磁盘,Kafka 当然也不例外;


LeonSH...大约 9 分钟操作系统磁盘
简单了解 TiDB 架构

简单了解 TiDB 架构

一、前言

大家如果看过我之前发过的文章就知道,我写过很多篇关于 MySQL 的文章,从我的 Github 汇总仓库 中可以看出来:


LeonSH...大约 12 分钟数据库TiDB
MySQL 表数据多久刷一次盘

MySQL 表数据多久刷一次盘

前言

事情是这样的,在某乎的邀请回答中看到了这个问题:

-

然后当时我没多想就啪一下写下来这样的答案:

这个其实要通过 MySQL 后台线程来刷的,在 Buffer Pool 中被修改的过的 Page(页)都会被标记成脏页,放到一个链表(Flush 链表)里。

然后 MySQL 通过启动后台线程,在满足条件时将 Flush 链表中的脏页刷入磁盘。

满足的条件是:脏页的数量达到了 Buffer Pool 中页数量的 10%,当然 10% 这个值是可变的,通过配置项 innodb_max_dirty_pages_pct_lwm 来配置的,其默认值为 10%,并且这个值也必须小于另一个配置 innodb_max_dirty_pages_pct 的值(90%)。

至于启多少个线程,则是由另一个变量 innodb_page_cleaners 来控制的,默认是 4.一般都不会去改这个。

大概就是这样。


LeonSH...大约 4 分钟数据库MySQL
详细了解 Synchronized 锁升级过程

详细了解 Synchronized 锁升级过程

前言

首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把

可以用来干嘛?锁,当然当然是用于线程间的同步,以及保护临界区内的资源。我们知道,锁是个非常笼统的概念,像生活中有指纹锁、密码锁等等多个种类,那 synchronized 代表的锁具体是把什么锁呢?

答案是—— Java 内置锁。在 Java 中,每个对象中都隐藏着一把锁,而 synchronized 关键字就是激活这把隐式锁的把手(开关)。


LeonSH...大约 8 分钟JavaSynchronized
Java NIO Selector 的使用

Java NIO Selector 的使用

之前的文章已经把 Java 中 NIO 的 Buffer、Channel 讲解完了,不太了解的可以先回过头去看看。这篇文章我们就来聊聊 Selector —— 选择器。

首先 Selector 是用来干嘛的呢?不熟悉这个概念的话我们其实可以这么理解:

selector
selector

LeonSH...大约 8 分钟JavaSelectorNIO
2
3
4
5
...
7