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

C++ 基础思维导图(一)

目录

1、C++基础

IO流

namespace

引用、const

inline、函数参数

重载

2、类和对象

类举例

3、 内存管理

new/delete

对象内存分布

内存泄漏

4、继承

继承权限

继承中的构造与析构

菱形继承


1、C++基础

IO流

#include <iostream>
#include <iomanip> // 对于setprecision, setw等
#include <string>
#include <fstream> // 对于文件操作using namespace std;
int main()
{int num;cin >> num; // 输入流if (cin.fail()){cerr << "input not right"; // 标准err输出}cout << num << endl; // 标准输出// 二进制文件读写ofstream binfile("test.bin", ofstream::out | ofstream::binary);char in[] = "A";binfile.write(in, 1);binfile.put('B');binfile.close();ifstream ifile("test.bin", ofstream::in | ofstream::binary); // 直接构造也可以ifile.seekg(0, ifile.end);                                   // 跳转到文件末尾int length = ifile.tellg();                                  // 获取当前字符在文件当中的位置,即文件的字符总数ifile.seekg(0, ifile.beg);                                   // 重新回到文件开头char data[1024];ifile.read(data, length); // 将文件当中的数据全部读取到字符串data当中cout << data << endl;ifile.close(); // 关闭文件ofstream outFile("example.txt"); // 只读,创建 ofstream 对象if (!outFile){std::cerr << "Unable to open file for writing";return 1; // 返回错误代码}outFile << "hello" << endl;outFile << "test" << endl;outFile.close();ifstream input("example.txt"); // 只读if (!input){cerr << "Unable to open file";return 1;}std::string line;while (std::getline(input, line)){std::cout << line << std::endl;}input.close(); // 关闭文件fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);file << "\nAppending this line to the file." << std::endl;file.seekg(0, std::ios::beg);// 从文件读取数据并输出到控制台std::string line1;while (std::getline(file, line1)){std::cout << line1 << std::endl;}file.close(); // 关闭文件return 0;
}

namespace

#include <iostream>
using namespace std;
namespace A
{int a=1;
} // namespace A
namespace B
{int a=2;namespace C{struct T{int a=4;char c;};int a=3;} // namespace C 
}; // namespace B
int main()
{cout<<"A::a "<<A::a<<"; B::a "<<B::a<<"; C::a "<<B::C::a<<endl;B::C::T t1;cout<<t1.a<<endl; using B::C::T;T t2;cout<<t2.a<<endl;bool F=true;cout<<boolalpha<<F<<endl; //noboolalpha 输出1int a=1,b=2,c=3;auto max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);//三目运算(a<b? a : b)= 30;//C中的三目运算符返回的是变量值,不能作为左值使用.而C++则可以在任意地方return 0;
}

引用、const

