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

类和对象——相关的零碎知识

前提提示:
其实C++中的类和对象,最重要的是6个默认函数,如有忘记,请移步到:类和对象。本章是对于一些细节知识的补充和拓展。

1. 隐示类型转换

在运算时,运算符左右两边的操作数的类型不同,编译器是会按照类型转换的要求,将两个操作数的类型转换为一样,然后就行运算。

1.1 内置类型的隐示类型转换

我们的内置类型,他们之间出现类型不一致的情况时,是有一套类型转换的规则的,但是还有自定义类型,内置类型和自定义类型之间是如何转化?
答:这个其实和我们的前面将的构造函数有关了,其实在类型转换的时候,我们可以很容易的发现,被类型转化的变量其实没有改变,但是确确实实有实现了运算,就是因为隐示类型转换的时候,产生了临时变量,临时变量存储着变量类型转换之后的结果。

#include<iostream>
using namespace std;int main()
{double b = 1.223;int a = b;cout << a << " " << b << endl;return 0;
}

在这里插入图片描述
程序的执行逻辑:
在这里插入图片描述
这串代码实际上就是可以反映出,在隐示类型转换时,产生了临时变量。如果不产生临时变量,那么输出的结果是:1 1,但输出的结果是1 1.223 ,就说明产生了临时变量。

1.2 自定义类型的隐示类型转换

解释:这里的自定义类型的隐示类型转换,是指内置类型想自定义类型转换,自定义类型是无法想内置类型转换的。同时不同的自定义类型之间也是不能互相类型转换的。

#include<iostream>
using namespace std;class A
{
public://构造函数A(int a):	x(a),y(a){cout << "A(int a)" << endl;};void operator=(A&a){x = a.x;y = a.y;cout << "void operator=(A&a)" << endl;}private:int x;int y;
};int main()
{int a = 6;A tmp = a;return 0;
}

上述程序中的两个变量 a和tmp的类型不相同,那他们是怎么进行隐示类型转换的呢?这个就需要和之前的初始化列表联系起来了,因为这个转换需要使用到类的6个默认函数中的连续构造函数和拷贝构造,程序的执行逻辑如下。
在这里插入图片描述
程序输出的结果:
在这里插入图片描述
为什么上面讲的是先连续构造然后拷贝构造,为什么程序在执行的时候只进行了普通的构造?这是因为编译器的优化。编译器将连续构造+拷贝构造优化为直接构造,这样更加的节省空间和时间。但是我们也发现其实这样的隐示类型转换时十分依赖于构造函数的书写的。
当将构造函数修改为如下:

class A
{
public://构造函数A(int a=0,int b=5):	x(b),y(b){cout << "A(int a)" << endl;cout << x << "  " << y << endl;};A(const A&a){x = a.x;y = a.y;cout << "A(A&a)" << endl;}private:int x;int y;
};int main()
{int a = 6;A tmp = a;return 0;
}

输出的结果:
在这里插入图片描述
当构造函数与需要类型转换的内置类型变量无关时。上面的例子就是,虽然传入了a但是没有使用a对类中的成员变量初始化,而是使用b的缺省值进行初始化,这时虽然将int类型转换为A类型但是是与a无关的。
进阶:
上面在演示程序逻辑时,a变量作为实参,去匹配构造函数的参数列表时,并没有说参数的数量,实际上a不只是能匹配一个参数的构造函数,还可以匹配多个参数的构造函数(其他第一个参数,其他的参数都需要有缺省值才行)。其实自定义的类型的隐示类型转换就是通过直接构造函数完成的,那能不能传入多个不同的类型转化为自定义类型?

class A
{
public://构造函数A(int a,int b):	x(a),y(b){cout << "A(int a)" << endl;cout << x << "  " << y << endl;};
private:int x;int y;
};
int main()
{int a = 6;int b = 7;A tmp = {a,b};return 0;
}

程序运行的结果:

结论:
1.并不是只能一个类型进行隐示类型转换,多个类型也是可以隐示类型转换的,多个类型隐示类型转换的步骤和上面一样,只是这次向构造函数的传参不是一个。
2.构造函数不仅可以构造和初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换的作用。

1.2.1 explicit关键字

上面讲了自定义类型的隐示类型转换是通过构造函数来完成隐示类型转换,当我们不允许隐示类型转换时,会在构造函数前面加上explicit这个关键字。

class A
{
public://构造函数explicit A(int a,int b):	x(a),y(b){cout << "A(int a)" << endl;cout << x << "  " << y << endl;};
private:int x;int y;
};
int main()
{int a = 6;int b = 7;A tmp = {a,b};return 0;
}

这段程序是报错的,原因就是在构造函数前面加上了explicit关键字,还进行了隐示类型转换。

2. Static关键字

2.1 Static类成员

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量。
特性:

  1. 静态成员为所有的类型共有,放在静态区。
  2. 静态成员变量只创建一次,静态成员变量必须在类的外面定义,定义是不加static关键字。
  3. 静态成员变量可以使用:类名:静态成员或者对象.静态成员访问。
  4. 静态成员变量也是类型的成员,是受到public,private和protect的保护的。

代码演示

class A
{
public://构造函数A(int a,int b):	x(a),y(b){cout << "A(int a)" << endl;cout << x << "  " << y  << endl;};
private:int x;int y;static int c;
};
int A:: c = 5;
int main()
{int a = 6;int b = 7;A tmp = {a,b};return 0;
}

2.2 Static修饰成员函数

用static修饰的成员函数,称之为静态成员函数

特性:

  • 静态成员函数被static修饰,没有this指针,只能访问静态成员变量。
  • 静态成员函数是不在成员函数存储的地方的。

代码演示:

class A
{
public://构造函数A(int a, int b): x(a),y(b){};static int get(){return c;}
private:int x;int y;//静态成员变量的声明static int c;
};
//静态成员变量的定义
int A:: c = 5;
int main()
{int a = 6;int b = 7;A tmp = {a,b};cout << tmp.get() << endl;;return 0;
}

输出的结果:
在这里插入图片描述

3. const修饰

const放在成员函数的参数括号的后面,这个const是用来修饰*this指针的,是为了不让通过this指针修改类中的成员变量。如:const *this

代码演示:

class A
{
public://构造函数A(int a, int b): x(a),y(b){cout << "x=" << x <<"  " << "y=" << y << endl;};//const修饰的成员函数void get()const{//这个是不能修改类中的成员变量的x = 4;y = 5;}
private:int x;int y;static int c;
};

代码结果:
这个代码是报错的
在这里插入图片描述

4. 友元类和友元函数

4.1 友元函数

友元函数可以直接访问类的私有成员变量,它的定义是在类的外面的普通函数,不属于任何类,但是需要在类中声明,声明时需要加friend关键字。

特性:

  • 友元函数可以访问私有和保护成员变量
  • 友元函数没有this指针,所有不能const修饰
  • 友元函数可以在类的任何位置进行声明,不受访问限定符的限制
  • 一个函数可以是多个类的友元函数
  • 友元函数和普通函数的调用是一样的

代码演示:

#include<iostream>
using namespace std;
class A
{
public://构造函数A(int a, int b): x(a),y(b){cout << "x=" << x <<"  " << "y=" << y << endl;};friend void get(int& n, int& m, const A& wa);
private:int x;int y;static int c;
};
int A:: c = 5;void get(int& n,int& m,const A& wa)
{n = wa.x;m = wa.y;}
int main()
{int a = 6;int b = 7;A tmp = {a,b};int n, m;get(n, m, tmp);cout << "n=" << n << "  "<<"m=" << m << endl;return 0;
}

代码运行结果:
在这里插入图片描述
**结论:**当我们在类的外部定义的普通函数需要使用类中的成员变量时,就可以在该类中声明友元函数,这个该普通函数就可以访问类中的成员变量。

4.2 友元类

有一个类是另一个类的友元类,该类型中的成员函数都另一个类的友元函数,该类的成员函数都可以访问另一个类的非公有成员变量。

特性:

  • 友元关系是单向的,比如:A是B的友元类,A是可以访问B中的成员变量,但是B不是A的友元,B是不可以访问A中的成员变量的。
  • 友元关系是不能传递的,A是B的友元,B是C的友元,这并不意味这A是C的友元。
  • 友元关系是不能继承的。

代码演示:

#include<iostream>
using namespace std;class A
{
public://构造函数A(int a, int b): x(a),y(b){cout << "x=" << x <<"  " << "y=" << y << endl;};friend class B;
private:int x;int y;static int c;
};
class B
{
public:int get(const A& a){return a.x;}};
int A:: c = 5;
int main()
{int a = 6;int b = 7;A tmp = {a,b};B tm;int n = tm.get(tmp);cout << n << endl;return 0;
}

代码运行的结果:
在这里插入图片描述

5. 内部类

概念:一个类定义在另一个类的内部,就称该类是另一个类的内部类。

特性:

  • 内部类和外部类是平等的,内部类虽然在外部类中定义,但是内部类是不属于外部类的,sizeof(外部类)是不会算上内部类的。
  • 内部类是外部类的友元类,他们之间遵循友元关系的定义和用法,但是外部类不是内部类的友元。
  • 内部类可以定义在外部类的任何位置。
  • 内部类是可以直接访问外部类中的static成员变量的,不需要加上对象名/类名。
  • 虽然说内部类和外部类是平等的,但是内部类需要定义是需要通过外部类的。

代码演示:

#include<iostream>
using namespace std;class A
{
public://构造函数A(int a, int b): x(a),y(b){cout << "x=" << x <<"  " << "y=" << y << "  " << "c=" << c << endl;};class B{public:int get(A& a){return c;}};
private:int x;int y;static int c;
};int A:: c = 5;int main()
{int a = 6;int b = 7;A tmp = {a,b};A::B p;cout << p.get(tmp) << endl;return 0;
}

代码的运行结果:
在这里插入图片描述

6. 匿名对象

特性

  • 匿名对象是不需要取名字的
  • 匿名对象的生命周期只有它定义的这一行

代码演示:

#include<iostream>
using namespace std;
class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};
int main()
{A();return 0;
}

程序运行的结果:
在这里插入图片描述

7. 拷贝时编译器的一些优化

  1. 连续构造+拷贝构造直接优化为直接构造
  2. 连续拷贝构造+拷贝构造直接优化为拷贝构造
  3. 连续拷贝+赋值重载是没有办法进行优化的。

相关文章:

类和对象——相关的零碎知识

前提提示&#xff1a; 其实C中的类和对象&#xff0c;最重要的是6个默认函数&#xff0c;如有忘记&#xff0c;请移步到&#xff1a;类和对象。本章是对于一些细节知识的补充和拓展。 1. 隐示类型转换 在运算时&#xff0c;运算符左右两边的操作数的类型不同&#xff0c;编译器…...

【hadoop大数据集群 1】

hadoop大数据集群 1 文章目录 hadoop大数据集群 1一、环境配置1.安装虚拟机2.换源3.安装工具4.安装JDK5.安装Hadoop 一、环境配置 折腾了一下午/(ㄒoㄒ)/~~ 1.安装虚拟机 参考视频&#xff1a;https://www.bilibili.com/video/BV18y4y1G7JA?p17&vd_sourcee15e83ac6b22a…...

TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO

本教程将完成一个全面的UDP运行流程与GPSDO测试&#xff0c;从下载项目的源代码开始&#xff0c;通过编译过程&#xff0c;最终将项目部署到目标板卡上运行演示。此外&#xff0c;我们还介绍如何修改板卡的IP地址&#xff0c;以便更好地适应您的网络环境或项目需求。 首先从Gi…...

array.some() ==> 查找数组list中,是否有包含与当前currKey的值不一样的misId

需求&#xff1a; const list [ {misId: e, name: 小白}, {misId: e, name: 小白白}, {misId: r, name: 小王}, {misId: r, name: 小小王} ] let currKey r 查找数组list中&#xff0c;是否有包含与当前currKey的值不一样的misId 解决&#xff1a; 要查找数组lis…...

最简单的typora+gitee+picgo配置图床

typoragiteepicgo图床 你是否因为管理图片而感到头大&#xff1f;是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了&#xff0c;它们可以帮你轻松打造自己的图床&#xff0c;让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧&#xff01; Typora …...

【黄啊码】GPT的相关名词解释

GPT是一种基于互联网的、可用数据来训练的、文本生成的深度学习模型 GPT的核心技术是‌变换器&#xff08;Transformer&#xff09;&#xff0c;这是一种神经网络结构&#xff0c;可以有效地处理序列数据&#xff0c;比如文本、语音、图像等。GPT使用了大量的预训练数据&#…...

git stash 命令详解

git stash 描述 git stash 命令用于将当前工作目录中的未提交更改&#xff08;包括暂存区和工作区的更改&#xff09;保存到一个栈中&#xff0c;并恢复工作目录到干净的 HEAD 状态。这样您可以在不提交当前更改的情况下&#xff0c;切换到其他分支或进行其他操作。后续可以通…...

txt格式单词导入有道词典生词本 (java代码方式)

txt格式单词导入有道词典生词本 (java代码方式) 首先要求txt文档里单词的格式&#xff0c;大概需要像这种&#xff1a; 每行是一个单词&#xff0c;格式为&#xff1a;英文单词空格词性单词意思。 注意 导出单词本的名字就是你 txt 文件的名字 我这里是 公共英语三级 单词本 …...

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

目录 0 专栏介绍1 数值优化&#xff1a;共轭梯度法2 基于共轭梯度法的轨迹优化2.1 障碍约束函数2.2 曲率约束函数2.3 平滑约束函数 3 算法仿真3.1 ROS C实现3.2 Python实现 0 专栏介绍 &#x1f525;课程设计、毕业设计、创新竞赛、学术研究必备&#xff01;本专栏涉及更高阶的…...

深入浅出WebRTC—ALR

ALR&#xff08;Application Limited Region&#xff09;指的是网络传输过程中&#xff0c;由于应用层的限制&#xff08;而非网络拥塞&#xff09;导致带宽未被充分利用的情况。在这种情况下&#xff0c;应用层可能因为处理能力、手动配置或其他因素无法充分利用可用带宽&…...

BSV区块链技术现实应用原理解析

BSV区块链以其卓越的可扩展性、坚如磐石的安全性、极低的交易成本等特性&#xff0c;成为满足企业当下需求并为企业未来成功奠基铺路的理想技术。 BSV协会近期发布了一个题为《驾驭数字化转型&#xff1a;在自动化世界中建立信任——区块链在数据保护和交易优化中的角色》的报…...

七大基于比较的排序算法

目录 一、基于比较的排序算法概述 1. 插入排序&#xff08;Insertion Sort&#xff09; 2. 选择排序&#xff08;Selection Sort&#xff09; 3. 冒泡排序&#xff08;Bubble Sort&#xff09; 4. 归并排序&#xff08;Merge Sort&#xff09; 5. 快速排序&#xff08;Qu…...

web前端 React 框架面试200题(四)

面试题 97. React 两种路由模式的区别&#xff1f;hash和history&#xff1f; 参考回答&#xff1a; 1: hash路由 hash模式是通过改变锚点(#)来更新页面URL&#xff0c;并不会触发页面重新加载&#xff0c;我们可以通过window.onhashchange监听到hash的改变&#xff0c;从而处…...

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…...

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中&#xff0c;可能会遇到异步时间差的问题&#xff0c;导致状态没有及时更新到state&#xff0c;引起传参错误。 PS&#xff1a;由于useState是一个普通的函数&#xff0c; 定义为() > void;因此此处不能用await/async替代setTimeout&#xff0c;只能用在返…...

京准:GPS北斗卫星授时信号安全隔离防护装置

京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 1、主要特点 ★信号加固功能&#xff1a; GPS/BDS单系统信号拒止情况下&#xff08;包含受到GPS L1欺骗干扰、GPS L1压制干扰、BDS B1欺骗干扰、BDS B1压制干扰&…...

解决方案架构师系列 - AWS - Pinpoint

AWS Pinpoint介绍 Amazon Pinpoint 为营销人员和开发人员提供了一款可自定义的工具&#xff0c;助力他们大规模地开展跨渠道、行业和活动的客户通信。 Amazon Pinpoint是一个全面的客户参与平台&#xff0c;‌旨在帮助营销人员和开发人员大规模地开展跨渠道、‌行业和活动的客…...

MF173:将多个工作表转换成PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一&#xff0c;Docker&#xff08;公司&#xff09;在生态系统中创建了一些很棒的工具&#xff0c;但不是全部。 容器方面有…...

PRISM-Python 中的规则一个简单的 Python 规则感应系统

欢迎来到雲闪世界.PRISM 是一种现有算法&#xff08;尽管我确实创建了一个 Python 实现&#xff09;&#xff0c;PRISM 相对简单&#xff0c;但在机器学习中&#xff0c;有时最复杂的解决方案效果最好&#xff0c;有时最简单的解决方案效果最好。然而&#xff0c;当我们希望建立…...

DB-GPT:LLM应用的集大成者

整体架构 架构解读 可以看到&#xff0c;DB-GPT把架构抽象为7层&#xff0c;自下而上分别为&#xff1a; 运行环境&#xff1a;支持本地/云端&单机/分布式等部署方式。顺便一提&#xff0c;RAY是蚂蚁深度参与的一个开源项目&#xff0c;所以对RAY功能的支持应该非常完善。…...

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

汉明权重&#xff08;Hamming Weight&#xff09;&#xff08;统计数据中1的个数&#xff09;VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中&#xff0c;两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…...

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度&#xff08;通常是 float32&#xff0…...

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…...

