当前位置: 首页 > news >正文

深入浅出 Beam Search:自然语言处理中的高效搜索利器

Beam Search 技术详解

1. 引言

Beam Search 是一种广泛应用于自然语言处理(NLP)、机器翻译、语音识别等序列生成任务中的启发式搜索方法。本文将详细探讨 Beam Search 的原理、实现步骤、应用场景及其优缺点,并通过具体例子帮助读者更好地理解这一技术。

2. 算法由来

2.1 背景与起源

Beam Search 最初是为了克服标准广度优先搜索(BFS)在大规模搜索空间中计算成本过高的问题而提出的。传统的 BFS 需要遍历所有可能的状态,这对于许多实际应用来说是不现实的。例如,在自动语音识别(ASR)和机器翻译(MT)中,输入输出通常是连续的符号流,这导致了巨大的搜索空间。

2.2 发展历程

早期的 NLP 和 ASR 系统使用贪婪算法逐个选择最有可能的下一个符号,但这往往忽略了全局最优解的可能性。为了解决这个问题,研究者们提出了保留多个候选路径的方法,即所谓的“束”(beam)。随着技术的发展,Beam Search 成为了现代深度学习模型的标准组件之一,尤其是在基于神经网络的语言模型中。

3. Beam Search 的工作原理

3.1 初始化

假设我们有一个初始状态 (S_0) 和一个空的候选列表。Beam Search 会从这个初始状态开始,为每个时间步生成若干个候选状态,并从中挑选出最有可能的几个继续扩展。

3.2 扩展候选路径

  1. 设定束宽:首先设定一个固定的束宽 (k),即每次迭代时要保留的最佳候选路径数量。
  2. 生成新候选:对于当前保存的所有路径,在每个路径末端添加新的符号(例如单词或字符),形成新的候选路径。
  3. 评分与排序:根据某种评分函数(如对数概率)对所有新生成的候选路径进行打分,并按分数降序排列。
  4. 剪枝:只保留前 (k) 条得分最高的候选路径,其余路径被丢弃。
  5. 重复上述步骤,直到达到预设的最大长度或者所有候选路径都终止为止。

3.3 终止条件

当满足以下任一条件时,Beam Search 算法终止:

  • 达到预定义的最大序列长度;
  • 没有更多有效的候选路径可以扩展;
  • 所有路径均已到达终止符号(如句号或其他结束标记)。

3.4 输出结果

一旦算法终止,通常会选择得分最高的完整路径作为最终输出。如果需要多个输出,则可以选择前几名的完整路径。

3.5 举几个 🌰🌰🌰

3.5.1 简单的语言模型任务

假设我们正在进行一个简单的语言模型任务,要生成句子“I am a student”。我们的候选词在每个时间步都来自一个有限的词汇表。我们从“I”开始生成序列。

  • 第一步:从“I”出发,选择下一个单词。假设当前候选词和它们的概率(或得分)如下:

    • “am”(概率 = 0.6)
    • “is”(概率 = 0.2)
    • “was”(概率 = 0.1)
    • “I”(概率 = 0.1)

    假设我们选择Beam Width = 2,因此我们保留得分最高的2个候选单词:“am”(得分0.6)和“is”(得分0.2)。

  • 第二步:继续生成下一个单词。对于每个序列,我们根据模型的得分选择下一个词。假设得分如下:

    • 对于“I am”(从“am”继续):“a”(概率 = 0.5),“the”(概率 = 0.3),“an”(概率 = 0.2)
    • 对于“I is”(从“is”继续):“am”(概率 = 0.4),“was”(概率 = 0.3),“a”(概率 = 0.2)

    我们再次选择Beam Width = 2,所以保留概率最大的2个候选项:“I am a”(得分0.6 × 0.5 = 0.3)和“I am the”(得分0.6 × 0.3 = 0.18),以及“I is am”(得分0.2 × 0.4 = 0.08)和“I is was”(得分0.2 × 0.3 = 0.06)中的前两个较高者,即“I is am”。

  • 第三步:继续为每个候选序列添加下一个单词。假设得分如下:

    • 对于“I am a”(从“a”继续):“student”(概率 = 0.7),“teacher”(概率 = 0.2),“doctor”(概率 = 0.1)
    • 对于“I am the”(从“the”继续):“student”(概率 = 0.6),“man”(概率 = 0.3),“teacher”(概率 = 0.1)

    继续选择Beam Width = 2,保留得分最高的两个候选:“I am a student”(得分0.3 × 0.7 = 0.21)和“I am the student”(得分0.18 × 0.6 = 0.108)。

  • 最终选择:假设我们已经达到了序列的结束条件(比如长度或特殊的结束符),最后选择“I am a student”作为最优序列。

