C++模板
C++<模板初阶>
这一集讲一下模板, 这东西理解起来不难, 用起来也很简单, 大家顺着看就ok.
void Swap(int& left, int& right)//参数是引用
{int temp = left;left = right;right = temp;
}void Swap(double& left, double& right)
{double temp = left;left = right;right = temp;
}void Swap(char& left, char& right)
{char temp = left;left = right;right = temp;
}
之前我们写c语言的时候, 有时候遇到不同类型的交换逻辑, 是不是得要写很多个交换函数, 而且每个函数的名字还不能相同.
当我们学了c++之后学到了函数可以重载, 现在我们可以使用函数重载去写不同类型的交换逻辑, 而且名字可以一样. 不过, 还有一点不足就是, tm
的, 明明逻辑一样的东西, 哥们为什么要写那么多次呢?
所以, 现在有了模板 :
C++ 中的模板是一种强大的特性,它允许你编写与类型无关的代码,从而实现代码复用和泛型编程。模板是 C++ 泛型编程的基础,广泛应用于标准库(如 STL)、容器、算法和各种工具类中。
一、模板的基本概念
模板是一种代码生成机制,它定义了一种通用的模式,编译器会根据实际使用时的类型或值,动态生成具体的代码。模板分为两种:
- 函数模板:用于创建通用函数。
- 类模板:用于创建通用类。
//也就是什么呢 ? 编译器帮我们干了这个脏活累活, 不过放心, 机器不是人, 真的可以往死里用.
二、函数模板
1. 语法
template <typename T> // 模板参数列表
//template就是模板的意思
T max(T a, T b) { // 函数模板定义return (a > b) ? a : b; //三目运算符
}
2. 关键点
template <typename T>
:声明一个模板参数T
,typename
也可以用class
替代。
template <class T> // 模板参数列表
T max(T a, T b) { // 函数模板定义return (a > b) ? a : b; //三目运算符
}
T
:代表一个待指定的类型。- 实例化:当调用
max(1, 2)
时,编译器自动推导T
为int
,并生成int
版本的函数。 - 这里的实例化, 其实就是编译器识别参数类型, 然后编译器根据参数类型生产相应版本的函数, 这就是实例化, 也就是生成一个能用的函数.
3. 使用示例//推演实例化
int a = max(1, 2); // T 被推导为 int
double b = max(1.5, 2.5); // T 被推导为 double
4. 显式指定类型//显示实例化
auto c = max<double>(1, 2.5); // 显式指定 T 为 double
//auto前面文章说过,自动识别参数类型
//这里显示指定了T为double类型,那么编译器就会根据你指定的类型生产相应的函数
double max(double a, double b) {return (a > b) ? a : b;
}
//在这里, 1就会被隐式类型转换为double类型, 2.5就会正常传过去
//如果你不显示的指定T的类型,在这里编译器是会报错的
//为什么呢?
//因为我们的模板参数列表就只有一个类型
// template <class T>
//但是这里传过去了两个类型参数(1, 2.5)
//这里编译器就会报错,看下面的图:
需要注意的是, 编译器会根据参数生成两个不同的函数, 而不是使用同一个函数. 下面用汇编给大家瞧一眼:
不过通常我们使用显示指定类型的时候是下面这种情况:
template<class T>
T* f(int n)
{T* p = new T[n];return p;
}
int main()
{double* c = f<double>(1);
}
大家仔细看这个代码, 你们看f(int n)
这个函数的参数和 T 有什么关系么?
我们前面使用函数模板, 编译器都是通过我们传过去的参数识别 T 的类型是什么, 但是这里编译器能识别出来嘛?
很明显不能嘛, 因为这个函数的参数和 T 没关系嘛, 所以这时候只能显示的指定 T 的类型, 这样才能使用.
此外模板参数其实和函数差不多:
// 模板参数语法 很类似函数参数,函数参数定义的形参对象,模板参数定义的是类型
template<class X, class Y>
//你需要不同类型的参数, 就设置不同名字的参数嘛, 和函数参数差不多
//类型交给编译器识别就好
void func(const X& x, const Y& y)
{cout << x << y << endl;
}int main()
{int a=1;double b=1.1;func(&a, &b);//这里的打印只能使用cout, 因为cout不用指定类型打印//你用printf还得提前告诉编译器你要打印什么类型//但是在参数传过来之前,你都是不知道参数类型是什么的//所以这里只能使用cout
}
所以其实总的来说就是编译器帮我们干了一些我们原本不愿意干的活 .
然后这里再给大家讲一些大家可能会有的疑问:
// 普通函数
int Add(int left, int right)
{return left + right;
}// 函数模板
template<class T>
T Add(T left, T right)
{return left + right;
}
int main()
{Add(1,2);//用普通函数Add(1.1,2.2);//编译器识别类型,实例化出来一个Add(double left, double right);然后用这个
}
这里给大家讲一下编译器遇到这种类型, 编译器会怎么处理:
首先, 如果编译器能找到现成的函数就用现成的.
其次就是, 有合适的就用合适的, 就算没有合适的可以用, 如果你给了编译器模板, 编译器会现做一份.
如果你没有写函数模板呢, 比如下面这种情况:
// 普通函数
int Add(int left, int right)
{return left + right;
}int main()
{Add(1,2);//用普通函数Add(1.1,2.2);//隐式类型转换,用普通函数
}
如果实在没有现成的且合适的函数, 且编译器没有办法去现做一份, 它就会将就的用了, 明白嘛?
就像你吃饭一样, 有好吃的肯定吃好吃的昂, 如果自己有时间, 而且会做好吃的, 就算没好吃的, 自己也会去做好吃的.
如果实在没条件, 比如学生时代住宿的学生, 晚上实在饿不行了, 你身边有个小面包, 将就一下你也吃了.
就是这么一个道理.
三、类模板
1. 语法
template <typename T>
class Vector {
private:T* data;size_t size;
public:Vector(size_t n) : data(new T[n]), size(n) {}~Vector() { delete[] data; }T& operator[](size_t i) { return data[i]; }
};
2. 关键点
- 类模板的成员函数默认也是模板函数。
- 实例化:使用时必须显式指定类型参数,如
Vector<int> v(10)
。 - 也就是说, 你不能像普通类一样这样写:
Vector v(10)
- 必须标明数据类型:
Vector<int> v(10)
3. 使用示例
Vector<int> v(5); // 创建一个存储 int 的 Vector
v[0] = 100;
4. 类模板的成员函数定义
如果你函数声明和定义分离,就要这样写, 否则不用
template <typename T>
T& Vector<T>::operator[](size_t i) {return data[i];
}
此外, 类模板里面的成员函数声明和定义不能写在两个文件, 也就是说, 你不能把函数声明写在头文件, 然后cpp
文件再去实现. 这个后面再说.
四、模板参数//以下这些目前阶段, 仅作了解, 看一眼就行, 不用看懂
模板参数可以是:
- 类型参数(如
typename T
) - 非类型参数(如
int N
) - 模板模板参数(稍后介绍)
1. 非类型参数示例
template <typename T, int N>
class Array {
private:T data[N];
public:T& operator[](int i) { return data[i]; }int size() const { return N; }
};// 使用
Array<int, 5> arr; // 创建一个包含 5 个 int 的数组
2. 非类型参数的限制
- 非类型参数必须是编译时常量(如整数、指针、引用等)。
五、模板特化
模板特化允许为特定类型提供定制实现。
1. 全特化
template <> // 全特化 max 函数模板,针对 const char* 类型
const char* max<const char*>(const char* a, const char* b) {return (strcmp(a, b) > 0) ? a : b;
}
2. 类模板全特化
template <>
class Vector<bool> { // 针对 bool 类型的特化实现// 定制实现(如位压缩)
};
3. 偏特化(针对类模板)
template <typename T>
class Vector<T*> { // 偏特化:针对指针类型// 针对指针的定制实现
};
六、可变参数模板(C++11+)
允许模板接受任意数量和类型的参数。
1. 函数模板示例
template <typename T>
T sum(T value) { // 终止函数return value;
}template <typename T, typename... Args>
T sum(T first, Args... args) { // 递归展开参数包return first + sum(args...);
}// 使用
int total = sum(1, 2, 3, 4); // 计算 1+2+3+4 = 10
2. 类模板示例
template <typename... Ts>
struct Tuple;template <>
struct Tuple<> {}; // 空元组template <typename T, typename... Ts>
struct Tuple<T, Ts...> : Tuple<Ts...> {T value;Tuple(T t, Ts... ts) : Tuple<Ts...>(ts...), value(t) {}
};// 使用
Tuple<int, double, char> t(1, 3.14, 'a');
七、模板的优缺点
优点:
- 代码复用:避免为不同类型编写重复代码。
- 性能优化:在编译期生成专用代码,减少运行时开销。
- 类型安全:在编译期检查类型匹配。
缺点:
- 编译时间增加:模板实例化会显著增加编译时间。
- 错误信息复杂:模板错误信息往往冗长且难以理解。
- 代码膨胀:大量实例化可能导致可执行文件变大。
八、注意事项
- 模板定义与声明分离:模板定义通常需要放在头文件中,因为编译器需要看到完整定义才能实例化。
- 模板模板参数:允许模板接受另一个模板作为参数(如
template <template <typename> class Container>
)。 - SFINAE(Substitution Failure Is Not An Error):利用模板替换失败来实现编译期条件选择。
九、常见应用场景
- 标准模板库(STL):容器(如
vector
、map
)、算法(如sort
)。 - 智能指针(如
shared_ptr
、unique_ptr
)。 - 类型特征库(如
std::is_same
、std::enable_if
)。 - 元编程库(如 Boost.MPL)。
相关文章:
C++模板
C<模板初阶> 这一集讲一下模板, 这东西理解起来不难, 用起来也很简单, 大家顺着看就ok. void Swap(int& left, int& right)//参数是引用 {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left …...
系统平衡与企业挑战
在复杂的系统中,一切都在寻找平衡,而这个平衡从不静止。它在不断的变化与反馈中调整,以适应外界环境的变动。就像一个企业,它无法完全回避变化,但却总是在挑战中寻找新的平衡点。 最近遇到一家企业,引入了…...
【AI News | 20250513】每日AI进展
AI Repos 1、iap-diffusion-labs 从零开始带我们构建完整的扩散模型。通过三个精心设计的实验练习,循序渐进地引导我们实现流匹配和扩散模型,从基础 SDE 到条件图像生成,每一步都有详尽指导和完整代码,让复杂理论简单易懂。主要内…...
upload-labs通关笔记-第3关 文件上传之黑名单绕过
目录 一、实验准备 1.构造脚本 2.打开靶场第三关 3.源码分析 4.修改配置使支持php后缀 (1)切换php ts版本 (2)定位httpd.conf文件 (3)修改AddType application字段 (4)重启…...
【Redis】RedLock实现原理
Redis的RedLock是一种分布式锁算法,旨在通过多节点协作解决传统单节点Redis锁的容错性问题。其核心原理如下: 1. 设计目标 互斥性:同一时刻只有一个客户端持有锁。死锁避免:锁自动超时释放,防止客户端崩溃导致死锁。容…...
IPD流程实战:产品开发各阶段目标、关注点和交付
目录 简介 1、概念阶段 2、计划阶段 3、开发阶段 4、验证阶段 5、发布阶段 6、生命周期阶段 作者简介 简介 IPD的产品开发是一个多阶段协同的过程,上一个环节的输出是下一个环节的输入,每个阶段的交替都体现出了用户思维。 尽可能确保最终的输…...
植物大战僵尸杂交版v3.6最新版本(附下载链接)
B站游戏作者潜艇伟伟迷于5月13日更新了植物大战僵尸杂交版3.6.5版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/037…...
激光打印机常见打印故障简单处理意见
一、 问题描述: 给打印机更换新的硒鼓时拉开硒鼓封条时有微量碳粉带出; 原因: 出厂打印测试时,可能会有微量碳粉在磁辊上或者磁辊仓; 解决方法: 擦干净即可正常使用; 二、 问题描述&…...
代码随想录算法训练营第60期第三十五天打卡
今天是我们贪心算法章节的最后一天,今天有三道题目需要讲解,但是最后又一道题目叫做监督二叉树的题目难度比较大,我打算二刷代码随想录的时候再来给大家讲解,因此我们今天就只讲解前两道题目,昨天的区间重叠问题是贪心…...
我的五周年创作纪念日
五年前的今天,我在CSDN发布了第一篇《基于VS2015的MFC学习笔记(常用按钮button)》,文末那句"欢迎交流"的忐忑留言,开启了这段充满惊喜的技术旅程。恍然发觉那些敲过的代码早已成长为参天大树。 收获 获得了…...
OpenCV特征处理全解析:从检测到匹配的完整指南
一、计算机视觉中的特征处理概述 在计算机视觉领域,特征处理是指从图像中提取、描述和匹配具有辨识度的局部或全局特征的过程。一个完整的特征处理流程通常包括三个关键步骤: 特征检测:在图像中寻找具有独特性质的点或区域特征描述…...
C++11 ——右值引用和移动语义
目录 一、基本概念左值 vs 右值左值引用 vs 右值引用 二、右值引用使用场景和意义左值引用的使用场景左值引用的短板右值引用和移动语义右值引用引用左值右值引用的其他使用场景右值引用总结 三、完美转发右值前置知识万能引用完美转发保持值的属性完美转发的使用场景 四、总结…...
使用交互式半自动化标注工具制作语义分割数据集
参考的初始资源: GitHub项目文档 B站视频 1.安装工具 打开Anaconda Prompt 1.创建虚拟环境 conda create -n isat_env python3.8 conda activate isat_env2.安装GPU版本pytorch 4070 Ti CUDN12.5 pip install torch torchvision torchaudio --index-url https:/…...
阿里二面:聊聊 MySQL 主从同步方案的优缺点
大家好,我是君哥。今天来聊一聊 MySQL 主从架构。 MySQL Replication 是 MySQL 官方提供的主从同步方案,用于将 MySQL 主库的数据同步到从库中,从库可以供应用程序读取数据。 1 简介 Replication 是目前 MySQL 使用最多的灾备方案…...
YOLO11解决方案之物体模糊探索
概述 Ultralytics提供了一系列的解决方案,利用YOLO11解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 物体模糊是指对图像或视频中的特定检测对象应用模糊处理,这可以利用YOLO11 模型…...
Elecron 相关介绍以及常见的面试问题
一、深入介绍 Electron Electron 是一个由 GitHub 开发和维护的免费开源软件框架,允许开发者使用 Web 技术(HTML、CSS 和 JavaScript)构建桌面应用程序 。它将 Chromium 渲染引擎和 Node.js 运行时环境相结合,为开发者提供了一套…...
基于STM32、HAL库的ADAU1701JSTZ音频接口芯片驱动程序设计
一、简介: ADAU1701JSTZ 是 Analog Devices 公司推出的一款高性能、低功耗音频编解码器 (CODEC) 芯片。它专为便携式音频设备设计,集成了麦克风前置放大器、ADC、DAC、耳机放大器等功能模块,支持多种音频接口和采样率,非常适合与 STM32 微控制器配合使用。 主要特性: 24…...
【氮化镓】电子辐照下温度对GaN位移阈能的影响
2024年,华东师范大学的彭胜国等人基于从头算分子动力学(AIMD)方法,研究了低能电子束辐照下温度对氮化镓(GaN)位移阈能(TDE)的影响。实验结果表明,在初始动能40至80 eV的范围内,镓(Ga)和氮(N)原子作为初级击出原子(PKAs)引发的位移对温度呈现不同的敏感性:Ga 的…...
NLTK库: 数据集3-分类与标注语料(Categorized and Tagged Corpora)
NLTK库: 数据集3-分类与标注语料(Categorized and Tagged Corpora) 1.二分类语料 主要是电影语料,和情绪(积极消极、主观客观)有关,有以下2个语料: 1.1 movie_reviews: IMDb 影评 IMDb(Internet Movie …...
物理:人的记忆是由基本粒子构成的吗?
问题: 基因属于人体的一部分,记忆也是人体的一部分,那么为什么基因可以代际遗传,但是记忆却被清空重置。如果基因是由粒子构成,那么记忆是不是也应该由粒子构成?如果记忆是粒子构成的,那么能否说明记忆永恒,即使死亡了身体被分解了,那么只要保证其身体有关的所有粒子被…...
加速度策略思路
一种基于技术指标和动态止损策略的交易方法,旨在提高交易的灵活性和风险控制能力。 1 -动态止损价格计算:该函数通过计算ATR(平均真实范围)和盈利峰值价,结合加速系数,动态调整止损价格。具体来说…...
【计算机组成原理】第二部分 存储器--分类、层次结构
文章目录 分类&层次结构0x01 分类按存储介质分类按存取方式分类按在计算机中的作用分类 0x02 层次结构 分类&层次结构 0x01 分类 按存储介质分类 半导体存储器磁表面存储器磁芯存储器光盘存储器 按存取方式分类 存取时间与物理地址无关(随机访问&#…...
Spring AI 开发本地deepseek对话快速上手笔记
Spring AI Spring AI是一个旨在推进生成式人工智能应用程序发展的项目,Spring AI的核心目标是提供高度抽象化的组件,作为开发AI应用程序的基础,使得开发者能够以最少的代码改动便捷地交换和优化功能模块 在开发之前先得引入大模型…...
Python训练打卡Day23
机器学习管道 pipeline 基础概念 pipeline在机器学习领域可以翻译为“管道”,也可以翻译为“流水线”,是机器学习中一个重要的概念。 在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以…...
【每天一个知识点】Dip 检验(Dip test)
Dip 检验(Dip test)是一种用于检验一维数据分布是否为单峰(unimodal)的非参数统计方法。该检验由 Hartigan 和 Hartigan 于 1985 年提出,通常用于探索性数据分析中,以判断数据是否仅具有一个峰值结构&#…...
AbstractQueuedSynchronizer之AQS
一、前置知识 公平锁和非公平锁: 公平锁:锁被释放以后,先申请的线程先得到锁。性能较差一些,因为公平锁为了保证时间上的绝对顺序,上下文切换更频繁 非公平锁:锁被释放以后,后申…...
【Qt】pro工程文件转CMakeLists文件
1、简述 Qt6以后默认使用cmake来管理工程,之前已经一直习惯使用pro,pro的语法确实很简单、方便。 很多项目都是cmake来管理,将它们加入到Qt项目中,cmake确实是大势所趋。比如,最近将要开发的ROS项目,也是使用的cmake语法。 以前总结的一些Qt代码,已经编写成pro、pri等…...
docker-compose部署thingsboard/tb-cassandra
1、配置 阿里云服务器2H8G 最低 系统:Ubuntu20.0.4 安装 docker 和 docker-compose 环境 ====================安装docker====================== # 更新包 sudo apt update# 安装docker sudo apt install docker.io# 查看是否安装成功 docker --version==================…...
MySQL 日期计算方法 date_sub()、date_add()、datediff() 详解-文中有示例帮助理解
1、date_sub()、date_add() date_sub() 和date_add() 语法相同,只不过一个加一个减。 从日期中减去指定时间间隔 语法: DATE_SUB(start_date, INTERVAL expr unit) start_date: 起始日期(如 now() , 字段名)。 INTERVAL expr…...
GPT-4.1和GPT-4.1-mini系列模型支持微调功能,助力企业级智能应用深度契合业务需求
微软继不久前发布GPT-4.1系列模型后,Azure OpenAI服务(国际版)现已正式开放对GPT-4.1和GPT-4.1-mini的微调功能,并通过Azure AI Foundry(国际版)提供完整的部署和管理解决方案。这一重大升级标志着企业级AI…...
如何将两台虚拟机进行搭桥
虚拟机网络搭桥配置指南 要实现两台虚拟机之间的网络互通("搭桥"),需要根据您的虚拟化平台选择合适的网络模式。以下是主流虚拟化软件的配置方法: 一、VMware 虚拟机互通配置 方案 1:使用桥接模式&#x…...
无缝对接主流电商平台接口,解决货源难题
行业调查显示,大多数代购商每天要花费数小时在淘宝、1688等平台寻找合适商品。手动复制商品链接、整理信息不仅耗时耗力,还容易出错——价格标错、库存不准等问题时有发生,直接影响客户体验。更麻烦的是,不同平台的商品信息格式不…...
GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)
java这边的压缩代码 引入的是java8 jdk自带的gzip压缩( java.util.zip.GZIPOutputStream)、BASE64Encoder( sun.misc.BASE64Encoder) public static String compress(String str) {if (str ! null && str.length() ! 0) {ByteArrayOutputStream…...
Cookie、 Local Storage、 Session Storage三种客户端存储方式
存储特性对比表 特性CookieLocal StorageSession Storage生命周期可设置过期时间永久保存会话结束自动清除存储容量4KB左右5-10MB5-10MB自动发送到服务器每次HTTP请求头携带不发送不发送访问方式服务端/客户端均可读写仅客户端仅客户端 使用场景及示例 1. Cookie - 用户身份…...
进程等待简单讲解
1. 基本概念 1.1 进程终止与退出状态 当一个进程终止时,它会向其父进程发送一个信号(通常是SIGCHLD),并保存退出状态(exit status)。退出状态可以是一个正常终止的返回值,也可以是一个信号导致…...
基于大模型预测胸椎管狭窄诊疗全流程的研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、胸椎管狭窄症概述 2.1 疾病定义与分类 2.2 病因与发病机制 2.3 流行病学特征 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 用于胸椎管狭窄…...
Oracle OCP认证考试考点详解083系列15
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 71. 第71题: 题目 解析及答案: 关于在 Oracle 18c 及更高版本中基于 Oracle 黄金镜像的安装,以下哪…...
【老飞飞源码】新版高清飞飞源码+数据库+客户端+服务器端完整文件打包
【老飞飞源码】新版高清飞飞源码数据库客户端服务器端完整文件打包下载 编译环境 vs2022 搭建环境 sql2022 测试运行环境 windows 11 本地测试生成搭建都成功 功能包含: pvp排行榜 宠物特效 箱子预览系统 vip系统 宝箱系统 内挂系统 离线摆摊系统 特效帽子系…...
Maven 动态插件配置:Profile的灵活集成实践
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Python爬虫如何应对网站的反爬加密策略?
在当今的互联网环境中,网络爬虫已经成为数据采集的重要工具之一。然而,随着网站安全意识的不断提高,反爬虫技术也越来越复杂,尤其是数据加密策略的广泛应用,给爬虫开发者带来了巨大的挑战。本文将详细介绍Python爬虫如…...
STM32H743输出50%的占空比波形
使用cubeMX进行配置如下: 时钟配置如下: 具体代码如下: /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program b…...
ios remote debut proxy 怎么开启手机端调试和inspect
手机开启远程调试教程(适用于 Chrome / Safari) 前端移动端调试指南|适用 iPhone 和 Android|WebDebugX 出品 本教程将详细介绍如何在 iPhone 和 Android 手机上开启网页检查器,配合 WebDebugX 实现远程调试。教程包含…...
GraspVLA:基于Billion-级合成动作数据预训练的抓取基础模型
25年5月来自银河通用(Galbot)、北大、港大和 BAAI 的论文“GraspVLA: a Grasping Foundation Model Pre-trained on Billion-scale Synthetic Action Data”。 具身基础模型因其零样本泛化能力、可扩展性以及通过少量后训练即可适应新任务的优势&#x…...
BGP联邦实验
一.需求 1.AS1存在两个环回,一个地址为192.168.1.0/24,该地址不能再任何协议中宣告 AS3存在两个环回,一个地址为192.168.2.0/24,该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24,AS3另一个环回地址是…...
自动化测试基础知识详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 自动化测试是指利用自动化工具和脚本,模拟人工操作进行软件测试的过程。它在软件开发中扮演着非常重要的角色,可以提高测试效率、降低成本…...
Java后端快速生成验证码
Hutool是一个小而全的Java工具类库,它提供了很多实用的工具类,包括但不限于日期处理、加密解密、文件操作、反射操作、HTTP客户端等。 核心工具类:CaptchaUtil,CaptchaUtil 是 Hutool 提供的一个工具类,用于创建各种类…...
【愚公系列】《Manus极简入门》036-物联网系统架构师:“万物互联师”
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
主流高防服务器技术对比与AI防御方案实战
1. 高防服务器核心能力对比 当前市场主流高防服务商(如阿里云、腾讯云、华为云)的核心防御能力集中在流量清洗与静态规则防护,但面临以下挑战: 静态防御瓶颈:传统方案依赖预定义规则,对新型攻击ÿ…...
带格式的可配置文案展示
方案一(格式包含颜色换行等) 服务端:配置后接口输出带标签的字符串,但是尖括号不能被转义前端:v-html接受字符串(vue项目),原生用innerHTML赋值 方案二(格式针对只存在…...
湖南大学3D场景问答最新综述!3D-SQA:3D场景问答助力具身智能场景理解
作者: Zechuan Li, Hongshan Yu, Yihao Ding, Yan Li, Yong He, Naveed Akhtar 单位:湖南大学,墨尔本大学,悉尼大学,安徽大学 论文标题:Embodied Intelligence for 3D Understanding: A Survey on 3D Sce…...