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

形象墙logo墙设计图/湖南关键词优化快速

形象墙logo墙设计图,湖南关键词优化快速,搬家公司怎么做网站,兰州网站建设招聘信息简介: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,但是JSON是独立于语言的,这意味着尽管JSON是由JavaScript语法衍生出来的,它可以被任何编程语言读取和生成…

简介:

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,但是JSON是独立于语言的,这意味着尽管JSON是由JavaScript语法衍生出来的,它可以被任何编程语言读取和生成。JSON的设计目的是使数据交换既简单又快速,相对于其他数据交换格式如XML,JSON更加轻巧,这使得它在网络上传输更加高效。对于人类和机器来说,JSON文本的格式都是易于理解的。 管JSON源于JavaScript,但是几乎所有的编程语言都有解析JSON的库,这使得JSON成为跨平台和语言的数据交换的理想格式。

 一、什么是json? 

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,但是JSON是独立于语言的,这意味着尽管JSON是由JavaScript语法衍生出来的,它可以被任何编程语言读取和生成。JSON的设计目的是使数据交换既简单又快速。

1.1 JSON的特点:

         1. 轻量级:相对于其他数据交换格式如XML,JSON更加轻巧,这使得它在网络上传输更加高效。

        2. 易于阅读和编写:对于人类和机器来说,JSON文本的格式都是易于理解的。

        3. 语言无关性:尽管JSON源于JavaScript,但是几乎所有的编程语言都有解析JSON的库,这使得JSON成为跨平台和语言的数据交换的理想格式。

1.2 JSON的结构:

        1. 键值对集合(在其他语言中可能被实现为对象,记录,结构,字典,哈希表,有名列表,或者关联数组)。在JSON中,它们被表示为一个由花括号包围的对象。每个键值对由一个键(字符串)和一个值组成,键值之间用冒号分隔,键值对之间用逗号分隔。

        2. 有序的值列表(在大多数语言中被实现为数组)。在JSON中,它们被表示为由方括号包围的数组,数组的元素之间用逗号分隔。

一个简单的JSON对象示例:

{"name": "John Doe","age": 30,"isEmployed": true,"address": {"street": "123 Main St","city": "Anytown"},"phoneNumbers": ["123-456-7890","987-654-3210"]
}

        在这个例子中,我们有一个包含五个键值对的JSON对象。`name`、`age`和`isEmployed`键对应的值是简单的数据类型(字符串、数字和布尔值)。`address`键对应的值是一个嵌套的JSON对象,而`phoneNumbers`键对应的值是一个包含字符串的JSON数组。

1.3 基本元素

JSON(JavaScript Object Notation)的语法规则相对简单,主要包括以下几个基本元素:

        1.对象(Object):用花括号 `{}` 表示,包含一组无序的键值对。每个键值对之间用逗号分隔。键必须是字符串,值可以是任意有效的 JSON 数据类型。

     {"key1": "value1","key2": "value2","key3": "value3"}

        2. 数组(Array):用方括号 `[]` 表示,包含一组有序的值。每个值之间用逗号分隔。数组中的值可以是任意有效的 JSON 数据类型。

    {"arrayKey": [1, 2, 3, 4]}

        3. 值(Value):可以是字符串、数字、布尔值、对象、数组或 `null`。这些值可以嵌套在对象或数组中。

    {"stringKey": "Hello, JSON!","numberKey": 42,"booleanKey": true,"nullKey": null,"objectKey": {"nestedKey": "nestedValue"},"arrayKey": [1, "two", false, null]}

        4. 字符串(String): 字符串在JSON中是由双引号 `" "` 包围的一系列Unicode字符。字符串用于表示文本数据。

{"name": "John Doe","city": "New York"}

        5. 数字(Number): 数字可以是整数或者浮点数,直接写出,不需要加引号。JSON中的数字和大多数编程语言中的表示方法相似。

        {"integer": 12,"float": 3.14}

        6. 布尔值(Boolean): 布尔值表示逻辑实体,只有两个值,真(`true`)或假(`false`),不需要加引号。

        {"isTrue": true,"isFalse": false}

        7. null: `null` 在JSON中表示空值或不存在的值。它没有引号。

        {"emptyValue": null}

