搜索引擎的“道”

news2024/11/19 3:21:26

目录

1. 网页下载(解决有没有的问题)

1.1 遍历算法

1.1.1 广度优先搜索

1.1.2 深度优先搜索

1.2 网络爬虫

1.2.1 用BFS 还是DFS? 

1.2.2 URL提取

1.2.3 哈希表存储URL下载记录

2. 索引构建(解决快不快的问题)

2.1 布尔运算

2.2 布尔运算与索引的关系

3. 度量质量(解决好不好的问题)

3.1 PageRank原理

3.2 具体流程步骤

4. 相关性计算(解决相不相关的问题)

4.1 词频(Term Frequency)

4.2 词频-逆文档频(TF-IDF)

5. 输出排序结果


所谓“道”,在搜索引擎的语境中,指的是那些构建搜索引擎时遵循的恒定原则和基础规律,这些“道”可以概括为搭建搜索引擎的三大核心步骤,即:

1)广泛自动地抓取和下载互联网上的网页内容;

2)为这些海量的网页内容构建高效且易于检索的索引;

3)基于网页内容的质量以及与用户查询的相关性进行精准的排序和呈现。

这三个步骤简洁地归纳为“下载”、“索引”和“排序”,作者强调,任何一家公司在构建搜索引擎时,都必然需要遵循这三个核心步骤。

接下来,我们将针对这三个关键步骤,进行更为深入和通俗的科普解读。

1. 网页下载(解决有没有的问题)

在16世纪的哥尼斯堡(现今俄罗斯的加里宁格勒),有一个广为人知的谜题,即“哥尼斯堡七桥问题”。这个游戏要求玩家在不重复经过任何一座桥的情况下,遍历连接河两岸及其两座小岛的七座桥。这个问题曾激发了无数人的好奇心和求知欲。

后来,著名数学家欧拉利用数学方法对此进行了深入研究,并论证了这样一个遍历路径是不可能存在的。这一发现不仅解决了哥尼斯堡的谜题,更被视为图论这一数学分支的起点。

注:欧拉基于“哥尼斯堡七桥”问题,提出了一个定理——“如果一个图能够从一个顶点出发,每条边 不重复地遍历一遍回到这个顶点,那么每一顶点的度(即与顶点直接相连的边的数量)必领为偶数”。显然,下图中“河岸A”与“河岸B”的度明显是奇数,因此“哥尼斯堡七桥”问题是无解的。

在图论中,图(Graph)由节点(Vertex)和连接这些节点的边(Edge,或称为弧)构成。图论作为数学的一个分支,涵盖了众多的算法和理论,但其中最为基础和关键的是图的遍历算法。遍历算法的目标是以特定的路径,通过节点间的边,访问图中的每一个节点且仅访问一次。

图的遍历算法主要分为两种:广度优先搜索(Breadth-First Search,简称BFS)深度优先搜索(Depth-First Search,简称DFS)。

1.1 遍历算法

1.1.1 广度优先搜索

为了更直观地解释图论中的遍历算法,作者采用中国铁路图作为示例,将其进行了抽象化表示。在这个简化模型中,每个城市被抽象为一个节点,而城市间的铁路线则被抽象为连接这些节点的直线段。

假设我们从北京出发,计划通过铁路遍历图中所有其他城市。若采用广度优先搜索算法,算法将首先探索与北京直接相连的所有城市(这些城市构成了搜索的“第一层”)。完成第一层的遍历后,算法将继续探索与北京间隔一个城市(即第一层城市的邻居)的所有城市(形成“第二层”)。随后,算法会按此逻辑继续扩展,遍历与北京间隔两个城市的所有城市(构成“第三层”),如此类推。

在下图中,序号标明了在广度优先搜索算法下各个城市的访问顺序。

1.1.2 深度优先搜索

