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

腾讯云 AI 代码助手:单元测试应用实践

引言

在软件开发这一充满创造性的领域中,开发人员不仅要构建功能强大的软件,还要确保这些软件的稳定性和可靠性。然而,开发过程中并非所有任务都能激发创造力,有些甚至是重复且乏味的。其中,编写单元测试无疑是最令人头疼的任务之一,它虽然对于验证软件组件是否按预期工作至关重要,但其编写过程却常常让开发人员感到枯燥和疲惫。

理想的情况是,开发人员在编写代码的同时编写单元测试。但是编写单元测试是软件开发中的繁琐工作,会占用开发人员大量时间。并且开发人员在手动编写复杂代码库的单元测试时可能会犯错。因此,很多软件缺乏足够的单元测试,这使得代码难以维护。如果没有单元测试,出现问题后定位问题就如同大海捞针,这不仅增加了维护成本,也降低了软件的可靠性。

在这样的背景下,AI 代码助手应运而生,它通过大模型辅助生成代码来减轻开发人员在单元测试编写上的负担,提高开发效率,同时确保软件质量。它将如何帮助开发人员克服单元测试的挑战,是我们接下来要探讨的主题。

一、    单元测试概述

单元测试专注于程序中的最小可测试单元,这通常包括函数、类的方法或模块等。其核心目的是确保这些基本单元能够正确执行特定的功能,并妥善处理各种边界条件和异常情况。单元测试的目的是确保这些基本组成单元按照预期工作,能够正确地执行特定的功能,并且能够妥善处理各种边界条件和异常情况。

单元测试一般情况下需要符合如下特点:

  • 自动化:单元测试由开发人员编写,并使用自动化测试框架运行,能够快速反馈测试结果,提高测试效率。
  • 隔离性:每个单元测试独立运行,将被测试单元与其他代码隔离,确保测试的准确性和可靠性。
  • 针对性:每个测试用例都针对代码中一个具体的、明确的行为,确保测试的精确性和有效性。
  • 重复性:单元测试可以频繁重复运行,尤其是在代码修改后,以确保新修改没有引入错误。
  • 及时反馈:单元测试能够快速发现错误并定位问题,提高开发效率和软件质量。

单元测试一般会包含以下类型:

  • 函数测试:验证函数或方法在给定输入下是否返回预期的输出。这包括测试各种正常的输入值,以确保函数按照预期工作
  • 边界条件测试:测试函数或方法在输入值达到边界或极限情况下的行为。例如,对于一个接受整数输入的函数,边界条件测试应该包括测试最小值、最大值、以及接近最小值和最大值的数值。这可以帮助发现函数在处理极端情况时的错误
  • 异常处理测试:测试函数或方法在遇到异常情况(例如无效输入、错误参数或资源不足)时的行为。这包括测试函数是否能够正确地处理异常,并返回适当的错误信息或采取相应的补救措施
  • Mock 测试:使用模拟对象来代替真实的依赖项(例如数据库连接或外部API),从而隔离被测单元,并确保测试结果的可靠性。这对于测试依赖于外部资源的函数或方法非常有用,因为它可以避免测试结果受到外部因素的影响
  • 数据驱动测试:使用一个数据表来驱动测试用例的执行。测试用例的输入数据和预期输出数据都存储在数据表中,测试程序会读取数据表中的数据,并自动执行测试用例。这可以减少测试代码的冗余,并提高测试效率,尤其是在需要测试大量不同输入值的情况下

 在实际的开发场景中,需要结合业务的真实需求,选择合适的测试类型,来确保代码质量和功能正确性。

二、 AI 在单元测试中的应用

腾讯云 AI 代码助手是腾讯云自研的一款开发编程提效辅助工具,它通过插件的方式集成到编辑器中,辅助编程工作。这款工具能够在开发人员编写代码的同时提供智能建议,自动生成代码片段,甚至可以根据函数生成对应的单元测试。以下是腾讯云 AI 代码助手在单元测试中的应用实践:

代码补全与单元测试生成: 腾讯云 AI 代码助手基于上下文理解,能够自动推荐最可能的代码片段,包括方法调用、变量声明、循环结构等。此外,它还能根据现有代码结构,自动生成对应的单元测试案例,确保代码变更时功能的稳定性。

可以通过对话框中的 /test 生成单元测试,或者使用 IDE 编码区域中使用每个功能方法的快捷键“生成测试”来生成该方法的单元测试。

