网站建设国内外研究现状/上海整站seo

网站建设国内外研究现状,上海整站seo,动漫制作专业升本能报的专业,羞差视频免费首入口网页前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要为学过多门语言玩家快速入门C 没有基础的就放弃吧。 全部都是精华,看完能直接上手改别人的项目。 输出内容 std::代表了这里的cout使用的标准库,避免不同库中的相同命名导致混乱 …

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

本文主要为学过多门语言玩家快速入门C++

没有基础的就放弃吧。

全部都是精华,看完能直接上手改别人的项目。

输出内容

std::代表了这里的cout使用的标准库,避免不同库中的相同命名导致混乱

std::cout <<输出内容

右侧可以输出代码执行的结果,字符串,数字

可以多段<<进行拼接

std::endl等价于\n,表示结束语句换行

#include <iostream>int main()
{std::cout << 123+456<<"\n";std::cout << "我喜欢"<< 1+1<<"\n";std::cout << "Hello World!\n"<<"我还有一行哦"<< std::endl;std::cout << "你好你好" << std::endl;
}

变量定义

#include <iostream>
#include <string>int main()
{int a = 5; //整形变量std::string b = "Hello World"; //字符串变量float c = 3.14; //浮点型变量std::cout << a << "\n" << b << "\n" << c;}

 运算符

#include <iostream>
#include <string>int main()
{int a = 5; //整形变量std::string b = "Hello World"; //字符串变量float c = 3.14; //浮点型变量std::cout << a + c << '\n'; //输出a+c的值std::cout << a - c << '\n'; //输出a-c的值std::cout << a * c << '\n'; //输出a*c的值std::cout << a / c << '\n'; //输出a/c的值std::cout << a % 2 << '\n'; //输出a对2取模的值std::cout << a++ << '\n'; //输出a的值并将a加1std::cout << a-- << '\n'; //输出a的值并将a减1std::cout << ++a << '\n'; //输出a的值并将a加2std::cout << --a << '\n'; //输出a的值并将a减2}

条件语句

if-else语句

#include <iostream>int main()
{int a = 5; //整形变量if (a > 10) //判断a是否大于10{std::cout << "a大于10" << std::endl; //输出a大于10}else if (a == 10) //判断a是否等于10{std::cout << "a等于10" << std::endl; //输出a等于10}else //如果a不大于10也不等于10{std::cout << "a小于10" << std::endl; //输出a小于10}
}

switch语句

#include <iostream>int main()
{int a = 5; //整形变量switch (a){case 1:std::cout << "a=1" << std::endl;break;case 2:std::cout << "a=2" << std::endl;break;case 3:std::cout << "a=3" << std::endl;break;case 4:std::cout << "a=4" << std::endl;break;case 5:std::cout << "a=5" << std::endl;break;default:std::cout << "a>5" << std::endl;break;}
}

循环语句

while循环

#include <iostream>int main()
{int a = 5; //整形变量while (a < 10) {std::cout << "a is " << a << std::endl;a++;}
}

do-while循环

#include <iostream>int main()
{int a = 5; //整形变量do{a += 10;} while (a < 10);{std::cout << "a is " << a << std::endl;a++;}
}

for循环

#include <iostream>int main()
{int a = 5; //整形变量for (size_t i = 0; i < a; i++){std::cout << "程序执行了 " << i + 1 << "次!" << std::endl;}
}

循环控制关键字

break;
continue

字符串类型变量

看一眼,然后遇到使用的情况直接查。

需要导入库

#include <string>

1. 创建与赋值

std::string s1;             // 空字符串
std::string s2 = "Hello";   // 直接初始化
std::string s3(5, 'a');     // "aaaaa"(重复字符)
s1 = "World";               // 赋值

2. 拼接与追加

s2 += " World";            // 追加 → "Hello World"
s2.append("!");            // 追加 → "Hello World!"
s2.push_back('!');         // 追加单个字符
std::string s4 = s2 + "123"; // 新建拼接字符串

3. 访问元素

char c1 = s2[0];          // 下标访问(不检查越界)
char c2 = s2.at(1);       // 安全访问(越界抛异常)
s2.front() = 'h';         // 首字符(C++11)
s2.back() = 'D';          // 末字符(C++11)

4. 长度与判空

int len = s2.size();      // 字符数量(等价length())
if (s2.empty()) { ... }   // 是否为空

5. 查找与截取

size_t pos = s2.find("World"); // 首次出现位置(未找到返回npos)
std::string sub = s2.substr(6, 5); // 从位置6截取5字符 → "World"

6. 修改内容

s2.insert(5, " C++");    // 在位置5插入 → "Hello C++ World!!"
s2.replace(6, 3, "Hi");  // 替换位置6开始的3字符 → "Hello Hi World!!"
s2.erase(5, 4);          // 删除位置5开始的4字符 → "Hello World!!"
s2.clear();              // 清空字符串

7. 输入输出

std::cout << s2;              // 输出
std::getline(std::cin, s2);   // 读取整行(包括空格)


8. 遍历字符

for (char ch : s2) {        // 范围for循环(C++11)std::cout << ch;
}

9. 比较与判断

if (s2 == "Hello") { ... }   // 直接比较字符串
if (s2.starts_with("He")) { ... } // 是否以某前缀开头(C++20)

10. 大小写转换

#include <algorithm>
// 转大写
std::transform(s2.begin(), s2.end(), s2.begin(), ::toupper);
// 转小写
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);

数组使用

1. 固定大小数组 → std::array

#include <array>
std::array<int, 3> arr = {1, 2, 3}; // 类型安全、可拷贝、自带大小// 访问元素
arr[0] = 10;          // 下标访问(无边界检查)
int val = arr.at(1);  // 安全访问(越界抛异常)// 遍历
for (int num : arr) { // 范围for循环(推荐)std::cout << num;
}// 常用操作
bool empty = arr.empty(); // 是否为空(固定数组总为false)
int size = arr.size();    // 元素数量(3)

2. 动态大小数组 → std::vector

#include <vector>
std::vector<int> vec = {1, 2, 3}; // 动态扩容、内存自动管理// 添加元素
vec.push_back(4);        // 尾部追加(拷贝)
vec.emplace_back(5);     // 尾部追加(直接构造,更高效)// 删除元素
vec.pop_back();          // 删除尾部元素
vec.erase(vec.begin());  // 删除指定位置元素// 预分配内存(减少扩容开销)
vec.reserve(100);        // 预留容量(不改变size)// 遍历(同std::array)
for (int num : vec) {std::cout << num;
}

3. 传统 C 风格数组(不推荐,仅了解)

int arr[3] = {1, 2, 3}; // 栈上分配,大小固定
int* arr_heap = new int[3]{4, 5, 6}; // 堆上分配(需手动delete[])// 访问元素
arr[0] = 10; // 无越界检查(易崩溃)// 遍历
for (int i = 0; i < 3; ++i) {std::cout << arr[i];
}// 缺点:无法直接获取大小、易内存泄漏、不支持拷贝等

4. 关键对比与推荐

特性std::arraystd::vectorC 风格数组
大小固定否(动态扩容)
内存管理自动自动手动(堆分配)
越界检查.at() 方法支持.at() 方法支持
传递参数可拷贝、引用传递可拷贝、引用传递退化为指针
适用场景固定数量元素动态增删元素特殊需求

多用vector,固定数组大小的需求用array。

指针语法

考虑到指针是C类语言特点,可能别的语言没接触过看这个文章:

最通俗的指针类比解释-CSDN博客

一、基础声明与初始化

1.指针声明
推荐写法:数据类型* 指针名*紧贴类型,增强可读性)

