期末速成C++【知识点汇总完】
目录
第一章
C++特点
命名空间-命名冲突
引用
new和delete
堆和栈
缺省参数
重载/隐藏/覆盖
初始化方式
第二章
面向对象的三大特征
成员变量
成员函数:构造函数和析构函数
访问权限和继承方式
空类
常const
静态static
友元friend
第三章
重载
重载为成员函数
类型转换运算符重载
函数运算符的重载
第四章-子类父类
第五章-virtual多态
第六章-模板
第七章-STL
第八章-文件IO
第九章-异常
第十章❗
第一章
C++特点
同时支持四种编程范式,面向过程、面向对象、泛型编程、函数式编程
同C语言相比,适合开发大型应用程序(操作系统内核还是C语言)(多人同时开发namespace)(存在OOP)
具有可复用、可维护、可扩展、灵活性好的特点(活字印刷)
头文件:不带.h math.h(cmath)string.h(cstring)
关键字:都是小写。
命名空间-命名冲突
- const char* char const*:常量指针:const 修饰的是指向的内容
- char*const:指针常量:const修饰的是指针(指向的关系)
const char* p=”hello”;
char const* p=”hello”;数组名 char arr[10];arr的实际类型是char* const
引用
函数参数
- 实参就是形参;参数类型就是常引用类型。const vector<int>&
- 常引用是常对象,常对象只能调用常函数const。重载自定义类型的operator<,常函数。(重载运算类的不能const)
函数返回值
不能返回局部变量的引用
ostream& operator<<(ostream& out,const ......&){ return out; } return *this
- 前置++返回*this:是&
- 后置++(int)返回是temp:不能是&
- +重载,返回的是局部变量:不能是&
new和delete
new/delete和malloc/free不能混用
new/delete和new[]/delete[]是两对运算符
new[]/delete[]定义变长数组int len=100; //变量
Int* p=new int[len] //变长数组一定要用delete[]释放
p[i]和*(p+i)是等价的
堆和栈
堆(malloc/new)
- 一个进程只有一个堆。
- 手动分配,手动回收。
- 不能通过变量访问,只能通过指针间接访问。
- new/delete
- int* p = new int //两段内存:栈:p☞堆:int
栈
- 每个函数的每一次运行,都会有一个独立的栈。
- 放局部变量。
- 自动分配,自动回收
- 通过局部变量访问。
RAII资源获取即初始化Resource Acquisition is Initialization
在构造函数中去new,在析构函数中使用delete
缺省参数
- 优先写在声明里(定义不在写)(只能写一次)
- 函数在给半缺省参数,必须是从右往左连续依次给出,不能间隔跳跃。(从第一个开始)
- 调用函数传参:必须从左到右连续传参,不能跳跃。(从第一个开始)
int add(int a=1,int b=2,int c=3) {return a+b+c;}add(1); 1 2 3add(1,1); 1 1 3add(1,1,1); 1 1 1❌void Func2(int a, int b = 10, int c)
❌void Func2(int a=10, int b, int c = 20)
重载/隐藏/覆盖
重载:同名函数,同一作用域,参数列表不同。
Int add(int a,int b);
Int add(int x,int y);//二者不构成重载
隐藏:同名函数,不是覆盖都是隐藏(不是virtual虚函数),父类子类。
class Base
{Int foo(int);//函数1Int fool(int,int);//函数2
};Class Derived;public Base
{int fool(int,int);//函数3
};1和2重载
1和3隐藏
2和3隐藏
覆盖:同名函数,多态,虚函数virtual,原型严格一致。
class Base
{virtual Int foo(int,int);//函数1
};Class Derived;public Base
{virtual int fool(int,int);//函数2
};函数1和2覆盖
Base * pb=new Derived;
pb->foo(); //函数2
初始化方式
int a=100; //C语言
int b(100); //经典C++
int c{100}; //现代C++,统一初始化
初始化的次数❓
Class foo{};
Foo a(1);//1
Foo a=1;//1
Foo a{1};//1
Foo* pf;//没有
Foo pf[10];//10次
Foo* pf[10];//一次没有
第二章
面向对象的三大特征
- 封装:隐藏内部实现
- 继承:实现代码复用
- 多态:改写对象行为
- 类中成员:成员变量(名词性的属性)和成员函数(动词性的行为)
- 重载:代码间接,❌不是代码复用。
成员变量
成员可以是自身类型的指针或引用,不能包含自己。
class Foo{
Foo *pf;
Foo& rf;
Foo f;//❌
};
成员函数:构造函数和析构函数
构造函数和析构函数和Seter/Geter
- 构造函数:无参构造函数/带参构造函数/拷贝构造函数/类型转换构造函数
- 析构函数
构造函数的参数不能是自身类型。
析构函数:释放对象
析构函数的释放顺序和创建顺序相反
class MyString{
};MyString() //无参构造函数
MyString(string str); //带参构造函数
MyClass(const MyString& other); //拷贝构造函数
~MyString(); //析构函数
virtual ~MyString(); //虚析构函数(父类是子类可以省略virtual)
MyString(const char* str);//类型转换构造函数
构造函数:创建和初始化对象
默认构造函数
无参构造函数
默认拷贝构造函数:系统提供,按位拷贝,bit-by-bit,无参
拷贝构造函数:一个参数,自身类型的引用(包括常引用,一般是常引用)
类型转化构造函数:一个参数,不是自身类型,也不是自身类型的引用
1.无参构造函数调用的方式:
class Foo{Foo();
};
Foo a=10;
Fool* pb=new foo;
Foo f;
Foo af[10];2.带参构造函数调用方式:
class Foo{Foo(int other);
};
Foo a=10;
Foo* pb=new foo(10);
Foo f(10);
Foo a[3]{1,2,3};3.拷贝构造函数
class Foo{Foo(const Fool& other);
};
Foo a=10;
Foo a;
Foo b=a; //自身类型的引用
Foo b(a);
Foo b{a};4.类型转换构造函数
class Foo{Foo(int x);
};
Foo a=10;
访问权限和继承方式
访问权限:4中访问权限,关键字有3种
默认访问权限:class是私有的,struct是公有的
不可访问成员 冻结财产
私有成员private 个人财产
保护成员protected 家族财产
公有成员public 公有财产
继承方式对访问权限的影响:三种继承方式,关键字3个,和访问权限公用一套
私有的和不可访问都是不可访问
继承方式决定最高访问权限
默认继承方式是私有的,最常用的继承方式都是公有继承
成员变量一般都是保护成员(子类访问父类,父类设为家族财产)
空类
class foo{
};
默认构造函数
默认拷贝构造函数:bit-by-bit
默认赋值运算符:bit-by-bit
默认析构函数
非静态成员函数,有一个默认的this指针。
常const
修饰各种类型☞const char* p char const*p char* const p
常函数:修改类的成员函数
常对象只能调用常函数
class Foo
{
void F() const;
};
void Foo::F() const {}
静态static
静态成员属于类
静态成员变量:必须类外初始化,不需要再写static
静态成员函数:静态成员函数没有this指针
静态成员函数:不能访问非静态成员,只能使用静态成员
两种调用方式,通过对象调用,通过类名调用
没有对象,也可以调用静态成员函数
静态成员函数 只能 调用静态成员(静态成员函数、静态成员变量)无this指针
不能调用非静态成员(普通成员变量,普通成员函数)
非静态成员可以调用静态成员?可以
友元friend
破坏封装性。一般,同一模块内部使用友元,模块内部开的后门。
可以访问类的所有成员(只能❌全部、仅仅)
不是成员函数,和访问权限无关。
单向性、不能传递、不能继承。
class Foo{
private: friend void Bar();//不是成员函数,只是声明。
};
互为友元函数
class A{friend class B
};
class B{friend class A
};
第三章
重载
- 运算符重载的本质是函数重载,函数名是operator运算符。
- 重载:是为了代码间接,不是代码复用❌,不是所有运算符能被重载❌。
一般都是成员函数,
两种形式:成员函数重载,全局函数重载(往往被声明友元函数,不是必须是友元函数❌)
输入输出运算符>> <<必须是全局函数重载,声明友元函数。
friend ifstream& operator>>(ifstream& ifs,vertor<*Student>& all>);
friend iostream& operator<<(iostream& ios,const MyString& other);
= () [] ->只能被重载为成员函数
<< >>只能被重载为全局函数,声明为友元函数
前置++返回*this:是&
后置++(int)返回是temp:不能是&
+重载,返回的是局部变量:不能是&
重载为成员函数
- 左操作数必须是当前类型
- 一元运算符不需要参数,当前对象是操作数。
- 二元运算符只要一个参数,代表右操作数,当前对象是左操作数。
- = () [] ->只能被重载为成员函数
类型转换运算符重载
- operator目标类型();
- operator flaot();
- static_cast<目标类型>(表达式);
- explicit关键字,避免默认类型转换
operator float();
static_cast<float>(a);
explicit operator float();
函数运算符的重载
- 函数指针
- 仿函数
- 内置仿函数
- Lambda表达式
- 自定义类型重载<运算符
第四章-子类父类
基类Base(父类)
派生类Derived(子类):子类对象拥有父类的所有成员(但是构造和析构函数也独有)
C++支持多继承
UML的类图:三格矩形,箭头☞表示继承(子类指向父类)
析构函数调用的顺序:基类☞成员对象☞派生类
析构函数调用的顺序:派生类☞成员对象☞基类
class A{};//父类
class B:public A //子类
{A a; //成员对象
};B b(a); //构造:A->a->B 析构:B->a->A
- 子类对象给父类对象赋值✔
- 父类对象给子类对象赋值❌
Base b;//父类
Derived d;//子类
d=b;//❌
b=d ;//父类指针指向子类对象
Base* pb = new Derived;
Base& rb=d;
第五章-virtual多态
- virtual实现机制:虚函数表。(实现动态多态以牺牲性能为代价)
重载调用机制:取决于不同参数列表
隐藏调用机制:取决于变量类型
覆盖调用机制:取决于对象类型(运行结果)
如何调用被隐藏的父类的成员函数(通过Base::Fun,通过域操作符)
同名函数因为上下文不同会有不同的实现的一种机制
静态多态:函数重载实现,在编译阶段完成
需要花费更多编译时间,不会降低运行速度
动态多态:继承+虚函数,运行阶段完成
动态多态以牺牲性能(运行速度)为代价
纯虚函数和抽象类:
纯虚函数:虚函数 函数体=0;//都有,但是方式不一样(2)
定义了纯虚函数的类,叫做抽象类
Java:只有纯虚函数的类,叫做接口interface
抽象类不能实例化对象
- RTTI运行时类型识别:(3)不同种类各自特有的
- typeid()
- dynamic_cast()
class Base {
public:void func() {std::cout << "Base::func()" << std::endl;}
};class Derived : public Base {
public:void func() {std::cout << "Derived::func()" << std::endl;}
};int main() {Derived d;d.Base::func(); // 调用基类的 func()d.func(); // 调用派生类的 func()return 0;
}
// 抽象基类
class Shape {
public:// 纯虚函数声明virtual void draw() const = 0;// 虚析构函数(推荐用于包含虚函数的类)virtual ~Shape() {}
};
//3.各自特有的if (typeid(*p) == typeid(Teacher)){//动态类型转化❗Teacher* pt = dynamic_cast<Teacher*>(p);pt->Xiaban();}else//if (typeid(*p) == typeid(Student)){Student* ps = dynamic_cast<Student*>(p);ps->Game();}
第六章-模板
- 模板编程也叫做泛型编程
- 目的:代码复用
- 函数是为了代码复用,子类继承父类是为了代码复用,模板编程是为了代码复用
- 函数模板,类模板:在指定类型后,变成了模板函数,模板类。
- 函数模板 => 模板函数
- 函数模板可以实例化成多个模板函数
- 高级语言中,1个函数模板,经过编译以后,在二进制代码中,会有对各对应的模板函数。
- template <typename T>(没有分号;)
- 函数类型 函数名(参数列表){函数体}
- 在没有二义性的情况下,函数模板的类型参数可以省略。
- 类模板=>类函数
- 类模板不能隐式调用,函数模板可以。
Template<typename T>
T add(T a, T b){return a+b;} add<int>(1,2); add(1,2);
Add(1,2.3); //二义性
第七章-STL
- STL:Standard template library 标准模板库
- 三大核心:容器、迭代器、算法
- 六大组件: .................、适配器、仿函数、分配器
- 常用容器的内部实现:
- vector:动态数组
- list:双向链表
- map/set:红黑树(平衡树的一种,用于动态查找)
- vector:push_back 和 pop_back和begin 和 end
- 注意:end指向最后一个元素的下一个迭代器[ )是一个左闭右开区间
list:push_back和pop_back和push_front和pop_front- sort不能使用list
vector array deuqe随机访问迭代器- list不支持下标运算符sort不能使用
- map支持,存在插入和修改两种功能
会使用基于范围的for循环,对应的迭代器进行遍历- 基于范围的for循环
- 使用迭代器进行遍历
- for_each()遍历
构造函数:可以调用无参构造函数- vector<int>vi
- vector<int> vi(10);
- vector<int> vi(99,10);
- vector<int>vi(first,last);左闭右开的区间
//迭代器的定义:推到和自动定义- 定义迭代器的两种方式:常规和自动推导
- vector<int>::iterator itr;
- auto itr=vi.begin() //自动推导必须初始化
map<int,int>m;
map<int,int>::iterator itr;
auto itr=map.begin();
算法:
- 容器begin end实参
- sort(first,last,二元谓词)形参
- random_shuffle() 洗牌
- generate_n(back_insetor(),n,[](){});向容器中插入n个元素
- copy(,,ostream_iterator<int>(cout,间隔符));
- accumulate(,,0) 累加和
第八章-文件IO
#include<fstream>ifstream ifs(“data.txt”,ios::in); //文本文件 打开方式
While(!ifs.eof())ifs>>容器;
ifs.close();//控制台的输出运算符的重载:常引用
//输入运算符的重载:引用
ifstream& operator>>(ifstream& in,容器的引用list<Student*>& all){.....;
return in;
}
第九章-异常
- try catch throw干什么?
- try catch:捕获和处理异常
- throw:抛出异常
子函数()
{ //若干层调用的子函数throw(某个类型的异常) //抛出异常
}
主函数
{try
{子函数的调用;
}
catch(类型1)
{
}
catch(类型2)
{
}
//取决于数据的类型
第十章❗
auto自动类型推导
基于范围的for循环
Lambda表达式
面向对象的知识点:
父类指针指向子类对象
唯一不变的是变换,以不变应万变。
父类指针:抽象,稳定。
子类对象:具体,变换。
三大原则:封装变化点、针对接口进行编程,优先使用组合
is-a:继承和派生-代码复用
has-a:成员对象-代码复用
设计模式的来源是建筑设计领域。
SOLID五大原则:
SRP单一职责原则。
OCP开闭原则:对扩展开放,对修改关闭。(增加策略业务逻辑,❌1.增加分支(其实是修改函数,都在一个函数体)2.增加规则-增加类)
LSP里氏替换原则。
ISP接口隔离原则。
DIP依赖倒置原则:高层模块不依赖于底层模块,二者应该依赖于抽象。(高层-抽象类父类-子类_底层模块)
代码复用:函数、继承、组合、模板
使用代码简洁的语法:重载(函数重载,运算符重载),默认参数
实现面向对象:继承、虚函数、父类指针指向子类对象
inline内联函数:小函数、没有循环
Set/Get基本是内联函数
栈里的对象-调用2次构造函数 2次析构函数
class Foo
{
};main()
{Foo* pd=new Foo;//pd在栈里面Foo类型指针,new一个Foo类型的变量堆里面delete pd;Foo d1; //局部变量,对象在栈里面
}
//释放栈,释放栈里的对象,调用对象的析构
void fun(){
****************
}inline void fun(){
****************
}//不是函数调用,直接嵌入函数体中了main()//main函数体积变大了,以牺牲体积,提高运行速度
{#########fun();#####fun();
}
- 单选:30
- 多选:10
- 判断:10
- 填空:20
- 大题:40
相关文章:
期末速成C++【知识点汇总完】
目录 第一章 C特点 命名空间-命名冲突 引用 new和delete 堆和栈 缺省参数 重载/隐藏/覆盖 初始化方式 第二章 面向对象的三大特征 成员变量 成员函数:构造函数和析构函数 访问权限和继承方式 空类 常const 静态static 友元friend 第三章 重…...
从 ELK Stack 到简单 — Elastic Cloud Serverless 上的 Elastic 可观察性
作者:来自 Elastic Bahubali Shetti, Chris DiStasio 宣布 Elastic Cloud Serverless 上的 Elastic Observability 正式发布 — 一款完全托管的可观察性解决方案。 随着组织规模的扩大,一个能够处理分布式云环境的复杂性并提供实时洞察的可观察性解决方…...
手机h5加桌面图标
手机h5应用1,网址浏览器添加到桌面,修改图标 关键代码 <!-- 手机h5加桌面图标 --> <!-- 安卓平台 chrome --> <link relapple-touch-icon-precomposed href<% BASE_URL %>logonew.png> <meta name"mobile-web-app-capab…...
Vue3,什么情况下数据会丢失响应式呢?
一、使用 reactive 定义的数据重新赋值 <template><h1>{{ foo.a }}</h1><h1>{{ bar.a }}</h1><button click"handleClick">点我</button> </template> <script setup> import { ref, reactive } from vuele…...
【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1:D HJK…...
《Java核心技术II》流中的filter、map和flatMap方法
filter、map和flatMap方法 filter filter通过转换产生过滤后的新流,将字符串流转化为只包含长单词的另一个流。 List words ...; Stream longWords words.stream().filter(w->w.length()>12) filter类型是Predicate(谓词,表示动作)类型对象,…...
logback之自定义过滤器
logback有两种过滤器,一种是context中的过滤器叫TurboFilter,是一个全局的过滤器,会影响所有的日志记录。另一种是Appender中的过滤器,只对所在的append有效。两者大同小异,这里我们以Appender的过滤器为例。 &#x…...
【论文阅读笔记】IceNet算法与代码 | 低照度图像增强 | IEEE | 2021.12.25
目录 1 导言 2 相关工作 A 传统方法 B 基于CNN的方法 C 交互方式 3 算法 A 交互对比度增强 1)Gamma estimation 2)颜色恢复 3)个性化初始η B 损失函数 1)交互式亮度控制损失 2)熵损失 3)平滑损失 4)总损失 C 实现细节 4 实验 5 IceNet环境配置和运行 1 下载…...
查看 GitHub 仓库的创建时间
查看 GitHub 仓库的创建时间 1. https://api.github.com/repos/{owner}/{repository}2. curl -s https://api.github.com/repos/{owner}/{repository} | jq .created_atReferences 1. https://api.github.com/repos/{owner}/{repository} REST API endpoints for repositories…...
五种被低估的非常规统计检验方法:数学原理剖析与多领域应用价值研究
在当前的数据分析实践中,研究人员往往过度依赖t检验和方差分析(ANOVA)等传统统计方法。但是还存在多种具有重要应用价值但未受到足够重视的统计检验方法,这些方法在处理复杂的实际数据时具有独特优势。本文将详细介绍五种具有重要…...
mysql重置root密码(适用于5.7和8.0)
今天出一期重置mysql root密码的教程,适用于5.7和8.0,在网上搜索了很多的教程发现都没有效果,浪费了很多时间,尝试了多次之后发现这种方式是最稳妥的,那么废话不多说,往下看: 目录 第一步&…...
【AIGC-ChatGPT职业提示词指令】职业发展的航海指南:在人生的十字路口做出明智抉择
引言 在职业发展的海洋中,每个人都会遇到需要重要抉择的时刻。这些关键节点就像航海中的分岔路口,选择不同的航线可能驶向截然不同的目的地。如何在这些关键时刻做出明智的选择,需要我们既要着眼当下的风向,也要洞察远方的航程。…...
【从零开始入门unity游戏开发之——C#篇39】C#反射使用——Type 类、Assembly 类、Activator 类操作程序集
文章目录 前言一、前置知识1、编译器2、程序集(Assembly)3、元数据(Metadata) 二、反射1、反射的概念2、反射的作用3、反射的核心Type 类3.1 Type 类介绍3.2 不同方法获取 Type3.3 获取type类型所在的程序集的相关信息 4、反射的常…...
如何启动CentOS6远程服务器和进行ssh远程登录?
如何启动CentOS 6远程服务器? 在CentOS 6中,启动远程服务器通常涉及到配置SSH服务和VNC服务,以下是详细的步骤: 配置SSH服务 确认是否安装SSH 首先需要检查系统中是否已经安装了SSH服务,打开终端并输入以下命令&am…...
面向机器学习的Java库与平台
学习Java语言中与机器学习相关的各种库与平台,了解每个库的功能,以及可以用它 们解决的问题。 实现机器学习应用时需要具备的Java环境 Weka:一个通用的机器学习平台 Java机器学习库:一系列机器学习算法 Apache Mah…...
AI大模型语音识别转文字
提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字,也可从特定视频中提取对应音频进行转录成文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…...
GAN对抗生成网络(一)——基本原理及数学推导
1 背景 GAN(Generative Adversarial Networks)对抗生成网络是一个很巧妙的模型,它可以用于文字、图像或视频的生成。 例如,以下就是GAN所生成的人脸图像。 2 算法思想 假如你是《古董局中局》的文物造假者(Generator,生成器)&a…...
LeetCode - 初级算法 数组(旋转数组)
旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,...
目标检测入门指南:从原理到实践
目录 1. 数据准备与预处理 2. 模型架构设计 2.1 特征提取网络原理 2.2 区域提议网络(RPN)原理 2.3 特征金字塔网络(FPN)原理 2.4 边界框回归原理 2.5 非极大值抑制(NMS)原理 2.6 多尺度训练与测试原理 2.7 损失函数设计原理 3. 损失函数设计 4. 训练策略优化 5. 后…...
连接github和ai的桥梁:GitIngest
Git ingest GitIngest - 将任何 Github 仓库转变为适合 LLM 的友好型提示文本 (https://github.com/cyclotruc/gitingest) 输入 Github 地址或者名称,GitIngest 就会提供该仓库的总结、目录结构、仓库内容的文本内容 你可以复制这些文本与 AI 大模型更好地对话...
百度贴吧的ip属地什么意思?怎么看ip属地
在数字化时代,IP地址不仅是网络设备的唯一标识符,更承载着用户的网络身份与位置信息。百度贴吧作为广受欢迎的社交平台,也遵循相关规定,在用户个人主页等位置展示账号IP属地信息。那么,百度贴吧的IP属地究竟意味着什么…...
5.系统学习-PyTorch与多层感知机
PyTorch与多层感知机 前言PyTroch 简介张量(Tensor)张量创建张量的类型数据类型和 dtype 对应表张量的维度变换:张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN(全连结网络&#x…...
wpf 基于Behavior库 的行为模块
Microsoft.Xaml.Behaviors 是一个用于WPF(Windows Presentation Foundation)的行为库,它的主要作用是允许开发者在不修改控件源代码的情况下,为控件添加自定义的行为和交互逻辑。行为库的核心思想是通过定义可重用的行为组件&…...
【一文解析】新能源汽车VCU电控开发——能量回收模块
一、概述 VCU(Vehicle Control Unit,整车控制器)能量回收功能是新能源汽车(如纯电动汽车和混合动力汽车)中非常重要的一个环节。它主要是在车辆减速或制动过程中,将车辆的部分动能转化为电能,并…...
鸿蒙TCPSocket通信模拟智能家居模拟案例
效果图 一、智能家居热潮下的鸿蒙契机 在当下科技飞速发展的时代,智能家居已如浪潮般席卷而来,深刻地改变着我们的生活方式。从能依据环境光线自动调节亮度的智能灯具,到可远程操控、精准控温的智能空调,再到实时监测健康数据的智…...
【Spring Boot 实现 PDF 导出】
Spring Boot 实现 PDF 导出 在Spring Boot应用程序中实现PDF导出功能,可以选择多种库和技术栈。每种方法都有其优缺点,适用于不同的场景。以下是四种常见的方式:iText、Apache PDFBox、JasperReports 和 Thymeleaf Flying Saucer。我将详细…...
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。 这里我们可以加入JavaScript的使…...
leetcode hot 100 前k个高平元素
347. 前 K 个高频元素 已解答 中等 相关标签 相关企业 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 class Solution(object):def topKFrequent(self, nums, k):""":type nums: Lis…...
数据结构漫游记:静态双向链表
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
Object.defineProperty() 完整指南
Object.defineProperty() 完整指南 1. 基本概念 Object.defineProperty() 方法允许精确地添加或修改对象的属性。默认情况下,使用此方法添加的属性是不可修改的。 1.1 基本语法 Object.defineProperty(obj, prop, descriptor)参数说明: obj: 要定义…...
1Panel自建RustDesk服务器方案实现Windows远程macOS
文章目录 缘起RustDesk 基本信息实现原理中继服务器的配置建议 中继服务器自建指南准备服务器安装1Panel安装和配置 RustDesk 中继服务防火墙配置和安全组配置查看key下载&安装&配置客户端设置永久密码测试连接 macOS安装客户端提示finder写入失败hbbs和hbbr说明**hbbs…...
nginx学习之路-windows系统安装nginx
文章目录 1. 下载2. 启动3. 验证参考文档 1. 下载 官方下载地址:https://nginx.org/en/download.html 可以下载windows版本,如nginx-1.26.2.zip。解压后,加入系统变量。 2. 启动 可以使用命令行启动(windows系统自带的cmd可能…...
Paimon_01_241020
1. 概述 1.1. 核心特点 统一批处理和流处理(流和批同一套代码)数据湖能力多种引擎平权变更日志生成丰富的表类型(主键表、append-only,有序的流式读取来代替消息队列)模式演化(schema变更) 1…...
人工智能:变革时代的核心驱动力
求各位观众老爷看一看 先声明一下,该内容由于篇幅过长,可能会有一些地方存在一些小问题请大家谅解 观众老爷们,点个免费的赞和关注呗,您们的支持就是我最大的动力~ 人工智能:变革时代的核心驱动力 一、引言 在当今…...
【机器学习】工业 4.0 下机器学习如何驱动智能制造升级
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 随着科技的飞速发展,工业 4.0 浪潮正席卷全球制造业,而机器学习作为这一变革中的关键技术,正以前…...
数据分析-Excel
数据类型和函数初步 Excel中有文本类型和数值类型–但是无法用肉眼分辨出来isnumber来区分是否是数值类型text和value函数可以完成数值类型以及文本类型的转换单元格第一位输入’方式明确输入的是文本sum函数必须是数值类型 文本连接-and-or-not-if-mod-max函数 字符串的连接…...
Kubernetes第二天
1.pod运行一个容器 1.创建目录 mkdir -p /manifests/pod 2.编写pod资源清单文件 vim 01-myweb.yaml 说明: apiVersion:指的是Api的版本 metadata:资源的元数据 spec:用户期望的资源的运行状态 status:资源实际的运行状态 由于拉取远…...
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持&#x…...
Kerberos用户认证-数据安全-简单了解-230403
hadoop安全模式官方文档:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html kerberos是什么 kerberos是计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。 概念&#…...
大中厂面试经验分享:如何使用消息队列(MQ)解决系统问题
在大中型互联网公司中,消息队列(MQ)作为一种关键的分布式系统组件,广泛应用于解决系统中的高并发、异步处理、解耦等问题。 在面试中,尤其是针对后端工程师或系统架构师的职位,面试官常常会通过询问消息队列…...
c#String和StringBuilder
目录 一,String 1,string的特点: 2,string常用方法 (1)Length (2)Substring() (3)ToUpper() (4)ToLower() (5&…...
【人工智能机器学习基础篇】——深入详解强化学习之常用算法Q-Learning与策略梯度,掌握智能体与环境的交互机制
深入详解强化学习之常用算法:Q-Learning与策略梯度 强化学习(Reinforcement Learning, RL)作为机器学习的一个重要分支,近年来在多个领域取得了显著成果。从棋类游戏的人机对战到自主驾驶汽车,强化学习技术展示了其强大…...
jQuery学习笔记2
jQuery 属性操作 <body><a href"http://www.itcast.cn" title"都挺好">都挺好</a><input type"checkbox" name"" id"" checked /><div index"1" data-index"2">我是div&…...
发现API安全风险,F5随时随地保障应用和API安全
分析数据显示,目前超过90%的基于Web的网络攻击都以API端点为目标,试图利用更新且较少为人所知的漏洞,而这些漏洞通常是由安全团队未主动监控的API所暴露。现代企业需要一种动态防御策略,在风险升级成代价高昂、令人警惕且往往无法…...
移动端如何实现上拉加载
一、理解上拉加载的原理 上拉加载是一种在移动端很常见的交互方式,其原理是当用户在页面上向上滑动(即滚动条接近底部)时,触发一个加载更多数据的操作。这通常涉及到对滚动事件的监听以及判断滚动位置是否达到了触发加载的阈值。…...
the request was rejected because no multipart boundary was found
文章目录 1. 需求描述2. 报错信息3. 探索过程 1. 使用postman 排除后端错误2. 搜索网上的解决方法3. 解决方法 1. 需求描述 想要在前端上传一个PDF 发票,经过后端解析PDF之后,将想要的值自动回填到对应的输入框中 2. 报错信息 org.apache.tomcat.u…...
Android 自定义shell命令
模拟触摸、按键等操作,直接在命令行输入对应命令即可。命令行如何识别并操作此命令,执行操作的是shell程序,还是java程序?是不是可以添加自定义的命令? 以下在Android13的代码中分析input命令 Android系统中使用了一…...
HTML5滑块(Slider)
HTML5 的滑块(Slider)控件允许用户通过拖动滑块来选择数值。以下是如何实现一个简单的滑块组件的详细说明。 HTML5 滑块组件 1. 基本结构 使用 <input type"range"> 元素可以创建一个滑块。下面是基本实现的代码示例: <…...
《SwiftUI 实现点击按钮播放 MP3 音频》
功能介绍 点击按钮时,应用会播放名为 yinpin.mp3 的音频文件。使用 AVAudioPlayer 来加载和播放音频。 关键点: 按钮触发:点击按钮会调用 playAudio() 播放音频。音频加载:通过 Bundle.main.url(forResource:) 加载音频文件。播…...
表单元素(标签)有哪些?
HTML 中的表单元素(标签)用于收集用户输入的数据,常见的有以下几种: 文本输入框 <input type"text">:用于单行文本输入,如用户名、密码等。可以通过设置maxlength属性限制输入字符数&…...