3.5.2 简单的语言模型任务机器翻译任务

假设我们有一个简单的英文到中文的机器翻译系统,输入句子为“I am happy”,候选翻译和它们的得分如下:

  • 第一步:从“I”出发,选择下一个中文词。假设得分如下:

    • “我”(概率 = 0.8)
    • “他”(概率 = 0.1)
    • 其他(概率 = 0.1)

    选择Beam Width = 2,保留“我”(得分0.8)和“他”(得分0.1)。

  • 第二步:继续生成下一个中文词。对于每个序列,我们根据模型的得分选择下一个词。假设得分如下:

    • 对于“我”(从“I”继续):“是”(概率 = 0.6),“很”(概率 = 0.3)
    • 对于“他”(从“I”继续):“是”(概率 = 0.5),“不”(概率 = 0.4)

    选择Beam Width = 2,保留“我是”(得分0.8 × 0.6 = 0.48)和“我很”(得分0.8 × 0.3 = 0.24),以及“他是”(得分0.1 × 0.5 = 0.05)和“他不”(得分0.1 × 0.4 = 0.04)中的前两个较高者,即“他是”被舍弃。

  • 第三步:继续为每个候选序列添加下一个中文词。假设得分如下:

    • 对于“我是”(从“是”继续):“快乐”(概率 = 0.7),“高兴”(概率 = 0.2)
    • 对于“我很”(从“很”继续):“高兴”(概率 = 0.6),“快乐”(概率 = 0.3)

    选择Beam Width = 2,保留得分最高的两个候选:“我是快乐”(得分0.48 × 0.7 = 0.336)和“我很高兴”(得分0.24 × 0.6 = 0.144)以及“我很快乐”(得分0.24 × 0.3 = 0.072)中的较高者,即“我很快乐”被舍弃。

  • 最终选择:假设我们已经达到了序列的结束条件(比如长度或特殊的结束符),最后选择“我是快乐”作为最优翻译,但考虑到中文习惯,“我很高兴”也是合理的翻译,只是在这个例子中,它的得分稍低。

4. 实现细节

4.1 评分函数

Beam Search 的核心在于如何有效地评估每个候选路径的质量。常用的评分函数包括:

4.1.1 负对数似然性 (Negative Log Likelihood, NLL)

对于给定的概率分布 P ( x ) P(x) P(x),计算负对数似然性(NLL):

NLL ( x ) = − log ⁡ P ( x ) \text{NLL}(x) = -\log P(x) NLL(x)=logP(x)

较低的 NLL 表示较高的概率。在序列生成任务中,我们通常考虑整个序列 x 1 , x 2 , … , x T x_1, x_2, \dots, x_T x1,x2,,xT 的联合概率,因此 NLL 可以表示为:

NLL ( x 1 , x 2 , … , x T ) = − ∑ t = 1 T log ⁡ P ( x t ∣ x < t ) \text{NLL}(x_1, x_2, \dots, x_T) = -\sum_{t=1}^{T} \log P(x_t | x_{<t}) NLL(x1,x2,,xT)=t=1TlogP(xtx<t)