int* pInt;         // 推荐:强调int*是一个类型
double* pDouble;   // 明确指向double的指针

2.初始化规范

int* p = new int(10);  // 动态初始化(需配对delete)
  • 必须初始化:int val = 5; int* p = &val;
  • 未指向对象时置空:int* p = nullptr

二、核心操作

1.取地址(&)与解引用(*)

int num = 42;
int* p = &num;     // &取地址
cout << *p;        // *解引用 → 输出42
*p = 100;          // 通过指针修改原值

2.动态内存管理(优先用智能指针)

  • 手动管理(需严格配对)

    int* arr = new int[5]{1,2,3}; // 动态数组
    delete[] arr;  // []必须与new[]配对
    
  • 智能指针(推荐)

    #include <memory>
    std::unique_ptr<int> uPtr = std::make_unique<int>(10);  // 独占所有权
    std::shared_ptr<int> sPtr = std::make_shared<int>(20); // 共享所有权
    

三、常用场景规范

数组操作

  • 数组名即首地址:int arr[3] = {1,2,3}; int* p = arr;
  • 传递数组到函数:
    void printArray(int* arr, int size) {  // 必须传大小for(int i=0; i<size; ++i) cout << arr[i];  // 等价*(arr+i)
    }
    

函数参数传递

  • 修改原对象时使用指针参数:

    void swap(int* a, int* b) {int tmp = *a;*a = *b;*b = tmp;
    }
    

