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

http request-01-XMLHttpRequest XHR 简单介绍

http 请求系列

http request-01-XMLHttpRequest XHR 简单介绍

http request-01-XMLHttpRequest XHR 标准

Ajax 详解-01-AJAX(Asynchronous JavaScript and XML)入门介绍

Ajax XHR 的替代方案-fetch

Ajax XHR 的替代方案-fetch 标准

Ajax 的替代方案-axios.js

http 请求-04-promise 对象 + async/await

XHR 的官方学习资料 给出网址

以下是一些官方学习 XMLHttpRequest (XHR) 的资源网址:

  1. MDN Web Docs - XMLHttpRequest

    • MDN XMLHttpRequest Documentation
    • 这是最权威和详细的 XHR 文档,提供了关于如何使用 XMLHttpRequest 的全面介绍,包括属性、方法、事件和示例代码。
  2. WhatWG - XMLHttpRequest Standard

    • WhatWG XMLHttpRequest Standard
    • WhatWG 的标准文档详细描述了 XMLHttpRequest 的规范和实现细节,是了解其正式标准的良好资源。
  3. W3C - XMLHttpRequest Level 2 Specification

    • W3C XMLHttpRequest Level 2
    • W3C 的规范文档提供了 XMLHttpRequest Level 2 的详细描述,包括新增的功能和改进。

这些资源将帮助你深入理解 XMLHttpRequest 的功能、用法和规范。

XHR 是什么?

XMLHttpRequest(XHR)是一个用于在客户端和服务器之间进行异步 HTTP 请求的 API,广泛用于动态更新网页内容,而无需重新加载整个页面。

尽管它最初是为了处理 XML 数据而设计的,但它现在支持多种数据格式,并已成为 Web 开发中重要的工具。

1. 基本概念

XMLHttpRequest 提供了在客户端(如浏览器)与服务器之间进行异步通信的能力,使得网页可以在不重新加载页面的情况下更新内容。

它的主要用途包括动态加载数据、提交表单以及与服务器进行实时交互。

2. 核心方法和属性

2.1 创建请求
const xhr = new XMLHttpRequest();
2.2 配置请求
  • open(method, url, async, user, password): 初始化请求。
    • method: HTTP 方法(如 GETPOST)。
    • url: 请求的 URL。
    • async: 是否异步(truefalse)。
    • userpassword: 可选的身份验证信息。
xhr.open('GET', 'https://example.com/data', true);
2.3 发送请求
  • send(body): 发送请求。body 参数用于发送数据(对于 GET 请求,通常为空)。
xhr.send();
2.4 事件处理
  • onload: 请求成功完成时触发。
  • onerror: 请求失败时触发。
  • onprogress: 请求进度更新时触发(适用于进度监控)。
  • onabort: 请求被取消时触发。
  • onreadystatechange: 请求状态改变时触发。
xhr.onload = function() {if (xhr.status >= 200 && xhr.status < 300) {console.log(xhr.responseText);} else {console.error('Request failed with status:', xhr.status);}
};xhr.onerror = function() {console.error('Request error');
};
2.5 重要属性
  • readyState: 请求的当前状态(0: UNSENT, 1: OPENED, 2: HEADERS_RECEIVED, 3: LOADING, 4: DONE)。
  • status: HTTP 响应状态码(如 200、404、500)。
  • statusText: 响应状态文本。
  • responseText: 响应的文本内容。
  • responseXML: 响应的 XML 文档(如果 Content-Typeapplication/xmltext/xml)。
  • response: 根据响应类型(如 ArrayBufferBlob)返回的响应数据。

3. 使用示例

3.1 简单 GET 请求
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true);
xhr.onload = function() {if (xhr.status === 200) {console.log('Response:', xhr.responseText);} else {console.error('Error:', xhr.status, xhr.statusText);}
};
xhr.send();
3.2 POST 请求
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts', true);
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
xhr.onload = function() {if (xhr.status === 201) {console.log('Created:', xhr.responseText);} else {console.error('Error:', xhr.status, xhr.statusText);}
};
const data = JSON.stringify({ title: 'foo', body: 'bar', userId: 1 });
xhr.send(data);
3.3 进度监控
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true);
xhr.onprogress = function(event) {if (event.lengthComputable) {const percentComplete = (event.loaded / event.total) * 100;console.log('Progress:', percentComplete.toFixed(2) + '%');}
};
xhr.onload = function() {if (xhr.status === 200) {console.log('Response:', xhr.responseText);} else {console.error('Error:', xhr.status, xhr.statusText);}
};
xhr.send();

