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

C++ 复习总结记录四

C++ 复习总结记录四

主要内容

1、构造函数其它要点

2、static 成员

3、友元

4、内部类

5、匿名对象

6、拷贝对象时编译器的优化

一 构造函数其它要点

1.1 构造函数体赋值

创建对象时,编译器调用构造函数,给对象中各个成员变量一个合适初始值

class Date
{public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;
};

上述过程不能称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值。因为初始化只能初始化一次,而构造函数体内可以多次赋值

1.2 初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式

class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day;
};

【注意】

1、每个成员变量在初始化列表中只能出现一次 (初始化只能初始化一次)

2、类中包含以下成员,必须放在初始化列表位置进行初始化

  • 引用成员变量
  • const 成员变量
  • 自定义类型成员 ( 且该类没有默认构造函数时 )
class A
{
public:A(int a):_a(a){}
private:int _a;
};class B
{
public:B(int a, int ref):_aobj(a),_ref(ref),_n(10){}private:A _aobj;  // 没有默认构造函数int& _ref;  // 引用const int _n; // const 
};

3、尽量使用初始化列表初始化,对于自定义类型成员变量,一定会使用默认构造初始化

class Time
{
public:Time(int hour = 0):_hour(hour){cout << "Time()" << endl;}private:int _hour;
};class Date
{
public:Date(int day){}private:int _day;Time _t;
};int main()
{Date d(1);
}

4、成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

class A
{
public:A(int a):_a1(a),_a2(_a1){}void Print() {cout<<_a1<<" "<<_a2<<endl;}private:int _a2;int _a1;
};
int main() {A aa(1);aa.Print(); //输出1  随机值
}

1.3 explicit 关键字

构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换的作用

class Date
{public:// 1. 单参构造函数, 没有使用 explicit 修饰,具有类型转换作用// explicit 修饰构造函数, 禁止类型转换 -- explicit去掉之后,代码可以通过编译explicit Date(int year):_year(year){}// 2. 虽然有多个参数, 但是创建对象时后两个参数可以不传递, 没有使用explicit 修饰,具有类型转换作用// explicit 修饰构造函数,禁止类型转换/*explicit Date(int year, int month = 1, int day = 1): _year(year), _month(month), _day(day){}*/Date& operator=(const Date& d){if (this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}private:int _year;int _month;int _day;
};
void Test()
{Date d1(2022);// 用一个整形变量给日期类型对象赋值// 实际编译器背后会用 2023 构造一个无名对象,最后用无名对象给 d1 对象进行赋值d1 = 2023;// 将 1 蔽掉, 2 放开时则编译失败,因为 explicit 修饰构造函数,禁止了单参构造函数类型转换的作用
}

用 explicit 修饰构造函数,禁止单参或缺省单参的构造函数隐式转换

二 static 成员

2.1 概念

声明为 static 的类成员称为类的静态成员,用 static 修饰的成员变量,称之为静态成员变量;用 static 修饰的成员函数,称为静态成员函数。静态成员变量必须在类外进行初始化

实现一个类,计算程序当前有多少个类对象

class A
{
public:A() { ++_scount; }A(const A& t) { ++_scount; }~A() { --_scount; }static int GetACount() { return _scount; }private:static int _scount;
};int A::_scount = 0;
void TestA()
{cout << A::GetACount() << endl;A a1, a2;A a3(a1);cout << A::GetACount() << endl;
}

2.2 特性

1、静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

2、静态成员变量必须在类外定义,定义时不添加 static 关键字,类中只是声明

3、类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问

4、静态成员函数没有隐藏的 this 指针,不能访问任何非静态成员

5、静态成员也是类的成员,受 public、protected、private 访问限定符的限制

练习

1、静态成员函数可以调用非静态成员函数吗 【不可以】

2、非静态成员函数可以调用类的静态成员函数吗 【可以】

三 友元

友元提供了一种突破封装的方式,有时提供了便利。但友元会增加耦合度,破坏了封装,所以不宜多用。友元分为:友元函数友元类

3.1 友元函数

不适用友元去重载 operator<<,会发现无法将 operator<< 重载为成员函数

