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

谷歌发布Self-Debug方法,让大模型学会自己修bug,一次性生成正确代码

55164d943659986bfd1666a6215b1661.png

文 | 智商掉了一地

你有没有想过,让一台计算机诊断和修复自己生成的错误代码?一篇最新的研究论文介绍了一种名为 Self-Debugging 的技术,通过在生成的代码中添加自解释的信息,让计算机像一个可以自己修复代码的程序员一样调试自己的 BUG。

随着大型语言模型(LLMs)在代码生成领域的不断发展,取得了令人瞩目的性能。然而在面对复杂的编程任务时,一次性生成正确的解决方案变得越来越具有挑战性。为了解决这一问题,先前的研究提出了一些代码修复方法来改善代码生成性能。而在本篇论文中,作者提出了一种名为 Self-Debugging 的方法,通过少量示范来教大型语言模型调试它所生成的代码。

该研究表明,Self-Debugging 方法可以教大型语言模型进行橡皮鸭调试,即在没有任何关于代码正确性或错误信息的反馈的情况下,通过自然语言解释生成的代码来识别其错误,这种方法对于提升代码生成性能具有潜在的巨大价值。

为了验证 Self-Debugging 方法的有效性,作者在多个代码生成基准测试上进行了实验,包括文本到 SQL 生成、C++ 到 Python 翻译和文本到 Python 生成。该方法不仅在提升预测准确性方面表现出色,同时还在样本效率上获得了显著的改进,通过利用反馈信息和重用失败的预测,能在样本效率上具有优势,并且在与生成超过 10 倍候选代码的基线模型相比时,能够取得匹敌甚至超越的表现。

综上所述,这篇文章提出的 Self-Debugging 方法为解决复杂编程任务中代码生成困难的问题提供了一种新颖且有效的解决方案。这一研究将为解决复杂编程任务中代码生成的难题带来了新的可能性,对推动大型语言模型在代码生成领域的应用和发展提供了有力支持。

论文题目
Teaching Large Language Models to Self-Debug

论文链接
https://arxiv.org/abs/2304.05128


背景探索

近期的大型语言模型在生成代码方面有了显著的改进,但生成正确的代码仍然具有挑战性。研究表明从模型中采样多个程序时,选择最佳候选程序的准确性更高。即使对于人类程序员来说,第一次编写的代码并不总是正确的,他们通常会检查代码并根据执行结果更改来解决实现错误。因此,该研究提出了一种名为 Self-Debugging 的方法,通过执行生成的代码并基于代码和执行结果生成反馈信息,来引导模型进行调试

不同于需要额外模型训练的方法,Self-Debugging 通过代码解释来指导模型识别实现错误,类似于人类程序员通过逐行向橡皮鸭解释代码行来提高调试效率的方法。图 1 展示了 Self-Debugging 的完整过程。

在每一步调试中,模型首先生成新的代码,然后执行该代码并解释,代码解释和执行结果构成了反馈信息,然后将反馈信息发送回模型以执行更多的调试步骤。当单元测试不可用时,反馈可以完全基于代码解释。

7966e6eacfa314c9fc580f924ec4e9f0.png
▲图1 使用大型语言模型进行迭代调试的 Self-Debugging

生成代码的 Prompt 技术

Few-shot prompting

Few-shot prompting 是一种通过几个输入-输出演示来指导语言模型完成任务的方法。以文本到 SQL 生成为例,few-shot 提示在感兴趣的问题前面加上(question, SQL)对的列表,这样当模型被要求预测给定提示后的后续 token 时,它会按照提示的格式生成 SQL 查询语句。图 2 展示了一个示例的提示。此外,这种方法还可以在提示中添加指令来提供高级任务描述

fb47f62b647c7358550c4bc88be3f26b.png
▲图2 文本到 SQL 生成的示例

基于执行的代码选择

先前的研究表明,对于大型语言模型,在解码过程中生成多个预测结果可以显著提高性能,特别是在代码生成任务中,可以利用代码执行结果来选择最终的预测结果。有以下两种方法:

  • 使用执行结果的多数投票来选择最终的预测结果;

  • 设计重新排序方案来提高性能。