4. 优缺点

4.1 优点
  • 广泛支持: 兼容大多数浏览器,包括较早版本。
  • 灵活性: 支持多种 HTTP 方法和请求体格式。
  • 进度监控: 能够监控请求的进度和状态变化。
4.2 缺点
  • 复杂性: 处理异步操作和错误处理可能比较复杂,特别是嵌套的回调函数(“回调地狱”)。
  • 现代替代品: 比如 fetch API 提供了更简洁的语法和更强大的功能,例如流处理和更好的错误处理。

5. 现代替代

XMLHttpRequest 的一些功能和用途已经被更现代的 fetch API 所取代。fetch 提供了更简洁的语法、支持 Promise 和流处理,使得异步操作和错误处理更为直观。

XHR 为什么需要?解决了什么问题

XMLHttpRequest (XHR) 是一种用于在浏览器和服务器之间进行异步通信的 API。它在 Web 开发中解决了多个关键问题,特别是在用户体验和动态网页更新方面。

以下是 XMLHttpRequest 需要的原因及其解决的问题:

1. 页面异步更新

问题
  • 传统的网页请求: 每次需要从服务器获取新数据或提交数据时,整个页面必须重新加载。这种方式会导致用户体验不流畅,页面刷新较慢。
解决方案
  • XHR 的异步请求: 允许网页在不重新加载整个页面的情况下,从服务器获取数据并更新部分页面内容。这使得网页可以实现局部更新,而不是每次都刷新整个页面,从而提高了用户体验和响应速度。

2. 提高用户体验

问题
  • 页面停顿: 在传统的同步请求中,用户必须等待整个请求和响应过程完成,这可能导致页面停顿或冻结。
解决方案
  • 异步处理: XMLHttpRequest 通过异步处理请求,允许浏览器在发出请求时继续执行其他操作,不会阻塞用户界面的交互。这样,用户可以继续与网页进行交互,而不会受到请求等待的影响。

3. 动态内容加载

问题
  • 静态网页内容: 在没有异步请求的情况下,网页内容通常是静态的,所有内容都在页面加载时获取。
解决方案
  • 动态内容加载: 通过 XMLHttpRequest,网页可以在运行时动态加载数据,并根据需要更新内容。比如,用户滚动到页面底部时自动加载更多数据(如无限滚动),或者基于用户输入实时更新搜索结果。

4. 后台数据处理

问题
  • 用户交互时的数据提交: 用户在填写表单时,数据提交通常会导致页面重新加载,影响用户体验。
解决方案
  • 表单提交: 使用 XMLHttpRequest 可以在不刷新页面的情况下提交表单数据。这使得用户可以在不离开当前页面的情况下完成数据提交和处理。

5. 局部更新和请求管理

问题
  • 整体更新难度: 如果需要对部分页面内容进行更新,传统方法通常需要复杂的页面重载和数据处理。
解决方案
  • 局部更新: XMLHttpRequest 允许通过指定的 URL 和请求方法,只更新页面的某一部分内容。这简化了局部更新的实现,并减少了对服务器的负担。

6. 进度监控

问题
  • 缺乏反馈: 在传统请求中,用户无法获得请求进度的信息(如正在下载的进度)。
解决方案
  • 进度事件: XMLHttpRequest 提供了 onprogress 事件,使得开发者可以实时监控请求的进度,并向用户提供反馈,例如显示下载进度条。

7. 与其他技术的兼容性

问题
  • 旧版浏览器支持: 在 fetch API 出现之前,许多旧版浏览器不支持现代的 HTTP 请求 API。
解决方案
  • 兼容性: XMLHttpRequest 作为较早的标准,得到了广泛的浏览器支持,包括旧版浏览器。这使得它在需要兼容旧版浏览器的应用中仍然非常重要。

XHR 的适用场景,优缺点

XMLHttpRequest(XHR)在 Web 开发中有一些特定的适用场景,以及它的优点和缺点。

以下是一些实际应用场景和它们的优缺点,用更接地气的方式来解释:

适用场景

  1. 动态内容更新

    • 场景: 当你希望在用户与网页交互时,动态更新页面的一部分内容,例如加载评论、文章或产品列表,而不需要重新加载整个页面。
    • 例子: 社交媒体平台上的帖子加载,电商网站上的产品筛选。
  2. 异步表单提交

    • 场景: 当用户填写表单并提交数据时,你希望在后台处理这些数据,而不刷新整个页面。
    • 例子: 用户在评论框中输入内容并提交,数据直接上传到服务器,页面不会重载。
  3. 局部数据刷新

    • 场景: 需要刷新网页的某个部分的数据,而不是整个页面。例如,实时更新价格或天气信息。
    • 例子: 监控仪表板上更新服务器状态,新闻网站上实时更新新闻头条。
  4. 进度反馈

    • 场景: 需要监控和展示文件上传或下载的进度,让用户知道操作的进展。
    • 例子: 文件上传表单,下载大文件时显示进度条。
  5. 旧版浏览器兼容

    • 场景: 如果你的应用需要支持旧版浏览器,它可能不支持现代的 fetch API,但支持 XMLHttpRequest
    • 例子: 针对使用老旧设备或浏览器的用户群体的应用。

优点

  1. 广泛支持

    • 优点: 几乎所有的浏览器都支持 XMLHttpRequest,包括许多旧版浏览器。
    • 实际感受: 你不需要担心用户的浏览器是否支持,因为它几乎能在所有环境中工作。
  2. 灵活性

    • 优点: 支持多种 HTTP 方法(GET、POST、PUT、DELETE 等),并且能够处理不同格式的响应数据。
    • 实际感受: 可以用来做各种各样的请求,比如从服务器获取 JSON 数据或发送表单数据。
  3. 进度监控

    • 优点: 提供 onprogress 事件,可以监控请求的进度。
    • 实际感受: 你可以给用户提供下载或上传的实时进度,提升用户体验。

缺点

  1. 复杂性

    • 缺点: 处理异步请求和响应可能会很复杂,尤其是在嵌套回调函数(“回调地狱”)的情况下。
    • 实际感受: 编写代码时可能会变得混乱,不容易维护。
  2. 没有内建的 Promise 支持

    • 缺点: 不像 fetch API,XMLHttpRequest 默认不支持 Promise,处理异步操作时需要使用回调函数。
    • 实际感受: 需要额外的工作来处理异步操作,代码可能不够简洁。
  3. 较少的功能扩展

    • 缺点: 与现代 API 比如 fetch 相比,XMLHttpRequest 在流处理和功能扩展方面有所限制。
    • 实际感受: 如果需要更高级的功能,比如流式处理大文件,XMLHttpRequest 可能无法满足需求。

XHR 的使用最佳实践

使用 XMLHttpRequest (XHR) 时,遵循一些最佳实践可以帮助你写出更高效、可靠和可维护的代码。以下是一些实际的最佳实践:

1. 使用异步请求

  • 实践: 总是将 XMLHttpRequestasync 参数设置为 true,以便异步处理请求。
  • 理由: 异步请求不会阻塞用户界面,提高了用户体验。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.send();

2. 处理请求状态变化

  • 实践: 使用 onreadystatechange 事件来处理请求的不同状态。确保检查 readyStatestatus 属性来确定请求是否成功完成。
  • 理由: readyState 提供了请求的当前状态,status 表示 HTTP 响应状态码,帮助你正确处理响应或错误。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.onreadystatechange = function() {if (xhr.readyState === 4) { // DONEif (xhr.status === 200) {console.log('Response:', xhr.responseText);} else {console.error('Error:', xhr.status, xhr.statusText);}}
};
xhr.send();

3. 设置适当的请求头

  • 实践: 根据需要设置请求头(例如 Content-Type)。如果你发送 JSON 数据,确保设置 Content-Typeapplication/json
  • 理由: 请求头可以影响服务器如何处理请求体,确保请求和响应数据格式的正确性。
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://example.com/data', true);
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
const data = JSON.stringify({ key: 'value' });
xhr.send(data);

4. 处理错误和超时

  • 实践: 使用 onerror 事件处理网络错误,使用 ontimeout 处理超时情况。设置超时时间以防止请求挂起过久。
  • 理由: 错误处理可以提供更好的用户反馈和恢复机制,而超时处理可以避免长时间等待无响应的请求。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.timeout = 5000; // 设置超时时间为 5000 毫秒xhr.ontimeout = function() {console.error('Request timed out');
};xhr.onerror = function() {console.error('Request error');
};xhr.onload = function() {if (xhr.status === 200) {console.log('Response:', xhr.responseText);}
};xhr.send();