深度优先搜索的特点可以形象地描述为“一条路走到底”。在遍历过程中,算法首先随机选择与北京直接相连的一个城市作为起点,然后沿着这个方向不断深入,尽可能访问到与该城市相连的最远端(即最深的分支末端)的城市。当到达某个分支的末端后,算法会回溯到上一个节点,并继续探索其他未访问的分支,直到所有的城市都被访问到。

在下图中,序号表示了在深度优先搜索算法下各个城市的访问顺序。

通过对比两种算法的遍历逻辑,可以看出,深度优先搜索强调深入探索每一个分支,而广度优先搜索则更注重逐层、有序地遍历整个图。

1.2 网络爬虫

互联网虽然庞大且错综复杂,但本质上可以视为一张庞大的图。在这个图中,每个网页扮演着节点的角色,网页之间通过超链接(Hyperlinks)相互连接,这些超链接就如同图中的边,连接着各个节点。网络爬虫(Web Crawlers),或称为网页爬虫、网络蜘蛛,它们的主要任务就是通过这些超链接,像蜘蛛织网一样,尽可能广泛地遍历互联网上的各类网页,并下载网页上的内容供后续处理和分析。

虽然网络爬虫的概念听起来相对简单,但在工程实现上却需要考虑诸多细节。作者指出,这些细节包括但不限于以下几个方面,每一个方面都需要精心设计和优化,以确保网络爬虫能够高效、准确地完成任务。

1.2.1 用BFS 还是DFS? 

在实际应用中,广度优先搜索(BFS)往往更受青睐,这主要源于多数网站设计者的初衷。网站设计者通常将门户网站作为入口,与其直接相连的网页往往是他们希望用户优先浏览的内容,因为这些页面通常包含了网站的核心信息或最受关注的内容。在爬虫资源有限的情况下,采用BFS策略意味着我们能够优先下载与门户网站直接相关(即第一层)的页面,这些页面往往具有较高的优先级和重要性。

然而,这并不意味着深度优先搜索(DFS)的思想被完全摒弃。事实上,在爬虫的任务调度逻辑中,DFS的思想仍然有其应用价值。考虑到现代网络爬虫通常是由庞大的分布式服务器系统构成,对于特定的网站,通常会分配专门的服务器(或服务器组)进行内容下载。由于服务器与目标网站服务器建立连接(即“握手”)需要消耗资源,过多的“握手”操作会显著降低网络爬虫的下载效率。因此,为了提高效率,实际操作中通常会让服务器先完整下载完一个网站的所有内容,再转向下一个网站,这种策略在某种程度上体现了DFS的“一条路走到底”的特质。

综上所述,从整个网站遍历的宏观层面来看,BFS策略因其能够优先访问重要页面而更受青睐;但从下载网站内容的调度机制来看,DFS策略则因其能够减少“握手”次数而提高下载效率。

1.2.2 URL提取

当网页内容成功下载后,接下来的关键步骤是提取其中的URL链接。这些URL链接定义了资源的位置以及获取这些资源所需的协议信息。在早期,网页开发主要基于HTML语言,因此URL的提取相对简单,因为URL通常以文本形式直接显示在网页上,并且前后有明显的标识符。

然而,随着技术的演进,许多现代网站采用了更复杂的构建方式,特别是使用诸如JavaScript这样的脚本语言。这些脚本语言使得URL的生成和处理变得更加动态和隐蔽。很多URL不再直接显示在网页的HTML结构中,而是通过执行JavaScript代码动态生成。

为了应对这一挑战,现代网络爬虫需要模拟浏览器的行为来运行这些网页。这意味着爬虫不仅需要下载HTML内容,还需要解析和执行JavaScript代码,以触发URL的生成和暴露。这种技术称为“无头浏览器”或“浏览器自动化”,它允许爬虫像真实用户一样与网页进行交互。

因此,编写现代网络爬虫的工程师不仅需要熟悉HTML和HTTP协议,还需要具备深入理解浏览器内核运行逻辑以及JavaScript执行机制的专业知识。这种跨领域的知识背景使得他们能够创建出更加智能和高效的爬虫,以应对日益复杂的网络环境和内容结构。