在本研究中,当存在多个预测结果时,遵循第一种方法,选择在执行时没有遇到错误的预测中具有最频繁执行结果的代码,并对其应用 Self-Debugging。一些代码生成任务伴随着单元测试,以指定程序的执行行为。在问题描述中给出单元测试时,执行基于多数投票的选择之前,会先过滤掉未通过单元测试的程序。

Self-Debugging 框架

图 1 展示了 Self-Debugging 迭代调试框架,使用未经微调的预训练大型语言模型。在给定问题描述后,模型首先预测候选程序,然后推断程序的正确性,并生成反馈信息以进行后续的调试步骤。当反馈信息表明预测结果是正确的,或者达到了允许的最大调试轮数时,调试过程终止。

现有的研究表明,语言模型可以通过训练来理解人类对代码的反馈,并根据指令进行修正。然而,目前尚不清楚语言模型是否能够在没有人类辅助的情况下自行进行调试。在接下来的讨论中,将探讨如何利用代码执行和 few-shot 提示来生成不同类型的自动获取和生成的反馈信息

通过简单反馈进行 Self-Debugging

最简单的自动反馈形式是一句话,仅指示代码的正确性,没有更详细的信息。例如,在文本到 SQL 生成任务中, few-shot 提示会依据正确或错误结果为所有 SQL 查询提供反馈信息:

  • “上面的SQL预测是正确的!”

  • “上面的 SQL 预测是错误的,请修正 SQL。”

使用单元测试进行 Self-Debugging(UT)

对于包含单元测试的代码生成任务,除了通过代码执行来检查代码的正确性外,还可以在反馈信息中呈现单元测试的执行结果,从而为调试提供更丰富的信息。图 5 的示例包含了代码翻译任务的单元测试反馈信息。通过检查运行时错误消息和未通过的单元测试的执行结果,可以帮助人类程序员更有效地进行调试。实验结果表明,利用单元测试可以显著提高调试性能。

通过代码解释进行 Self-Debugging(Expl.)

尽管大型语言模型在生成批评性反馈方面取得了一些进展,以避免生成有害的输出并在自然语言和推理任务中提高性能,但先前的研究尚未在代码生成任务中验证了反馈的有效性。然而,研究表明大型语言模型可以生成描述问题解决方案的文本和代码。基于这一启示,提出了一种新方法,即通过解释生成的代码来教模型进行自我调试,而不是教它预测错误消息。这种调试过程类似于程序员通过向橡皮鸭逐行解释代码来进行调试。研究验证了即使在没有单元测试的情况下,大型语言模型也可以从这种调试方法中获益

应用

文本到 SQL 生成

在文本到 SQL 生成任务中,使用 Self-Debugging 方法旨在评估大型语言模型的性能,如图 3 所示。由于缺乏单元测试,模型更难推断预测的 SQL 查询的正确性。

a0528bc01c07c1b6a4d9cbf0f89ecb63.png
▲图3 用于生成文本到 SQL 的 Self-Debugging 提示示例

调试过程包括三个步骤:

  1. 首先,模型通过提示对问题进行总结,并推断问题所需的返回类型,即对应 SQL 查询表的列数。

  2. 其次,模型执行 SQL 查询并将返回的表格添加到输入中,以进行代码解释。生成的 SQL 解释包括对每个子句的详细描述、包含在返回表格中的列数以及完整 SQL 查询的高层含义。如果返回表格超过两行,只有前两行包含在提示中。

  3. 最后,模型将推断的 SQL 解释和问题描述进行比较,并预测当前 SQL 查询的正确性。Self-Debugging 过程在第三步中认为 SQL 查询是正确的,或者达到最大的调试轮数时终止。

这种方法使得模型能够通过对生成的 SQL 查询进行解释和比较,从而自我调试并预测 SQL 查询的正确性。可以有望提高模型在文本到 SQL 生成任务中的性能,并弥补缺乏单元测试的限制。

代码翻译

在实验中,TransCoder 数据集包含了不同编程语言中的平行函数以及单元测试的测试集。根据先前研究的方法,将 Self-Debugging 应用于将 C++ 代码翻译成 Python 代码的任务,并且使用了相同的测试集,包含 560 个问题和每个问题 10 个单元测试,问题描述包括了 C++ 代码和所有单元测试,如图 4 所示。

4d333601a18cea0a1a88aa15c83cdd4d.png
▲图4 TransCoder 数据集中的一个示例。问题描述包含 C++ 程序和单元测试,并且需要该模型来预测 Python 程序。