#include <iostream>
using namespace std;
struct A
{int a;char c;
};
void show(A *p)
{cout << "show func 指针调用前" << endl;cout << p->a << "\t" << p->c << endl;p->a = 20;cout << "show fun 指针修改调用后" << endl;cout << p->a << "\t" << p->c << endl;
}
void show1(A &p)
{cout << "show1 引用调用前" << endl;cout << p.a << "\t" << p.c << endl;p.a = 35;cout << "show1 引用修改调用后" << endl;cout << p.a << "\t" << p.c << endl;
}
void show2(A p)
{ // 临时变量实参的一份拷贝,修改对实参没有影响cout << "show2 传值调用前" << endl;cout << p.a << "\t" << p.c << endl;p.a = 45;cout << "show2 传值修改调用后" << endl;cout << p.a << "\t" << p.c << endl;
}
// 指针所指向的内存空间,不能被修改
int operA(const A *p)
{// p->a=10;return 0;
}
// 指针变量本身不能被修改
int operatorA1(A *const pT)
{pT->a = 10;// pT = NULL; //return 0;
}
// 指针变量和所指的值都不可以改变
int operatorA2(const A *const pT)
{// pT->a = 10;// pT = NULL; //cout << "A!" << endl;return 0;
}
// 数据交换, 值交换无法完成
void myswap(int i, int j)
{int c = 0;c = i;i = j;j = c;
}
// 数据交换, 指针直接对实参修改
void myswap1(int *i, int *j)
{int c = 0;c = *i;*i = *j;*j = c;
}
// 数据交换, 引用交换,引用做函数参数时不用初始化
void myswap2(int &i, int &j)
{int c = 0;c = i;i = j;j = c;
}
// 返回a的本身 a的副本
int getA1()
{int a = 10;return a;
}
/*想让引用返回可以用就需要将变量生命为static的
/*当函数返回值为引用时若返回栈变量不能成为其它引用的初始值
不能作为左值使用若返回静态变量或全局变量可以成为其他引用的初始值
即可作为右值使用,也可作为左值使用*/
int &getA2()
{int a = 20;// warning: reference to local variable ‘a’ returned [-Wreturn-local-addr]return a;
}
int *getA3()
{int a = 30;// warning: reference to local variable ‘a’ returnedreturn &a;
}
int main()
{// const  operatorA*const int x = 0;int const y = 2;// x=3;   y=2;//两个定义一样的效果,修改报错assignment of read-only variable 'x'// int const z; //未被初始化 error: uninitialized 'const z// 引用int var = 10;int &temp = var;                               // 引用需要初始化,像一个常量,有自己的空间sizeof与指针一样temp = 12;                                     // 变量的别名cout << "var: " << var << " " << temp << endl; // 修改引用同修改本身 12 12int temp1 = 10, temp2 = 110;cout << "berfor myswap temp1: " << temp1 << " temp2: " << temp2 << endl;myswap(temp1, temp2); // 数据交换, 值交换无法完成cout << "after myswap temp1: " << temp1 << " temp2: " << temp2 << endl;myswap1(&temp1, &temp2); // 指针传入交换cout << "after myswap temp1: " << temp1 << " temp2: " << temp2 << endl;myswap2(temp1, temp2); // 引用的本质时间接修改实参,编译器创造了指针然后修改// 间接赋值的三个条件,1)定义两个变量,2)变量之间建立关联,3)形参间接修改实参;引用是后两个条件合二为一cout << "after myswap temp1: " << temp1 << " temp2: " << temp2 << endl;cout << "   ----复杂类型引用 学习---- " << endl;A t = {101, 'A'}; // 结构体 列表初始化cout << "main调用指针调用前" << endl;cout << t.a << "\t" << t.c << endl; // 101 Ashow(&t);cout << "main调用指针调用后" << endl;cout << t.a << "\t" << t.c << endl;show1(t);cout << "main引用调用后" << endl;cout << t.a << "\t" << t.c << endl;show2(t);cout << "main传值调用后" << endl;cout << t.a << "\t" << t.c << endl;cout << "------函数返回值是一个引用-------" << endl;int ga = 1;int ga1 = 2;ga = getA1();// ga1=getA2(); //引用相当于指针,临时变量返回易出错。因为值被释放了// int &ga2=getA2(); //栈变量返回不能作为初始值cout << "ga: " << ga << endl;int *p = NULL; // 指针可以为null// p = getA3();// cout << *p << endl; // 证明了引用和指针一样,返回临时变量的指针,有可能被释放了再去使用出现异常return 0;
}

inline、函数参数

#include <iostream>
using namespace std;
#define MYFUNC(a,b)((a)<(b)?(a):(b))
inline void printA()
{int a = 10;cout << "a:" << a << endl;
}
inline int Myfun(int a,int b){return a<b?a:b;
}
struct A
{char c;int a;
};
void show(const A &m)
{// m.c=10; // error: assignment of member 'A::c' in read-only objectcout << m.a << endl;
}
//函数占位参数 函数调用时,必须写够参数
void func1(int a,int b, int){cout<<"a: "<<a<<" b: "<<b<<endl;
}
//默认参数与占位参数
void func2(int a,int b, int=0){cout<<"a: "<<a<<" b: "<<b<<endl;
}
// void func3(int a=0,int b){ 在默认参数规则 ,如果默认参数出现,那么右边的都必须有默认参数
// }
int main()
{int a = 10;int &b = a; // 普通引用必须初始化// int &c=10; //字面值不可以,引用要取地址int x = 12;const int &y = x; // 让变量引用只读属性不能通过y修改x// y=20; 不能修改, x可以改变x = 13;  //修改值y也变了// 常引用的初始化可以用变量或者常量值{const int a = 10;// int &m=11;const int &m = 40;}A t = {'1', 1};show(t);cout<<" ----inline--------"<<endl;printA();//与下相同// 	{// 		int a = 10;// 		cout<<"a"<<a<<endl;// 	}C++编译器直接将函数体插入在函数调用的地方//内联函数省去了普通函数调用时压栈,跳转和返回的开销int a1=1, b1=3;int c=MYFUNC(a1,b1);int d=Myfun(a1,b1);cout<<" define: a1: "<<a1<<" b1: "<<b1<<" c: "<<c<<endl;cout<<" inlice: a1: "<<a1<<" b1: "<<b1<<" d: "<<d<<endl;//int c1=MYFUNC(++a1,b1); //a=3 b=3 c=3 //==>宏替换并展开 ((++a) < (b) ? (++a) : (b))  //a=3 b=3 c=3// cout<<" define ++: a1: "<<a1<<" b1: "<<b1<<" c1: "<<c1<<endl;int d1=Myfun(++a1,b1);  //a=2 b=3 c=2cout<<" inlice ++: a1: "<<a1<<" b1: "<<b1<<" d: "<<d1<<endl;func1(a,b,c); //占位符必须有参数func2(a,b); //okfunc2(a,b,c); //okreturn 0;
}

