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

Qt基础009(HTTP编程和QJSON)

文章目录

    • 软件开发网络架构
      • BS架构/CS架构
    • HTTP基本概念
    • QT的HTTP编程
    • JSON数据
      • 概述
      • QT生成JSON数据
      • QT解析JSON数据

软件开发网络架构

BS架构/CS架构

​ 在计算机网络和软件开发中,CS架构(Client-Server Architecture,客户端-服务器架构)和BS架构(Browser-Server Architecture,浏览器-服务器架构)是两种主要的应用程序架构。

​ CS架构是一种典型的两层结构,包括客户端和服务器两个部分。在这种架构中,客户端和服务器通过网络进行通信,每部分都有明确的职责。

  1. 客户端
  • 用户界面通常在客户端呈现。

  • 可以是桌面应用程序、移动应用或专用软件。

  • 负责向服务器发送请求,接收和处理服务器响应。

  1. 服务器
  • 管理数据和业务逻辑。

  • 处理来自客户端的请求,并发送回响应。

  • 通常承载在远程系统上,如数据库服务器、应用服务器等。

  1. 特点
  • 需要为每种操作系统或平台单独开发客户端。

  • 高效的数据处理和响应能力。

  • 在客户端设备上占用资源(如内存和处理能力)。

BS架构(浏览器-服务器架构)

BS架构是一种基于Web的层或多层架构,主要通过Web浏览器作为客户端访问服务器上的应用程序。

  1. 浏览器(客户端)
  • 使用标准Web浏览器(如Chrome、Firefox等)作为客户端。

  • 无需安装额外的软件,使用HTML、CSS和JavaScript显示内容。

  1. 服务器
  • 和CS架构中的服务器类似,处理业务逻辑和数据存储。

  • 通过Web服务(如HTTP服务器)提供页面和数据。

  1. 特点
  • 跨平台兼容性强,可以在任何支持Web浏览器的设备上运行。

  • 客户端无需安装专用软件,容易维护和更新。

  • 可能依赖网络性能,因为所有操作都在服务器上进行。

对比

  • 部署和维护:BS架构易于部署和维护,而CS架构通常需要在每个客户端单独安装和更新。

  • 性能:CS架构可以更有效地利用客户端的计算资源,适合高性能要求的应用。BS架构依赖于服务器的性能和网络延迟。

  • 安全性:CS架构中,数据经常在客户端和服务器之间传输,可能需要更复杂的安全措施。BS架构中,敏感数据主要存储在服务器端。

  • 用户体验:CS架构通常能提供更丰富的用户界面和交互功能。BS架构的用户体验受限于Web技术的能力。

在实际应用中,选择哪种架构取决于具体的业务需求、目标用户群、性能要求以及开发和维护的成本。

HTTP基本概念

HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网(WWW)的数据通信的基础。了解HTTP的基本概念对于理解现代网络通信至关重要。以下是HTTP的一些核心概念:

1. 请求和响应

HTTP是一个基于请求-响应模式的协议。客户端(通常是Web**浏览器)向服务器发送一个HTTP请求,然后服务器返回一个HTTP响应。**请求包含请求的资源(如网页),而响应包含请求的资源的内容。

  1. HTTP方法

HTTP定义了一系列的方法来表明对资源的不同操作,最常用的包括:

  • GET: 用于请求资源。

  • POST: 用于提交数据给服务器(例如,表单数据)。

  • PUT: 用于上传文件或内容。

  • DELETE: 用于请求删除资源。

  • HEAD: 用于获取资源的元信息,而不是资源本身。

3. 状态码

服务器对请求的响应中包含一个状态码,它表示请求的成功或失败,以及失败的原因。常见的状态码包括:

  • 200 OK: 请求成功。

  • 404 Not Found: 请求的资源未找到。

  • 500 Internal Server Error: 服务器内部错误。

  • 301 Moved Permanently: 请求的资源已永久移动到新位置。

4. URL**(统一资源定位符)**