因为 cout 的输出流对象和隐含的 this 指针在抢占第一个参数的位置。this 指针默认是第一个参数(也就是左操作数)。但实际使用中 cout 需要是第一个形参对象,才能正常使用。所以要将 operator<< 重载成全局函数,但又会导致类外没办法访问成员,此时就需要友元来解决(operator>> 同理)

class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}// d1 << cout; -> d1.operator<<(&d1, cout); 不符合常规调用// 成员函数第一个参数一定是隐藏 this, 所以 d1 必须放在 << 左侧ostream& operator<<(ostream& _cout){_cout << _year << "-" << _month << "-" << _day << endl;return _cout;}private:int _year;int _month;int _day;
};

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

class Date
{friend ostream& operator<<(ostream& _cout, const Date& d);friend istream& operator>>(istream& _cin, Date& d);public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day;
};ostream& operator<<(ostream& _cout, const Date& d)
{_cout << d._year << "-" << d._month << "-" << d._day;return _cout; 
}istream& operator>>(istream& _cin, Date& d)
{_cin >> d._year;_cin >> d._month;_cin >> d._day;return _cin;
}int main()
{Date d;cin >> d;cout << d << endl;return 0;
}

注意

  • 友元函数可访问类的私有和保护成员,但不是类的成员函数
  • 友元函数不能用 const 修饰
  • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  • 一个函数可以是多个类的友元函数
  • 友元函数的调用与普通函数的调用原理相同

3.2 友元类

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员

  1. 友元关系是单向的,不具有交换性 ( 比如上述 Time 类和 Date 类,在 Time 类中声明 Date 类为其友元类,那么可以在 Date 类中直接访问 Time 类的私有成员变量,但在 Time 类中访问 Date 类中私有的成员变量则不行 )
  2. 友元关系不能传递( 如果 C 是 B 的友元, B 是 A 的友元,则不能说明 C 是 A 的友元 )
  3. 友元关系不能继承
class Time
{friend class Date;   // 声明日期类为时间类的友元类, 则在日期类中就直接访问 Time 类中的私有成员变量
public:Time(int hour = 0, int minute = 0, int second = 0): _hour(hour), _minute(minute), _second(second){}private:int _hour;int _minute;int _second;
};class Date
{
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour = hour;_t._minute = minute;_t._second = second;}private:int _year;int _month;int _day;Time _t;
};

四 内部类

概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员,外部类对内部类没有任何优越的访问权限。

注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员,但是外部类不是内部类的友元

特性

1、内部类可以定义在外部类的 public、protected、private 都可

2、注意内部类可以直接访问外部类中的 static 成员,不需要外部类的对象/类名

3、sizeof(外部类) = 外部类,和内部类没有任何关系

class A
{
private:static int k;int h;public:class B // B 天生就是 A 的友元{public:void foo(const A& a){cout << k << endl; // 静态成员直接访问cout << a.h << endl; // 非静态成员使用对象访问}};
};int A::k = 1;
int main()
{A::B b;b.foo(A());return 0;
}

五 匿名对象

class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}private:int _a;
};class Solution {public:int Sum_Solution(int n) {//...return n;}
};int main()
{A aa1;//A aa1(); 不能这样定义对象, 因为编译器无法识别是一个函数声明, 还是对象定义. 但可以这么定义匿名对象, 匿名对象的特点是不用取名字, 但它的生命周期只有这一行, 可以看到下一行它就会自动调用析构函数A();// 匿名对象在仅调用一次成员函数的场景下很好用, 例如Solution().Sum_Solution(10);return 0;
}

六 拷贝对象时编译器的优化

在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下非常有用

class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}A(const A& aa):_a(aa._a){cout << "A(const A& aa)" << endl;}A& operator=(const A& aa){cout << "A& operator=(const A& aa)" << endl;if (this != &aa){_a = aa._a;}return *this;}~A(){cout << "~A()" << endl;}private:int _a;
};void f1(A aa)
{}A f2()
{A aa;return aa;
}int main()
{// 传值传参, 打印结果/*A(int a)A(const A& aa)~A()*/~A()A aa1;f1(aa1);cout << endl;// 传值返回, 打印结果/*A(int a)~A()查看反汇编这里并没有内联一个表达式中, 连续构造 + 拷贝构造 -> 优化为直接构造*/f2();cout << endl;// 隐式类型, 连续构造 + 拷贝构造 -> 优化为直接构造f1(1);// 一个表达式中, 连续构造 + 拷贝构造 -> 优化为一个构造f1(A(2));cout << endl;// 一个表达式中, 连续拷贝构造 + 拷贝构造 -> 优化为一个构造A aa2 = f2();cout << endl;// 一个表达式中, 连续拷贝构造 + 赋值重载 -> 优化一个拷贝构造aa1 = f2();cout << endl;return 0;
}

