You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 导读 | 三步走策略,轻松搞定检索!
你好我是陈东。欢迎来到《检索技术核心20讲》。
今天是课程导读,在正式开始学习检索技术之前,我想和你先聊聊这个专栏的学习方法,目的就是让我们后面的学习能达到事半功倍的效果。
想要高效地学习检索,我的经验是咱得先弄清楚到底都要学哪些内容,给自己一张知识地图,才能做到心中有数。
这里,我根据十多年的工作经验,梳理了和我们的工作有较强相关性的检索知识,并整理出了一张知识全景图,你可以看一看。
![](https://static001.geekbang.org/resource/image/e5/34/e52a8e884afb93930bffec212a97df34.jpg)
在这张图中,我从基础到实际应用,将需要学习的检索技术分为了四个层级,我们按照从下往上的顺序依次来看。
第一层是**存储介质层**。因为检索效率的高低和数据存储的方式是紧密联系的,所以,存储介质的特性是我们需要学习的基础知识。
第二层是**数据结构与算法层**。提到“效率”,自然就离不开数据结构和算法。在遇到实际业务的时候,我们要知道如何利用每个数据结构和算法的特点,来提高检索效率。所以,这块内容我们必须要学得很扎实。
第三层是**检索专业知识层**。如果我们想实现工业界中的检索引擎,需要掌握这些检索技术。我把它们划分为两部分,分别是**工程架构和算法策略**。这些内容是我们解决常见业务问题的必备知识。
第四层是检索技术的**应用层**。检索技术在互联网中有许多应用场景,其中最常见的,有搜索引擎、广告引擎、以及推荐引擎。这些业务系统有相似的工程架构和算法部分,也分别有自己独特的业务处理环节。学习它们的实践方法,我们可以更全面、更深入地掌握检索技术。
你可能想说,这些内容看起来可真不少啊!其实,这张图已经是我精简后的了,如果你想要全面掌握检索技术,这张图里提到的每一个方向,你都可以非常深入地去学习。
这么一看,即使有了这张全景图,学习检索依然不容易。那如果想要高效学习,我们具体又该怎么做呢?我们需要有清晰的学习路径和科学、高效的学习方法,我把它们称为“三步走策略”。接下来,我就和你具体来聊一聊。
## 第一步:夯实基础
万丈高楼平地起。我们刚才说过,检索技术的底层基础知识,离不开数据结构和算法。在检索领域里最常用的基础数据结构和算法,主要有:数组、链表、位图、布隆过滤器、哈希表、二叉检索树、跳表、倒排索引。
因为检索技术本质上就是将数据从存储的地方高效取出的技术,而数据是以什么数据结构存储的,会直接影响到检索效率。所以,对于这些基础知识,我们要重点关注它们的存储特点和检索效率。从中,我们不仅可以学会在合适的场景使用合适的技术,还可以掌握检索的核心设计思想,从而在代码层面提高检索效率。
比如说数组和链表是最基础的数据结构。从存储特点上来说它们都属于线性结构。而从检索效率上来说在数据无序存储并且本身结构没有做任何优化的情况下数组和链表的检索效率是O(n)。那想要提高检索效率我们就需要结合它们自身的特点将二分查找的思想加入进去将检索效率提升到O(log n)。这其中就体现了检索的核心设计思想:合理组织数据,尽可能快速减少查询范围,提升检索效率。在具体写代码的时候,如果我们能应用这样的设计思想,那检索效率肯定会有大幅提升。
## 第二步:在实践中将技术落地
多年的工作经验告诉我,工业界的技术落地和基础知识之间还是有很大差距的。解决实际问题的能力,往往是衡量一个工程师水平的标尺。如果我们想加强自己的技术经验积累,除了打好基础,更重要的是要从实践中学习工业界的解决方案。
在开篇词中我们说过,检索技术是数据库、搜索引擎、广告引擎和推荐引擎等热门业务系统的底层技术。所以,这些场景中的实际业务需求,都可以作为我们学习检索技术的“题库”。在“解题”的过程中,我们要重点关注工业界中,针对不同场景的高效检索技术,和热门业务系统中检索架构的设计方案,以及它们各自的特殊处理环节。从中,我们不仅能学到对应的行业经验,还可以了解不同行业中检索架构特点,以此来解决工作中的实际检索难题。
比如说,“刚发布的文章为什么能被搜到”,这就是一个典型的检索实战题,它主要用到的知识就是索引更新。在工业界中实现索引更新的时候,为了追求更高的检索性能,我们一般不会直接对索引加锁,而是会利用“**双buffer机制”**来实现索引更新。但是像搜索引擎这样万亿级网页的索引规模无法直接使用“双buffer机制”来更新需要使用“**全量索引结合增量索引**”方案来更新索引。
再比如说当我们要在系统中使用数据库来进行存储和检索时那么是使用关系型数据库好呢还是选择NoSQL好呢这就需要我们对于数据库的检索技术B+树和NoSQL中的LSM树有一定的了解。比如在数据被频繁写入、较少查找的日志系统和监控系统中我们更应该使用NoSQL型数据库。
知道了学习的重点在哪儿,我们就可以很容易地梳理出高效学习的路径了。本专栏就是从这样的角度出发,借助三个模块,帮助你建立全面的检索知识体系。
![](https://static001.geekbang.org/resource/image/9d/83/9d851057e4e96674c7d65f3a30968083.jpg)
## 第三步:搭配高效学习攻略
那除了高效的学习路径我也有一些学习方法想分享给你。我一共总结了3条攻略希望它们能够帮助你更轻松、高效地学习这个专栏。
### 1.多思考、多提问,善用“理解记忆法”
平时,我们想要记住一篇文章中新学的知识点的时候,很多人会说:多读几遍,你就能记住这些知识点了。但事实证明,任何不经过深刻理解的知识点都是“留不住”的,过一阵子我们就会把它忘了。即使我们短时间内没有忘记,“记住”也不等于“学会”。
那对于我们专栏来说,在面对复杂的检索知识的时候,我更建议你通过理解记忆的方式进行学习。具体的方式有啥呢?我比较推荐问答的方式。也就是说,在学习每个知识点的时候,你可以一直问自己几个问题,比如,“这个知识点要解决什么问题?”“如果不用这个方法还有其他的解决方案吗?”“使用这个方法有副作用或者限制吗?”。
慢慢地,你会发现,这种问自己问题的学习方式,不仅能帮你“学会”知识,更重要的是,它还能训练你的思考能力和理解能力。当你在学别的知识的时候,依然可以用同样的方法。
### 2.建立自己的知识体系
学会了怎么“记”还不够,因为,随着我们学习的不断深入,知识点会越来越多,而不成体系的学习,往往会事倍而功半。所以,我们需要把它们有效地组织起来,有体系地学习。那么问题来了,我们该如何建立自己的知识体系呢?一般来说,我会用这么两个小技巧:**对比和拆解**。
在学习一个新知识点的时候,我们可以把它和之前学过的知识点**对比**,看看它们之间的相同点和不同点,为新、旧知识之间建立联系。
那如果这个新知识点是一个比较复杂的知识点,我们可以试着把它**拆解**成多个小知识点,拆解之后,我们依然可以用对比的方法,让这些小知识点和旧知识建立联系。
借助这两个小技巧,你就能将零散的知识点关联起来,从而形成一个自己的知识体系了。
### 3.有耐心、反复学、多交流
我相信,通过前面这些方法你已经建立起了学习的信心。那这里,我就要给你泼一盆“冷水”了。在刚开始学习检索的时候,就算已经使用了前面的学习方法,我们还是会遇到一种情况:不能完全掌握学到的内容。
不过,你不用担心,这种情况再自然不过了。作为一名“检索老兵”,我想告诉你,实用的学习方法虽然能保证我们少走弯路,但想要真正掌握一项技能,反复学习是非常重要的。尤其是在新知识点比较多的时候,反复学习就更为重要了。
在反复学习的过程中,你需要多看、多听、多思考、多对比。一方面,这能帮助你加强对检索知识的理解;另一方面,在重复学习的过程中,你也能更好地将前后的知识进行梳理,从而将新知识点融入自己的知识体系中。在这个过程中,你还可以多和同事、同行交流、讨论,弥补自己的知识盲点,做到全面地理解知识。
## 重点回顾
说了这么多,我已经把学习这个专栏的高手攻略,全部分享给你了。但我还是想再和你强调一些重点内容,希望能帮助你应用到自己的学习和工作中。
首先我们可以从4个层级来学习检索技术分别是存储介质层、数据结构和算法层、检索专业知识层、以及应用层。这里面的内容很多要熟练掌握不是一件容易的事情。因此我们需要有科学、高效的学习方法以及清晰的学习路径。那我也和你分享了学习这个专栏的一些方法。总结来说就是“三步走策略”夯实基础、在实践中将技术落地最后搭配高效的学习攻略。
方向已经指明了,路线也清晰了,接下来,我们就可以开始学习了。那最后呢,我还有一句话想要送给你:道阻且长,行则将至,我们一起努力!
## 课堂讨论
在我今天给到的检索技术的两张图中,你对其中哪部分知识最感兴趣呢?另外,除了我今天和你分享的学习方法,你也可以在留言区说一说,对于这个专栏,你准备怎么学?