5. 监控进度

  • 实践: 使用 onprogress 事件来监控请求的进度,尤其是处理大文件上传或下载时。
  • 理由: 进度反馈可以改善用户体验,让用户了解操作的进展。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/largefile', true);
xhr.onprogress = function(event) {if (event.lengthComputable) {const percentComplete = (event.loaded / event.total) * 100;console.log('Progress:', percentComplete.toFixed(2) + '%');}
};
xhr.onload = function() {if (xhr.status === 200) {console.log('File downloaded successfully');}
};
xhr.send();

6. 避免回调地狱

  • 实践: 使用清晰的回调结构或考虑使用 Promises(如果需要兼容性,可以用 Promise 封装 XHR)。虽然 XHR 本身不支持 Promise,但你可以创建自己的封装。
  • 理由: 清晰的回调结构或使用 Promise 可以提高代码的可读性和可维护性。
function fetchData(url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest();xhr.open('GET', url, true);xhr.onload = function() {if (xhr.status === 200) {resolve(xhr.responseText);} else {reject(new Error(`Request failed with status ${xhr.status}`));}};xhr.onerror = function() {reject(new Error('Network error'));};xhr.send();});
}// 使用
fetchData('https://example.com/data').then(response => console.log('Response:', response)).catch(error => console.error('Error:', error));

7. 处理不同数据格式

  • 实践: 根据服务器响应的 Content-Type 处理数据。例如,如果响应是 JSON 格式,则调用 responseText 并使用 JSON.parse 解析。
  • 理由: 正确处理不同的数据格式确保数据解析的准确性。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.onload = function() {if (xhr.status === 200) {const contentType = xhr.getResponseHeader('Content-Type');if (contentType.includes('application/json')) {const data = JSON.parse(xhr.responseText);console.log('JSON data:', data);} else {console.log('Response:', xhr.responseText);}}
};
xhr.send();

8. 保持代码简洁

  • 实践: 尽量保持 XHR 请求代码简洁,避免过多的嵌套和复杂逻辑。封装常用逻辑为函数可以提高可重用性。
  • 理由: 简洁的代码更易于维护和理解。
function createRequest(method, url, callback) {const xhr = new XMLHttpRequest();xhr.open(method, url, true);xhr.onload = function() {if (xhr.status >= 200 && xhr.status < 300) {callback(null, xhr.responseText);} else {callback(new Error(`Request failed with status ${xhr.status}`));}};xhr.onerror = function() {callback(new Error('Network error'));};xhr.send();
}// 使用
createRequest('GET', 'https://example.com/data', (error, response) => {if (error) {console.error('Error:', error);} else {console.log('Response:', response);}
});

总结

遵循这些最佳实践可以帮助你在使用 XMLHttpRequest 时编写更高效、可靠和易于维护的代码。

虽然 fetch API 提供了更现代的接口,但了解和掌握 XMLHttpRequest 仍然在许多情况下很重要,尤其是在处理兼容性问题时。

相关文章:

http request-01-XMLHttpRequest XHR 简单介绍

http 请求系列 http request-01-XMLHttpRequest XHR 简单介绍 http request-01-XMLHttpRequest XHR 标准 Ajax 详解-01-AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;入门介绍 Ajax XHR 的替代方案-fetch Ajax XHR 的替代方案-fetch 标准 Ajax 的替代方案…...

关于tresos Studio(EB)的MCAL配置之DIO

General Dio Development Error Detect开发者错误检测 Dio Flip Channel Api翻转通道电平接口Dio_FlipChannel是否启用 Dio Version Info Api决定Dio_GetVersionInfo接口是否启用&#xff0c;一般打开就行。 Dio Reverse Port Bits让端口的位&#xff08;通道&#xff09;进…...

【漫谈C语言和嵌入式003】1394总线

1394总线&#xff08;FireWire或IEEE 1394&#xff09;是一种高速串行总线标准&#xff0c;最初由苹果公司开发&#xff0c;并在1995年被IEEE&#xff08;电气与电子工程师协会&#xff09;批准为国际标准。它最初的目标是提供一种高性能、低延迟的数据传输方法&#xff0c;用于…...