由于单元测试的可用性,研究人员只在预测的 Python 代码未通过所有单元测试时才应用 Self-Debugging 技术,这样模型就不需要预测反馈信息。如图 5 所示,他们迭代地应用 Self-Debugging 技术,直到预测的代码通过了所有单元测试,或模型达到了预设的最大调试轮数。

e03845459b4e54a547945eb8612d2a22.png
▲图5 用于代码翻译的 Self-Debugging 提示的示例。左侧是模型预测,右侧包含基于代码执行的输入 C++ 代码和反馈消息。

文本到 Python 生成

在问题描述中包含了部分单元测试,MBPP 数据集包含了 500 个 Python 问题的文本描述,每个问题都包含3个单元测试。作者在提示中包含问题描述中的第一个单元测试,并将剩余的2个单元测试保留以进行完整的评估。与代码翻译类似,可以在反馈信息中利用单元测试的执行结果,但主要的区别在于,即使预测的 Python 代码通过了给定的单元测试,模型仍然需要推断代码的正确性。

实验

这里对实验部分将不再赘述,作者在所有 Self-Debugging 的实验中,使用贪婪解码来生成代码解释、反馈信息和新的程序,并将最大调试轮数设置为 10。实验证明,成功的调试过程通常在 3 轮内结束。

7f9ae09620e6c3e586aab5d87b3b724f.png
▲表1 用于文本到 SQL 生成的 Spider 数据集的准确性
1afb8682d84f41299ae880ac9b2f3ccf.png
▲表2 TransCoder 数据集的准确性。其中所有非调试的方法都使用贪婪解码,而 Self-Debugging 方法则用 Codex 预测进行调试
1b40b7dde6a4cfed0f7d636bc28296bd.png
▲表3 用于文本到 Python 生成的 MBPP 数据集的准确性

在表格 1、2 和 3 中,作者展示了 Self-Debugging 与现有方法的比较结果:

  • 由于没有可用的单元测试,仅有简单的反馈并不能改善性能,因为模型无法仅通过少量的示例区分正确和错误的 SQL 查询,并且不能对初始预测的 SQL 查询进行有意义的修改。

  • 简单的反馈利用了执行结果来推断代码的正确性,即使执行信息没有在反馈信息中呈现给模型。因此简单的反馈仍然改进了模型的预测性能。

  • 对于所有任务,模型从更丰富的反馈信号中受益。尤其是代码解释使得模型可以在没有单元测试的情况下进行 Self-Debugging

在消融实验中,作者主要指出以下几点:

文本到 SQL 生成

d69a4f905318e54ad914924ce02e019f.png
▲图6 Spider 开发集的消融研究。(a)使用不同数量的初始样本进行准确度。(b)不同难度等级问题的细分精度。
  • 通常情况下,一个调试轮次已经足够。这些结果强调了利用大型语言模型解释代码进行调试的优势

  • 在图 6b 中进一步展示了不同难度级别问题上的准确性细分情况,其中每个问题的难度在数据集中根据目标 SQL 查询的复杂性进行了注释。在不同难度级别的问题上,Self-Debugging 对于较难的问题改进更加显著

  • 解决难题的能力:特别是在额外困难问题上,Self-Debugging 将准确性提高了 9%。图 7 展示了一个额外困难问题中,Self-Debugging 修复了预测的 SQL 查询的例子。

fa4a00ed0486980641b611e41a1934b6.png
▲图7 Spider 基准测试中的一个例子

代码翻译

3ec52aaa9058cf9cb42f9b7aa942fb84.png
▲图8 TransCoder 消融研究
  • 图 8a 展示了不同调试轮次上的准确性,图 8b 展示了不同初始样本数量上的准确性。

  • 将单元测试执行和代码解释结合起来可以提高调试性能,在图 9 和图 10 中展示了这些例子。

  • 如图 8b 所示,单独利用代码解释而不进行 Self-Debugging 也可以在不同数量的样本上提供一致的性能提升。

661dc3712a99fb2dc64149352abccc9e.png
▲图9 通过单元测试反馈进行 Self-Debugging 修复了代码翻译错误,而简单的反馈方法则未能成功
3a1d193eea425d344d718e3cfa7b7dc2.png
▲图10 带有代码解释的翻译会正确地检查字符串的末尾