四、安全实践

const修饰

const int* p1;     // 指向常量(值不可改)
int* const p2;     // 指针常量(地址不可改)
const int* const p3; // 双常量

避免常见错误

int* p = new int(5);
delete p;     // 正确释放
p = nullptr;  // 避免野指针
  • 禁止解引用空指针
  • 数组越界访问
  • 悬垂指针(释放后仍访问)

函数

函数定义:

写到主函数上面,或者声明函数。

要规定返回值。

 常规写法

#include <iostream>
#include <string>//写到上边void student(){std::string name = "张三";int age = 18;std::cout << "姓名:" << name << std::endl;
}int main()
{student();
}
#include <iostream>
#include <string>//写到下面,但是声明
void student();int main()
{student();
}void student() {std::string name = "张三";int age = 18;std::cout << "姓名:" << name << std::endl;
}
#include <iostream>
#include <string>//默认=李四及设置默认值
void student(std::string username="李四");int main()
{student("张三");student();
}void student(std::string username) {std::string name = username;int age = 18;std::cout << "姓名:" << name << std::endl;
}

传址传参

函数内对变量的操作会直接影响到函数外的相应变量。

#include <iostream>
#include <string>//默认=李四及设置默认值
void student(std::string &username);int main()
{std::string name = "张三";student(name);std::cout << name << std::endl;
}void student(std::string &username) {username = "李四";
}

函数重载

相同函数名,不同返回值,不同参数类型,根据传参执行对应函数。

#include <iostream>
#include <string>//默认=李四及设置默认值
void student(std::string& username);
void student(int& name);int main()
{std::string name = "张三";student(name);std::cout << name << std::endl;int age = 1;student(age);std::cout << age << std::endl;
}void student(std::string &username) {username = "李四";
}void student(int &name) {name = 789;
}

数学计算

大体看一遍!都带好了目录,要用的时候直接点到对应位置查阅!!

使用需要导入cmath库

#include <cmath>

1. 基础计算

double a = std::abs(-3.5);  // 绝对值 → 3.5(兼容整型/浮点)
double b = std::fmod(7.5, 3); // 浮点取余 → 1.5(处理循环进度)

2. 幂与根

double p = std::pow(2, 3);  // 2的3次方 → 8(如计算缩放比例)
double s = std::sqrt(16);   // 平方根 → 4(如物理引擎计算距离)
double c = std::cbrt(27);   // 立方根 → 3(3D空间计算)

3. 取整处理

double up = std::ceil(3.2);   // 向上取整 → 4(如分页计算)
double down = std::floor(3.8); // 向下取整 → 3(网格对齐)
double rd = std::round(3.5);   // 四舍五入 → 4(UI显示)
double cut = std::trunc(3.8);  // 截断小数 → 3(取整数部分)

4. 浮点数检查

bool nan = std::isnan(0.0/0.0); // 是否为非数字(NaN检查)
bool inf = std::isinf(1e300);  // 是否为无穷大(溢出处理)
bool valid = std::isfinite(3.14); // 是否为有效数(安全校验)

