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

黑马程序员C++2024新版笔记 第三章 数组

1.数组定义

数组是一批相同类型的元素(element)的集合组成的数据结构。

声明语法:

<数据类型> <数组名> [<数组长度>]
int v[6]    // 声明了可以存放6个int数字的数组

数组的每个元素有编号,称之为下标索引,从0开始。通过数组名[下标索引]访问数组内元素(存、取)。

#include <iostream>
using namespace std;int main() {// 11,22,33,44,55放入数组中int v[5];// 用下标索引访问每一个元素,从0开始v[0] = 11;v[1] = 22;v[2] = 33;v[3] = 44;v[4] = 55;cout << "数组的第1个元素是:" << v[0] << endl;cout << "数组的第2个元素是:" << v[1] << endl;cout << "数组的第3个元素是:" << v[2] << endl;cout << "数组的第4个元素是:" << v[3] << endl;cout << "数组的第5个元素是:" << v[4] << endl;// 数组的声明和赋值同步完成的写法// 数组类型 数组名[] = {元素1, 元素2, 元素3, ..., 元素n};int v2[] = {11, 22, 33, 44, 55};    // 后面的元素可以推断出数组长度,因此数组大小可以不写cout << "数组的第1个元素是:" << v[0] << endl;cout << "数组的第2个元素是:" << v[1] << endl;cout << "数组的第3个元素是:" << v[2] << endl;cout << "数组的第4个元素是:" << v[3] << endl;cout << "数组的第5个元素是:" << v[4] << endl;return 0;
}

2.数组定义练习题讲解

#include <iostream>
#include <random>
using namespace std;// 随机数生成器函数
int get_random_num(int min, int max) {random_device rd;mt19937 gen(rd());uniform_int_distribution<> distrib(min, max);return distrib(gen);
}int main() {// 1.获得随机数int num = get_random_num(1, 10);// 2.需要用户输入10次数字,将内容存入数组中int arr[10];    //  定义数组for (int i = 0; i < 10; i++) {cout << "请输入第" << i + 1 << "个数字:";cin >> arr[i];}// 3.判断每个元素是否和随机数相等int result = 0;for (int i = 0; i < 10; i++) {if (arr[i] == num) {result += 1;}}cout << "用户猜正确" << result << "次" << endl;return 0;
}

3.数组特点

  1. 任意类型(基本数据类型int、double、char、string等;复合数据类型结构体、联合体等;指针类型int*,char*等;枚举类型enum)都可以构建数组。
  2. 数组一旦定义大小就固定了,且无边界检查(越界不会报错,但是运行时可能出现问题)
  3. 数组的内存空间连续分配,而且是有序的,每个元素分配大小取决于存放类型,因此数组中元素类型是一致的,且可以通过sizepf(数组)/sizeof(数组某元素)计算数组元素个数。
  4. 数组的元素值是可以修改的。通过下标访问元素即可实现对存储值修改,但是不可更改类型。
  5. 数组变量不记录数据,而是记录了第一个元素的内存地址,该地址可供访问其中的元素。

代码演示练习:

#include <iostream>
#include <random>
using namespace std;// 随机数生成器函数
int get_random_num(int min, int max) {random_device rd;mt19937 gen(rd());uniform_int_distribution<> distrib(min, max);return distrib(gen);
}int main() {// 特点1: 任意类型均可构建数组cout << "特点1: 任意类型均可构建数组---" << endl;float v1[] = {1.1, 2.2, 3.5, 4.4, 5.5};double v2[] = {1.1, 2.2, 3.5, 4.4, 5.5};char v3[] = {'a', 'b', 1, 2, 3};string v4[] = {"林志铭", "蔡依信", "刘亦飞"};bool v5[] = {true, 0, 1, true, false};enum Color { RED, GREEN, BLUE };Color v6[] = {RED, GREEN, BLUE, GREEN, BLUE};cout << "float数组的第一个元素: " << v1[0] << endl;cout << "double数组的第一个元素: " << v2[0] << endl;cout << "char数组的第一个元素: " << v3[0] << endl;cout << "string数组的第一个元素: " << v4[0] << endl;cout << "bool数组的第一个元素: " << v5[0] << endl;cout << "枚举数组的第一个元素: " << v6[0] << endl;cout << endl;// 特点2:固定大小,没有边界检查cout << "特点2: 固定大小(无边界检查)" << endl;int v7[] = {1, 2, 3, 4, 5};cout << "访问越界的10号下标: " << v7[10] << endl;cout << endl;// 特点3:内存连续且有序,可通过 sizeof(数组)/sizeof(数组元素) 得到数组长度cout << "特点3:内存连续且有序---" << endl;cout << "v7数组的第一个元素是"  << v7[0] << endl;cout << "v7数组的第一个元素是"  << v7[0] << endl;cout << "v7数组的第一个元素是"  << v7[0] << endl;cout << "v7数组的第一个元素是"  << v7[0] << endl;cout << "v7数组的长度是" << sizeof(v7) << "字节" << endl;// 特点4: 元素值可以修改cout << "特点4: 元素值可以修改---" << endl;int v8[] = {1, 2, 3, 4, 5};v8[1] = 66;  // 修改下标1的元素值v8[0] = 11;  //cout << "经过修改,v8的下标1元素值是:" << v8[1] << endl;cout << "经过修改,v8的下标6元素值是:" << v8[0] << endl;cout << endl;// 特点5:数组变量本身不记录数据cout << "特点5: 数组变量本身不记录数据---" << endl;int v9[] = {1, 2, 3, 4, 5};cout << "直接cout v9这个变量:" << v9 << endl;// v9变量本身记录的是内存地址,这个地址是v9数组首元素的地址cout << endl;return 0;
}

4.数组遍历(高级for循环语法)

while循环写法:

高级for循环写法:

#include <iostream>
#include <random>
using namespace std;// 随机数生成器函数
int get_random_num(int min, int max) {random_device rd;mt19937 gen(rd());uniform_int_distribution<> distrib(min, max);return distrib(gen);
}int main() {int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// whileint i = 0;while (i < sizeof(arr)/sizeof(arr[0])) {cout << "while循环取出内容: " << arr[i] << endl;i++;}// forfor (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) {cout << "for循环取出内容: " << arr[i] << endl;}// for的高级写法for (int element: arr) {cout << "高级for循环取出内容: " << element << endl;}return 0;
}

5.字符数组

以上字符数组在使用sizeof统计长度时会额外添加一个空字符,也就是6。

#include <iostream>using namespace std;int main() {"hello";    // 底层是字符数组char s[] = "hello"; //底层也是字符数组cout << s[0] << endl;cout << s[1] << endl;cout << s[2] << endl;cout << s[3] << endl;cout << s[4] << endl;cout << s[5] << endl;cout << sizeof(s) << endl;for (char i:s) {cout << i;}
}

6.多维数组

写多维数组时,无论使用上述哪种语法,必须在[]内提供长度,如int v[3][2]。

#include <iostream>using namespace std;int main() {int v1[2][2];v1[0][0] = 11;v1[0][1] = 22;v1[1][0] = 33;v1[1][1] = 44;int v2[2][2] = {1, 2, 3, 4};int v3[2][2] = {{1, 2},{3, 4}};cout << "v1数组的第二个元素内第一个元素是:" << v1[1][0] << endl;cout << "v2数组的第二个元素内第一个元素是:" << v2[1][0] << endl;cout << "v3数组的第二个元素内第一个元素是:" << v3[1][0] << endl;// 三维数组int V3[2][2][2];V3[0][0][0] = 1;V3[0][0][1] = 2;V3[0][1][0] = 3;V3[0][1][1] = 4;V3[1][0][0] = 5;V3[1][0][1] = 6;V3[1][1][0] = 7;V3[1][1][1] = 8;cout << "三维数组V3的第二个元素内的第二个元素内的第一个元素是:" << V3[1][1][0] << endl;int v4[2][2][2] = {{{1,2},{3,4}},{{5,6},{7,8}}};cout << "三维数组V4的第二个元素内的第二个元素内的第一个元素是:" << v4[1][1][0] << endl;}

7.多维数组的遍历