1.2.3 哈希表存储URL下载记录

在收集到所有URL后,进入资源信息下载阶段。然而,由于互联网上的网页可能存在相互引用,即多个网页可能指向同一资源,因此网络爬虫在遍历和下载过程中很可能遇到重复的资源。为了避免重复下载,工程师通常利用哈希表来存储已访问的URL。当遇到一个新的URL时,会先在哈希表中查询是否存在,若存在则跳过下载,从而提高效率。哈希表的优势在于其高效的查询性能,平均只需一次(或略多)查找即可判断URL是否已存在于表中。

鉴于互联网资源的庞大数量,单个服务器无法容纳完整的哈希表,因此哈希表的管理通常采用服务器集群来实现。由于每次下载网页资源都需要与哈希表进行交互查询,哈希表的管理和维护效率成为网络爬虫集群性能的关键瓶颈。

针对如何高效管理这个集群,一个常见的策略是明确每台服务器的职责。通过调度系统,确保每个URL都能被指定到合适的服务器进行下载,避免不必要的重复查询。此外,还可以采用“批处理”的方式来优化性能。即不是每次遇到新的URL就立即查询哈希表,而是积累一定数量的URL后再统一进行查询和维护,这样可以显著减少与哈希表之间的通信次数,从而提高整个网络爬虫集群的处理效率。这是网络爬虫设计中的重要考量点,也是面试中经常会被提及的问题。

2. 索引构建(解决快不快的问题)

2.1 布尔运算

布尔运算可能是世界上最简单的运算形式了,由19世纪英国的一位中学老师布尔(George Boole),在1854年他所著的《思维规律》里首次提及,展示了如何用数学的方法解决逻辑问题。布尔运算就分成三类:“与”、“或”、“非”,其中运算的元素只有“真”(1)和“假”(0)两个。

1)“与”(AND)的计算逻辑:当两个输入都为真时,输出才为真。

2)“或”(OR)的计算逻辑:当两个输入中至少有一个为真时,输出就为真。

3)“非”(NOT)的计算逻辑:对输入取反,即真变假,假变真。

有的同学会很好奇,这么简单的运算到底有什么实际作用?事实上,在1938年之前,布尔运算的确并未引起广泛的关注,被认为是一种相对简单的概念。然而,正是在1938年,香农利用布尔运算来模拟开关电路,这一创举奠定了布尔代数在数字电路领域的基石。如今,我们所使用的计算机正是由数以百万计的基于布尔代数的开关电路构建而成,无论是基础的加减乘除运算,还是更复杂的计算任务,都离不开布尔代数的支撑。

作者提及,布尔代数在数学领域的重要性,可以说是与量子力学在物理学中的地位相媲美。它们共同将我们对世界的认知从连续的、无限的状态拓展到了离散的、有限的领域。在布尔代数的视角下,万事万物都可以被视作是由一系列基本的“是”或“否”的决策所构成的。而现代科学研究也证实,我们的世界并非完全连续,宇宙的基本粒子数目是有限的,这一发现与布尔代数的离散性观点不谋而合。

然而,令人遗憾的是,布尔代数的创始人布尔先生,在他的有生之年并未被广泛认可为数学家(不禁唏嘘)。

2.2 布尔运算与索引的关系

布尔运算不仅在数学领域具有重要意义,它也是现代搜索技术中“索引”功能的核心基础。在搜索系统中,为了快速定位包含特定关键词的文献或网页,通常会构建一个索引结构。这个索引以二进制形式表示,其中每一位代表一个关键词是否出现在某个文献或网页中。例如,当我们考虑“原子能”这个词时,其对应的二进制索引可能类似于【00001000001000011……】,这里的“1”表明第5、11、16、17篇文献包含该词。

当用户在文献检索系统中查询“原子能应用”但不包括“原子弹”的论文时,系统可以利用布尔运算来精确匹配。具体而言,通过执行【原子能 AND 应用 AND (NOT 原子弹)】这样的布尔表达式,系统能够迅速找到满足条件的文献,如第17篇,并将其返回给用户。