文本到 Python 生成

7a74d2a360cb9e7ae428d530e497d39a.png
▲图11 在 MBPP 上的一个例子,Self-Debugging 后的预测与初始代码有很大差异
  • 发现在初始预测代码与正确解之间差距较大时,代码解释的作用较小,此时模型更倾向于生成新的程序而不是依赖于初始预测中的代码片段。在图 11 中展示了一个例子,其中 Self-Debugging 后的预测代码与初始代码差异很大。

小结

本文介绍了 Self-Debugging 技术,它使得大型语言模型能够自行调试所生成的代码,该方法使模型能够进行橡皮鸭子调试,从而使模型能够在没有人类指导的情况下识别和修复错误。在多个代码生成领域,它实现了最先进的性能,并且显著提高了样本效率。

在文本到 SQL 生成任务中,由于该任务没有指定单元测试,利用代码解释进行 Self-Debugging 以及在最困难的问题上可以始终有好效果。对于代码翻译和文本到 Python 生成任务,在有单元测试可用的情况下,Self-Debugging 准确性提高了多达 12%。

本工作强调了通过教大型语言模型迭代来自己调试预测的方法,从而改进其编码性能的潜力,而非要求模型从零开始生成正确的代码。Self-Debugging 指导模型理解代码、识别错误,并根据错误信息修复错误。

未来的研究方向可以包括进一步提高模型在调试过程中的能力。例如:

  • 探索让模型更好地描述代码的高级语义含义和实现细节,从而提高其代码解释能力。

  • 考虑在模型的反馈中包含更多的调试信息(例如潜在错误的描述),以提供更加丰富的指导。

相信这些改进将进一步推动大型语言模型在编码任务中的性能提升,并在实际应用中发挥更大的潜力。若是有朝一日,用大模型的问答工具准确地辅助我们写代码,少了焦头烂额 Debug 的内耗时刻,岂不美哉?

596c4a37c3d82048668e17948b66153f.png

卖萌屋作者:智商掉了一地

北理工计算机硕士在读,近期沉迷于跟 ChatGPT 唠嗑,对一切新颖的 NLP 应用充满好奇,正在努力成为兴趣广泛的斜杠青年~

作品推荐

  1. 我是粉红猪佩奇,我要把粉色吹风机写进 IJCAI 论文!

  2. AI取代人类,可以自动生成prompt了

  3. ICLR 2023 最高分论文被锤抄袭??

  4. AI讲话总爱“结巴”?这篇NeurIPS论文找到了病因,结巴率已接近人类!

  5. 如何提升大规模Transformer的训练效果?Primer给出答案

  6. Yoshua Bengio:我的一生

0f6dce08d741c18b1b6b95dd19d158cf.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

相关文章:

谷歌发布Self-Debug方法,让大模型学会自己修bug,一次性生成正确代码

文 | 智商掉了一地你有没有想过,让一台计算机诊断和修复自己生成的错误代码?一篇最新的研究论文介绍了一种名为 Self-Debugging 的技术,通过在生成的代码中添加自解释的信息,让计算机像一个可以自己修复代码的程序员一样调试自己的…...

行为型模式-模板方法

行为型模式-模板方法 模板方法(Template Method)解决算法框架问题描述适用环境优点:缺点:违反原则:代码实现模板方法(Template Method) 解决算法框架问题 描述 定义了一个算法的骨架,并将某些步骤延迟到子类中进行实现,从而使得算法的具体实现能够在子类中自由变化…...

正则表达式识别日期

正则表达式识别日期 正则表达式识别各种格式的日期 import redef extract_dates(text):# 正则表达式&#xff0c;用于识别常见的日期格式date_pattern r"""(?P<date>(?P<year_only>\d{4}(?![\d年]))| # …...

如何设计一个秒杀架构设计?

文章目录 1. 秒杀业务的特点2. 总体思路2.1 削峰限流安全保护页面优化,动静分离异步处理热点分离2.2 Nginx的设计细节2.3 页面优化细节降低交互的压力安全控制2.4 Redis集群的应用分布式悲观锁(参考redis悲观锁的代码)异步处理订单2.5 消息队列限流2.6 数据库设计2.7 答题验…...

Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置&#xff0c;甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值&#xff0c;但在将应用程序投入生产之前自定义配置是必不可少的。 在这里&#xff0c;我们将介绍属于不同类别的一些属性&#xff0c;并讨…...