其中, P ( x t ∣ x < t ) P(x_t | x_{<t}) P(xtx<t) 是在给定前 t − 1 t-1 t1 个符号条件下第 t t t 个符号的概率。

4.1.2 累积对数概率 (Cumulative Log Probability)

累积对数概率是直接累加各时间步的对数概率值。由于直接相乘小概率会导致数值下溢问题,因此实际应用中使用对数形式:

CumLogProb ( x 1 , x 2 , … , x T ) = ∑ t = 1 T log ⁡ P ( x t ∣ x < t ) \text{CumLogProb}(x_1, x_2, \dots, x_T) = \sum_{t=1}^{T} \log P(x_t | x_{<t}) CumLogProb(x1,x2,,xT)=t=1TlogP(xtx<t)

4.1.3 归一化后的对数似然性 (Normalized Log Likelihood)

为了公平比较不同长度的序列,可以采用归一化后的对数似然性,即将总对数似然除以序列长度 T T T

NormLogProb ( x 1 , x 2 , … , x T ) = 1 T ∑ t = 1 T log ⁡ P ( x t ∣ x < t ) \text{NormLogProb}(x_1, x_2, \dots, x_T) = \frac{1}{T} \sum_{t=1}^{T} \log P(x_t | x_{<t}) NormLogProb(x1,x2,,xT)=T1t=1TlogP(xtx<t)

4.1.4 加权评分函数

有时候,为了更好地平衡长度和质量,可以引入一个权重参数 α \alpha α 来调整归一化因子:

WeightedNormLogProb ( x 1 , x 2 , … , x T ) = 1 T α ∑ t = 1 T log ⁡ P ( x t ∣ x < t ) \text{WeightedNormLogProb}(x_1, x_2, \dots, x_T) = \frac{1}{T^\alpha} \sum_{t=1}^{T} \log P(x_t | x_{<t}) WeightedNormLogProb(x1,x2,,xT)=Tα1t=1TlogP(xtx<t)

这里的 α \alpha α 通常设置为一个小于1的常数(如0.6或0.7),以防止过短的序列获得不合理的高分。

具体例子

假设我们有一个句子 “I love natural language processing”,其对应的符号序列为 x 1 , x 2 , … , x T x_1, x_2, \dots, x_T x1,x2,,xT。我们可以用上述评分函数来评估这个句子的可能性:

  • NLL:计算每个单词条件概率的负对数之和。
  • CumLogProb:直接累加每个单词条件概率的对数。
  • NormLogProb:将累积对数概率除以句子长度 T T T
  • WeightedNormLogProb:引入权重参数 α \alpha α,进一步调整评分。

通过这些评分函数,Beam Search 可以有效地选择最有可能的候选路径,从而提高生成序列的质量和准确性。

4.2 处理重复路径

为了避免无限循环或重复探索相同的路径,可以在扩展候选路径时加入去重机制。例如,记录已经访问过的状态组合,防止再次选择相同的状态。

4.3 动态调整束宽

虽然固定束宽是一种简单的方法,但在实践中,动态调整束宽可以根据具体情况进行优化。比如,随着搜索深度增加逐渐减少束宽,或者根据当前候选路径的分散程度灵活调整。

5. 应用领域

5.1 机器翻译

在机器翻译中,Beam Search 被用来提高翻译质量和流畅度。传统方法往往依赖于贪婪策略,即每次都选择当前看起来最好的词,但这种方法容易陷入局部最优解。Beam Search 通过同时维护多个候选翻译路径,并根据整体评分选择最佳路径,能够显著提升翻译质量。例如,在翻译长句子时,Beam Search 可以确保即使某个部分的选择不是最优,也能通过后续调整找到更好的整体解决方案。

5.2 语音识别

结合声学模型和语言模型,Beam Search 在语音识别中的作用尤为突出。声学模型负责将音频信号转换为音素序列,而语言模型则用于评估这些序列在语法和语义上的合理性。Beam Search 将两者结合起来,确保识别结果不仅符合音频特征,而且也符合自然语言规则。此外,它还可以处理多音字和同音异义词等问题,提供更准确的转录结果。