具体示例:

{"name": "John Doe","age": 30,"isEmployed": true,"address": {"street": "123 Main St","city": "Anytown"},"phoneNumbers": ["123-456-7890","987-654-3210"]
}

在这个示例中:

        name、age 和 isEmployed 是简单的键值对,值分别是字符串、数字和布尔值。        

        address 是一个嵌套的对象,包含 street 和 city 两个键值对。

        phoneNumbers  是一个数组,包含两个字符串值。

        JSON 的简洁和易读特性使它成为数据交换和配置文件的理想选择。无论是前后端数据传递还是存储配置,JSON 都非常适用。

一个更加复杂的json:t.weather.itboy.net/api/weather/city/101010100

1.4 使用场景:

        Web开发:JSON广泛用于前后端之间的数据交换。

        配置文件:许多应用程序使用JSON格式来存储配置设置。

        API和Web服务:许多Web服务使用JSON格式来提供公共API,因为它易于被不同的编程语言读取和解析。

由于其简洁、易于理解的结构,JSON已成为Web应用和服务之间交换数据的事实标准。

 二、下载json 

下载链接:GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

解压后得到这俩个文件 

我们需要将这俩个文件加入到vscode中的C程序文件夹中

三、创建一个json

以下是一个使用 cJSON 创建一个JSON对象的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main()
{// 创建一个新的JSON对象cJSON *root = cJSON_CreateObject();// 向根对象中添加一个名为"key1"的键值对,值为字符串"10"cJSON* key1 = cJSON_AddStringToObject(root,"key1","10");if(key1 != NULL){printf("key:%s value :%s\n",key1->string,key1->valuestring);}// 将JSON对象转换为字符串格式char *str = cJSON_Print(root);  //输出json字符串// 打印转换后的JSON字符串printf(str);// 释放转换成字符串所使用的内存free(str);// 暂停程序运行,以便查看控制台输出system("pause>0");system("pause>0");return 0;
}

        在这个代码中,我们创建了一个空的JSON对象 root 

3.1 创建json对象 

    // 创建一个新的JSON对象cJSON *root = cJSON_CreateObject();

        cJSON_CreateObject 函数,这是 cJSON 库中用来创建一个新的JSON对象的函数。cJSON 是一个在C语言中处理JSON数据的轻量级库。

如果您想使用这个库来创建一个JSON对象,您可以按照以下步骤进行:

        1. 首先,确保已经安装了 cJSON 库。

        2. 在C语言代码中,包含 cJSON 的头文件。

        3. 使用 cJSON_CreateObject 函数来创建一个新的JSON对象。

 3.2 cjson的类型详解

cjson结构体如下定义:

/* cJSON 结构体: */
typedef struct cJSON
{/* next/prev 允许你在数组/对象链中遍历。或者,使用 GetArraySize/GetArrayItem/GetObjectItem */struct cJSON *next;struct cJSON *prev;/* 数组或对象项将有一个子指针,指向数组/对象中的项链。 */struct cJSON *child;/* 项的类型,如上所述。 */int type;/* 项的字符串,如果 type==cJSON_String 和 type == cJSON_Raw */char *valuestring;/* 写入 valueint 已被弃用,请使用 cJSON_SetNumberValue 代替 */int valueint;/* 项的数字,如果 type==cJSON_Number */double valuedouble;/* 项的名称字符串,如果此项是对象的子项,或者在对象的子项列表中。 */char *string;
} cJSON;

        这段代码定义了一个名为 cJSON 的结构体,这是 cJSON 库的核心数据结构,它表示一个JSON数据项。每一个 cJSON 结构体可以表示一个JSON对象、数组、字符串、数字或其他的JSON数据类型。