#include <iostream>using namespace std;int main() {// 二维数组遍历int v1[2][3] = {{1, 2, 3},{4, 5, 6}};for (int i = 0; i < sizeof(v1) / sizeof(v1[0]); i++) {// v1[0] -> {1,2, 3};// v1[1] -> {4,5,6};for (int j = 0; j < sizeof(v1[1]) / sizeof(v1[1][0]); j++) {cout << v1[i][j] << '\t';}}cout << endl;// 三维数组遍历int v2[2][3][4] = {{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}},{{13, 14, 15, 16},{17, 18, 19, 20},{21, 22, 23, 24}}};for (int i = 0; i < sizeof(v2) / sizeof(v2[0]); i++) {for (int j = 0; j < sizeof(v2[0]) / sizeof(v2[0][0]); j++) {for (int k = 0; k < sizeof(v2[0][0]) / sizeof(v2[0][0][0]); k++)cout << v2[i][j][k] << '\t';}}
}

8.多维数组的遍历练习题讲解

#include <iostream>
#include <random>
using namespace std;// 随机数生成器函数
int get_random_num(int min, int max) {random_device rd;mt19937 gen(rd());uniform_int_distribution<> distrib(min, max);return distrib(gen);
}int main() {string names[] = {"Emma", "Liam", "Olivia", "Noah", "Ava","William", "Isabella", "James", "Sophia", "Benjamin","Mia", "Elijah", "Charlotte", "Lucas", "Amelia","Mason", "Harper", "Logan", "Evelyn", "Alexander","Abigail", "Ethan", "Emily", "Jacob", "Elizabeth","Michael", "Avery", "Daniel", "Sofia", "Matthew","Ella", "Jackson", "Madison", "David", "Scarlett","Joseph", "Victoria", "Carter", "Aria", "Owen","Grace", "Wyatt", "Chloe", "John", "Camila","Jack", "Penelope", "Luke", "Luna", "Henry"};string arr[2][2][5];// 2x2x5三维数组for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {for (int k = 0; k < 5; k++) {string major = i == 0 ? "物理" : "计算机";string class_name = j == 0 ? "一班" : "二班";int set_number = k + 1;string name = names[get_random_num(0,49)];string msg = major + " " + class_name + " " + to_string(set_number) + " " + name;arr[i][j][k] = msg;}}}cout << "信息准备完成,现在输出:" << endl;for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {for (int k = 0; k < 5; k++) {cout << arr[i][j][k] << endl;}}}}

9.指针基础

修改指针的值,等于修改指针指向的地址的变量。

10.野指针和空指针

无论指针指向的变量类型是什么,指针本身被分配的内存大小为8个字节的空间(系统为64位时,在32位系统是4个字节)

11.指针运算

#include <iostream>using namespace std;int main() {int num = 10;int *  p = &num;cout << "指针变量p中记录的地址是" << p << endl;p ++;cout << "指针变量p中记录的增加1后的地址是" << p << endl;double num2 = 10.0;double * p2 = &num2;cout << "指针变量p2中记录的地址是" << p2 << endl;p2 +=4;cout << "指针变量p2中记录的增加1后的地址是" << p2 << endl;// 指针运算用于对数组进行操作int v[] = {1,2,3,4,5,6,7,8,9,10};int *vp = v;    // 指针中记录了数组0下标的地址cout << "数组对象v的第一个元素是" << *vp << endl;cout << "数组v[0]元素是" << v[0] << endl;cout << "数组的第二个元素是" << *(vp+1) << endl;cout << "数组的第二个元素是" << v[1] << endl;return 0;}

12.动态内存管理

定义:程序员手动进行内存的分配和释放等内存管理操作。

虽然之前的学习中没有手动管理内存也能正常运行代码,但是下面的例子可以说明手动内存管理的必要性,也就是避免长期不使用的变量占用内存空间:

自动/静态内存分配:无垃圾回收机制,变量、数组等对象的创建都属于静态内存分配,需要程序员手动管理内存,即手动分配,用完清理。

new运算符

用于申请并分配内存空间,并提供指向该空间的指针(内存地址)。基本语法:

new type 申请普通变量空间
new type[n] 申请数组空间

delete运算符

用于释放内存,仅可用于new运算符申请的内存区域,例如delete &num;就会报错。基本语法:

delete 指针 删除普通变量空间
delete[] 指针 删除数组空间

代码示例:

#include <iostream>using namespace std;int main() {int *p = new int;*p = 10;cout << "new申请的四字节空间内存放的是: " << *p << endl;delete p;   // 良好的代码习惯:使用new分配内存后写好delete释放int *q = new int[2];   // 申请数组空间q[0] = 10;  // 等同于 *(q+0) = 10;*(q+1) = 20;    // 等同于 q[1] = 20;cout << "数组的第一个元素是" << q[0] << endl;cout << "数组的第二个元素是" << q[1] << endl;delete[] q;return 0;}

13.数组元素的移除

C++内置并未提供对数组元素进行增删改查的操作,需要手动实现。(vector容器提供了,后续会学习)。

示例:

代码:

#include <iostream>using namespace std;int main() {// 示例数组int * pArr = new int[5] {1,  2, 3, 4, 5};// 创建一个新的数组,将需要保留的元素复制到新的数组中int *pNewAr = new int[4];// 遍历数组,将需要保留的元素复制到新的数组中,不要的要跳过for (int i = 0; i < 5; i++) {if (i == 2) {continue;}else if (i>2){pNewAr[i-1]=pArr[i];}else {pNewAr[i] = pArr[i];}}// 可选delete [] pArr;// 可选pArr = pNewAr;  // 将老数组的指针指向新数组cout << "新数组的元素是" << endl;for (int i = 0; i < 4; i++) {cout << pNewAr[i] << '\t';}return 0;}

相关文章:

黑马程序员C++2024新版笔记 第三章 数组

1.数组定义 数组是一批相同类型的元素&#xff08;element&#xff09;的集合组成的数据结构。 声明语法&#xff1a; <数据类型> <数组名> [<数组长度>] int v[6] // 声明了可以存放6个int数字的数组 数组的每个元素有编号&#xff0c;称之为下标索引…...

Golang的网络安全策略实践

Golang的网络安全策略实践 一、理解网络安全的重要性 当今的网络环境中&#xff0c;安全问题日益突出&#xff0c;各种类型的攻击如雨后春笋般涌现&#xff0c;给个人和组织的信息资产造成了严重威胁。因此&#xff0c;制定和实施有效的网络安全策略至关重要。 二、Golang在网络…...

SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)