URL是Web上资源的地址。它指定了资源的位置以及用于访问资源的协议(例如,http://)。

  1. HTTP头

HTTP请求和响应包含头部信息,这些信息包括元数据,如内容类型、内容长度、服务器信息、客户端信息等。例如, Content-Type 头部指示响应中的媒体类型(如text/html,application/json)。

6. 无状态协议

HTTP是一个无状态协议,这意味着服务器不会保留任何请求的数据(状态)。然而,通过使用如Cookies这样的机制,可以在多个请求之间维持状态。

7. **安全性(**HTTPS)

HTTPS是HTTP的安全版本,它在HTTP和TCP层之间增加了一个加密层(通常是SSL/TLS)。这提供了数据传输的加密和更好的安全性。

8. RESTful API

RESTful是一种使用HTTP协议的Web服务设计风格,它利用HTTP的方法来实现API的不同操作。在

RESTful架构中,每个URL代表一个资源,并使用HTTP的方法(如GET, POST)来处理这些资源。

9. Session和Cookies

由于HTTP本身是无状态的,Cookies和会话(Session)被用来在多个请求之间存储用户数据,从而为用户提供连贯的体验。

这些概念构成了HTTP的基础,是理解和使用HTTP协议的关键。每个概念都有它的具体细节和使用场景,了解这些有助于更好地在网络应用开发中应用HTTP。

QT的HTTP编程

Qt中的HTTP编程主要涉及使用Qt的网络模块来进行HTTP请求和处理HTTP响应。Qt提供了一系列类来处理网络通信,其中最常用的类是 QNetworkAccessManagerQNetworkRequestQNetworkReply 以及相关的支持类。

以下是一个基本的HTTP编程示例,展示了如何使用Qt发送一个简单的HTTP GET请求并处理响应:

步骤 1: 包含必要的头文件

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QObject>
#include <QDebug>

步骤 2: 发送HTTP请求

创建一个 QNetworkAccessManager 对象,并使用它发送HTTP请求。 QNetworkAccessManager 对象会异步地处理请求,并返回一个 QNetworkReply 对象

int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager manager;QNetworkRequest request(QUrl("http://example.com"));QNetworkReply *reply = manager.get(request);QObject::connect(reply, &QNetworkReply::finished, [&]() {if (reply->error()) {qDebug() << "Error:" << reply->errorString();return;}QString response = reply->readAll();qDebug() << "Response:" << response;});return a.exec();
}

​ 在这个例子中,我们使用 QNetworkAccessManager 的 get 方法发送了一个HTTP GET请求到"http://example.com"。然后,我们连接了 QNetworkReply 对象的 finished 信号到一个lambda函数,该函数在收到HTTP响应时被调用。

注意事项

  1. 异步处理: QNetworkAccessManager 的请求是异步的。这意味着 get 方法会立即返回,而HTTP响应将在稍后通过信号处理。

  2. 错误处理: 应该检查 QNetworkReply 对象是否有错误,并相应地处理。

  3. 内存管理: QNetworkReply 对象需要被正确地管理,以避免内存泄漏。通常情况下,使用QObject::deleteLater 来安排删除它是一个好方法。

JSON数据

概述

==JSON(JavaScript Object Notation)==是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,尽管它是独立于语言的,且有多种语言支持。JSON常用于网络应用程序中的数据传输,尤其是在Web应用程序中与后端服务器通信。

使用JSON的原因总结如下:

原因描述
易于阅读和编写JSON的结构简单、清晰,对人类来说易于阅读和编写。
轻量级数据格式相较于XML等标记语言,JSON更轻量,使用更少的符号,数据体积更小。
易于解析和生成大多数编程语言都提供了解析和生成JSON的内置支持或库。
跨语言支持JSON是独立于语言的,被广泛支持和使用在多种编程语言中。

BS/CS开发过程中,会使用不同的编程语言,JSON作为数据传输的标准化格式,方便程序员协议约定和数据处理,以下是不同编程语言处理JSON的方案

语言/平台JSON处理库/接口特点/描述
CJansson提供JSON的编码、解码和处理功能
C++nlohmann/json现代C++(从C++11开始)的JSON库,易于使用
JavaJackson强大的JSON处理库,支持JSON的序列化和反序列化
PythonjsonPython标准库中的JSON处理模块
QtQJsonDocumentQt框架中用于JSON处理的类
Androidorg.jsonAndroid SDK自带的JSON处理类,提供基础JSON操作功能

QT生成JSON数据

