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

C++入门(下)

 本文为个人学习笔记,如有错误欢迎批评指正,如有侵权,请联系删除。

今日名言:

好运只是个副产品,只有当你不带任何私心杂念,单纯的去做事情时,他才会降临。

上一篇文章我们讲了C++入门的一部分内容,接下来我们继续了解,也希望你的生活有好运降临,永远向阳生长!

函数重载

函数重载的概念

在文言文中,我们经常会遇到这样一个概念:一词多义。是的,在这个让人头疼的一词多义的压迫下,我们在做题时必须通过上下文来判断一个词的真实含义。而在C++中,我们把这种现象叫作重载。

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些函数的形参列表不同,常用来处理不同的问题。其中形参列表不同指的是形参的类型不同,形参的个数不同,形参的顺序不同。 

#include<iostream>
using namespace std;
//参数类型不同
int Add(int left, int right) {cout << "int Add(int left, int right)" << endl;return left + right;
}
double Add(double left, double right) {cout << "double Add(double left, double right)" << endl;return left + right;
}
int main() {Add(1, 2);Add(1.2,2.1 );return 0;
}

 

#include<iostream>
using namespace std;
//参数个数不同
void fun() {cout << "fun()" << endl;}
void fun(int a) {cout << "fun(int a)" << endl;
}
int main() {fun();fun(1);return 0;
}

 

 

还需要注意的是,返回类型不同的函数不构成重载。

很多人就会有问题啦,为什么C++中支持函数重载,而C语言不支持呢?(这里讲的不是很深,如果有兴趣的话,大家可以自行了解)

重载的原因

这是因为C++中有函数名修饰规则,只要参数不同修饰出来的名字就不一样,就可以支持重载。但是C语言就不同,在C语言中同名函数无法区分,就没办法支持重载了。

引用

引用不是定义了一个变量,而是给一个已经存在的变量取了一个别名,也不会为引用变量开辟新的内存空间,它和所引用的变量共用一块空间。通俗点讲,引用就像一个外号,你在家里的外号和在学校里的外号可能不一样,但你还是你,不会因为外号不同又多出了一个你,你就是独一无二的!

需要注意的是引用的类型必须和引用实体是同一种类型的。

引用特性

1.引用在定义时必须初始化,必须指出所引用的变量是谁。

2.一个变量可以有多个引用,就像我们上面列举的情况,你可以有很多个别名

3.引用一旦引用一个实体,再不能再引用其它实体

 

常引用

首先看一下下面这段代码,你能判断出哪些是正确的吗?

void fun() {const int a = 10;int& ra = a;const int& ra = a;int b = 0;const int& rb = b;double c = 1.0;int& rc = c;const int& rc = c;
}

看过之后,我们来逐个拆解吧!

 

 

 

 所以我们可以得出结论,取别名时,权限可以缩小但是不可以放大,而权限的缩小的放大只存在于引用和指针中。

下面和我们非常熟悉的一个函数见面吧

 

下面这段代码也可以实现相同的效果,我们来了解了解

#include<iostream>
using namespace std;
void swap(int&a, int& b) {int temp = a;a = b;b = temp;
}
int main() {int a = 1;int b = 2;swap(a, b);printf("%d %d\n", a, b);return 0;
}

需要注意的是,这里引用和取地址完全不是一回事,引用是同一块空间。 

做返回值

#include<iostream>
using namespace std;
int func1(int a, int b) {return a + b;
}
int& func2(int a, int b) {static int n = 0;n=a + b;return n;
}
int main() {const int& ret1 = func1(1, 3);int &ret2 = func2(3, 4);cout << "ret1=" << ret1<< endl<<"ret2="<<ret2<<endl;return 0;
}

 

是不是觉得引用超级方便,那么,现在我要来和你说说他的缺点啦 

上面的函数我们是不是加了 static,那么不加static会怎么样呢?

这里需要注意的几点是

   1.函数运行时,系统需要给该函数开辟独立的栈空间用来保存该函数的形参