七 练习

1、求 1 + 2 + 3 + … + n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 ( A ? B : C ) OJ链接

使用类静态成员 + 构造函数

注 clang 编译器支持动态数组的语法

class Test
{
public:Test(){num += 1;sum += num;}static int getSum(){return sum;}private:static int num;static int sum;
};
int Test::num = 0;
int Test::sum = 0;class Solution {
public:int Sum_Solution(int n) {Test test[n];return Test::getSum();}
};

递归需要终止条件,不能用 if 终止,那么只能用逻辑运算符了

class Solution {
public:int Sum_Solution(int n) {int sum = n;sum && (sum += Sum_Solution(n - 1));return sum;}
};

等差数列求和公式:n * (n+1) / 2 = (n^2 + n) / 2 ,不能用除法,因此可以右移一位表示除以 2

class Solution {
public:int Sum_Solution(int n) {return (int)(pow(n, 2) + n) >> 1;}
};

2、计算日期到天数的转换 OJ 链接

#include <iostream>
using namespace std;// 获取某年某月的天数
int GetMonthDay(int year, int month) {static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int day = days[month];if (month == 2&& ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {day += 1;}return day;
}int getDayNum(int year, int month, int day) {int res = day;--month;while (month > 0) {res += GetMonthDay(year, month--);}return res;
}int main() {int a, b, c;while (cin >> a >> b >> c) {}cout << getDayNum(a, b, c) << endl;
}

3、日期差值 OJ 链接

#include <iostream>
using namespace std;class Date {public:Date(int num) {//拆分_day = num % 100, num  /= 100;_month = num % 100, num  /= 100;_year = num;}int GetMonthDay(int year, int month) {static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int res = days[month];if (month == 2 && ((year % 4 == 0  && year % 100 != 0)|| year % 400 == 0)) {++res;}return res;}bool operator<(const Date& d) const {if (_year < d._year) return true;else if (_year > d._year) return false;else {if (_month < d._month) return true;else if (_month > d._month) return false;else {if (_day < d._day) return true;else if (_day > d._day) return false;}}return false;}bool operator!=(const Date& d) const {if (_year == d._year &&  _month == d._month && _day == d._day)  return false;else return true;}Date& operator+=(int day) {_day += day;while (_day > GetMonthDay(_year, _month)) {_day -= GetMonthDay(_year, _month);_month++;if (_month == 13) {_year++;_month = 1;}}return *this;}Date& operator++() {*this += 1;return *this;}int operator-(const Date& d) const {Date max = *this;Date min = d;int status = 1;if (max < min) {max = d;min = *this;status = -1;}int day = 0;while (min < max) {++min, ++day;}return day + 1;}private:int _year = 0;int _month = 0;int _day = 0;
};int main() {int a, b;while (cin >> a >> b) {}cout << Date(a) - Date(b)  << endl;
}

4、打印日期 OJ 链接

#include <cstdio>
#include <iostream>
using namespace std;int getMonthDay(int year, int month)
{static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int day = days[month];if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){day++;}return day;
}void printDate(int year, int day)
{int month = 1;while (day > getMonthDay(year, month)){day -= getMonthDay(year, month);++month;}printf("%04d-%02d-%02d\n", year, month, day);
}int main() {int a, b;while (cin >> a >> b) {printDate(a, b);}
}

5、累加天数 OJ 链接

#include <cstdio>
#include <iostream>
using namespace std;int getMonthDay(int year, int month)
{static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int res = days[month];if(month == 2 && ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0)){res++;}return res;
}void printDate(int year, int month, int day, int cnt)
{while (cnt) {++day;if (day > getMonthDay(year, month)) {day = 1;++month;if (month > 12) {month = 1;++year;}}--cnt;}printf("%04d-%02d-%02d\n", year, month, day);
}int main() {int m, a, b, c, d;cin >> m;for (int i = 0 ; i < m; ++i){cin >> a >> b >> c >> d;printDate(a, b, c, d);}
}