上一章学习了CAP开发准备&#xff0c;添加Service。 SAP学习笔记 - 开发12 - CAP 之 开发准备&#xff0c;添加服务-CSDN博客 本章继续学习CAP开发 - 添加数据库支持&#xff08;Sqlite&#xff09;。 目录 1&#xff0c;数据库准备 - H2 内存数据库 - Sqlite数据库 a&…...

DRIVEGPT4: 通过大语言模型实现可解释的端到端自动驾驶

《DriveGPT4: Interpretable End-to-End Autonomous Driving via Large Language Model》 2024年10月发表&#xff0c;来自香港大学、浙江大学、华为和悉尼大学。 多模态大型语言模型&#xff08;MLLM&#xff09;已成为研究界关注的一个突出领域&#xff0c;因为它们擅长处理…...

LLM最后怎么输出值 解码语言模型:从权重到概率的奥秘

LM Head Weights&#xff08;语言模型头部权重&#xff09;&#xff1a;左侧的“LM Head Weights”表示语言模型头部的权重矩阵&#xff0c;它是模型参数的一部分。权重矩阵与输入数据进行运算。Logits&#xff08;未归一化对数概率&#xff09;&#xff1a;经过与LM Head Weig…...

Better Faster Large Language Models via Multi-token Prediction 原理

目录 模型结构&#xff1a; Memory-efficient implementation&#xff1a; 实验&#xff1a; 1. 在大规模模型上效果显著&#xff1a; 2. 在不同类型任务上的效果&#xff1a; 为什么MLP对效果有提升的几点猜测&#xff1a; 1. 并非所有token对生成质量的影响相同 2. 关…...

【NLP】34. 数据专题:如何打造高质量训练数据集

构建大语言模型的秘密武器&#xff1a;如何打造高质量训练数据集&#xff1f; 在大语言模型&#xff08;LLM&#xff09;如 GPT、BERT、T5 爆发式发展的背后&#xff0c;我们常常关注模型架构的演化&#xff0c;却忽视了一个更基础也更关键的问题&#xff1a;训练数据从哪里来…...