多轮对话优化测试用例: 开发者可以通过多轮对话,告诉 AI 更多的信息,让生成的单元测试内容更符合业务预期。例如,可以指定业务边界条件、特殊的异常处理逻辑、数据处理方式等。

对于生成的内容,如果有额外的测试场景需求,可以通过对论对话追加提问。

AI 代码助手的对话模型会识别用户意图结合上下文对话内容优化单元测试结果。

一键应用单元测试内容: 通过对话框结果中的快捷按钮,如“应用”、“插入到 IDE”等,开发者可以快速判断与接受生成的单元测试代码。

可以选择“应用”按钮,将对话生成的结果,作用到对应的代码文件中。

可以在 IDE 编码区域看到“应用”这部分代码对于当前代码文件的修改情况,让研发人员快速识别到改动,快速判断与接受。

通过这些应用功能,我们可以看到腾讯云 AI 代码助手在单元测试中的强大能力,它不仅提高了开发效率,还帮助确保了软件的质量和稳定性。

三、实际编码案例解析

 针对业务代码准确生成单元测试

在真实的开发场景中,软件的功能都是异常复杂的,一个完整的软件功能有多个类、方法共同组成。以 Java 开发为例,一个功能的开发,可能由 类的定义、Controller 控制层的方法、Server 接口定义、ServiceImpl 接口实现类方法、Repository 和 DTO 等等部分组成。在生成单元测试的时候,需要考虑到真实业务中的各个组件关联性。

以上图这个 Java 工程为例,我们需要 AI 帮我们准确生成接口实现类 EstateServiceImpl.java 中的查询和模糊查询方法对应的单元测试代码。

我们选中 getEstates 和 getEstatesContainingText 方法之后,使用 /test 为其生成单元测试代码。在结果中可以看到,腾讯云 AI 代码助手在生成单元测试的时候,会分析代码的工程结构,并在生成的时候智能 import 相关依赖;在生成测试代码的时候,会结合其他文件中的类和方法定义生成测试计划,并准确构造测试数据。

将生成的单元测试内容,插入到指定单元测试文件中,可以直接执行 mvn test 命令进行单元测试验证,可以看到这里生成的代码可以编译通过,并完成单元测试功能

结合业务逻辑逐步完善测试结果

  在真实的业务开发过程中,有很多测试场景都是隐晦的,它的逻辑可能并没有直接定义在代码内容中,而是需要结合实际需求而定。这种场景下,需要研发人员使用对话功能告诉 AI 代码助手这里的业务测试逻辑,继而完善测试代码。

 

  如上图所示,我们可以通过多轮对话能力,继续输入真实业务场景,丰富测试的边界条件,让 AI 持续优化单元测试结果。

我们将生成的扩展内容应用到之前的单元测试代码中,并执行下这里生成的最终结果,可以看到执行成功。

四、AI 单元测试的优势

从上文的实际单元测试生成场景中可以看到,腾讯云 AI 代码助手可以准确的生成单元测试代码,在技术上,腾讯云 AI 代码助手采用了两个核心优势技术,让生成的单元测试结果更准确。

 应用上采用 AST 语法树解析技术,让 AI 更理解项目工程,生成结果更符合业务逻辑

在单元测试过程中,最小可测试的工作单元一般为 函数、方法、类、接口等,工作单元的结果包含:返回值、系统状态更改、调用第三方服务。一般情况下,工作单元的结果为以上三种的一种,或者三种的组合。

在实际的项目中,我们的测试单元很可能存在对外部的依赖,而单元测试的独立性原则要求测试用例应该要独立运行的,即我们只需要保证被测试的单元内部逻辑正确即可,不需要真正依赖外部资源,因此我们最重要的事情是识别依赖。

腾讯云 AI 代码助手,通过 AST 语法树解析技术,在生成单元测试的时候,不单单只将单元测试的功能代码给到模型,还会结合 AST 获取功能代码背后的依赖代码,比如文件I/O操作、HTTP接口调用、RPC调用、对数据库或者消息队列等资源的请求代码。将这些依赖代码给到大模型,可以有效理解软件工程的业务逻辑,也可以结合这些依赖代码,在生成单元测试的时候,自动生成准确有效的Mock、stub、fake 等数据。

模型上针对各类主流的单元测试框架进行了增量训练,可自动识别各类主流单测框架

在单元测试场景下,各主流的编码语言都有对应的单元测试框架,不通框架的单元测试代码逻辑有一定区别。腾讯云 AI 代码助手,支持根据现有单元测试代码自动识别对应的单元测试框架,在生成的时候可以遵循当前项目已有框架生成。同时,腾讯云 AI 代码助手也针对业界主流的单元测试框架进行了增量训练,优化单元测试的生成效果。

