mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2025-11-18 23:23:43 +08:00
mod
This commit is contained in:
86
极客时间专栏/检索技术核心20讲/课前必学/导读 | 三步走策略,轻松搞定检索!.md
Normal file
86
极客时间专栏/检索技术核心20讲/课前必学/导读 | 三步走策略,轻松搞定检索!.md
Normal file
@@ -0,0 +1,86 @@
|
||||
<audio id="audio" title="导读 | 三步走策略,轻松搞定检索!" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/45/87/45950fb886be4aa6912bfb0bd05d3f87.mp3"></audio>
|
||||
|
||||
你好,我是陈东。欢迎来到《检索技术核心20讲》。
|
||||
|
||||
今天是课程导读,在正式开始学习检索技术之前,我想和你先聊聊这个专栏的学习方法,目的就是让我们后面的学习能达到事半功倍的效果。
|
||||
|
||||
想要高效地学习检索,我的经验是咱得先弄清楚到底都要学哪些内容,给自己一张知识地图,才能做到心中有数。
|
||||
|
||||
这里,我根据十多年的工作经验,梳理了和我们的工作有较强相关性的检索知识,并整理出了一张知识全景图,你可以看一看。<br>
|
||||
<img src="https://static001.geekbang.org/resource/image/e5/34/e52a8e884afb93930bffec212a97df34.jpg" alt=""><br>
|
||||
在这张图中,我从基础到实际应用,将需要学习的检索技术分为了四个层级,我们按照从下往上的顺序依次来看。
|
||||
|
||||
第一层是**存储介质层**。因为检索效率的高低和数据存储的方式是紧密联系的,所以,存储介质的特性是我们需要学习的基础知识。
|
||||
|
||||
第二层是**数据结构与算法层**。提到“效率”,自然就离不开数据结构和算法。在遇到实际业务的时候,我们要知道如何利用每个数据结构和算法的特点,来提高检索效率。所以,这块内容我们必须要学得很扎实。
|
||||
|
||||
第三层是**检索专业知识层**。如果我们想实现工业界中的检索引擎,需要掌握这些检索技术。我把它们划分为两部分,分别是**工程架构和算法策略**。这些内容是我们解决常见业务问题的必备知识。
|
||||
|
||||
第四层是检索技术的**应用层**。检索技术在互联网中有许多应用场景,其中最常见的,有搜索引擎、广告引擎、以及推荐引擎。这些业务系统有相似的工程架构和算法部分,也分别有自己独特的业务处理环节。学习它们的实践方法,我们可以更全面、更深入地掌握检索技术。
|
||||
|
||||
你可能想说,这些内容看起来可真不少啊!其实,这张图已经是我精简后的了,如果你想要全面掌握检索技术,这张图里提到的每一个方向,你都可以非常深入地去学习。
|
||||
|
||||
这么一看,即使有了这张全景图,学习检索依然不容易。那如果想要高效学习,我们具体又该怎么做呢?我们需要有清晰的学习路径和科学、高效的学习方法,我把它们称为“三步走策略”。接下来,我就和你具体来聊一聊。
|
||||
|
||||
## 第一步:夯实基础
|
||||
|
||||
万丈高楼平地起。我们刚才说过,检索技术的底层基础知识,离不开数据结构和算法。在检索领域里最常用的基础数据结构和算法,主要有:数组、链表、位图、布隆过滤器、哈希表、二叉检索树、跳表、倒排索引。
|
||||
|
||||
因为检索技术本质上就是将数据从存储的地方高效取出的技术,而数据是以什么数据结构存储的,会直接影响到检索效率。所以,对于这些基础知识,我们要重点关注它们的存储特点和检索效率。从中,我们不仅可以学会在合适的场景使用合适的技术,还可以掌握检索的核心设计思想,从而在代码层面提高检索效率。
|
||||
|
||||
比如说,数组和链表是最基础的数据结构。从存储特点上来说,它们都属于线性结构。而从检索效率上来说,在数据无序存储,并且本身结构没有做任何优化的情况下,数组和链表的检索效率是O(n)。那想要提高检索效率,我们就需要结合它们自身的特点,将二分查找的思想加入进去,将检索效率提升到O(log n)。这其中就体现了检索的核心设计思想:合理组织数据,尽可能快速减少查询范围,提升检索效率。在具体写代码的时候,如果我们能应用这样的设计思想,那检索效率肯定会有大幅提升。
|
||||
|
||||
## 第二步:在实践中将技术落地
|
||||
|
||||
多年的工作经验告诉我,工业界的技术落地和基础知识之间还是有很大差距的。解决实际问题的能力,往往是衡量一个工程师水平的标尺。如果我们想加强自己的技术经验积累,除了打好基础,更重要的是要从实践中学习工业界的解决方案。
|
||||
|
||||
在开篇词中我们说过,检索技术是数据库、搜索引擎、广告引擎和推荐引擎等热门业务系统的底层技术。所以,这些场景中的实际业务需求,都可以作为我们学习检索技术的“题库”。在“解题”的过程中,我们要重点关注工业界中,针对不同场景的高效检索技术,和热门业务系统中检索架构的设计方案,以及它们各自的特殊处理环节。从中,我们不仅能学到对应的行业经验,还可以了解不同行业中检索架构特点,以此来解决工作中的实际检索难题。
|
||||
|
||||
比如说,“刚发布的文章为什么能被搜到”,这就是一个典型的检索实战题,它主要用到的知识就是索引更新。在工业界中实现索引更新的时候,为了追求更高的检索性能,我们一般不会直接对索引加锁,而是会利用“**双buffer机制”**来实现索引更新。但是像搜索引擎这样万亿级网页的索引规模,无法直接使用“双buffer机制”来更新,需要使用“**全量索引结合增量索引**”方案来更新索引。
|
||||
|
||||
再比如说,当我们要在系统中使用数据库来进行存储和检索时,那么是使用关系型数据库好呢?还是选择NoSQL好呢?这就需要我们对于数据库的检索技术B+树,和NoSQL中的LSM树有一定的了解。比如,在数据被频繁写入、较少查找的日志系统和监控系统中,我们更应该使用NoSQL型数据库。
|
||||
|
||||
知道了学习的重点在哪儿,我们就可以很容易地梳理出高效学习的路径了。本专栏就是从这样的角度出发,借助三个模块,帮助你建立全面的检索知识体系。<br>
|
||||
<img src="https://static001.geekbang.org/resource/image/9d/83/9d851057e4e96674c7d65f3a30968083.jpg" alt="">
|
||||
|
||||
## 第三步:搭配高效学习攻略
|
||||
|
||||
那除了高效的学习路径,我也有一些学习方法想分享给你。我一共总结了3条攻略,希望它们能够帮助你更轻松、高效地学习这个专栏。
|
||||
|
||||
### 1.多思考、多提问,善用“理解记忆法”
|
||||
|
||||
平时,我们想要记住一篇文章中新学的知识点的时候,很多人会说:多读几遍,你就能记住这些知识点了。但事实证明,任何不经过深刻理解的知识点都是“留不住”的,过一阵子我们就会把它忘了。即使我们短时间内没有忘记,“记住”也不等于“学会”。
|
||||
|
||||
那对于我们专栏来说,在面对复杂的检索知识的时候,我更建议你通过理解记忆的方式进行学习。具体的方式有啥呢?我比较推荐问答的方式。也就是说,在学习每个知识点的时候,你可以一直问自己几个问题,比如,“这个知识点要解决什么问题?”“如果不用这个方法还有其他的解决方案吗?”“使用这个方法有副作用或者限制吗?”。
|
||||
|
||||
慢慢地,你会发现,这种问自己问题的学习方式,不仅能帮你“学会”知识,更重要的是,它还能训练你的思考能力和理解能力。当你在学别的知识的时候,依然可以用同样的方法。
|
||||
|
||||
### 2.建立自己的知识体系
|
||||
|
||||
学会了怎么“记”还不够,因为,随着我们学习的不断深入,知识点会越来越多,而不成体系的学习,往往会事倍而功半。所以,我们需要把它们有效地组织起来,有体系地学习。那么问题来了,我们该如何建立自己的知识体系呢?一般来说,我会用这么两个小技巧:**对比和拆解**。
|
||||
|
||||
在学习一个新知识点的时候,我们可以把它和之前学过的知识点**对比**,看看它们之间的相同点和不同点,为新、旧知识之间建立联系。
|
||||
|
||||
那如果这个新知识点是一个比较复杂的知识点,我们可以试着把它**拆解**成多个小知识点,拆解之后,我们依然可以用对比的方法,让这些小知识点和旧知识建立联系。
|
||||
|
||||
借助这两个小技巧,你就能将零散的知识点关联起来,从而形成一个自己的知识体系了。
|
||||
|
||||
### 3.有耐心、反复学、多交流
|
||||
|
||||
我相信,通过前面这些方法你已经建立起了学习的信心。那这里,我就要给你泼一盆“冷水”了。在刚开始学习检索的时候,就算已经使用了前面的学习方法,我们还是会遇到一种情况:不能完全掌握学到的内容。
|
||||
|
||||
不过,你不用担心,这种情况再自然不过了。作为一名“检索老兵”,我想告诉你,实用的学习方法虽然能保证我们少走弯路,但想要真正掌握一项技能,反复学习是非常重要的。尤其是在新知识点比较多的时候,反复学习就更为重要了。
|
||||
|
||||
在反复学习的过程中,你需要多看、多听、多思考、多对比。一方面,这能帮助你加强对检索知识的理解;另一方面,在重复学习的过程中,你也能更好地将前后的知识进行梳理,从而将新知识点融入自己的知识体系中。在这个过程中,你还可以多和同事、同行交流、讨论,弥补自己的知识盲点,做到全面地理解知识。
|
||||
|
||||
## 重点回顾
|
||||
|
||||
说了这么多,我已经把学习这个专栏的高手攻略,全部分享给你了。但我还是想再和你强调一些重点内容,希望能帮助你应用到自己的学习和工作中。
|
||||
|
||||
首先,我们可以从4个层级来学习检索技术,分别是存储介质层、数据结构和算法层、检索专业知识层、以及应用层。这里面的内容很多,要熟练掌握不是一件容易的事情。因此,我们需要有科学、高效的学习方法,以及清晰的学习路径。那我也和你分享了学习这个专栏的一些方法。总结来说就是“三步走策略”:夯实基础、在实践中将技术落地,最后搭配高效的学习攻略。
|
||||
|
||||
方向已经指明了,路线也清晰了,接下来,我们就可以开始学习了。那最后呢,我还有一句话想要送给你:道阻且长,行则将至,我们一起努力!
|
||||
|
||||
## 课堂讨论
|
||||
|
||||
在我今天给到的检索技术的两张图中,你对其中哪部分知识最感兴趣呢?另外,除了我今天和你分享的学习方法,你也可以在留言区说一说,对于这个专栏,你准备怎么学?
|
||||
71
极客时间专栏/检索技术核心20讲/课前必学/开篇词 | 学会检索,快人一步!.md
Normal file
71
极客时间专栏/检索技术核心20讲/课前必学/开篇词 | 学会检索,快人一步!.md
Normal file
@@ -0,0 +1,71 @@
|
||||
<audio id="audio" title="开篇词 | 学会检索,快人一步!" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/e5/bf/e514a7ad15c87d12b17ab339232469bf.mp3"></audio>
|
||||
|
||||
你好,我是陈东,本硕都毕业于北京大学,目前是奇虎360商业产品事业部资深总监。
|
||||
|
||||
提起检索,我真有挺多话要说,因为这是我从学生时代到职场一路走来,一直都在学习和从事的事情。
|
||||
|
||||
我在研究生时期就加入了北大网络实验室。这个实验室当时最有名的一个产品,就是1997年发布的北大天网,它是国内第一个基于网页索引的中文搜索引擎。在这里,我接触到了搜索引擎的原理,并开始研究海量数据的存储和检索。
|
||||
|
||||
后来,我又参加了IBM“天才孵化计划”,参与了一个基于地理位置的图片社交创新项目。在这里,我遇到了一个特别棘手的挑战,就是要基于每个用户的位置和他们发过的图片进行好友推荐。在这个过程中,我要不断地解决各种检索问题,包括地理位置检索、图片检索、相似用户检索等等。
|
||||
|
||||
幸运的是,这些问题都围绕着一个核心问题,也就是如何高效检索。所以,我还是在短时间内很好地完成了这个任务。解决棘手的问题,给我带来了成就感。同时,这也让我产生了一个想法,我想要深入去研究“如何在不同的应用中做好检索”。
|
||||
|
||||
于是,毕业后,我先后加入了微软广告技术团队、创业公司聚效广告和奇虎360。尽管这些都属于互联网广告行业,但它们的背后都离不开检索知识和技术的支持。而这么多年打造高性能广告引擎的工作经历,让我对于如何做好检索,以及如何使用检索技术支持业务,有了深入的思考和理解。
|
||||
|
||||
## 为什么要学习检索技术?
|
||||
|
||||
说到这,我想问你一个问题:你理解的检索技术是什么?说实话,在专栏刚开始筹备的时候,我就问过很多人这个问题,不少人的第一反应就是:检索就是搜索引擎或者数据库吧。实际上,检索技术的覆盖范围远不止这些。
|
||||
|
||||
不管是在数据库和搜索引擎里,还是在新闻推荐平台、电商平台、生活服务平台中,如果我们把这些业务场景抽象出来,它们的本质其实都是在海量的信息中,快速筛选出我们需要的内容或服务,而这都和检索技术紧密相关。也就是说,即便业务形态不同,但是在这些平台的架构设计中,也都有着相似的检索模块实现。
|
||||
|
||||
那检索技术到底是什么呢?我们可以用一句话来概括**检索技术:它是更底层的通用技术,它研究的是如何将我们所需的数据高效地取出来。**而如何打造高性能的检索引擎,是这些业务都需要面对的核心问题。甚至我们可以说,提供“更快”“更好”的检索服务,其实就是这些公司的核心竞争力之一。
|
||||
|
||||
除了解决业务场景,在我们的实际工作中,“如何快速检索数据”也是最常见的需求。
|
||||
|
||||
比如说,无论你是从事底层架构开发,还是业务开发,我相信你都有可能会面对“为啥我的程序运行得这么慢”的问题。比如说,我们打开一些网站或应用的时候,常常会看到“loading”或“数据加载中”的提示,这很大可能是因为,程序从数据库中检索相关数据比较缓慢。如果我们能合理地使用数据库的索引功能,往往能提升好几倍的加载速度,从而大大减少用户的等待时间。
|
||||
|
||||
再比如说,在具体写代码的时候,我们会用到一些系统提供的容器,比如ArrayList、LinkedList。尽管这些容器都提供了“查询是否包含某个元素”的功能,但是它们的性能相差甚远,如果不了解这些容器的检索原理,我们就有可能因为使用不当而导致程序运行缓慢。因此,**了解和使用合适的检索技术,往往能有效提升整个程序的执行效率**。
|
||||
|
||||
刚才举的例子都很具体,那我们再从更高的视角,来看看当下我们所处的这个时代。随着5G等新技术的普及,我们收集和存储的数据会越来越多。毫无疑问,在这样一个信息爆炸甚至过剩的时代,如何对信息进行高效检索,也将是这个时代必不可少的技能之一。再说回到我们自己的IT行业,技术变化之快,我就不必多说了。我相信,掌握好检索技术,能帮助你在行业的快速变化和发展中找到新的机会,让你有更多的机会进入更好的平台,施展自己的才华。
|
||||
|
||||
## 为什么检索技术难学?
|
||||
|
||||
说了这么多检索的好处,那说到底,我们怎么才能学好检索技术呢?我曾经想过整理一些材料,给我自己团队的成员进行培训,帮助他们更好地完成工作,但我发现很难找到理想的教材。
|
||||
|
||||
我认真了解并且分析之后发现,这主要有两方面原因。
|
||||
|
||||
一方面,经典教材大都太过理论化,和实际工作结合不紧密,学习难度太大。比如,《现代信息检索》和《信息检索导论》就是两本非常经典的书籍,但是大部分人都反馈读起它们来比较吃力,书中的内容组织和例子都和我们的实际工作有比较大的差距。
|
||||
|
||||
另一方面,和实际工作结合的教材,往往都是从某一行业的视角出发,全面介绍这个行业方方面面的所有技术,而不是专注于某一个基础技术。
|
||||
|
||||
比如说,数据库方面的教材,一般会介绍关系模型、SQL语句、事务处理等内容;搜索引擎方面的教材会介绍爬虫系统、文本挖掘、自然语言处理、网页链接分析等内容,真正涉及检索技术的篇幅并不多。如果以这些书籍为教材,我们根本无法聚焦到检索技术的学习上,难以快速、系统地掌握这门实用的知识。
|
||||
|
||||
总结来说,不管是经典教材,还是和实际结合的教材,对读者的知识储备要求都比较高,那无形之中就建立了一个“高门槛”,很多想学习检索技术的人都是被这样的“高门槛”拦在门外的。
|
||||
|
||||
于是,我就开始想,那我是不是可以结合我这么多年对检索技术的理解,将我自己多年从事相关工作的经验总结出来呢?于是,经过近半年的精心准备,《检索技术核心20讲》这个专栏就诞生了。
|
||||
|
||||
## 专栏是如何设计的?
|
||||
|
||||
如果用一句话来概括一下这个专栏的交付目标,那就是,**我想通过这个专栏系统地梳理检索技术的知识,去除冗杂的知识旁支,聚焦于最通用、最核心的检索技术,帮助更多有学习热情、有工作需求的工程师找到学习检索的方法,快速入门、积累经验,解决实际工作中的检索问题。**
|
||||
|
||||
所以,对于这个专栏的内容设计,我给自己定了这么几个目标:
|
||||
|
||||
1. **聚焦核心知识,帮你全面了解检索技术。**我会将我了解的不同行业、不同系统的检索技术进行提炼,帮助你掌握检索技术的核心知识。我也会将不同行业的检索相关的知识进行体系化的梳理,帮助你更好地将各种检索技术进行横向比较,融会贯通,从而构建起自己的检索知识体系。
|
||||
1. **注重实用性,帮你解决实际工作中的问题。**我会通过工业界中的实际案例,来详细讲解不同行业会用到的检索技术。这些案例覆盖了多个应用场景和环节,能够解决现阶段你工作中遇到的大部分检索问题,让你能够学以致用。并且,我也不会单纯地讲案例,我更多的会引导你通过这个案例进行更深入的思考,让你在之后的学习和工作中能做到举一反三,解决更多实际问题。
|
||||
1. **破除“高门槛”,帮你提高学习效率。**首先,学习这个专栏对你基础知识的要求不多,只要你熟悉数组和链表,知道怎么评估时间代价,你就可以学习这个专栏。并且,为了避免枯燥的原理分析,我会少用甚至是不用公式,更多地使用具体的例子以及大量的配图,来帮助你理解检索相关的知识。除此之外,对于每一讲的知识点,我都做了合理的分配和设计。虽然知识的深度在逐步增加,但是跟着我的节奏,相信你依然可以很容易理解和吸收它们。
|
||||
|
||||
基于这几个目标,我把整个专栏的核心内容分成三大部分:基础技术篇、进阶实战篇和系统案例篇。
|
||||
|
||||
在**基础技术篇**,我会以常见但是核心的数据结构和检索算法作为入门,开启整个专栏的讲解。如果你经验尚浅,那这部分内容可以帮助你打好扎实的基础;如果你有一些实战经验,那这部分内容能让你站在检索技术的角度,重新审视之前熟悉的数据结构和算法,帮助你构建自己的检索知识体系。
|
||||
|
||||
在**进阶实战篇**,我会结合工业界的实际应用场景,更深入地介绍一些高级检索技术,总结一些架构设计的思想,让你能学习到许多工业界的实用且有技术深度的解决方案。如果能深入理解并掌握这部分内容,我相信你会成为各种行业的优秀工程师。
|
||||
|
||||
在**系统案例篇**,我会对当前热门的各个方向进行系统分析,比如,存储系统、搜索引擎、广告系统、推荐系统等。从中,你不仅能学到这些行业中是如何应用检索技术的,还可以了解不同行业中检索技术的共同点和不同点。这会帮助你更好地扩展自己的知识面,让你能站在架构师、甚至更高的角度去思考问题和解决问题。
|
||||
|
||||
通过学习这个专栏,你不仅能知道这些基础的数据结构在代码级别提升效率的方法,还能够知道在存储系统、搜索引擎、广告系统和推荐系统这些热门架构中,高效率的设计思想以及某些独特环节的技术处理方式,让你对检索技术的理解和使用都能够更上一层楼,从知道“**检索技术是什么**”,到学会“**利用检索技术解决实际问题**”,并且更深入理解“**为什么这么用**”。
|
||||
|
||||
专栏马上要开始更新了,这里我还想多说几句。
|
||||
|
||||
如果你是一个对检索完全不懂的“新人”,没关系,遇到不懂、不理解的问题,你可以随时给我留言,我会尽我所能给你解答,帮你快速成长;如果你是一个有着多年经验的高级工程师,欢迎你和我分享你工作中遇到的难题,我们共同探讨、一起成长!
|
||||
|
||||
最后,我想听你聊一聊,你是怎样理解检索技术的?对于这个专栏你有什么样的期待?欢迎在留言区畅所欲言,我会第一时间给你反馈!
|
||||
Reference in New Issue
Block a user