5.3 文本摘要

文本摘要是另一个广泛应用 Beam Search 的领域。在这里,Beam Search 帮助模型逐步构建简洁且信息丰富的摘要文本。每一步都会考虑当前摘要的内容以及原文的相关部分,从而决定下一步应该添加哪些关键词或短语。通过这种方式,模型能够在保持关键信息的同时生成流畅自然的摘要,避免冗长或不必要的细节。

5.4 对话系统

对话系统中的 Beam Search 主要用于生成连贯且符合上下文逻辑的回复。在多轮对话中,模型需要根据之前的对话历史和当前用户输入来预测合适的回应。Beam Search 通过同时探索多个可能的回复路径,并根据上下文相关性和自然语言流畅度进行评分,确保最终输出的回复既合乎逻辑又易于理解。

5.5 代码生成

在辅助编程方面,Beam Search 可以自动生成合理的代码片段。例如,在智能IDE中,当程序员输入部分代码后,系统可以通过 Beam Search 推荐完成整个函数或模块的最佳实践。这种方法不仅提高了编码效率,还减少了潜在错误的发生几率。

6. 优点与局限

6.1 优点

  • 效率高:相比完全遍历所有可能性,Beam Search 显著降低了计算量。
  • 灵活性强:可以通过调整束宽来平衡搜索精度和速度。
  • 易于实现:相对简单的算法框架使得其实现较为容易。

6.2 局限

  • 局部最优解风险:由于每次迭代只保留有限数量的候选路径,可能会错过全局最优解。
  • 参数敏感性:束宽的选择对结果有很大影响,过大可能导致过拟合,过小则可能遗漏重要路径。
  • 长序列问题:对于非常长的序列,即使较小的束宽也可能导致巨大的计算负担。

7. 结论

Beam Search 是一种强大而高效的搜索算法,在许多序列生成任务中发挥着重要作用。尽管存在一些局限性,但通过合理的参数设置和改进策略,它可以显著提升模型的表现。未来的研究方向可能包括进一步优化评分函数、探索自适应束宽策略以及与其他先进算法相结合,以期获得更好的性能。

相关文章:

深入浅出 Beam Search:自然语言处理中的高效搜索利器

Beam Search 技术详解 1. 引言 Beam Search 是一种广泛应用于自然语言处理&#xff08;NLP&#xff09;、机器翻译、语音识别等序列生成任务中的启发式搜索方法。本文将详细探讨 Beam Search 的原理、实现步骤、应用场景及其优缺点&#xff0c;并通过具体例子帮助读者更好地理…...

MySQL 可重复读隔离级别,完全解决幻读了吗?

什么是事务隔离级别&#xff1f; 事务隔离级别是数据库用来控制多个并发事务之间如何交互的机制。不同的隔离级别提供了不同程度的保护&#xff0c;以防止并发事务之间的相互干扰。MySQL 支持四种隔离级别&#xff1a; 读未提交&#xff08;Read Uncommitted&#xff09;&…...

Nginx知识详解(理论+实战更易懂)

目录 一、Nginx架构和安装 1.1 Nginx 概述 1.1.1 nginx介绍 1.1.2?Nginx 功能介绍 1.1.3?基础特性 1.1.4?Web 服务相关的功能 1.2?Nginx 架构和进程 1.2.1?Nginx 进程结构 1.2.2?Nginx 进程间通信 1.2.3?Nginx 启动和 HTTP 连接建立 1.2.4?HTTP 处理过程 1…...

VScode怎么重启

原文链接&#xff1a;【vscode】vscode重新启动 键盘按下 Ctrl Shift p 打开命令行&#xff0c;如下图&#xff1a; 输入Reload Window&#xff0c;如下图&#xff1a;...

华夏ERP系统部署