C 中的 bool 类型

_Bool C99 标准引入的新关键字,sizeof(_Bool) 该类型占一个字节,且给这个类型变量赋任何非 0 整数值,其值都是 1

/*
* ISO C Standard: 7.16 Boolean type and values
*/#ifndef _STDBOOL_H#define _STDBOOL_H#ifndef __cplusplus#define bool _Bool#define true 1#define false 0#else /* __cplusplus *//* Supporting in C++ is a GCC extension. */#define _Bool bool#define bool bool#define false false#define true true#endif /* __cplusplus *//* Signal that all the definitions are present. */#define __bool_true_false_are_defined 1#endif /* stdbool.h */

C 变长数组不能初始化(clang 编译器支持)

#include<stdio.h>
int main(){int n = 5;int arr[n];return 0;
}

编译一般是会报错的,但是这其实并不算一种语法错误。C99 标准前是不支持变长数组的,[] 里只能是常量。C99增加了对变长数组的支持,但普遍的编译器并不支持 C99(例如 VS)

相关文章:

C++ 复习总结记录四

C 复习总结记录四 主要内容 1、构造函数其它要点 2、static 成员 3、友元 4、内部类 5、匿名对象 6、拷贝对象时编译器的优化 一 构造函数其它要点 1.1 构造函数体赋值 创建对象时&#xff0c;编译器调用构造函数&#xff0c;给对象中各个成员变量一个合适初始值 cl…...

Oracle Dataguard 需要配置的参数详解

Oracle Dataguard 需要配置的参数详解 目录 Oracle Dataguard 需要配置的参数详解一、数据库名&#xff1a;DB_NAME二、数据库唯一名&#xff1a;DB_UNIQUE_NAME三、LOG_ARCHIVE_CONFIG四、LOG_ARCHIVE_DEST_1五、LOG_ARCHIVE_DEST_2六、LOG_ARCHIVE_DEST_3七、LOG_ARCHIVE_DES…...

Java 内部类与异常类

目录 1.Java 内部类 2.Java 匿名类 1. 匿名类继承一个父类 2. 匿名类实现一个接口 3.Java 异常类 4.Java 异常的分类 1. Throwable类 2. Error类 3. Exception类 5.Java 常见的异常 1. NullPointerException(空指针异常) 2. ClassCastException(类转换异常) 3. In…...

Matlab仿真径向受压圆盘光弹图像

Matlab仿真径向受压圆盘光弹图像-十步相移法 主要参数 % 定义圆盘参数 R 15; % 圆盘半径&#xff0c;单位&#xff1a;mm h 5; % 圆盘厚度&#xff0c;单位&#xff1a;mm P 300; % 径向受压载荷大小&#xff0c;单位&#xff…...

补偿电阻对ota零极点的影响

本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点&#xff0c;受影响的主要是镜像极点。 这里我们可以先单看电流镜部分&#xff0c;这个补偿电阻的作用在于将极点推向原来的两倍&#xff0c;从而达到增加带宽的目的[1]。 …...

C++单例模式跨DLL调用问题梳理

问题案例&#xff1a; 假设有这样一个单例模式的代码 //test.h header class Test { public:static Test &instance() {static Test ins;return ins;}void foo(); };void testFoo();//test.cpp source #include "test.h"void Test::foo() {printf("%p\n&q…...

Linux高并发服务器开发 第十天(man手册 系统调用 文件打开关闭 文件创建权限)

目录 1.文件IO 1.1man 手册 1.2系统调用 1.3操作函数 1.3.1打开文件 1.3.2关闭文件 1.4文件创建权限 1.文件IO 1.1man 手册 man man 可以查看。man手册共 9 卷。 可执行程序、shell命令。系统调用函数。&#xff08;内核提供的函数&#xff09;库函数第 5 卷。查看特殊…...

用CRD定义未来:解锁机器学习平台的无限可能

Kubernetes CustomResourceDefinition&#xff08;CRD&#xff09;详解 一、CRD 概述 CRD&#xff08;CustomResourceDefinition&#xff0c;自定义资源定义&#xff09;是 Kubernetes 提供的一种机制&#xff0c;用于用户自定义新的资源类型。CRD 扩展了 Kubernetes API&…...