下面是每个成员变量的功能:

        struct cJSON *next;` 和 `struct cJSON *prev;:这两个指针分别指向相邻的JSON数据项,它们使得 cJSON 结构体可以形成一个链表,这对于表示一个JSON数组或对象是十分有用的。

        struct cJSON *child;:如果当前 cJSON 结构体表示一个JSON数组或对象,child 指针会指向一个链表,这个链表的元素就是数组或对象中的数据项。

        int type;:这个变量表示当前 cJSON 结构体表示的JSON数据类型,例如,它可能是 cJSON_NULL、cJSON_Number、cJSON_String、cJSON_Array 或 cJSON_Object 等。

        char *valuestring;:如果当前 cJSON 结构体表示一个JSON字符串,valuestring 就会被设置成那个字符串的值。如果它表示一个原始的未解析的JSON字符串,valuestring 也会被设置成那个字符串的值。

        int valueint;:这个成员现在已经不建议使用,取而代之的是 cJSON_SetNumberValue 函数来设置JSON数字的值

        double valuedouble;:如果当前 cJSON 结构体表示一个JSON数字,valuedouble 就会被设置成那个数字的值。

        char *string;:如果当前 cJSON 结构体是一个JSON对象中的数据项,string 就会被设置成那个数据项对应的键名

        我们可以使用 `cJSON` 库提供的各种函数,如 cJSON_CreateObject、cJSON_AddItemToObject 或 cJSON_GetObjectItem等,来创建、操作和查询 cJSON 结构体。

3.3 创建键值对

        cJSON_AddStringToObject 。这个函数是 cJSON 库中的一个函数,用于向一个 JSON 对象中添加一个字符串类型的键值对。

cJSON *cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);

        cJSON * const object:这是一个指向 JSON 对象的指针,表示你要往哪个对象中添加键值对。
        const char * const name:这是一个字符串,表示你要添加的键的名称(key)。

        const char * const string:这是一个字符串,表示你要添加的值(value)。

返回值:

        cJSON :这个函数返回一个指向新添加的 JSON 元素的指针。这个元素包含了添加的字符串值。如果添加失败,返回 NULL。

3.4 添加嵌套的JSON对象

        cJSON_AddItemToObject,来自 cJSON 库。函数原型应该是:

cJSON_bool cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);

        这个函数的作用是将一个 cJSON 结构(`item`),它可以代表任何类型的JSON数据(如对象、数组、字符串、数字等),添加到另一个 cJSON 对象结构中,并将其与指定的键(`string`)相关联。

参数解释如下:

        cJSON *object:这是一个指向目标JSON对象的指针,你会向它添加一个新的元素。

        const char *string:这是你想要在目标对象中创建的键的名称。

        cJSON *item:这是一个指向你想要添加的 `cJSON` 元素的指针。

返回值:

        cJSON_bool:这是一个布尔值,如果成功添加元素则返回 `cJSON_True`,否则返回 `cJSON_False`。

下面是一个使用 `cJSON_AddItemToObject` 函数添加嵌套 JSON 对象的示例:

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main()
{// 创建一个新的JSON对象cJSON *root = cJSON_CreateObject();// 向根对象中添加一个名为"key1"的键值对,值为字符串"10"cJSON* key1 = cJSON_AddStringToObject(root,"key1","10");cJSON* last = NULL; // 用于保存上一个添加的键值对for(int i = 0; i < 5; i ++){// 创建一个名为"obj1"的子对象cJSON* obj1 = cJSON_CreateObject();// 将子对象添加到根对象中cJSON_AddItemToObject(root,"obj1",obj1);     // 向子对象中添加一个名为"key2"的键值对,值为字符串"20"cJSON* key2 = cJSON_AddStringToObject(obj1,"key2","20"); // 将子对象添加到根对象中last=key2;}if(key1 != NULL){printf("key:%s value :%s\n",key1->string,key1->valuestring);}// 将JSON对象转换为字符串格式char *str = cJSON_Print(root);  //输出json字符串// 打印转换后的JSON字符串printf(str);// 释放转换成字符串所使用的内存free(str);// 暂停程序运行,以便查看控制台输出system("pause>0");system("pause>0");return 0;
}

        在这个示例中,我们创建了一个根对象 root 和一个嵌套对象 nested,然后向嵌套对象添加了一个字符串键值对,并将嵌套对象作为根对象的一个字段添加进去。最后,我们打印并释放了相关的内存。

 四、添加数组