JDK安装及环境变量配置 数据库安装 Redis安装部署 Nginx安装部署 后端程序前端程序部署...

实际部署Dify可能遇到的问题:忘记密码、开启HTTPS、知识库文档上传的大小限制和数量限制

背景 前面我们以 docker compose 容器化的方式本地部署了 Dify 社区版&#xff0c;并快速体验了其聊天助手、工作量编排以及智能体&#xff08;Agent&#xff09;功能。不过后续实际生产环境使用时遇到了忘记密码、如何开启SSL以支持HTTPS、如何突破知识库文档上传的大小限制和…...

【C语言】库函数常见的陷阱与缺陷(三):内存分配函数[4]--free

C语言中的free函数用于释放之前通过malloc、calloc或realloc动态分配的内存。然而,在使用free函数时,开发者可能会遇到一些陷阱和缺陷。 一、功能与用法 free 函数是 C 语言中用于释放动态分配内存的关键函数。在程序使用 malloc、calloc 或 realloc 等函数在堆上分配了内存…...

【TypeScript篇】TypeScript命令行编译和自动化编译

目录 1. 命令行编译 步骤一&#xff1a;创建一个demo.ts文件 步骤二&#xff1a;全局安装TypeScript 步骤三&#xff1a;使用命令编译.ts文件 2. 自动化编译 步骤一&#xff1a;生成编译控制文件 步骤二&#xff1a;开启监视 3. 自动化编译的一些其它问题 1. 命令行编译…...

电子应用设计方案78:智能窗户系统设计

智能窗户系统设计 一、引言 智能窗户系统旨在为用户提供更便捷、舒适和节能的窗户控制体验&#xff0c;同时增强家居的安全性和智能化程度。 二、系统概述 1. 系统目标 - 实现窗户的自动开关控制&#xff0c;根据环境条件和用户设定进行操作。 - 具备风雨感应功能&#xff0c…...

数据挖掘笔记 | 插值 | 拉格朗日插值 | 龙格现象 | 埃尔米特插值 | 分段三次埃尔米特插值

Interpolation插值 ​ 对于缺失值的处理&#xff0c;比较常见的是数值分析中的插值和拟合这两种方法。插值指的是在离散数据的基础上补插连续函数&#xff0c;使得这条连续曲线通过全部给定的离散数据点&#xff1b;拟合则是找到一条“最优”的曲线&#xff0c;尽可能地贴近平…...

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机&#xff0c; vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式&#xff1b;nat模式&#xff1b;host模式 一、桥接模式 所谓桥接模式&#xff0c;也就是虚拟机与宿主机处于同一个网段&#xff0c; 宿主机…...

【Linux网络编程】第十七弹---深入理解以太网与ARP协议:从帧格式到数据报解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、认识以太网 1.1、以太网帧格式 1.2、认识 MAC 地址 1.3、对比理解 MAC 地址和 IP 地址 1.4、认识 MT…...

AVL 树

1.AVL树的概念 AVL树是最先发明的自平衡二叉查找树&#xff0c;AVL树可以是一棵空树&#xff0c;或者具有以下性质的树&#xff1a;左右子树都是AVL树。且左右子树的高度差的绝对值不超过1。 AVL树是一颗高度平衡搜索二叉树&#xff0c;通过控制高度去控制平衡。 AVL树的发明…...

PHP关键字Self、Static和parent的区别

简介 在使用PHP代码时&#xff0c;您可能经常会遇到parent::、static::和self::。但是当你第一次作为一个开发人员开始的时候&#xff0c;有时候你会很困惑&#xff0c;不知道它们是做什么的&#xff0c;以及它们之间的区别。 在我第一次作为开发人员开始工作后的很长一段时间…...

Vscode左大括号不另起一行、注释自动换行

参考大佬的博客VSCode 格式化 cpp 文件时配置左大括号不换行_vscode大括号不换行-CSDN博客 Clang_format_style {BasedOnStyle: Chromium, IndentWidth: 4}...