python爬虫爬取某图书网页实例

文章目录 导入相应的库正确地设置代码的基础部分设置循环遍历遍历URL保存图片和文档全部代码即详细注释 下面是通过requests库来对ajax页面进行爬取的案例&#xff0c;与正常页面不同&#xff0c;这里我们获取url的方式也会不同&#xff0c;这里我们通过爬取一个简单的ajax小说…...

Linux 用户管理的基本概念、常用工具及操作流程

&#x1f600;前言 本篇博文是关于Linux 中用户管理的基本概念、常用工具及操作流程&#xff0c;并提供了一些实用的示例和注意事项。希望这些内容能帮助读者在日常工作中更加高效地管理 Linux 系统的用户账户&#xff0c;希望你能够喜欢&#x1f970; &#x1f3e0;个人主页&a…...

手撕C++入门基础

1.C介绍 C课程包括&#xff1a;C语法、STL、高阶数据结构 C参考文档&#xff1a;Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …...

NPM版本控制策略:实现版本候选行为的指南

引言 在现代JavaScript项目中&#xff0c;依赖管理是确保应用稳定性和安全性的关键环节。NPM&#xff08;Node Package Manager&#xff09;作为Node.js的包管理器&#xff0c;提供了一套灵活的版本控制机制&#xff0c;允许开发者精确控制依赖包的版本。版本候选行为&#xf…...

问题集锦6

1.外调外围接口数据库没有变化 我已经修改完发到线上&#xff0c;看调用用代码释放更新了 or 自己掉测试环境试下 handledList 2.list每次写入最前面 List<Integer> snew ArrayList<>();s.add(1);s.add(2);s.add(0,0);System.out.println(s);3.集合 List<Inte…...

【研发日记】嵌入式处理器技能解锁(四)——TI C2000 DSP的Memory

文章目录 前言 背景介绍 Memory映射 RAM ROM 外设Register Memory分配 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见《…...

Ubuntu离线安装docker

查看操作系统版本&#xff1a; rootzyh-VMware-Virtual-Platform:~/install# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04 LTS Release: 24.04 Codename: noble rootzyh-VMware-Virtual-Platform:~/install#…...

【抓耳挠腮,还是升职加薪,一起来画架构图!】

1. 焦头烂额 最近又遇到个焦头烂额的事情 &#xff0c;老板有了新想法&#xff0c;业务有所转向&#xff0c;需要新的方案设计 &#xff0c;架构设计&#xff0c;以进行后续实施。很快&#xff0c;第一次汇报来了&#xff0c; 由于前期准备时间短&#xff0c;模块拆分不清晰&a…...

算法的学习笔记—合并两个排序的链表(牛客JZ25)

&#x1f600;前言 在算法面试中&#xff0c;链表问题是经常遇到的考点之一&#xff0c;其中合并两个排序链表是一个非常经典的问题。本文将详细介绍如何通过递归和迭代两种方式实现两个有序链表的合并。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;合并…...

《虚拟之旅:开启无限可能的机器世界》简介:

1.Ubonto的介绍&#xff1a; Ubuntu 是一个流行的开源操作系统&#xff0c;基于 Linux 内核。 它具有以下一些特点和优势&#xff1a; 开源免费&#xff1a;任何人都可以免费使用、修改和分发。丰富的软件库&#xff1a;通过软件包管理器可以方便地安装各种应用程序。良好的…...

centos7 服务器搭建

1. 查看 centos 版本 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)2 .查看 ip地址 ip addr sudo yum install net-tools -y 3. 是否能够上网 ping www.baidu.com ping 114.114.114.114 sudo systemctl restart network 4. DNS 更新DNS配置 编辑/etc/r…...

【Godot4自学手册】第四十五节用着色器(shader)制作水中效果

本节内容&#xff0c;主要学习利用着色器制作水波纹效果&#xff0c;效果如下&#xff1a; 一、搭建新的场景 首先我们新建场景&#xff0c;根节点选择Node2D&#xff0c;命名为Water&#xff0c;给根节点添加两个Tilemap节点&#xff0c;一个命名为Background主要用于绘制地…...

VMware Workstation Pro 安装 Ubuntu Server