对于互联网搜索引擎而言,面临的挑战更为庞大。数以千亿计的网页和数十万计的常用汉语词汇构成了一个巨大的二维索引。在这个索引中,每一行代表一个词汇,每一列代表一个网页,而每个交叉点则指示该词汇是否出现在该网页中。由于网页内容的词汇量有限,索引呈现出高度的“稀疏性”,即大部分位置都是“0”。为了降低存储压力,通常会采用压缩技术,如仅记录“1”出现的位置。

然而,即使经过压缩,这个索引的存储需求仍然巨大,因此需要采用分布式存储策略。通过将索引分成多个分片(Shards),分别存储在不同的服务器上,系统能够并行处理查询请求,提高处理速度。当用户发起查询时,查询请求会被分发到多个服务器进行处理,然后将结果合并返回给用户。

关于计算效率的问题,实际上由于索引采用二进制形式存储,计算机在处理这类数据时具有极高的效率。现代计算机能够在单个指令周期内执行32位布尔运算,每秒可处理数十亿次以上操作。这使得搜索系统能够迅速响应用户请求,提供快速而准确的搜索结果。

3. 度量质量(解决好不好的问题)

3.1 PageRank原理

在完成网页内容的获取和索引构建两大关键步骤后,接下来便是对网页质量评估的环节。谷歌公司在此领域具有开创性贡献,其创始人拉里·佩奇和谢尔盖·布林提出的“PageRank”算法,极大地提升了搜索引擎的搜索质量。这一算法的名称巧妙融合了“Page”(网页、书页之意)与创始人拉里·佩奇(Page)的姓氏,既体现了算法的核心思想,也凸显了创始人的重要地位。

“PageRank”算法的基本原理既直观又易于理解:一个网页如果被众多其他网页所引用(即可以从多个网页跳转到该网页),那么这个网页的质量和权威性就越高。这是因为,多个网页的引用反映了该网页的广泛认可度和重要性。

然而,值得注意的是,并非所有引用网页的加分权重都是相同的。引用网页自身的权威性和质量也是决定其对被引用网页加分力度的重要因素。例如,一个知名官网对某网页的引用,其背书力度显然要高于一个普通的杂牌网站。因此,在“PageRank”算法中,会综合考虑引用网页的质量,以更准确地评估被引用网页的权威性和排名位置。

"PageRank"算法的独到之处在于,它突破了传统算法的局限,这些传统算法仅仅关注搜索词与单个网页之间的关联,而忽视了网页之间的内在连接关系。而"PageRank"算法则将整个互联网视为一个庞大的系统,并深入洞察了系统内各个网页之间的相互作用和依赖关系。这种全局性的思考方式也无意中契合了系统论的核心观点,即整体大于部分之和,系统内部各元素间的联系和互动对整体性能具有决定性的影响。

3.2 具体流程步骤

关于“PageRank”算法具体的流程步骤,作者在书中写得并不是很清楚,我查阅了其他相关的资料,将算法流程总结如下,有兴趣的可以看下:

1. 初始化PageRank值

  • 对于每个网页,初始的PageRank值一般为 \frac{1}{N} ,其中 N 为所有网页的总数。

2. 迭代计算

  • 迭代计算每个网页的PageRank值,直到达到收敛(即前后两次迭代值的差异小于某个预定的阈值)。
  • PageRank的计算公式如下:

  • PR(A)  表示网页 A 的PageRank值。
  • d 是阻尼因子(damping factor),用于模拟用户浏览网页时的随机跳转行为,确保算法的多样性和公正性。通常,阻尼因子的取值是0.85,表示用户有85%的概率按照网页的链接继续浏览,有15%的概率随机跳转到其他网页。
  • N 是所有网页的总数。
  • T_i 表示指向网页 A 的网页。
  • C(T_i) 表示网页 T_i 的出链数(即指向其他网页的链接数量)。
  • \sum_{i=1}^{n} 表示对所有指向网页 A 的网页 T_i 进行求和。