golang标准库archive/tar实现打包压缩及解压

文章目录 前言一、单个文件操作1.单个文件打包示例2.单个文件解包示例 二、目录示例1.打包压缩2.解包 补充 前言 这个包就是将文件进行打包和解包&#xff0c;通俗理解就是Linux 下的 tar 命令。 主要是通过 tar.Reader 读取 tar 包&#xff0c;通过 tar.Writer 写入 tar包&am…...

模方匀色功能中,加载的模板文件从哪里来

使用 DasViewerV3.1.2及以上版本导出的颜色调整文件 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.2新增内置“自动UV展开”功能&#xff0c;新增局部调色功能和DOM匀色功能等。同时可与…...

maya 删除 Ctrl + Delete vs Delete

在 Autodesk Maya 中删除选定顶点的步骤&#xff1a; 1. 选择顶点&#xff1a; 进入顶点选择模式&#xff1a; 按 F9 键&#xff08;切换到顶点选择模式&#xff09;。 或者&#xff0c;在工具栏中点击顶点选择图标&#xff08;顶点模式&#xff09;。 在视图中选择您想要删…...

为何String不可变,String的运算符重载

1.为何String不可变 java9之前&#xff0c;String的源码中是用字符数组实现的&#xff0c;同时使用了final和private修饰&#xff0c;被final修饰的结果就是变量不可修改、类不可继承、方法不可重写&#xff0c;被private修饰就无法对外暴露&#xff0c;这就是为何String不可变…...

WebRTC :原理、协议和应用场景

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种用于在Web浏览器和移动应用程序之间进行实时通信的开放标准。它通过将音频、视频和数据传输集成到Web浏览器中&#xff0c;使得实时通信变得简单且无需任何插件或第三方软件。 一、WebRTC 的原理 WebRTC的实…...

Windows FTP服务器搭建指南

在Windows上搭建FTP服务器可以通过以下步骤完成。这里以Windows 10为例&#xff0c;使用系统自带的IIS&#xff08;Internet Information Services&#xff09;来搭建FTP服务器。 步骤1&#xff1a;安装IIS和FTP服务器组件 打开“控制面板”&#xff1a; 按 Win R&#xff0c…...

DP协议:Link层(二)

书接上文,内容多了难免会有一种知识点零碎感,但是坚持学下去,有一天你会发现已经不知不觉可以链接成一张知识网络了。 AUX提供的services 前面咱刚刚简单的认识了AUX CH的状态和仲裁,这次咱们接着聊聊AUX提供的services。 管理连接和设备:AUX CH就像是一个管家,负责找到…...

HAL 库 HAL_UARTEx_ReceiveToIdle_IT 函数解析

一、存在位置&#xff1a;stm32f1xx_hal_uart.c 二、具体代码 二、返回值&#xff1a;HAL_StatusTypeDef 通过查看返回值HAL_StatusTypeDef在stm32f1xx_hal_edf.h文件中定义为结构体类型。 status&#xff1a;&#xff08;进展的&#xff09;状况&#xff0c;情形 三、函数名…...

C++ 设计模式:职责链模式(Chain of Responsibility)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 组合模式 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合。这些对象通过…...

数据库约束和查询

一 约束意义 这个后面的字段是什么意思呢? 先前说数据类型是一种约束&#xff0c;约束我们只能放该类型的数据&#xff0c;还有其它的约束来保证数据的合法性&#xff0c;下面的字段就和约束有关。 编译器的编译就是一个约束&#xff0c;保证我们的代码一定是语法合格的。我们…...

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 3.1.2 基于注意力的解释&#xff08;Attention-Based Explanation&#xff09; 注意力机制可以揭示输入数据中各个部分之间的关系&#…...

AI大模型-提示工程学笔记1

