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

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(16):ReactExecutor

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。

这篇文章剖析一下 CangjieMagic 框架中的 ReactExecutor。

这个执行器名字中的"React"代表"Reasoning and Acting"(推理和行动),它让Agent能够像人类一样思考问题、采取行动、观察结果,然后再思考下一步。

如果NaiveExecutor像是直接回答问题的学生,PlanReactExecutor像是制定详细计划的项目经理,那么ReactExecutor就像是一位善于边思考边行动的侦探,通过不断的观察和推理来解决问题!

1 ReactExecutor的工作原理

用户提问
Agent
ReactExecutor
循环执行
思考Thought
行动Action
观察Observation
有答案了吗?
返回答案

ReactExecutor采用了一种叫做"思考-行动-观察"的循环执行模式,就像我们在生活中解决问题的方式:

  1. 思考(Thought):分析问题,考虑可能的解决方案
  2. 行动(Action):采取一个具体行动,比如查询信息、使用工具
  3. 观察(Observation):查看行动的结果
  4. 继续思考:基于观察到的结果,进一步思考下一步行动

这就像我们烹饪一道从未做过的菜:先思考食谱,然后按步骤操作,观察结果(尝尝味道),再决定是否需要调整。

2 代码结构与初始化

让我们先看看ReactExecutor的构造函数:

public class ReactExecutor <: AgentExecutor {public ReactExecutor(private let loop!: Int64 = Config.maxReactNumber) { }// 其他成员...
}

这个构造函数看起来很简单,只有一个参数loop,用于设置最大循环次数,默认值来自配置Config.maxReactNumber。这个参数非常重要,它决定了Agent最多可以进行多少轮"思考-行动-观察"循环。

默认值
自定义值
ReactExecutor构造
设置最大循环次数
Config.maxReactNumber
自定义循环次数

这就像给侦探设定一个破案时间限制,防止陷入无限的思考和调查中。在实际应用中,通常不需要手动设置这个参数,使用默认配置就足够了。

3 同步执行流程:像侦探破案一样

现在,让我们深入研究同步执行函数:

override public func run(agent: Agent, request: AgentRequest): AgentResponse {LogUtils.info("React executor runs ${agent.name}")let task = ReactTask(agent, request)for (_ in 0..this.loop) {if (let Some(resp) <- task.runOnce()) {return resp}}LogUtils.info("Exceed the max react loop")return task.summarize()
}

这段代码实现了ReactExecutor的核心功能。让我们用一个侦探破案的例子来理解这个过程:

用户 Agent ReactExecutor ReactTask 请帮我找出丢失的宝石 开始调查 创建案件档案 执行一轮调查 是否有结论? 返回调查结果 宝石在管家的房间里 继续下一轮 alt [有结论] [需继续调查] loop [调查循环] 达到最大调查轮数 生成调查总结 返回调查总结 虽然没有确切证据,但根据线索推测... 用户 Agent ReactExecutor ReactTask

代码解析:

  1. 记录日志:记录执行开始

    LogUtils.info("React executor runs ${agent.name}")
    

    这就像福尔摩斯在笔记本上写下"案件调查开始"。

  2. 创建任务:创建一个ReactTask对象

    let task = ReactTask(agent, request)
    

    这相当于福尔摩斯整理案件资料,准备开始调查。

  3. 循环执行:在最大循环次数内,不断尝试解决问题

    for (_ in 0..this.loop) {// 尝试执行一次
    }
    

    这就像福尔摩斯进行一系列的调查活动,直到找到答案或达到时间限制。

  4. 单次执行:每次循环调用task.runOnce()

    if (let Some(resp) <- task.runOnce()) {return resp
    }
    

    这相当于福尔摩斯进行一轮"思考-行动-观察",如果找到了答案,就立即返回;如果没有,继续下一轮。

  5. 达到限制:如果达到最大循环次数仍未解决

    LogUtils.info("Exceed the max react loop")
    return task.summarize()
    

    这就像福尔摩斯在规定时间内未能完全破案,但仍然需要提供一个基于已知线索的最佳推理。