局部变量以及一些寄存器信息

   2.函数运行结束后,该函数对应的栈空间就被系统回收了

   3.空间被回收指该块栈空间暂时不能被使用,但是内存还是在的,就比如说,上课要和学校申请教室,用完后教室要归还,但是并不代表归还了教室就不存在了。

 

所以从这里可以得出,如果返回变量n是一个局部变量,引用返回是不安全的。也就是说 如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。

为什么加了static就不会出现随机值呢

总结一下:
什么时候可以用引用返回呢?

1.当返回变量是静态变量时

2.当返回变量是全局变量时

传值、传引用的效率比较

以值作为参数或返回值类型时,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时拷贝,因此用值作为参数或者返回值类型 ,效率是十分低下的,尤其是当参数或者返回值类型非常大时,效率就更加低下了。

#include <time.h>
#include<iostream>
using namespace std;
struct A { int a[10000]; };
void TestFunc1(A a)
{}
void TestFunc2(A& a) {}
void TestRefAndValue()
{A a;// 以值作为函数参数size_t begin1 = clock();for (size_t i = 0; i < 10000; ++i)TestFunc1(a);size_t end1 = clock();// 以引用作为函数参数size_t begin2 = clock();for (size_t i = 0; i < 10000; ++i)TestFunc2(a);size_t end2 = clock();// 分别计算两个函数运行结束后的时间cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;
}
int main() {TestRefAndValue();return 0;
}

值和引用的作为返回值类型的性能比较

#include <time.h>
#include<iostream>
using namespace std;
struct A { int a[10000]; };
A a;
// 值返回
A TestFunc1() { return a; }
// 引用返回
A& TestFunc2() { return a; }
void TestReturnByRefOrValue()
{// 以值作为函数的返回值类型size_t begin1 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc1();size_t end1 = clock();// 以引用作为函数的返回值类型size_t begin2 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc2();size_t end2 = clock();// 计算两个函数运算完成之后的时间cout << "TestFunc1 time:" << end1 - begin1 << endl;cout << "TestFunc2 time:" << end2 - begin2 << endl;
}
int main() {TestReturnByRefOrValue();return 0;
}

从上述代码我们可以看出传值和引用在作为传参以及返回值类型上效率相差很大

指针和引用的区别

在语法概念上,引用就是一个别名,没有独立空间,和其实体共用一块空间

#include<iostream>
using namespace std;
int main()
{int a = 10;int& ra = a;cout << "&a = " << &a << endl;cout << "&ra = " << &ra << endl;return 0;
}

在底层实现上实际是有空间的,因为引用是按照指针的方式实现的

#include<iostream>
using namespace std;
int main()
{int a = 10;int& ra = a;ra = 20;int* pa = &a;*pa = 20;return 0;
}

指针和引用的不同点

1.引用在概念上定义一个变量的别名,指针储存一个变量的地址

2.引用在定义上不许初始化,指针没有要求

3.引用在初始化时引用一个实体后,就不能在引用其他实体,而指针可以在任何时候 指向一个同一类型的实体

4.没有NULL引用但是有NULL指针

5.在sizeof中的含义不同,引用的的结果是引用类型的大小,但是指针始终是地址空间所占字节个数

6.引用自加即引用的实体增加1,指针自加即指针即指针向后偏移一个类型的大小

7.有多级指针,没有多级引用

8.访问实体的方式不同,指针需要显示解引用,引用编译器自己处理

9.引用比指针使用起来相对安全

auto关键字

在早期的C++中,auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量

C++11中,auto被赋予了新的含义:auto不在是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得