在Qt中生成JSON数据并将其保存到文件的一个基本示例涉及使用 QJsonDocumentQJsonObjectQJsonArray 类。以下是创建一个简单JSON对象并将其保存到文件的示例代码。

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>
#include <QDebug>
void createJsonFile() {// 创建一个JSON对象 键值对QJsonObject jsonObj;jsonObj["name"] = "John Doe";jsonObj["age"] = 30;jsonObj["email"] = "john.doe@example.com";// 创建一个JSON数组QJsonArray jsonArr;jsonArr.append("C++");jsonArr.append("Python");jsonArr.append("JavaScript");jsonArr.append(123);// 将数组添加到JSON对象jsonObj["languages"] = jsonArr;// 将JSON对象转换为JSON文档QJsonDocument jsonDoc(jsonObj);// 将JSON文档转换为字符串(也可以是压缩格式)QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);// 将JSON数据写入文件QFile file("output.json");if (!file.open(QIODevice::WriteOnly)) {qDebug() << "Failed to open file for writing";return;}file.write(jsonData);file.close();qDebug() << "JSON data saved to output.json";
}
int main() {createJsonFile();return 0;
}

说明

  1. 创建JSON对象:使用 QJsonObject 来构建JSON对象,并使用键值对填充数据。
  2. 创建JSON数组**:使用 QJsonArray 来创建一个数组,并添加元素。
  3. 组合JSON结构:将JSON数组添加到JSON对象中。
  4. 生成JSON文档:通过 QJsonDocument 来处理JSON数据,可以选择格式化(缩进)或压缩形式。
  5. 保存到文件:创建 QFile 对象,打开文件,写入JSON数据,并关闭文件。

这个例子展示了Qt中处理JSON的基础流程,包括创建、填充数据、转换为字符串,以及写入文件。您可以根据需要调整这个流程来适应更复杂的JSON结构或数据。

#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);QJsonObject rootObj;rootObj["cityid"] = "1010100";rootObj["date"] = "2024-01-23";rootObj["weather"] = "雨夹雪";rootObj["tmp"] = 3;QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);rootObj["testArry"] = jsonArray;QJsonDocument jsonDoc(rootObj);QByteArray jsonArry = jsonDoc.toJson();QFile file("D:/QT/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry);file.close();}
Widget::~Widget()
{delete ui;
}

​ 在JSON中,数组可以包含多种类型的元素,包括对象。当您在Qt中处理JSON数组,其中的元素是对象时,您可以使用 QJsonArray 和 QJsonObject 来创建和处理这些数据结构。以下是一个示例,展示了如何创建一个包含多个对象的JSON数组,并将该数组添加到一个JSON对象中。

示例:

#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);QJsonObject rootObj;rootObj["cityid"] = "1010100";rootObj["date"] = "2024-01-23";rootObj["weather"] = "雨夹雪";rootObj["tmp"] = 3;//Json数组QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);rootObj["testArry"] = jsonArray;QJsonObject alarmObj;alarmObj["alamType"] = "雪灾";alarmObj["alamLeve"] = "黄色";alarmObj["alamTitle"] = "福州市警告老陈多穿点衣服";rootObj["alam"] = alarmObj;QJsonObject day0;day0["day"] = "星期一";day0["wea"] = "晴";day0["tem"] = 5.7;QJsonObject day1;day1["day"] = "星期二";day1["wea"] = "晴";day1["tem"] = 7;QJsonObject day2;day2["day"] = "星期三";day2["wea"] = "多云";day2["tem"] = 17;QJsonArray dayArray;dayArray.append(day0);dayArray.append(day1);dayArray.append(day2);rootObj["days"] = dayArray;//通过QJsonDocument把JSON数据转换成QByteArrayQJsonDocument jsonDoc(rootObj);QByteArray jsonArry = jsonDoc.toJson();QFile file("D:/QT/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry);file.close();}
Widget::~Widget()
{delete ui;
}

QT解析JSON数据

​ 在Qt中解析JSON数据通常涉及到使用 QJsonDocumentQJsonObjectQJsonArray 类。这些类提供了处理JSON数据的必要工具,使您能够从JSON字符串中提取信息、遍历JSON对象或数组,并访问具体的数据项。以下是一个基本的示例,展示了如何在Qt中解析JSON字符串。

示例:解析JSON字符串