重载

#include <iostream>
using namespace std;
int func(int x)
{return x;
}
int func(int x, int y)
{return x + y;
}
// 函数重载  和  函数默认参数 在一起
// int func(int x, int y, int c = 0)
// {
//     return x + y + c;
// }
auto func(const string &s)
{return s.size();
}
// void func(int x,int y){ //函数返回值不是函数重载的判断标准
//     x= x+y;
//     cout<<x<<endl;
// }
void func(string *s1, string *s2)
{cout << *s1 << "\t" << *s2 << endl;
}
// 定义一个函数类型
typedef int(myfun)(int a, int b);
myfun *f = nullptr; // 定义函数指针,指向函数入口
// 声明一个函数指针类型
typedef int (*myfunc1)(int a, int b);
//myfunc1 fp = nullptr;
// 定义一个函数指针 变量
void (*myVarPFunc)(int a, int b);
int main()
{int a = 0;a = func(1);cout << "func a: " << a << endl;// a=func(1,2);  //重载与默认参数在一起产生了二义性cout << "func1 a: " << a << endl;cout << "func2 a: " << func("abcd") << endl;string s = "abcde";string s1 = "hjic";func(&s, &s1);myfunc1 fp;fp = func;cout<<fp(1,3)<<endl;return 0;
}

2、类和对象

类举例

#include <iostream>
#include <string>class Student {
private:std::string name; // 学生姓名int age;          // 学生年龄public:// 默认构造函数Student() : name("Unknown"), age(0) {std::cout << "Default constructor called.\n";}// 带参数的构造函数Student(const std::string& name, int age) : name(name), age(age) {std::cout << "Parameterized constructor called for " << name << ".\n";}// 拷贝构造函数Student(const Student& other) {this->name = other.name; // 使用 this 指针this->age = other.age;   // 使用 this 指针std::cout << "Copy constructor called for " << this->name << ".\n";}// 拷贝赋值运算符Student& operator=(const Student& other) {if (this != &other) { // 防止自我赋值this->name = other.name; // 使用 this 指针this->age = other.age;   // 使用 this 指针std::cout << "Copy assignment operator called for " << this->name << ".\n";}return *this; // 返回当前对象的引用}// 析构函数~Student() {std::cout << "Destructor called for " << name << ".\n";}// 显示学生信息void display() const {std::cout << "Name: " << name << ", Age: " << age << "\n";}
};int main() {// 使用默认构造函数Student student1;student1.display();// 使用带参数的构造函数Student student2("Alice", 20);student2.display();// 使用拷贝构造函数Student student3 = student2; // 调用拷贝构造函数student3.display();// 使用拷贝赋值运算符Student student4;student4 = student2; // 调用拷贝赋值运算符student4.display();return 0;
}

3、 内存管理

new/delete

#include <iostream>
#include <cstdlib> // 包含 malloc 和 free 的头文件class MyClass {
public:MyClass() {std::cout << "MyClass constructor called.\n";}~MyClass() {std::cout << "MyClass destructor called.\n";}
};
int main() {// 使用 new 和 deletestd::cout << "Using new and delete:\n";MyClass* obj1 = new MyClass(); // 使用 new 分配内存delete obj1; // 使用 delete 释放内存// 使用 malloc 和 freestd::cout << "\nUsing malloc and free:\n";// 注意:malloc 只分配内存,不调用构造函数MyClass* obj2 = (MyClass*)malloc(sizeof(MyClass)); // 使用 malloc 分配内存if (obj2) {new (obj2) MyClass(); // 手动调用构造函数}// 使用 free 释放内存,但需要手动调用析构函数if (obj2) {obj2->~MyClass(); // 手动调用析构函数free(obj2); // 使用 free 释放内存}return 0;
}

对象内存分布