这里写目录标题 VMware Workstation Pro 安装 Ubuntu Server1. 启动选项2. 系统语言3. 安装程序升级4. 键盘配置5. 安装类型6. 网卡配置7. 代理配置8. 系统镜像配置9. 硬盘配置10. 账户配置11. Ubuntu Pro 版本12. SSH 服务13. 推荐软件14. 安装成功15. 第一次重启报错16. 登录…...

智能化包括自动化与非自动化

智能化通常指的是系统或设备具备智能功能&#xff0c;以提高其自主性和效率。智能化可以分为自动化与非自动化两大类&#xff0c;每一类都有其独特的特点和应用场景。 一、自动化 自动化指的是系统能够在无需人为干预的情况下完成任务或操作。自动化系统通常依赖于预设的规则、…...

微前端架构的容器化部署:策略、实践与优势

随着微服务架构的兴起&#xff0c;微前端架构也成为现代Web应用开发的热门趋势。容器化技术&#xff0c;以其轻量级、可移植性和易于管理的特点&#xff0c;成为微前端部署的理想选择。本文将详细介绍微前端架构下应用容器化部署的策略、实践步骤以及这一方法的优势。 容器化技…...

面试题(网络、js、框架)

自我介绍 您好&#xff0c;面试官&#xff01;我叫[您的姓名]&#xff0c;非常荣幸能有机会参加这次面试。 在过去的 3 年里&#xff0c;我一直专注于前端开发领域&#xff0c;积累了丰富的实践经验。 在 Vue.js 项目中&#xff0c;我能够熟练运用组件化开发模式&#xff0c;实…...

C语言典型例题40

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目 例题3.8 运输公司对用户计算运费。路程&#xff08;以s表示&#xff0c;单位为千米&#xff09;&#xff0c;吨/千米运费越低。标准如下&#xff1a; s<250 没…...

【大模型部署及其应用 】使用 Ollama 和 Ollama WebUI 在本地运行 Llama 3

使用 Ollama 和 Ollama WebUI 在本地运行 Llama 3 目录 开始使用 Llama 3设置 Ollama WebUI访问 Ollama WebUI使用 Docker GenAI Stack 的 Llama 3骆驼 2 与 骆驼 3...

uniapp-部分文件中文乱码

一、问题 在开发时遇到&#xff0c;部分页面的中文显示乱码&#xff0c;如图 搜索了一下解决方法&#xff0c;这里记录一下 二、问题原因&#xff1a; 页面的编码格式不是 utf-8 造成的 三、解决方法 打开出现乱码页面选择编译器左上角的文件 > 以指定编码重新打开 选择U…...

Day41 | 647. 回文子串 516.最长回文子序列

语言 Java 647. 回文子串 回文子串 题目 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 思路 动规五部曲来分析 1.dp数组的含义&#x…...

全面解析Gerapy分布式部署:从环境搭建到定时任务,避开Crawlab的坑

Gerapy分布式部署 搭建远程服务器的环境 装好带docker服务的系统 Docker:容器可生成镜像&#xff0c;也可拉去镜像生成容器 示例&#xff1a;将一个环境打包上传到云端(远程服务器)&#xff0c;其他8个服务器需要这个环境直接向云端拉取镜像生成容器,进而使用该环境,比如有MYS…...

Springboot项目中使用druid实现多数据源和动态数据源,因数据库不可用导致的项目挂起的处理方案

Springboot项目中使用druid因数据库不可用导致的项目挂起的处理方案 在Spring Boot项目中使用Druid实现多数据源和动态数据源管理是一个常见的场景。通过合理的配置和错误处理机制&#xff0c;您可以有效地管理数据源&#xff0c;避免因数据库不可用而导致整个项目挂起。 1.…...

多线程 03:知识补充,静态代理与 Lambda 表达式的相关介绍,及其在多线程方面的应用

一、概述 记录时间 [2024-08-16] 前置知识&#xff1a;Java 基础篇&#xff1b;Java 面向对象 多线程 01&#xff1a;Java 多线程学习导航&#xff0c;线程简介&#xff0c;线程相关概念的整理 多线程 02&#xff1a;线程实现&#xff0c;创建线程的三种方式&#xff0c;通过多…...

机器学习中的距离概念

距离在机器学习中应用广泛&#xff0c;包括欧式距离、曼哈顿距离、内积距离和KL距离。 下面总结一下。 机器学习中的距离 欧式距离曼哈顿距离内积距离KL距离距离作为损失函数(MSE/MAE...)欧式距离与内积距离的联系☆距离的有效性 欧式距离 欧式距离&#xff08;Euclidean Dis…...