这个过程既优雅又实用,通过不断的思考和行动,逐步接近问题的答案,就像侦探通过收集线索、推理和验证来解开谜团一样。

4 异步执行流程:实时追踪侦探的思路

有时候,我们不仅想知道侦探的最终结论,还想实时跟踪他的思考过程。这就是异步执行的作用:

override public func asyncRun(agent: Agent, request: AgentRequest): AsyncAgentResponse {LogUtils.info("React executor async runs ${agent.name}")let task = ReactTask(agent, request)// Create a thread to execute the react tasklet fut: Future<Iterator<String>> = spawn {for (_ in 0..this.loop) {if (let Some(asyncAnswer) <- task.asyncRunOnce()) {return asyncAnswer}}LogUtils.info("Exceed the max react loop")return task.asyncSummarize()}return AsyncAgentResponse(IteratorWrapper(task, fut), execInfo: task.execInfo)
}

这段代码实现了异步执行的功能。想象一下,这就像福尔摩斯边调查边通过对讲机实时向你汇报进展:

用户请求
创建ReactTask
创建新线程
异步执行循环
找到答案?
返回异步答案
达到最大循环?
生成摘要
返回AsyncAgentResponse
用户界面

代码解析:

  1. 创建任务:与同步函数类似,创建ReactTask

    let task = ReactTask(agent, request)
    
  2. 创建工作线程:使用spawn创建新线程

    let fut: Future<Iterator<String>> = spawn {// 线程内的执行代码
    }
    

    这就像福尔摩斯委派一名助手进行调查,同时自己可以处理其他事情。

  3. 线程内执行循环:在新线程中执行与同步函数类似的循环

    for (_ in 0..this.loop) {if (let Some(asyncAnswer) <- task.asyncRunOnce()) {return asyncAnswer}
    }
    

    这个循环与同步函数类似,但使用asyncRunOnce()函数,返回的是一个可以实时获取内容的迭代器。

  4. 封装返回:将Future包装成AsyncAgentResponse

    return AsyncAgentResponse(IteratorWrapper(task, fut), execInfo: task.execInfo)
    

    这就像给用户一个特殊的收音机,可以实时听到福尔摩斯的调查进展。

这种异步模式非常适合需要实时反馈的场景,用户可以看到Agent的思考过程,而不必等待最终结果。

5 深入IteratorWrapper:信息流的管理者

react_executor.cj中还定义了一个类IteratorWrapper,它负责管理异步返回的信息流:

protected class IteratorWrapper <: Iterator<String> {protected IteratorWrapper(private let task: AgentTask,private let workerFut: Future<Iterator<String>>) { }/*** Concatenate all response content and log it finally*/private let buffer = StringBuilder()override public func next(): Option<String> {let asyncAnswer = workerFut.get()let data = asyncAnswer.next()match (data) {case Some(v) => buffer.append(v)case None =>LogUtils.info(this.task.agent.name, buffer.toString().withTag(ReactTag.ANSWER))}return data}
}

这个类看起来有点复杂,但它的作用很简单:收集和传递异步执行中产生的数据片段。它就像一位记者,实时记录并转播福尔摩斯的调查过程:

用户 IteratorWrapper 工作线程 日志系统 请求下一块数据 获取迭代器 返回迭代器 请求下一块数据 返回数据片段 添加到缓冲区 返回数据片段 返回None 记录完整回答 返回None alt [有数据] [没有更多数据] 用户 IteratorWrapper 工作线程 日志系统