{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"skills": ["C++", "Python", "JavaScript"]
}

以下是如何在Qt中解析这个JSON字符串的步骤:

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
void parseJson() {// JSON字符串/*
R 是用于定义原始字符串字面量(Raw String Literal)的标记。
在C++中,原始字符串字面量是一种方便的语法,
用于创建包含多行文本和特殊字符的字符串,而无需转义。
R"("chenlichen")"
*/QString testStr = "chenli\"c";QString jsonString = R"(
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"skills": ["C++", "Python", "JavaScript"]
}
)";/*jsonString = "{\n"
" \"name\": \"John Doe\",\n"
" \"age\": 30\n"
"}";
*/// 将JSON字符串转换为QJsonDocumentQJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());// 检查JSON文档是否包含一个对象if (!jsonDoc.isNull() && jsonDoc.isObject()) {// 获取JSON对象QJsonObject jsonObj = jsonDoc.object();// 访问对象的键值QString name = jsonObj["name"].toString();int age = jsonObj["age"].toInt();QString email = jsonObj["email"].toString();qDebug() << "Name:" << name;qDebug() << "Age:" << age;qDebug() << "Email:" << email;// 处理JSON数组if (jsonObj.contains("skills") && jsonObj["skills"].isArray()) {QJsonArray skillsArray = jsonObj["skills"].toArray();for (const QJsonValue &value : skillsArray) {qDebug() << "Skill:" << value.toString();}}} else {qDebug() << "Invalid JSON...";}
}
int main() {parseJson();return 0;
}

相关文章:

Qt基础009(HTTP编程和QJSON)

文章目录 软件开发网络架构BS架构/CS架构 HTTP基本概念QT的HTTP编程JSON数据概述QT生成JSON数据QT解析JSON数据 软件开发网络架构 BS架构/CS架构 ​ 在计算机网络和软件开发中&#xff0c;CS架构&#xff08;Client-Server Architecture&#xff0c;客户端-服务器架构&#x…...

学习整理在centos7上安装mysql8.0版本教程

学习整理在centos7上安装mysql8.0版本教程 查看linux系统版本下载mysql数据库安装环境检查解压mysql安装包创建MySQL需要的目录及授权新增用户组新增组用户配置mysql环境变量编写MySQL配置文件初始化数据库初始化msyql服务启动mysql修改初始化密码配置Linux 系统服务工具,使My…...

第R4周:LSTM-火灾温度预测

文章目录 一、前期准备工作1.导入数据2. 数据集可视化 二、构建数据集1. 数据集预处理2. 设置X, y3. 划分数据集 三、模型训练1. 构建模型2. 定义训练函数3. 定义测试函数4. 正式训练模型 四、模型评估1. Loss图片2. 调用模型进行预测3. R2值评估 总结&#xff1a; &#x1f36…...

Linux文件管理完全指南:从命名规则到压缩解压

一、文件命名规则&#xff1a;避免踩坑的关键 1. 允许的字符与命名建议 允许字符&#xff1a;除 / 外所有字符均可使用&#xff0c;但需避免 <, >, ?, * 等特殊符号。 命名建议&#xff1a; 统一使用小写字母&#xff08;Linux严格区分大小写&#xff09;。 用下划线…...

react和vue的区别之一

前言 小编在学react的时候&#xff0c;发现react在使用ant-design组件的from表单&#xff0c;有点惊奇&#xff0c;跟vue差别确实有点大。 1-React 与 Vue 表单处理对比指南 核心差异概述 特性VueReact (Ant Design Form)数据定义必须显式定义 reactive/ref通过 name 隐式定…...

电力系统最小惯性常数解析

1. 什么是惯性常数&#xff1f; 电力系统的惯性常数&#xff08;Inertia Constant&#xff09;可以理解为系统抵抗频率突变的能力&#xff0c;类似于“惯性”。传统电力系统中&#xff0c;同步发电机&#xff08;如火电厂&#xff09;的旋转部件&#xff08;如涡轮、转子&…...

Linux软硬链接和动静态库(20)

文章目录 前言一、软硬链接基本认知实现原理应用场景取消链接ACM时间 二、动静态库认识库库的作用 三、制作静态库静态库的打包静态库的使用 四、制作动态库动态区的打包动态库的链接与使用动态库的链接原理 总结 前言 我有款非常喜欢玩的游戏&#xff0c;叫做《饥荒》&#xf…...