#include <iostream>
#include <string>class MyClass {
public:int value;MyClass(int v) : value(v) {std::cout << "constructor called for value: " << value << "\n"; //10}~MyClass() {std::cout << "destructor called for value: " << value << "\n";}
};// 全局变量,存储在数据区
MyClass globalObj(10); int main() {// 栈区对象MyClass stackObj(20); std::cout << "Address of stackObj: " << &stackObj << "\n";  //10// 堆区对象MyClass* heapObj = new MyClass(30);std::cout << "Address of heapObj: " << heapObj << "\n";// 数据区对象std::cout << "Address of globalObj: " << &globalObj << "\n";// 程序区(代码区)对象std::cout << "Address of main function: " << (void*)main << "\n";// 释放堆区对象delete heapObj;/*constructor called for value: 10constructor called for value: 20Address of stackObj: 0x6963bffbd4constructor called for value: 30Address of heapObj: 0x22296241640Address of globalObj: 0x7ff6cc537030Address of main function: 0x7ff6cc531450destructor called for value: 30destructor called for value: 20destructor called for value: 10*/return 0;
}

内存泄漏

#include <iostream>class MyClass {
public:MyClass() {std::cout << "MyClass constructor called.\n";}~MyClass() {std::cout << "MyClass destructor called.\n";}
};void createMemoryLeak() {MyClass* obj = new MyClass(); // 动态分配内存// 忘记释放内存,导致内存泄漏
}
void createNoMemoryLeak() {std::unique_ptr<MyClass> obj = std::make_unique<MyClass>(); // 使用智能指针// 不需要手动释放内存,智能指针会自动管理
}int main() {for (int i = 0; i < 5; ++i) {createMemoryLeak(); // 每次调用都会造成内存泄漏}std::cout << "Memory leak has occurred.\n";for (int i = 0; i < 5; ++i) {createNoMemoryLeak(); // 不会造成内存泄漏}return 0;
}

4、继承

继承权限

#include <iostream>
using namespace std;// 继承
// public 修饰的成员变量 方法 在类的内部 类的外部都能使用
// protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用
// private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部
// 这几个修饰符用在继承里影响的是子类的访问全限// 类型兼容性原则
class Parent
{
public:void show(){cout << " show 父类" << endl;a = 0;b = 1;c = 2;cout << "a: " << a << " b: " << b << " c: " << c << endl;}int a;Parent(){cout << " --父类 无参 构造 --" << endl;}Parent(const Parent &p){cout << " 父类 拷贝 构造--- " << endl;}protected:int b;private:int c;
};
class Child1 : public Parent
{
private:int c1; // 子类有自己的属性
public:int a1;void show1(){ // 访问控制a1 = 1;b1 = 2;c1 = 3;cout << " show child1 子类1" << endl;cout << a << b << a1 << b1 << c1 << endl;//<< c  在子类范围内父类里的属性不变,c是私有已经是类外了}protected:int b1;
};
class Child2 : protected Parent
{
public:int a2;void show2(){ // 访问控制 protected继承,public变成protected,a2 = 2;b2 = 4;c2 = 4;cout << " child2 子类2" << endl;cout << a << b << a2 << b2 << c2 << endl;//<< c  在子类范围内父类里的属性不变,c是私有已经是类外了}protected:int b2;private:int c2; // 子类有自己的属性
public:
};
class Child3 : private Parent
{
public:int a3;void show3(){ // 访问控制 私有继承,全变私有,a = 0;b = 1;a3 = 4;b3 = 4;c3 = 5;cout << " child3 子类3" << endl;cout << a << b << a3 << b3 << c3 << endl;//<< c  在子类范围内父类里的属性不变,c是私有已经是类外了}protected:int b3;private:int c3;
};
void howShow(Parent *base){ //指针base->show();//父类成员函数
}
void howShow1(Parent &base){ //引用base.show();//父类成员函数
}int main()
{Child1 cl;// 子类继承了父类的所有属性和方法cout << " 公有继承 " << endl;cl.a = 1; // public ,类外可以// 全是类外不可以访问//  cl.b=1;//  cl.c=1;//  cl.a1=2;//  cl.b1=2;//  cl.c1=3;cl.show1();cout << " 保护共有继承 " << endl;Child2 c2;// 子类继承了父类的所有属性和方法// c2.a = 1; //变protected ,类外可以// 全是类外不可以访问// c2.b=1;// c2.c=1;// c2.a2=2;// c2.b2=2;// c2.c2=3;c2.show2();Child3 c3;// 私有更不用说了c3.show3();Parent p1;p1.show();//基类指针指向子类Parent *p=nullptr;p=&cl;p->show();//指针做函数参数howShow(p);howShow(&cl);//引用做函数参数howShow1(p1);howShow1(cl);//第二层含义//可以让子类对象   初始化   父类对象//子类就是一种特殊的父类Parent p3 = cl;return 0;
}

继承中的构造与析构

#include <iostream>
#include <cstring>
using namespace std;/*1、子类对象在创建时会首先调用父类的构造函数2、父类构造函数执行结束后,执行子类的构造函数3、当父类的构造函数有参数时,需要在子类的初始化列表中显示调用4、析构函数调用的先后顺序与构造函数相反
*/
class Object
{
public:Object(int a, int b){this->a = a;this->b = b;cout<<"object构造函数 执行 "<<"a"<<a<<" b "<<b<<endl;}~Object(){cout<<"object析构函数 \n";}
protected:int a;int b;
};
class Parent : public Object
{
public:Parent(int p) : Object(1, 2){this->p = p;cout<<"父类构造函数..."<<p<<endl;}~Parent(){cout<<"析构函数..."<<p<<endl;}void printP(int a, int b){cout<<"我是爹..."<<endl;}
protected:int p;};
class child : public Parent
{
public:child(int p) : Parent(p) , obj1(3, 4), obj2(5, 6){this->p = p;cout<<"子类的构造函数"<<p<<endl;}~child(){cout<<"子类的析构"<<p<<endl;}void printC(){cout<<"我是儿子"<<endl;}
protected:int p;Object obj1;Object obj2;
};

菱形继承

#include <iostream>// 基类
class Base {
public:void show() {std::cout << "Base class show function called.\n";}
};// 派生类 A
class DerivedA : public Base {
public:void show() {std::cout << "DerivedA class show function called.\n";}
};// 派生类 B
class DerivedB : public Base {
public:void show() {std::cout << "DerivedB class show function called.\n";}
};// 最终派生类 C
class DerivedC : public DerivedA, public DerivedB {
public:void show() {std::cout << "DerivedC class show function called.\n";}
};int main() {DerivedC obj;// 调用 DerivedC 的 show 方法obj.show(); // 输出 DerivedC 的 show 方法// 访问基类的 show 方法obj.DerivedA::show(); // 明确调用 DerivedA 的 show 方法obj.DerivedB::show(); // 明确调用 DerivedB 的 show 方法return 0;
}

在菱形继承中,DerivedC 通过 DerivedA 和 DerivedB 都继承了 Base 类的成员。如果不明确指定,编译器无法确定应该调用 DerivedA 还是 DerivedB 中的 Base 类成员,这就导致了二义性。

如果加virtual就可以访问基类的 show 方法 obj.Base::show(); // 通过虚继承,只有一个 Base 的实例 。

相关文章:

C++ 基础思维导图(一)

目录 1、C基础 IO流 namespace 引用、const inline、函数参数 重载 2、类和对象 类举例 3、 内存管理 new/delete 对象内存分布 内存泄漏 4、继承 继承权限 继承中的构造与析构 菱形继承 1、C基础 IO流 #include <iostream> #include <iomanip> //…...

Excel文件恢复教程:快速找回丢失数据!

Excel文件恢复位置在哪里&#xff1f; Excel是微软开发的电子表格软件&#xff0c;它为处理数据和组织工作提供了便捷。虽然数据丢失的问题在数字时代已经司空见惯&#xff0c;但对于某些用户来说&#xff0c;恢复未保存/删除/丢失的Excel文件可能会很困难&#xff0c;更不用说…...

人脑处理信息的速度与效率:超越计算机的直观判断能力

人脑处理信息的速度与效率&#xff1a;超越计算机的直观判断能力 关键词&#xff1a; #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…...

Spring Boot 中的 classpath详解

Spring Boot 中的 classpath 详解 在开发 Spring Boot 应用时&#xff0c;理解 classpath 的概念对于配置、资源管理以及构建项目非常重要。特别是当我们使用 Maven 打包工具时&#xff0c;项目的资源文件在不同的阶段会被放置到不同的目录。本文将深入探讨 Spring Boot 中的 …...

标准库以及HAL库——按键控制LED灯代码

按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯&#xff1a;是直接控制输出引脚&#xff0c;GPIO初始化推挽输出即可 按键控制LED&#xff1a;是按键输入信号从而控制输出引脚&#xff0c;GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…...

Spring Cloud (四、服务熔断降级-HyStrix)

spring cloud 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免地失败。 服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其它的…...

【C语言】如何插入并播放音频文件

在 C 语言中处理音频文件可以是一个有趣且挑战性的任务&#xff0c;尤其是在嵌入式开发或多媒体程序开发中。尽管 C 语言本身并不直接支持音频处理&#xff0c;但可以通过集成第三方库来处理音频文件的解码和播放。本篇博客将介绍如何在 C 语言中插入并播放音频文件&#xff0c…...

图书项目:整合SSM

步骤&#xff1a; pom文件&#xff1a;导包&#xff0c;写入静态资源导出配置&#xff0c;连接数据库 建包&#xff1a;controller dao/mapper pojo service 配置文件&#xff1a;mybatis-config.xml applicationContext.xml&#xff08;Spring的配置文件&#xff09; datab…...

C#OPC(下)

安装 OPC UA SDK 通过 NuGet 包管理器&#xff0c;在 Visual Studio 中右键单击项目名称&#xff0c;选择 “管理 NuGet 程序包”&#xff0c;在搜索框中输入 “OPCFoundation.NetStandard.Opc.Ua”&#xff0c;找到对应的 OPC UA SDK 包后点击 “安装”&#xff0c;将其集成到…...

STLG_01_05_程序设计C语言 - 数据类型概念解析

一、典型例题 下面这些示例&#xff0c;将能够更熟练地运用C语言中的数据类型&#xff0c;加深对数据存储和处理的理解&#xff1a; 示例&#xff1a;确定变量a、b、c和d的数据类型&#xff0c;并说明它们的存储大小和取值范围 short int a -1000; unsigned int b 50000; f…...

使用工厂+策略模式实现去除繁琐的if else

使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug&#xff0c;即在修改实体类中的类型时&#xff0c;或者修改属性名字&#xff0c;mapstruct都无法进行转换&#xff0c;会报错&#xff0c;此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...

Apache MINA 反序列化漏洞CVE-2024-52046

漏洞描述&#xff1a; Apache MINA 是一个功能强大、灵活且高性能的网络应用框架。它通过抽象网络层的复杂性&#xff0c;提供了事件驱动架构和灵活的 Filter 链机制&#xff0c;使得开发者可以更容易地开发各种类型的网络应用。 Apache MINA 框架的 ObjectSerializationDeco…...

SpringSpringBoot常用注解总结

Spring&SpringBoot常用注解总结 1.SpringBootApplication 这个注解是 Spring Boot 项目的基石&#xff0c;创建 SpringBoot 项目之后会默认在主类加上。 SpringBootApplication public class SpringSecurityJwtGuideApplication {public static void main(java.lang.Str…...

设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析

原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;其核心思想在于通过复制现有的对象&#xff08;原型&#xff09;来创建新的对象&#xff0c;而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效&#x…...

cnPuTTY 0.82.0.1—PuTTY Release 0.82中文版本简单说明~~

2024-11-27 官方发布PuTTY 0.82主要包含如下变化&#xff1a; 1.Unicode处理进行了重大重构&#xff0c;以允许使用系统默认配置的字符集/代码页之外的Unicode字符。仅部分实现&#xff0c;其他尚未完成。 2.Unicode版本进行更新&#xff1a;所有字符分析均已更…...

TypeScript 常用类型

文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言&#xff1…...

综合能源建模:理论、方法与实践

一、引言 随着全球能源需求的持续增长以及对能源安全、环境保护和可持续性发展的日益关注&#xff0c;综合能源系统&#xff08;Integrated Energy System&#xff0c;IES&#xff09;作为一种能够整合多种能源资源、实现能源高效利用和协同优化的解决方案&#xff0c;正逐渐成…...

《摄影艺术创作》慕课期末答案

《摄影艺术创作》慕课期末考试答案 题数 100 人们常说&#xff0c;“百闻不如一见”、“一图胜千言”&#xff0c;这强调的是 的表现力。 A视觉形象 B文字语言 C音响元素 D有声语言 “绘画是加法&#xff0c;摄影是减法”&#xff0c;主要是指无论摄影和绘画&#xff0c;都要…...

MySQL实用SQL示例

创建数据库 CREATE DATABASE zq-cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;创建表 CREATE TABLE regulatory_firm_category (category_id int NOT NULL AUTO_INCREMENT COMMENT 分类id&#xff0c;自增主键,parent_id int NOT NULL COMMENT 父级id,category_…...

MySQL日志

MySQL日志 文章目录 MySQL日志binlogredoundoredo vs undo binlog binlog日志也就是二进制日志&#xff0c;把对于数据库的写入操作以二进制的形式保存到磁盘中。binlog日志是mysql的逻辑日志&#xff0c;可以理解为记录的是sql日志&#xff0c;由mysql的服务层进行记录&#…...

双目的一些文章学习

文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识&#xff0c;空洞卷积&#xff0c;SPPNet网络&#xff0c;计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息&#xff0c;又引入3D卷积来增加模…...

国产文本编辑器EverEdit - 批量转码转换行符

1 批量转码&转换行符 1.1 应用场景 如果用户批量在Windows编辑文件&#xff0c;要上传到异构系统&#xff0c;如&#xff1a;Linux&#xff0c;则需要批量转换编码和换行符&#xff0c;此时可以使用EverEdit的批量转码功能。 1.2 使用方法 选择主菜单文档 -> 批量转码…...

NextCloud服务安装与配置教程

NextCloud服务安装与配置教程 什么是 NextCloud: Nextcloud 是一款开源的私有云存储和协作平台,允许用户在自己的服务器上托管数据并管理团队协作。它可以作为一个功能丰富、安全可靠的替代方案,与商业云服务(如 Google Drive、Dropbox)相比提供更多控制和隐私保护。简单来…...

查看 SSD能承载的每秒随机IO次数

查看 SSD能承载的每秒随机IO次数 通常给大家的一个建议就是对于数据库部署的机器&#xff0c;一定要采用SSD固态硬盘&#xff0c;而不要使用机械 硬盘&#xff0c;因为SSD固态硬盘最强大的地方&#xff0c;就是他的随机IO性能非常高。 其次&#xff0c;光是用SSD还不够&#x…...

C# 设计模式(结构型模式):享元模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;享元模式 (Flyweight Pattern) 在软件开发中&#xff0c;尤其是在处理大量对象时&#xff0c;我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时&#xff0c;通常会占用大量的内存资源&#xff0c;从而…...

使用Python,networkx构造有向图及无向图以及图合并等api

使用Python&#xff0c;networkx构造有向图及无向图以及图合并等api 源码图的构造、节点及边的添加等有向图及无向图及多重图 参考 方法名方法作用subgraph(G, nbunch)返回包含nbunch节点的子图union(G, H[, rename])合并G和H图disjoint_union(G, H)合并G和H图cartesian_produc…...

【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】

文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1&#xff1a;检测单个信号的 Stuck-at Fault示例 2&#xff1a;针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…...

uniapp本地加载腾讯X5浏览器内核插件

概述 TbsX5webviewUTS插件封装腾讯x5webview离线内核加载模块&#xff0c;可以把uniapp的浏览器内核直接替换成Android X5 Webview(腾讯TBS)最新内核&#xff0c;提高交互体验和流畅度。 功能说明 下载SDK插件 1.集成x5内核后哪些页面会由x5内核渲染&#xff1f; 所有plus…...

树莓派之旅-在wsl-x86-64 上进行树莓派的交叉编译

前情提要&#xff1a; 想把自己花里胡哨的终端丢到树莓派上去&#xff0c;可是树莓派算力不够&#xff0c;编译时间过于漫长 交叉编译 定义网上有&#xff0c;懒得复制了&#xff0c;大概就是在本机电脑上编译目标平台的可执行文件 这里的目标平台是树莓派 使用 uname -m …...

JavaScript中Map与Object的区别

在JavaScript中&#xff0c;Map和Object是用于存储键值对数据的两种不同的数据结构&#xff08;Map是ES6新增的数据结构&#xff09;&#xff0c;它们在构造方式、键的类型以及原型继承等方面存在区别。 一、主要区别 1.构造方式 Map&#xff1a;Map只能通过构造函数new Map…...

基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献&#xff1a; 考虑使用UAV作为中继辅助节点的设备到设备&#xff08;D2D&#xff09;无线信息和…...

计算机网络 (20)高速以太网

一、发展背景 随着计算机技术和网络应用的不断发展&#xff0c;传统的以太网速率已逐渐无法满足日益增长的带宽需求。因此&#xff0c;高速以太网应运而生&#xff0c;它以提高数据传输速率为主要目标&#xff0c;不断推动着以太网技术的发展。 二、技术特点 高速传输&#xff…...

element ui 组件 时间选择器出现转换问题的解决办法

在使用时间选择器添加数据是会出现转换失败问题 vue中代码为&#xff1a; 解决办法&#xff1a; 在el-date-picker中添加 format 和 value-format...

当知识图谱遇上文本智能处理,会擦出怎样的火花?

目前以理解人类语言为入口的认知智能成为了人工智能发展的突破点&#xff0c;而知识图谱则是迈向认知智能的关键要素。达观数据在2018AIIA人工智能开发者大会承办的语言认知智能与知识图谱公开课上&#xff0c;三位来自企业和学术领域的专家分别从不同角度讲述的知识图谱的应用…...

SpringBootWeb案例-1

文章目录 SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理2.1 查询部门2.1.1 原型和需求2.1.2 接口文档2.1.3 思路分析2.1.4 功能开发2.1.5 功能测试 2.2 前后端联调2.3 删除部门2.3.1 需求2.3.2 接口文档2.3.3 思路…...

在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分

在正则表达式中&#xff0c;\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分&#xff0c;它们会保存正则表达式匹配到的内容。在替换操作中&#xff0c;\1 就是对第一个捕获组内容的引用&#xff0c;表示你希望将捕获组中的内容放到替换文本中的某个位置。 …...

免费下载 | 2024年具身大模型关键技术与应用报告

这份报告的核心内容涉及具身智能的关键技术与应用&#xff0c;主要包括以下几个方面&#xff1a; 具身智能的定义与重要性&#xff1a; 具身智能是基于物理身体进行感知和行动的智能系统&#xff0c;通过与环境的交互获取信息、理解问题、做出决策并实现行动&#xff0c;产生智…...

[API测试] Karate 之独立运行方式

在 Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具) 这一篇中介绍了如何在Maven项目中,如何结合JUnit 运行 Karate的API测试, 如果是专职的QA人员来测试, 对Java语言或者Maven完全不熟悉的话要怎么来运行 Karate的测试呢? 答案就是使用Karate的独立运…...

WeNet:面向生产的流式和非流式端到端语音识别工具包

这篇文章介绍了WeNet&#xff0c;一个面向生产的开源端到端&#xff08;E2E&#xff09;语音识别工具包。WeNet的主要特点和贡献如下&#xff1a; 统一流式和非流式识别&#xff1a;提出了一种名为U2的两阶段框架&#xff0c;能够在单一模型中同时支持流式和非流式语音识别&…...

《我在技术交流群算命》(二):QGraphicsItem怎么写自定义信号啊(QObject多继承顺序问题)

某位群友突然无征兆的抛出以下问题&#xff1a; QGraphicsItem怎么写自定义信号啊 看到这个问题的时候我是比较疑惑的&#xff0c;按鄙人对 Qt 的了解&#xff0c;自定义信号只需: 继承QObject类中加入Q_OBJECT宏声明一个信号并使用 但该群友毕竟也不是一个Qt新手&#xff0…...

实践深度学习:构建一个简单的图像分类器

引言 深度学习在图像识别领域取得了巨大的成功。本文将指导你如何使用深度学习框架来构建一个简单的图像分类器&#xff0c;我们将以Python和TensorFlow为例&#xff0c;展示从数据准备到模型训练的完整流程。 环境准备 在开始之前&#xff0c;请确保你的环境中安装了以下工…...

实践:事件循环

实践&#xff1a;事件循环 代码示例 console.log(1); setTimeout(() > console.log(2), 0); Promise.resolve(3).then(res > console.log(res)); console.log(4);上述的代码的输出结果是什么 1和4肯定优先输出&#xff0c;因为他们会立即方式堆栈的执行上下文中执行&am…...

基于Python的医院预约挂号与诊断系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

计算机网络基础

文章目录 名词含义1.应用层1.1网络应用原理1.1.1网络应用体系1.1.2进程通信1.1.3可供程序使用的运输服务1.1.4因特网的运输服务1.1.5应用层协议 1.2WEB和HTTP1.2.1HTTP概述1.2.2持续与非持续连接1.2.3报文格式 名词含义 ISP(Internet Service Provider&#xff0c;因特网服务提…...

Rabbitmq追问1

如果消费端代码异常&#xff0c;未手动确认&#xff0c;那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常&#xff0c;未手动确认&#xff08;ACK&#xff09;的情况下&#xff0c;消息的处理行为取决于消息队列的实现和配置&#xff0c;以下是基于 RabbitMQ …...

基于SpringBoot和OAuth2,实现通过Github授权登录应用

基于SpringBoot和OAuth2&#xff0c;实现通过Github授权登录应用 文章目录 基于SpringBoot和OAuth2&#xff0c;实现通过Github授权登录应用0. 引言1. 创建Github应用2. 创建SpringBoot测试项目2.1 初始化项目2.2 设置配置文件信息2.3 创建Controller层2.4 创建Html页面 3. 启动…...

python数据分析:使用pandas库读取和编辑Excel表

使用 Pandas&#xff0c;我们可以轻松地读取和写入Excel 文件&#xff0c;之前文章我们介绍了其他多种方法。 使用前确保已经安装pandas和 openpyxl库&#xff08;默认使用该库处理Excel文件&#xff09;。没有安装的可以使用pip命令安装&#xff1a; pip install pandas ope…...

SpringCloud源码分析-Lettue Redis

redis connection异步发送 底层是nio channel...

Linux(13)——网络概述

目录 一、TCP/IP 网络模型&#xff1a; 1、应用层&#xff08;Application&#xff09;&#xff1a; 2、传输层&#xff08;Transport&#xff09;&#xff1a; 3、互联网层&#xff08;Internet or network&#xff09;&#xff1a; 4、链路层&#xff08;Link&#xff0…...

PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)

文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定&#xff1f; 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…...