代码解析:

  1. 构造函数:接收任务和Future对象

    protected IteratorWrapper(private let task: AgentTask,private let workerFut: Future<Iterator<String>>
    ) { }
    

    这就像记者接收到一个特殊的通讯设备和采访对象。

  2. 缓冲区:使用StringBuilder收集所有数据

    private let buffer = StringBuilder()
    

    这就像记者随身携带的笔记本,记录所有听到的信息。

  3. next函数:获取并传递下一块数据

    override public func next(): Option<String> {let asyncAnswer = workerFut.get()let data = asyncAnswer.next()// ...处理数据...return data
    }
    

    这就像记者不断询问:“然后呢?发生了什么?”,并将听到的内容转播给观众。

  4. 数据处理:根据有无数据采取不同行动

    match (data) {case Some(v) => buffer.append(v)case None =>LogUtils.info(this.task.agent.name, buffer.toString().withTag(ReactTag.ANSWER))
    }
    

    当有新数据时,记录到笔记本;当没有更多数据时,整理笔记并提交完整报道。

这个类使得异步执行的结果能够以流式的方式传递给用户,同时还能保存完整的响应用于日志记录。这就像一场实况转播,既能让观众实时了解情况,又能在赛后提供完整回放。

6 总结

ReactExecutor就像一位善于动手实践的探索者,通过不断尝试和观察,逐步接近问题的答案。它特别适合那些需要工具使用、信息查询和多步推理的场景,能够让你的Agent表现得更像一个真实的人类助手。它平衡了简单直接的NaiveExecutor和复杂全面的PlanReactExecutor,为大多数实际应用场景提供了理想的解决方案。

相关文章:

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(16):ReactExecutor

CangjieMagic框架&#xff1a;使用华为仓颉编程语言编写&#xff0c;专门用于开发AI Agent&#xff0c;支持鸿蒙、Windows、macOS、Linux等系统。 这篇文章剖析一下 CangjieMagic 框架中的 ReactExecutor。 这个执行器名字中的"React"代表"Reasoning and Acti…...

13.第二阶段x64游戏实战-分析人物等级和升级经验

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;12.第二阶段x64游戏实战-远程调试 效果图&#xff1a; 如下图红框&#xff0c;…...

Linux疑难杂惑 | 云服务器重装系统后vscode无法远程连接的问题

报错原因&#xff1a;本地的known_hosts文件记录服务器信息与现服务器的信息冲突了&#xff0c;导致连接失败。 解决方法&#xff1a;找到本地的known_hosts文件&#xff0c;把里面的所有东西删除后保存就好了。 该文件的路径可以在报错中寻找&#xff1a;比如我的路径就是&a…...

使用EXCEL绘制平滑曲线

播主播主&#xff0c;你都多少天没更新了&#xff01;&#xff01;&#xff01;泥在干什么&#xff1f;你还做这个账号麻&#xff1f;&#xff01;&#xff01;&#xff01; 做的做的&#xff08;哭唧唧&#xff09;&#xff0c;就是最近有些忙&#xff0c;以及…… 前言&…...

你的电脑在开“外卖平台”?——作业管理全解析

你的电脑在开“外卖平台”&#xff1f;——作业管理全解析 操作系统系列文章导航&#xff08;点击跳转&#xff09; 程序员必看&#xff1a;揭开操作系统的神秘面纱 &#xff1a;从进程、内存到设备管理&#xff0c;全面解析操作系统的核心机制与日常应用。告别电脑卡顿&#x…...

平均池化(Average Pooling)

1. 定义与作用​​ ​​平均池化​​是一种下采样操作&#xff0c;通过对输入区域的数值取​​平均值​​来压缩数据空间维度。其核心作用包括&#xff1a; ​​降低计算量​​&#xff1a;减少特征图尺寸&#xff0c;提升模型效率。​​保留整体特征​​&#xff1a;平滑局部…...

JavaScript中的Event事件对象详解

一、事件对象&#xff08;Event&#xff09;概述 1. 事件对象的定义 event 对象是浏览器自动生成的对象&#xff0c;当用户与页面进行交互时&#xff08;如点击、键盘输入、鼠标移动等&#xff09;&#xff0c;事件触发时就会自动传递给事件处理函数。event 对象包含了与事件…...

OSPF综合实验(HCIP)

1&#xff0c;R5为ISP&#xff0c;其上只能配置Ip地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过ppp协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3&#xff0c;所有设备均可访问R5的环回&…...

Unreal 从入门到精通之如何接入MQTT

文章目录 前言MQTT 核心特性MQTT 在 UE5 中的应用场景在 UE5 中集成 MQTTMqtt Client 的APIMqtt Client 使用示例最后前言 MQTT(Message Queuing Telemetry Transport)是一种专为物联网(IoT)和低带宽、高延迟网络环境设计的轻量级消息传输协议。它采用发布/订阅(Pub/Sub)…...

数据结构实验6.2:稀疏矩阵的基本运算

文章目录 一&#xff0c;实验目的二&#xff0c;问题描述三&#xff0c;基本要求四、算法分析&#xff08;一&#xff09;稀疏矩阵三元组表示法存储结构&#xff08;二&#xff09;插入算法&#xff08;三&#xff09;创建算法&#xff08;四&#xff09;输出算法&#xff08;五…...

BDO分厂积极开展“五个一”安全活动

BDO分厂为规范化学习“五个一”活动主题&#xff0c;按照“上下联动、分头准备 、差异管理、资源共享”的原则&#xff0c;全面激活班组安全活动管理新模式&#xff0c;正在积极开展班组安全活动&#xff0c;以单元班组形式对每个班组每周组织一次“五个一”安全活动。 丁二醇单…...

那就聊一聊mysql的锁

MySQL 的锁机制是数据库并发控制的核心&#xff0c;作为 Java 架构师需要深入理解其实现原理和适用场景。以下是 MySQL 锁机制的详细解析&#xff1a; 一、锁的分类维度 1. 按锁粒度划分 锁粒度特点适用场景​全局锁​锁定整个数据库&#xff08;FLUSH TABLES WITH READ LOC…...

Python番外——常用的包功能讲解和分类组合

目录 1. Web开发框架与工具 2. 数据处理与分析 3. 网络请求与爬虫 4. 异步编程 5. 数据库操作 6. 图像与多媒体处理 7. 语言模型与NLP 8. 安全与加密 9. 配置与工具 10. 其他工具库 11.典型组合场景 此章节主要是记录我所使用的包&#xff0c;以及模块。方便供自己方…...

【mongodb】数据库操作

目录 1. 查看所有数据库2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则创建&#xff09;3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则…...

四月下旬系列

CUHKSZ 校赛 期中考试 DAY -1。 省流&#xff1a;前 1h 切 6 题&#xff0c;后 3h 过 1 题&#xff0c;读错一个本来很【】的题&#xff0c;被大模拟构造创【】了。 本地除了 VSCode 没有 Extensions&#xff0c;别的和省选差不多。使用 DEVC。 前 6 题难度 < 绿&#x…...

计算机网络 3-4 数据链路层(局域网)

4.1 局域网LAN 特点 1.覆盖较小的地理范围 2.较低的时延和误码率 3.局域网内的各节点之间 4.支持单播、广播、多播 分类 关注三要素 &#xff08;出题点&#xff09; ①拓扑结构 ②传输介质 ③介质访问控制方式 硬件架构 4.2 以太网 4.2.1 层次划分 4.2.2 物理层标准…...

WebSocket介绍

在网页聊天项目中&#xff0c;为了实现消息的发送和及时接收&#xff0c;我们使用了WebSocket&#xff0c;接下来就简单介绍一下这个WebSocket。 了解消息的转发逻辑 当两个不同客户端在不同的局域网中互相发送消息时&#xff0c;假如这两个客户端分别是a和b&#xff0c;因为…...

rpcrt4!COMMON_AddressManager函数分析之和全局变量rpcrt4!AddressList的关系

第一部分&#xff1a; 1: kd> x rpcrt4!addresslist 77c839dc RPCRT4!AddressList 0x00000000 1: kd> g Breakpoint 2 hit RPCRT4!OSF_ADDRESS::CompleteListen: 001b:77c0c973 55 push ebp 1: kd> g Breakpoint 11 hit RPCRT4!COMMON_Addr…...

Java Web 之 Tomcat 100问

Tomcat 是什么&#xff1f; Tomcat 是一个开源的 Java Servlet 容器和 Web 容器。 Tomcat 的主要功能有哪些&#xff1f; 三大主要功能&#xff1a; 运行 Java Web 应用。处理 HTTP 请求。管理 Web 应用。 如何安装 Tomcat &#xff1f; 下载 Tomcat 安装包&#xff08;A…...

ESB —— 企业集成架构的基石:功能、架构与应用全解析

企业服务总线&#xff08;Enterprise Service Bus&#xff0c;ESB&#xff09;是一种重要的企业级集成架构&#xff0c;以下为你详细介绍&#xff1a; 一、概念与定义 ESB 是一种基于面向服务架构&#xff08;SOA&#xff09;的中间件技术&#xff0c;它充当了企业内部不同应…...

wordpress SMTP配置qq邮箱发送邮件,新版QQ邮箱授权码获取方法

新版的QQ邮箱界面不同了&#xff0c;以下是新版的设置方法&#xff1a; 1. 进入邮箱后&#xff0c;点右上角的设置图标&#xff1a; 2. 左下角的菜单里&#xff0c;选择“账号与安全” &#xff1a; 3. 然后如下图&#xff0c;开启SMTP 服务&#xff1a; 4. 按提示验证短信&am…...

【操作系统原理04】进程同步

文章目录 大纲一.进程同步与进程互斥0.大纲1.同步2.互斥 二.进程互斥的软件实现方法0.大纲1.单标志法2.双标志先检查法3.双标志后检查法4.Peterson算法 三.进程互斥的硬件实现方法0.大纲1.中断屏蔽方法2.TestAndSet指令3.Swap指令 四.互斥锁五.信号量机制0.大纲1.概念2.整形信号…...

Java ThreadPoolExecutor 深度解析:从原理到实战

在 Java 的多线程编程领域&#xff0c;ThreadPoolExecutor是一个至关重要的工具类&#xff0c;它为开发者提供了强大且灵活的线程池管理能力。合理使用ThreadPoolExecutor&#xff0c;不仅能够提升应用程序的性能和响应速度&#xff0c;还能有效控制资源消耗&#xff0c;避免因…...

MCP 协议——AI 世界的“USB-C 接口”:解锁智能协作的新时代

在过去十年中&#xff0c;科技的进步已经改变了我们日常生活的方方面面。从智能手机的普及到物联网的快速发展&#xff0c;人们的生活被各种创新的技术重新定义。今天&#xff0c;我们即将迎来另一个里程碑式的转折点——MCP 协议的推出&#xff0c;它将为人工智能世界的协作与…...

知识就是力量——一些硬件的使用方式

硬件平台 正点原子ATK-MD0430 V2.0&#xff08;4.3寸TFT LCD电容触摸屏/使用cc2530控制&#xff09;1.硬件连接2. 软件驱动实现3. 优化与注意事项4. 示例工程参考5. 常见问题 正点原子ATK-MD0430 V2.0&#xff08;4.3寸TFT LCD电容触摸屏/使用cc2530控制&#xff09; 1.硬件连…...

机器学习(1)— 开发环境安装

机器学习&#xff08;1&#xff09;— 准备开发环境 一、前言 二、Ubuntu开发环境安装 1、NumPy安装 使用如下命令安装&#xff1a; sudo apt-get install python3-numpy2、PyTorch 安装 由于我电脑暂时没有英伟达显卡&#xff0c;暂时安装CPU版&#xff1a; pip3 insta…...

深入实战:使用C++开发高性能RESTful API

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

C++之虚函数 Virtual Function

1. 普通虚函数&#xff08;Virtual Function&#xff09; 定义&#xff1a;基类中用 virtual 声明&#xff0c;允许派生类 覆盖&#xff08;Override&#xff09;。特点&#xff1a; 基类可提供默认实现。派生类可选择性覆盖&#xff08;若不覆盖&#xff0c;则调用基类版本&a…...

【java实现+4种变体完整例子】排序算法中【选择排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是选择排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、选择排序基础实现 原理 每一轮遍历未排序部分&#xff0c;找到最小元素并交换到当前起始位置&#xff0c;逐步构建已排序序列。 代码示例 pu…...

DNS主从同步实验

dns域名解析原理 实验步骤1、主dns要完成dns解析&#xff1a;192.168.21.128 [rootlocalhost ~]# yum install bind -y [rootlocalhost ~]# systemctl start named [rootlocalhost ~]# vim /etc/named.conf options { listen-on port 53 { any; }; direct…...

UIjavaScritIU

1、直接执行js脚本&#xff1a;document.documentElement.scrollTop1000 document.getElementById(“su”).click() 弊端&#xff1a; js自己带的元素定位方法不如selenium的丰富 不支持xpath css 等 定位元素操作不是很灵活。 需要借助js脚本传入 -selenium定位 js 负责执行动…...

Manus技术架构、实现内幕及分布式智能体项目实战 线上高级实训班

Manus技术架构、实现内幕及分布式智能体项目实战 线上高级实训班 模块一&#xff1a;解密Manus分布式多智能体工作原理和架构内幕  基于Claude和Qwen的大模型智能体Manus为何能够迅速成为全球讨论热度最高、使用体验最好、产业界最火爆的大模型智能体产品&#xff1f;  Ma…...

Java——二维数组

一、概念 二维数组也是一种容器&#xff0c;不同于一维数组&#xff0c;该容器存储的都是一维数组容器。 二、定义格式 1.数据类型[ ] [ ] 变量名; 2.数据类型 变量名 [ ] [ ]; 3.数据类型 [ ] 变量名 [ ]; 三、动态初始化 &#xff08;一&#xff09;书写 1.格式 数据…...

豆瓣图书数据采集与可视化分析(一)- 豆瓣图书数据爬取

文章目录 前言一、数据爬取步骤二、豆瓣图书页面分析​1. 图书分类标签页面分析2. 图书页面分析 三、数据采集实现1. 图书分类标签数据采集2. 图书数据采集3. 把多个分类的CSV数据文件整合到一个CSV文件中 前言 在当今大数据时代&#xff0c;数据的获取与整理对于各个领域的研…...

