Qt实现json数据的生成、解析、修改和删除

文章介绍

  • 本文章主要介绍如何使用QT提供的json相关类来处理json数据,包括json数据的生成、解析、修改和json数据的删除。

json数据的增删改查

  • 处理json数据时需要包含以下三个头文件
    •   #include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>
      

json数据生成

  • json数据
    •   {  "id":1001,"name":"jack","sex":true}
      
  • 代码
    •   // 创建json数据对象QJsonObject json;json.insert("name", "jack");json.insert("id", 1001);json.insert("sex", true);QJsonDocument document;   // 创建json文档document.setObject(json); // 给json文档设置json数据对象// 将json数据对象转为字符串QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

嵌套json数据生成

  • json数据
    •   {"id": 1002,"name": "Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 代码
    •   // 创建子节点scoreData的json数据对象QJsonObject scoreObject;scoreObject.insert("Math", 90);scoreObject.insert("Chinese", 96);scoreObject.insert("English", 82);// 创建json数据对象QJsonObject json;json.insert("name", "Tom");json.insert("id", 1002);json.insert("sex", true);json.insert("scoreData", QJsonValue(scoreObject));QJsonDocument document;document.setObject(json);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

包含数组的json数据生成

  • json数据
    •   {"id":1002,"name": "Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex": true,"techData":["C++", "JAVA", "PYTHON"]}
      
  • 代码
    •   // 创建json数组对象QJsonArray techArray;techArray.append("C++");techArray.append("JAVA");techArray.append("PYTHON");// 创建子节点scoreData的json数据对象QJsonObject scoreObject;scoreObject.insert("Math", 90);scoreObject.insert("Chinese", 96);scoreObject.insert("English", 82);// 创建json对象QJsonObject json;json.insert("name", "Tom");json.insert("id", 1002);json.insert("sex", true);json.insert("scoreData", QJsonValue(scoreObject));json.insert("techData", QJsonValue(techArray));QJsonDocument document;document.setObject(json);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

包含数组对象的json数据生成

  • json数据
    •   {"id":1002,"name": "Tom","schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 代码
    •   // 创建json数组QJsonArray SchoolArray;QJsonObject primarySchoolObj;primarySchoolObj.insert("schoolName", "xiaoxue");primarySchoolObj.insert("schoolCity", "Xian");QJsonObject middleSchoolObj;middleSchoolObj.insert("schoolName", "zhongxue");middleSchoolObj.insert("schoolCity", "Xian");QJsonObject universityObj;universityObj.insert("schoolName", "daxue");universityObj.insert("schoolCity", "Beijing");// json数组中插入json数据对象SchoolArray.append(primarySchoolObj);SchoolArray.append(middleSchoolObj);SchoolArray.append(universityObj);// 创建子节点scoreData的json数据对象QJsonObject scoreObject;scoreObject.insert("Math", 90);scoreObject.insert("Chinese", 96);scoreObject.insert("English", 82);// 创建json数据QJsonObject json;json.insert("name", "Tom");json.insert("id", 1002);json.insert("sex", true);json.insert("scoreData", QJsonValue(scoreObject));json.insert("schoolData", QJsonValue(SchoolArray));QJsonDocument document;document.setObject(json);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

json数据解析

  • json数据
    •   {"sex":true,"id":1001,"name":"jack"}
      
  • 解析结果
    •   strName "jack"iId 1001bSex true
      
  • 代码
    •   QByteArray jsonData = "{\"sex\":true,\"id\":1001,\"name\":\"jack\"}";// 将字符串转为json文档QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;
      

嵌套json数据解析

  • json数据
    •   {"id":1002,"name":"Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 解析结果
    •   strName "Tom"iId 1002bSex trueiChinese 96iEnglish 82iMath 90
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;// 解析scoreData节点的json数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();QJsonValue chineseValue = scoreDataObj.value("Chinese");int iChinese = chineseValue.toInt();qDebug() << "iChinese" << iChinese;QJsonValue englishValue = scoreDataObj.value("English");int iEnglish = englishValue.toInt();qDebug() << "iEnglish" << iEnglish;QJsonValue mathValue = scoreDataObj.value("Math");int iMath = mathValue.toInt();qDebug() << "iMath" << iMath;
      

包含数组的json数据解析

  • json数据
    •   {"id":1002,"name":"Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true,"techData":["C++", "JAVA", "PYTHON"]}
      
  • 解析结果
    •   strName "Tom"iId 1002bSex trueiChinese 96iEnglish 82iMath 90str "C++"str "JAVA"str "PYTHON"
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true,\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"]}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;// 解析scoreData节点的json数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();QJsonValue chineseValue = scoreDataObj.value("Chinese");int iChinese = chineseValue.toInt();qDebug() << "iChinese" << iChinese;QJsonValue englishValue = scoreDataObj.value("English");int iEnglish = englishValue.toInt();qDebug() << "iEnglish" << iEnglish;QJsonValue mathValue = scoreDataObj.value("Math");int iMath = mathValue.toInt();qDebug() << "iMath" << iMath;// 解析techData数组中的json数据QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();for(int i = 0; i < techDataArray.size(); i++){QJsonValue value = techDataArray.at(i);QString str = value.toString();qDebug() << "str" << str;}
      

包含数组对象的json数据解析

  • json数据
    •   {"id":1002,"name":"Tom","schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 解析结果
    •   strName "Tom"iId 1002bSex trueiChinese 96iEnglish 82iMath 90strSchoolname "xiaoxue"strSchoolcity "Xian"strSchoolname "zhongxue"strSchoolcity "Xian"strSchoolname "daxue"strSchoolcity "Beijing"
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;// 解析scoreData节点的json数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();QJsonValue chineseValue = scoreDataObj.value("Chinese");int iChinese = chineseValue.toInt();qDebug() << "iChinese" << iChinese;QJsonValue englishValue = scoreDataObj.value("English");int iEnglish = englishValue.toInt();qDebug() << "iEnglish" << iEnglish;QJsonValue mathValue = scoreDataObj.value("Math");int iMath = mathValue.toInt();qDebug() << "iMath" << iMath;// 解析schoolData数组对象的json数据QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataValueArray = schoolDataValue.toArray();for(int i = 0; i < schoolDataValueArray.size(); i++){QJsonValue value = schoolDataValueArray.at(i);QJsonObject obj = value.toObject();QJsonValue schoolnameValue = obj.value("schoolName");QString strSchoolname = schoolnameValue.toString();qDebug() << "strSchoolname" << strSchoolname;QJsonValue schoolcityValue = obj.value("schoolCity");QString strSchoolcity = schoolcityValue.toString();qDebug() << "strSchoolcity" << strSchoolcity;}
      

json数据修改

  • 原始json数据
    •   {"id":1002,"name":"Tom","techData":["C++","JAVA","PYTHON"], "schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 修改后的json数据
    •   {"id":1002,"name":"Jack", // Tom修改为Jack"techData":["C++","JAVA","GO"], // PYTHON修改为GO "schoolData":[{"schoolCity":"Baoji","schoolName":"xiaoxue"}, // Xian改为Baoji{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":100, // 96修改为100"English":82,"Math":90},"sex":true}
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"], \"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";// 将json数据转为json文档QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 修改数据rootObj["name"] = "Jack";// 修改数据对象QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();scoreDataObj["Chinese"] = 100;rootObj["scoreData"] = scoreDataObj;// 修改数组QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();for(int i = 0; i < techDataArray.size(); i++){if(techDataArray.at(i).toString().compare("PYTHON") == 0){techDataArray.replace(i, "GO");break;}}rootObj["techData"] = techDataArray;// 修改数组对象QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataArray = schoolDataValue.toArray();for(int i = 0; i < schoolDataArray.size(); i++){QJsonObject obj = schoolDataArray.at(i).toObject();if(obj.value("schoolName").toString().compare("xiaoxue") == 0){obj["schoolCity"] = "Baoji";schoolDataArray.replace(i, obj);break;}}rootObj["schoolData"] = schoolDataArray;// 将json数据对象转为字符串QJsonDocument document;document.setObject(rootObj);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

新增json数据

  • 原始json数据
    •   {"id":1002,"name":"Tom","techData":["C++", "JAVA", "PYTHON"], "schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 新增相应字段后的json数据
    •   {"class":5, // 新增项"home":{   // 新增项"father":52,"mather":52},"id":1002,"name":"Tom","schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"},{"schoolCity":"shanghai","schoolName":"boshi"} // 新增项],"scoreData":{"Chinese":96,"English":82,"Math":90,"Physics":100 // 新增项},"sex":true,"techData":["C++","JAVA","PYTHON","GO"] //新增GO数据}
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"], \"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}QJsonObject rootObj = rootDoc.object();// 新增数据rootObj.insert("class", 5);// 新增数据对象QJsonObject homeObject;homeObject.insert("father", 52);homeObject.insert("mather", 52);rootObj.insert("home", homeObject);// 在数据对象中新增数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();scoreDataObj.insert("Physics", 100);rootObj["scoreData"] = scoreDataObj;// 在数组中新增数据QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();techDataArray.append("GO");rootObj["techData"] = techDataArray;// 在数组对象中新增数据QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataArray = schoolDataValue.toArray();QJsonObject doctorObj;doctorObj.insert("schoolName", "boshi");doctorObj.insert("schoolCity", "shanghai");schoolDataArray.append(doctorObj);rootObj["schoolData"] = schoolDataArray;QJsonDocument document;document.setObject(rootObj);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

删除json数据

  • 原始json数据
    •   {"id":1002,"name":"Tom", //此项删除"techData":["C++","JAVA","PYTHON"], // PYTHON删除 "schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"}, // 此项删除{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96, //此项删除"English":82,"Math":90},"sex":true}
      
  • 删除相应字段后的json数据
    •   {"id":1002,"techData":["C++","JAVA"], "schoolData":[{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"English":82,"Math":90},"sex":true}
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"], \"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "rootdoc is null";return false;}QJsonObject rootObj = rootDoc.object();// 删除数据rootObj.remove("name");// 删除数据对象中的数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();scoreDataObj.remove("Chinese");rootObj["scoreData"] = scoreDataObj;// 删除数组中的数据QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();for(int i = 0; i < techDataArray.size(); i++){if(techDataArray.at(i).toString().compare("PYTHON") == 0){techDataArray.removeAt(i);break;}}rootObj["techData"] = techDataArray;// 删除数组对象中的数据QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataArray = schoolDataValue.toArray();for(int i = 0; i < schoolDataArray.size(); i++){QJsonObject obj = schoolDataArray.at(i).toObject();if(obj.value("schoolName").toString().compare("xiaoxue") == 0){schoolDataArray.removeAt(i);break;}}rootObj["schoolData"] = schoolDataArray;QJsonDocument document;document.setObject(rootObj);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react 路由创建与使用

1, 安装路由 npm i react-router-dom2&#xff0c;路由组件 createBrowserRouter // router/index.js import { createBrowserRouter } from "react-router-dom"import Home from ../page/home import New from ../page/newconst router createBrowserRouter([{pa…

武汉流星汇聚:亚马逊领跑全球电商,中国卖家迎来前所未有机遇窗口

在数字经济的浪潮中&#xff0c;亚马逊如同一艘巨轮&#xff0c;乘风破浪&#xff0c;引领着全球电商行业的航向。其每月近30亿次的访问量&#xff0c;不仅彰显了其在全球市场的强大影响力&#xff0c;更为中国卖家提供了前所未有的发展机遇。在这个平台上&#xff0c;中国卖家…

Unity URP Shader 修改深度让人物不再被地面遮挡

Unity URP Shader 修改深度让人物不再被地面遮挡 前言项目场景布置代码编写 前言 遇到一个小问题&#xff0c;人物总是被XY平面的地面遮挡&#xff0c;于是在Shader中改一下深度输出&#xff0c;这样地面再也不会挡住人物了。 项目 场景布置 将人物放到XY平面的后面 配置S…

搭建NFS服务器

搭建NFS服务器 记录linux下搭建使用NFS服务器的一般步骤&#xff0c;以ubuntu20.04和centos7.9操作进行记录。 1. 安装 NFS 服务器 运行以下命令安装 NFS 服务器。 # ubuntu下安装 sudo apt-get update sudo apt install nfs-kernel-server # 配置服务 sudo systemctl start …

第 13 章 JavaScript基本包装类型

第 13 章 JavaScript基本包装类型 1.基本包装类型概述 2.Boolean 类型 3.Number 类型 4.String 类型 为了便于操作基本类型值&#xff0c;ECMAScript 提供了 3 个特殊的引用类型&#xff1a;Boolean、Number和 String。这些类型与其他引用类型相似&#xff0c;但同时也具有…

EehCache介绍、应用场景和示例代码

EhCache 概述 EhCache 是一个高性能、轻量级的 Java 缓存库&#xff0c;广泛应用于各种 Java 应用中。EhCache 提供了丰富的功能&#xff0c;包括内存缓存、磁盘缓存、分布式缓存、持久化等&#xff0c;并且可以和 Spring 框架无缝集成。它支持基于内存和磁盘的混合存储&#…

除了按值和引用,方法参数的第三种传递方式

一、官方描述 三种参数传递方式并非我们杜撰出来的&#xff0c;而是写在.NET最核心的规范文档ECMA-355中&#xff08;I.12.4.1.5&#xff09;&#xff0c;原文如下&#xff1a; The CLI supports three kinds of parameter passing, all indicated in metadata as part of the …

WPS宏实现一个表格拆分成多个表格的功能

把首列名称中一样的分别创建该名称时间戳的新表格&#xff0c;比如有个表格存储各个省的信息&#xff0c;江苏的有50行数据&#xff0c;山西的55行数据等等&#xff0c;这个就是把江苏的创建一个新表保存&#xff0c;山西的创建一个新表格保存。里面主要是表格的创建与关闭相关…

Nginx 优化与防盗链

文章目录 Nginx 优化与防盗链一、隐藏版本号1.1 修改配置文件方式1.1.1 操作步骤 1.2 修改源码方式1.2.1 操作步骤 二、修改用户与组2.1 操作步骤 三、缓存时间3.1 操作步骤 四、日志切割4.1 操作步骤 五、连接超时5.1 操作步骤 六、更改进程数6.1 操作步骤 七、配置网页压缩7.…

【论文分享】Graviton: Trusted Execution Environments on GPUs 2018’OSDI

目录 AbstractIntroductioncontributions BackgroundGPUSoftware stackHardwareContext and channel managementCommand submissionProgramming modelInitializationMemory allocationHost-GPU transfersKernel dispatch Sharing Intel SGX Threat ModelOverviewGraviton Archi…

CLIP-VIT-L + Qwen 多模态源码阅读 - 语言模型篇(3)

多模态学习笔记 - 语言模型篇&#xff08;3&#xff09; 参考repo:WatchTower-Liu/VLM-learning; url: VLLM-BASE 吐槽 今天接着昨天的源码继续看&#xff0c;黑神话&#xff1a;悟空正好今天发售&#xff0c;希望广大coder能玩的开心~ 学习心得 前情提要 详情请看多模态…

设计模式笔记01(java版)

文章目录 设计模式概述学习设计模式的必要性设计模式分类创建型模式结构型模式行为型模式 UML类图概述类图的作用类图表示法类的表示方式类与类之间关系的表示方式1&#xff0c;单向关联2&#xff0c;双向关联3&#xff0c;自关联聚合关系组合关系依赖关系继承关系实现关系 软件…

Pytorch 张量运算函数(补充)

mean() mean()函数是进行张量均值计算的函数,常用参数可以设置参数dim来进行对应维度的均值计算 以下是使用一个二维张量进行演示的例子 import numpy as np import torch device torch.device(mps if torch.backends.mps.is_available() else cpu) print(device ) data1 …

C++ | Leetcode C++题解之第367题有效的完全平方数

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPerfectSquare(int num) {double x0 num;while (true) {double x1 (x0 num / x0) / 2;if (x0 - x1 < 1e-6) {break;}x0 x1;}int x (int) x0;return x * x num;} };

linux系统,ubuntu安装英伟达NVIDIA4090显卡驱动

文章目录 前言下载英伟达NVIDIA官方驱动安装NVIDIA驱动远程安装关闭交互界面设置权限&#xff08;自己确认版本号5&#xff09;安装&#xff08;自己确认版本号5&#xff09;打开交互界面&#xff0c;并重启系统验证是否安装成功 异常处理问题1问题2问题3&#xff08;可能没解决…

Linux 支持程序在运行时动态加载和卸载共享库,动态链接库

动态链接库 Linux支持动态链接库&#xff08;共享库&#xff09;的概念&#xff0c;允许程序在运行时动态加载和卸载共享库。这有助于减小可执行文件的大小&#xff0c;共享代码&#xff0c;提高代码的可重用性。 #include <dlfcn.h> #include <iostream>int mai…

python小游戏——躲避球(可当课设)

游戏简介&#xff1a; 没有美术&#xff0c;画面简洁&#xff08;懒得做&#xff09;。玩家控制小球躲避敌人&#xff08;上下左右&#xff0c;闪避&#xff09;&#xff0c;敌人体积越大速度越慢&#xff0c;随机生成道具球&#xff08;目前只有生命球&#xff09;&#xff0…

day_49

42. 接雨水 class Solution:def trap(self, height: List[int]) -> int:stack []res 0for i in range(len(height)):while(stack and height[i] > height[stack[-1]]):mid stack.pop()if stack:h min(height[i], height[stack[-1]]) - height[mid]w i - stack[-1] …

​14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Redis内存淘汰

Redis内存淘汰 Redis可以存储多少数据 maxmemory配置&#xff0c;默认是注释掉的。 #maxmemory <bytes>我们可以主动配置maxmemory&#xff0c;maxmemory支持各种单位&#xff0c;默认是字节 maxmemory 1024 maxmemory 1024KB maxmemory 1024MB maxmemory 1024GB当Re…