#include<iostream>
using namespace std;
int TestAuto()
{return 10;
}
int main()
{int a = 10;auto b = a;auto c = 'a';auto d = TestAuto();cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;//auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化return 0;

需要注意的是:

使用auto定义变量时必须对其进行初始化,在编译阶段需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的占位符,编译器在编译期会将auto替换为实际变量类型。

auto使用细则

1.auto与指针和引用结合起来使用

使用auto声明指针类型时,auto和auto * 没有区别,但是使用auto声明引用类型时则必须加&

int main()
{int x = 10;auto a = &x;auto* b = &x;auto& c = x;cout << typeid(a).name() << endl;cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;*a = 20;*b = 30;c = 40;return 0;
}

2.在同一行定义多个变量

 当在同一行声明多个变量时,这些变量必须是同一个类型,否则编译器会报错,因为编译器只对第一个类型进行推导,然后用推导出来的类型定义其他变量

void TestAuto()
{auto a = 1, b = 2; auto c = 3, d = 4.0;  // 该行代码会编译失败,因为c和d的初始化表达式类型不同
}

auto不能推导的场景

1,auto不能作为函数的参数

// 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导
void TestAuto(auto a)
{}

2.auto不能直接用来声明数组 

void TestAuto()
{int a[] = {1,2,3};auto b[] = {4,5,6};
}

基于范围的for循环

与C语言中不同的是,C++中的for循环更加方便

for循环后的括号由冒号(:)分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围,与普通循环类似,可以用continue结束本次循环,也可以用break来跳出这个循环。

#include<iostream>
using namespace std;
void TestFor()
{int array[] = { 1, 2, 3, 4, 5 };for (auto& e : array)e *= 2;for (auto e : array)cout << e << " ";}
int main() {TestFor();return 0;
}

范围for使用的条件

1.for循环迭代的范围必须是确定的

对于数组而言,就是数组中的第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法

2.迭代的对象要进行++和==的操作。

相关文章:

C++入门(下)

本文为个人学习笔记&#xff0c;如有错误欢迎批评指正&#xff0c;如有侵权&#xff0c;请联系删除。 今日名言&#xff1a; 好运只是个副产品&#xff0c;只有当你不带任何私心杂念&#xff0c;单纯的去做事情时&#xff0c;他才会降临。 上一篇文章我们讲了C入门的一部分内容…...

ubuntu22.04 命令行修改静态ip

传统interfaces文件配置&#xff08;适用于旧版&#xff09;即便我们已经在桌面上配置了固定ip 这里也可以修改 ‌编辑配置文件‌ 修改/etc/network/interfaces&#xff08;需安装net-tools&#xff09;&#xff1a; # interfaces(5) file used by ifup(8) and ifdown(8) # In…...

Ubuntu18.04配置C++环境和Qt环境

Ubuntu18.04配置C环境和Qt环境 1、前言3.2 安装其他库3.3 查看有没有安装成功3.4测试C环境 4、配置Qt环境4.1 安装相关的库4.2 测试 5、总结 1、前言 记录一下Ubuntu18.04配置C环境和Qt环境的过程&#xff0c;方便自己日后回顾&#xff0c;也可以给有需要的人提供帮助。 # 2…...

深度学习--自然语言处理统计语言与神经语言模型

文章目录 前言一、语言转换方法1、数据预处理2、特征提取3、模型输入4、模型推理 二、语言模型1、统计语言模型1) 机器学习词向量转换2&#xff09;解释&#xff1a;3) 统计语言模型存在的问题 2、神经语言模型1&#xff09;one—hot编码2&#xff09;解决维度灾难3&#xff09…...

linux ptrace 图文详解(七) gdb、strace跟踪系统调用

目录 一、gdb/strace 跟踪程序系统调用 二、实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 相关链接&#xff1a; linux ptrace 图…...

Feign接口调用失败降级机制

是的&#xff0c;通过 FallbackFactory 实现的降级逻辑在 Feign 接口调用失败时会被触发&#xff0c;但需要注意以下关键点以确保降级生效&#xff1a; 一、代码有效性分析 降级逻辑是否生效&#xff1f; • 是的&#xff0c;当 Feign 调用 BaseServiceFeign 接口的 updateMoni…...

系统架构-安全架构设计

概述 对于信息系统来说&#xff0c;威胁有&#xff1a;物理环境&#xff08;最基础&#xff09;、通信链路、网络系统、操作系统、应用系统、管理系统 物理安全&#xff1a;系统所用设备的威胁&#xff0c;如自然灾害、电源故障通信链路安全&#xff1a;在传输线路上安装窃听…...

python实现简单的UI交互