4.1 创建数组

cSON_PUBLIC(cSON *) cSON_CreateArray(void);

这个函数声明创建一个空的JSON数组,并返回一个指向该数组的`cJSON`指针

`cJSON_PUBLIC`是一个宏,用于定义函数的可见性,通常用于导出函数供外部使用。

函数没有参数,因此调用时不需要传递任何参数。返回值是一个指向新创建的JSON数组的指针。你可以使用这个指针来添加元素到数组中,或者将数组添加到其他JSON对象中。

示例用法:

cJSON *array = cJSON_CreateArray();
if (array == NULL) {fprintf(stderr, "错误: 无法创建JSON数组。\n");return 1;
}// 现在你可以使用 array 指针来操作这个JSON数组

确保在使用完数组后调用`cJSON_Delete(array)`来释放内存,以避免内存泄漏。

4.2 添加元素到数组

cJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);

这个函数的作用是将一个JSON元素添加到指定的JSON数组中。函数的返回值是一个布尔值,表示添加操作是否成功。如果成功添加元素,返回true,否则返回false

参数说明:

  • cJSON *array: 这是一个指向JSON数组的指针,表示你要往哪个数组中添加元素。
  • cJSON *item: 这是一个指向要添加的JSON元素的指针。可以是任何JSON数据类型,比如字符串、数字、对象等。

我们首先创建了一个空的JSON数组和一个字符串元素,然后将字符串元素添加到数组中。如果添加操作成功,数组将包含这个新添加的元素。如果任何步骤失败,我们会打印错误信息并释放已分配的内存。

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"int main()
{// 创建一个JSON对象cJSON *root = cJSON_CreateObject();if (root == NULL) {fprintf(stderr, "错误: 无法创建JSON对象。\n");return 1;}// 定义一个整数数组int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 创建一个包含整数数组的JSON数组cJSON *array = cJSON_CreateIntArray(a, 10);if (array == NULL) {fprintf(stderr, "错误: 无法创建JSON数组。\n");cJSON_Delete(root);return 1;}// 将JSON数组添加到JSON对象中,键名为"array"cJSON_AddItemToObject(root, "array", array);// 将JSON对象转换为字符串并打印char *json_str = cJSON_Print(root);if (json_str != NULL) {printf("生成的JSON对象: \n%s\n", json_str);free(json_str);} else {fprintf(stderr, "错误: 无法打印JSON对象。\n");}// 释放JSON对象cJSON_Delete(root);// 暂停程序运行,以便查看控制台输出system("pause");return 0;
}
  1. 创建一个JSON对象。
  2. 定义一个整数数组。
  3. 创建一个包含整数数组的JSON数组。
  4. 将JSON数组添加到JSON对象中,键名为"array"。
  5. 将JSON对象转换为字符串并打印。
  6. 释放JSON对象。
  7. 暂停程序运行,以便查看控制台输出。

五、将JSON对象转为字符串

cSON_Print 函数的作用是将一个 cJSON 元素转换成字符串,并返回这个字符串的指针。这个函数是用于将 JSON 对象或数组转换为可读的字符串格式。

CSON_PUBLIC(char *) cSON_Print(const cSON *item);
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"int main()
{// 创建一个JSON对象cJSON *root = cJSON_CreateObject();if (root == NULL) {fprintf(stderr, "错误: 无法创建JSON对象。\n");return 1;}// 添加一些数据到JSON对象中cJSON_AddNumberToObject(root, "number", 123);cJSON_AddStringToObject(root, "string", "Hello, World!");// 将JSON对象转换为字符串char *json_str = cJSON_Print(root);if (json_str != NULL) {printf("生成的JSON字符串: \n%s\n", json_str);// 释放动态分配的字符串内存free(json_str);} else {fprintf(stderr, "错误: 无法打印JSON对象。\n");}// 释放JSON对象cJSON_Delete(root);return 0;
}

我们首先创建了一个 JSON 对象 root,并向其中添加了一个数字和一个字符串。然后,我们使用 cJSON_Print 函数将这个 JSON 对象转换为字符串,并打印出来。最后,我们释放了动态分配的字符串内存和 JSON 对象。

相关文章:

【常见开源库的二次开发】一文学懂CJSON

简介&#xff1a; JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。它基于JavaScript的一个子集&#xff0c;但是JSON是独立于语言的&#xff0c;这意味着尽管JSON是由JavaScript语法衍生出来的&#xff0c;它可以被任何编程语言读取和生成…...

点云下采样有损压缩

转自本人博客&#xff1a;点云下采样有损压缩 点云下采样是通过一定规则对原点云数据进行再采样&#xff0c;减少点云个数&#xff0c;降低点云稀疏程度&#xff0c;减小点云数据大小。 1. 体素下采样&#xff08;Voxel Down Sample&#xff09; std::shared_ptr<PointClo…...

AutoHotKey自动热键(六)转义符号

转义符号 符号说明,, (原义的逗号). 注意: 在命令最后一个参数中的逗号不需要转义, 因为程序知道把它们作为原义处理. 对于 MsgBox 所有参数同样如此, 因为它会智能的处理逗号.%% (原义的百分号) (原义的重音符; 即两个连续的转义符产生单个原义字符);; (原义的分号). 注意: 仅…...

第16章 主成分分析:四个案例及课后习题

1.假设 x x x为 m m m 维随机变量&#xff0c;其均值为 μ \mu μ&#xff0c;协方差矩阵为 Σ \Sigma Σ。 考虑由 m m m维随机变量 x x x到 m m m维随机变量 y y y的线性变换 y i α i T x ∑ k 1 m α k i x k , i 1 , 2 , ⋯ , m y _ { i } \alpha _ { i } ^ { T } …...

股票分析系统设计方案大纲与细节

股票分析系统设计方案大纲与细节 一、引言 随着互联网和金融行业的迅猛发展,股票市场已成为重要的投资渠道。投资者在追求财富增值的过程中,对股票市场的分析和预测需求日益增加。因此,设计并实现一套高效、精准的股票分析系统显得尤为重要。本设计方案旨在提出一个基于大…...

.gitmodules文件

.gitmodules文件在Git仓库中的作用 .gitmodules 文件是 Git 版本控制系统中用来跟踪和管理子模块的配置文件。子模块允许你将一个 Git 仓库嵌套在另一个仓库中&#xff0c;这样可以方便地管理多个项目之间的依赖关系。 在 .gitmodules 文件中&#xff0c;通常会记录每个子模块…...

STM32 SPI世界:W25Q64 Flash存储器的硬件与软件集成策略

摘要 在嵌入式系统设计中&#xff0c;选择合适的存储解决方案对于确保数据的安全性和系统的可靠性至关重要。W25Q64 Flash存储器因其高性能和大容量成为STM32微控制器项目中的热门选择。本文将深入探讨STM32与W25Q64 Flash存储器的硬件连接、软件集成以及SPI通信的最佳实践。 …...

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验17 开放最短路径优先OSPF

一、实验目的 1.验证OSPF协议的作用&#xff1b; 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.验证OSPF协议的作用。 四、实验步骤 1.构建网…...

ChatGPT对话:python程序模拟操作网页弹出对话框

【编者按】单击一网页中的按钮&#xff0c;弹出对话框网页&#xff0c;再单击其中的“Yes”按钮&#xff0c;对话框关闭&#xff0c;请求并获取新网页。 可能ChatGPT第一次没有正确理解描述问题的含义&#xff0c;再次说明后&#xff0c;程序编写就正确了。 1问&#xff1a;pyt…...