FX10(CYUSB4014)USB3.2(10Gbps)开发笔记分享(1):硬件设计与开发环境搭建

作者&#xff1a;Hello&#xff0c;Panda 大家早上好&#xff0c;中午好&#xff0c;下午好&#xff0c;晚上好&#xff0c;熊猫君又来了。这次计划做一个连载&#xff0c;大概6期左右&#xff0c;主要介绍英飞凌最新的FX5/10/20的器件应用。目前&#xff0c;熊猫君手上调试的…...

【工具变量】上市公司-“链主“企业相关数据(2001-2024年)

上市公司的"链主企业"&#xff08;Anchor Enterprise&#xff09;指在其供应链中具有较较高中心度的公司。这些公司通过其规模、技术优势、资源整合能力等&#xff0c;影响和带动整个产业链的发展与运作。这些企业往往是供应链中最重要的节点&#xff0c;其决策和行为…...

Qt知识点1『16进制数值与文本互相转换』

工作中可能会遇到QByteArray保存着16进制的数据&#xff0c;例如网络传输中的数据在抓包软件下就会显示为16进制的文本格式。本次是在串口通讯首发消息时遇到的这类转换问题&#xff0c;做一下记录。 一、16进制的文本字符串如何转换数值 解决&#xff1a;形如QString("0…...

MongoDB Shard Cluster

# MongoDB Shard Cluster 集群规划 132上面单独安装mongos 在 1,2,3上面安装shard1和config 在 4,5,6上面安装shard2 节点host如下 172.20.192.20 member1.blockin.ai 172.20.192.21 member2.blockin.ai 172.20.192.31 member3.blockin.ai …...

Pycharm(六):可变与不可变类型

一、引用 在java中既有值传递,也有引用传递,我们思考一下在python中值的传递方式是哪种类型呢? 答案是引用传递。 概述: Python中存储变量是需要占用内存空间的,为了更好地管理这些空间,每块空间都是有自己的地址值的。 格式: id(变量名/值) 可以查看变量/…...

每日算法-250425

每日算法打卡 - 2025年4月25日 记录今天完成的几道 LeetCode 算法题&#xff0c;分享解题思路和代码。 2178. 拆分成最多数目的正偶数之和 题目 解题思路 贪心算法 解题过程 题目要求我们将一个偶数 finalSum 拆分成尽可能多的 不同 正偶数之和。 为了使拆分出的数字数量…...

github把自己的jar包发送到maven中央仓库

maven中央仓库注册账号 《Maven中央仓库官网》 注册账号 直接使用github账号 他会自动帮我们创建一个github的命名空间 获取自己的User Token 切记立马复制、保存username和password&#xff0c;后面maven的settings.xml会用到&#xff0c;因为这个页面会在一分钟以后自动关闭…...

链表系列一>两两交换链表中的结点

目录 题目&#xff1a;解析&#xff1a;代码&#xff1a; 题目&#xff1a; 链接: link 解析&#xff1a; 代码&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int va…...

【深度强化学习 DRL 快速实践】异步优势演员评论员算法 (A3C)

Asynchronous Advantage Actor-Critic A3C (2016, DeepMind) 异步优势演员评论员算法 (A3C): 继承 actor-critic 的优势&#xff0c;同时通过异步多线程 (团队作战) 加速了训练过程 model-free, actor-critic 核心改进点说明异步并行训练 – Asynchronous (无经验回放)通过多个…...

240425 leetcode exercises