文章目录 1. 基础打印 覆盖同一行2. 多行动画效果3. 彩色文本&#xff08;Windows/macOS/Linux&#xff09;4. 输入交互5. 异步输入与非阻塞显示6. 高级控制台 UI 库 可以通过控制台打印实现简单的「伪UI交互」&#xff0c;尤其适合展示进度、动态文本或轻量级状态反馈。以下是…...

高频面试题:如何保证数据库和es数据一致性

背景 在实际项目开发中&#xff0c;我们经常将MySQL作为业务数据库&#xff0c;ES作为查询数据库&#xff0c;用来实现读写分离&#xff0c;缓解MySQL数据库的查询压力&#xff0c;应对海量数据的复杂查询&#xff0c;这其中有一个很重要的问题&#xff0c;就是如何实现MySQL数…...

CS001-7-hbao

HBAO https://zhuanlan.zhihu.com/p/348467142 HBAO(屏幕空间的环境光遮蔽) - 知乎 (zhihu.com) [摸着原神学图形]HBAO实现与优化 - 知乎 (zhihu.com) https://zhuanlan.zhihu.com/p/367793439 Global Illumination_Horizon-Based Ambient Occlusion(HBAO)-CSDN博客 这个解…...

使用npm install或cnpm install报错解决

1.从git上拉了一个新vue项目npm install 报错如下 解决办法&#xff1a; 清除npm缓存 npm cache clean -force 2.阿里云镜像证书过期&#xff0c;报错如下 解决办法&#xff1a; 更换阿里云镜像地址 #原来的地址是&#xff1a;https://registry.npm.taobao.org/ cnpm confi…...

Electron Forge【实战】阿里百炼大模型 —— AI 聊天

获取 apiKey 登录并开通阿里云百炼 https://bailian.console.aliyun.com/#/home 新人有半年免费的使用福利&#xff0c;在模型详情中&#xff0c;可以查看剩余的免费额度 https://bailian.console.aliyun.com/?tabmodel#/model-market/detail/qwen-turbo 在下方链接中创建 ap…...

Vue3实现高仿word自定义颜色选择器组件(支持 v-model)

目录 Vue3实现高仿word自定义颜色选择器组件&#xff08;支持 v-model&#xff09;需求分析大致效果需求功能实现所需技术从UI哪里拿到主题颜色标准色进行子主组件的v-model实现子组件布局实现子组件样式实现子组件全部代码&#xff1a;父组件调用方式完结 Vue3实现高仿word自定…...

.NET中,const和readonly区别

在.NET中&#xff0c;const和readonly都用于定义不可变的值&#xff0c;但它们在行为和使用场景上有显著区别。以下是两者的详细对比&#xff1a; 初始化时机 • const ◦ 编译时常量&#xff0c;必须在声明时赋值。 ◦ 值在编译时确定&#xff0c;并被直接嵌入到IL代码中&…...