五、未来展望

虽然腾讯云 AI 代码助手目前可以做到针对单个方法/单个文件的单元测试生成,但还是依赖研发人员的对于此功能的主动使用与探索,并且当前 AI 生成代码还存在一些局限性:

只能做到片段式生成,多个代码文件之间需要联动测试的场景,覆盖度一般

生成结果比较比较随机,多次运行的结果可能差异较大

腾讯云 AI 代码助手即将推出批量单元测试执行能力,旨在帮助开发者以最小成本有效提升单测覆盖率。

 

项目级别的批量单元测试生成,需要强大的基础模型能力,包括:支持丰富的上下文、模型对于代码工程的理解和推理能力、模型的反思能力等;同时对于业务代码本身需要非常标准规范,注释清晰、逻辑明确。代码解耦较好,代码可测性较强。单元测试最终仍需要技术人员进行确认,研发需要理解模型生成的单测结果,并配合模型不断提升单测效率。

六、总结

总结来说,腾讯云 AI 代码助手结合腾讯混元大模型的功能,已经在单元测试领域展现出了显著的价值,它不仅提高了开发效率,还帮助确保了软件的质量和稳定性。随着技术的不断进步,AI 在单元测试中的应用将更加广泛和深入,为软件开发带来更多的便利和创新。

相关文章:

腾讯云 AI 代码助手:单元测试应用实践

引言 在软件开发这一充满创造性的领域中,开发人员不仅要构建功能强大的软件,还要确保这些软件的稳定性和可靠性。然而,开发过程中并非所有任务都能激发创造力,有些甚至是重复且乏味的。其中,编写单元测试无疑是最令人…...

ArcGIS栅格影像裁剪工具

1、前言 在最近的栅格转矢量处理过程中,发现二值化栅格规模太大,3601*3601,并且其中的面元太过细碎,通过arcgis直接栅格转面有将近几十万的要素,拿这样的栅格数据直接运行代码,发现速度很慢还难以执行出来结…...

VueWordCloud标签云初实现

文章目录 VueWordCloud学习总结安装初使用在组件中注册该组件简单使用项目中实现最终实现效果 VueWordCloud学习总结 本次小组官网的项目中自己要负责标签模块,想要实现一个标签云的效果,搜索了很多,发现vue有一个VueWordCloud库&#xff0c…...

AI数据分析工具(二)

豆包-免费 优点 强大的数据处理能力: 豆包能够与Excel无缝集成,支持多种数据类型的导入,包括文本、数字、日期等,使得数据整理和分析变得更加便捷。豆包提供了丰富的数据处理功能,如数据去重、填充缺失值、转换格式等…...

sizeof和strlen区分,(好多例子)

sizeof算字节大小 带\0 strlen算字符串长度 \0之前...

求100之内的素数-多语言

目录 C 语言实现 方法 1: 使用 for 循环 方法 2: 使用埃拉托斯特尼筛法 方法 3: 使用自定义判断素数 Python 实现 方法 1: 使用自定义函数判断素数 方法 2: 使用埃拉托斯特尼筛法(Sieve of Eratosthenes) 方法 3: 使用递归方法 Java 实现 方法…...

0.shell 脚本执行方式

1.脚本格式要求 🥑脚本以 #!/bin/bash 开头 🥦 脚本要有可执行权限 2.执行脚本的两种方式 🥬 方式1:赋予x执行权限 🥒 ​​​​​​​方式2: sh执行 ​​​​​​​...

Web实时通信@microsoft/signalr

概要说明 signalr 是微软对 websocket技术的封装; build() 与后端signalR服务建立链接;使用 on 方法监听后端定义的函数;ps:由后端发起,后端向前端发送数据使用 invoke 主动触发后端的函数;ps:由前端发起&a…...

智截违规,稳保安全 | 聚铭视频专网违规外联治理系统新品正式发布

“千里之堤,毁于蚁穴”。 违规外联作为网络安全的一大隐患, 加强防护已刻不容缓。 这一次, 我们带着全新的解决方案来了 ——聚铭视频专网违规外联治理系统, 重磅登场!...

博弈论算法详解与Python实现

