C++核心语法快速整理
前言
欢迎来到我的博客
个人主页:北岭敲键盘的荒漠猫-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::array | std::vector | C 风格数组 |
|---|---|---|---|
| 大小固定 | 是 | 否(动态扩容) | 是 |
| 内存管理 | 自动 | 自动 | 手动(堆分配) |
| 越界检查 | .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 = # // &取地址
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);
相关文章:
C++核心语法快速整理
前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要为学过多门语言玩家快速入门C 没有基础的就放弃吧。 全部都是精华,看完能直接上手改别人的项目。 输出内容 std::代表了这里的cout使用的标准库,避免不同库中的相同命名导致混乱 …...
STM32八股【3】------RAM和片上FLASH
1、RAM和FLASH构成 1.RAM ┌──────────────────────────┐ │ 栈区 (Stack) │ ← 从RAM顶端向下扩展(存储局部变量、函数调用信息) │--------------------------│ │ 堆区 (Heap) │ ← …...
使用HAI来打通DeepSeek的任督二脉
一、什么是HAI HAI是一款专注于AI与科学计算领域的云服务产品,旨在为开发者、企业及科研人员提供高效、易用的算力支持与全栈解决方案。主要使用场景为: AI作画,AI对话/写作、AI开发/测试。 二、开通HAI 选择CPU算力 16核32GB,这…...
深入理解Aider sends a repo map
你提到的这个链接(https://aider.chat/2023/10/22/repomap.html)是 Aider 的官方文档,介绍了一种叫做“Repo Map”(仓库地图)的功能。Aider 是一个 AI 编程辅助工具,主要通过与大语言模型(如 GP…...
【day2】数据结构刷题 栈
一 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的…...
第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略
目录 1. 项目需求 2. 网络选择 2.1 UNet模块 2.2 TransUnet 2.2.1 SE模块 2.2.2 CBAM 2.3 关键代码 3 对比试验 3.1 unet 3.2 transformerSE 3.3 transformerCBAM 4. 结果分析 5. 推理 6. 下载 1. 项目需求 本文需要做的工作是基于CNN和Transformer的心脏左心室…...
云上 Redis 迁移至本地机房
文章目录 摘要在 IDC 搭建读写分离 redis 集群一、环境准备二、部署主从架构1. 安装Redis2. 配置主节点3. 配置从节点4. 所有 Redis 节点设置开机自启动三、部署代理层(读写分离)1. 安装Twemproxy2. 配置Twemproxy3. 配置开机自启动四、高可用配置(哨兵模式)1. 配置哨兵节点…...
zabbix数据库溯源
0x00 背景 zabbix数据库如果密码泄露被登录并新增管理员如何快速发现?并进行溯源? 本文介绍数据库本身未开启access log的情况。 0x01 实践 Mysql 数据库查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…...
ZYNQ的cache原理与一致性操作
在Xilinx Zynq SoC中,Cache管理是确保处理器与外部设备(如FPGA逻辑、DMA控制器)之间数据一致性的关键。Zynq的ARM Cortex-A9处理器包含L1 Cache(指令/数据)和L2 Cache,其刷新(Flush/Invalidate&…...
React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们?
大白话React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们? 在 React 里,useMemo 和 useCallback 这两个 Hook 可有用啦,能帮咱优化组件性能,避免不必要的计算和渲染。下面咱就来详细聊聊它们的作用和使…...
Android笔记之项目引用第三方库(如:Github等)
前言:原生Android开发时引用github上的仓库内容,故出此文。 方式一:使用 JitPack(推荐) 步骤 1:在项目的 build.gradle 文件中添加 JitPack 仓库 打开项目根目录下的 build.gradle 文件,在 a…...
Linux 系统性能优化高级全流程指南
Linux 系统性能优化高级全流程指南 一、系统基础状态捕获 1. 系统信息建档 除了原有的硬件、内核和存储拓扑信息收集,还增加 CPU 缓存、网络设备详细信息等。 # 硬件信息 lscpu > /opt/tuning/lscpu.origin dmidecode -t memory > /opt/tuning/meminfo.or…...
SQL Server——表数据的插入、修改和删除
目录 一、引言 二、表数据的插入、修改和删除 (一)方法一:在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 (二)方法二:使用 SQL 代码进行操作 1.向表中添…...
WPF 布局中的共性尺寸组(Shared Size Group)
1. 什么是共性尺寸组? 在 WPF 的 Grid 布局中,SharedSizeGroup 允许多个 Grid 共享同一列或行的尺寸,即使它们属于不同的 Grid 也能保持大小一致。这样可以保证界面元素的对齐性,提高布局的一致性。 SharedSizeGroup 主要用于需…...
deepSeek-SSE流式推送数据
1、背景 DeepSeek作为当前最火的AI大模型, 使用的时候用户在输入框输入问题,大模型进行思考回答你,然后会有一个逐步显示的过程效果,而不是一次性返回整个答案给前端页面进行展示,为了搞清楚其中的原理,我们…...
【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
Leetcode 3495. Minimum Operations to Make Array Elements Zero
Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接:3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n,从 1 1 1到 n n n当中所有的数字对…...
C#实现自己的Json解析器(LALR(1)+miniDFA)
C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。 读者可在…...
机器学习——KNN数据均一化
在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点: 质押 一 、主要思想 1. 最值归一化&#…...
异步编程与流水线架构:从理论到高并发
目录 一、异步编程核心机制解析 1.1 同步与异步的本质区别 1.1.1 控制流模型 1.1.2 资源利用对比 1.2 阻塞与非阻塞的技术实现 1.2.1 阻塞I/O模型 1.2.2 非阻塞I/O模型 1.3 异步编程关键技术 1.3.1 事件循环机制 1.3.2 Future/Promise模式 1.3.3 协程(Cor…...
哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法
导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理(NLP)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…...
制作Oracle11g Docker 镜像
基于Linux系统,宿主主机要设置如下环境变量,oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…...
Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框
单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的,如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…...
MAC-在使用@Async注解的方法时,分布式锁管理和释放
在使用 @Async 注解的异步方法中管理分布式锁时,需要特别注意 锁的获取、释放与异步执行的生命周期匹配。以下是结合 Spring Boot 和 Redis 分布式锁的实践方案: 1. 为什么需要分布式锁? 异步方法可能被多个线程/服务实例并发执行,若访问共享资源(如数据库、缓存),需…...
Flink启动任务
Flink 以本地运行作为解读,版本1.16.0 文章目录 Flink前言StreamExecutionEnvironmentLocalExecutorMiniCluster启动MiniCluster TaskManagerTaskExecutor提交Task(submitTask) StreamGraph二、使用步骤1.引入库2.读入数据 总结 前言 提示:这里可以添加…...
「低延迟+快速集成:Amazon IVS如何重塑实时互动视频体验?」
引言:实时视频的爆发与开发痛点 随着直播电商、在线教育、云游戏的兴起,实时视频互动成为用户体验的核心。但自建视频服务面临高成本、高延迟、运维复杂等挑战。Amazon IVS(Interactive Video Service)作为亚马逊云科技推出的全托…...
Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯
知识点: 1、安全开发-NodeJS-开发环境&功能实现 2、安全开发-NodeJS-安全漏洞&案例分析 3、安全开发-NodeJS-特有漏洞 node.js就是专门运行javascript的一个应用程序,区别于以往用浏览器解析原生js代码,node.js本身就可以解析执行js代…...
描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画
大白话描述keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画? 嘿,朋友!咱来聊聊 CSS 里超酷的 keyframes 规则。这玩意儿就像是动画的剧本,能让网页元素动起来,就像给它们施了魔法一样&…...
国产达梦(DM)数据库的安装(Linux系统)
目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...
AI日报 - 2025年3月24日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Lyra生物序列建模架构效率惊人 在100生物任务中达最优,推理速度提升高达12万倍 ▎💼 商业动向 | OpenAI用户破4亿,Meta与Reliance探讨AI合作 生态扩展与全…...

