【RAG综述系列】之 RAG 相关背景和基本原理
系列文章:
【RAG综述系列】之 RAG 相关背景和基本原理
【RAG综述系列】之 RAG 特点与挑战以及方法与评估
【RAG综述系列】之 RAG 先进方法与综合评估
【RAG综述系列】之 RAG 应用和未来方向
正文:
检索增强生成(Retrieval-Augmented Generation, RAG) 近年来因其能够结合大规模检索系统与生成模型,提高自然语言理解和生成能力而受到了广泛关注。RAG 充分利用外部知识源(如文档、数据库或结构化数据)来增强模型性能,使其生成更准确且上下文相关的输出。
本综述旨在提供对 RAG 的全面概述,深入分析其基本组件,包括检索机制、生成过程及二者的融合方式。讨论了 RAG 的关键特性,例如利用动态外部知识增强生成模型的能力,以及如何对齐检索到的信息与生成目标所面临的挑战。此外,提出了一种RAG 方法的分类体系,涵盖从基础的检索增强方法到结合多模态数据和推理能力的高级模型。
此外,还回顾了评估 RAG 系统的基准测试和常用数据集,并深入探讨了其在问答(QA)、摘要(Summarization)和信息检索(IR)等领域的应用。最后,总结了 RAG 领域的前沿研究方向和改进机会,包括提升检索效率、增强模型可解释性和优化特定领域的适应性。最终展望了 RAG 在应对真实世界挑战中的潜力,以及它在推动自然语言处理(NLP)进一步发展方面的重要作用。
1. 引言
检索增强生成(RAG)已成为一种关键方法,它将信息检索与生成式模型相结合,以增强自然语言处理任务的能力。通过利用外部知识源,RAG 系统能够生成更准确且上下文相关的输出,从而解决诸如问答、摘要和开放领域对话等领域的复杂挑战。近年来,各种 RAG 方法相继被提出,这些方法涵盖了从基本的检索增强模型到更高级的架构,包括多跳推理 和 增强记忆技术。这些发展突显了 RAG 在 NLP 领域的潜力,它能够在一个统一的框架内动态地结合检索和生成,以提升系统的整体表现。
RAG 模型通过在生成过程中引入外部知识源(如文档、数据库或结构化数据)来增强传统的语言模型。与仅依赖预训练参数的传统模型不同,RAG 系统在生成时动态检索相关信息,从而生成更加信息丰富且上下文准确的内容。这种方法克服了传统语言模型的关键局限性,例如:
- 无法访问实时知识或特定领域知识,以及难以处理超出词汇表(OOV)或罕见实体。
- 在问答任务中,RAG 模型会从海量语料库中检索相关段落,以生成更精准且信息更丰富的答案;
- 在文本摘要任务中,RAG 依赖外部文档生成更具深度和完整性的摘要。
RAG 在早期的成功实践已经显著提升了多个 NLP 任务的效果,例如在开放域问答中,RAG 通过引入相关的外部上下文,超越了传统的生成模型;在基于文档的摘要任务中,它能够生成更贴合原始材料细微差别的摘要。
RAG 的核心是一种以知识为中心的生成方式,即将外部知识作为提升语言生成能力的关键因素。通过结合相关、实时且结构化的信息,RAG 模型能够显著提高其生成上下文精准且事实准确的能力。这种知识驱动的生成方式有效解决了传统语言模型的核心局限——传统模型受限于其训练数据,无法获取动态知识或特定领域知识。RAG 通过集成外部知识,不仅能够检索并融合相关信息,还能在多条信息之间进行推理,从而生成更具细节和深度的输出。这一向知识增强方向的转变使得模型能够处理更复杂的任务,例如:掌握专业领域知识,提高对话系统的回复相关性,以及生成高质量的摘要,使其更能体现原始文本的核心要点。通过将知识融入生成过程,RAG 为那些需要高精度和强上下文感知能力的应用打开了新的可能性。
尽管检索增强生成已经取得了令人瞩目的进展,但仍然存在多个挑战,阻碍了该方法的充分发挥。
- 知识选择(knowledge selection)是主要问题之一,即模型必须从海量的外部资源中有效筛选出最相关的信息。这一任务极具挑战性,主要因为现实世界的知识库规模庞大、信息噪声大且内容多样。
- 另一个关键挑战是知识检索(knowledge retrieval),即在生成时检索到正确的信息,同时在检索效率和相关性之间取得平衡。当前的检索技术仍然难以精准匹配查询与知识源,尤其是在高度专业化或存在歧义的场景下。
- 此外,知识增强的上下文推理(knowledge-enhanced in-context reasoning) 也是一个重要难题,模型不仅要检索到相关知识,还需要有效整合并推理,以确保生成内容的逻辑性和上下文适配性。
这些挑战凸显了 RAG 领域仍然需要更深入的研究,以及更优化的方法论。因此,对 RAG 进行全面的调研至关重要,这不仅有助于总结当前的局限性,也能为未来的发展方向提供指导。
本次调研的主要目标是从知识驱动的视角,全面梳理 RAG 的发展。通过聚焦外部知识与生成过程的融合,希望回顾RAG 领域的最新进展,包括模型、方法和技术。将介绍近年来涌现的关键 RAG 模型,以及用于检索和生成的核心方法,并分析这些方法如何解决知识选择、知识检索和上下文推理的挑战。此外,还希望挖掘当前研究的趋势,并识别尚未深入探索的领域,例如:多模态知识整合和 特定领域应用。调研的独特贡献在于其以知识为核心的视角,提供了一个统一的框架来理解和推进 RAG 研究。本调研的目标读者包括研究人员、工程师和行业从业者,他们希望探索 RAG 在各种 NLP 任务中的应用。随着该领域的快速演进,本调研不仅是一个基础资源,也将成为未来研究的指南,提供对当前挑战和创新机会的深入分析。
2. RAG 背景概述
本节旨在为理解 RAG(检索增强生成,Retrieval-Augmented Generation)提供必要的背景知识。我们首先回溯 RAG 的起源,梳理其从正式提出到逐步发展的演变历程。随后,我们对现有的相关综述进行分析,归纳它们的研究重点与局限性,以此明确本综述在当前研究格局中的定位与贡献。
2.1 RAG 的起源
随着语言模型的不断演进,研究人员开始探索如何通过引入检索机制来提升文本生成的质量。然而,在早期阶段,这一方法尚未形成明确的术语定义。直到 2020 年,Facebook 正式提出 RAG 概念,并成功将其应用于知识密集型任务。RAG 通过引入外部知识检索机制,显著增强了生成模型的能力,在问答和文本理解等任务中展现出卓越的性能。同一时期,Google 也推出了 REALM,采用类似的检索增强方法。REALM 在预训练阶段集成了隐式知识检索模块,在开放域问答任务上取得了显著进展,并在当时达到了最先进水平。
自此,RAG 逐渐受到学术界的广泛关注,并因其相较于传统生成模型的独特优势,成为研究热点。RAG 的核心机制在于结合检索与生成,使得模型能够在处理复杂推理任务时,动态访问外部知识库中的相关信息,从而提升生成内容的准确性与信息丰富度。这一范式的转变,标志着自然语言处理(NLP)领域的一次重要革新——模型不再仅仅依赖内部参数,而是能够高效利用海量的外部知识资源。如图 1 所示,自 2020 年起,研究人员陆续探索了 RAG 在不同方向上的应用,而 2022 年底 ChatGPT 的发布,更是引发了该领域的指数级增长。大量研究纷纷涌现,致力于通过检索增强策略进一步提升大型语言模型的能力。这些持续的研究进展,正在深刻塑造现代 NLP 的技术格局。
图1:一个用于组织 RAG 研究工作的框架。时间轴从 2020 年至今,将与 RAG 相关的研究分为三个主要领域:基础(包括 RAG 学习和 RAG 框架)、高级和评估。语言模型的关键里程碑(如 GPT-3、ChatGPT、GPT-4)也在时间轴上标注。
2.2 相关综述
伴随着生成式 AI,尤其是 RAG 技术的蓬勃发展,众多综述文章相继问世。然而,这些综述往往仅聚焦于 RAG 的特定方面。例如,它们要么专注于 RAG 的基础概念,要么仅在有限场景下概述 RAG 的增强方法。大多数现有研究都围绕文本生成任务,探讨如何利用大型语言模型进行检索增强,而对其他模态的 RAG 研究涉及较少。
《A Survey on Retrieval-Augmented Text Generation》这篇论文的综述提供了 RAG 的基本概览,并探讨了其在文本生成任务中的具体应用。《A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models》、《Retrieval-Augmented Generation for Large Language Models: A Survey》和《Less is More: Making Smaller Language Models Competent Subgraph Retrievers for Multi-hop KGQA》 几篇论文则从大型语言模型的角度研究了 RAG,重点分析了面向查询的 RAG 增强方法。《Retrieval-Augmented Generation for Natural Language Processing: A Survey》深入剖析了 RAG 在检索技术中的关键发展,并介绍了其在自然语言处理任务中的广泛应用。此外,一些研究尝试从更广义的角度探讨 RAG。《Retrieving Multimodal Information for Augmented Generation: A Survey》和《Retrieval-Augmented Generation for AI-Generated Content: A Survey》的最新研究将 RAG 扩展至多模态场景,探索其在 AI 生成内容(AIGC)领域的技术和应用。《Graph Retrieval-Augmented Generation: A Survey》 的研究则利用图结构信息优化 RAG 的检索过程,以增强关系知识的获取能力,并提升模型生成上下文感知的内容。
除了对 RAG 技术本身的研究,近年来学界也日益关注 RAG 系统的评估问题。《Evaluation of Retrieval-Augmented Generation: A Survey》 的综述文章深入探讨了 RAG 评估的挑战,提出了一套综合性的评估框架,并系统分析了现有基准测试的优势与局限性。
尽管已有诸多综述覆盖了 RAG 的多个方面,但目前仍然缺乏一篇全面的综述,能够系统性地整合 RAG 的基础理论、增强方法及其跨领域应用。此外,现有综述普遍忽视了 RAG 的核心价值——知识的有效利用。为填补这一空白,本文从知识利用的视角出发,系统性地梳理和探讨 RAG 技术的发展现状与未来趋势。
3. RAG 基本原理
检索增强生成(Retrieval-Augmented Generation,RAG)作为一种强大的范式,结合了大型语言模型(LLMs)的内部知识与外部知识,以提升文本生成的质量。通过在生成流程中集成检索机制,RAG 解决了传统序列到序列(sequence-to-sequence)框架的局限性,尤其在需要丰富领域知识的任务场景中表现突出。本节将对 RAG 进行全面概述,并探讨其核心组成部分:从外部知识源进行检索、结合内部与外部知识进行生成,以及贯穿其中的关键知识融合过程。
图2:RAG 框架,该框架由三个主要组成部分构成:(1) 由 LLM 利用其内部知识处理查询;(2) 根据查询检索外部知识;(3) 通过知识融合,将内部知识与外部知识结合,以生成最终答案。
3.1 问题定义
大多数生成任务可以抽象为一个输入序列 x 到输出序列 y 的转换过程,即:
y=f(x)
然而,这一基本框架可能因信息不足或上下文需求复杂而受到限制。RAG 通过引入检索组件来弥补这一不足,使输入信息能够得到相关外部知识的补充。具体而言,检索函数 g 从外部知识库中提取相关信息 z 作为补充:
z=g(x)
随后,生成函数 f 结合原始输入序列 x 与检索到的上下文信息 z 以生成最终输出:
y=f(x,z)=f(x,g(x))
这一增强框架利用外部知识提升生成质量,尤其适用于需要复杂上下文理解的任务,如机器翻译和视觉问答(VQA)。
3.2 检索(Retrieval)
在大型语言模型(LLMs)背景下,RAG 的检索过程旨在从外部来源提供有用的知识。这些知识可能涵盖多种模态,包括文本、图像、视频、音频、代码、表格等。相应地,存储格式也多种多样,从简单的文本文件到复杂的数据库和搜索引擎不等。此外,知识结构具有异构性,可能以非结构化的纯文本、半结构化的 HTML 数据或结构化的图数据等形式存在。无论知识的模态、存储格式或结构如何,所有从外部知识库中获取相关信息的过程都可视为检索。
3.3 生成(Generation)
在生成过程中,生成模型结合内部和外部知识,将输入转换为连贯且相关的输出。无论数据格式或具体任务如何,生成阶段的核心在于 “去噪(Denoising)” 和 “推理(Reasoning)” 。
- 去噪(Denoising) 侧重于从检索到的知识中筛除无关或相互矛盾的信息,确保仅有可靠且相关的知识影响生成过程。
- 推理(Reasoning) 则使模型能够有效整合来自多个来源的信息,建立逻辑联系,并生成有据可依的输出。
通过对检索信息的有效 去噪,以及对多个知识来源的深入 推理,生成模型能够在处理复杂任务的同时,保持输出的准确性与连贯性。
3.4 知识融合(Knowledge Integration)
知识融合(Knowledge Integration),在 RAG 语境下通常称为增强(Augmentation),是将 LLMs 的内部知识与检索到的外部知识进行整合的关键过程。这种 神经-符号融合(Neural-Symbolic Integration) 主要可以通过以下三种方式实现:
- 输入层融合(Input-Layer Integration):将检索到的文档直接与原始查询拼接,然后输入模型,使查询与外部知识能够同时被处理。
- 输出层融合(Output-Layer Integration):在输出 logits 层结合检索到的知识,以调整模型的最终预测结果,特别适用于提高输出准确性的任务。
- 中间层融合(Intermediate-Layer Integration):在生成过程中,将外部知识整合到模型的隐藏状态中,从而实现内部知识与外部知识表示之间的更细粒度交互。
每种融合策略各具优势,可根据具体任务需求和计算资源限制进行选择。
总结
目前文章中回顾了 RAG 的基础概念,并分析当前模型所面临的关键挑战,为理解外部知识与语言生成的融合奠定基础。同时,深入探讨 RAG 的核心原理,详细介绍知识检索、整合和生成的流程。后续会进一步探讨前文提到的知识选择、检索效率及上下文推理等挑战,并分析其复杂性。还有介绍 RAG 的各种方法,包括传统的基于检索的模型,以及更高级的多模态方法,这些方法引入了更强的推理能力和记忆机制。并分析评估 RAG 系统的标准和数据集,并批判性地回顾现有的评测方法与指标。
本文原文为论文《A Survey on Knowledge-Oriented Retrieval-Augmented Generation》的解读。论文链接:A Survey on Knowledge-Oriented Retrieval-Augmented Generation
相关文章:
【RAG综述系列】之 RAG 相关背景和基本原理
系列文章: 【RAG综述系列】之 RAG 相关背景和基本原理 【RAG综述系列】之 RAG 特点与挑战以及方法与评估 【RAG综述系列】之 RAG 先进方法与综合评估 【RAG综述系列】之 RAG 应用和未来方向 正文: 检索增强生成(Retrieval-Augmented Gen…...
Unity 开发休闲手游:M_Studio 实战指南,源码课件全解析
Unity 开发休闲手游:M_Studio 实战指南,源码课件全解析 在手游开发领域,Unity 引擎凭借其强大的跨平台能力和丰富的资源,成为众多开发者的首选。今天,我们深入探讨如何利用 Unity 开发休闲手机游戏,以 M_S…...
HTML5 新的 Input 类型学习笔记
HTML5 引入了多种新的表单输入类型,这些新特性不仅增强了输入控制,还提供了更强大的验证功能,使表单设计更加灵活和便捷。以下是 HTML5 新的 Input 类型的详细学习笔记。 一、color 类型 功能:用于选取颜色。 使用场景ÿ…...
【第23节】windows网络编程模型(WSAEventSelect模型)
目录 引言 一、WSAEventSelect模型概述 二、 WSAEventSelect模型的实现流程 2.1 创建一个事件对象,注册网络事件 2.2 等待网络事件发生 2.3 获取网络事件 2.4 手动设置信号量和释放资源 三、 WSAEventSelect模型伪代码示例 四、完整实践示例代码 引言 在网…...
C# 中实现 跨线程写入
方案核心思路 写入请求队列:使用 ConcurrentQueue 接收来自任意线程的写入请求。 专用写入线程:由独立线程处理队列中的写入操作,确保顺序执行。 双信号机制:通过 ManualResetEventSlim 控制读取线程的暂停与恢复。 线程安全确…...
联合体(Union)的使用与应用场景
引言 在 C/C++ 编程中,联合体(Union)是一个非常独特的数据结构。与结构体(struct)不同,联合体允许不同的数据类型共享同一块内存空间,从而节省内存。在许多需要高效内存管理的场景下,联合体的使用能够显著提高程序的性能与资源利用率。本文将从联合体的基本概念入手,…...
Spark2 之 Expression/Functions
ExpressionConverter src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala TopNTransformer src/main/scala/org/apache/gluten/execution/TopNTransformer.scala...
【Mysql】SQL 优化全解析
文章目录 一、理解执行计划1.1 执行计划的作用1.2 查看执行计划 二、查询优化2.1 避免全表扫描2.2 使用覆盖索引2.3 合理使用 JOIN 三、索引优化3.1 索引设计原则3.2 索引维护 在数据驱动的当今时代,MySQL 作为应用广泛的开源关系型数据库&…...
谈谈对spring IOC的理解,原理和实现
一、IoC 核心概念 1. 控制反转(Inversion of Control) 传统编程中对象自行管理依赖(主动创建),而IoC将控制权转移给容器,由容器负责对象的创建、装配和管理,实现依赖关系的反向控制。 2. 依赖…...
Element UI实现表格全选、半选
制作如图所示的表格全选、半选: 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…...
Dify实现自然语言生成SQL并执行
目录 一、需求分析 二、解决思路 问题1:文字描述生成SQL语句 问题2:执行生成的SQL语句 完整解决方案 三、最终效果展示 四、具体实现 1.Agent提示词 2.知识库数据 3.sql执行器工作流创建 3.1 节点1 3.2 节点2 3.3 节点3 3.4 最终配置界面预…...
【leetcode hot 100 347】前 K 个高频元素
解法一:用map的value记录key出现的次数,用PriorityQueue构造最小堆。 class Solution {public int[] topKFrequent(int[] nums, int k) {// 把元素放在map中Map<Integer,Integer> map new HashMap<>();for(int num:nums){if(map.containsK…...
golang不使用锁的情况下,对slice执行并发写操作,是否会有并发问题呢?
背景 并发问题最简单的解决方案加个锁,但是,加锁就会有资源争用,提高并发能力其中的一个优化方向就是减少锁的使用。 我在之前的这篇文章《开启多个协程,并行对struct中的每个元素操作,是否会引起并发问题?》中讨论过多协程场景下struct的并发问题。 Go语言中的slice在…...
一文了解Gradle 依赖管理(五)- 依赖管理缓存依赖
文章目录 1. 版本目录 (Version Catalogs)1. 版本目录的概念与优势2. 主要优势3. 基本配置4. 使用版本目录5.使用外部版本目录文件6.实际项目中的版本目录最佳实践 2. 依赖锁定(Dependency Locking)1. 依赖锁定的概念与重要性2. 主要优势3. 如何启用依赖…...
如何在 Postman 中发送 PUT 请求?
在 Postman 中发送 PUT 请求的步骤相对简单,包括新建接口、选择 PUT 方法、填写 URL 和参数等几个主要步骤。 Postman 发送 put 请求教程...
Ubuntu20.04.6系统根目录扩容
文章目录 方法一:**1. 检查磁盘和分区情况****2. 扩展 vda3 分区****3. 扩展 LVM 物理卷****4. 扩展 LVM 逻辑卷****5. 扩展文件系统** 方法二:1. 查看当前磁盘分区情况2. 创建新分区3. 重新加载分区表4. 扩展物理卷(PV)5. 扩展逻辑卷&#x…...
《AI赋能SQL Server,数据处理“狂飙”之路》
在数字化浪潮汹涌的当下,企业的数据量犹如滚雪球般飞速增长。据统计,过去几年全球数据量的年增长率高达30%以上 ,海量数据如同双刃剑,既蕴含着无限商机,也给数据处理带来巨大挑战。SQL Server作为一款强大的关系型数据…...
c++ 日志框架G3log介绍及在嵌入式Linux上的移植(交叉编译)
在开发高性能的C应用程序时,一个高效的日志框架是不可或缺的。G3log是一个开源的日志库,以其高性能和易于使用著称,特别适用于嵌入式Linux环境。本文将详细介绍G3log的主要特性和如何在嵌入式Linux平台上进行交叉编译。 G3log介绍 G3log 是一…...
Buffer overFolw---Kryo序列化出现缓冲区溢出的问题解决
问题: 由于我的数据量太大,我设置批次为10000万,50w数据大概有400M左右,然后进行spark数据处理时候报错为org.apache.spark.SparkException:Kryo serialization failed:Buffer overFolw.Available:0,rquired 58900977,To …...
leetcode日常刷题
题目:K个一组翻转链表 思路 题目要求k个一组进行反转,首先考虑到如果k为1,那就可以直接返回链表头,这种情况没必要翻转。 如果只有一个节点或者head为空结点,直接返回head即可(一个节点翻转k次都是本身&am…...
菜鸡前端计算机强基计划之CS50 第七课 python 入门—— Python 中yield专题学习
菜鸡前端计算机强基计划之CS50 第七课 python 入门—— Python 中yield专题学习 1. 什么是 yield?直观感受 2. 生成器是什么?一个简单的例子 3. yield 的工作原理(图形化解释)4. yield 和内存的魔法用列表返回所有值用生成器逐步生…...
密码学——知识问答
目录 1、阐述公开密钥算法的定义,结合RSA算法说明公钥密码的基本要求。 说明公钥与私钥两种密码学并举例与其应用 1. 公钥密码学(非对称加密): 2. 私钥密码学(对称加密): 对比公钥与私钥密码…...
Talos-docker版本中创建 Kubernetes 集群
在talos容器化版本中部署Kubernetes集群,用于折腾学习。 1.系统信息 虚拟机软件:VMware Worktation 虚拟机配置:4G内存 4vCPU 200GB磁盘 操作系统:CentOS7.9 docker:20.10.15 PS:为啥VMware Worktat…...
【Excel使用技巧】某列保留固定字段或内容
目录 ✅ 方法一:使用 Excel 公式提取 body 部分 🔍 解释: ✅ 方法二:批量处理整列数据 🚨 注意事项 🚨 处理效果 我想保留Excel某一列的固定内容,比如原内容是: thread entry i…...
matlab 模拟 闪烁体探测器全能峰
clc;clear;close all %% 参数设置 num_events 1e5; % 模拟事件数 E 662e3; % γ射线能量(eV) Y 38000; % 光产额(photon/MeV,NaI(Tl)) eta 0.2; % 量子效率 G 1e6; …...
【leetcode hot 100 74】搜索二维矩阵
解法一:双重二分查找 class Solution {public boolean searchMatrix(int[][] matrix, int target) {int nmatrix.length, mmatrix[0].length;int row10, row2n-1, col10, col2m-1;int row_mid, col_mid;while(row1<row2){row_mid (row1row2)/2;while(col1<c…...
Maven 中 maven.test.skip 与skipTests 区别
在 Maven 中,maven.test.skip 和 skipTests 都用于控制测试的跳过行为,但它们的作用范围和底层机制有显著区别。以下是详细对比: 1. maven.test.skip 定义 maven.test.skip 是一个用户自定义属性(需在 pom.xml 的 <propertie…...
LLM - R1 强化学习 DRPO 策略优化 DAPO 与 Dr. GRPO 算法 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/146533892 在强化学习算法中,DAPO (Decoupled Clip and Dynamic Sampling Policy Optimization),通过解耦裁剪和动态采样策…...
element-plus中,Loading 加载组件的使用
一.基本使用 给一个组件,如:table表格,加上v-loading"true"即可。 举例:复制如下代码。 <template><el-table v-loading"loading" :data"tableData" style"width: 100%"><…...
部署完dify:localhost/install 页面不停转圈圈,报错CROS error
解决办法 docker/.env 文件中,需要配置如下: NGINX_HTTPS_ENABLEDtrue NGINX_ENABLE_CERTBOT_CHALLENGEtrue 把Nginx的跨域请求打开...
UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击
添加武器插槽 打开机器人的Idle动画,方便查看武器位置 在动画面板里打开骨骼树,找到右手的武器节点,右键添加一个插槽,重命名为RightWeapon,右键插槽,添加一个预览资产,选择Rifle,根…...
【网络丢包】原因排查及优化
在流式响应中,丢包现象可能由多种因素引起,详细的原因分析、排查方法及优化策略: 一、丢包原因分析 网络拥塞 当网络带宽不足或流量突增时,路由器/交换机可能丢弃超出处理能力的数据包。 硬件问题 网卡、路由器、交换机等设备故…...
Spring Boot 实战:MD5 密码加密应用全解析
Spring Boot 实战:MD5 密码加密应用全解析 1. 引言 在应用开发中,密码安全是用户隐私保护的核心环节。直接存储明文密码存在极大的安全风险(如数据库泄露导致用户信息被盗)。MD5 加密作为一种广泛使用的哈希算法,可将…...
Android 底部EditView输入时悬浮到软键盘上方
1. 修改 Activity 的 Manifest 配置 确保你的 Activity 在 AndroidManifest.xml 中有以下配置: <activityandroid:name".YourActivity"android:windowSoftInputMode"adjustResize|stateHidden" /> 关键点: adjustResize 是…...
【deepseek 学c++】weakptr引用场景
std::weak_ptr 是 C 中与 std::shared_ptr 配合使用的智能指针,它本身不拥有资源的所有权,仅观察资源的状态,主要用于解决 shared_ptr 的循环引用问题和临时访问共享资源的需求。以下是 weak_ptr 的典型应用场景和核心价值:![ 为…...
从技术架构和生态考虑,不是单纯的配置优化,还有哪些方式可以提高spark的计算性能
从技术架构和生态系统层面提升Spark的计算性能,可采取以下核心策略: 一、计算模型重构与执行引擎升级 1. 弹性分布式数据集(RDD)的血统优化 通过RDD的Lineage(血统)机制实现容错时,采用增量式…...
怎样进行服务器的日常安全监控和审计?
服务器的日常安全监控和审计是保障服务器安全运行的重要措施,以下是一些常见的方法和工具: 系统日志监控 启用日志功能:确保服务器操作系统、应用程序和数据库等都启用了详细的日志记录功能。例如,Linux 系统中的 syslog&#x…...
Java 集合框架面经
1、说说有哪些常见的集合框架? 集合框架可以分为两条大的支线: Map 接口:表示键值对的集合,一个键映射到一个值。键不能重复,每个键只能对应一个值。Map 接口的实现类包括 HashMap、LinkedHashMap、TreeMap 等。Colle…...
【已解决】Git:为什么 .gitignore 不生效?如何停止跟踪已提交文件并阻止推送?
你可能遇到的问题 你已经提交了某个文件夹(如 dataset)到 Git 仓库,之后修改了它,但发现修改内容被 Git 持续跟踪,无法通过 .gitignore 忽略。尝试在 .gitignore 中添加规则后,修改的文件仍然显示为"…...
MOSN(Modular Open Smart Network)-04-TLS 安全链路
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFAStack-00-sofa 技术栈概览 MOSN(Modular O…...
SICAR 标准 KUKA 机器人标准功能块说明手册
功能块名称:LSicar_Robot_KUKA_PrD 目录 1. 概述 2. 功能说明 2.1 程序控制 2.2 状态监控 2.3 报警与故障处理 2.4 驱动控制 3. 关键参数说明 4. 操作步骤指南 4.1 初始化配置 4.2 运行控制 4.3 状态监控 5. 常见故障处理 6. 注意事项 附录1:程序段索引 附录…...
QT三 自定义控件,自定义控件的事件处理自定义事件过滤,原始事件过滤
一 自定义控件 现在的需求是这样: 假设我们要在QWidget 上做定制,这个定制包括了关于 一些事件处理,意味着要重写QWidget的一些代码,这是不实际的,因此我们需要自己写一个MyWidget继承QWidget,然后再MyWi…...
Leetcode算法方法总结
1. 双指针法解决链表/数组题目 只要数组有序,就要想到双指针做法。还有二分法 回文串一般也会用到双指针,回文串的长度由于可能是奇数也可能是偶数,所以在寻找时,既需要寻找奇数长度的回文串,也需要寻找偶数长度的回文…...
【Elasticsearch基础】基本核心概念介绍
Elasticsearch作为当前最流行的分布式搜索和分析引擎,其强大的功能背后是一套精心设计的核心概念体系。本文将深入解析Elasticsearch的五大核心概念,帮助开发者构建坚实的技术基础,并为高效使用ES提供理论支撑。 1 索引(Index&…...
docker远程debug
1. 修改 Java 启动命令 在 Docker 容器中启动 Java 程序时,需要添加 JVM 调试参数,jdk8以上版本 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your-app.jar jdk8及以下版本: java -Xdebug -Xrunjdwp:tra…...
华为eNSP-配置静态路由与静态路由备份
一、静态路由介绍 静态路由是指用户或网络管理员手工配置的路由信息。当网络拓扑结构或者链路状态发生改变时,需要网络管理人员手工修改静态路由信息。相比于动态路由协议,静态路由无需频繁地交换各自的路由表,配置简单,比较适合…...
CentOS 7下安装PostgreSQL 15
一、简介 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业…...
时序数据库 InfluxDB(一)
时序数据库 InfluxDB(一) 数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis )…...
动态添加view方法-微信小程序
在微信小程序中,通过动态数据绑定和条件渲染来实现动态添加 view 组件的效果。 以下是一个简单的示例,展示如何根据数据动态添加 view。 WXML 文件 在 WXML 文件中,使用 wx:for 指令来遍历数组,并动态生成 view 组件。 <view…...
Java中清空集合列表元素有哪些方式
在 Java 里,存在多种清空列表的方式,下面为你汇总并附上对应的示例代码: import java.util.ArrayList; import java.util.List;public class ListClearDemo {public static void main(String[] args) {// 初始化一个列表List<String> …...