HTTPS 是如何运作的?它解决了什么问题?
首先,HTTPS 并不是一个新的协议,而是 HTTP + SSL/TLS,即 SSL(Security Socket Layer)和 TLS(Transport Layer Security) 的缩写。但其实作为 SSL 的继任者,TLS 已经完全替代了 SSL,只是大概还是习惯使用 SSL 这个名词,为了严谨,后续都会继续使用 TLS。
Nothing is true, everything is permitted.
首先,HTTPS 并不是一个新的协议,而是 HTTP + SSL/TLS,即 SSL(Security Socket Layer)和 TLS(Transport Layer Security) 的缩写。但其实作为 SSL 的继任者,TLS 已经完全替代了 SSL,只是大概还是习惯使用 SSL 这个名词,为了严谨,后续都会继续使用 TLS。
互联网是什么相信不用在这里赘述,大家平时“网上冲浪”都离不开它。本篇文章中我们就来翻译翻译,什么 XX 的叫 XX 的网络。
对于网络,我们可能听过非常多的名词,比如因特网、万维网、互联网。三者的关系其实为:
互联网 > 因特网 > 万维网
那么一个简单的网络看起来会是这样:
在前文「搜索引擎告诉你如何大海捞针」中,我们简要的描述了搜索引擎是如何从成百上千亿的网站中,快速的搜索到我们要找的内容。但能够搜索到结果只是搜索流程中的一部分,还有另一个很重要组成部分 —— 排序。
现在我们随便搜索一些数据可能都会找到几十、甚至上百万条结果,如果是较为热门的内容甚至会有上千万条。那如何从这上千万个网页中,找到用户最想要的、或者说是跟用户搜索的关键词最相关的网页呢?这就是我们本章要探索的内容。
如果问你这个问题:
像搜索引擎这样的全文搜索底层原理到底是什么?
对于有经验的人来说,很轻松的就能回答这个问题。因为现代的搜索引擎基本都是采用倒排索引来实现的。那什么是倒排索引呢?
有的同学看到「倒排」两个字可能有点慌。
我知道你很急,但你先别急(bushi)
这个不是「倒排需求」的倒排,而是「倒排索引」的倒排。假设我们现在有 3 个网页,包含了如下很简单的内容:
首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解 Kafka。
这里先给出结论,我不太希望在解释概念 X 的时候,说到「为了了解 X,我们需要先了解一下 Y」,阅读的人思绪会被迁到另一个地方。既然小标题里说了要解释什么是 Kafka,那么我们就只说什么是 Kafka。
磁盘这玩意儿,即使不作为一个开发人员我们也会经常跟它打交道。比如你家里的台式机,或者拿来办公的电脑,再比如你装个操作系统,会涉及到对磁盘进行分区。
而作为开发人员,自然更加需要关注磁盘。
平时你开发的代码会暂存在磁盘上;开发中用的最多的数据库 MySQL,其数据是持久化到磁盘中的;Redis 的持久化数据是落到磁盘的;Zookeeper 内存中的数据、事务日志、快照会持久化到磁盘;像 RocketMQ 这种消息队列也会将收到的 Message 持久化到磁盘,Kafka 当然也不例外;
事情是这样的,在某乎的邀请回答中看到了这个问题:
-
然后当时我没多想就啪一下写下来这样的答案:
这个其实要通过 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.一般都不会去改这个。
大概就是这样。
首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把锁。
可以用来干嘛?锁,当然当然是用于线程间的同步,以及保护临界区内的资源。我们知道,锁是个非常笼统的概念,像生活中有指纹锁、密码锁等等多个种类,那 synchronized 代表的锁具体是把什么锁呢?
答案是—— Java 内置锁。在 Java 中,每个对象中都隐藏着一把锁,而 synchronized 关键字就是激活这把隐式锁的把手(开关)。
之前的文章已经把 Java 中 NIO 的 Buffer、Channel 讲解完了,不太了解的可以先回过头去看看。这篇文章我们就来聊聊 Selector —— 选择器。
首先 Selector 是用来干嘛的呢?不熟悉这个概念的话我们其实可以这么理解: