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

axios 模拟实现

axios 模拟实现

包含[发送请求,拦截器,取消请求]

第一步 , axios模拟发送请求

            //使用 xhr 发送请求function xhr_adpter(config){return new Promise(function handle(resolve,reject){let xhr = new XMLHttpRequest();xhr.open(config.method, config.url,true);xhr.onreadystatechange = function(){if(4 === xhr.readyState){// 成功, 携带对应数据if(xhr.status >= 200 && xhr.status < 300){resolve({config,data:xhr.response,status:xhr.status,headers:xhr.getAllResponseHeaders(),request:xhr});return;}elsereject({data:xhr.response,status : xhr.status});}}//只考虑Get情况xhr.send();});}// 使用http还是xhr,这里省略http发送请求function dispatch_req(config){/*判断使用 http or xhr这里只模拟xhr*/return xhr_adpter(config).then(res=>{// 对响应结果做转化,这里省略转化过程,直接返回结果return res;},error=>{throw error;})} // 模拟实现,暂不使用function Axios(config){this.config = config;}// 请求函数Axios.prototype.request = function(config){let promise = Promise.resolve(config);//为下面的拦截器做铺垫let callbacks = [dispatch_req, null] ;return  promise.then(callbacks[0],callbacks[1]);}// 仅模拟let context = new Axios({});//绑定上下文, axios() 相当于 request()let axios = Axios.prototype.request.bind(context);let new_promise = axios({method:"GET",url:"http://127.0.0.1/get_axios"});new_promise.then(res=>{console.log("get :", res);                },error=>{console.log("error:",error)});

第二步,拦截器模拟

添加拦截器函数
	 //拦截器function Interceptor(){this.handlers = [];}Interceptor.prototype.use = function(success=null, fail=null){this.handlers.push({success,fail});}
构造函数新增拦截器
		function Axios(config){this.config = config;//新增拦截器this.interceptors = {request: new Interceptor(),response : new Interceptor()};}
新增初始化函数
	function prepare(){let context = new Axios({});//绑定上下文, axios() 相当于 request()let axios = Axios.prototype.request.bind(context);//增加拦截器引用属性到axios, 以方便使用Object.keys(context).forEach(key=>{axios[key] = context[key];});return axios;}
修改请求函数
 // 请求函数Axios.prototype.request = function(config){let promise = Promise.resolve(config);// 保存所有回调,包含拦截器, 形成then回调let callbacks = [dispatch_req, null] ;/*把拦截器加入数组把请求拦截器 放入数组前端把响应拦截器 放入数组后面整个数组像这样:[请求拦截success回调,请求拦截fail回调, dispatch_req,null, 响应拦截success,响应拦截fail] */while(this.interceptors.request.handlers.length > 0){let handler = this.interceptors.request.handlers.shift();callbacks.unshift(handler.success, handler.fail);}while(this.interceptors.response.handlers.length > 0){let handler = this.interceptors.response.handlers.shift();callbacks.push(handler.success, handler.fail)}// 为数组回调生成所有promise对象while(callbacks.length > 0){let success = callbacks.shift();let fail = callbacks.shift();promise = promise.then(success,fail);}return promise;}

拦截器完整代码

			//拦截器function Interceptor(){this.handlers = [];}Interceptor.prototype.use = function(success=null, fail=null){this.handlers.push({success,fail});}//使用 xhr 发送请求function xhr_adpter(config){return new Promise(function handle(resolve,reject){let xhr = new XMLHttpRequest();xhr.open(config.method, config.url,true);xhr.onreadystatechange = function(){if(4 === xhr.readyState){// 成功, 携带对应数据if(xhr.status >= 200 && xhr.status < 300){resolve({config,data:xhr.response,status:xhr.status,headers:xhr.getAllResponseHeaders(),request:xhr});return;}elsereject({data:xhr.response,status : xhr.status});}}//只考虑Get情况xhr.send();});}function dispatch_req(config){/*判断使用 http or xhr*/return xhr_adpter(config).then(res=>{// 对响应结果做转化,这里省略转化过程,直接返回结果return res;},error=>{throw error;})}   function Axios(config){this.config = config;//新增拦截器this.interceptors = {request: new Interceptor(),response : new Interceptor()};}// 请求函数Axios.prototype.request = function(config){let promise = Promise.resolve(config);// 保存所有回调,包含拦截器, 形成then回调let callbacks = [dispatch_req, null] ;/*把拦截器加入数组把请求拦截器 放入数组前端把响应拦截器 放入数组后面整个数组像这样:[请求拦截success回调,请求拦截fail回调, dispatch_req,null, 响应拦截success,响应拦截fail] */while(this.interceptors.request.handlers.length > 0){let handler = this.interceptors.request.handlers.shift();callbacks.unshift(handler.success, handler.fail);}while(this.interceptors.response.handlers.length > 0){let handler = this.interceptors.response.handlers.shift();callbacks.push(handler.success, handler.fail)}// 为数组回调生成所有promise对象while(callbacks.length > 0){let success = callbacks.shift();let fail = callbacks.shift();promise = promise.then(success,fail);}return promise;}// 初始化函数function prepare(){let context = new Axios({});//绑定上下文, axios() 相当于 request()let axios = Axios.prototype.request.bind(context);//增加拦截器引用属性到axios, 以方便使用Object.keys(context).forEach(key=>{axios[key] = context[key];});return axios;}axios = prepare();axios.interceptors.request.use(config=>{console.log("请求1",config)return config;},error=>{});axios.interceptors.request.use(config=>{console.log("请求2",config)return config;},error=>{});axios.interceptors.response.use(res=>{console.log("响应1");return res;});axios.interceptors.response.use(res=>{console.log("响应2");return res;});let new_promise = axios({method:"GET",url:"http://127.0.0.1/get_axios"});new_promise.then(res=>{console.log("get :", res);                },error=>{console.log("error:",error)});

添加取消请求

代码较为简单,只贴出新增代码
	 		//取消请求function AbortSignal(){// 此promise的状态由外部调用let resolve_func;this.promise = new Promise(resolve=>{resolve_func = resolve;});//添加abort函数,外部可直接调用this.abort = resolve_func;}
在xhr发送请求的代码中添加 取消请求的处理
//使用 xhr 发送请求function xhr_adpter(config){return new Promise(function handle(resolve,reject){let xhr = new XMLHttpRequest();xhr.open(config.method, config.url,true);// 若配置对象中有signal属性if(config.signal){config.signal.promise.then(res=>{xhr.abort();});}/*以下代码不变*/});}
			//创建一个取消请求的对象let abort_signal = new AbortSignal();let new_promise = axios({method:"GET",url:"http://127.0.0.1/get_axios",signal: abort_signal	//新增部分});new_promise.then(res=>{console.log("get :", res);                },error=>{console.log("error:",error)});setTimeout(() => {abort_signal.abort();}, 1000);

相关文章:

axios 模拟实现

axios 模拟实现 包含[发送请求,拦截器,取消请求] 第一步 , axios模拟发送请求 //使用 xhr 发送请求function xhr_adpter(config){return new Promise(function handle(resolve,reject){let xhr new XMLHttpRequest();xhr.open(config.method, config.url,true);xhr.onreadys…...

架构师面试(三十一):IM 消息收发逻辑

问题 今天聊一下 IM 系统最核心的业务逻辑。 在上一篇短文《架构师面试&#xff08;三十&#xff09;&#xff1a;IM 分层架构》中详细分析过&#xff0c;IM 水平分层架构包括&#xff1a;【入口网关层】、【业务逻辑层】、【路由层】和【数据访问层】&#xff1b;除此之外&a…...

hadoop三大组件的结构及各自的作用

1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系统&#xff0c;用于存储和管理海量数据。它具有高容错性、高吞吐量和可扩展性&#xff0c;能够在多个节点上存储和管理大规模数据 1.2架构&#xff1a;采用主从架构&#xff0c;由一个 NameNode 和多个 DataNode 组成。NameNode…...

GEE学习笔记 29:基于GEE的多源Landsat合成与植被指数时序提取

基于GEE的多源Landsat合成与植被指数时序提取 🌿 1.写在前面 | 基于GEE的Landsat多尺度植被指数提取脚本📌 2.常用植被指数计算公式2.1. 🌿 NDVI(归一化植被指数)Normalized Difference Vegetation Index2.2. 🌱 EVI(增强型植被指数)Enhanced Vegetation Index2.3.…...

负载均衡的策略

目的&#xff1a;将请求均衡分发到后台的服务器 算法&#xff1a; 随机算法&#xff1a;随机数获取服务器加权随机算法&#xff1a;根据权重&#xff0c;增加某些服务器&#xff08;性能比较好等&#xff09;选择的随机比例轮询算法&#xff1a;轮流分发给服务器加权轮询算法…...

AWS Elastic Beanstalk的部署Python Flask后端服务(Hello,World)

问题 最近需要使用AWS Elastic Beanstalk来部署Python的Flask后端web接口。这里先做一个最简单的Flask Hello&#xff0c;World接口服务程序。 Flask工程与代码 创建本地虚拟环境 conda create -n flask python3.13 # 激活 conda activate flaskapp.py from flask import …...

Hadoop的三大结构及各自的作用?

1.HDFS 作用&#xff1a; 存储海量数据&#xff0c;支持高容错&#xff08;数据自动备份&#xff09;和高吞吐量&#xff08;适合大文件读写&#xff09;。 采用主从架构&#xff1a; NameNode&#xff1a;管理文件系统的元数据&#xff08;如文件目录结构&#xff09;。 Dat…...

在Ubuntu系统中安装和升级RabbitVCS

在Ubuntu系统中安装和升级RabbitVCS 目前在ubuntu中使用svn的GUI工具&#xff0c;已经安装了。想升级一下。 当前遇到的问题是&#xff0c;我想用它看看我当前的代码对应的版本号&#xff0c;然后再决定是否update。但是&#xff0c;好像我看不出来。根本不如在windows使用To…...

深入理解红黑树:原理、实现与应用

深入理解红黑树&#xff1a;原理、实现与应用 引言 红黑树&#xff08;Red-Black Tree&#xff09;是计算机科学中一种重要的自平衡二叉查找树。它通过简单的规则和高效的调整策略&#xff0c;保证了插入、删除、查找等操作的时间复杂度均为 O(log n)。红黑树广泛应用于实际开…...

Java学习手册:Java并发编程最佳实践

在Java并发编程中&#xff0c;遵循最佳实践可以显著提高程序的性能、可靠性和可维护性。本文将总结Java并发编程中的关键最佳实践&#xff0c;帮助开发者避免常见陷阱并编写高效的并发程序。 1. 选择合适的并发工具 Java提供了丰富的并发工具&#xff0c;选择合适的工具可以简…...

接口自动化测试(二)

一、接口测试流程&#xff1a;接口文档、用例编写 拿到接口文档——编写接口用例以及评审——进行接口测试——工具/自动化框架进行自动化用例覆盖(70%)——输出测试报告 自动化的目的一般是为了回归 第一件事情&#xff1a;理解需求&#xff0c;学会看接口文档 只需要找到我…...

C++类和对象上

1. 面向对象编程与面向过程编程的比较 我们一开始接触的C语言就是一门面向过程编程的语言&#xff0c;而C就是一门面向对象编程的语言。那么这两者有什么区别呢&#xff1f; 举个例子&#xff0c;就比如说点外卖&#xff0c;如果是C语言的话&#xff0c;那么在程序的编写过程…...

hadoop的三大结构及各自的作用

Hadoop 分布式文件系统&#xff08;HDFS&#xff09; 存储大量数据&#xff1a;HDFS 被设计用于在商品硬件上存储海量数据&#xff0c;它将大文件分割成多个数据块&#xff0c;并分布存储在集群中的不同节点上&#xff0c;支持数据的可靠存储和高效访问。提供数据冗余和容错机制…...

珈和科技遥感赋能农业保险创新 入选省级卫星应用示范标杆

为促进空天信息与数字经济深度融合&#xff0c;拓展卫星数据应用场景价值&#xff0c;提升卫星数据应用效能和用户体验&#xff0c;加速卫星遥感技术向民生领域转化应用&#xff0c;近日&#xff0c;湖北省国防科工办组织开展了2024年湖北省卫星应用示范项目遴选工作。 经多渠…...

香港服务器CPU对比:Intel E3与E5系列核心区别与使用场景

香港服务器的 CPU 配置(核心数与主频)直接决定了其并发处理能力和数据运算效率&#xff0c;例如高频多核处理器可显著提升多线程任务响应速度。在实际业务场景中&#xff0c;不同负载需求对 CPU 架构的要求存在显著差异——以 Intel E3 和 E5 系列为例&#xff0c;由于两者在性…...

【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 本文深入探讨了如何利用 DeepSeek R1 模型结合检索增强生成(RAG)技术,构建一个高效的知识增强型问答系统。RAG 技术通过结合信息检索与生…...

得佳胜哲讯科技 SAP项目启动会:胶带智造新起点 数字转型新征程

在全球制造业加速向数字化、智能化转型的浪潮中&#xff0c;胶带制造行业正迎来以“自动化生产、数据化运营、智能化决策”为核心的新变革。工业互联网、大数据分析与智能装备的深度融合&#xff0c;正推动胶带制造从传统生产模式向“柔性化生产精准质量控制全链路追溯”的智慧…...

超导体的应用价值:超导磁探测技术开启科技与生活的新变革

科技的飞速发展&#xff0c;带来了一种新型材料的快速应用&#xff0c;那就是超导体材料。超导体的特性&#xff0c;能够为当今社会众多领域带来革命性的变革&#xff0c;也将极大的改变我们现在的生活质量。 超导体的特性 超导体是指在特定温度下的电阻会突然消失&#xff0c…...

UNION和UNION ALL的主要区别

UNION和UNION ALL的主要区别在于处理重复数据和排序的方式。 UNION和UNION ALL都是SQL语言中用于合并两个或多个SELECT语句结果集的关键字。它们的主要区别如下&#xff1a; 1、对重复结果的处理&#xff1a;UNION在进行表链接后会筛选掉重复的记录&#xff0c;而UNION ALL不会…...

软件项目验收报告模板

软件项目验收报告 一、项目基本信息 项目名称XX智能仓储管理系统开发单位XX科技有限公司验收单位XX物流集团合同签订日期2023年3月15日项目启动日期2023年4月1日验收日期2024年1月20日 二、验收范围 入库管理模块&#xff08;包含RFID识别、库存预警&#xff09;出库调度模…...

第五章 SQLite数据库:5、SQLite 进阶用法:JOIN、UNION、TRIGGER、INDEX、ALIAS、INDEXED BY 等模块

一、JOIN&#xff1a;跨表查询的核心机制 1. JOIN 类型总览 JOIN 是连接多个表获取综合信息的关键手段。常见 JOIN 类型如下&#xff1a; INNER JOIN&#xff08;内连接&#xff09;&#xff1a;仅返回两个表中满足连接条件的行。LEFT OUTER JOIN&#xff08;左连接&#xf…...

中间件--ClickHouse-10--海量数据存储如何抉择ClickHouse和ES?

在Mysql数据存储或性能瓶颈时&#xff0c;采用冷热数据分离的方式通常是一种选择。ClickHouse和Elasticsearch&#xff08;ES&#xff09;是两个常用的组件&#xff0c;但具体使用哪种组件取决于冷数据的存储目的、查询模式和业务需求等方面。 1、核心对比 &#xff08;1&…...

JESD204B标准及其在高速AD采集系统中的应用详解

一、JESD204B协议的本质与核心价值 JESD204B是由JEDEC制定的第三代高速串行接口标准&#xff08;2011年发布&#xff09;&#xff0c;专为解决高速ADC/DAC与FPGA/ASIC间数据传输瓶颈而设计。其核心突破体现在&#xff1a; 速率革命性提升 支持每通道最高12.5Gbps&#xff08;通…...

给予FLUX更好的控制:FLUX.1-dev-ControlNet-Union-Pro-2.0

Shakker Labs FLUX.1-dev-ControlNet-Union-Pro-2.0 一、模型概述 Shakker Labs发布的FLUX.1-dev-ControlNet-Union-Pro-2.0是一个统一的ControlNet模型&#xff0c;专为FLUX.1-dev模型设计。该模型在前一版本基础上进行了多项改进&#xff0c;包括移除模式嵌入以减小模型尺寸…...

Hadoop的三大结构及其作用?

Hadoop是一个分布式存储和计算框架&#xff0c;其三大核心组件是HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。它们各自有着重要的作用&#xff0c;共同构成了Hadoop生态系统的基础…...

langgraph框架之初识

1.什么是langgraph&#xff1f; LangGraph 是一个用于构建可控代理的底层编排框架。在AI中&#xff0c;代理也就是执行动作的智能体&#xff0c;也就是agent。使用这个框架可以构建一个可以自由控制的智能执行体&#xff0c;它可以帮我们做许多事情&#xff0c;如下&#xff1…...

3个实用的脚本

1. Linux 系统清理临时文件脚本 该脚本用于清理系统中 /tmp 目录下超过 7 天的临时文件。 #!/bin/bash# 清理 /tmp 目录下超过 7 天的文件 find /tmp -type f -atime 7 -exec rm -f {} \;# 清理 /var/tmp 目录下超过 7 天的文件 find /var/tmp -type f -atime 7 -exec rm -f {…...

Vue3 Composition API与十大组件开发案例详解

文章目录 一、Vue3核心API解析1.1 Composition API优势1.2 核心API 二、十大组件开发案例案例1&#xff1a;响应式表单组件案例2&#xff1a;动态模态框&#xff08;Teleport应用&#xff09;案例3&#xff1a;可复用列表组件案例4&#xff1a;全局状态通知组件案例5&#xff1…...

万用表判断MOS好坏

无论什么封装&#xff0c;D极一般在正面看的上面&#xff0c;或者焊盘面积最大的一面&#xff1a; 【零】烧个洞的那种&#xff0c;不用量了&#xff0c;一眼损坏 【一】万用表的二极管档位测量 检修&#xff1a;使用万用表的二极管档位&#xff0c;S极接红表笔&#xff0c;黑…...

算法驱动光场革命:SLM技术引领智能光学新时代

◀背景引入▶ 空间光调制器本质上是一种能够对光波的振幅、相位或偏振状态进行空间分布调制的动态光学器件&#xff0c;我司自主研发的SLM产品采用硅基液晶技术&#xff0c;通过电信号控制液晶分子的排列状态&#xff0c;实现对入射光波的精确调控。这种精确调控能力使得SLM成…...

webgl入门实例-11WebGL 视图矩阵 (View Matrix)基本概念

WebGL 视图矩阵 (View Matrix) 在WebGL中&#xff0c;视图矩阵(View Matrix)定义了观察者(相机)在世界空间中的位置和方向&#xff0c;它实现了从世界坐标系到相机坐标系的转换。 什么是视图矩阵&#xff1f; 视图矩阵是一个4x4的矩阵&#xff0c;用于&#xff1a; 将场景从…...

ESP32 搭建IDF+Vscode环境(详细教程)

1. IDF环境安装 1.1 ESP-IDF介绍​ ESP-IDF (Espressif IoT Development Framework) 是 Espressif( 乐鑫) 公司提供的面向ESP32 系列 的官方开源开发框架&#xff0c;用于开发物联网应用。ESP-IDF 的特点是高度的集成性和可移植性&#xff0c;提供了完整的 SDK&#xff0c;…...

精准计量+AI管控——安科瑞助力高校水电管理数字化转型

安科瑞顾强 传统管理痛点&#xff1a;效率低、隐患多、成本高 高校后勤水电管理长期面临多重挑战&#xff1a;人工抄表需宿管逐层逐户记录&#xff0c;耗时耗力且易出现漏抄、错抄&#xff0c;导致费用核算不公&#xff1b;老旧机械式电表误差率高达5%-10%&#xff0c;计量纠…...

PHP腾讯云人脸核身获取SIGN Ticket

参考腾讯云官方文档&#xff1a;人脸核身 获取 SIGN ticket_腾讯云 前提条件&#xff1a;已经获取了access_token。获取方法可参考&#xff1a; PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getSignTicket(){$access_token file_get_contents(/data/confi…...

探索 Higress:下一代云原生 API 网关

引言 在云原生时代&#xff0c;API 网关作为连接客户端与后端服务的桥梁&#xff0c;扮演着至关重要的角色。Higress 是一款由阿里巴巴开发的先进云原生 API 网关&#xff0c;基于开源的 Istio 和 Envoy 构建。它通过将流量网关、微服务网关和安全网关三者高度集成&#xff0c…...

UE5编辑器静止状态下(非 Play 模式)睫毛和眼睛的渲染是正常的,而在 Play 模式下出现模糊

这通常指向以下几个 运行时&#xff08;Runtime&#xff09; 特有的原因&#xff1a; 抗锯齿 (Anti-Aliasing) 方法&#xff0c;特别是 Temporal Anti-Aliasing (TAA): 这是最可能的原因。 UE5 默认启用的 TAA 通过混合多帧信息来平滑边缘和减少闪烁&#xff0c;尤其是在运动中…...

ubuntu-24.04.2-live-server-arm64基于cloud-init实现分区自动扩容(LVM分区模式)

1. 环境 虚拟机镜像ISO&#xff1a;ubuntu-24.04.2-live-server-arm64.iso 2. 定制cloud-init镜像 2.1 安装OS 基于ubuntu-24.04.2-live-server-arm64.iso&#xff0c;通过virt-manager安装操作系统&#xff0c;语言建议选择英文&#xff0c;分区选择基于LVM的自动分区&…...

解决 Spring Boot 多数据源环境下事务管理器冲突问题(非Neo4j请求标记了 @Transactional 尝试启动Neo4j的事务管理器)

0. 写在前面 到底遇到了什么问题&#xff1f; 简洁版&#xff1a; 在 Oracle 与 Neo4j 共存的多数据源项目中&#xff0c;一个仅涉及 Oracle 操作的请求&#xff0c;却因为 Neo4j 连接失败而报错。根本原因是 Spring 的默认事务管理器错误地指向了 Neo4j&#xff0c;导致不相…...

直线轴承在自动化机械设备中的应用

直线轴承作为机械传动系统中的关键部件&#xff0c;凭借其高精度、低摩擦和稳定性能&#xff0c;被广泛应用于各类自动化设备中。以下是直线轴承在自动化领域的典型应用场景&#xff1a; CNC机床 在数控机床的进给系统中&#xff0c;直线轴承与精密导轨配合使用&#xff0c;为刀…...

生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗

肿瘤及肿瘤治疗 免疫疗法 CAR-T细胞介绍...

6.数据手册解读—运算放大器(二)

目录 6、细节描述 6.1预览 6.2功能框图 6.3 特征描述 6.3.1输入保护 6.3.1 EMI抑制 6.3.3 温度保护 6.3.4 容性负载和稳定性 6.3.5 共模电压范围 6.3.6反相保护 6.3.7 电气过载 6.3.8 过载恢复 6.3.9 典型规格与分布 6.3.9 散热焊盘的封装 6.3.11 Shutdown 6.4…...

010数论——算法备赛

数论 模运算 一般求余都是对正整数的操作&#xff0c;如果对负数&#xff0c;不同编程语言结果可能不同。 C/javapythona>m,0<a%m<m-1 a<m,a%ma~5%32~-5%3 -21(-5)%(-3) -2~5%(-3)2-1正数&#xff1a;&#xff08;ab&#xff09;%m((a%m)(b%m))%m~正数&#xff…...

算法01-最小生成树prim算法

最小生成树prim算法 题源&#xff1a;代码随想录卡哥的题 链接&#xff1a;https://kamacoder.com/problempage.php?pid1053 时间&#xff1a;2025-04-18 难度&#xff1a;4⭐ 题目&#xff1a; 1. 题目描述&#xff1a; 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&…...

轻量化高精度的视频语义分割

Video semantic segmentation (VSS)视频语义分割 Compact Models(紧凑模型) 在深度学习中,相对于传统模型具有更小尺寸和更少参数数量的模型。这些模型的设计旨在在保持合理性能的同时,减少模型的计算和存储成本。 紧凑模型的设计可以涉及以下一些技术: 深度剪枝(Deep…...

【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)

背景&#xff1a; 终极目标&#xff1a;通过python调用大模型&#xff0c;获得结果&#xff0c;然后根据返回信息&#xff0c;控制AutoIT操作电脑软件&#xff0c;执行具体工作。让AI更具有执行力。 已完成部分&#xff1a; 关于python调用大模型的&#xff0c;可以参考之前的…...

Android守护进程——Vold (Volume Daemon)

简介 介绍&#xff1a;Vold 是用来管理 android 系统的存储设备&#xff0c;如U盘、SD卡、磁盘等移动设备的热插拔、挂载、卸载、格式化 框架结构&#xff1a;Vold 在系统中以守护进程存在&#xff0c;是一个单独的进程。处于Kernel和Framework之间&#xff0c;是两个层级连接…...

【实体转换】mapstruct详解

大家好&#xff0c;我是jstart千语。今天来给大家讲讲在项目中经常可以使用得到的一个“工具”&#xff0c;就是mapstruct。 一、工具介绍 这个工具有些类似于spring提供的BeanUtils.copyProperties()用于对象转化。而mapstruct是通过生成高效的、类型安全的映射代码来帮助开发…...

部署路线Ubuntu_MySQL_Django_绑定域名

第 1 步&#xff1a;绑定域名&#xff08;DNS&#xff09; 在域名服务商后台&#xff08;例如阿里云 / 腾讯云 / Cloudflare&#xff09;中设置&#xff1a; A 记录 →域名 → 指向服务器公网 IP 可选&#xff1a;也加一个 www.域名 → 同样指向服务器 第 2 步&#xff1a;安…...

大屏设计与汇报:政务服务可视化实践

大屏设计与汇报:政务服务可视化实践 引言 在政务服务数字化转型浪潮中,大屏设计成为展现业务能力与数据价值的关键手段。本文围绕政务大屏设计,从设计要点、业务逻辑到汇报技巧展开深入探讨,为相关从业者提供全面参考。 一、大屏设计核心要点 (一)多维度考量 设计大…...

【MySQL】数据库和表的操作详解

目录 一、数据库&#xff1a; 1、查看数据库&#xff1a; 2、创建数据库&#xff1a; 3、删除数据库&#xff1a; 4、数据库的编码问题&#xff1a; 5、校验规则对数据库的影响&#xff1a; 6、修改数据库&#xff1a; 7、库的备份与恢复&#xff1a; 8、查看链接情况…...