消息中间件Kafka分布式数据处理平台+ZooKeeper

目录 一.消息队列基本介绍 1.为什么需要消息队列&#xff08;MQ&#xff09; 2.使用消息队列的好处 2.1 解耦 2.2 可恢复性 2.3 缓冲 2.4 灵活性 & 峰值处理能力 2.5 异步通信 3.消息队列的两种模式 3.1 点对点模式 3.2 发布/订阅模式 二.Kafka基本介绍 1.Kaf…...

Linux 用户文件磁盘网络进程指令

用户相关指令 useradd 用户名添加用户useradd -g 组名 用户名 向组添加用户passwd 用户名 设置密码id 用户名 查看用户名的具体信息cat /etc/passwd 查看创建了哪些用户su 用户名 切换用户名&#xff08;不能获得环境变量&#xff09;su - 用户名获得环境变量以及执行权…...

如何使用Socks5代理IP提高网络安全性

随着网络的快速发展&#xff0c;网络安全问题变得越来越重要。为了保障网络安全&#xff0c;人们普遍使用代理IP&#xff0c;其中Socks5代理IP是一种常用的选择。本文将介绍什么是Socks5代理IP&#xff0c;以及如何使用它提高网络安全性。 一、什么是Socks5代理IP Socks5代…...

《Java8实战》第3章 Lambda 表达式

利用行为参数化来传递代码有助于应对不断变化的需求。它允许你定义一段代码块来表示一个行为&#xff0c;然后传递它。采用匿名类来表示多种行为并不令人满意&#xff1a;代码十分啰唆&#xff0c;这会影响程序员在实践中使用行为参数化的积极性。 3.1 Lambda 管中窥豹 可以…...

开放式耳机的颠覆之作!南卡OE Pro新皇降临!佩戴和音质双重突破

千呼万唤的南卡OE Pro终于要在最近正式官宣上线&#xff0c;此消息一经放出&#xff0c;蓝牙耳机市场就已经沸腾。NANK南卡品牌作为国内的音频大牌&#xff0c;发展和潜力一直备受业内关注&#xff0c;这次要上线的南卡OE Pro更是南卡十余年来积累的声学技术结晶之一。 据透露…...

生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]

文章目录概念相关图示代码示例框架中的应用场景多个生成器&#xff08;Concrete Builder&#xff09;&#xff1a;单个生成器概念 生成器设计模式&#xff08;Builder Design Pattern&#xff09;是一种创建型设计模式&#xff0c;用于处理具有多个属性和复杂构造过程的对象。生…...

JUC并发工具

JUC并发工具 一、CountDownLatch应用&源码分析 1.1 CountDownLatch介绍 CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。 如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了。 需要一个并发安全的计数器来操作。 CountDown…...

java面试题-基础问题-如何理解Java中的多态?

如何理解Java中的多态&#xff1f;如何理解Java中的多态&#xff1f;典型回答扩展知识方法的重载与重写重载和重写的区别如何理解Java中的多态&#xff1f; 典型回答 多态的概念比较简单&#xff0c;就是同一操作作用于不同的对象&#xff0c;可以有不同的解释&#xff0c;产…...

03.vue3的计算属性

文章目录1.计算属性1.get()和set()2.computed的简写3.computed和methods对比2.相关demo1.全选和反选2.todos列表1.计算属性 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以&#xff0c;对于任何…...

Ceph性能调优

1. 最佳实践 1.1 基本 监控节点对于集群的正确运行非常重要&#xff0c;应当为其分配独立的硬件资源。如果跨数据中心部署&#xff0c;监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半。理想情况下&#xff0c;应该在不同磁盘上运行操作系统、OSD…...

机器学习-问答题准备(英文)-更新中

第一章 入门 How would you define Machine Learning? Machine Learning is about building systems that can learn from data. Learning means getting better at some task, given some performance measure. Can you name four types of problems where it shines? To r…...

展示演示软件设计制作(C语言)