Java 如何判断map为null或者空

1.示例一 在Java中&#xff0c;如果我们想判断一个Map是否为null或者空&#xff08;即没有任何键值对&#xff09;&#xff0c;我们可以使用以下的方法。下面是一个完整的示例代码&#xff0c;展示了如何进行这样的判断&#xff1a; import java.util.HashMap; import java…...

终端用户视角下的性能测试,体验与度量的融合

传统的性能测试的度量标准是什么 响应时间&#xff08;Response Time&#xff09;&#xff1a; 这是从客户端发出请求到接收到完整响应所需的时间。响应时间是衡量系统性能的重要指标&#xff0c;特别是在面向用户的应用中&#xff0c;因为它直接影响用户体验。 而用户体验的度…...

KCP源码解析系列(二)KCP协议结构体

一、KCP协议包 1.1 kcp协议包 kcp中只有一种数据包&#xff0c;不管是数据还是控制信息&#xff0c;都用这个数据包来表示 0 4 5 6 8 (BYTE) ---------------------------- | conv |cmd|frg| wnd | ---------------------------- 8 | …...

微软运行库全集合:一站式解决兼容性问题

开发者在部署应用程序时经常遇到因缺少运行库而引发的兼容性问题。为了解决这一问题&#xff0c;电脑天空推荐微软常用运行库合集&#xff0c;一个集成了微软多个关键运行库组件的软件包。 &#x1f4da; 包含组件概览&#xff1a; Visual Basic Virtual Machine&#xff1a;…...

【 亿邦动力网-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …...

算法笔记|Day26贪心算法IV

算法笔记|Day26贪心算法IV ☆☆☆☆☆leetcode 452. 用最少数量的箭引爆气球题目分析代码 ☆☆☆☆☆leetcode 435. 无重叠区间题目分析代码 ☆☆☆☆☆leetcode 763.划分字母区间题目分析代码 ☆☆☆☆☆leetcode 452. 用最少数量的箭引爆气球 题目链接&#xff1a;leetcode …...

CVPR2023《DNF: Decouple and Feedback Network for Seeing in the Dark》暗光图像增强论文阅读笔记

相关链接 论文链接 https://openaccess.thecvf.com/content/CVPR2023/papers/Jin_DNF_Decouple_and_Feedback_Network_for_Seeing_in_the_Dark_CVPR_2023_paper.pdf 代码链接 https://github.com/Srameo/DNF 摘要 RAW数据的独特属性在低光照图像增强方面展现出巨大潜力。…...

大厂进阶七:React状态管理全解析

前言&#xff1a; React 中用于状态管理的hook及库有&#xff1a;useState、useReducer、useContext、useReducer useContext和一些第三方的库如redux、mobx等。 1、useState 单一组件某个具体状态 2、useReducer 单一组件中多个状态管理&#xff0c;策略分发机制统一管理…...

【ocr识别003】flask+paddleocr+bootstrap搭建OCR文本推理WEB服务

1.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 2.了解、学习OCR相关技术知识领域&#xff0c;结合日常的场景进行测试、总结。如本文总结的flaskpaddleocrbootstrap搭建OCR文本推理WEB服务应用示例场景。 文章目录 1.代码结构2.效果演…...

从零开始搭建 LVS 高性能集群 (DR模式)

从零开始搭建 LVS 高性能集群 &#xff08;DR模式&#xff09; 架构 本设计方案采用三台服务器构建集群&#xff0c;使用Linux Virtual Server (LVS) 作为负载均衡器&#xff0c;运行在直接路由 (DR) 模式下。集群中的每一台服务器都将运行相同的服务&#xff0c;以实现 高可用…...

Linux环境开发工具【yum与vim】

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.Linux软件包管理器yum1.1 快速使用yum 2. Linux编辑器-vim的使用2.1 vim的基本…...

laravel GuzzleHttp Client 无法获取返回的错误信息

Client发送一些请求&#xff0c;当返回状态不是200的时候&#xff0c;无法获取完整错误信息 $client new Client([base_uri > $this->getUri()./order/aaaaaa,timeout > 30,verify > false]);try {$response $client->request(POST, , [headers > [Lang&g…...

XMOS 多路音频解码器