目录 博弈论算法详解与Python实现第一部分:博弈论简介与算法概述1.1 博弈论概述1.2 博弈论算法概述第二部分:纳什均衡算法2.1 纳什均衡的定义2.2 纳什均衡算法的实现2.2.1 算法思路2.2.2 Python实现2.2.3 设计模式分析第三部分:囚徒困境问题的博弈论算法3.1 囚徒困境的定义3…...

Python学习笔记之IP监控及告警

一、需求说明 作为一名运维工程师,监控系统必不可少。不过我们的监控系统往往都是部署在内网的,如果互联网出口故障,监控系统即使发现了问题,也会告警不出来,这个时候我们就需要补充监控措施,增加从外到内的…...

2024/11/30 RocketMQ本机安装与SpringBoot整合

目录 一、RocketMQ简介 1.1、核心概念 1.2、应用场景 1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收 4.1、添加maven依赖 4.2、yaml配置 4.3、生产者 4.4、消费者 4.5、接口 4.6、接口测试 一、R…...

解决“磁盘已插上,但Windows系统无法识别“问题

电脑上有2块硬盘,一块是500GB的固态硬盘,另一块是1000GB的机械硬盘,按下开机键,发现500G的固态硬盘识别了,但1000GB的机械硬盘却无法识别。后面为了描述方便,将"500GB的固态硬盘"称为X盘&#xf…...

解决vue3,动态添加路由,刷新页面出现白屏或者404

解决vue3,动态添加路由,刷新页面出现白屏或者404 1.解决出现刷新页面,出现404的情况 1.问题的出现 在做毕设的时候,在权限路由得到时候,我问通过router**.**addRoute(item)的方式,在路由守卫动态添加路由…...