车载诊断新架构--- SOVD初入门(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

test——自动化测试

目录 一概念 1自动化 2回归测试 3自动化分类 3.1接口自动化 3.2UI自动化 4自动化测试金字塔 5web自动化测试 6工作原理 二函数 1元素定位 1.1cssSelector ​编辑1.2xpath 语法 2操作对象 2.1click() 2.2send_keys() 2.3clear() 2.4text 2.5get_attribu…...

Kubernetes相关的名词解释CoreDNS插件(2)

为什么需要DNS服务&#xff1f; service发现是k8s中的一个重要机制&#xff0c;其基本功能为&#xff1a;在集群内通过服务名对服务进行访问&#xff0c;即需要完成从服务名到ClusterIP的解析。 k8s主要有两种service发现机制&#xff1a;环境变量和DNS。没有DNS服务的时候&am…...

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su &#xff0c;命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…...

代码审计入门 原生态sql注入篇

前置知识&#xff1a; 漏洞形成的原因&#xff1a; 1、可控的参数 2、函数缺陷 代码审计的步骤&#xff1a; 1、全局使用正则搜索 漏洞函数 &#xff0c;然后根据函数看变量是否可控&#xff0c;再看函数是否有过滤 2、根据web的功能点寻找函数&#xff0c;然后根据函数看…...

数据结构0基础学习堆

文章目录 简介公式建立堆函数解释 堆排序O(n logn)topk问题 简介 堆是一种重要的数据结构&#xff0c;是一种完全二叉树&#xff0c;&#xff08;二叉树的内容后面会出&#xff09;&#xff0c; 堆分为大小堆&#xff0c;大堆&#xff0c;左右结点都小于根节点&#xff0c;&am…...

分析虚幻引擎编辑器中使用 TAA 或 TSR 时角色眨眼导致的眼睛模糊问题

1. 引言 用户反馈在使用虚幻引擎编辑器时&#xff0c;当抗锯齿方法设置为时间性抗锯齿 (TAA) 或时间性超级分辨率 (TSR) 时&#xff0c;角色的眼睛在眨眼时会出现模糊现象。时间性抗锯齿和时间性超级分辨率是现代游戏引擎&#xff08;包括虚幻引擎&#xff09;中常用的抗锯齿和…...

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个&#xff0c;都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

【java实现+4种变体完整例子】排序算法中【堆排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是堆排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、堆排序基础实现 原理 基于二叉堆结构&#xff08;最大堆&#xff09;&#xff0c;通过以下步骤实现排序&#xff1a; 构建最大堆&#xff1a;将…...

量化交易 - RSRS(阻力支撑相对强度)策略研究 - 源码

一、介绍 RSRS&#xff08;阻力支撑相对强度&#xff09;是一种基于价格阻力位与支撑位动态变化的市场择时技术指标&#xff0c;由光大证券在2017年提出。其核心原理是通过量化最高价与最低价之间的线性关系&#xff0c;预测市场趋势变化。 原理&#xff1a; 线性回归建模&a…...

从FPGA实现角度介绍DP_Main_link主通道原理

DisplayPort&#xff08;简称DP&#xff09;是一个标准化的数字式视频接口标准&#xff0c;具有三大基本架构包含影音传输的主要通道&#xff08;Main Link&#xff09;、辅助通道&#xff08;AUX&#xff09;、与热插拔&#xff08;HPD&#xff09;。 Main Link&#xff1a;用…...

数据库备份-docker配置主从数据库

创建 Docker Compose 文件 创建一个 docker-compose.yml 文件&#xff0c;定义两个 MySQL 容器&#xff08;一个主库&#xff0c;一个从库&#xff09; services:mysql:image: mysql:8.0.27container_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiM…...

YOLO11改进-Backbone-使用MobileMamba替换YOLO backbone 提高检测精度

轻量化模型的技术瓶颈 CNN 的局限性&#xff1a;传统 CNN&#xff08;如 MobileNet&#xff09;依赖局部感受野&#xff0c;难以捕捉长距离依赖关系&#xff0c;在高分辨率任务&#xff08;如语义分割&#xff09;中需通过增加计算量提升性能&#xff0c;效率低下。 Transforme…...

JavaScript学习教程,从入门到精通,DOM 操作语法知识点及案例代码(20)

DOM 操作语法知识点及案例代码 一、DOM 介绍 1. 什么是 DOM DOM (Document Object Model&#xff0c;文档对象模型) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表示&#xff0c;并定义了一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结…...

Vue3 + TypeScript中defineEmits 类型定义解析

TypeScript 中 Vue 3 的 defineEmits 函数的类型定义&#xff0c;用于声明组件可以触发的事件。以下是分步解释&#xff1a; 1. 泛型定义 ts <"closeDialog" | "getApplySampleAndItemX"> 作用&#xff1a;定义允许的事件名称集合&#xff0c;即组…...

Git命令归纳

初始化git git config --global user.name xxx&#xff1a;设置全局用户名&#xff0c;信息记录在~/.gitconfig文件中git config --global user.email xxxxxx.com&#xff1a;设置全局邮箱地址&#xff0c;信息记录在~/.gitconfig文件中git init&#xff1a;先创建一个目录&am…...