5. 极值与运算

double max_v = std::fmax(3, 5);  // 最大值 → 5(限制范围)
double min_v = std::fmin(3, 5);  // 最小值 → 3(约束边界)
double dist = std::hypot(3, 4);  // 直角斜边 → 5(2D/3D距离计算)

6. 特殊值生成

double nan_val = NAN;        // 表示非数字(需C++11)
double inf_val = INFINITY;   // 正无穷大(如超阈值标记)

面向对象

基础创建与公有私有

创建类分为公共和私有,公共能在类外使用,私有仅能在类内使用。

#include <iostream>
#include <string>class MyClass
{
public:std::string name="张三";int age = 18;private:std::string address = "北京";int phone = 123456789;};int main()
{MyClass i;std::cout << i.name << std::endl;std::cout << i.age << std::endl;//std::cout << i.address << std::endl;
}

std::cout << i.address << std::endl;

使用了私有的属性,无法调用。

 方法定义

#include <iostream>
#include <string>class MyClass
{
public:std::string name="张三";int age = 18;void print(){std::cout << "姓名:" << name << std::endl;std::cout << "年龄:" << age << std::endl;}private:std::string address = "北京";int phone = 123456789;};int main()
{MyClass i;i.print();
}

外部实现

内部定义函数,外部实现函数。

#include <iostream>
#include <string>class MyClass
{
public:std::string name="张三";int age = 18;void print();private:std::string address = "北京";int phone = 123456789;};void MyClass::print()
{std::cout << "姓名:" << name << std::endl;std::cout << "年龄:" << age << std::endl;
}int main()
{MyClass i;i.print();
}

构造函数

与类名相同的方法,当我们创建对象的时候就会执行方法。

实现的时候不要写返回值类型。

#include <iostream>
#include <string>class MyClass
{
public:std::string name;int age;MyClass(std::string name,int age);void printInfos();
private:std::string address = "北京";int phone = 123456789;
};MyClass::MyClass(std::string name, int age)
{this->name = name;this->age = age;
}void MyClass::printInfos()
{std::cout << "姓名:" << name << std::endl;std::cout << "年龄:" << age << std::endl;
}int main()
{MyClass i("张三",18);i.printInfos();
}

类继承

可以多继承

#include <iostream>
#include <string>class Animal
{
public:int age = 10;
private:};class Animal2
{
public:int age2 = 11;
private:};class Dog : public Animal, public Animal2
{
public:std::string name = "dog";
};void main()
{Dog dog;std::cout << dog.age << std::endl;std::cout << dog.name << std::endl;std::cout << dog.age2 << std::endl;
}

类多态

子类可以修改父类方法

#include <iostream>
#include <string>class Animal
{
public:void print(){std::cout << "i am Animal" << std::endl;}
private:};class Cat : public Animal
{
public:void print(){std::cout << "i am Cat" << std::endl;}
private:};class Dog : public Animal
{
public:void print(){std::cout << "i am Dog" << std::endl;}
};void main()
{Dog dog;Cat cat;dog.print();cat.print();
}

文件操作

文件的创建与写入。

1. 核心文件流类

  • #include <fstream>
  • ofstream: 写入文件(输出文件流)
  • ifstream: 读取文件(输入文件流)
  • fstream: 读写文件(需指定模式)

2. 基本文件操作

打开/关闭文件
// 写入文件
ofstream outFile("data.txt");      // 默认覆盖模式
outFile.close();// 读取文件
ifstream inFile("data.txt");
inFile.close();// 指定打开模式(如追加)
ofstream logFile("log.txt", ios::app);
常用打开模式
模式标志说明
ios::in读模式(默认ifstream)
ios::out写模式(默认ofstream)
ios::app追加写入(不覆盖原内容)
ios::binary二进制模式

3. 文本文件操作