大数据新视界 -- 大数据大厂之 Hive 数据质量监控:实时监测异常数据(下)(18/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

可视化建模以及UML期末复习篇----相关软件安装

作为一个过来人&#xff0c;我的建议是别过来。 一、可视化建模 <1>定义: 官方&#xff1a;一种使用图形符号来表示系统结构和行为的建模技术。 我&#xff1a;其实说白了就是把工作流程用图形画出来。懂不&#xff1f; <2>作用: 提高理解和分析复杂系统的能力。促…...

Flask项目入门—request以及Response

导入 request&#xff08;请求&#xff09;以及Response&#xff08;响应&#xff09;通过flask导入&#xff0c;如下&#xff1a; from flask import Blueprint, request, render_template, \jsonify, make_response, Response, redirect, url_for, abort request&#xff…...

【VUE3】【Naive UI】<n-button> 标签

【VUE3】【Naive UI】&#xff1c;n-button&#xff1e; 标签 **type**- 定义按钮的类型&#xff0c;这会影响按钮的颜色和样式。**size**- 设置按钮的大小。**disabled**- 布尔值&#xff0c;控制按钮是否处于禁用状态。**loading**- 布尔值&#xff0c;表示按钮是否处于加载状…...

接口测试工具:reqable

背景 在众多接口测试工具中挑选出一个比较好用的接口测试工具。使用过很多工具&#xff0c;如Postman、Apifox、ApiPost等&#xff0c;基本上是同类产品&#xff0c;一般主要使用到的功能就是API接口和cURL&#xff0c;其他的功能目前还暂未使用到。 对比 性能方面&#xff…...

autoware.universe源码略读(3.20)--perception:radar_tracks_msgs_converter

autoware.universe源码略读3.20--perception:radar_tracks_msgs_converter Overviewradar_tracks_msgs_converter_node Overview 这里看起来是非常简单的一个模块&#xff0c;作用就是把radar_msgs/msg/RadarTracks类型的消息数据转换到autoware_auto_perception_msgs/msg/Tra…...

【论文阅读】Multi-level Semantic Feature Augmentation for One-shot Learning

用于单样本学习的多层语义特征增强 引用&#xff1a;Chen, Zitian, et al. “Multi-level semantic feature augmentation for one-shot learning.” IEEE Transactions on Image Processing 28.9 (2019): 4594-4605. 论文地址&#xff1a;下载地址 论文代码&#xff1a;https:…...

说说Elasticsearch查询语句如何提升权重?

大家好&#xff0c;我是锋哥。今天分享关于【说说Elasticsearch查询语句如何提升权重&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说说Elasticsearch查询语句如何提升权重&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…...

jeecgbootvue2重新整理数组数据或者添加合并数组并遍历背景图片或者背景颜色

想要实现处理后端返回数据并处理&#xff0c;添加已有静态数据并遍历快捷菜单背景图 遍历数组并使用代码 需要注意&#xff1a; 1、静态数组的图片url需要的格式为 require(../../assets/b.png) 2、设置遍历背景图的代码必须是: :style"{ background-image: url( item…...

Vue-常用指令-02

目录 Vue常用指令 实操 v-bind、v-model v-bind v-model 总结 v-on 总结 ​编辑 v-if、v-show v-if v-show 总结 v-for 总结 综合案例 ​编辑 Vue常用指令 Vue指令:在HTML文件或者HTML标签中涉及的带有v-..的指令都是Vue的指令。不同指令不同含义不同作用。v-…...

ESLint 配置文件全解析:格式、层叠与扩展(3)

配置文件系统处于一个更新期&#xff0c;存在两套配置文件系统&#xff0c;旧的配置文件系统适用于 v9.0.0 之前的版本&#xff0c;而新的配置文件系统适用于 v9.0.0之后的版本&#xff0c;但是目前还处于 v8.x.x 的大版本。 配置文件格式 在 ESLint 中&#xff0c;支持如下格…...

曲面单值化定理

曲面单值化定理&#xff08;Uniformization Theorem&#xff09;是复分析、几何和拓扑学中的一个重要结果。它为紧致黎曼曲面提供了标准化的几何结构&#xff0c;是研究复几何和代数几何的基础。以下是对曲面单值化定理的详细介绍以及其应用场景。 曲面单值化定理的陈述 基本版…...

数据预处理方法—数据增强、数据平衡

1.数据增强 1.1 原理 通过对数据进行变换增加数据的多样性&#xff0c;提高模型泛化能力&#xff0c;常用于图像和文本处理任务。 1.2 核心公式 例如&#xff1a;图像旋转&#xff1a; 其中&#xff0c;R()是旋转矩阵&#xff0c;是旋转角度。 1.3 Python案例 下面是一个…...

从扩散模型开始的生成模型范式演变--SDE

SDE是在分数生成模型的基础上&#xff0c;将加噪过程扩展时连续、无限状态&#xff0c;使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后&#xff0c;本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型…...

基于Java Springboot 协同过滤算法音乐推荐系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue2、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#x…...

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势&#xff1f; 重要性&#xff1a;⭐⭐⭐ &#x1f4af; NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练…...

win10中使用ffmpeg的filter滤镜

1 给视频加文字水印 1.1 添加播放时间 ffmpeg -i input.mp4 -vf "drawtextfontfileC\\:/Windows/fonts/consola.ttf:fontsize30:fontcolorwhite:timecode00\:00\:00\:00:rate25:textTCR\::boxcolor0x000000AA:box1:x20:y20" -y output.mp4 在视频的x20:y20位置添加t…...

shell编程7,bash解释器的 for循环+while循环

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…...

Flutter 1.2:flutter配置gradle环境

1、在android的模块中进行gradle环境配置 ①在 gradle-wrapper.properties文件中将url配置为阿里云镜像&#xff0c;因为gradle的服务器在国外&#xff0c;国内下载非常慢&#xff0c;也可在官网进行下载 gradle版本下载 gradle版本匹配 阿里云镜像gradle下载 可以通过复制链…...

LVS 负载均衡面试题及参考答案

目录 什么是 LVS 负载均衡?它的主要作用是什么? 为什么要使用 LVS 进行负载均衡? LVS 有哪些组成部分? 简述 LVS 的架构。 LVS 中有哪两种典型的架构?请简要说明它们的特点。 LVS 的工作原理是怎样的?简述 LVS 的工作原理。 解释 LVS 中的虚拟服务器(VS)概念。 …...

GaussDB(类似PostgreSQL)常用命令和注意事项

文章目录 前言GaussDB&#xff08;类似PostgreSQL&#xff09;常用命令和注意事项1. 连接到GaussDB数据库2. 查看当前数据库中的所有Schema3. 进入指定的Schema4. 查看Schema下的表、序列、视图5. 查看Schema下所有的表6. 查看表结构7. 开始事务8. 查询表字段注释9. 注意事项&a…...

c语言编程1.17蓝桥杯历届试题-回文数字

题目描述 观察数字&#xff1a;12321&#xff0c;123321 都有一个共同的特征&#xff0c;无论从左到右读还是从右向左读&#xff0c;都是相同的。这样的数字叫做&#xff1a;回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求&#xff1a; 该数字的各个数位之…...

MVC core 传值session

MVC Entity Framework MVC Core session 》》 需要添加 Session 服务 和 Session中间件 builder.Services.AddSession(); app.UseSession(); 》》》控制器中 public IActionResult Privacy(){HttpContext.Session.SetString("key", "123");return View(…...

六:安装服务-compute node

一&#xff1a;工具、环境准备-controller node 二&#xff1a;OpenStack环境准备-controller node 三&#xff1a;安装服务-controller node 四&#xff1a;工具、环境准备-compute node 五&#xff1a;OpenStack环境准备-compute node 六&#xff1a;安装服务-compute node 七…...

【050】基于51单片机计步器【Keil程序+报告+原理图】

☆、设计硬件组成&#xff1a;51单片机最小系统ADXL345三轴加速度传感器LCD1602液晶显示AT24C02存储芯片按键控制。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片&#xff0c;LCD1602实时显示&#xff1b; 2、设计采用ADXL345三轴加速度传感器实现对行走步…...

qt QGraphicsPolygonItem详解

1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类&#xff0c;它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem&#xff0c;你可以定义和显示一个多边形&#xff0c;包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…...

OpenAI浅聊爬虫

前提 OpenAI越来越火&#xff0c;大有要干掉一片程序员的架势。在此&#xff0c;我们看看Sider&#xff08;本文使用的OpenAI工具&#xff09;对爬虫的看法。 爬虫的应用场景 爬虫技术&#xff08;Web Scraping&#xff09;有广泛的应用场景&#xff0c;以下是一些主要的应用…...

Java学习,ArrayList

ArrayList 是 Java 集合框架&#xff08;Collections Framework&#xff09;中的一个重要类&#xff0c;它实现了 List 接口。ArrayList 基于动态数组的数据结构&#xff0c;能够根据需要自动调整其大小。 关键特性 动态数组&#xff1a;ArrayList 底层使用数组来存储元素&…...

拓扑排序的两种实现

1 按节点结束时间进行排序 拓扑排序针对一张DAG&#xff0c;将所有节点按照结束时间从大到小依次排列。 算法描述为&#xff1a;初始化一个空链表 L L L&#xff0c;对DAG进行DFS&#xff0c;维护一个全局时钟 T T T&#xff0c;记录每个节点的开始时间&#xff08;从白色变成…...

洛谷 P10491 [USACO09NOV] The Chivalrous Cow B C语言 bfs

题目&#xff1a; https://www.luogu.com.cn/problem/P10491?contestId217365 题目背景 农民 John 有很多牛&#xff0c;他想交易其中一头被 Don 称为 The Knight 的牛。这头牛有一个独一无二的超能力&#xff0c;在农场里像 Knight 一样地跳&#xff08;就是我们熟悉的象棋…...

C语言——指针初阶(三)

目录 一.指针-指针 代码1&#xff1a; 运行结果&#xff1a; 代码2&#xff1a; 运行结果&#xff1a; 代码3&#xff1a; 运行结果&#xff1a; 二.指针数组 例&#xff1a; 往期回顾 一.指针-指针 指针减去指针的前提&#xff1a;两个指针指向同一块空间。 指针减去指针…...

【Spring】Spring IOCDI:架构旋律中的“依赖交响”与“控制华章”

前言 &#x1f31f;&#x1f31f;本期讲解关于Spring IOC&DI的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…...

安全基线检查

一、安全基线检测基础知识 安全基线的定义 安全基线检查的内容 安全基线检查的操作 二、MySQL的安全基线检查 版本加固 弱口令 不存在匿名账户 合理设置权限 合理设置文件权限 日志审核 运行账号 可信ip地址控制 连接数限制 更严格的基线要求 1、禁止远程连接数据库 2、修改…...

python 生成tts语音

之前一直使用微软、或者国内大厂的接口&#xff0c;网页操作比较麻烦&#xff0c;最近发现一个python库可以完美解决&#xff0c;在这里分享给大家 在这里 GitHub - rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsof…...

【链表】【删除节点】【刷题笔记】【灵神题单】

237.删除链表的节点 链表删除节点的本质是不用删除&#xff0c;只需要操作指针&#xff0c;跳过需要删除的节点&#xff0c;指向下下一个节点即可&#xff01; 删除某个节点&#xff0c;但是不知道这个节点的前一个节点&#xff0c;也不知道头节点&#xff01;摘自力扣评论区…...

Keil 5, Flash Timeout. Reset the Target and try it again.

stm32F303RBT6 Flash Timeout. Reset the Target and try it again. 需要pack DFP 1.4.0&#xff0c; FLASH 烧写算法需要包括1.4.0...