卷首语&#xff1a;我所知的是我自己非常无知&#xff0c;所以我要不断学习。 写给AI入行比较晚的小白们&#xff08;比如我自己&#xff09;看的&#xff0c;大神可以直接路过无视了。 几个基本概念 1. 给LLM提示 用户可以通过简单的提示词&#xff08;Prompts&#xff09…...

webrtc-internals调试工具

Google 的 Chrome&#xff08;87 或更高版本&#xff09;WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具; webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。 webrtc-int…...

百度PaddleSpeech识别大音频文件报错

一、背景 公司前同事留下了一套语音识别项目&#xff0c;内部使用百度PaddleSpeech。在项目验收的时候发现无法识别大音频文件&#xff0c;但是可以识别小音频文件。 这套项目是通过python调用的百度PaddleSpeech&#xff0c;然后提供了restful接口&#xff0c;然后java项目可…...

No.3十六届蓝桥杯备战|数据类型长度|sizeof|typedef|练习(C++)

数据类型⻓度 每⼀种数据类型都有⾃⼰的⻓度&#xff0c;使⽤不同的数据类型&#xff0c;能够创建出⻓度不同的变量&#xff0c;变量⻓度的不同&#xff0c;存储的数据范围就有所差异。 sizeof操作符 sizeof 是⼀个关键字&#xff0c;也是操作符&#xff0c;专⻔是⽤来计算特…...

MapReduce相关概念(自用)

MapReduce&#xff1a;分布式计算模型 MapReduce 是一种分布式计算模型&#xff0c;由 Google 在 2004 年提出&#xff0c;用于大规模数据集&#xff08;TB 或 PB 级别&#xff09;的分布式处理。它通过简单的编程模型&#xff0c;将复杂的分布式计算分解为两个基本阶段&#…...

Nginx - 整合lua 实现对POST请求的参数拦截校验(不使用Openresty)

文章目录 概述步骤 1: 安装 Nginx 和 Lua 模块步骤 2: 创建 Lua 脚本用于参数校验步骤 3: 配置 Nginx 使用 Lua 脚本写法二&#xff1a; 状态码写法三 &#xff1a; 返回自定义JSON复杂的正则校验 步骤 4: 测试和验证ngx.HTTP_* 枚举值 概述 一个不使用 OpenResty 的 Nginx 集…...

I2C(一):存储器模式:stm32作为主机对AT24C02写读数据

存储器模式&#xff1a;在HAL库中&#xff0c;I2C有专门对存储器外设设置的库函数 I2C&#xff08;一&#xff09;&#xff1a;存储器模式的使用 1、I2C轮询式写读AT24C02一页数据2、I2C轮询式写读AT24C02多页数据3、I2C中断式写读AT24C02一页数据4、I2C使用DMA式写读AT24C02一…...

AI助手网站

​​​​​​​ chatgpt &#xff1a;https://chatgpt.com/ https://openai.com/index/chatgpt/ 百度ai助手 https://chat.baidu.com/ 百度AI助手https://chat.baidu.com/ 文心快码 文心快码BaiduComate 文心快码BaiduComate 文心快码BaiduComate有代码问题&#xff0c;问文…...

初始nginx

华子目录 nginx介绍nginx功能介绍基础特性web服务相关功能nginx进程结构web请求处理机制 nginx进程间通信nginx启动与http连接建立http处理过程 nginx模块介绍nginx命令演示 nginx介绍 nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服…...

可扩展性设计架构模式——事件驱动架构

事件驱动架构&#xff08;Event-Driven Architecture, EDA&#xff09;是一种可扩展性设计软件架构模式&#xff0c;它通过事件来触发和通信&#xff08;以事件为核心&#xff09;&#xff0c;实现不同系统组件之间的解耦&#xff08;促进应用程序或系统部件之间的松耦合通信&a…...

Prometheus 专栏 —— Prometheus安装、配置

配置文件基本结构 global: 全局配置 scrape_interval: 抓取目标指标的频率&#xff0c;默认为 1minevaluation_interval: 评估告警规则的频率&#xff0c;默认为 1minscrape_timeout: 抓取目标指标数据拉取超时&#xff0c;默认为 10s&#xff0c;如果出现 context deadline e…...