展示演示软件设计制作 所谓展示演示软件就像是PPT那样的东西。PPT是幻灯片式的展示&#xff0c;而我设计的软件是多媒体的&#xff0c;多样展示方法的&#xff0c;多种功能的。可以扩展为产品展示&#xff0c;项目介绍&#xff0c;景点导游&#xff0c;多媒体授课&#xff0c;…...

Android 自定义view 入门 案例

自定义一个圆环进度条&#xff1a; 1.首页Android Studio创建一个项目 2.在项目src/xxx/目录下右键选择创建一个自定义view页面&#xff1a;new->UICompoent->customer view 3.输入自定义名称&#xff0c;选择开发语言 4.确定之后&#xff0c;自动生成3个文件一个是&…...

[imangazaliev/didom]一个简单又快速的DOM操作库

DiDOM是一个功能齐全、易于使用和高性能的解析器和操作库&#xff0c;可以帮助PHP开发者更加高效地处理HTML文档。 为了更好地了解这个项目&#xff0c;我们先来看看下面的介绍。 安装 你可以使用composer来安装DiDOM&#xff0c;只需要在你的项目目录下执行下面的命令&…...

Cookie和Session的工作流程及区别(附代码案例)

目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的&#xff1f; 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…...

R 语言科研绘图 --- 热力图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)

题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots , a_n a1​,a2​,⋯,an​ 且 a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 ai​≥ai−1​>0。小明必须先后跳跃到每个检查…...

Redis最佳实践——安全与稳定性保障之访问控制详解

Redis 在电商应用的安全与稳定性保障之访问控制全面详解 一、安全访问控制体系架构 1. 多层级防护体系 #mermaid-svg-jpkDj2nKxCq9AXIW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jpkDj2nKxCq9AXIW .error-ico…...

Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)

Apache Maven 是一款广泛应用于 Java 项目的项目管理和构建工具。 本文提供在 Windows、Linux 和 macOS 系统上安装与配置 Maven 的详细步骤&#xff0c;旨在帮助开发者快速搭建高效的构建环境。 一、前置条件&#xff1a;安装 Java Development Kit (JDK) Maven 依赖于 Java …...

1.测试过程之需求分析和测试计划

测试基础 流程 1.分析测试需求 2.编写测试计划 3.设计与编写测试用例 4.执行测试 5.评估与总结 测试目标 根据测试阶段不同可分为四个主要目标&#xff1a;预防错误&#xff08;早期&#xff09;、发现错误&#xff08;开发阶段&#xff09;、建立信心&#xff08;验收阶段&a…...

JS逆向案例—喜马拉雅xm-sign详情页爬取

JS逆向案例——喜马拉雅xm-sign详情页爬取 声明网站流程分析总结 声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&am…...

【OpenHarmony】【交叉编译】使用gn在Linux编译3568a上运行的可执行程序

linux下编译arm64可执行程序 一.gn ninja安装二.交叉编译工具链安装1.arm交叉编译工具2.安装arm64编译器 三. gn文件添加arm及arm64工具链四.编译验证 本文以gn nijia安装中demo为例&#xff0c;将其编译为在arm64(rk_3568_a开发板)环境下可运行的程序 一.gn ninja安装 安装g…...

在Linux环境里面,Python调用C#写的动态库,如何实现?

在Linux环境中&#xff0c;Python可以通过pythonnet&#xff08;CLR的Python绑定&#xff09;或subprocess调用C#动态库。以下是两种方法的示例&#xff1a; 方法1&#xff1a;使用pythonnet&#xff08;推荐&#xff09; 前提条件 安装Mono或.NET Core运行时安装pythonnet包…...

【Linux 基础知识系列】第三篇-Linux 基本命令

在数字化浪潮席卷全球的当下&#xff0c;操作系统作为计算机系统的核心组件&#xff0c;扮演着至关重要的角色。而 Linux&#xff0c;凭借其卓越的性能、高度的稳定性和出色的可定制性&#xff0c;在服务器、嵌入式系统、超级计算机以及个人计算机等领域大放异彩&#xff0c;成…...

文件服务端加密—minio配置https

1.安装openssl 建议双击安装包默认安装&#xff0c;安装完成之后配置环境变量 如下图则配置成功&#xff1a; 二、生成自签名CA证书及私钥 1、生成私钥 openssl genrsa -out private.key 20482、生成自签名证书 &#xff08;1&#xff09;编写openssl.conf文件&#xff0c;…...