写入文本
ofstream out("data.txt");
if (out.is_open()) {out << "Line 1" << endl;       // 写入并换行out << "Value: " << 42 << "\n";// 混合数据类型
}
读取文本
ifstream in("data.txt");
string line;
int value;if (in) {while (getline(in, line)) {     // 逐行读取cout << line << endl;}in.seekg(0);                   // 重置文件指针到开头in >> value;                    // 读取单个值(空格分隔)
}

4. 二进制文件操作

写入二进制数据
struct Person {char name[20];int age;
};Person p = {"Alice", 30};ofstream out("data.bin", ios::binary);
if (out) {out.write((char*)&p, sizeof(Person));  // 直接写入内存数据
}
读取二进制数据
ifstream in("data.bin", ios::binary);
Person p;if (in) {in.read((char*)&p, sizeof(Person));    // 读取到内存cout << p.name << " " << p.age << endl;
}

5. 文件指针控制

fstream file("data.txt");// 获取当前读指针位置
streampos pos = file.tellg();// 移动读指针到第10字节
file.seekg(10, ios::beg);// 移动写指针到文件末尾
file.seekp(0, ios::end);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何让自动驾驶汽车“看清”世界?坐标映射与数据融合概述

在自动驾驶领域,多传感器融合技术是实现车辆环境感知和决策控制的关键。其中,坐标系映射和对应是多传感器融合的重要环节,它涉及到不同传感器数据在统一坐标系下的转换和匹配,以实现对车辆周围环境的准确感知。本文将介绍多传感器融合中坐标系映射和对应的数学基础和实际应…

移除idea External Liraries 中maven依赖包

问题背景 扩展包里面不停的出现已经在POM文件注释的包&#xff0c;其实是没有查询到根源位置。 在IDEA插件中搜索Maven Helper 点击pom.xml文件 会出现扩展插件 定位之后在pom中添加exclusions&#xff0c;如下代码 <dependency><groupId>com.disney.eva.framewo…

AI革命!蓝耘携手海螺AI视频,打造智能化视频新纪元

AI革命&#xff01;蓝耘携手海螺AI视频&#xff0c;打造智能化视频新纪元 前言 在这个信息爆炸的时代&#xff0c;视频已经成为我们获取信息、学习新知识的重要方式。而随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI与视频内容的结合为我们带来了全新的…

ElasticSearch 可观测性最佳实践

ElasticSearch 概述 ElasticSearch 是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理 PB 级别&#xff08;大数据时代&#xff09;的数据。ES 也使用 Java 开…

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的&#xff0c;如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…

【Java】TCP网络编程:从可靠传输到Socket实战

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…

html5炫酷的科技感3D文字效果实现详解

炫酷的科技感3D文字效果实现详解 这里写目录标题 炫酷的科技感3D文字效果实现详解项目概述核心技术实现1. 3D文字效果2. 故障艺术效果&#xff08;Glitch Effect&#xff09;3. 动态网格背景4. 扫描线效果5. 粒子效果 性能优化考虑技术难点与解决方案项目总结扩展优化方向 项目…

车道保持中车道线识别

需要让小车保持车道行驶&#xff0c;首先需要进行车道线识别。 也可参看论文&#xff08;上传到资源里&#xff09;&#xff1a;自动驾驶汽车车道检测与预测的技术解析-基于图像处理和Hough变换的方法 1 车道识别流程 想进行车道线识别&#xff0c;并且希望在图像中选择一个特…

英伟达有哪些支持AI绘画的 工程

英伟达在AI绘画领域布局广泛&#xff0c;其自研工具与第三方合作项目共同构建了完整的技术生态。以下是其核心支持AI绘画的工程及合作项目的详细介绍&#xff1a; 一、英伟达自研AI绘画工具 1. GauGAN系列 技术特点&#xff1a;基于生成对抗网络&#xff08;GAN&#xff09;&…

驱动开发的引入

1.引入 Linux内核的整体架构本就非常庞大&#xff0c;其包含的组件也非常多。而我们怎样把需要的部分都包含在内核中呢? 一种方法是把所有需要的功能都编译到Linux内核中。这会导致两个问题&#xff0c;一是生成的内核会很大&#xff0c;二是如果我们要在现有的内核中新增或删…

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解&#xff0c;跨进程通信会经常使用&#xff0c;这里就不展开讲解原理跨进程通信的方式了&#xff0c;最近项目换成kts的方式&#xff0c;于是把aidl也换成了统一的方式&#xff0c;其中遇到了很多问题&#xff0c;这里…

物化视图详解:数据库性能优化的利器

物化视图&#xff08;Materialized View&#xff09;作为数据库性能优化的核心手段&#xff0c;通过预计算和存储查询结果&#xff0c;显著提升了复杂查询的效率。本文将深入剖析物化视图的工作原理、应用场景及最佳实践&#xff0c;帮助企业在合适的场景中充分发挥其性能优势。…

快速入手:Nacos融合SpringCloud成为注册配置中心

快速入手&#xff1a;Nacos融合SpringCloud成为注册配置中心 前言安装Nacos项目搭建添加配置启动类添加注解运行项目服务调用RestTemplate 模式FeignClient 模式 Gateway 网关 前言 Spring Cloud是一系列框架的集合&#xff0c;提供了微服务架构下的各种解决方案&#xff0c;如…

Python | 如何在Pandas中删除常量列

在数据分析中&#xff0c;经常会遇到数据集中始终具有常量值的列&#xff08;即&#xff0c;该列中的所有行包含相同的值&#xff09;。这样的常量列不提供有意义的信息&#xff0c;可以安全地删除而不影响分析。 如&#xff1a; 在本文中&#xff0c;我们将探索如何使用Pyth…

5.高频加热的原理与常用集成电路介绍

一、高频加热的类型 利用高频电源加热通常由两种方法&#xff1a;电介质加热&#xff08;被加热物体绝缘&#xff09;与感应加热&#xff08;被加热物体导电&#xff09;&#xff0c;详细解释如下&#xff1a; 电介质加热&#xff08;利用高频电压的高频电场导致物体自身分子摩…

【中文翻译】第9章-The Algorithmic Foundations of Differential Privacy

由于GitHub项目仅翻译到前5章&#xff0c;我们从第6章开始通过大语言模型翻译&#xff0c;并导出markdown格式。 大模型难免存在错漏&#xff0c;请读者指正。 教材原文地址&#xff1a;https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 9 差分隐私与计算复杂度 到目…

【AI大模型】搭建本地大模型GPT-NeoX:详细步骤及常见问题处理

搭建本地大模型GPT-NeoX:详细步骤及常见问题处理 GPT-NeoX是一个开源的大型语言模型框架,由EleutherAI开发,可用于训练和部署类似GPT-3的大型语言模型。本指南将详细介绍如何在本地环境中搭建GPT-NeoX,并解决过程中可能遇到的常见问题。 1. 系统要求 1.1 硬件要求 1.2 软…

Unity跨平台构建快速回顾

知识点来源&#xff1a;人间自有韬哥在&#xff0c;豆包 目录 一、发布应用程序1. 修改发布必备设置1.1 打开设置面板1.2 修改公司名、游戏项目名、版本号和默认图标1.3 修改 Package Name 和 Minimum API Level 2. 发布应用程序2.1 配置 Build Settings2.2 选择发布选项2.3 构…

低配电脑畅玩《怪物猎人:荒野》,ToDesk云电脑优化从30帧到144帧?

《怪物猎人&#xff1a;荒野&#xff08;Monster Hunter Wilds&#xff09;》自2025年正式发售以来已取得相当亮眼的成绩&#xff0c;仅用三天时间便轻松突破800万销量&#xff0c;目前顺利蝉联周榜冠军&#xff1b;凭借着开放世界的宏大场景和丰富的狩猎玩法&#xff0c;该游戏…

Flink基础简介和安装部署

文章目录 一、Flink基础简介1、什么是Flink2、Flink流处理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上传Flink安装包②启动交互窗口③提交任务测试④访问WebUI页面查看④退出停止集群 一、Flink基础简介 1、什么是Flink Flink是⼀个分布式&#…