text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》
《The Dawn of Natural Language to SQL: Are We Fully Ready?》(github)出自2024年6月的NL2SQL(Natural language to SQL )综述论文。这篇论文尝试回答如下三个问题:
问题1:NL2SQL的现状是什么?(Q1:Where Are we Now?)
-
论文图1总结了近20年NL2SQL方法的演变,从基于规则的方法,基于深度神经网络的方法,基于预训练模型(PLMs)的方法,演变到了基于大语言模型的方法(LLMs)。
-
论文图2比较了PLM-based NL2SQL方法(蓝色的点)和LLM-based NL2SQL方法的在Spider数据集上的准确率对比,这个图表明在2023年2月时两者的准确率差不多,但是随着LLM的演进,两者的差距逐渐拉大。
问题2: LLM-based方法是完胜者吗?(Are LLM-based Models the clear Winner?)。
基于论文图2,我们就能得出结论说LLM-base方法就是NL2SQL应用的唯一选择了吗?
考虑一下传统BI(Business Intelligence)场景,有如下特点:
- 不同的数据领域(Various Data Domains), BI平台如Tableau通常有不同的数据领域如电影和运动,每个数据域涉及到不同的schemas和术语。理想的NL2SQL必须能够在不同的领域有泛化效果且满足即席查询要求。
- 复查的SQL操作(Complex SQL operations),实际应用通常包括复杂SQL查询如多个JOIN操作,嵌套查询,聚合函数等。所以NL2SQL模型需要能够生成复杂的SQL查询语句。
- 新语言表述(New Linguistic Phenomena),对于同一个查询意图,不同的用户可能会用不同缩写、问题风格、同义词来提出自然语言问题。所以NL2SQL模型需要准确地理解自然语言问题描述的变化。
论文图3比较了SOTA PLM-based和LLM-based方法在上面提出的三个BI应用特点上的执行准确率,结果表明没有任何一个模型或方法能够在所有应用特点上都是最优的。
问题3:能够组合PLM-based和LLM-based方法并设计出一个super NL2SQL模型吗?(Q3: Can we combine the best of both worlds and design a super NL2SQL model?)。
NL2SQL定义:设 N \mathcal{N} N是一个自然语言问题, D \mathcal{D} D是一个有n个表的关系数据库。NL2SQL就是基于 N \mathcal{N} N和 D \mathcal{D} D生成一个SQL查询 Q \mathcal{Q} Q。
论文表1归纳了一些PLM-based和LLM-basedNL2SQL模型和它们包含的关键组件(后面会介绍各个组件)。
论文作者认为之前的NL2SQL的实验和评估有如下几个限制:
- 忽视了使用场景:通常只有在整个基准数据集如Spider数据集上整体的评估,缺少在数据子集上进行详细比较(参考论文图3)
- 缺少直接和综合比较:没有在已有基准和自建数据集上的系统比较。
- NL2SQL设计空间的有限探索:缺少对LLM-based和PLM-based模块框架设计空间的探索,就限制了对它们协同使用来解决NL2SQL的理解。
为了解决这些现有限制,论文提出了一个测试平台(testbed),NL2SQL360,如论文图4所示,一共包含6个关键模块。
-
基准数据集(Benchmark Datasets): 包括被广泛使用的基准Spider, BIRD , Spider-Realistic, Dr.Spider , KaggleDBQA, WikiSQL。
-
模型动作园(Model Zoo):包括在Spider和BERT排行榜上领先的模型,主要是LLM-based和PLM-based模型。
-
数据集过滤器(Dataset Filter):引入数据集过滤机制,将基准数据集划分成不同的子集。
- 场景1:SQL复杂度(SQL Complexity)。通过复杂度来区分SQL,从简单的SQL到有多个条件和子句的复杂SQL。分类标准与Spider一致,主要评估不同的NL2SQL方法能否处理不同难度的SQL。
- 场景2:SQL特色(SQL Characteristics)。检查SQL是否使用了如JOIN操作、子查询、聚合函数等特性。主要评估NL2QL能否处理不同的SQL功能。
- 场景3:数据领域(Data Domain)。在不同的数据领域如金融、健康或零售来探索NL2QL的表现。主要评估NL2SQL领域相关的能力和限制。
- 场景4:查询语句变化测试(Query Variance Testing)。测试在自然语言查询不同的短语描述和结构下NL2QL的鲁棒性和灵活性。
-
评估指标(Evalutation Metrics):
-
Execution Accuracy (EX),与Spider一样
-
Exact Match Accuaracy (EM),与Spider一样
-
Valid Efficiency Score (VES),评估生成可用SQL的效率,与BIRD一样。用预测SQL执行时间除以标准SQL执行时间。
-
Query Variance Testing(QVT),论文新提出的指标用来评估模型在不同形式的自然语言查询上的适应性有多好。给定一个SQL查询 Q i Q_i Qi,它对应着多个自然语言查询语句,记为 { ( N 1 , Q i ) , ( N 2 , Q i ) , … , ( N m , Q i ) } \{(N_1, Q_i),(N_2, Q_i),\ldots,(N_m, Q_i) \} {(N1,Qi),(N2,Qi),…,(Nm,Qi)},在评估模型时,这些自然语言查询与SQL对中至少有一个被模型正确处理。QVT准确率的定义如下:
Q V T = 1 M ∑ i = 1 M ( ∑ j = 1 m i 1 ( F ( N i j ) = Q i ) m i ) Q V T=\frac{1}{M} \sum_{i=1}^M\left(\frac{\sum_{j=1}^{m_i} \mathbb{1}\left(\mathcal{F}\left(N_{i j}\right)=Q_i\right)}{m_i}\right) QVT=M1i=1∑M(mi∑j=1mi1(F(Nij)=Qi))
上式中M是测试集中SQL查询的总数, m i m_i mi是每个SQL查询 Q i Q_i Qi对应的自然语言查询语句形式数目。 F ( N i j ) \mathcal{F}(N_{ij}) F(Nij)表示NL2SQL模型对 Q i Q_i Qi的第 j j j个自然语言查询语句形式生成的SQL查询。 1 ( ⋅ ) \mathbb{1}(\cdot) 1(⋅) 是指示函数,如果两个sql相等则返回1否则返回0。
-
-
执行器和日志(Executor and logs):用户可以定制NL2SQL模型的评估流程,设置超参数和评估指标。测试平台会在测试基准如Spider上自动运行这些模型并对输出进行记录。
-
评估器(Evaluator):利用日志中的数据,评估器自动生成量化评价,以表格或者排行榜的形式来展示这些结果。
论文的实验
实验设置:
-
数据集:以Spider 和 BIRD作为实验数据集,分别包括1034和1054个(NL, SQL)对。BIRD数据集的SQL结构和数据库都更复杂,统计信息如论文表格2。
-
NL2SQL方法:评估了开源的LLM-based和PLM-based NL2SQL 方法。
-
比较了4种基于prompt的LLM-based方法
- (1) DINSQL:将SQL语句的生成分解成不同的子问题,对每个子问题使用不同prompt让GPT-4生成最终的SQL语句。
- (2) DAILSQL:在prompt中将问题和数据库schema表示成代码风格,通过结构(骨架)相似性和问题相似性来选择few-shot例子。这些元素作为prompt来指导GPT-4生成SQL。
- (3) DAILSQL(SC):用Self-Consistency (SC)策略进行后处理的DAILSQL版本。
- (4) C3SQL用了schema linking过滤和calibration bias prompt让GPT-3.5来生成sql,也用了Self-Consistency (SC)策略进行后处理。
-
比较了9中基于微调的LLM-based方法
- (5-8) SFT CodeS (1B/3B/7B/15B):CodeS是在SQL相关语料集上对StarCoder进行增量预训练得到的模型,在Spider或BIRD数据集上对CodeS进行指令微调(SFT)得到SFT CodeS,一共有四个不同大小的版本。
- (9) Llama2-7B
- (10) Llama3-8B
- (11) StarCoder-7B: StarCoder是用GitHub上有许可的数据训练得到的Code LLM,训练数据包括超过80种编程语言的代码,Git mommits, GitHub issues, Jupyter notebooks。
- (12) CodeLlama-7B
- (13) Deepseek-Coder-7B: 在项目级代码语料上训练,用fill-in-the-blank任务来提升代码补全能力。
-
比较了7中PLM-based 方法
- (1) Graphix-3B+PICARD,用T5-3B加上graph-aware来进行SQL生成,并用PICARD解码来提升性能。
- (2-4) RESDSQL(Base/Large/3B),用ranking-enhanced编码和skeleton-aware解码将schema linking从骨架解析中分离。
- (5-7) RESDSQL(Base/Large/3B)+NatSQL, 用NatSQL来提升RESDSQL的性能。
-
指标,包括Exact Match Accuracy (EM), Execution Accuracy (EX), Query Variance Testing (QVT), Valid Efficiency Socre (VES), Token Efficiency, Latency。
评估准确性的实验
如下的每一个实验对应着一个实验发现。
- Exp-1: Accuracy vs. SQL Complexity。评估了前面提到的所有方法在Spider和BIRD测试集上改变SQL复杂度时的准确率。论文表3和表4是实验结果,将EX的SOTA结果用橙色标记,EM的SOTA结果用蓝色标记。(注意RESDSQL在BIRD测试集上从头训练了,但没有因为缺少源码没有包括NatSQL)
- LLM-based方法在不同难度的SQL数据子集上的EX指标都超过了PLM-based方法。在表4中,DAILSQL(SC)方法可能受益于GPT-4d的推理能力在Challenging子集上超过了SFT CodeS 15B。
- 表格3中微调之后的LLM-based方法普通性能要比prompt-based LLM方法的EM指标更好。在微调之后,LLM-based和PLM-based模型的输出更接近数据集的数据分布,使它们输出与数据集更相似的SQL结构。
- 发现1:微调是提高性能的重要策略,微调后的LLM-based方法在EX指标上普遍取得最好的结果,微调后的PLM-based在EM指标上总体而言表现最好。
- Exp-2: Accuracy vs. SQL Characteristics。将SQL查询按照四个标准来分类:(1) 子查询的存在,(2)逻辑连接符的个数 (3) ORDER BY的个数 (4) JOIN的数据。在这四个SQL查询子集上测试模型并计算EX指标。论文图5显示了在Spider和BIRD数据集上EX表现分布。论文图6和图7是详细结果。
- Exp-2.1: #-Subquery。如图6和图7所示,所有方法在包括子查询的SQL上都表现最差。图5显示没有子查询时,LLM-based方法在Spider数据集上比PLM-based方法好一点点,而在BIRD数据集上好很多。而有子查询的场景下,LLM-based方法在两个数据集上表现都好很多。因为带子查询的SQL要求模型先考虑子查询再生成整个SQL,对模型的推理能力要求很高。在LLM-based方法中,用prompt GPT-4方法效果更好,超过了基于微调的LLM-based方法和PLM-based方法,表明模型的内在推理能力对处理带子查询的SQL很重要。
- 发现2:在SQL子查询场景下,LLM-based方法总体超过PLM-based方法,用GPT-4的基于prompt的LLM-based方法表现最好,模型的内在推理能力对处理带子查询的SQL可能很关键。
- Exp-2.2: #-Logical Connector。没有逻辑连接符时,LLM-based方法在Spider数据集上没有超过PLM-based方法,在更复杂的BIRD数据集上LLM-based方法是领先的。当有逻辑连接符时,LLM-based方法在两个数据集上都超过PLM-based方法。
- 发现3:在逻辑连接符是必需的场景下,LLM-based方法比PLM-based方法更好。
- Exp-2.3: #-JOIN。在不带JOIN的SQL场景下,LLM-based方法和PLM-based方法在两个数据集上表现还是不一致,没有完胜者。在带JOIN的SQL场景下,LLM-basd方法在两个数据集上都比PLM-based方法更好,可能是因为JOIN操作需要理解数据库schame,而LLM因为其上下文理解能力而获胜。 在图6中,用了NatSQL的DINSQL和RESDSQL-3B+NatSQL的方法在它们对应的模型类别中都是表现最好的,说明使用NatSQL可能会使带JOIN的SQL场景更简单。
- **发现4:**在带JOIN操作的SQL场景中,LLM-based方法比PLM-based方法更好。用NatSQL作为中间表示可减少预测JOIN操作的复杂度并提升模型性能。
- Exp-2.4: #-ORDER BY。在没有ORDER BY语句时,LLM-based方法比PLM-based方法更好;在有ORDER BY语句时,LLM-based方法在Spider数据上的性能更差。
- 发现5:在有ORDER BY的SQL场景下,LLM-based方法的性能在不同数据集中变化,普遍来说,LLM-based方法的泛化性更好。
- Exp-3: Query Variance Testing。
-
Exp-3: Query Variance Testing。基于Spider Dev数据集构建了QVT数据集并根据前面QVT的公式计算得分。实验结果如下图所示,LLM-based方法和PLM-based方法没有赢家。但是微调LLM-based方法比prompt LLM-based的的QVT得分更高,可能因为微调之后对数据分布进行了对齐。Graphix+PICARD方法在EX上比所有prompt-based方法低,但是在QVT上超过了它们。
-
发现6: 在QVT对比上,LLM-based方法和PLM-based方法没有赢家,用任务相关数据集微调模型可能使模型在自然语句变化上表现得更稳定。
-
Exp-4: Database Domain Adaption。将Spider训练集里的140个数据库和开发集的20个数据库划分为33个领域。将基于微调的LLM-based方法和PLM-based方法在测试集上进行训练。论文图9是实验结果。图9(a)表明不同的方法在不同领域表现不一样,LLM-based和PLM-based方法里没有赢家。图9(b)表明在有更多数据集的领域(College,Competition,Transportation)微调方法表现更好,相反地,在有更少训练数据的领域,prompt-based方法表现更突出。
-
发现7:不同的方法在不同领域表现不一样,LLM-based和PLM-based方法里没有赢家。在特定领域,微调过程中的可用领域训练数据对模型性能很关键。
-
Exp-5: Supervised Fine-tuning of LLM-based Methods。验证了开源LLM经过指令微调之后在NL2SQL任务上的表现。采用的prompt与DAILSQL类似,如论文图10所示,比较的LLM大小都为7B,实验结果如论文图11所示,经过SFT之后,不同模型的EX指标都有提升但是提升效果不同。在模型固有的编码能力与SFT前后性能提升大小存在正相关。
-
发现8:在对开源 LLM 进行 NL2SQL 任务的监督微调 (SFT) 后,SFT 后的性能与 SFT 之前模型固有的编码能力呈正相关。这表明具有高级编码能力的基础 LLM 对于适应 NL2SQL任务非常重要。
评估效率的实验
如下的每一个实验对应着一个实验发现。
-
Exp-6: Economy of LLM-based Methods。论文表5比较了LLM-based方法消耗的平均token上和花费(美元)。
-
发现9:调用GPT-3.5-turbo模型的的prompt-based LLM NL2SQL方法有更高的性价比(cost-effectiveness)。尽管DAIL-SQL(SC)比DAIL-SQL在Spider和BIRD数据集上的EX都有提升,但是它的费用更高降低了其性价比。
-
Exp-7: Efficiency of PLM-based Methods。在Spder开发集上比较了RESDSQL-Base/Large/3B 和 RESDSQL-Base/Large/3B + NatSQL的执行准确度(EX),每个样本的latency,GPU内存使用指标。结果如论文表6。
- 发现10:对同一种方法,模型参数越多相应的latency和硬件资源要求都会增加。相似性能的方法在latency和硬件资源要求上是不一样的。
- Exp-8: SQL Efficiency - Valid Efficiency Score。NL2SQL方法在Spider和BIRD数据集上的VES如论文表7所示,最好的结果用橙色颜色标注。
- 发现11:在VES指标上,LLM-based方法和PLM-based方法没有赢家,对于同一种方法,在更高难度的子集上有更低的VES得分。
-
Exp-9: The Impact of the #-Training Samples。比较在不同数目训练样本,各个模型的表现,结果如图12所示,模型效果随着训练数目增加而提升,在大概4000样本左右时可实现可接受的性能。
-
发现12:PLM-based和LLM-based方法的性能都随着训练数据的增加而提升,但是边际效应会递减,也就是随着数据大小增加EX性能增益减小。如果有数据隐私忧虑或充足的标注数据,微调LLM/PLM是一个好选择。
将基于语言模型的NL2SQL方法的设计空间总结如论文图13所示(前面论文表1总结了每种方法按照这个框架定义的组件)。
- 预处理(Pre-Processing):预处理模块主要包括schema linking 和DB contents。Schema linking 将自然语言查询与数据库schema元素关联,可提升跨领域泛化性和复杂查询生成,LLM-based和PLM-based方法都会使用Schema linking。DB contents模块将查询条件与数据库内容对齐,通常通过字符串匹配来丰富列细节;DB contents方法在PLM-based方法中很流行,但是很少被LLM-based方法使用。
- promp策略(Prompting Strategy):Prompt策略分为zero-shot和few-shot,zero-shot在模型输入里不包括NL2SQL例子,few-shot在模型输入中包括NL2SQL例子,根据例子的个数不同,记为"3-shot"、"5-shot"等。如论文表1显示PLM-based方法基本上使用zero-shot,而LLM-based方法有些使用zero-shot,有些使用few-shot。DINSQL的few-shot例子是人工设计且固定的,而DAILSQL是基于查询问题与训练集例子的相似度来动态选择的。
- SQL生成策略(SQL Generation Strategy):在生成SQL时,语言模型会使用多种策略,将其归类为如下三种。
- Multi-Step:主要指COT(Chain-of-Thought)过程,对于复杂查询很有效,主要包括两种类型的策略:PLM-based方法RESDSQL使用的"SQL skeleton-SQL"和LLM-Based方法DINSQL使用的"Subquery-SQL"。
- Decoding Strategy:在模型的解码过程中进行约束保证输出的有效性。PLM-Based方法PICARD在输出时强制SQL语法规则,但是利用OpenAI接口的LLM-based方法缺少解码时的限制。
- Intermediate Representation:试图通过中间查询(intermediary query)来解决自然语言到SQL翻译过程中的不匹配问题(mismatch problem, 指关系数据库的SQL设计与自然语言语义不一致)。论文只考虑NatSQL。
- 后处理(Post-Processing):包括如下策略。
- Self-Correction。出自DINSQL,将生成的SQL提供给模型来修复潜在的问题。
- Self-Consistency。对单个自然语言问题生成不同的SQL查询,用投票机制来决定最后的SQL。C3SQL和DAILSQL使用了它。
- Execution-Guided SQL Selector。执行模型生成的SQL,将第一个执行成功的SQL作为可用SQL。
- N-best Rerankers。将多个候选SQL查询排序,将最可能的一个作为最后的结果。
接下来论文尝试基于NL2SQL360设计一种算法NL2SQL360-AAS来选择NL2SQL设计空间里的组件来得到一个最优的NL2SQL方法,算法基于遗传算法(Genetic Algorithm(GA)),如论文图14所示。
由NL2SQL360-AAS搜索得到了一个名为SuperSQL的算法,这个算法在之前的实验中表现出了很高的准确率和效率。SuperSQL的各个组成部分如下:
- 预处理:使用了RESDSQL的schema linking方法和BRIDGE v2的DB Contents。prompt如论文图15.
- prompt:使用DAILSQL的通过相似度来选择few-shot思路。
- SQL生成:仅使用OpenAI接口里的贪心解码(Greedy-decoding)。
- 后处理:使用DAILSQL的Self-Consistency。
相关文章:

text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》
《The Dawn of Natural Language to SQL: Are We Fully Ready?》(github)出自2024年6月的NL2SQL(Natural language to SQL )综述论文。这篇论文尝试回答如下三个问题: 问题1:NL2SQL的现状是什么?(Q1:Where Are we Now?) 论文图1总结了近20年NL2SQL方法…...

【滑动窗口】一题讲透滑动窗口!
🚀个人主页:一颗小谷粒 🚀所属专栏:力扣刷题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1.1 题目要求 1.2 算法图解分析 1.3 代码实现 1.4 时间复杂度分析 1.5 算法思想总结 1.1 题目要…...

嵌入式通信原理—SPI总线通信原理与应用
文章目录 SPI 简介基本原理工作模式特点 SPI寻址方式1. 片选(Chip Select, CS)2. 多从设备通信3. 菊花链(Daisy-Chain)模式4. 地址寄存器(应用层) SPI通信过程时钟信号生成(SCLK)数据…...

基于web的 BBS论坛管理系统设计与实现
博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…...

【Scala入门学习】Scala的方法和函数
1. 方法 在scala中的操作符都被当成方法存在,比如说、-、*、/ 12就是1.(2)的调用, 2.0 是doule类型,强调用Int类型的写法为1.(2:Int) 1.1 方法的声明和使用 定义方法的语法: def 方法名([变量:变量类型ÿ…...

【JVM】概述
前言 Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架(如Spring、MyBatis等)构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富&…...

鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
鸿蒙开发笔记整理,方便以后查阅! 由于上班较忙,只能抽空闲暇时间,快速整理更新中。。。 登录页面跳转到我的页面、并传值 效果图 我的设置页面 /*** 我的设置页面*/ import CommonConstants from ./CommonConstants import ItemData from ./ItemData import DataModel fr…...

clip论文阅读(Learning Transferable Visual Models From Natural Language Supervision)
目录 摘要训练pre-train model的过程将pre-train model应用于下游任务应用(待更新) 论文/项目地址:https://github.com/OpenAI/CLIP 提供了clip的pre-trained model的权重,也可安装使用pre-trained model 摘要 使用标签标注的图…...

用于图像分割的协 SMA Transformer:同多注意力转换器 !
在医学图像分割中,基于注意力机制和卷积神经网络的Transformer在提高性能方面起到了重要作用。然而,早期的模型往往在分割小而形状不规则的肿瘤时表现不佳。 为此,作者提出了一种基于SMA架构(Synergistic Multi-Attention…...

lodash中_.difference如何过滤数组
_.difference(array, [values]) 作用: 创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array 参数)排除了给…...

关于C# 数据库访问 转为 C++ CLI 数据库访问
Db_.cs 与 csharp_db.h功能是一样的。 Db_.cs /**************************************************************************************** 创建时间 :2006年12月19日文件名 :Db_.cs功能 :数据库…...

百度移动刷下拉词工具:快速出下拉词的技术分析
都2024年了,你还在做SEO百度下拉?答案当然是肯定的,虽然百度的搜索流量不如从前,但移动端的流量依然是巨大的!除了百度SEO快排以外,下拉也是一大流量入口,尤其是在移动端搜索的流量越来越大时&a…...

学习笔记-Golang中的Context
文章目录 1、什么是Context2、Context的作用3、Context的解析3.1、Context的源码解析3.2、 context包中实现context接口的四种结构体类型3.2.1、emptyCtx3.2.2、cancelCtx3.2.3、timerCtx3.2.4、valueCtx 4、总结 1、什么是Context Context是 Go 语言中的一个标准库࿰…...

ArrayList 源码解析
ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承自AbstractList并实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同…...

libgit2编译
1. 源码下载 libgit2源码下载 2. 编译要求 CMake下载 CMake教程 3. 编译步骤 Prerequisites Make sure CMake on your %PATH% Build Create a build directory beneath the libgit2 source directory, and change into it: mkdir build && cd buildCreate the …...

mac新手入门(快捷键)
系统常用快捷键 基本操作 Command-Z 撤销Command-X 剪切 Command-C 拷贝(Copy) Option Shift Command V 纯文本拷贝 Command-V 粘贴 Command-A 全选(All)Command-S 保存(Save) Command-F 查找࿰…...

curl 的使用详解
curl 是一个非常强大的命令行工具,用于通过各种协议(如 HTTP、HTTPS、FTP 等)传输数据。它广泛应用于测试 API、下载文件、调试网络请求等。 下面是 curl 常用功能的详解及示例: 基本语法 curl [options] [URL]1. 基本请求 发起…...

从基础到进阶:利用EasyCVR安防视频汇聚平台实现高效视频监控系统的五步走
随着科技的飞速发展,视频监控技术在社会安全、企业管理、智慧城市构建等领域扮演着越来越重要的角色。一个高效智能的视频监控管理系统不仅能够提升监控效率,还能在预防犯罪、事故预警、数据分析等方面发挥巨大作用。 一、需求分析 在设计视频监控管理…...

CORS漏洞及其防御措施:保护Web应用免受攻击
1. 背景- 什么是CORS? 在当今互联网时代,Web 应用程序的架构日益复杂。一个后端服务可能对应一个前端,也可能与多个前端进行交互。跨站资源共享(CORS)机制在这种复杂的架构中起着关键作用,但如果配置不当&…...

C语言自定义类型结构体(24)
文章目录 前言一、结构体类型的声明结构体回顾结构体的特殊声明结构体的自引用 二、结构体的内存对齐对齐规则为什么存在内存对齐?修改默认对齐数 三、结构体传参四、结构体实现位段什么是位段位段的内存分配位段的跨平台问题位段的应用位段使用的注意事项 总结 前言…...

补题篇--codeforces
传送门:Problem - 1881C - Codeforces 题目大意: 思路: 首先解决这个问题要知道 一个 ( x , y ) 顺时钟旋转 90 , 180 , 270可以得到 ( y , n - x 1 ) , ( n - x 1 , n - y 1 ) ,( n - y …...

【字幕】恋上数据结构与算法之015动态数组03简单接口的实现
我们先来看一下,不要着急啊大家不要着急,这些东西我肯定会一点一点会给大家去实现,最终实现到跟Java官方版本差不多,只要我们自己实现了,偶尔类似的,你会发现你倒回去看Java官方的那个源码,你会…...

基于2023年网络赛赛题了解OpenCv
一、OpenCv图像读取与显示 1.图像的读取与显示 cv.imread() 图像读取,第一个参数是照片的位置一般是完整路径,第二个参数是指定图片输出的样式 cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。(默认模式)。cv.I…...

你到底更适合买虚拟主机还是服务器?
前言 在当今数字化的时代,选择合适的网络服务平台对于个人和企业来说至关重要。无论是搭建个人博客、运营企业网站还是开发游戏,服务器的选择都会直接影响到项目的成本、性能以及用户体验。那么,你到底适合虚拟主机还是服务器呢?…...

linux手册翻译 addr2line
名称 addr2line 将地址转换为文件名和代码行数 简介 addr2line [-a|--addresses][-b bfdname|--targetbfdname][-C|--demangle[style]][-r|--no-recurse-limit][-R|--recurse-limit][-e filename|--exefilename][-f|--functions] [-s|--basename][-i|--inlines][-p|--pretty-…...

python-素数中的等差数列
题目描述 质数是在数论中很有意思的数,有很多题都可以围绕它来出,就如你眼前所见的这道题。 给定一个闭区间 [a,b] ,将此范围内的所有素数进行从小到大排序,对于连续的素数,我们可以发现很多等差数列(元素个数大于等于 3 )&#x…...

Unity3D 服务器AStar寻路客户端位置同步显示验证详解
在游戏开发中,经常需要在服务器和客户端之间同步玩家的位置信息,以便其他玩家可以看到他们的移动。本文将详细介绍如何在Unity 3D中使用AStar算法进行路径规划,并在服务器和客户端之间同步玩家的位置信息。 对惹,这里有一个游戏开…...

无人机之悬停精度篇
无人机的悬停精度是指无人机在无GPS信号或其他外部定位辅助下,能够保持在一个固定空间位置时的精度。这一精度受到多种因素的影响,包括但不限于风速、气压、温度、湿度以及无人机自身的姿态稳定性等。以下是对无人机悬停精度的详细分析: 一、…...

力扣题解2848
大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(简单): 与车相交的点 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] &…...

电子电气架构---智能汽车应该是怎么样的架构?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…...