3. 解决网页零入链问题

  • 对于没有任何其他网页指向它的网页(即零入链网页),初始时它们也会被赋予一个较小的PageRank值(例如 \frac{1}{N} )。
  • 在迭代计算过程中,由于阻尼因子 d 的存在,即使一个网页没有入链,它也能从其他网页那里获得一定的PageRank值。

4. 相关性计算(解决相不相关的问题)

在成功解决了网页内容获取、索引构建以及网页权威性排序这三个核心问题后,接下来便是精准计算网页与用户搜索词之间的相关性。这一步至关重要,如果没有这一步的处理,用户可能会得到大量虽然质量高(如PageRank值很高)但与其搜索意图并不匹配的网页。

4.1 词频(Term Frequency)

在探讨搜索引擎如何确定网页与用户搜索词的相关性时,我们可以继续以搜索“原子能的应用”为例。这个搜索词可以分解为三个关键词:【原子能】、【的】和【应用】。从直观上看,一个网页中这三个关键词出现的次数越多,该网页与用户搜索意图的匹配度就越高。

假设我们有一个包含1000字的网页,其中【原子能】出现了30次,【的】出现了100次,【应用】出现了20次。然而,仅仅依赖关键词出现的绝对次数可能并不准确,因为不同网页的字数差异很大,并且网页所包含的字越多,出现搜索关键词的次数的绝对数量很有可能就越多。为了更公平地评估,我们采用“归一化”的方法,即将每个关键词出现的次数除以网页的总字数,得出关键词在该网页中的比例。以上述例子为例,【原子能】的比例为0.03,【的】的比例为0.1,【应用】的比例为0.02。

在自然语言处理(NLP)领域,这些比例被称为“关键词的词频”(Term Frequency,简称TF)。为了量化搜索词与网页之间的相关性,一种简单而直观的方法是计算网页中所有相关关键词词频的总和。这个总和越大,说明网页与用户搜索词的相关性就越高。这种方法为我们提供了一种量化评估搜索结果相关性的手段,公式如下:

4.2 词频-逆文档频(TF-IDF)

在评估网页与用户搜索词的相关性时,仅仅累加搜索词拆分出的所有关键词的词频是不够的,以下是几个关键考虑因素,我们以“原子能的应用”为例进行说明:

1)停止词(Stop Words)的排除搜索词中的“的”这类词汇,在中文中还有如“得”、“和”、“或”等,它们对于确定网页主题内容几乎没有贡献,在NLP中被称为“停止词”。在计算词频总和时,这些词应当被排除在外,因为它们不提供有价值的信息。

2)关键词权重的差异不同的关键词在确定网页主题时的重要性是不同的。例如,“应用”虽然对确定网页内容有一定作用,但相比“原子能”这样的专业词汇,其重要性较低。因为“应用”这样的词应用场景广泛,不够专业。因此,在计算词频总和时,需要给不同的关键词赋予不同的权重。

综上所述,计算词频总和的时候,词频的权重从高到低依次为:【专业词汇,如“原子能”】>【非专业词汇,如“应用”】>【停止词,如“的”】= 0。从另一个角度讲,就是当一个词汇出现在越多的网页中时(即更加非专业),则这个词汇的权重就越小。即假定一个关键词 w 在 D_w 个网页中,如果 D_w 越大,证明这个关键词越普通(即越非专业),则权重就越小。

在NLP领域,最常用的权重就是逆文本频率指数(Inverse Document Frequency,IDF),计算公式为 log(\frac{D}{D_w}) 。大家可以代入一些具体的数字进去看看,是否符合我们前面得到的结论,这里就不赘述了。引入IDF后,在度量相似度,将网页对应的“关键词的词频”进行加和时,公式变成了如下形式,即每个关键词的词频要乘上对应的权重:

上面就是著名的TF-IDF( Term Frequency / Inverse Document Frequency),这个概念被公认为信息检索中最重要的发明,并且,所谓IDF的概念,其实就是一个特定条件下关键词的概率分布的交叉熵(关于这一点,可以倒回头去看看第六章的读书笔记),这就证明TF-IDF是有稳固的信息论理论基础的。