uniapp 微信小程序 获取openId

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“uniapp 微信小程序 获取openId”。 一、主要属性 1.uni.login 二、实例代码 1、前端代码 uni.login({provider: weixin,success: (res) > {uni.showLoading({title: 登录中...,mask: true})let code res.…...

企业标准信息公共服务平台已开放标准通编辑器访问入口

标准通 数字化标准编辑器 专业、高效、便捷 企业标准信息公共服务平台 近日&#xff0c;企业标准信息公共服务平台已开放标准通编辑器访问入口&#xff0c;可进入官网指定版块使用&#xff01; 核心功能亮点 解决企业痛点 传统标准编制&#xff0c;需反复核对格式、逐条…...

小米MUJIA智能音频眼镜来袭

智能眼镜赛道风云再起&#xff0c;小米新力作MIJIA智能音频眼镜2正式亮相&#xff0c;引发市场热议。 这款产品在设计和功能上都有显著提升&#xff0c;为用户带来更舒适便捷的佩戴体验&#xff0c;同时也标志着小米在智能眼镜领域的持续深耕。 轻薄设计&#xff0c;舒适体验 …...

Node.js 实战八:服务部署方案对比与实践

你开发好了接口&#xff0c;准备上线&#xff0c;然后开始犹豫&#xff1a; “直接 node app.js 启就行了吗&#xff1f;” “要不要用 PM2&#xff1f;听说 Docker 更稳&#xff1f;” “Serverless 是不是就不用管服务器了&#xff1f;” 部署是从“能运行”到“能长久运行”…...

地下水安全监测实施方案

一、方案目标 本方案的核心目标在于构建一个全方位、科学严谨且高效运转的地下水监测体系&#xff0c;旨在实现对地下水资源全方位的动态监测、科学化的管理和有效的保护。监测的具体目标涵盖了地下水位、流量以及水质等多个关键性指标&#xff0c;通过精准的数据采集和分析&am…...

HTTP由浅入深

概述 超文本传输协议&#xff08;HTTP, Hypertext Transfer Protocol&#xff09; 是一种用于传输超媒体文档&#xff08;例如 HTML&#xff09;的应用层协议。它最初被设计用于 Web 浏览器与 Web 服务器之间的通信&#xff0c;但也广泛应用于其他客户端与服务器的交互。 HTT…...

Conda 环境下安装 GCC 和 glibc (crypt.h) 教程

Conda 环境下安装 GCC 和 glibc (crypt.h) 教程 由于运行Low-Light Image Enhancement via Structure Modeling and Guidance原始论文代码&#xff0c;发现服务器的gcc版本太老&#xff0c;没法运行。同时缺少libxcrypt (crypt.h)&#xff0c;不得不询问gpt进行解答。发现可以…...

C++面试3——const关键字的核心概念、典型场景和易错陷阱

const关键字的核心概念、典型场景和易错陷阱 一、const本质&#xff1a;类型系统的守护者 1. 与#define的本质差异 维度#defineconst编译阶段预处理替换编译器类型检查作用域无作用域&#xff08;全局污染&#xff09;遵循块作用域调试可见性符号消失保留符号信息类型安全无类…...

超小多模态视觉语言模型MiniMind-V 训练

简述 MiniMind-V 是一个超适合初学者的项目&#xff0c;让你用普通电脑就能训一个能看图说话的 AI。训练过程就像教小孩&#xff1a;先准备好图文材料&#xff08;数据集&#xff09;&#xff0c;教它基础知识&#xff08;预训练&#xff09;&#xff0c;再教具体技能&#xf…...

深入理解仿函数(Functors):从概念到实践

文章目录 1. 什么是仿函数&#xff1f;2. 仿函数与普通函数的区别3. 标准库中的仿函数4. 仿函数的优势4.1 状态保持4.2 可定制性4.3 性能优势 5. 现代C中的仿函数5.1 Lambda表达式5.2 通用仿函数 6. 仿函数的高级应用&#xff08;使用C2020标准库及以上版本&#xff09;6.1 函数…...

第二届parloo杯的RSA_Quartic_Quandary

&#xff08;害&#xff0c;还是太菜了&#xff0c;上去秒了一道题之后就动不了了&#xff0c;今晚做个记录&#xff0c;一点点的往回拾起吧&#xff09; # from Crypto.Util.number import getPrime, bytes_to_long # import math # # FLAG b************** # # # def gene…...

团队氛围紧张,如何提升工作积极性?

当团队氛围长期处于紧张状态时&#xff0c;员工的积极性、创造力和凝聚力会显著下降。要有效提升工作积极性&#xff0c;应从建设心理安全环境、优化管理沟通方式、提升认可与激励机制、加强情感联结与归属感等方面系统改善。其中&#xff0c;建设心理安全环境是最重要的基础&a…...

vuex的基本使用

个人简介 &#x1f468;‍&#x1f4bb;‍个人主页&#xff1a; 魔术师 &#x1f4d6;学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全栈发展 &#x1f6b4;个人状态&#xff1a; 研发工程师&#xff0c;现效力于政务服务网事业 &#x1f1e8;&#x1f1f3;人生格言&…...

chrome因使用selenium无图模式导致不再加载图片问题解决

因为使用了selenium的无图模式访问chrome的本地用户数据导致正常使用chrome访问网页时图片不加载。现在页面出现验证码&#xff0c;验证码显示不了。 第一步&#xff1a;关闭所有chrome 第二步&#xff1a;找到Perferences文件 文件的目录为&#xff1a;C:\Users\用户名\AppDa…...

并发编程(5)

抛异常时会释放锁。 当线程在 synchronized 块内部抛出异常时&#xff0c;会自动释放对象锁。 public class ExceptionUnlockDemo {private static final Object lock new Object();public static void main(String[] args) {Thread t1 new Thread(() -> {synchronized …...

自己拥有一台服务器可以做哪些事情

上大学时候&#xff0c;买了自己的第一台服务器在HoRain Cloud上&#xff0c;结果没有好好利用&#xff0c;刚工作时候&#xff0c;又买了一台HoRain Cloud服务器&#xff0c;就想着好好利用。 可以搭建一些学习环境&#xff0c;比如说数据库&#xff0c;gitlab什么的 …...

Node.js聊天室开发:从零到上线的完整指南

为让你全面了解Node.js聊天室开发&#xff0c;我会先介绍开发背景与技术栈&#xff0c;再按搭建项目、实现核心功能、部署上线的流程展开&#xff0c;还会分享优化思路。 Node.js聊天室开发实战&#xff1a;从入门到上线 在即时通讯日益普及的今天&#xff0c;基于Node.js搭建…...

Unity 如何使用Timeline预览、播放特效

在使用unity制作和拟合动画时&#xff0c;我们常用到Timeline&#xff0c;前后拖动滑轨&#xff0c;预览动画正放倒放非常方便。如果我们想对特效也进行这个操作&#xff0c;可以使用下文的步骤。 至此&#xff0c;恭喜你又解锁了一个新的技巧。如果我的分享对你有帮助&#xf…...

实物工厂零件画图案例(下)

文章目录 总练习模块文章索引气动顶针轴直线轴承座法兰盘平皮带中空传动轴减速机V带轮减速机箱体 简介&#xff1a;点击此处可以下载该文章的案例模型&#xff0c;加上这篇文章总共有七篇文章是用来练习solidworks软件应用与建模思路的&#xff0c;大概有30多个案例模型&#x…...

esp32课设记录(五)整个项目开源github

我把该项目开源到了github&#xff1a;https://github.com/whyovo/ESP32_course_project 以下是readme文档&#xff1a; ESP32 课设 项目概述 这是一个基于ESP32的课设&#xff0c;实现了多种功能模式的集成&#xff0c;包括信息显示、图片展示、MQTT通信、摩尔斯电码处理以…...

力扣每日一题5-19

class Solution { public String triangleType(int[] nums) { Arrays.sort(nums); if (nums[0] nums[1] < nums[2]) return “none”; if (nums[0] nums[1] && nums[1] nums[2]) return “equilateral”; if (nums[0] nums[1] || nums[1] nums[2]) return “is…...

CI/CD 深度实践:灰度发布、监控体系与回滚机制详解

CI/CD 深度实践&#xff1a;灰度发布、监控体系与回滚机制详解 一、引言 在现代软件开发中&#xff0c;持续集成与持续交付&#xff08;CI/CD&#xff09;是加快交付速度、提升质量的关键。面对复杂的分布式系统和海量用户&#xff0c;如何安全、快速地发布新版本&#xff0c…...

【日常笔记】wps如何将值转换成东西南北等风向汉字

在WPS表格中&#xff0c;若要将数值&#xff08;如角度值&#xff09;转换成“东、南、西、北”等风向汉字&#xff0c;可通过以下步骤结合自定义函数或条件判断实现&#xff1a; 一、wps如何将值转换 方法一&#xff1a;使用LOOKUP函数&#xff08;简化公式&#xff09;&…...

RabbitMQ的简介

三个概念 生产者&#xff1a;生产消息的服务消息代理&#xff1a;消息中间件&#xff0c;如RabbitMQ消费者&#xff1a;获取使用消息的服务 消息队列到达消费者的两种形式 队列&#xff08;queue&#xff09;:点对点消息通信&#xff08;point-to-point&#xff09; 消息进入队…...

中职大数据实验室解决方案分享

第1部分概述 1.1政策背景 2021年3月&#xff0c;教育部印发《职业教育专业目录(2021年)》&#xff0c;共设置19个专业大类、97个专业类、1349个专业。新版《目录》聚焦推进数字化升级改造&#xff0c;构建未来技术技能&#xff0c;优化和加强了5G、人工智能、大数据、云计算、…...

阿里云web端直播(前端部分)

阿里云&#xff1a;Web播放器快速接入_视频点播(VOD)-阿里云帮助中心 import Aliplayer from aliyun-aliplayerimport aliyun-aliplayer/build/skins/default/aliplayer-min.css<div id"J_prismPlayer" style"width: 300px; height: 300px;" />var …...

从虚拟仿真到行业实训再到具身智能--华清远见嵌入式物联网人工智能全链路教学方案

2025年5月23-25日&#xff0c;第63届中国高等教育博览会&#xff08;高博会&#xff09;将在长春中铁东北亚国际博览中心举办。作为国内高等教育领域规模大、影响力广的综合性展会&#xff0c;高博会始终聚焦教育科技前沿&#xff0c;吸引全国高校管理者、一线教师、教育科技企…...

阿里云国际站与国内站:局势推进中的多维差异

在当今数字化浪潮席卷全球&#xff0c;云计算成为企业与开发者关键助力的局势下&#xff0c;阿里云作为行业翘楚&#xff0c;其国际站与国内站备受关注。两者虽同宗同源&#xff0c;却在诸多方面存在着显著差异&#xff0c;这些差异犹如隐藏在幕后的齿轮&#xff0c;悄然影响着…...

Docker项目部署深度解析:从基础命令到复杂项目部署

Docker项目部署深度解析&#xff1a;从基础命令到复杂项目部署 注&#xff1a;根据黑马程序员javawebAI视频课程总结&#xff1a; 视频地址 详细讲义地址 一、传统部署困境与Docker破局之道 在传统Linux部署场景中&#xff0c;新手常被三大难题困扰&#xff1a; 命令记忆负…...

reserve学习笔记(花指令)

这是闲来无事逛博客时看到的一篇相关文章&#xff0c;觉得挺有意思。 定义 首先花指令其实就是没有用的指令&#xff08;垃圾指令&#xff09;&#xff0c;它穿插在真正的代码中&#xff0c;会导致反编译时出现问题&#xff0c;从而会影响我们的静态分析 分类以及讲解 花指…...

docker运行Redis

创建目录 mkdir -p /home/jie/docker/redis/{conf,data,logs}添加权限 chmod -R 777 /home/jie/docker/redis创建配置文件 cat > /home/jie/docker/redis/conf/redis.conf << EOF # 基本配置 bind 0.0.0.0 protected-mode yes port 6379# 安全配置 密码是root require…...

Django 项目中,将所有数据表注册到 Django 后台管理系统

在 Django 项目中,将所有数据表注册到 Django 后台管理系统中需要为每个模型(Model)创建一个对应的 ModelAdmin 类,并在 admin.py 文件中注册这些模型。以下是一个详细的步骤指南: 确保你的模型已定义 首先,确保你已经在 models.py 文件中定义了所有的数据模型。例如:py…...

pyspark测试样例

from pyspark.sql import SparkSession from pyspark.sql.functions import col, lit, concat 创建 SparkSession spark SparkSession.builder.appName(“SparkSQLExample”).getOrCreate() 创建 DataFrame&#xff08;可以是从 CSV、JSON 等文件读取&#xff09; data […...

Python学习笔记--使用Django操作mysql

注意&#xff1a;本笔记基于python 3.12&#xff0c;不同版本命令会有些许差别&#xff01;&#xff01;&#xff01; Django 模型 Django 对各种数据库提供了很好的支持&#xff0c;包括&#xff1a;PostgreSQL、MySQL、SQLite、Oracle。 Django 为这些数据库提供了统一的调…...

HarmonyOS Next应用分层架构下组件封装开发实践

基于鸿蒙应用分层架构的ArkUI组件封装实践 在鸿蒙应用开发中&#xff0c;合理利用 ArkUI 组件进行封装&#xff0c;可以实现代码复用&#xff0c;提升开发效率。本文将结合鸿蒙应用分层架构的特点&#xff0c;详细探讨几个典型的 ArkUI 组件封装场景及其实现方案。 华为鸿蒙应…...

全能视频处理工具介绍说明

软件介绍 本文介绍的软件是FFmpeg小白助手&#xff0c;它是一款视频处理工具。 使用便捷性 这款FFmpeg小白助手无需安装&#xff0c;解压出来就能够直接投入使用。 主要功能概述 该工具主要具备格式转换、文件裁剪、文件压缩、文件合并这四大功能。 格式转换能力 软件支持…...

CSS实现过多的文本进行省略号显示

单行文本省略 .ellipsis {white-space: nowrap; /* 禁止换行 */overflow: hidden; /* 溢出内容隐藏 */text-overflow: ellipsis; /* 溢出部分显示为省略号 */width: 200px; /* 必须设置宽度 */ } 多行文本省略&#xff08;跨浏览器方案&#xff09…...

十三、Hive 行列转换

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月19日 专栏&#xff1a;Hive教程 在Hive中&#xff0c;数据的形态转换是数据清洗、分析和报表制作中的核心环节。行列转换尤为关键&#xff0c;它能将数据从一种组织形式变为另一种&#xff0c;以适应不同的业务洞察需求。本…...

Django之验证码功能

验证码功能 目录 1.绘制验证码 2.在登录页面里面实现验证码的功能 3.代码展示集合 这篇文章, 内容不是很多, 不过验证码, 是在网页里面比较常见的功能, 所有我们还是要掌握它&#xff01;&#xff01;&#xff01; 一、绘制验证码 绘制验证码, 我们需要用到图像, 然后在…...

代码随想录算法训练营 Day51 图论Ⅱ岛屿问题Ⅰ

图论 题目 99. 岛屿数量 使用 DFS 实现方法 判断岛屿方法 1. 遍历图&#xff0c;若遍历到了陆地 grid[i][j] 1 并且陆地没有被访问&#xff0c;在这个陆地的基础上进行 DFS 方法&#xff0c;或者是 BFS 方法 2. 对陆地进行 DFS 的时候时刻注意以访问的元素添加访问标记 //…...

Python Django 的 ORM 编程思想及使用步骤

目录 一、ORM 编程思想概述​ 二、Python 中使用 ORM 的主要优势​ 2.1 简化数据库操作​ 2.2 提高开发效率​ 2.3 减少错误​ 2.4 增强代码的可维护性​ 2.5 降低耦合性​ 三、Django 中使用 ORM 的详细步骤​ 3.1 创建应用模块​ 3.2 配置数据库信息​ 3.3 确定数…...

设计一个程序,将所有的小写字母转换为大写字母

汇编语言程序设计实验 实验内容 设计一个程序&#xff0c;将所有的小写字母转换为大写字母&#xff0c;此程序不能改变除字母a~z外的任何其它字符。 实验分析 实现的功能是将所有的小写字母转换为大写字母&#xff0c;此程序不能改变除字母a~z外的任何其它字符。可以分为以…...

Rust 学习笔记:关于错误处理的练习题

Rust 学习笔记&#xff1a;关于错误处理的练习题 Rust 学习笔记&#xff1a;关于错误处理的练习题想看到回溯&#xff0c;需要把哪个环境变量设置为 1&#xff1f;以下哪一项不是使用 panic 的好理由&#xff1f;以下哪一项最能描述为什么 File::open 返回的是 Result 而不是 O…...