A second-price auction

第二价格密封拍卖&#xff08;A second - price auction&#xff09;是一种常见的拍卖形式&#xff0c;以下是一个用收益矩阵&#xff08;Payoff Matrix&#xff09;来说明第二价格密封拍卖的例子&#xff1a; 假设有三个竞拍者&#xff1a;A、B、C&#xff0c;他们对一件古董…...

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言&#xff0c; 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…...

力扣面试题 - 08.07.无重复字符串的排列组合 C语言解法 回溯递归dfs深度优先

题目&#xff1a; 无重复字符串的排列组合。编写一种方法&#xff0c;计算某字符串的所有排列组合&#xff0c;字符串每个字符均不相同。 示例 1&#xff1a; 输入&#xff1a;S "qwe"输出&#xff1a;["qwe", "qew", "wqe", "…...

数值分析速成复习笔记

请确保你有10hour的有效学习时间&#xff0c;保你拿90 证明部分 编程部分...

1.07 标准IO

1.思维导图 2.先编写以下结构体 struct Student { char name[20]&#xff1b; double math&#xff1b; double chinese&#xff1b; double english&#xff1b; double physical&#xff1b; double chemical&#xff1b; double…...

单片机实现模式转换

[任务] 要求通过单片机实现以下功能&#xff1a; 1.单片机有三种工作模式(定义全局变量MM表示模式&#xff0c;MM1&#xff0c;2&#xff0c;3表示三种不同的模式) LED控制模式 风扇控制模式 蜂鸣器控制模式 2.可以在某一个模式下通过拓展板KEY1按键控制设备 (按…...

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是&#xff1a;建立一套监控平台&#xff0c;比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台&#xff0c;就可以接入系统异常的监控和报警&#xff0c;可以设置当系统出现OOM异常&…...

GolangWeb开发- net/http模块

文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...

算法:线性查找

线性查找算法是一种简单的查找算法,用于在一个数组或列表中查找一个特定的元素。它从数组的第一个元素开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组。线性查找的时间复杂度为O(n),其中n是数组中的元素数量。 实现原理 从列表的第一个元素开始,逐个检查每个…...

基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)

已完成功能&#xff1a; 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制&#xff0c;可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…...

『SQLite』常见函数的使用

摘要&#xff1a;主要讲解SQLite中的常见函数&#xff0c;有聚合函数、数字函数、字符串函数、日期函数、类型转换函数等。 主要函数 聚合函数&#xff1a;count()、sum()、avg()、min()、max()字符串函数&#xff1a;length()、upper()、lower()、substr()、trim()日期和时间…...

win下搭建elk并集成springboot

一、ELK 是什么&#xff1f; ELK 实际上是三个工具的集合&#xff0c;Elasticsearch Logstash Kibana&#xff0c;这三个工具组合形成了一套实用、易用的监控架构&#xff0c;很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…...

ABAQUS柱状晶模型基于泰森多边形建模

建立柱状晶几何模型进行有限元分析有助于深入理解材料的微观结构与宏观性能之间的关系&#xff0c;为材料设计、制造工艺优化及失效预测提供了强有力的工具。本案例介绍采用AutoCAD基于泰森多边形算法生成柱状晶三维几何部件&#xff0c;并导入Abaqus有限元软件内建立包含晶粒及…...

MySQL InnoDB常用锁总结(行锁、间隙锁、临键锁、表锁)

在高并发数据库系统中&#xff0c;锁机制是保障数据一致性和事务隔离性的重要手段。MySQL 的 InnoDB 存储引擎提供了多种锁类型&#xff0c;包括行锁、间隙锁、临键锁和表锁。本文将详细介绍这些锁的原理、使用场景及其注意事项&#xff0c;并结合案例进行说明。 1. 表锁 概念…...

Flink系统知识讲解之:如何识别反压的源头

Flink系统知识之&#xff1a;如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念&#xff0c;强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理&#xff0c;这里有…...

UE5行为树浅析

Tree 什么是树&#xff1f; 树是由节点或顶点和边组成的数据结构&#xff0c;没有任何循环。没有节点的树称为空树或空树。 非空的树由根节点和可能形成层次结构的多层附加节点组成。 树是一种数据结构树由点和有向边组成树是连通的&#xff0c;可达的树有执行顺序树没有环 …...