力扣-206.反转链表

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 class Solution { public:ListNode* reverseList(ListNode* head) {//头插法ListNode *p head;headnullptr;ListNode *temp nullptr;while (p! nullptr){tempp;pp->next;tem…...

五一去荣昌吃卤鹅?基于Java和天地图的寻找荣昌卤鹅店实践

目录 前言 1、卤鹅哥与甲亢哥的爆火事件 2、荣昌卤鹅产业的空间分布 3、使用Java 和天地图进行产业挖掘 一、地名检索简介 1、地名检索功能 2、地名检索API介绍 二、荣昌卤鹅检索实践 1、数据获取流程 2、天地图API请求构建 3、参数构建及调用 4、结果生成及本地保存…...

力扣-160.相交链表

题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返…...

CSS Position 属性完全指南

CSS 中的 position 属性是布局的基础&#xff0c;它决定了元素在页面中的定位方式。理解各种定位值的行为和适用场景对于构建灵活、响应式的布局至关重要。 position 属性的五个主要值 1. static&#xff08;默认值&#xff09; 元素遵循正常的文档流不受 top, right, botto…...

热度上升,25西电机电工程学院(考研录取情况)

1、机电工程学院各个方向 2、机电工程学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、力学25年相较于24年下降35分&#xff0c;为255分 2、机械工程25年相较于24年下降15分&#xff0c;为320分 3、仪器科学与技术25年相较于24年上升35分&#xff0c;为…...

R7周:糖尿病预测模型优化探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 一、数据预处理 1.设置GPU import torch.nn.functional as F import torch.nn as nn import torch, torchvisiondevice torch.device("cuda"…...

使用Go语言实现轻量级消息队列

文章目录 一、引言1.1 消息队列的重要性1.2 为什么选择Go语言1.3 本文实现的轻量级消息队列特点 二、核心设计2.1 消息队列的基本概念2.1.1 消息类型定义2.1.2 消息结构设计 2.2 架构设计2.2.1 基于Go channel的实现方案2.2.2 单例模式的应用2.2.3 并发安全设计 2.3 消息发布与…...

QT窗口相关控件及其属性

widget&#xff0c;PushButton&#xff0c;lineEdit等都是基于QWidget延展出来的 并不是完整的窗口&#xff0c;而是作为窗口的一部分 真正的窗口是QMainWindow 菜单栏 Qt中的菜单栏是通过QMenuBar这个类来实现的&#xff0c;一个主窗口最多只有一个菜单栏&#xff0c;位于主…...

OceanBase 复合索引指南

一、 什么是复合索引&#xff0c;与单列索引的区别是什么 1.1 什么是复合索引 复合索引是指在数据库表中由两个或更多列共同构成的索引&#xff0c;也称多列索引。其独特之处在于&#xff0c;它并非仅针对单一列建立索引&#xff0c;而是对多个列的组合进行索引&#xff0c;从…...

蛋白质大语言模型ESM介绍

ESM(Evolutionary Scale Modeling)是 Meta AI Research 团队开发的一系列用于蛋白质的预训练语言模型。这些模型在蛋白质结构预测、功能预测和蛋白质设计等领域展现出了强大的能力。以下是对 ESM 的详细介绍: 核心特点 大规模预训练:基于大规模蛋白质序列数据进行无监督学…...

回归测试:保障软件质量的重要防线

在软件开发的生命周期中&#xff0c;变更无处不在——新功能添加、缺陷修复、性能优化或代码重构。但每一次变更都可能像投入平静水面的石子&#xff0c;引起意想不到的涟漪效应。这就是回归测试(Regression Testing)存在的意义&#xff0c;它是软件质量保障体系中不可或缺的一…...

51单片机中断

80C51 单片机的中断源及其默认优先级&#xff08;从高到低&#xff09;&#xff1a; 优先级中断源中断号1️⃣外部中断 0 &#xff08;INT0&#xff09;IE0&#xff0c;编号 02️⃣定时器 0 &#xff08;T0&#xff09;TF0&#xff0c;编号 13️⃣外部中断 1 &#xff08;INT…...

Ollama 常见命令速览:本地大模型管理指南

Ollama 常见命令速览&#xff1a;本地大模型管理指南 一、什么是 Ollama&#xff1f; Ollama 是一个轻量级工具&#xff0c;允许用户在本地快速部署和运行大型语言模型&#xff08;LLM&#xff09;&#xff0c;如 Llama、DeepSeek、CodeLlama 等。其命令行工具设计简洁&#…...

LSPatch官方版:无Root Xposed框架,自由定制手机体验

在Android设备的自定义和优化过程中&#xff0c;Xposed框架一直是一个强大的工具。然而&#xff0c;许多用户因为Root操作的复杂性和风险而望而却步。今天&#xff0c;我们要介绍的 LSPatch官方版&#xff0c;就是这样一款基于LSPosed核心的无Root Xposed框架解决方案。它不仅提…...

星火燎原:大数据时代的Spark技术革命在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。

星火燎原&#xff1a;大数据时代的Spark技术革命 在数字化浪潮席卷全球的今天&#xff0c;海量数据如同奔涌不息的洪流&#xff0c;传统的数据处理方式已难以满足实时、高效的需求。Apache Spark作为大数据领域的璀璨明星&#xff0c;凭借其卓越的性能和强大的功能&#xff0c…...

Spark-Streaming(三)

一. kafka和flume的整合 任务需求一:利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台 1. 在flume/conf/目录下添加flume-kafka.conf文件 配置文件如下 2. 启动flume和kafka消费者 3. 传入数据 查看fl…...

深入了解C# List集合及两种常见排序算法:插入排序与堆排序

在C#中&#xff0c;List<T> 是一种常用的集合类型&#xff0c;它提供了对动态数组的灵活操作&#xff0c;能够方便地添加、删除和访问元素。而排序算法是计算机科学中非常重要的部分&#xff0c;插入排序和堆排序是两种经典的排序方法。本文将详细讲解C#中 List<T>…...

【软件设计师】模拟题三

以下是另外10道不重复的软考-软件设计师模拟试题&#xff0c;答案及解析统一放在最后&#xff1a; ​​试题部分​​ ​​在软件工程中&#xff0c;敏捷开发&#xff08;Agile Development&#xff09;的核心实践之一是&#xff1f;​​ A. 严格的文档编写 B. 基于里程碑的计划…...

什么是CN2专线?全面解析中国电信的高性能网络服务

一、CN2专线的定义 CN2专线&#xff08;China Telecom Next Carrier Network&#xff09;是中国电信推出的新一代高性能网络专线服务&#xff0c;旨在满足企业对高速、稳定、安全网络连接的深度需求。它基于优化的网络架构设计&#xff0c;通过分布式路由、多路径传输等技术&a…...

5.4 AgentLite:轻量级库,便于构建任务导向的LLM Agent系统

AgentLite 是一个轻量级、模块化设计的开源框架&#xff0c;专注于构建任务导向的基于大语言模型&#xff08;LLM&#xff09;的智能代理&#xff08;Agent&#xff09;系统。与其他功能丰富但较为复杂的框架&#xff08;如 LangChain 或 AutoGen&#xff09;相比&#xff0c;A…...

shell脚本3

for语句&#xff08;一种循环控制结构&#xff0c;用于遍历列表或者范围内的元素&#xff0c;并对每个元素执行一段代码语法格式 for 变量名 in 取值列表 do 命令序列 done 入门示例&#xff1a; for i in 1 2 3 4 5 6 # for i in {1..6} 或 for i in …...

Kafka Tool(Offset Explorer)国内下载: Kafka可视化连接工具

Kafka Tool&#xff08;现称为 Offset Explorer&#xff09;是一款专为 Apache Kafka 集群设计的可视化连接客户端工具&#xff0c;主要用于消息的可视化浏览、消费者偏移量的管理、主题的管理以及数据的实时监控。作为一款商用软件&#xff0c;它以其直观的用户界面和强大的功…...

【JAVA】高并发场景下,如何保证数据的一致性和系统的稳定性?

数据一致性 数据库事务&#xff1a;使用数据库的事务机制&#xff0c;确保一组数据的相关操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而保证数据的一致性。例如&#xff0c;在转账操作中&#xff0c;涉及到转出账户扣款和转入账户加款两个操作&#xff0c;这两个…...

【Linux篇】理解信号:如何通过信号让程序听从操作系统的指令

信号的悄然到来&#xff1a;当操作系统发出‘警告’时 一.信号1.1 基本概念1.2 产生信号方式1.2.1 键盘产生信号1.2.2 系统调用产生信号1.2.2.1 kill1.2.2.2 raise1.2.2.3 abort 1.2.3 调用系统命令1.2.4 异常1.2.5 软件条件产生信号1.2.5.1 pause1.2.5.2 alarm 二. 最后 信号的…...

统计服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息

文章目录 一、背景二、说明三、页面四、代码前端MonitorServiceProcessPage.vueMonitorServiceProcessTable.vueMonitorServiceProcessTableButton.vueaddMonitorTask.vueproductOperation.vueshowMonitorTask.vueMonitorSystemLog.vueMonitorTask.vueMonitorTaskLog.vueRealti…...

WSL 安装过程整理

WSL 安装过程整理 一、WSL 安装教程二、安装后小技巧1、安装位置2、常用命令 三、在 WSL2 中安装 perf&#xff1a; 一、WSL 安装教程 史上最全的WSL安装教程 WSL2 最新最全帮助小白一步步详细安装教程 在WSL2 root 和普通用户的切换 轻松搬迁&#xff01;教你如何将WSL从C盘迁…...

纯CSS吃豆人(JS仅控制进度)

一、效果展示 二、源码 html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Pac-Man SVG Demo…...

redis 数据类型新手练习系列——Hash类型

redis 数据类型 Redis 主要支持以下几种数据类型&#xff1a; &#xff08;1&#xff09;string&#xff08;字符串&#xff09;: 基本的数据存储单元&#xff0c;可以存储字符串、整数或者浮点数。 &#xff08;2&#xff09;hash&#xff08;哈希&#xff09;:一个键值对集…...

如何使用@KafkaListener实现从nacos中动态获取监听的topic

1、简介 对于经常需要变更kafka主题的场景&#xff0c;为了实现动态监听topic的功能&#xff0c;可以使用以下方式。 2、使用步骤 2.1、添加依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactI…...

区块链如何达成共识:PoW/PoS/DPoS的原理、争议与适用场景全解

引言 区块链技术的核心在于​​去中心化网络中的信任机制​​&#xff0c;而共识算法是实现这一目标的关键。不同的共识机制在效率、安全性、去中心化程度等方面各有取舍。本文将深入解析三种主流共识机制——​​工作量证明&#xff08;PoW&#xff09;​​、​​权益证明&am…...

Oracle for Linux安装和配置(11)——Oracle安装和配置

11.3. Oracle安装和配置 Linux上Oracle的安装及配置与Windows上差不多,只是安装软件的准备等有所不同,下面只对不同于Windows的部分进行较为详细的讲解,其他类似部分不再赘述。另外,无论选择使用虚机还是物理机,Oracle安装、配置和使用等方面几乎都是完全一样的。 11.3.…...

http协议详解附带c/c++服务器和客户端源码

http详解 代码部分HTTP请求结构示例HTTP客户端实现&#xff08;使用Linux系统调用&#xff09;简易HTTP服务器实现 深入解析HTTP协议&#xff1a;从基础到实践1. HTTP协议核心概念1.1 协议本质解读1.2 通信模型详解 2. 抓包分析实战2.1 Fiddler工具妙用2.2 报文结构拆解 3. 请求…...

JavaScript性能优化实战(5):数据结构与算法性能优化

JavaScript中常用数据结构性能对比 数据结构的选择对JavaScript应用的性能有着决定性的影响。不同的数据结构在不同操作上各有优劣,选择合适的数据结构能显著提升应用性能。本节将对JavaScript中常用的数据结构进行全面的性能对比分析。 基本数据结构时间复杂度概览 首先,…...

uniapp小程序开发入门01-快速搭建一个空白的项目并预览它

uniapp小程序开发入门01-快速搭建一个空白的项目并预览它&#xff01;由于近期有市场需求和计划&#xff0c;构建一套自己的小程序&#xff0c;所以再次带领大家系统的过一遍&#xff0c;如何使用uniapp程序快速构建一套完整的项目。今天是第一小节&#xff0c;带领大家快速构建…...

UR5 UR5e机器人URDF文件

URDF全称为Unified Robot Description Format,中文可以翻译为“统一机器人描述格式”。与计算机文件中的.txt文本格式、.jpg图像格式等类似,URDF是一种基于XML规范、用于描述机器人结构的格式。根据该格式的设计者所言,设计这一格式的目的在于提供一种尽可能通用(as genera…...

ubuntu20.04安装x11vnc远程桌面

x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录ubuntu桌面。 安装x11vnc sudo apt-get install x11vnc 设置VNC登录密码 sudo x11vnc -storepasswd /etc/x11vnc.pwd 设置x11vnc在开机时自动启动 新建如下文件: sudo vi /lib/systemd/sys…...