【目标检测】Anaconda+PyTorch(GPU)+PyCharm(Yolo5)配置

前言 本文主要介绍在windows系统上的Anaconda、PyTorch、PyCharm、Yolov5关键步骤安装&#xff0c;为使用yolo所需的环境配置完善。同时也算是记录下我的配置流程&#xff0c;为以后用到的时候能笔记查阅。 Anaconda 软件安装 Anaconda官网&#xff1a;https://www.anaconda…...

Django实战项目之进销存数据分析报表——第二天:项目创建和 PyCharm 配置

在上一篇博客中&#xff0c;我们讨论了如何搭建一个全栈 Web 应用的开发环境&#xff0c;包括 Python 环境的创建、Django 和 MySQL 的安装以及前端技术栈的选择。现在&#xff0c;让我们继续深入&#xff0c;学习如何在 PyCharm 中创建一个新的 Django 项目并进行配置。 一…...

静态路由实验

1.实验拓扑图 二、实验要求 1.R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能再对其进行任何配置&#xff1b; 2.R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合理分配&#xff1b; 3.R1、R2、R4&…...

VSCode STM32嵌入式开发插件记录

要卸载之前搭建的VSCode嵌入式开发环境了&#xff0c;记录一下用的插件。 1.Cortex-Debug https://github.com/Marus/cortex-debug 2.Embedded IDE https://github.com/github0null/eide 3.Keil uVision Assistant https://github.com/jacksonjim/keil-assistant/ 4.RTO…...

linux cpu 占用超100% 分析。

感谢: https://www.cnblogs.com/wolfstark/p/16450131.html 总结&#xff1a; 查看进程中各个线程占用百分比 top -H -p <pid> 某线程100%了 说明 任务处理不过来 会卡 但是永远不可能超100% 系统监视器里面看到的是 所有线程占用的 总和会超100%。 所以最好的情况是&…...

自然学习法和科学学习法

一、自然学习法 自然学习法&#xff1a;什么事自然学习法&#xff0c;特意让kimi来回答了一下。所谓的自然学习法说的俗一点就是野路子学习方法。这种学习方法的特点是“慢”“没有系统性”&#xff0c;学完之后感觉都会了&#xff0c;但是又感觉什么都不会。 二、科学学习法 …...

力扣第二十四题——两两交换链表中的节点

内容介绍 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff…...

C语言柔性数组详解

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 4.柔性数组的优势 1.柔性数组 C99 中&#xff0c;结构体中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做『柔性数组』成员。 例如&#xff1a; struct S {char c;int n;int arr[];//柔性数组 }; struct …...

自动驾驶---视觉Transformer的应用

1 背景 在过去的几年&#xff0c;随着自动驾驶技术的不断发展&#xff0c;神经网络逐渐进入人们的视野。Transformer的应用也越来越广泛&#xff0c;逐步走向自动驾驶技术的前沿。笔者也在博客《人工智能---什么是Transformer?》中大概介绍了Transformer的一些内容&#xff1a…...

预训练语言模型实践笔记

Roberta output_hidden_statesTrue和last_hidden_states和pooler_output 在使用像BERT或RoBERTa这样的transformer模型时&#xff0c;output_hidden_states和last_hidden_state是两个不同的概念。 output_hidden_states: 这是一个布尔值&#xff0c;决定了模型是否应该返回所…...

Perl 哈希

Perl 哈希 Perl 哈希是一种强大的数据结构&#xff0c;用于存储键值对集合。它是 Perl 语言的核心特性之一&#xff0c;广泛应用于各种编程任务中。本文将详细介绍 Perl 哈希的概念、用法和最佳实践。 什么是 Perl 哈希&#xff1f; Perl 哈希是一种关联数组&#xff0c;其中…...

Linux之Mysql索引和优化

一、MySQL 索引 索引作为一种数据结构,其用途是用于提升数据的检索效率。 1、索引分类 - 普通索引(INDEX):索引列值可重复 - 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL - 主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表只能有一个主键索引 - 全…...

springboot业务逻辑写在controller层吗

Spring Boot中的业务逻辑不应该直接写在Controller层。‌ 在Spring Boot项目中&#xff0c;‌通常将业务逻辑分为几个层次&#xff0c;‌包括Controller层、‌Service层、‌Mapper层和Entity层。‌ 1.其中&#xff0c;‌Controller层主要负责处理HTTP请求&#xff0c;‌通过注…...

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序&#xff0c;使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…...

Go基础编程 - 12 -流程控制

