Modern C++(一)基本概念
1、基本概念
1.1、注释
注释在翻译阶段3会被替换为单个空白字符从程序中移除
1.2、名字与标识符
标识符是一个由数字、下划线、大小写字符组成的任意长度序列。有效的标识符首个字符必须是以A-Z、a-z、下划线开头,。有效的标识符其他字符可以是0-9、A-Z、a-z、下划线。
标识符可以用来命名对象、引用、函数、枚举项、类型、类成员、命名空间、模板、模板特化、形参包(C++11 起)、goto 标号,以及其他实体。
1.3、类型
C++类型系统由以下类型组成:
- 基础类型
- void
- std::nullptr_t
- 算数类型
- bool
- 字符类型:char、signed char、unsigned char、char16_t、char32_t、wchar_t
- 有符号整数类型:signed char、short int、int、long int、long long int
- 无符号整数类型:
- 浮点数类型:float、double、long double
- 复合类型
- 引用类型:
- 左值引用类型
- 右值引用类型
- 指针类型
- 指向成员的指针(成员指针)类型
- 数组类型
- 函数类型
- 枚举类型(有/无作用域)
- 类类型(非联合/联合体类型)
- 引用类型:
标量类型:标量类型变量一次仅存储一个值。算术类型、枚举类型、指针类型、成员指针类型、std::nullptr_t都是标量类型
1.3.1、隐式生存期类型
隐式生存期类型是C++20引入的概念,无需显式调用构造函数或使用new表达式,对象的生存期(lifetime)可以隐式开始。
普通生存期类型:
class Person {
public:Person(const std::string& name) : name_(name) {std::cout << "构造: " << name_.c_str() << std::endl;}~Person() {std::cout << "析构: " << name_.c_str() << std::endl;}std::string name_;
};int main()
{void *mem = malloc(sizeof(Person));// 未定义行为!必须先构造再使用// static_cast<Person*>(mem)->name_ = "Alice";Person* p = new (mem) Person("Alice"); // 调用构造函数p->~Person(); // 显式调用析构函数std::free(mem); // 释放内存
}
隐式生存期类型:
struct Point {int x;int y;
};int main()
{void* memory = std::malloc(sizeof(Point)); // 分配内存// 可以直接使用,无需构造!Point* p = static_cast<Point*>(memory);p->x = 10; // 合法:内存已被视为Point对象p->y = 20;free(memory); // 释放内存(自动析构,无需显式调用析构函数)
}
隐式生存期类型允许:直接操作未构造的内存,无需显式销毁对象,可直接覆盖内存。优点是预先分配大块内存(内存池),按需创建对象。避免频繁调用构造 / 析构函数,提升内存操作效率。
隐式生存期类型:
- 标量类型
- 结构体 / 类需满足:无用户定义的构造函数、析构函数。所有成员和基类都是隐式生存期类型。
1.3.2、静态类型
静态类型(Static Typing)是一种编程语言特性,它要求在编译时明确每个变量、表达式和函数的类型。
1.3.3、动态类型
动态类型(Dynamic Typing)是一个相对概念,主要指程序在运行时确定对象的实际类型,而非编译时。C++ 作为静态类型语言,其核心类型系统是静态的(编译时确定类型),有以下几个机制提供了有限的动态类型特性:
- 多态:基类指针指向派生类对象
- RTTI(运行时类型信息)
1.4、对象
1.4.1、对齐
每个对象类型都具有被称为对齐要求的性质,它是一个非负整数(类型是 std::size_t,总是 2 的幂),可以使用alignof和std::alignment_of查询类型的对齐要求,也可以使用alignas要求对齐数。
class Person {
public:Person(const std::string& name) : name_(name) {}
private:std::string name_;
};int main()
{cout << alignof(Person) << endl;cout << std::alignment_of<Person>::value << endl;
}
1.4.2、声明点
声明点(Point of Declaration)是一个编译期概念,它指定了标识符(如变量、函数、类等)在代码中正式生效的位置。
- 对于变量和函数参数:声明点位于标识符名称之后,初始化表达式(如果有)之前
#include <iostream>int main(int argc, char **argv) {int x = 1;const int y = 2;{int x = x; // 内部x的作用域在初始化器之前就开始了,所以内部x不能被外部x的值初始化std::cout << "x = " << x << std::endl;int y[y] = {}; // 内部y的作用域在y[y]之后,所以内部的y是一个包含2个int的数组}return 0;
}
- 类和类模板,枚举的声明点位于该标识符之后:
struct S : public A{ // S 的作用域从冒号开始}enum E : int // E 的作用域从冒号开始,因此内部可以使用枚举类型E
{A = sizeof(E)
};
- 类型别名或别名模板声明的声明点紧随该别名代表的类型标识之后
using T = int; // 外部 T 的作用域从分号开始
{using T = T*; // 内部 T 的作用域从分号开始,// 但分号前还在外部 T 的作用域中,// 因此等同于 T = int*
}
- 对于函数:声明点位于函数名称之后,形参列表之前
void func(int x) { // func的声明点在此处// 函数体中可使用func(如递归调用)
}
1.4.3、生存期
对象的生存期(Lifetime) 是指对象从创建(存储被分配且初始化完成)到销毁(存储被释放或重用)的时间段。理解对象生存期对于避免内存泄漏、悬空指针和资源管理至关重要。
生存期:当对象获取存储并初始化完成后生存期开始。对象的生存期在以下几个时刻结束:
- 非类类型:销毁该对象时
- 类类型:析构函数调用开始时
- 对象占据的存储被释放,或者被其他对象重用
#include <iostream>class A {
public:A() {a = 10;}~A(){}void print() {std::cout << "A: a = "<< a << std::endl;}int a;
};class B {
public:int c;B() {c = 1;}
};void func() {A a;a.~A();new (&a) B;a.print();
}int main(int argc, char **argv) {func();std::cout << "test" << std::endl;return 0;
}
在上述代码func函数里,我们手动调用了a的析构函数,对象a的生命周期结束了,该对象占用的存储还在,但它已经不再是一个有效的对象,后续的print调用实际上时一个未定义的行为。
栈上的内存回收是由操作系统自动完成的,当对象的生命周期结束时,操作系统并不会立即将该对象所占用的内存标记为可用,而是等到整个栈帧(通常对应一个函数调用)结束时才会回收栈上的内存。因此,在对象的生命周期结束后,其所在的内存仍然存在,只是该内存已经不再属于一个有效的对象。
所以析构函数调用后,我们还可以重用a的内存。
生存期分类:
- 自动生存期:局部变量(非static),从定义处开始,到离开作用域时结束。
- 静态生存期:全局变量、static局部变量、static成员,从程序启动开始,到程序结束结束。
- 动态生存期:通过new/new[]分配的对象,从new成功开始,到delete/delete[]结束。
- 线程局部生存期:thread_local变量,与线程绑定(线程启动时开始,线程结束时结束)。
访问生存期外的对象 或者 重用存储前未结束生存期会导致未定义行为(UB)。
int* p = new int(10);
delete p;
*p = 20; // UB:p指向的对象已销毁struct S { ~S() {} };
S* s = new S;
new (s) S; // UB:原S的生存期未显式结束(需先调用析构)
1.5、声明与定义
声明(Declaration) 和 定义(Definition) 是两个核心概念,它们的区别直接影响代码的编译和链接过程。
1.5.1、声明
声明的主要作用是向编译器介绍某个标识符(如变量、函数、类等)的存在,告知编译器该标识符的名称、类型和一些基本属性,但并不为其分配内存或实现具体的功能。
声明的用途是解决编译时的符号引用。
以下情况是声明
- 变量声明:用extern关键字且不带初始化器
extern const int a;
- 类定义中的非 inline(C++17 起) 静态数据成员的声明
struct S
{int n; // 定义 S::nstatic int i; // 声明 S::iinline static int x; // 定义 S::x
}; // 定义 S
int S::i; // 定义 S::i
- 函数声明:仅提供签名
void foo(int a);
- 类/类型声明:
class MyClass;
enum Color : int;
- typedef 声明,using 声明
typedef S S2; // 声明但不定义 S2(S 可以是不完整类型)
using S2 = S; // 声明但不定义 S2(S 可以是不完整类型)
using N::d; // 声明,引入一个已存在的名称,所以N::d必须已经被声明
重要:声明可多次重复(同一作用域内允许多次声明),但是声明必须完全一致
extern int x; // 声明1
extern double x; // 错误:类型不一致
函数声明可能分散在多个头文件中,最终在源文件中定义
// utils.h
void helper();// math.h
void helper(); // 重复声明(合法)// utils.cpp
void helper() {} // 唯一定义
1.5.2、定义
定义是为标识符分配存储空间或提供完整实现。每个标识符必须有且仅有一个定义(One Definition Rule, ODR)。
定义的用途是解决链接时的具体实现。
- 变量定义:
int x = 42; // 定义并初始化x(分配内存)
- 函数定义
void foo(int a) { // 函数定义std::cout << a;
}
- 类定义:完整描述成员和方法。
class MyClass {
public:void method() {}
};
相关文章:
Modern C++(一)基本概念
1、基本概念 1.1、注释 注释在翻译阶段3会被替换为单个空白字符从程序中移除 1.2、名字与标识符 标识符是一个由数字、下划线、大小写字符组成的任意长度序列。有效的标识符首个字符必须是以A-Z、a-z、下划线开头,。有效的标识符其他字符可以是0-9、A-Z、a-z、下…...
Apache HttpClient 5 用法-Java调用http服务
Apache HttpClient 5 核心用法详解 Apache HttpClient 5 是 Apache 基金会推出的新一代 HTTP 客户端库,相比 4.x 版本在性能、模块化和易用性上有显著提升。以下是其核心用法及最佳实践: 一、添加依赖 Maven 项目: <dependency><…...
Python中plotext 库详细使用(命令行界面中直接绘制各种图形)
更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 plotext概述1.1 plotext介绍1.2 安装二、基本用法2.1 简单绘图2.2 散点图2.3 折线图2.4 条形图2.5 直方图2.6 标题和坐标轴标签2.7 网格和坐标轴2.8 颜色和样式2.9 多图叠加三、高级功能3.1 多图绘制3.2 对数坐标3.3…...
【Java Web】速通JSON
参考笔记:JavaWeb 速通JSON_java webapi调用传json与head-CSDN博客 目录 1.JSON基本介绍 2.JSON串的格式 3.JSON在客户端/浏览器的使用 3.1 JavaScript对象和JSON串的相互转换 3.2 案例演示 4.JSON在服务端的使用 4.1 基本说明 4.2 应用场景 4.2.1 JSON字…...
Ubuntu 20.04 LTS 中部署 网页 + Node.js 应用 + Nginx 跨域配置 的详细步骤
Ubuntu 20.04 LTS 中部署 网页 Node.js 应用 Nginx 跨域配置 的详细步骤 一、准备工作1、连接服务器2、更新系统 二、安装 Node.js 环境1、安装 Node.js 官方 PPA(用于获取最新稳定版):2、安装 Node.js 和 npm(LTS 长期支持版本…...
java中XML的使用
文章目录 什么是XML特点XML作用XML的编写语法基本语法特殊字符编写 约束XML的书写格式DTD文档schema文档属性命名空间XML命名空间的作用 解析XML的方法DOM解析XMLDOM介绍DOM解析包:org.w3c.dom常用接口DOM解析包的使用保存XML文件添加DOM节点修改/删除DOM节点 S…...
Spark SQL 之 Analyzer
Spark SQL 之 Analyzer // Special case for Project as it supports lateral column alias.case p: Project =>val resolvedNoOuter = p.projectList.map(resolveExpressionByPlanChildren(_, p...
Java - Junit框架
单元测试:针对最小的功能单元(方法),编写测试代码对该功能进行正确性测试。 Junit:Java语言实现的单元测试框架,很多开发工具已经集成了Junit框架,如IDEA。 优点 编写的测试代码很灵活,可以指某个测试方法…...
麒麟系统ARM64架构部署mysql、jdk和java项目
麒麟系统ARM64架构部署mysql、jdk和java项目 一、mysql8的安装 操作步骤: 先下载mysql安装包 下载地址:https://downloads.mysql.com/archives/community/ 由于官网里,mysql5.7以及更低版本不支持arm版本的,只能安装mysql8。…...
修复“ImportError: DLL load failed while importing lib: 找不到指定的程序”笔记
#工作记录 一、问题描述 在运行CosyVoice_For_Windows项目时,出现以下报错: Traceback (most recent call last): File "D:\ProgramData\anaconda3\envs\CosyVoice\Lib\pydoc.py", line 457, in safeimport module __import__(path) …...
vllm量化03—INT4 W4A16
本系列基于Qwen2.5-7B,学习如何使用vllm量化,并使用benchmark_serving.py、lm_eval 测试模型性能和评估模型准确度。 测试环境为: OS: centos 7 GPU: nvidia l40 driver: 550.54.15 CUDA: 12.3本文是该系列第3篇——INT4 W4A16 一、量化 f…...
VScode各文件转化为PDF的方法
文章目录 代码.py文件.ipynb文本和代码夹杂的文件方法 1:使用 VS Code 插件(推荐)步骤 1:安装必要插件步骤 2:安装 `nbconvert`步骤 3:间接导出(HTML → PDF)本文遇见了系列错误:解决方案:问题原因步骤 1:降级 Jinja2 至兼容版本步骤 2:确保 nbconvert 版本兼容替代…...
AI日报 · 2025年5月15日|GPT-4.1 登陆 ChatGPT
AI日报 2025年5月15日|GPT-4.1 登陆 ChatGPT 1、OpenAI 在 ChatGPT 全面开放 GPT-4.1 与 GPT-4.1 mini 北京时间 5 月 14 日晚,OpenAI 在官方 Release Notes 中宣布:专为复杂代码与精细指令场景打造的 GPT-4.1 正式加入 ChatGPT࿰…...
高效管理多后端服务:Nginx 配置与实践指南
在现代的 Web 开发和运维中,一个系统往往由多个后端服务组成,每个服务负责不同的功能模块。例如,一个电商网站可能包括用户服务、订单服务和支付服务,每个服务都运行在独立的服务器或容器中。为了高效地管理这些服务并提供统一的访…...
从代码学习深度学习 - 实战 Kaggle 比赛:图像分类 (CIFAR-10 PyTorch版)
文章目录 前言1. 读取并整理数据集1.1 读取标签文件1.2 划分训练集和验证集1.3 整理测试集1.4 执行数据整理2. 图像增广2.1 训练集图像变换2.2 测试集(和验证集)图像变换3. 读取数据集3.1 创建 Dataset 对象3.2 创建 DataLoader 对象4. 定义模型4.1 获取 ResNet-18 模型4.2 损…...
什么是路由器环回接口?
路由器环回接口(LoopbackInterface)是网络设备中的一种逻辑虚拟接口,不依赖物理硬件,但在网络配置和管理中具有重要作用。以下是其核心要点: 一、基本特性 1.虚拟性与稳定性 环回接口是纯软件实现的逻辑接口&#x…...
【高频面试题】LRU缓存
文章目录 1 相关前置知识(OS)2 面试题 16.25. LRU 缓存2.1 题面2.2 示例2.3 解法1 (双端队列哈希表)思路 2.4 解法2思路 3 参考 1 相关前置知识(OS) 为什么需要页面置换算法:当进程运行时&…...
Golang
本文来源 :腾讯元宝 Go语言(又称Golang)是由Google开发的一种现代编程语言,自2009年发布以来,因其简洁性、高性能和内置并发支持而广受欢迎。以下是关于Go语言的核心特点和优势的总结: 1. 核心特点…...
20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤
20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤 2025/5/15 19:55 百度:intel 集成显卡 NVIDIA 配置成为 总是用独立显卡 百度为您找到以下结果 ?要将Intel集成显卡和NVIDIA独立显卡配置为总是使用独立显卡,可以通过以下步骤实现?ÿ…...
『已解决』Python virtualenv_ error_ unrecognized arguments_--wheel-bundle
📣读完这篇文章里你能收获到 🐍 了解 virtualenv 参数错误的原因及解决方案📦 学习如何正确配置 Python 虚拟环境 文章目录 前言一、问题描述1.1 错误现象1.2 影响范围 二、问题分析2.1 根本原因 三、解决方案3.1 兼容处理3.2 完整解决方案 …...
使用 Apache POI 生成 Word 文档
创建一个包含标题、段落和表格的简单文档。 步骤 1:添加依赖 确保你的项目中已经添加了 Apache POI 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添加以下内容: <dependency><groupId>org.apache.poi</groupId>...
表记录的检索
1.select语句的语法格式 select 字段列表 from 表名 where 条件表达式 group by 分组字段 [having 条件表达式] order by 排序字段 [asc|desc];说明: from 子句用于指定检索的数据源 where子句用于指定记录的过滤条件 group by 子句用于对检索的数据进行分组 ha…...
【PX4飞控】在 Matlab Simulink 中使用 Mavlink 协议与 PX4 飞行器进行交互
这里列举一些从官网收集的比较有趣或者实用的功能。 编写 m 脚本与飞行器建立 UDP 连接,并实时可视化 Mavlink 消息内容,或者读取脚本离线分析数据。不光能显示 GPS 位置或者姿态等信息的时间曲线,可以利用 Matlab Plot 功能快速定制化显示一…...
文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
https://www.frontiersin.org/journals/immunology/articles/10.3389/fimmu.2023.1145300/full 目标:肿瘤微环境(TME)在子宫内膜癌(EC)的进展中起着重要作用。我们旨在评估EC的TME中的细胞群体。 方法:我们从GEO下载了EC的单细胞RNA测序(scRNA-seq)和空…...
自用Vscode 配置c++ debug环境
前言 使用vscode配置c debug环境的好处 1、可以借助vscode方便轻量的扩展和功能 2、避免了传统使用gdb 复杂按键以及不够直观的可视化 3、方便一次运行,断点处查看变量,降低找bug难度 4、某大公司项目采用类似配置,经过实践检验 配置c运行环…...
STM32单片机内存分配详细讲解
单片机的内存无非就两种,内部FLASH和SRAM,最多再加上一个外部的FLASH拓展。在这里我以STM32F103C8T6为例子讲解FLASH和SRAM。 STM32F103C8T6具有64KB的闪存和20KB的SRAM。 一. Flash 1.1 定义 非易失性存储器,即使在断电后,其所…...
从算力困境到创新突破:GPUGEEK如何重塑我的AI开发之旅
目录 从算力困境到创新突破:GPUGEEK如何重塑我的AI开发之旅开发者的算力挣扎:一个不得不面对的现实AI算力市场的尴尬现状:为什么我们需要另辟蹊径1. 资源分配失衡与价格壁垒2. 技术门槛与环境复杂性 GPUGEEK深度剖析:不只是又一个…...
基于OpenCV的人脸微笑检测实现
文章目录 引言一、技术原理二、代码实现2.1 关键代码解析2.1.1 模型加载2.1.2 图像翻转2.1.3 人脸检测 微笑检测 2.2 显示效果 三、参数调优建议四、总结 引言 在计算机视觉领域,人脸检测和表情识别一直是热门的研究方向。今天我将分享一个使用Python和OpenCV实现…...
2025认证杯数学建模第二阶段A题小行星轨迹预测思路+模型+代码
2025认证杯数学建模第二阶段思路模型代码,详细内容见文末名片 一、问题重述 1.1 问题背景 在浩瀚无垠的宇宙中,近地小行星(NEAs)宛如一颗颗神秘的“太空子弹”,其轨道相对接近地球,给我们的蓝色星球带来…...
Uniapp 安卓实现讯飞语音听写(复制即用)
在移动应用开发中,语音交互功能能够极大提升用户体验,让操作更加便捷自然。讯飞语音听写技术凭借其高准确率和稳定性,成为众多开发者的选择。本文将详细介绍如何在 Uniapp 项目中,实现安卓端的讯飞语音听写功能,帮助你…...
【FileZilla】 从事件类型到消息类型的函数形参类型转化
本篇其实是前篇【Filezilla】 dispatch函数重载的例子-CSDN博客的一个补充,其中涉及到【FileZilla】事件调用机制代码解析-CSDN博客中的事件分发机制时钩子函数的参数传递怎么实现的。跟【FileZilla】sftp协议的数据传输上传和下载-CSDN博客同样,用事件是…...
python打卡day26
函数、参数、变量 知识点回顾: 函数的定义变量作用域:局部变量和全局变量函数的参数类型:位置参数、默认参数、不定参数传递参数的手段:关键词参数传递参数的顺序:同时出现三种参数类型时 def function_name(parameter…...
RPC框架源码分析学习(二)
RPC框架源码分析与原理解读 前言 在分布式系统开发中,远程过程调用(RPC)是一项基础且关键的技术。通过对KVstorageBaseRaft-cpp项目RPC模块的源码分析,我深入理解了RPC框架的工作原理和实现细节。本文将从程序员视角分享我的学习心得。 框架概述 本项…...
算法分析:蛮力法
一、实验目的 1 掌握蛮力法的设计思想(利用计算机去穷举所有的可能解,再从中依次找出可行解) 2 掌握蛮力法的具体实现和时间复杂度分析 3 理解蛮力法的常见特性 实验要求:先用伪代码描述利用蛮力法解决的算法解决方案,再用程序实现,计算时间…...
构建RAG混合开发---PythonAI+JavaEE+Vue.js前端的实践
写在前文:之所以设计这一套流程,是因为 Python在前沿的科技前沿的生态要比Java好,而Java在企业级应用层开发比较活跃; 毕竟许多企业的后端服务、应用程序均采用Java开发,涵盖权限管理、后台应用、缓存机制、中间件集成…...
游戏引擎学习第280天:精简化的流式实体sim
回顾并为今天的内容做铺垫 今天的任务是让之前关于实体存储方式的改动真正运行起来。我们现在希望让实体系统变得更加真实和实用,能够支撑我们游戏实际所需的功能。这就要求我们对它进行更合理的实现和调试。 昨天我们基本让代码编译通过了,但实际上还…...
小程序映射逻辑处理
onLoad: function (options) { // 如果直接从options获取数据 this.setData({ jielunpin:发羽音, birthStr: 1944-01-01 }); // 处理诊断结论 this.processJielunpin(); // 添加一个处理诊断结论的函数 processJielunpin: function() { // 获取jielunpin和birthSt…...
亚马逊,temu测评采购低成本养号策略:如何用一台设备安全批量管理买家账号
只要能够巧妙规避平台的检测和风控措施,测评便可安全进行。 自养号测评,它更便于卖家掌控,且能降低风险。现在很多卖家都是自己养号,自己养号都是精养,不是自动的机刷,买家账号掌握在自己手里,更…...
TCP实现安全传输的核心机制 + TCP的报文讲解(全程图文讲解)
目录 一、TCP的协议和数据报格式 二、TCP常见的核心机制 1. 确认应答 2. 超时重传 3. 连接管理 三次握手(建立连接) 四次挥手(断开连接) 常见的状态和整体的传输流程 4. 滑动窗口 5. 流量控制 6. 拥塞控制 7. 延迟应…...
【测试工具】selenium和playwright如何选择去构建自动化平台
构建UI自动化平台服务,在底层选择自动化框架,selenium和playwright这两个如何选择 在构建UI自动化平台服务时,选择底层自动化框架(如 Selenium 和 Playwright)是一个非常关键的决策,直接影响平台的性能、可…...
ES常识8:ES8.X如何实现热词统计
文章目录 一、数据采集与存储设计1. 确定需记录的字段2. 设计搜索日志索引 二、数据写入与采集三、热门搜索词统计(核心逻辑)1. 基础版:近 7 天热门搜索词(按出现次数排序)2. 进阶版:加权热门词(…...
可解释性AI 综述《Explainable AI for Industrial Fault Diagnosis: A Systematic Review》
一、研究背景与动因(Background & Motivation) 随着工业4.0与工业5.0的发展,工业生产越来越依赖自动化与智能化手段,以实现高效、预测性维护与运行优化。在这一背景下,人工智能(AI)与机器学…...
数据可视化-----子图的绘制及坐标轴的共享
目录 绘制固定区域的子图 (一)、绘制单子图 subplot()函数 Jupyter Notebook的绘图模式 (二)、多子图 subplots()--可以在规划好的所有区域中一次绘制多个子图 (三)、跨行跨列 subplot2grid()---将整…...
nginx 配置
proxy_pass 结尾斜杠规则 不带斜杠:保留原始请求路径。 location /api {proxy_pass http://backend; # 转发到 http://backend/api }带斜杠:剥离 location 匹配的路径前缀。 location /api/ {proxy_pass http://backend/; # 转发到 http://back…...
《从零开始入门递归算法:搜索与回溯的核心思想 + 剑指Offer+leetcode高频面试题实战(含可视化图解)》
一.递归 1.汉诺塔 题目链接:面试题 08.06. 汉诺塔问题 - 力扣(LeetCode) 题目解析:将A柱子上的盘子借助B柱子全部移动到C柱子上。 算法原理:递归 当A柱子上的盘子只有1个时,我们可以直接将A上的盘子直…...
船舶制造业数字化转型:驶向智能海洋新航道
在全球海洋经济蓬勃发展的当下,船舶制造业作为海洋产业的重要支柱,正面临着前所未有的机遇与挑战。船舶制造周期长、技术复杂,从设计图纸到最终交付,涉及成千上万的零部件和复杂的工艺流程,传统制造模式已难以满足市场…...
SpringBoot 自动装配流程
Spring Boot 的自动装配(Auto Configuration)是其最核心的特性之一,它让你能“开箱即用”,极大简化了配置。下面是 Spring Boot 自动装配的整体流程(从启动到生效) 的详细解析: ✅ 一、整体流程…...
Vue 3 实现后端 Excel 文件流导出功能(Blob 下载详解)
💡 本文以告警信息导出为例,介绍 Vue 3 中如何通过 Axios 调用后端接口并处理文件流,实现 Excel 自动下载功能。 📑 目录 一、前言 二、后端接口说明 三、前端实现思路 四、导出功能完整代码 五、常见问题处理 六、效果展示 …...
基于IBM BAW的Case Management进行项目管理示例
说明:使用IBM BAW的难点是如何充分利用其现有功能根据实际业务需要进行设计,本文是示例教程,因CASE Manager使用非常简单,这里重点是说明如何基于CASE Manager进行项目管理,重点在方案设计思路上,其中涉及的…...
《Python星球日记》 第78天:CV 基础与图像处理
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、计算机视觉(CV)简介1. 什么是计算机视觉?2. 计算机视觉的应用场景3. 图像的基本属性a》像素(Pixel)b》通道(Channel)c》分辨率(Res…...