AJAX原理与XMLHttpRequest
目录
一、XMLHttpRequest使用步骤
基本语法
步骤 1:创建 XHR 对象
步骤 2:调用 open() 方法
步骤 3:监听 loadend 事件
步骤 4:调用 send() 方法
二、完整示例
1. GET 请求(带查询参数)
2. POST 请求(提交 JSON 数据)
三、关键注意事项
四、URLSearchParams
1. URLSearchParams 的作用
2. 代码示例解析
3. URLSearchParams 常用方法
1. 添加参数
2. 删除参数
3. 获取参数值
4. 遍历参数
4. 处理特殊字符
5. 可选链操作符
五、简易封装axios
1. Axios 核心设计
2. 简易封装示例
3. AJAX 与 Axios 对比
AJAX(Asynchronous JavaScript and XML)核心原理:通过浏览器提供的 XMLHttpRequest(XHR)对象,实现异步通信,无需刷新页面即可与服务器交换数据。
一、XMLHttpRequest使用步骤
基本语法
- 创建对象 → 配置请求 → 监听事件 → 发送请求
const xhr = new XMLHttpRequest()
xhr.open('请求方法', '请求url网址')
xhr.addEventListener('loadend', () => {// 响应结果console.log(xhr.response)
})
xhr.send()
步骤 1:创建 XHR 对象
const xhr = new XMLHttpRequest();
-
作用:初始化一个 XHR 实例,用于后续的请求配置和操作。
-
注意:旧版 IE(< IE7)需使用
ActiveXObject
,但现代浏览器无需兼容处理。
步骤 2:调用 open()
方法
xhr.open(method, url, async);
-
参数说明:
-
method
:HTTP 方法(GET
、POST
、PUT
等)。 -
url
:请求的目标地址(支持绝对或相对路径)。 -
async
:是否异步(默认为true
,强烈建议使用异步)。
-
-
关键点:
-
GET 请求的查询参数需直接拼接到 URL 中(需手动编码)。
const params = { page: 1, keyword: 'AJAX' }; const query = new URLSearchParams(params).toString(); // 自动编码 const url = `https://api.example.com/data?${query}`; xhr.open('GET', url, true);
-
POST 请求的数据在
send()
中传递(需配合请求头)。
-
步骤 3:监听 loadend
事件
xhr.addEventListener('loadend', function() {// 请求完成(无论成功或失败)if (xhr.status >= 200 && xhr.status < 300) {console.log('成功:', xhr.responseText);} else {console.error('失败:', xhr.status, xhr.statusText);}
});
-
loadend
事件特性:-
在请求完成(包括成功、失败或取消)后触发。
-
替代传统
onreadystatechange
的繁琐状态判断。
-
-
响应数据获取:
-
xhr.responseText
:字符串形式的响应数据(如 JSON、HTML)。 -
xhr.response
:根据responseType
自动转换后的数据(如 JSON 对象)。
-
步骤 4:调用 send()
方法
xhr.send(body);
-
GET 请求:
send()
无参数或传null
。xhr.send();
-
POST 请求:传递请求体数据(需设置
Content-Type
)。// 设置请求头(JSON 格式) xhr.setRequestHeader('Content-Type', 'application/json');// 提交 JSON 数据 const postData = JSON.stringify({ username: 'john', age: 25 }); xhr.send(postData);// 提交 FormData(文件上传) const formData = new FormData(); formData.append('file', fileInput.files[0]); xhr.send(formData);
二、完整示例
1. GET 请求(带查询参数)
const xhr = new XMLHttpRequest();// 构建带查询参数的 URL
const params = { page: 1, search: 'AJAX 教程' };
const url = `https://api.example.com/data?${new URLSearchParams(params)}`;xhr.open('GET', url, true);xhr.addEventListener('loadend', () => {if (xhr.status === 200) {const data = JSON.parse(xhr.responseText);console.log('数据:', data);} else {console.error(`请求失败: ${xhr.status}`);}
});xhr.send();
2. POST 请求(提交 JSON 数据)
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.example.com/submit', true);// 设置请求头
xhr.setRequestHeader('Content-Type', 'application/json');xhr.addEventListener('loadend', () => {if (xhr.status === 201) {console.log('提交成功:', xhr.responseText);} else {console.error(`错误: ${xhr.status}`);}
});// 提交 JSON 数据
const data = { title: 'XHR 教程', content: '详细指南' };
xhr.send(JSON.stringify(data));
三、关键注意事项
-
查询参数编码:
// 手动编码示例 const keyword = '前端&后端'; const encodedKeyword = encodeURIComponent(keyword); // → '前端%26后端'
-
使用
URLSearchParams
或encodeURIComponent
避免特殊字符问题。
-
-
POST 请求头设置:
-
必须根据数据类型设置
Content-Type
,否则服务器无法正确解析。-
application/json
:JSON 数据。 -
multipart/form-data
:文件上传。 -
application/x-www-form-urlencoded
:表单数据。
-
-
-
错误处理:
-
结合
loadend
和xhr.status
处理 HTTP 状态码。 -
监听
error
和timeout
事件处理网络错误和超时。xhr.addEventListener('error', () => {console.error('网络错误'); });xhr.timeout = 5000; // 设置超时时间 xhr.addEventListener('timeout', () => {console.error('请求超时'); });
-
-
同步请求已废弃:
-
open()
的第三个参数若设为false
(同步请求),会导致页面阻塞,现代开发中禁止使用。
-
XHR和Axios的默认请求头对比
场景 | XHR(原生) | Axios |
---|---|---|
发送 JSON 数据 | 需手动设置 Content-Type | 自动设置 Content-Type: application/json |
发送 FormData | 自动设置 multipart/form-data | 自动设置 multipart/form-data |
全局默认头 | 无 | 支持通过 axios.defaults.headers 配置全局头 |
拦截器 | 无 | 支持请求/响应拦截器统一管理头 |
必须声明Headers的情况
场景 | XHR | Axios |
---|---|---|
发送非表单数据 | 必须手动设置 Content-Type | 自动处理,可手动覆盖 |
身份认证 | 必须设置 Authorization | 必须设置 Authorization |
跨域自定义头 | 必须声明且服务器允许 | 必须声明且服务器允许 |
文件上传 | 使用 FormData 时自动处理 | 使用 FormData 时自动处理 |
四、URLSearchParams
1. URLSearchParams
的作用
URLSearchParams
是一个 Web API,用于解析、操作 URL 的查询参数(即 ?
后的部分)。它可以:
-
将对象转换为 URL 查询字符串(自动编码特殊字符)。
-
解析现有查询字符串为键值对。
-
动态添加、删除、遍历参数。
2. 代码示例解析
qObj = { key1: 'value1', key2: 'value2' }
const paramsObj = new URLSearchParams(qObj);
const queryString = paramsObj.toString();
xhr.open('GET', `http://example.net/api?${queryString}`);
步骤分解:
-
创建
URLSearchParams
实例const paramsObj = new URLSearchParams(qObj);
-
假设
qObj
是一个对象(如{ key1: 'value1', key2: 'value2' }
)。 -
URLSearchParams
会将其转换为键值对结构。
-
-
生成查询字符串
const queryString = paramsObj.toString();
-
toString()
方法将参数转换为标准的 URL 查询字符串(如key1=value1&key2=value2
)。 -
自动处理编码:空格转为
%20
,中文转为%E4%B8%AD
等。
-
-
拼接完整 URL
xhr.open('GET', `http://example.net/api?${queryString}`);
-
最终生成的 URL 示例:
http://example.net/api?key1=value1&key2=value2
-
3. URLSearchParams
常用方法
1. 添加参数
paramsObj.append('page', 1); // 添加新参数
paramsObj.append('page', 2); // 允许重复键:page=1&page=2
2. 删除参数
paramsObj.delete('key1'); // 删除指定键
3. 获取参数值
const value = paramsObj.get('key1'); // 获取第一个值
const allValues = paramsObj.getAll('page'); // 获取所有值(数组)
4. 遍历参数
for (const [key, value] of paramsObj) {console.log(key, value);
}
4. 处理特殊字符
URLSearchParams
会自动编码特殊字符,无需手动调用 encodeURIComponent
。
示例:
const params = new URLSearchParams({ city: '北京', q: 'a&b=c' });
console.log(params.toString());
// 输出:city=%E5%8C%97%E4%BA%AC&q=a%26b%3Dc
5. 可选链操作符
JavaScript 中的
?.
是可选链操作符(Optional Chaining Operator),用于安全地访问对象的深层属性。它的作用是:当某个中间属性为null
或undefined
时,直接返回undefined
,而不会抛出错误。
代码示例分析:
// 假设 xhr 是 XMLHttpRequest 的实例
const data = xhr.response?.data;
-
xhr.response
XHR 请求完成后,xhr.response
是服务器返回的数据。
如果请求未完成或失败,xhr.response
可能是null
或undefined
。 -
xhr.response?.data
-
如果
xhr.response
存在:继续访问data
属性。 -
如果
xhr.response
是null
或undefined
:直接返回undefined
,不会尝试访问.data
。
-
可选链操作符(?.
)的核心规则:
场景 | 代码示例 | 结果 |
---|---|---|
属性存在 | obj?.prop | 返回 obj.prop |
属性不存在(null/undefined ) | obj?.prop | 返回 undefined ,不会报错 |
深层属性访问 | obj?.prop1?.prop2 | 逐层检查,任一中间属性为 null/undefined 则返回 undefined |
函数调用 | obj.method?.() | 如果 obj.method 存在则调用,否则返回 undefined |
五、简易封装axios
Axios 原理:基于
Promise
封装的 HTTP 客户端库,底层依赖XMLHttpRequest
(浏览器)或http
模块(Node.js),提供更简洁、强大的 API。
1. Axios 核心设计
-
适配器模式
-
浏览器环境:使用
XMLHttpRequest
发送请求。 -
Node.js 环境:使用
http
模块发送请求。 -
统一 API:开发者无需关注底层差异。
-
-
拦截器机制
-
请求拦截器:在请求发送前统一处理(如添加 Token)。
-
响应拦截器:在响应返回后统一处理(如错误过滤)。
// 添加请求拦截器 axios.interceptors.request.use(config => {config.headers.Authorization = 'Bearer token';return config; });// 添加响应拦截器 axios.interceptors.response.use(response => response.data, // 提取 data 字段error => Promise.reject(error) );
-
-
配置合并策略
-
全局配置 → 实例配置 → 单次请求配置,优先级递增。
-
自动处理
headers
(如Content-Type
根据数据类型推断)。
-
-
Promise 链式调用
-
所有请求返回
Promise
对象,支持async/await
。 -
错误通过
.catch()
或try/catch
统一处理。
-
2. 简易封装示例
模拟 axios 函数封装,更深入了解 axios 内部运作原理:
//定义myAxios函数,接收配置对象,返回Promise对象
function myAxios(config) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()//判断有params选项,携带查询参数if (config.params) {//使用URLSearchParams转换,并携带到url上const paramsObj = new URLSearchParams(config.params)const queryString = paramsObj.toString()config.url += `?${queryString}`}//发起XHR请求,默认请求方法为GETxhr.open(config.method || 'GET', config.url)xhr.addEventListener('loadend', () => {//调用成功/失败的处理程序if (xhr.status >= 200 && xhr.status < 300) {resolve(JSON.parse(xhr.response))}else {reject(new Error(xhr.response))}})//判断有data选项,携带请求体if (config.data) {xhr.setRequestHeader('Content-Type', 'application/json')xhr.send(JSON.stringify(config.data))}else {xhr.send()}})
}
3. AJAX 与 Axios 对比
特性 | AJAX(原生 XHR) | Axios |
---|---|---|
底层实现 | 直接操作 XMLHttpRequest 对象 | 封装 XHR 或 Node.js http 模块,提供统一 API |
异步处理 | 回调函数 | 基于 Promise ,支持 async/await |
数据转换 | 手动解析 JSON、XML 等格式 | 自动转换 JSON 数据 |
拦截器 | 需手动实现 | 内置请求/响应拦截器 |
取消请求 | 使用 xhr.abort() | 支持 CancelToken 和 AbortController |
跨域处理 | 需服务端配合 CORS 或 JSONP | 自动处理 CORS,支持 withCredentials 配置 |
代码简洁性 | 冗余,需手动处理细节 | 链式调用,配置化 API |
相关文章:
AJAX原理与XMLHttpRequest
目录 一、XMLHttpRequest使用步骤 基本语法 步骤 1:创建 XHR 对象 步骤 2:调用 open() 方法 步骤 3:监听 loadend 事件 步骤 4:调用 send() 方法 二、完整示例 1. GET 请求(带查询参数) 2. POST 请…...
css中的3d使用:深入理解 CSS Perspective 与 Transform-Style
在前端开发的奇妙世界中,CSS 不仅负责页面的布局和样式,还能赋予元素生动的动态效果。要实现引人入胜的 3D 变换,perspective 和 transform-style 这两个属性扮演着至关重要的角色。本文将带您深入了解这两个属性,揭开它们如何协同…...
在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener)
在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener),它可以帮助你实时观察测试过程中活跃线程数(并发用户数)的变化趋势,从而分析系统的并发处理能力和负载情况。 1. Active Threads Over Time 的作用 实时监控并发用户数:显示测试过程中活跃线程…...
未来七轴机器人会占据主流?深度解析具身智能方向当前六轴机器人和七轴机器人的区别,七轴力控机器人发展会加快吗?
六轴机器人和七轴机器人在设计、功能和应用场景上存在明显区别。六轴机器人是工业机器人的传统架构,而七轴机器人则在多自由度和灵活性方面进行了增强。 本文将在理解这两者的区别以及为何六轴机器人仍然是市场主流,从多个方面进行深入解读六轴和七轴区…...
spark-SOL简介
Spark-SQL简介 一.Spark-SQL是什么 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 二.Hive and SparkSQL SparkSQL 的前身是 Shark,Shark是给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供的快速上手的工具 …...
【今日三题】经此一役小红所向无敌(模拟) / 连续子数组最大和(动态规划) / 非对称之美(贪心)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 经此一役小红所向无敌(模拟)连续子数组最大和(动态规划)非对称之美(贪心) 经此一役小红所向无敌(模拟) 经此一役小红所向无…...
MYSQL MVCC详解
这里写自定义目录标题 **一、MVCC 解决的核心问题****二、MVCC 的核心实现机制****1. 隐藏字段与版本链****2. Undo Log****3. ReadView(一致性视图)** **三、MVCC 的可见性判断过程****四、不同隔离级别下的 MVCC 行为****五、MVCC 的优缺点****六、示例…...
Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化
一、软件介绍 文末提供源码和程序下载学习 Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化。Trinity 提供性能分析和 XAI 工具,非常适合深度学习系统或其他执行复杂分类或解码的模型。 二、软件作用和特征 Trinity 通过结合具有超维感知能力的不同交…...
用 Deepseek 写的uniapp血型遗传查询工具
引言 在现代社会中,了解血型遗传规律对于优生优育、医疗健康等方面都有重要意义。本文将介绍如何使用Uniapp开发一个跨平台的血型遗传查询工具,帮助用户预测孩子可能的血型。 一、血型遗传基础知识 人类的ABO血型系统由三个等位基因决定:I…...
展示数据可视化的魅力,如何通过图表、动画等形式让数据说话
在当今信息爆炸的时代,数据的量级和复杂性不断增加。如何从海量数据中提取有价值的信息,并将其有效地传达给用户,成为了一个重要的课题。数据可视化作为一种将复杂数据转化为直观图形、图表和动画的技术,能够帮助用户快速理解数据…...
解决安卓开发“No Android devices detected.”问题
解决安卓开发“No Android devices detected.”问题 当我们插入移动设备的USB时,却发现这并未显示已连接到的设备 点击右侧的Assistant,根据提示打开移动设备开发者模式并启用USB调试模式,然后发现我们未连接到移动设备的原因是ABD服务的原因 问题确定了&…...
Android13 WIFI调试(rtl8821cs)
一、WiFi框架概述 1、Wi‑Fi 是一种无线通信技术,在 Linux 系统上一般可处于三种工作模式,分别是: STATION、AP、MONITOR。 station :工作sta模式,类比手机主动连网。 ap:工作ap模式,类比手机开热点。 mon…...
Android常见界面控件、程序活动单元Activity练习
第3章 Android常见界面控件、第4章程序活动单元Activity 一. 填空题 1. (填空题)Activity的启动模式包括standard、singleTop、singleTask和_________。 正确答案: (1) singleInstance 2. (填空题)启动一个新的Activity并且获取这个Activity的返回数据ÿ…...
过拟合、归一化、正则化、鞍点
过拟合 过拟合的本质原因往往是因为模型具备方差很大的权重参数。 定义一个有4个特征的输入,特征向量为,定义一个模型,其只有4个参数,表示为。当模型过拟合时,这四个权重参数的方差会很大,可以假设为。当经过这个模型后…...
关于多agent多consumer架构设想
多个agent接入设备 每个agent对接同一个消费队列,非竞争设置,通过判断consumer中的参数如果是发给自己的,则下发,如果不是,则快速跳过。每个消费者接收消息时通过Header中值判断是来着哪个agent服务器的,发…...
国内互联网大厂推出的分布式数据库 的详细对比,涵盖架构、性能、适用场景、核心技术等维度
以下是 国内互联网大厂推出的分布式数据库 的详细对比,涵盖架构、性能、适用场景、核心技术等维度: 一、主流分布式数据库列表 大厂数据库名称类型适用场景发布时间腾讯云TDSQL分布式HTAP金融、电商、游戏、政企2010年阿里云OceanBase分布式HTAP银行核…...
【深度学习】自定义实现DataSet和DataLoader
dataset数据集 作用: 存储数据集的信息获取数据集长度 __len__获取数据集某特定条目的内容 __getitem__ dataloader 数据加载器 作用: 从数据集中随机加载数据, 并拼接为一个 batch实现迭代器, 可以使用时, 迭代获取数据内容 代码实现:…...
spark简介和核心编程
简介 1. Spark-SQL概述:Spark SQL是Spark处理结构化数据的模块,前身是Shark。Shark基于Hive开发,提升了SQL-on-Hadoop的性能,但对Hive的过度依赖制约了Spark发展。SparkSQL抛弃Shark代码,汲取其优点后重新开发&#x…...
47、Spring Boot 详细讲义(四)
六. Spring Boot 与数据库 目录 JDBC 集成 Spring Data JPA MyBatis 集成 事务管理 1、JDBC 集成 1.1 JDBC简介 1.1.1 定义和作用 JDBC(Java Database Connectivity)是Java中用于与关系型数据库进行交互的API。它为Java程序提供了一个标准的、统一的接口…...
Dify - 整合Ollama + Xinference私有化部署Dify平台(01)
文章目录 总体方案服务器在Ubuntu 20.04上安装Docker更新软件包索引安装一些必要的软件包,以便apt能够通过HTTPS使用仓库:添加Docker的官方GPG密钥设置稳定的仓库再次更新软件包索引从新添加的仓库中安装Docker CE验证Docker是否安装成功(可选…...
【RocketMQ】关于RocketMQ配置好了jdk环境变量却一直报需要配置环境变量的问题
正如上图所示,我明明已经配置好了环境变量,也显示配置好了,jdk与我的rocketmq的版本也是适配的,可每次启动namesrv和broker却一直显示要去配置环境变量,其实很简单,配置环境变量时特殊符号会影响路径查找&a…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(投资信息化全流程管理项目)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 1、规划范围管理2、收集需求3、定义范围4、创建wbs5、确认范围6、控制范围2018年2月,我有幸参加了 XX省自贸区财政投资信息化全流程管理项目的假设,作为项目发起单位,省自贸办经过审时度势,及时响应国家自贸…...
Jmeter创建使用变量——能够递增递减的计数器
Jmeter创建使用变量——能够递增递减的计数器 如下图所示,创建一个 取值需限定为0 2 4这三个值内的变量。 Increment:每次迭代后 递增的值,给计数器增加的值 Maximum value:计数器的最大值,如果超过最大值࿰…...
数据分析不只是跑个SQL!
数据分析不只是跑个SQL! 数据分析五大闭环,你做到哪一步了?闭环一:认识现状闭环二:原因分析闭环三:优化表现闭环四:预测走势闭环五:主动解读数据 数据思维:WHY-WHAT-HOW模…...
批量将文件夹名称、文件夹路径提取到 Excel 清单
在日常工作中,管理大量文件夹和文件路径可能变得十分繁琐。无论是在进行文件整理、备份还是数据分析时,提取文件夹的名称与路径信息,能够帮助你更高效地管理文件。本文将为您提供如何快速提取文件夹名称与路径,并将这些信息整理到…...
Git 基本使用
一、Git简介 简单的内容追踪系统;是一个快速、可扩展的分布式版本控制系统,拥有异常丰富的命令集提供高级操作和对内部的完全访问。 二、Git安装 详情看本人此文章。 三、Git 命令(基础版) 把 Git 分为上层封装命令(…...
LLM - Dify 平台介绍
文章目录 引言官网核心功能架构图典型应用场景在线平台 引言 Dify 是一款开源的 LLM(大语言模型)应用开发平台,旨在帮助开发者快速构建、部署和管理基于大语言模型的智能化应用。 官网 https://dify.ai/zh https://github.com/langgenius/…...
linux编译adbd工具使用
在使用linux时,通常是没有现成的adbd文件使用的,这就需要我们进行文件的编译了,编译可以分为三步进行,在编译前我们需要下载对应的源码使用,我们可以从 https://launchpad.net/android-tools地址处下载需要的android-tools源码使用…...
安全人员如何对漏洞进行定级?
CVSS 标准 CVSS 介绍 CVSS,即通用漏洞评分系统(Common Vulnerability Scoring System),是一个用于评估计算机系统漏洞严重程度的行业标准。 CVSS为安全专业人员、漏洞管理团队和系统管理员提供了一种标准化的方法来评估和比较不…...
【ROS2】行为树 BehaviorTree(四):组合使用子树
1、大树调用子树 如下图,左边为大树主干: 1)如果门没有关,直接通过; 2)如果门关闭了,执行开门动作,然后通过 右边为子树,主要任务是开门 1)尝试直接开门; 2)尝试开锁开门,最多尝试5次; 3)最后尝试砸门! XML如何描述大树主干调佣子树:使用关键字 SubTree 来…...
第十六届蓝桥杯Java b组(试题C:电池分组)
问题描述: 输入格式: 输出格式: 样例输入: 2 3 1 2 3 4 1 2 3 4 样例输出: YES NO 说明/提示 评测用例规模与约定 对于 30% 的评测用例,1≤T≤10,2≤N≤100,1≤Ai≤10^3。对于 100…...
HarmonyOS:使用Refresh组件实现页面下拉刷新
一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…...
Python----机器学习(基于PyTorch的垃圾邮件逻辑回归)
Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 本例使用了…...
Spark-SQL
概念 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。 Spark-SQL 特点: 1,易整合,无缝的整合了 SQL 查询和 Spark 编程。 2,统一的数据访问,使用相同的方式连接不同的数据源。 3…...
spark-sql核心
在大数据处理领域,Apache Spark已成为极为重要的分布式计算框架,而Spark SQL作为其重要组件,极大地拓展了Spark的能力边界,为结构化数据处理提供了高效、便捷的解决方案。 一、Spark SQL架构剖析 Spark SQL的架构设计精妙&#…...
TypeScript 进阶指南 - 使用泛型与keyof约束参数
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
labview的VI密码破解程序
上图即为密码破解原理,若需源代码可联系我...
AI技术前沿:蓝耘元生代智算云快速入门教程详解,与其他云人工智能大模型深度对比
文章目录 一、前言二、蓝耘元生代智算云基础概念2.1 什么是智算云2.2 蓝耘元生代智算云的特点 三、蓝耘元生代智算云使用前准备3.1 注册与登录3.2 了解计费方式3.3 熟悉控制台界面 四、在蓝耘元生代智算云上运行第一个任务4.1 创建计算资源4.2 上传代码和数据4.3 安装依赖库4.4…...
Spring MVC 请求处理流程详解
步骤1:用户发起请求 所有请求首先被 DispatcherServlet(前端控制器)拦截,它是整个流程的入口。 DispatcherServlet 继承自 HttpServlet,通过 web.xml 或 WebApplicationInitializer 配置映射路径(如 /&…...
金融行业 AI 报告自动化:Word+PPT 双引擎生成方案
—从数据到决策,10倍效率提升的智能金融解决方案 一、金融行业报告制作的四大核心痛点 1. 人工制作成本高 传统流程耗时: 分析师撰写Word报告:8-12小时/份设计师制作PPT:4-6小时/份团队协作修改:反复沟通,…...
01_JDBC
文章目录 一、概述1.1、什么是JDBC1.2、JDBC原理 二、JDBC入门2.1、准备工作2.1.1、建库建表2.1.2、新建项目 2.2、建立连接2.2.1、准备四大参数2.2.2、加载驱动2.2.3、准备SQL语句2.2.4、建立连接2.2.5、常见问题 2.3、获取发送SQL的对象2.4、执行SQL语句2.5、处理结果2.6、释…...
三层架构与分层解耦:深入理解IOC与DI设计模式
目录 一、软件架构演进与三层架构概述 1.1 从单体架构到分层架构 1.2 经典三层架构详解 1.3 三层架构的优势 二、分层解耦的核心思想 2.1 耦合与解耦的基本概念 2.2 分层解耦的实现手段 2.3 分层解耦的实践原则 三、控制反转(IOC)深度解析 3.1…...
[react]Next.js之自适应布局和高清屏幕适配解决方案
序言 阅读前首先了解即将要用到的两个包的作用 1.postcss-pxtorem 自动将 CSS 中的 px 单位转换为 rem 单位按照设计稿尺寸直接写 px 值,由插件自动计算 rem 值 2.amfe-flexible 动态设置根元素的 font-size(即 1rem 的值)根据设备屏幕宽度和…...
TensorFlow深度学习实战——基于语言模型的动态词嵌入技术
TensorFlow深度学习实战——基于语言模型的动态词嵌入技术 0. 前言1. 基于语言模型的词嵌入1.1 ELMo 与 ULMFiT1.2 GPT1.3 BERT 2. 使用 BERT 作为特征提取器相关链接 0. 前言 基于语言模型的词嵌入技术,通过利用上下文信息来生成动态的词向量,大大提升…...
欧拉服务器操作系统部署deekseep(Ollama+DeekSeep+open WebUI)
一、解压并安装 Ollama # 1. 解压文件(默认会得到一个二进制文件) tar -xzvf ollama-linux-amd64.tgz# 2. 将二进制文件安装到系统路径 sudo mv ollama /usr/local/bin/ sudo chmod x /usr/local/bin/ollama# 3. 验证安装 ollama --version链接…...
cocosCreator安卓隐私弹窗(链接版)
每次新上游戏都要重新弄这个隐私弹窗,记录一下下次直接抄。 一、创建Activity 1 用androidStudio 打开项目并切换到Android视角。 2 右键项目new一个空的Activity 3 修改Activity的名字并完成如下图 二、增加依赖文件 1 增加全局颜色定义文件:项目根目录 / res/values/ …...
统计销量前十的订单
传入参数: 传入begin和end两个时间 返回参数 返回nameList和numberList两个String类型的列表 controller层 GetMapping("/top10")public Result<SalesTop10ReportVO> top10(DateTimeFormat(pattern "yyyy-MM-dd") LocalDate begin,Dat…...
【Python爬虫】简单案例介绍2
本文继续接着我的上一篇博客【Python爬虫】简单案例介绍1-CSDN博客 目录 跨页 3.2 环境准备 跨页 当对单个页面的结构有了清晰的认识并成功提取数据后,接下来就需要考虑页面之间的跨页问题。此时我们便迎来了下一个关键任务:如何实现跨页爬取…...
适合单片机裸机环境的运行的软件定时器框架
如下这篇文档介绍了一个适用于裸机环境的软件定时器模块,其核心功能和实现如下: 模块功能:该模块通过硬件定时器中断实现时基累加,适合用于裸机程序的调度处理。它使用硬件定时中断(如1ms一次)来增加hw_ti…...
【ComfyUI】蓝耘元生代 | ComfyUI深度解析:高性能AI绘画工作流实践
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…...