大模型测试-数飞机个数

时间是2025年1月7日&#xff0c;测试下各大网页端大模型的多模态识图能力。 测试题目 图片 问题 标记一下图里的飞机&#xff0c;并数一下飞机的个数 测试结果 千问qwen 在这张图片中&#xff0c;我可以看到总共12架飞机。以下是它们的位置标记&#xff1a;左上角跑道上有…...

Ubuntu挂载Windows 磁盘,双系统

首先我们需要在终端输入这个命令&#xff0c;来查看磁盘分配情况 lsblk -f 找到需要挂载的磁盘&#xff0c;检查其类型&#xff08; 我的/dev/nvme2n1p1类型是ntfs&#xff0c;名字叫3500winData&#xff09; 然后新建一个挂载磁盘的目录&#xff0c;我的是/media/zeqi/3500wi…...

快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)

1 关于Let’s Encrypt与Cerbot DNS验证 Let’s Encrypt 是一个提供 免费证书 的 认证机构。 Cerbot 是 Let’s Encrypt 提供的一个工具&#xff0c;用于自动化生成、验证和续订证书。 DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证&#xff0c;DNS …...

【项目】修改远程仓库地址、报错jdk

一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录&#xff0c;执行以下命令来修改远程仓库的 URL&#xff0c;将其指向你自己的新仓库&#xff1a; cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>二、运行报错 多数jdk版本问题 三、 知识图…...

.NET体系架构

引言 .NET是由微软开发的一个广泛应用的开发平台&#xff0c;旨在帮助开发者构建各种类型的应用程序&#xff0c;包括桌面应用、Web应用、移动应用和云服务。最初&#xff0c;.NET平台的构建主要集中在Windows环境上&#xff0c;但随着.NET Core和随后.NET 5及以上版本的推出&…...

MTK平台-- 无线AP隔离功能

前言: 无线AP上大都有一个选项:启用该功能后,连接到同一AP的无线终端之间不能互相通信,但该功能并不限制无线终端和有线终端之间的通信。 Hostapd参数ap_isolate,用于控制AP隔离,但hostapd本身并不实现这一功能,只是将该参数通过nl80211传递给mac80211,由mac80211来实…...

初学stm32 --- 电源监控

目录 STM32 电源监控介绍 上电/掉电复位POR/PDR&#xff08;F1&#xff09; 可编程电压检测器(PVD)&#xff08;F1&#xff09; PVD相关寄存器介绍&#xff08;F1&#xff09; 电源控制寄存器 PWR_CR 电源控制/状态寄存器 PWR_CSR PVD相关HAL库驱动介绍 PVD的使用步骤 …...

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式&#xff0c;由于这里要求横向滚动&#xff0c;所以需要使用上节介绍的 scroll-view 功能&#xff0c;并使用 scroll-x 属性支持横向滚动&#xff0c;推荐商品区域中的每一个商品是一个单独的 view&#xff0c;每个view 中需要写三个组…...

深入了解 SSL/TLS 协议及其工作原理

深入了解 SSL/TLS 协议及其工作原理 一. 什么是 SSL/TLS?二. SSL/TLS 握手过程三. SSL/TLS 数据加密与传输四. 总结 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都在歌唱 一. 什么是 SSL/TLS? 安全套接层&am…...

解决RuntimeError: No CUDA GPUs are available问题

今天运行之前可以正常运行的项目时&#xff0c;发现了以下问题&#xff1a; 接下来记录解决过程&#xff1a; 参考&#xff1a;os.environ[“CUDA_VISIBLE_DEVICES”]"2"的问题 因为代码中设置了选择了具体的GPU的型号&#xff0c;但是有可能没有这个GPU&#xff0…...

了解RabbitMQ中的Exchange:深入解析与实践应用

在分布式系统设计中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;而RabbitMQ作为开源消息代理软件的佼佼者&#xff0c;以其高性能、高可用性和丰富的功能特性&#xff0c;成为了众多开发者的首选。在RabbitMQ的核心组件中&…...

33.3K 的Freqtrade:开启加密货币自动化交易之旅