5. 输出排序结果

在完成了上述四个关键步骤后,搜索引擎便迎来了搜索流程中的“关键时刻”——即精确呈现最终的搜索结果排序。搜索引擎在确定最终的搜索结果网页排名时,其底层逻辑实质上结合了网页的重要性(如通过PageRank算法计算得出)以及网页与用户搜索词的相关性(通过词频-逆文档频率(TF-IDF)等方法计算得出)。简单来说,搜索引擎会将这两者的乘积作为排序的依据,乘积越大,该网页在搜索结果中的排名就越靠前。这样既能确保结果的相关性,又能考虑到网页本身的质量和权威性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1863873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI作画Prompt不会写?Amazon Bedrock Claude3.5来帮忙

最新上线的Claude3.5 Sonnet按照官方介绍的数据来看,在多方面超越了CPT-4o,是迄今为止最智能的模型。 而跟上一个版本相比,速度是Claude 3 Opus的两倍,成本只有其五分之一。 Claude3.5 Sonnet不仅擅长解释图表、图形或者从不完…

AI赋能影视解说:Rap说唱玩法拆解!

在影视解说的领域,竞争一直非常激烈,众多创作者纷纷涌入这个热门的赛道。为了在众多声音中脱颖而出,创新成为了关键。最近,一种结合AI技术的解说方式——Rap说唱解说,以其新颖的形式和高效的创作过程,赢得了…

Linux学习第52天:Linux网络驱动实验(三):一往(网)情深

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 许久没有更新,的确是最近有点懈怠了。没有任何借口,接受所有的批评。接下来无论如何也要坚持下去,不管处于什么境地、什么原因&am…

vue3 Cesium 离线地图

1、vite-plugin-cesium 是一个专门为 Vite 构建工具定制的插件,用于在 Vite 项目中轻松使用 Cesium 库。它简化了在 Vite 项目中集成 Cesium 的过程。 npm i cesium vite-plugin-cesium vite -D 2、配置vite.config.js import cesium from vite-plugin-cesiumexp…

生产环境:CentOS 7 Docker 20.10.19离线部署(为离线部署k8s做准备)

背景描述:离线部署Docker环境 在现代IT基础设施中,Docker已经成为应用容器化的标准工具。它简化了应用程序的部署和管理,使开发者和运维工程师能够以更高的效率和一致性进行工作。然而,在某些场景下,由于安全性、网络…

WMS在发展过程中会遇到哪些挑战?

在仓库管理系统(Warehouse Management System, WMS)的发展过程中,会遇到以下一些挑战: 1、技术整合: 将WMS与现有的ERP(企业资源计划)、TMS(运输管理系统)等系统进行有效…

uniapp 小程序 堆叠轮播图 左滑 右滑 自动翻页 点击停止自动翻页

uniapp 小程序 堆叠轮播图 左滑 右滑 自动翻页 点击停止自动翻页 超过指定时间未点击滑动 则继续开始滚动 直接上代码 componentSwiper.vue 需要注意页面切换时清除计时器 <template><view><view class"swiperPanel" touchstart"startMove"…

1.Orange Zero2介绍及刷机启动

Orangepi Zero2 1.Orangepi Zero2简介2.刷机和系统启动 1.Orangepi Zero2简介 为什么学 学习目标依然是Linux系统&#xff0c;平台是ARM架构蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用C51,STM32单片机无法实现第三方介入库的局限性&#xff0c;比如刷脸支付…

C++ 教程 - 06 类的封装、继承、多态

文章目录 封装继承多态 封装 在private/protected 模块放置数据或者底层算法实现&#xff1b;在public块提供对外接口&#xff0c;实现相应的功能调用&#xff1b;类的封装案例 #include <iostream> using namespace std;// 类的定义 一般放在头文件 class Stu {public…