240425 leetcode exercises jarringslee 文章目录 240425 leetcode exercises[147. 对链表进行插入排序](https://leetcode.cn/problems/insertion-sort-list/)&#x1f501;插入排序 [1721. 交换链表中的节点](https://leetcode.cn/problems/swapping-nodes-in-a-linked-list…...

找三维gis开发的工作,Mapbox要学到什么程度?

Mapbox 是⼀个可以创建各种⾃定义地图的⽹站&#xff0c;如 Pinterest、Evernote、Github、500px 等⼤牌都使⽤ Mapbox 创建⾃⼰的地图&#xff0c;Mapbox 宣称要构建世界上最漂亮的地图。已为 Foursquare、Pinterest、Evernote、⾦融时报、天⽓频道、优步科技 等公司的⽹站提供…...

ThinkPHP6模型中多组条件逻辑或Or查询的使用

直接进入正题&#xff0c;如我们的查询条件是这样的&#xff1a; (age > 20 and job_id 3) or (sex 1 and age < 20) 上面两组数据之间是 Or 的关系。 可使用两个闭包进行查询&#xff0c;代码如下&#xff1a; $map1 [age > 30,sex > $id,];$map2 …...

《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现

基于RAG向量数据库的知识库AI问答助手设计与实现 引言 随着大语言模型&#xff08;LLM&#xff09;技术的快速发展&#xff0c;构建本地知识库AI问答助手已成为许多企业级应用的需求。本研究报告将详细介绍如何基于FLASK开发一个使用本地OLLAMA大模型底座的知识库AI问答助手&…...

netcore8.0项目发布到centos,利用nginx反向代理(宝塔面板篇)

1、发布netcore项目 在program.cs中配置nginx代理 // 添加Nginx反向代理支持 builder.Services.Configure<ForwardedHeadersOptions>(options > {options.ForwardedHeaders ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;options.KnownNetwo…...

项目笔记1:通用 Service的常见方法

通用 Service 通常封装了常见的业务逻辑操作&#xff0c;以提高代码的复用性和可维护性。不同的框架和业务场景下&#xff0c;通用 Service 的方法会有所差异&#xff0c;但一般都会包含一些基本的增删改查&#xff08;CRUD&#xff09;操作&#xff0c;以下为你详细介绍&#…...

VUE3父子组件defineModel动态值获取及处理

需求&#xff1a;子组件获取父组件value值时需处理&#xff0c;子组件加载时用onMounted&#xff0c;value变化时用watch 父组件&#xff1a; <template><div><p>父组件的值: {{ parentValue }}</p><button click"changeValue">改变…...

CUDA编程之Grid、Block、Thread线程模型

一、线程模型:Grid、Block、Thread概念 ‌1. 层级定义‌ ‌Thread(线程)‌ CUDA中最基本的执行单元,对应GPU的单个CUDA核心(SP)。每个线程独立执行核函数指令,拥有独立的寄存器和局部内存空间‌。 ‌Block(线程块)‌ 由多个线程组成(通常为32的倍数),是逻辑上的并…...

BT151-ASEMI无人机专用功率器件BT151

编辑&#xff1a;ll BT151-ASEMI无人机专用功率器件BT151 型号&#xff1a;BT151 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 引脚数量&#xff1a;3 特性&#xff1a;单向可控硅 工作温度&#xff1a;-40℃~150℃ ‌BT151单向可控硅产品解…...

无人机环境适应性与稳定性技术要点!

1. 环境感知与传感器融合 多传感器集成&#xff1a;结合IMU&#xff08;惯性测量单元&#xff09;、GPS、气压计、激光雷达&#xff08;LiDAR&#xff09;、视觉传感器&#xff08;RGB/深度相机&#xff09;、超声波等&#xff0c;实现冗余数据采集。 实时环境建模&#xff1…...

BiliNote:开源的AI视频笔记生成工具,让知识提取与分享更高效——跨平台自动生成结构化笔记,实现从视频到Markdown的智能转化

引言:视频学习的痛点与BiliNote的解决方案 随着知识视频化趋势的加速,B站、YouTube等平台成为学习与信息获取的重要渠道,但手动记录笔记耗时低效、信息碎片化等问题依然突出。BiliNote的出现,通过AI驱动的自动化流程,将视频内容转化为结构清晰的Markdown笔记,支持截图插…...

HTMLcss实现网站抽奖

代码由 HTML、CSS 和 JavaScript 三部分组成&#xff0c;HTML 负责页面的结构搭建&#xff0c;CSS 负责页面的样式设计&#xff0c;JavaScript 负责实现抽奖的交互逻辑。 HTML 部分 <!DOCTYPE html> <html lang"en"><head><meta charset"…...

字节:视频一致性生成论文速读

一、引言 Phantom: Subject-Consistent Video Generation via Cross-Modal Alignment 是北京字节跳动智能创作团队提出的一种新型视频生成方法&#xff0c;旨在解决主体一致性视频生成的难题。该方法通过平衡文本和图像的双重模态提示&#xff0c;实现文本和视觉内容的深度对齐…...

JAVA常用分布式锁Redisson

1. 加锁过程 底层命令与数据结构 Redis 数据结构&#xff1a;使用 Hash 结构存储锁信息&#xff0c;Key 为锁名称&#xff0c;Field 为客户端唯一标识&#xff08;如 UUID 线程ID&#xff09;&#xff0c;Value 为锁的重入次数。 Lua 脚本原子性&#xff1a;通过 Lua 脚本在…...

9.ArkUI List的介绍和使用

ArkUI List 组件详解与使用指南 List 是 ArkUI&#xff08;HarmonyOS 开发框架&#xff09;中用于展示长列表数据的高性能滚动容器组件。以下是 List 的详细介绍和使用方法。 基本介绍 List 组件特点&#xff1a; 支持垂直/水平滚动高性能渲染&#xff08;仅渲染可视区域内…...

深度解析:从12306看混合云架构下的高并发系统设计

作为曾参与12306余票查询系统高并发升级的技术从业者&#xff0c;笔者注意到公众对于12306底层技术常存在认知盲区。为破解这一迷思&#xff0c;特此分享十年前的架构解密文献&#xff08;该技术之前名叫 gemfire 现已晋升为Apache顶级项目Geode&#xff0c;代码库详见&#xf…...

解决 EasyExcel 填充图片占满单元格问题

本篇主要记录解决使用EasyExcel 填充图片的两个问题&#xff1a; 1. 如何根据标识填充 2.如果完全占满要显示的单元格 import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.metadata.data.ImageData; import com.alibaba.e…...

汽车售后 D - PDU 和 J2543 详细介绍

D - PDU&#xff08;Diagnostic Protocol Data Unit&#xff09; 定义与标准1&#xff1a;D - PDU 是指诊断协议数据单元&#xff0c;ISO 22900 - 2 - 2017 D - PDU - API 是针对道路车辆的模块化车辆通信接口&#xff08;MVCI&#xff09;中诊断协议数据单元的编程接口标准。…...

【linux】Chrony服务器

简介 1.1 时间的重要性 由于 IT 系统中&#xff0c;准确的计时非常重要&#xff0c;有很多种原因需要准确计时&#xff1a; 在网络传输中&#xff0c;数据包括和日志需要准确的时间戳 各种应用程序中&#xff0c;如订单信息&#xff0c;交易信息等 都需要准确的时间戳 1.2 时区…...

深度剖析!GPT-image-1 API 开放对 AI 绘画技术生态的冲击!

4月24日凌晨&#xff0c;OpenAI正式发布了全新的图像生成模型“gpt-image-1”&#xff0c;并通过API向全球开发者开放使用&#xff0c;这意味着其GPT-4o的图像生成能力正式向开发者开放&#xff01; 在这之前&#xff0c;GPT-4o的图像生成功能于今年3月25日由 OpenAI 创始人兼 …...

天能资管(SkyAi):精准投资匹配,定制资产配置新体验

在资产配置领域,随着市场环境的日益复杂和投资者需求的日益多样化,个性化和精准化已成为投资者最为关注的核心诉求。天能资管(SkyAi)作为新加坡BEAVER TOKEN基金会旗下的科技先锋,凭借其强大的AI技术和丰富的市场经验,创新性地推出了精准投资匹配服务,为投资者带来了前所未有的…...

volatile缓存可见性实现原理

1.缓存一致性问题 在多核处理器架构中&#xff0c;每个核心都有自己的缓存&#xff08;Cache&#xff09;&#xff0c;而主内存是所有核心共享的。当一个线程在某个核心上修改了一个共享变量时&#xff0c;这个修改可能只会更新到该核心的缓存中&#xff0c;并不会立刻写回到主…...

【计算机视觉】CV实战- 深入解析基于HOG+SVM的行人检测系统:Pedestrian Detection

深入解析基于HOGSVM的行人检测系统&#xff1a;从理论到实践 技术核心&#xff1a;HOGSVM检测框架HOG特征原理SVM分类器 项目架构与数据准备INRIA Person数据集目录结构 实战指南&#xff1a;从零构建检测系统环境配置完整训练流程检测应用 关键技术问题与解决方案1. 难例挖掘不…...

HDRnet——双边滤波和仿射变换的摇身一变

主页&#xff1a;Deep Bilateral Learning paper&#xff1a;https://groups.csail.mit.edu/graphics/hdrnet/data/hdrnet.pdf coeffs 这部分的处理对象是低分辨率图&#xff0c;利用CNN进行特征提取&#xff08;局部和全局&#xff09;&#xff0c;最后fuse得到grid&#xff…...

Spring的xxxAware接口工作原理-笔记

1.Aware 接口的工作原理 Spring 提供了多个 XXXAware 接口&#xff08;如 ApplicationEventPublisherAware、ApplicationContextAware、BeanFactoryAware 等&#xff09;&#xff0c;这些接口的核心作用是让 Bean 在初始化过程中自动获取特定的依赖。 实现 Aware 接口的 Bean…...

flume整合Kafka和spark-streaming核心编程

flume整合Kafka 需求1&#xff1a;利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台&#xff1a; 1.查看topic 2.编辑flume-Kafka.conf&#xff0c;并启动flume 3.启动Kafka消费者 4.新增测试数据 5.查…...

第十四届蓝桥杯刷题——day20

第十四届蓝桥杯刷题——day20 引言题目一&#xff1a;工作时长题目二&#xff1a;与或异或题目三&#xff1a;翻转题目四&#xff1a;阶乘的和题目五&#xff1a;公因数匹配附录&#xff1a;源码gitee仓库 引言 蓝桥杯C研究生组&#xff08;河北赛区&#xff09;快要开赛了&…...

Python MCP客户端SDK实现

以下是一个用于与大模型MCP协议交互的Python客户端SDK实现: ```python import json import requests import uuid from typing import Dict, List, Any, Optional, Union from enum import Enum from datetime import datetime class MCPTaskType(Enum): TEXT_GENERATION…...

使用el-table表格动态渲染表头数据之后,导致设置fixed的列渲染出现问题

问题如下&#xff1a; 解决方法&#xff1a; 使用$nextTick和v-if&#xff0c;让el-table在页面渲染完成之后再显示 <el-table v-if"visile"></el-table> 获取数据的方法 getdata(){ //这里处理数据 this.visilefalse //不显示table组件 this.$nex…...

Vue 3 父子组件通信案例详解:Props 与 Emits 实战

前言 在 Vue 3 开发中&#xff0c;组件通信是最基础也是最重要的技能之一。本文将用实际案例演示 Vue 3 中最常用的两种父子通信方式&#xff1a;Props&#xff08;父传子&#xff09;和 Emits&#xff08;子传父&#xff09;&#xff0c;帮助大家快速掌握 Composition API 下…...

kotlin与MVVM结合使用总结(三)

1. MVVM 架构详细介绍及源码层面理解 整体架构 MVVM&#xff08;Model - View - ViewModel&#xff09;架构是为了解决视图和数据模型之间的耦合问题而设计的。它通过引入 ViewModel 作为中间层&#xff0c;实现了视图和数据的分离&#xff0c;提高了代码的可维护性和可测试性…...

前端基础之《Vue(11)—自定义指令》

一、自定义指令 1、自己封装指令 什么是指令&#xff1f;指令本质上就是DOM功能的一种抽象封装。 如果有一些DOM功能经常用&#xff0c;但是Vue没有提供相关指令&#xff0c;建议自己封装。 2、自定义全局指令 使用Vue.directive(指令名, function() {})定义全局指令。 3、…...

第3.2节 Android应用调用链路分析

3.2.1 Android调用链路简介 在Android应用程序中&#xff0c;调用链路涉及应用程序中不同组件&#xff08;如Activity、Service、BroadcastReceiver、ContentProvider&#xff09;之间的调用关系&#xff0c;以及应用程序与系统服务之间的交互。了解和分析这些调用链路对于调试…...

Codeforces Round 1019 (Div. 2) ABC

A 模拟 思路 数组y是不同的&#xff0c;且所以xi * yi 相同&#xff0c;只有x数组全不同才可以满足要求 代码 LL n,m,k;void solve() {map<LL,LL> mp;cin >> n;for (int i 1;i < n;i ){LL x;cin >> x;mp[x] ;}cout << mp.size() << endl;…...