流程控制 1. 条件语句1.1. if...else 语句1.2. switch 语句1.3. select 语句1.3.1. select 语句的通信表达式1.3.2. select 的基特性1.3.3. select 的实现原理1.3.4. 经典用法1.3.4.1 超时控制1.3.4.2 多任务并发控制1.3.4.3 监听多通道消息1.3.4.4 default 实现非堵塞读写 2. …...

汽车信息安全--TLS,OpenSSL

目录 TLS相关知识 加密技术 对称加密 非对称加密 数字签名和CA 信任链 根身份证和自签名 双方TLS认证 加密和解密的性能 TLS相关知识 加密技术 TLS依赖两种加密技术 1. 对称加密&#xff08;symmetric encryption&#xff09; 2. 非对称加密&#xff08;asymmetri…...

深入探索 SQL 中的 LIKE 右模糊匹配(LIKE RIGHT)与左模糊匹配(LIKE LEFT)

引言 在数据库操作中&#xff0c;LIKE 子句是执行模糊搜索的强大工具&#xff0c;用于匹配列中的数据与指定的模式。本文将详细介绍 LIKE 子句中的两种常用模式&#xff1a;右模糊匹配&#xff08;LIKE RIGHT&#xff09;和左模糊匹配&#xff08;LIKE LEFT&#xff09;&#…...

mybatis 多数据源 TDataSource required a single bean, but 2 were found

情况说明&#xff1a; 项目中本来就有一个数据源了&#xff0c;运行的好好的后来又合并了另一个项目&#xff0c;另一个项目也配置了数据源。 于是出现了如下错误&#xff1a; mybatis 多数据源 TDataSource required a single bean, but 2 were found 解决方法&#xff1a…...

Dubbo SPI 之路由器

1. 背景介绍 Dubbo 是一个高性能的 Java RPC 框架&#xff0c;由阿里巴巴开源并广泛应用于分布式系统中。在 Dubbo 的架构中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;是一个关键组件&#xff0c;允许在运行时动态加载不同的服务实现。SPI 机制提供了…...

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 一、前言二、基本介绍2.1全过程软件基本介绍2.1.1 Pytorch2.1.2 Anaconda2.1.3 Pycharm2.1.4 显卡GPU及其相关概念2.1.5 CUDA和cuDNN 2.2 各部分相互间的联系和安装逻辑关系 三、Anaconda安装3.1安装Anaconda3.2配置环境变量3.3检验是否安装成功 四、Pycharm安装五、…...

月影护眼大路灯怎么样?书客|月影|霍尼韦尔超硬核实力性能测评pk!

月影护眼大路灯怎么样&#xff1f;选到专业优质的护眼大路灯是真的可以使我们在用眼时减少疲劳感&#xff0c;达到护眼效果&#xff0c;但如果不慎买到劣质的护眼灯产品&#xff0c;不仅达不到健康的环境光&#xff0c;还越用越觉得眼睛疲劳感加重&#xff0c;在水深的护眼灯市…...

邮件安全篇:邮件传输加密(SSL/TLS or STATRTTLS)

1. 前言 使用过邮件客户端的同学一定见过下面这张图。这是客户端账号配置界面&#xff0c;里面有SSL、STARTTLS选项。刚接触邮件客户端的同学肯定会有这些疑问&#xff1a;什么是SSL&#xff1f;什么是STARTTLS&#xff1f;两者有什么区别&#xff1f;具体该如何选择呢&#x…...

【系统架构设计 每日一问】三 Redis支持事务么,Redis的事务如何保证

实际上&#xff0c;关于Redis事务的说法“Redis 的事务只能保证隔离性和一致性&#xff08;I 和 C&#xff09;&#xff0c;无法保证原子性和持久性&#xff08;A 和 D&#xff09;”并不完全准确。下面我将分别解释Redis事务的四个特性&#xff1a;原子性&#xff08;Atomicit…...

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.3应用架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

DasViewer打开Revit输出的fbx格式的模型,为啥一团黑?

答:这个应该是没有读取到贴图文件。贴图文件和obj文件需要在同级目录下面。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。 免…...

【05】LLaMA-Factory微调大模型——初尝微调模型

上文【04】LLaMA-Factory微调大模型——数据准备介绍了如何准备指令监督微调数据&#xff0c;为后续的微调模型提供高质量、格式规范的数据支撑。本文将正式进入模型微调阶段&#xff0c;构建法律垂直应用大模型。 一、硬件依赖 LLaMA-Factory框架对硬件和软件的依赖可见以下…...