STM32中五个时钟源:HSI、HSE、LSI、LSE、PLL

时钟系统是处理器的核心&#xff0c;或者说时钟是单片机的心脏。 1.单片机内部需要储存器、累加器&#xff0c;这些都需要逻辑门电路。比如锁存器就是一个D触发器&#xff0c;而触发器的置1、清0、置数的功能都需要跳变沿。D触发器就是上升沿后存入数据&#xff0c;而这个上升…

Linux 安装ElasticSearch + FSCrawler 扫描本地的文件资源

文章目录 0. 前言1. 安装ElasticSearch1.1 下载安装包1.2 新增用户1.3 解压安装包1.4 更改文件夹用户1.5 修改配置文件1.6 修改系统配置1.7 启动集群 2. 安装FSCrawler2.1 下载安装包2.2 创建配置文件2.3 修改配置文件2.4 启动2.5 验证是否被索引 0. 前言 Elasticsearch 是一个…

职业本科院校电子信息类专业教学解决方案

引言 随着信息技术的飞速进步和全球经济的深度融合&#xff0c;电子信息领域已成为推动社会发展的核心动力。职业本科教育作为培养高素质技能型人才的主阵地&#xff0c;面临着前所未有的挑战与机遇。特别是在电子信息类专业领域&#xff0c;如何培养出既掌握前沿理论知识&…

mac配置修改host文件

1command 空格 输入 terminal 选中回车进入终端控制台. command 空格 2 sudo vi /etc/hosts 输入密码,进入vi编辑器修改文件 sudo vi /etc/hosts3修改内容,:wq保存退出,重启项目即可 :wq

2025中国(宁波)出口跨境电商博览会

2025中国(宁波)出口跨境电商博览会 时间&#xff1a;2025年5月28-30日 地点&#xff1a;中国宁波国际会展中心 组织单位&#xff1a; 宁波欧德国际商务咨询服务有限公司 凤麟展览(宁波)有限公司 宁波市跨境电子商务协会 宁波市家居产业协会 详询主办方陆先生 I38&…

day21--669. 修剪二叉搜索树 +108.将有序数组转换为二叉搜索树+538.把二叉搜索树转换为累加树

一、669. 修剪二叉搜索树 题目链接&#xff1a;https://leetcode.cn/problems/trim-a-binary-search-tree/ 文章讲解&#xff1a;https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html 视频讲解&#xff1a;https://www.bi…

二、大模型原理(Transformer )

Transformer是一种基于自注意力机制&#xff08;Self-Attention Mechanism&#xff09;的深度学习模型&#xff0c;它在2017年由Vaswani等人在论文《Attention Is All You Need》中提出。Transformer模型的出现极大地推动了自然语言处理&#xff08;NLP&#xff09;领域的发展&…

零知识学习之DPDK与RDMA(1)—— 认识DPDK(1)

接前一篇文章&#xff1a;零知识学习之DPDK与RDMA&#xff08;1&#xff09;—— 序言与初识 本文内容参考&#xff1a; 《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社 DPDK首页、文档和下载 - 网络数据包转发处理 - OSCHINA - 中文开源技术交流社区 五…

【源码+文档+调试讲解】灾害应急救援平台

摘 要 灾害应急救援平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&…

小程序下拉刷新,加载更多数据,移动端分页

文章目录 页面结构图WXML页面代码js代码wxss代码总结备注 参考&#xff1a;https://juejin.cn/post/7222855604406796346 页面结构图 一般页面就4个结构&#xff1a;最外滚动层、数据展示层、暂无数据层、没有更多数据层。 如图&#xff1a; WXML页面代码 <scroll-view …

Zynq7000系列FPGA中的中断

本文介绍Zynq7000系列FPGA中的系统级中断环境和中断控制器的功能&#xff08;见图7-1&#xff09;。 专用、共享和软件中断 每个CPU都有一组专用外围中断&#xff08;PPI&#xff0c;private peripheral interrupts&#xff09;&#xff0c;使用banked 寄存器可以对这些中断进…