利用亚马逊云科技云原生Serverless代码托管服务开发OpenAI ChatGPT-4o应用

今天小李哥继续介绍国际上主流云计算平台亚马逊云科技AWS上的热门生成式AI应用开发架构。上次小李哥分享​了利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API​&#xff0c;这次我将介绍如何利用亚马逊的云原生服务Lambda调用OpenAI的最新模型ChatGPT 4o。…...

Selenium 切换 frame/iframe

环境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19说明&#xff1a; driver.switch_to.frame() # 将当前定位的主体切换为frame/iframe表单的内嵌页面中 driver.switch_to.default_content() # 跳回最外层的页面# 判断元素是否在 frame/ifame 中 # 126 邮箱为例 # …...

VOI(Virtual Operating System Infrastructure,虚拟操作系统基础架构)

VOI&#xff08;Virtual Operating System Infrastructure&#xff0c;虚拟操作系统基础架构&#xff09;架构在桌面虚拟化领域具有其独特的优势&#xff0c;使得它在某些场景下表现尤为出色。以下是几个具体场景&#xff1a; 1. 重载性能需求场景 表现&#xff1a; 高效利用…...

迭代器模式(大话设计模式)C/C++版本

迭代器模式 C #include <iostream> #include <string> #include <vector>using namespace std;// 迭代抽象类,用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法&#xff0c;统一接口 class Iterator { public:Iterator(){};virtu…...

vue学习day04-计算属性、computed计算属性与methods方法、计算属性完整写法

10、计算属性 &#xff08;1&#xff09;概念&#xff1a; 基于现有的数据&#xff0c;计算出来的新属性。依赖于数据变化&#xff0c;自动重新计算。 &#xff08;计算属性->可以将一段求值的代码进行封装&#xff09; &#xff08;2&#xff09;语法&#xff1a; 1&a…...

关于力扣150题目——逆波兰表达式求值Java实现的三种解法

题目介绍 逆波兰表达式是一种后缀表达式&#xff0c;其运算符位于操作数之后。力扣150题目要求我们实现一个函数&#xff0c;计算给定逆波兰表达式的值。本文将介绍三种不同的Java实现方法来解决这个问题。 解法一&#xff1a;使用栈 这是最直观和常见的解法&#xff0c;使用…...

FTP与TFTP

1、TFTP&#xff08;简单文件传输协议&#xff09; TFTP是TCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。 基于UDP协议 端口号&#xff1a;69 特点&#xff1a;简单、轻量级、易于实现 传输过程&…...

【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

JAVA预编译简单理解

目录 一、JSP预编译 二、JDBC预编译 一、JSP预编译 JSP&#xff08;JavaServer Pages&#xff09;是一种动态网页技术标准&#xff0c;它允许将Java代码嵌入到HTML页面中。当第一次请求一个JSP页面时&#xff0c;Web服务器&#xff08;如Tomcat&#xff09;会将JSP页面转换成一…...

nvm 管理多版本 node

1、下载 先不安装node 下载 nvm 1.1.10-setup.zip 解压&#xff1a;nvm&#xff1a;https://nvm.uihtm.com/ 新建nodejs/node、nodejs/nvm文件夹用于存放node版本和nvm安装路径 安装nvm&#xff1a;上述链接有安装教程 查看是否安装成功&#xff1a;重新打开cmd 输入 nvm nv…...

C++中的多重继承和虚继承:横向继承、纵向继承和联合继承;虚继承

多重继承 A.横向多重继承&#xff1a; B.纵向多重继承&#xff1a; C.联合多重继承&#xff1a; 因为 single 和 waiter 都继承了一个 worker 组件&#xff0c;因此 SingingWaiter 将包含两个 worker 组件&#xff0c;那么将派生类对象的地址赋给基类指针将出现二义性 那么如何…...

利用node连接mongodb实现一个小型后端服务系统demo

http 请求 实现get请求数据库数据&#xff1b;实现添加数据实现编辑数据实现删除数据实现导出txt文件、Excel文件实现查询数据库数据并利用导出为excel文件 node 版本 16.16.0 node 版本 18.16.0 会连接 MongoDB 数据库错误。 Connected to MongoDB failed MongoServerSele…...