当谈及高性能音频解码器&#xff0c;XMOS 是一个不容忽视的名字。作为音频解决方案领域的领军者&#xff0c;XMOS 的多路音频解码器在音频处理技术中扮演着至关重要的角色。下面我们一起深入探讨 XMOS 多路音频解码器去了解这一技术的魅力。 设计背景&#xff1a;追求音频极致…...

XSS小游戏(题目+解析)

xss题目练习地址&#xff1a; xss小游戏 游戏界面 一、Ma Spaghet! 我将题目要求进行翻译: 题目的主要要求就是&#xff1a;弹出一个&#xff08;1337&#xff09;的弹窗 开始解题&#xff1a; Let’s Go! 首先&#xff0c;传个参数看看 发现参数直接显示在了 < h2 >…...

《Redis核心技术与实战》学习笔记4——AOF日志:宕机了,Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的&#xff1f;三种写回策略 日志文件太大了怎么办&#xff1f;AOF 重写会阻塞吗?小结 大家好&#xff0c;我是大白。 如果有人问你&#xff1a;“你会把 Redis 用在什么业务场景下&#xff1f;”我想你大概率会说&#xff1a;“我会把它当作缓存使…...

NextJs - 服务端/客户端组件之架构多样性设计

NextJs - 服务端/客户端组件之架构多样性设计 前言一. 架构设计1.1 SSR流式渲染常见错误设计之 - 根页面同步阻塞1.2 架构设计之 - 客户端组件依赖于服务端组件数据① 使用 Redux 完成数据共享 1.3 架构设计之 - 单页内的分步骤跳转① 如何做到服务端组件和客户端组件之间的切换…...

使用 Python 进行 PDF 文件加密

使用 Python 解密加密的 PDF 文件-CSDN博客定义一个名为的函数&#xff0c;该函数接受三个参数&#xff1a;输入的加密 PDF 文件路径input_pdf、输出的解密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/qq_45519030/article/details/141256661 在数字化时代…...

Spring Boot集成RabbitMQ

目录 1.RabbitMQ简介2.添加依赖3.配置RabbitMQ连接4.DirectExchange4.1 消费者4.2 生产者4.3 测试4.4 一个交换机对多个队列4.5 一个队列对多个消费者 5.FanoutExchange5.1 消费者5.2 生产者5.3 测试 6.TopicExchange6.1 消费者6.2 生产者 1.RabbitMQ简介 RabbitMQ是一个由Erl…...

OLED屏幕制造工艺流程

OLED屏幕制造工艺流程是一个复杂且精细的过程&#xff0c;涉及多个关键步骤以确保最终的显示效果和性能。以下是OLED屏幕制造工艺流程的主要步骤&#xff1a; 1. 衬底制作与准备 材料选择&#xff1a;OLED器件需要一个透明的导电衬底&#xff0c;通常使用玻璃或塑料材料。 清…...

knowLedge-VueCLI项目中环境变量的定义与使用

1. env 1.1简介 在 Vue CLI 创建的项目中&#xff0c;你可以通过 .env 文件来定义环境变量。Vue CLI 支持多种 .env 文件&#xff0c;它们根据文件名中的前缀来决定何时加载和使用这些环境变量。 以下是一些常见的 .env 文件及其用途&#xff1a; .env&#xff1a;在任何环境…...

【C#】 接口 继承

简介 继承是面向对象编程的核心特性之一&#xff0c;它允许我们创建一个类&#xff08;称为子类&#xff09;来继承另一个类&#xff08;称为基类&#xff09;的属性和方法。 作用 这样&#xff0c;我们可以重用代码&#xff0c;减少重复&#xff0c;并使我们的代码更加模块…...

Self-Supervised Learning(李宏毅老师系列)

自学参考&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding BERT 论文逐段精读 视频课 课件资料 笔记 一、概述 自监督学习模型与芝麻街~ 参数量 ELMO&#xff1a;94MBERT&#xff1a;340MGPT-2&#xff1a;1542MMegatron&…...

8月16日笔记

只有DNS协议出网场景 DNS 协议是一种请求、应答协议&#xff0c;也是一种可用于应用层的隧道技术。DNS 隧道的工作原理很简单&#xff0c;在进行 DNS 查询时&#xff0c;如果查询的域名不在 DNS 服务器本机缓存中&#xff0c;就会访问互联网进行查询&#xff0c;然后返回结果。…...