Java并发编程面试题:线程池Fork/Join(19题)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【每日学点鸿蒙知识】WebView代理、2D绘制矩形圆角、TextInput清理按钮、pdf滑动、icon配置问题

1、HarmonyOS Webview 支持设置代理功能吗&#xff1f; 使用Web的onInterceptRequest先拦截再代理来实现。具体可以参考文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#ZH-CN_TOPIC_0000001930757269__on…...

抽奖系统(1)(Java 实现)

1. 需求描述 1. 包含管理员的注册与登录 1) 注册包含&#xff1a;姓名、邮箱、手机号、密码 2) 登录包含两种方式 (1) 电话 密码登录 (2) 电话 短信登录&#xff1b;验证码获取 (3) 登录需要校验管理员身份 2. 人员管理&#xff1a;管理员支持创建普通用户&#xff0c;查看…...

数据库系统原理复习汇总

数据库系统原理复习汇总 一、数据库系统原理重点内容提纲 题型&#xff1a;主观题 1、简答题 第一章&#xff1a;数据库的基本概念&#xff1a;数据库、数据库管理系统、三级模式&#xff1b;两级映像、外码 第二章&#xff1a;什么是自然连接、等值连接&#xff1b; 第三…...

基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...

鸿蒙next RCP网络请求工具类进阶版来了

前言&#xff1a; 各位同学大家好&#xff0c;有一段时间没有更新文章了,最近因为鸿蒙官方的网络请求换掉了了rcp 之前是使用http 这些都是原生开发的 当然有那种三方大家熟知的 axios (这个也是基于http 后面也会过时)所以大家还是要了解一下rcp的原生的网络请求的。那么我们…...

driftingblues6_vh靶机

首先把靶机换成NAT模式 使用 arp-scan 命令扫描网段内存活的主机&#xff0c;以获取靶机ip地址 arp-scn -l 尝试访问ip 使用御剑扫描子域名&#xff0c;尝试访问robots.txt文件 通过访问文件我们发现了一个/textpattern/textpattern目录 访问一下目录发现了登录页面 他还给了…...

Go语言入门

文章目录 零、Linux下Go的安装1.下载、解压2.添加环境变量3.验证安装4.初始化Go模块(1)cd到项目目录(2)初始化模块(3)获取依赖包(4)清理和验证依赖(5)检查 go.mod 文件(6)介绍 go.mod 和 go.sum 文件 5.项目目录结构 一、感性认识1.从 Hello world 开始2.加法函数 二、Go语法1.…...

VS Code中怎样查看某分支的提交历史记录

VsCode中无法直接查看某分支的提交记录&#xff0c;需借助插件才行&#xff0c;常见的插件如果git history只能查看某页面的改动记录&#xff0c;无法查看某分支的整体提交记录&#xff0c;我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…...

【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用

AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…...

快速掌握Haproxy原理架构

文章目录 一、原理架构二、无负载均衡三、四层负载均衡的工作流程四、七层负载均衡工作流程五、基础属性mode 属性retries 属性maxconn 属性clitimeout 属性servtimeout 属性states uri 属性 一、原理架构 四层tcp代理&#xff1a;Haproxy仅在客户端和服务器之间双向转发流量&…...

Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】

第一种思路是先将它们都转换为小写或大写&#xff0c;再使用String类的startsWith()方法实现: 例如&#xff0c;如下的二个示例&#xff1a; "Session".toLowerCase().startsWith("sEsSi".toLowerCase()); //例子之一//例子之二String str "Hello Wo…...

如何提高Redis服务器的最大打开文件数限制

文章目录 如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制3. 修改Redis配置文件4. 修改systemd服务文件5. 重新加载systemd并重启Redis6. 验证更改 注意事项 如何提高Redis服务器的最大打开文件数限制 在运行高并发…...