大数据面试题之数据库(3)

数据库有必要建索引吗? MySQL缺点? 什么是脏读?怎么解决? 为什么要有三大范式&#xff0c;建数据库时一定要遵循吗? 数据库一般对哪些列建立索引?索引的数据结构? MySOL中索引的建立需要考虑哪些问题 关系型数据库与非关系型数据库区别 MySQL与Redis区别 …...

升级之道:精通Conda的自我升级艺术

升级之道&#xff1a;精通Conda的自我升级艺术 引言 Conda是Python和其他科学计算语言的强大包管理器&#xff0c;它不仅管理着包的安装和依赖&#xff0c;还负责自身的更新。随着开源社区的不断发展&#xff0c;Conda定期发布新版本以修复已知问题、增加新功能和提高性能。本…...

领导者视角:识别系统问题的信号

作为企业的领导者&#xff0c;有时候我们面对的不仅是表面的小问题&#xff0c;而是根深蒂固的系统性问题。如果您发现以下症状&#xff0c;可能就是时候深入挖掘了&#xff1a; 1、资源消耗大&#xff1a;一个看似小的问题&#xff0c;解决起来却不断耗费大量资源。 2、反复无…...

CentOS7二进制安装和YUM安装mongodb,服务器无法安装5.0以上的 mongodb 数据库报错 Illegal instruction

文章目录 MongoDB 安装二进制安装YUM 安装 Tips:1、MongoDB安装问题2、MongoDB登录3、MongoDB排序时内存大小限制和创建索引4、创建用户5、Java yaml使用密码连接mongodb6、MongoDB增删改查 MongoDB 安装 二进制安装 [rootmysql5-7 mongodb-6.0.4]# cat start.sh #!/bin/bash…...

AI的前世今生:从理论起源到未来展望

引言 人工智能&#xff08;AI&#xff09;作为一门交叉学科&#xff0c;涵盖了计算机科学、数学、认知科学、神经科学等多个领域&#xff0c;已经成为现代科技的重要组成部分。本文将回顾AI的发展历程&#xff0c;从理论起源到当代应用&#xff0c;再到未来展望&#xff0c;为…...

C# list集合元素去重的几种方法

一、使用使用HashSet去重 List<int> dataSource new List<int>() { 1, 2, 2, 3, 4, 5, 5, 7, 8, 10 }; //源数组中共有10个元素HashSet<int> uniqueData new HashSet<int>(dataSource); //去重之后为8个//输出uniqueData元素为&#xff1a;1,2,3,4,5…...

WritableStream()写入流,将数字或字符流,写入你需要的地方

WritableStream有两个对象参数&#xff1a; 第一个必选&#xff0c;用于配置一些写入流时的钩子&#xff1b; 第二个可选&#xff0c;用于配置一些chunk入队和队列控制的策略&#xff1b; 第二个参数的策略&#xff08;利用ByteLengthQueuingStrategy【按字节计量】和CountQueu…...

RK3568平台(opencv篇)opencv处理图像视频

一.读取图像文件并展示 灰度图像&#xff1a; 灰度图需要用 8 位二进制来表示&#xff0c;取值范围是 0-255。用 0 表示 0&#xff08;黑色&#xff09;&#xff0c; 用 255 表示 1&#xff08;白色&#xff09;&#xff0c;取值越大表示该点越亮。 RGB 彩色图像&#xff1a;…...

4. kvm存储虚拟化

kvm存储虚拟化 一、命令行工具管理虚拟磁盘1、查看虚拟磁盘2、添加磁盘3、删除磁盘 二、qcow2格式的磁盘文件1、创建磁盘文件2、差量镜像/快速创建虚机2.1 创建差量镜像2.2 准备配置文件2.3 创建虚拟机2.4 批量部署虚拟机 三、存储池 storage pool1、类型2、在线迁移2.1 规划后…...