“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手&#xff0c;能够连接到众多主流加密货币交易所&#xff0c;如 Binance、Bitmart、Bybit 等&#xff08;支…...

(概率论)区间估计 和 置信区间 、 假设检验

参考文章1&#xff1a;3分钟&#xff0c;看懂区间估计and置信区间 - 知乎 (zhihu.com) 1、点估计的定义&#xff1a; 2、区间估计的定义&#xff1a; 参考文章2&#xff1a;【概率论】- (1)区间估计 - 知乎 (zhihu.com) 这篇文章中的2中&#xff0c;2.1、2.2、2.3描述了需要用到…...

MBTiles 及爬取到发布

MBTiles &#xff1a;https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准&#xff0c;该标准的目的是即时传输和使用数据。 作为一个容器格式&#xff0c;MBTiles可以存储任何瓦片数据,…...

uniapp使用chooseLocation安卓篇

本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称&#xff1a; res.name);console.log(详细地…...

el-cascader 树状选择-点击父级禁用子级

背景&#xff1a;项目上需要实现树状选择&#xff0c;点击父级禁用子级的功能&#xff0c;element组件本身没有该配置项说明&#xff1a;需要实现几个功能点&#xff1a;点击父级禁用子级&#xff1b;再次点击取消禁用&#xff1b;仅回填所选级&#xff1b;上下级不关联实现代码…...

力扣经典题目之219. 存在重复元素 II

今天继续给大家分享一道力扣的做题心得今天这道题目是 219. 存在重复元素 II&#xff0c;我使用 hashmap 的方法来解题 题目如下&#xff0c;题目链接&#xff1a;219. 存在重复元素 II 1&#xff0c;题目分析 此题目给我们了一个整数数组 nums 和一个整数 k &#xff0c;需要…...

微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城

1.微服务保护 微服务保护是确保微服务架构可靠、稳定和安全的策略与技术。 在可靠性上&#xff0c;限流是控制进入微服务的请求数量&#xff0c;防止流量过大导致服务崩溃。比如电商促销时对商品详情服务进行流量限制。熔断是当被调用的微服务故障过多或响应过慢时&#xff0c;…...

Wireshark 学习笔记1

1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 &#xff08;1&#xff09;选择合适的网卡 &#xff08;2&#xff09;开始捕获数据包 &#xff08;3&#xff09;过滤掉无用的数据包 &#xff08;4&#xff09;将捕获到的数据包保存为文件…...

voice agent实现方案调研

前言 目前语音交互主要的实现大体有两种: 级联方案,指的是,大规模语言模型 (LLM)、文本转语音 (TTS) 和语音转文本 (STT),客户的话通过vad断句到STT的语音转文本,经过大模型进行生成文本,生成文本后通过TTS进行回复给用户。(主流方案)端到端的方案,开发者无需再…...

pgpool配置安装之服务器的配置

第 1 章.服务器配置 1.1. 设置参数 1.1.1. 参数名称和值 所有参数名称均不区分大小写。每个参数都采用 值为以下五种类型之一&#xff1a;boolean、string、integer、floating point、 或枚举 &#xff08;enum&#xff09;。类型决定了设置 参数&#xff1a; 布尔&#xf…...

C++实现银行排队系统

网上看到的设计要求&#xff1a; 基本效果已经实现&#xff0c;希望大家帮忙指点指点。 程序中的一些基本模块 程序处理中的一些流程图 程序运行结果如下图&#xff1a; 程序代码如下&#xff1a; #include <iostream> #include <string> #include <random&g…...

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…...

多行输入模式(dquote> 提示符)double quote(双引号)

文章目录 1、引号不匹配具体原因解决办法如何避免此问题 2、double quote&#xff08;双引号&#xff09;出现原因解决办法预防措施 ~/Downloads/productqualification-develop git:[main] git commit -m "漏添加到暂存区的代码“ dgqdgqdeMac-mini productqualification-…...

【Uniapp-Vue3】原生事件监听及组件内置事件处理

如果我们想给元素添加一个事件就要使用到v-on&#xff0c;也可以简写为&#xff1a; <标签名 v-on:事件名"函数"></标签名> 或简写为 <标签名 事件名"函数"></标签名> 比如我们想要实现点击一下元素&#xff0c;num就1&#xff0c…...

微软 2024 最新技术全景洞察

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…...