大语言模型落地的关键技术:RAG
1、什么是RAG?
RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索(Retrieval)和生成(Generation)。
- 检索(Retrieval):这一部分的工作是从大量的文本数据中检索出与输入问题最相关的信息。它通常使用一个检索系统,用于大规模的文档集合(例如维基百科)中寻找与输入相关的文段。
- 生成(Generation):生成部分则使用类似GPT的语言模型,它会根据检索到的信息来生成响应或回答。这个过程涉及理解检索到的内容,并在此基础上生成连贯、相关且信息丰富的文本。
RAG模型的关键在于它结合了这两种方法的优点:检索系统能提供具体、相关的事实和数据,而生成模型则能够灵活地构建回答,并融入更广泛的语境和信息。这种结合使得RAG模型在处理复杂的查询和生成信息丰富的回答方面非常有效。这种技术在问答系统、对话系统和其他需要理解和生成自然语言的应用中非常有用。
2、RAG发展历程
RAG于2020年中期由Lewis等人提出,是LLMs领域中的一种范式,可增强生成任务。具体而言,RAG包括一个初始的检索步骤,LLMs在此步骤中查询外部数据源以获取相关信息,然后才回答问题或生成文本。这个过程不仅为后续的生成阶段提供信息,还确保回答基于检索到的证据,从而显著提高了输出的准确性和相关性。
在推断阶段动态检索来自知识库的信息使RAG能够解决生成事实错误内容的问题,通常被称为“幻觉”。将RAG整合到LLMs中已经迅速被采用,并成为完善聊天机器人能力和使LLMs更适用于实际应用的关键技术。
RAG的演进轨迹在四个不同阶段展开,如下图所示。
在2017年的创始阶段,与Transformer架构的出现相一致,主要重点是通过预训练模型(PTM)来吸收额外的知识以增强语言模型。这个时代见证了RAG的基础工作主要集中在优化预训练方法上。在这个初始阶段之后,出现了相对沉寂的时期,与RAG相关的研究进展较少。随后ChatGPT的出现标志着LLMs领域的重要时刻,社区的重点转向利用LLMs的能力来实现更高的可控性和解决不断变化的需求。
因此,大部分RAG工作集中在推断上,只有少数工作致力于微调过程。随着LLMs能力的不断提高,特别是GPT-4的推出,RAG技术的格局发生了重大变化。重点转向了RAG和微调的优势相结合的混合方法,同时也有少数人继续关注优化预训练方法。
3、RAG的工作流
下图中展示了一个典型的 RAG 应用工作流程:
用户向 ChatGPT 查询最近引起广泛关注的事件,这些事件引发了大量的公众讨论。作为最著名和广泛使用的LLMs,受限于其预训练数据,ChatGPT缺乏对最新事件的了解。RAG通过从外部知识库中检索最新的文档摘录来解决这一问题。在这种情况下,它获取了与查询相关的一些新闻文章。这些文章连同最初的问题被合并成一个丰富的提示,使ChatGPT能够合成一个知情的回答。
这个示例说明了RAG的过程,展示了它通过实时信息检索来增强模型的响应能力。从技术上讲,RAG已经通过各种创新方法得到丰富,这些方法解决了关键问题,例如“要检索什么”、“何时检索”和“如何使用检索到的信息”。
关于“要检索什么”的研究已经从简单的标记检索和实体检索发展到更复杂的结构,如块和知识图研究重点放在检索的粒度和数据结构的级别上。粗粒度带来更多的信息,但精度较低。检索结构化文本提供了更多信息,但效率较低。关于“何时检索”的问题已经产生了各种策略,从单一检索到自适应检索和多次检索,再到高频率检索的方法。
4、RAG增强检索的框架
RAG研究范式不断发展,我们将其分为三种类型:基础RAG(Naive RAG)、高级RAG(Advanced RAG)和模块化RAG(Modular RAG)。下图简单的说明了这三种RAG的工作流程:
4.1 基础RAG
基础RAG是检索增强生成(RAG)范式的最早形式之一,其基本概念是将外部检索与大型语言模型(LLMs)的生成能力结合在一起。在基础RAG中,检索通常是基于查询的,并且用于检索外部知识库或数据源中的相关信息。一旦获得了检索到的信息,它们可以与LLMs的内部知识结合在一起,以生成更准确和相关的文本或回答。
然而,基础RAG虽然在改善LLMs的性能方面取得了一定的成功,但也存在一些限制和不足之处。其中一些主要限制包括:
- 不适应多模态数据:基础RAG主要关注文本数据的检索和生成,对于多模态数据(例如图像、音频)的处理能力有限。
- 缺乏对话性:基础RAG通常是单向生成,难以实现复杂的对话或多轮问答。
- 效率低下:在某些情况下,基础RAG可能需要大量的检索操作,导致效率下降。
由于这些限制,研究人员开始探索更高级的RAG范式,以克服这些问题并提高RAG的性能和适用性。这导致了高级RAG和模块化RAG的发展,这些范式在各种应用中得到了广泛的应用。
4.2 高阶RAG
高级RAG是检索增强生成(RAG)范式的进化形式,其目的是克服基础RAG的一些限制,并进一步提高性能和适用性。在高级RAG中,研究人员采用了一系列创新性方法和技术,以应对复杂的自然语言处理任务和挑战。
以下是高级RAG的一些关键特点和创新:
- 多模态支持:高级RAG不仅限于文本数据,还可以处理多模态数据,例如图像、音频和视频。这使得高级RAG在各种多媒体应用中具有广泛的用途。
- 对话性增强:高级RAG具备更强大的对话处理能力,可以实现更复杂的对话和多轮问答。这使其在聊天机器人和虚拟助手等应用中表现出色。
- 自适应检索策略:高级RAG引入了更智能的检索策略,可以根据上下文和任务自动调整何时进行检索以及何时使用检索到的信息。这提高了效率和性能。
- 知识融合:高级RAG能够更好地将外部知识与内部知识融合,以生成更具洞察力和相关性的文本。这对于知识密集型任务特别有用。
高级RAG代表了RAG范式的进一步发展,具有更广泛的应用领域和更强大的性能。它在自然语言处理和人工智能领域中取得了重要的突破,并在各种实际应用中得到了广泛的采用。
4.3 模块化RAG
模块化RAG是检索增强生成(RAG)的另一种演进形式,目的是提供更大的定制性和灵活性,以满足不同应用场景的需求。与基础RAG和高级RAG相比,模块化RAG更注重将RAG系统分解为各种独立的组件,每个组件负责特定的任务或功能。
以下是模块化RAG的一些关键特点和概念:
- 组件化架构:模块化RAG将RAG系统分解为多个独立的组件,例如检索组件、生成组件和评估组件。这些组件可以根据需要进行组合和替换,以实现定制化的RAG系统。
- 可插拔性:模块化RAG允许研究人员或开发者轻松地添加新的组件或替换现有的组件,以适应不同的任务和数据源。这提高了系统的可扩展性和适应性。
- 自定义管道:模块化RAG允许用户构建自定义的处理管道,根据特定的任务需求配置不同的组件。这使得RAG系统可以灵活地应对各种应用场景。
- 集成外部工具:模块化RAG还支持集成外部工具和资源,例如不同的知识库、检索引擎或生成模型。这扩展了系统的数据和功能来源。
模块化RAG强调了灵活性和可定制性,使研究人员和开发者能够更好地适应不同的应用需求。这种方法在构建复杂的自然语言处理系统时非常有用,可以根据具体任务的要求构建定制的RAG系统。
5、RAG中的核心组件
RAG的核心组件分为三个部分检索(Retrieval)、增强(Augmentation)、生成(Generation),其分类结构如下图:
5.1 RAG中的检索(Retrieval)
检索是检索增强生成(RAG)框架的核心组件之一,它负责从外部数据源或知识库中获取与用户查询相关的信息。检索的质量和效率对于RAG系统的性能至关重要,因为它直接影响生成的文本或回答的准确性和相关性。
以下是与检索相关的一些关键概念和技术:
- 检索策略:RAG系统需要确定何时进行检索以及如何选择要检索的信息。检索策略可以根据任务和上下文进行调整,以提高系统的效率和性能。
- 检索粒度:检索可以以不同的粒度进行,从单个标记或实体到更大的文本块或知识图。选择适当的检索粒度取决于任务的要求和数据的结构。
- 检索方法:有多种检索方法可供选择,包括基于关键字的检索、实体检索、自然语言查询和知识图检索等。每种方法都有其适用的情境和优势。
- 检索效率:高效的检索是关键因素之一,尤其是在实时应用中。优化检索过程以降低延迟和资源消耗是重要任务之一。
- 外部数据源:RAG系统可以从各种外部数据源中进行检索,包括互联网上的文档、知识库、数据库和API。选择合适的数据源对于获取准确和丰富的信息至关重要。
在RAG框架中,检索与生成和增强技术密切合作,以生成最终的文本或回答。因此,检索的质量和效率对于整个RAG系统的性能和效果至关重要。
5.2 RAG中的增强(Augmentation)
RAG中的增强技术是RAG框架的第二个核心组件,它的作用是进一步提升生成的质量和效果,以确保生成的文本或回答准确、相关且合乎要求。增强技术通过不同方式与检索和生成协同工作,以优化RAG系统的性能。
以下是与RAG中的增强技术相关的一些关键概念和方法:
- 文本修正:增强技术可以用于修正生成的文本,以确保其准确性和合理性。这可以通过自动文本校对、语法纠正和事实验证等方式实现。
- 知识融合:一些RAG系统具备将外部知识融合到生成文本中的能力。这可以通过将检索到的知识与生成的文本进行有机结合来实现。
- 上下文增强:增强技术可以利用上下文信息来优化生成文本的相关性。这包括利用对话历史、用户偏好和任务上下文等信息。
- 控制生成风格:一些RAG系统允许用户控制生成文本的风格、语气和表达方式。这提供了更高度定制化的生成能力。
- 多模态增强:在生成多模态内容时,增强技术可以确保不同模态之间的一致性和相关性,以提供更丰富的用户体验。
- 实时更新:一些RAG系统具备实时更新的能力,可以从外部数据源获取最新信息,并及时反映在生成的文本中。这对于需要及时更新的任务非常重要。
增强技术的选择和应用取决于特定任务和应用场景的要求。通过合理利用增强技术,RAG系统可以提供更具洞察力和相关性的生成文本,从而提高用户满意度和系统的实用性。
5.3 RAG中的生成(Generation)
生成是检索增强生成(RAG)框架的另一个核心组件,它负责根据检索到的信息和用户查询生成最终的文本或回答。生成的质量和效果直接影响着RAG系统的性能和可用性。
以下是与生成相关的一些关键概念和技术:
- 生成模型:RAG系统通常使用生成模型来生成文本或回答。这些模型可以是预训练的语言模型(如GPT系列),也可以是其他生成模型。生成模型的选择取决于任务的要求和性能需求。
- 文本生成:生成模型将检索到的信息和用户查询转化为自然语言文本。生成文本的质量取决于模型的能力以及输入信息的准确性和相关性。
- 控制生成:一些RAG系统具备生成文本的控制能力,允许用户指定特定的风格、语气或其他要求。这提供了更高度定制化的生成能力。
- 多模态生成:一些高级RAG系统具备生成多模态内容的能力,包括图像、音频和视频。这拓展了RAG的应用领域。
- 对话生成:一些RAG系统用于对话生成,能够实现复杂的对话和多轮问答。这在聊天机器人和虚拟助手等应用中特别有用。
- 评估生成:生成的质量通常需要经过评估来衡量,以确保生成的文本准确、相关且合乎要求。评估方法和指标对于RAG系统的性能评估至关重要。
在RAG框架中,生成与检索和增强技术协同工作,以生成最终的输出。生成的能力和质量对于RAG系统的整体性能和用户体验至关重要。
6、RAG vs. Fine-Tuning
RAG(检索增强生成)与微调(Fine-Tuning)是两种不同的大型语言模(LLM)优化方法,它们在应用和效果上有所不同:
RAG与其他模型优化方法的比较:
RAG的优势:
- 更灵活的知识获取:RAG允许从外部数据源实时检索信息,因此可以获取最新的、领域特定的知识,而微调通常依赖于静态的预训练数据。
- 避免“幻觉”问题:RAG通过检索外部信息来验证生成的文本,可以减少生成不准确信息的问题,这在微调中可能更容易出现。
- 多模态支持:RAG可以轻松支持多模态内容的生成,包括文本、图像、音频等,而微调通常专注于文本生成。
微调的优势:
- 更高的一致性:微调通常可以生成更一致的文本,因为它基于预训练模型,而RAG的一致性取决于检索的准确性。
- 更广泛的应用:微调适用于各种自然语言处理任务,包括文本分类、命名实体识别、情感分析等,而RAG更侧重于生成任务。
- 训练效率:微调可以比RAG更高效,因为不需要在每个查询上进行检索操作。
总的来说,RAG和微调各有其优势和适用场景,RAG 的优势在于通用性、知识引用、即时性和可解释性,而微调在特定任务上可能更适用,但同时需要更多的任务特定数据和训练。选择使用哪种方法,应根据具体的应用需求和任务来决定。未来的发展可能会探索两种方法的结合,以充分利用它们的优势,并改进大型语言模型的性能。
7、RAG系统的评估
RAG(检索增强生成)系统的评估是确保其性能和效果的关键步骤。这里将介绍RAG系统的评估方法和指标,以帮助衡量其生成文本或回答的质量和相关性。
以下是与RAG评估相关的一些关键概念和方法:
- 生成质量评估:评估RAG生成的文本的质量是重要任务之一。常用的评估方法包括自动评估指标(如BLEU、ROUGE等)、人工评估和事实验证。这些方法可以帮助衡量生成文本的流畅性、准确性和相关性。
- 检索效果评估:评估RAG检索的效果是另一个关键方面。这包括检索的准确性、召回率和效率。检索效果的好坏直接影响生成文本的质量。
- 用户满意度评估:了解用户对RAG系统的满意度和体验也是重要的评估维度。这可以通过用户调查、用户反馈和用户交互数据来实现。
- 多模态评估:对于生成多模态内容的RAG系统,评估方法需要考虑不同模态之间的一致性和相关性。这可以通过多模态评估指标来实现。
- 实时性评估:对于需要实时更新的RAG任务,评估方法需要考虑信息更新的及时性和效率。
- 基准测试集:为了进行客观的评估,通常会使用基准测试集来进行实验和比较不同的RAG系统。这些基准测试集包含了多样化的任务和查询,以涵盖不同的应用场景。
评估方法和指标的选择取决于具体的任务和应用场景。综合使用多种评估方法可以更全面地了解RAG系统的性能和效果。评估结果可以指导系统的改进和优化,以满足用户的需求。
8、未来展望
RAG(检索增强生成)技术在不断发展和演进,未来有许多潜在的发展方向和前景。
- 挑战识别和解决:未来的研究可以致力于识别和解决RAG技术面临的挑战,特别是在知识检索、生成文本质量和多模态支持方面的挑战。这包括改进检索准确性、提高生成文本的一致性和深化多模态整合。
- 多模态扩展:随着多模态内容的需求不断增长,未来的研究可以探索如何更好地支持多模态生成,包括文本、图像、音频等。这涉及到跨模态信息的有效整合和生成技术的改进。
- 实时知识更新:对于需要及时更新的任务,未来的研究可以集中在如何实现实时知识检索和更新,以确保生成的文本始终保持最新和准确。
- 增强RAG生态系统:RAG技术的发展可以促进建立更加完善的RAG生态系统,包括更多的开源工具、资源和应用场景。这将有助于更广泛地推广和应用RAG技术。
- 融合知识图谱:未来的研究可以考虑如何更好地融合知识图谱等结构化知识源,以进一步提高RAG系统的性能和效果。
总的来说,RAG技术具有广阔的研究前景和应用前景。未来的研究将继续探索新的方法和技术,以不断改进和扩展RAG系统的功能和性能,从而更好地满足各种知识密集型任务和应用场景的需求。
参考论文:
- 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》
- 《Retrieval-Augmented Generation for Large Language Models: A Survey》
相关文章:
大语言模型落地的关键技术:RAG
1、什么是RAG? RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索ÿ…...
ffmpeg Android 笔记
目录 没有示例项目 编译好的.a文件 ffmpegandroid 延时有220ms rk官方有例子 ffmpeg Android 笔记 没有示例项目 编译好的.a文件 FFmpeg-Android/ffmpeg-android-aarch64-34/lib at main yhbsh/FFmpeg-Android GitHub ffmpegandroid 看到了音频解码器 FFmpegAndroid/a…...
本地创建新分支并提交gitee
初始化本地仓库 git init链接远程仓库 git remote add origin https://gitee.com/xxxxxxxxxxx提交本地代码(进行commit提交) git add . git commit -m "分支名"创建分支 git branch 分支名选择刚刚创建的分支 git checkout 分支名查看所选中的分支 git branch …...
[蓝桥杯 2019 国 C] 数正方形
[蓝桥杯 2019 国 C] 数正方形 题目描述 在一个 N N N \times N NN 的点阵上,取其中 4 4 4 个点恰好组成一个正方形的 4 4 4 个顶点,一共有多少种不同的取法? 由于结果可能非常大,你只需要输出模 1 0 9 7 10^9 7 1097 的…...
Redis: 配置文件详解(Redis.conf)
文章目录 一、Units二、INCLUDES三、NETWORK四、GENERAL五、SECURITY六、LIMITS 一、Units 单位,配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感 二、INCLUDES 包含,多…...
学习vue3第十四节 Teleport 内置组件介绍
<Teleport></Teleport> 作用目的: 用于将指定的组件或者元素传送到指定的位置; 通常是自定义的全局通用弹窗,绑定到 body 上,而不是在当前元素上面; 使用方法: 接收两个参数 to: 要将目标传…...
mybatis模糊查询查不到数据
排除SQL语句本身存在错误,字段名称不匹配,编码格式问题后,若使用%方式查询,一开始使用单引号查询不到数据,把改成",可以查询到数据 疑问:看别人的代码,使用单引号也可以查询到数据,原因未知...
Python语法总结:not(常出现错误)
0、not是什么 在python中not是逻辑判断词,用于布尔型True和False之前 a not Ture # a False b not False # b True1、not的用法 (1)判断语句 if not a:# 如果a是False,执行的语句(2)判断元素是否在…...
深入理解WebSocket:实时双向通信的利器
一、介绍 1.1 基础概念介绍 单工通信:数据传输只允许在一个方向上传输,只能一方发送数据,另一方接收数据并发送。半双工:数据传输允许两个方向上的传输,但在同一时间内,只可以有一方发送或接收数据。全双…...
Gateway是什么?(SpringCloudAlibaba组件)
1、网关介绍 **网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。**网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可…...
阿里巴巴拍立淘API新功能揭秘:图片秒搜商品,实现智能化个性化购物新体验
在数字化快速发展的今天,智能化和个性化已经成为购物体验中不可或缺的元素。为了满足消费者日益增长的购物需求,阿里巴巴中国站不断推陈出新,其中拍立淘API的新功能——图片秒搜商品,无疑为智能化个性化购物体验开创了新的篇章。 …...
蚓链为移动实体经济加油!
在当今数字化时代,数据已成为企业宝贵的资产之一。如何利用数据资产为可移动实体经济创造更多的增值机会呢?蚓链将为你揭示 11种行之有效的方法! 1. 个性化服务:根据客户数据,提供量身定制的产品和服务,满…...
MySQL 核心模块揭秘 | 12 期 | 创建 savepoint
回滚操作,除了回滚整个事务,还可以部分回滚。部分回滚,需要保存点(savepoint)的协助。本文我们先看看保存点里面都有什么。 作者:操盛春,爱可生技术专家,公众号『一树一溪』作者&…...
SpringMVC --- 老杜
1、什么是SpringMVC? SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的及部分,…...
详细介绍如何利用 A star(A*)算法解决8数码问题
文章目录 1. A star(A*)算法简介2. 利用A*解决8数码问题(含Python代码)2.1 什么是8数码问题2.2 A*算法中的开放列表和关闭列表2.3 A*算法解决8数码问题过程2.3.1 计算节点(棋盘顺序)间距离2.3.2 交换数字生成新的节点2.3.3 A*主求解程序1. A star(A*)算法简介 A ∗ A^*…...
如何锁定鼠标光标在水平、垂直或45度对角线模式下移动 - 鼠标水平垂直移动锁定器简易教程
在我们进行精细工作例如如创建图标和图形设计时,通常需要我们对鼠标移动进行精确控制。一旦向左或向右轻微移动,都可能导致设计出错。若出现不必要的错误,我们极有可能不得不重新开始,这会令人感到非常沮丧。这种情况下࿰…...
在 Docker 部署的 MySQL 容器内安装和使用 vim
在 Docker 部署的 MySQL 容器内安装和使用 vim 文章目录 在 Docker 部署的 MySQL 容器内安装和使用 vim步骤一:进入 MySQL 容器步骤二:更新软件源和安装 vim步骤三:验证 vim 安装步骤四:使用 vim 进行文件编辑步骤五:保…...
人工智能|深度学习——基于Xception实现戴口罩人脸表情识别
一、项目背景 近年来,随着人工智能技术的不断发展,人脸表情识别已经成为了计算机视觉领域中的重要研究方向之一。然而,在当前的疫情形势下,佩戴口罩已经成为了一项必要的防疫措施,但是佩戴口罩会遮挡住人脸的部分区域&…...
【HTML】简单制作一个动态3D正方体
目录 前言 开始 HTML部分 JS部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],JS的文件名改…...
Linux 常用指令及其理论知识
个人主页:仍有未知等待探索-CSDN博客 专题分栏:http://t.csdnimg.cn/Tvyou 欢迎各位指教!!! 目录 一、理论知识 二、基础指令 1、ls指令(列出该目录下的所有子目录和文件) 语法: …...
论文阅读——Sat2Vid
Sat2Vid: Street-view Panoramic Video Synthesis from a Single Satellite Image 提出了一种新颖的方法,用于从单个卫星图像和摄像机轨迹合成时间和几何一致的街景全景视频。 即根据单个卫星图像和给定的观看位置尽可能真实地、尽可能一致地合成街景全景视频序列。…...
js怎样判断status
相信大家都知道Switch开关吧,他有两种状态,通常用1/2表示,开启时为true,关闭时为false,那么我们该怎样判断他是否为开启还是关闭你? 我们可以声明一个变量,让它等于status,判断它是否等于1/2&…...
多态.Java
(1)什么是多态? 同类型的对象,表现出不同的形态。前者指父类,后者指不同的子类 说简单点,就是父类的同一种方法,可以在不同子类中表现出不同的状态,或者说在不同子类中可以实现不同…...
SSL根证书是什么
根证书是什么? 根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。 从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名&#…...
大模型量化技术-GPTQ
大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…...
NzN的数据结构--实现双向链表
上一章中,我们学习了链表中的单链表,那今天我们来学习另一种比较常见的链表--双向链表!! 目录 一、双向链表的结构 二、 双向链表的实现 1. 双向链表的初始化和销毁 2. 双向链表的打印 3. 双向链表的头插/尾插 4. 双向链表的…...
easyexcel-获取文件资源和导入导出excel
1、获取本地资源文件,根据模板填充数据导出 public void exportExcel(HttpServletResponse httpResponse, RequestBody AssayReportDayRecordQuery query) {AssayReportDayRecordDTO dto this.queryByDate(query);ExcelWriter excelWriter null;ExcelUtil.config…...
Android Monkey自动化测试
monkey一般用于压力测试,用户模拟用户事件 monkey 基本用法 adb shell monkey [参数] [随机事件数]monkey常用命令 -v:用于指定反馈信息级别,总共分三个等级-v -v -vadb shell mokey -v -v -v 100-s:用于指定伪随机数生成器的种…...
C++ //练习 11.20 重写11.1节练习(第376页)的单词计数程序,使用insert代替下标操作。你认为哪个程序更容易编写和阅读?解释原因。
C Primer(第5版) 练习 11.20 练习 11.20 重写11.1节练习(第376页)的单词计数程序,使用insert代替下标操作。你认为哪个程序更容易编写和阅读?解释原因。 环境:Linux Ubuntu(云服务…...
Nginx 安装与实践
目录 一、安装 Nginx1、先安装 Brew2、再安装 Nginx 二、常用的 Nginx 命令三、简单的 Nginx 配置四、查看日志的 Linux 命令1、查看日志的 Linux 命令2、实时查看项目运行时打印的日志 一、安装 Nginx 推荐使用 HomeBrew 来安装 Nginx。 1、先安装 Brew 详见:Home…...
a站app下载/网络销售好不好做
前言 大家都见过天美的游戏启动页,Tim…,一个自定义的序列帧动画,非常漂亮且流畅,但是显然,Unity本身不具备这个功能。虽然unity2017之后,添加了fade和dolly效果的启动页,但还是无法真正的自定义动态启动页,更别提加入自定义的gif或者帧动画了。 那么如何添加真正的序…...
wordpress本地化图片/seo常见优化技术
Oracle-用户权限与管理目标:1,掌握建立用户、概要文件的使用2,掌握系统权限的含义及授予、回收3,掌握对象权限的含义及授予、回收4,掌握角色的含义、对角色授予权限、把角色分配给用户Oracle 11g默认用户SYS:用于维护系…...
做网站签到挣钱吗/开鲁网站seo免费版
C或者C基本上是按照从上到下、从左至右的顺序来读。但对于指针声明从某种意义上来讲是倒着的。 C或者C中每个声明都由两部分组成:零个或者多个声明说明符,一个或者多个用逗号隔开的声明符。 const 1.类型说明符表明声明符ID的类型;其他说明符…...
中国公司网/手机优化管家
感谢原作者,原文链接 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们…...
计算机网站建设是什么意思/深圳高端网站建设公司
1.重启电脑,按FnF2,进入BIOS 2.然后在BOOT选项下的BOOT MODE选legacy support,USB BOOT选ENADLED, 3.保存重启后按FnF12...
广告传媒公司排名/百度地图排名怎么优化
一、前言本文介绍Java线程相关知识(不包括线程同步线程通信,这个内容在笔者的另一篇博客中介绍过了),包括:线程生命周期、线程优先级、线程礼让、后台线程、联合线程。二、线程生命周期2.1 引子:线程生命周期本节阐述线程生命周期…...