当前位置: 首页 > news >正文

深入探索C++ STL:从基础到进阶

目录

引言

一、什么是STL

二、STL的版本

三、STL的六大组件

容器(Container)

算法(Algorithm)

迭代器(Iterator)

仿函数(Functor)

空间配置器(Allocator)

配接器(Adapter)

四、STL的重要性

五、如何学习STL

六、STL的缺陷

总结


引言

在C++ 的世界里,标准模板库(STL)是一项极为强大的工具。它不仅为开发者提供了可复用的组件库,更是一个融合了数据结构与算法的软件框架。无论是在笔试的算法题中,还是在面试的技术问答环节,STL都频繁出现。今天,就让我们深入剖析STL,从它的基本概念、版本演进,到六大组件以及学习方法和存在的缺陷。

一、什么是STL

STL(standard template library - 标准模板库)是C++ 标准库的重要组成部分。它就像是一个工具箱,里面装满了各种数据结构(如vector、list、map等)和算法(如sort、find等)。以下是一个简单使用 vector 容器的示例代码:


 

cpp#include <iostream>#include <vector>int main() {// 创建一个vector容器,用于存储int类型的数据std::vector<int> myVector;// 向容器中添加元素myVector.push_back(1);myVector.push_back(2);myVector.push_back(3);// 遍历容器并输出元素for (int i = 0; i < myVector.size(); ++i) {std::cout << myVector[i] << " ";}std::cout << std::endl;return 0;}

难点剖析

这里涉及到模板的概念,模板使得STL能够适应不同的数据类型。理解模板的实例化过程,以及模板类型推导等机制,是掌握STL的基础。比如在 std::vector<int> 中,编译器会根据 <> 内指定的类型 int ,实例化出专门处理 int 类型数据的 vector 容器类。

二、STL的版本

原始版本

由Alexander Stepanov、Meng Lee在惠普实验室完成。本着开源精神,任何人都可以自由运用、拷贝、修改、传播、商业使用这些代码,唯一的条件是也要遵循开源原则。这个版本可以说是所有STL实现版本的鼻祖。

P.J.版本

由P.J. Plauger开发,继承自HP版本,被Windows Visual C++采用。但它有一些缺点,比如可读性比较低,符号命名比较怪异。这就导致开发者在阅读和理解其底层代码时会遇到一定困难。

RW版本

由Rouge Wage公司开发,同样继承自HP版本,被C++ Builder采用。它也存在不能公开或修改的问题,并且可读性一般。

SGI版本

由Silicon Graphics Computer Systems, Inc公司开发,继承自HP版本,被GCC(Linux)采用。它的可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。我们在后续学习STL阅读部分源代码时,主要参考的就是这个版本

难点剖析

不同版本之间的差异,尤其是在底层实现细节和接口规范上的不同,对于深入研究STL的开发者来说是一个难点。在跨平台开发或者阅读不同编译器下的STL代码时,需要准确把握这些差异,避免出现兼容性问题。

三、STL的六大组件

容器(Container)

容器用于存储数据,常见的有 vector (动态数组)、 list (双向链表)、 map (键值对映射)等。例如,下面是一个使用 map 容器存储学生成绩的示例:

cpp#include <iostream>#include <map>#include <string>int main() {std::map<std::string, int> studentScores;studentScores["Alice"] = 90;studentScores["Bob"] = 85;// 遍历map并输出学生成绩for (const auto& pair : studentScores) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;}

算法(Algorithm)

算法作用于容器之上,实现各种数据处理功能,如排序、查找等。 std::sort 就是一个常用的排序算法,示例如下:

cpp#include <iostream>#include <vector>#include <algorithm>int main() {std::vector<int> numbers = { 5, 3, 8, 1, 2 };// 使用std::sort对vector进行排序std::sort(numbers.begin(), numbers.end());// 输出排序后的vectorfor (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;}

迭代器(Iterator)

迭代器提供了一种统一的方式来访问容器中的元素,就像一个智能指针。例如,使用迭代器遍历 vector :

cpp#include <iostream>#include <vector>int main() {std::vector<int> myVec = { 10, 20, 30 };// 使用迭代器遍历vectorfor (std::vector<int>::iterator it = myVec.begin(); it != myVec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;}

仿函数(Functor)

仿函数是行为类似函数的类,它可以作为算法的参数,实现自定义的操作。比如自定义一个比较函数对象用于 std::sort 的降序排序:

cpp#include <iostream>#include <vector>#include <algorithm>// 定义一个仿函数用于降序比较struct Greater {bool operator()(int a, int b) const {return a > b;}};int main() {std::vector<int> numbers = { 3, 1, 2 };// 使用自定义仿函数进行降序排序std::sort(numbers.begin(), numbers.end(), Greater());for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;}

空间配置器(Allocator)

空间配置器负责容器的内存分配与释放。一般情况下,我们使用默认的空间配置器,但在一些对内存管理有特殊需求的场景下,可能需要自定义空间配置器。

配接器(Adapter)

配接器用于修改容器、迭代器或仿函数的接口形式,以适应不同的需求。比如 stack 和 queue 就是基于其他容器(如 deque )实现的配接器容器。

难点剖析

理解六大组件之间的协作关系是一个难点。例如,算法需要通过迭代器来访问容器中的元素,仿函数可以作为算法的参数来定制算法行为。同时,不同容器的底层实现原理(如 vector 的动态内存管理、 map 的红黑树结构等)也需要深入掌握,才能在实际应用中合理选择和使用容器。

四、STL的重要性

在笔试中

经常会出现与STL相关的算法题,比如二叉数层序打印、重建二叉树、用两个栈实现一个队列等。这些题目往往会用到STL中的容器(如 queue 用于层序遍历)和算法(如自定义比较函数实现特定排序需求)。

在面试中

面试官常常会询问求职者对STL的理解,包括各种容器的特点、适用场景,以及算法的时间复杂度和空间复杂度等。掌握STL不仅能在面试中展示自己的技术能力,更能在实际项目开发中提高代码效率和质量。

五、如何学习STL

第一境界:熟用STL

这一阶段要求开发者能够熟练使用STL中的各种容器和算法。通过大量的练习题和实际项目实践,掌握每个组件的基本接口和使用方法。例如,在日常的算法练习中,尽量使用STL提供的工具来简化代码实现。

第二境界:了解泛型技术的内涵与STL的学理乃至实作

深入研究STL背后的泛型编程技术,理解模板元编程等高级特性。阅读STL的源代码,了解其底层实现原理,比如 vector 如何实现动态扩容, map 如何通过红黑树保证元素的有序性等。

第三境界:扩充STL

在对STL有了深入理解之后,可以尝试对其进行扩展和定制。比如自定义符合特定需求的容器或算法,或者优化现有的STL实现以满足项目的特殊性能要求。

难点剖析

从熟用STL到深入理解其底层原理并进行扩充,每一步都有不小的挑战。阅读STL的源代码需要具备深厚的C++ 功底,理解模板元编程等高级特性更是需要花费大量时间和精力。而对STL进行扩充和定制,则需要对整个STL框架有全面且深入的认识,同时还要有创新思维和解决复杂问题的能力。

六、STL的缺陷

更新缓慢

STL库的更新速度相对较慢。从C++98到C++11,中间相隔了13年,STL才进一步更新。这在快速发展的软件行业中,可能导致其无法及时跟上新的编程需求和技术趋势。

不支持线程安全

STL目前没有原生支持线程安全。在并发环境下使用STL容器时,需要开发者自己进行加锁等同步操作,而且锁的粒度往往比较大,可能会影响程序的性能。

追求效率导致内部复杂

STL为了追求极致的效率,内部实现比较复杂,例如类型萃取、迭代器萃取等机制。这使得代码的可读性和可维护性降低,对于初学者来说理解起来难度较大。

代码膨胀问题

由于模板的使用,STL可能会导致代码膨胀。比如多次实例化 vector<vector<vector<int>>> 这样的多层嵌套模板,会生成多份代码,增加了可执行文件的大小。

难点剖析

在实际项目中处理STL的这些缺陷,需要开发者具备丰富的经验和深入的技术理解。例如,在并发场景下解决线程安全问题,需要综合考虑锁的粒度、性能开销以及业务逻辑的复杂性等多方面因素。

总结

C++ STL是一个功能强大但又具有一定学习难度的工具集。通过深入理解它的各个方面,包括基本概念、版本差异、六大组件、重要性、学习方法和存在的缺陷,开发者能够在C++ 编程中更加游刃有余,编写出高效、可靠的代码。在不断的学习和实践中,我们也能逐渐掌握其精髓,为更复杂的软件开发项目打下坚实的基础。

希望这篇博客能对大家学习STL有所帮助,欢迎在评论区交流探讨!

相关文章:

深入探索C++ STL:从基础到进阶

目录 引言 一、什么是STL 二、STL的版本 三、STL的六大组件 容器&#xff08;Container&#xff09; 算法&#xff08;Algorithm&#xff09; 迭代器&#xff08;Iterator&#xff09; 仿函数&#xff08;Functor&#xff09; 空间配置器&#xff08;Allocator&#xf…...

GitHub Desktop 推送报错 Authentication Failed 身份验证失败

弹窗问题&#xff1a; Authentication Failed 验证失败 We were unable to authenticate with https://gitee.com/.Pleaseenter your username and password to try again. 用户名 密码 Depending on your repository’s hosting service, you might need touse a Personal Acc…...

Webpack中的文件指纹:给资源戴上个“名牌”

Webpack中的文件指纹&#xff1a;给资源戴上个“名牌” 你是否想过&#xff0c;当你修改代码后&#xff0c;浏览器为什么仍然拿着旧版资源不放&#xff1f;秘密就在于——文件指纹&#xff01;简单来说&#xff0c;文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”&…...

ESP32开发之ubuntu环境搭建

1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…...

重构艺术 | 如何优雅地“提炼函数“

在工作中总数遇到非常多的长代码&#xff0c;俗称“屎山”&#xff0c;这类代码读起来特别费劲。自己想重构一遍&#xff0c;但是总感觉缺乏经验指导&#xff0c;因此&#xff0c;多读书&#xff0c;读好书可能是最优解之一。读《重构改善即有代码的设计》有感&#xff0c;便写…...

[项目]基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明

基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明 一.项目概述二.硬件与软件资源 一.项目概述 功能结构图&#xff1a; 通过上位机发出模拟CAN数据给协议转换板&#xff0c;协议转换板将CAN协议数据转换为迪文屏数据&#xff0c;并通过迪文数据控制相关性质。 …...

如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程

&#x1f6e0;️ 如何查看自己 Android App 的私有数据&#xff1f;从 adb backup 到数据提取全过程 &#x1f4cc; 前言&#xff1a;作为一名 Android 开发者&#xff0c;我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的&#xff0c;比如有没有数据写入成功、有…...

Windows中xxx.dll动态链接库文件转xxx.a静态库文件

最近在学习探索C/C程序代码中调用Python代码时&#xff0c;出现了一个问题&#xff1a;下载的程序库文件&#xff0c;在使用MinGW编译C/C的代码时&#xff0c;一直提示无法链接&#xff0c;才发现是库类型不对应&#xff0c;无法导入链接。 上图所示的Python对应库&#xff0c;…...

用Java NIO模拟HTTPS

HTTPS流程 名词解释&#xff1a; R1:随机数1 R2:随机数2 R3:随机数3 publicKey:公钥 privateKey:私钥 step1 客户端 client hello R1 服务端 server hello R2 publicKey(验证证书&#xff0c;证书包含公钥) step2 客户端 R3 publicKey加密 服务端 privateKey解密 s…...

基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 引言&#xff1a;火车轨道检测领域概述 铁路运输作为国民经济的大动脉&#xff0c;其安全运行至关重要…...

解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理

解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu&#xff08;Noble 版本&#xff09;上安装 Docker 时&#xff0c;我遇到了两个常见的网络问题&#xff1a;apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置&#xff0c;最终成功运行 docker run he…...

DVDFab Virtual Drive电脑DVD备份和制作软件 v13.0.3.7 中文绿色便携

前言 DVDFab Virtual Drive是一个很厉害的光盘处理软件&#xff0c;它能帮你做几件事情&#xff1a;复制你的DVD或蓝光光盘作为备份&#xff0c;把这些光盘里的内容转换成其他格式&#xff0c;还能把视频文件刻录到DVD或蓝光光盘上。这个软件很灵活&#xff0c;能处理像DVD、蓝…...

FISCO BCOS区块链Postman接口测试:高级应用与实战技巧 [特殊字符]

引言:为什么Postman是FISCO BCOS测试的利器? 在区块链开发领域,接口测试是确保系统稳定性和安全性的关键环节。作为国产领先的联盟链平台,FISCO BCOS在金融、政务、供应链等多个领域得到广泛应用。而Postman作为一款功能强大的API测试工具,凭借其直观的图形界面和丰富的测…...

a sort.py demo

这份代码展示了如何使用 sort.py。注意&#xff0c;此处&#xff0c;我将文件名改为 my_sort.py。 你并不能直接 copy 使用&#xff0c;因为环境&#xff0c;包&#xff0c;还有模型。 此处使用 SSD-MobileNetv2 进行物体检测&#xff0c;将结果传入以 np 数组的形式传入sort…...

Linux 入门八:Linux 多进程

一、概述 1.1 什么是进程&#xff1f; 在 Linux 系统中&#xff0c;进程是程序的一次动态执行过程。程序是静态的可执行文件&#xff0c;而进程是程序运行时的实例&#xff0c;系统会为其分配内存、CPU 时间片等资源。例如&#xff0c;输入 ls 命令时&#xff0c;系统创建进程…...

学习如何设计大规模系统,为系统设计面试做准备!

前言 在当今快速发展的技术时代&#xff0c;系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起&#xff0c;构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而&#xff0c;对于许多工程师而言&#xff0c;如何有效…...

前端防御性编程

关于防御性编程 你是否遇到过&#xff0c;接口请求失败或者返回数据错误&#xff0c;导致系统白屏或者前端自身写的代码存在一些缺陷&#xff0c;导致整个系统不够健壮&#xff0c;从而导致系统白屏 常见的问题与防范 最常见的问题 访问了null或者undefined的属性 null.a …...

Java工具类-assert断言

我们可能经常在项目的单元测试或者一些源码中看到别人在使用assert关键字&#xff0c;当然也不只是Java语言&#xff0c;很多编程语言也都能看到&#xff0c;我们大概知道断言可以用于测试中条件的校验&#xff0c;但却不经常使用&#xff0c;本文总结了Java中该工具类的使用。…...

215. 数组中的第K个最大元素

1、题目分析 顾名思义。 2.算法原理 利用排序&#xff0c;再找到第k个最大的数字即可。 3.代码实操 class Solution { public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begin(),nums.end());return nums[nums.size()-k];//123456真的方便啊} };…...

【2025年泰迪杯数据挖掘挑战赛】B题 详细解题思路+数据预处理+代码分享

目录 2025年泰迪杯B题详细解题思路问题一问题分析数学模型Python代码Matlab代码 问题二问题分析数学模型Python代码Matlab代码 问题三问题分析数学模型Python代码Matlab代码 问题四问题分析数学模型Python代码Matlab代码 2025年泰迪杯B题详细解题思路 初步分析整理了B题的赛题分…...

对shell脚本敏感命令进行加密执行

我要加密这条命令&#xff1a;rm /root/scripty.sh 如何利用openssl aes-256-cbc 实现加密和解密&#xff0c;并执行命令 加密、解密并执行命令的完整流程 以下是使用 openssl aes-256-cbc 加密命令 rm /root/scripty.sh&#xff0c;解密并执行的详细步骤&#xff1a; 1. 加密…...

SQL ⑦-索引

索引 索引是一种特殊的数据结构&#xff0c;它帮助数据库系统高效地找到数据。 索引通过一定的规则排列数据表中的记录&#xff0c;使得对表的查询可以通过对索引的搜索来加快速度。 索引好比书籍的目录&#xff0c;能帮助你快速找到相应的章节。 B树 B树是一种经常用于数…...

LinkedBlockingQueue使用场景有哪些

1、LinkedBlockingQueue 的特点 LinkedBlockingQueue 是 Java 中 java.util.concurrent 包下的一种阻塞队列&#xff0c;它有以下几个主要特点&#xff1a; 1.线程安全 LinkedBlockingQueue 是线程安全的&#xff0c;它内部使用了锁机制来确保多线程环境下的并发访问不会导致…...

关于难例损失函数小记

什么是难例损失函数&#xff08;Hard Example Loss Function&#xff09; 这玩意儿是深度学习训练中非常重要又很实用的一个概念&#xff0c;特别适用于处理 数据不平衡、模型收敛缓慢、或者**想让模型更“挑剔”**的场景。 &#x1f31f; 先从名字讲起&#xff1a; “难例”…...

小程序开发指南

小程序开发指南 目录 1. 小程序开发概述 1.1 什么是小程序1.2 小程序的优势1.3 小程序的发展历程 2. 开发准备工作 2.1 选择开发平台2.2 开发环境搭建2.3 开发模式选择 3. 小程序开发流程 3.1 项目规划3.2 界面设计3.3 代码开发3.4 基本开发示例3.5 数据存储3.6 网络请求3.7 …...

RCE漏洞学习

1&#xff0c;What is RCE&#xff1f; 在CTF&#xff08;Capture The Flag&#xff09;竞赛中&#xff0c;RCE漏洞指的是远程代码执行漏洞&#xff08;Remote Code Execution&#xff09;。这类漏洞允许攻击者通过某种方式在目标系统上执行任意代码&#xff0c;从而完全控制目…...

青少年编程考试 CCF GESP图形化编程 三级认证真题 2025年3月

图形化编程 三级 2025 年 03 月 一、单选题&#xff08;共 15 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 1、2025 年春节有两件轰动全球的事件&#xff0c;一个是 DeepSeek 横空出世&#xff0c;另一个是贺岁 片《哪吒 2》票房惊人&#xff0c;入了全球票房榜…...

一、绪论(Introduction of Artificial Intelligence)

写在前面&#xff1a; 老师比较看重的点&#xff1a;对问题的概念本质的理解&#xff0c;不会考试一堆运算的东西&#xff0c;只需要将概念理解清楚就可以&#xff0c;最后一个题会出一个综合题&#xff0c;看潜力&#xff0c;前面的部分考的不是很深&#xff0c;不是很难&…...

多模态大语言模型arxiv论文略读(十五)

## Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文标题&#xff1a;Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文作者&#xff1a;Yuanwei Wu, Xiang Li, Yixin Liu, Pan Zhou, Lichao Sun ➡️ 研究机…...

漏洞报告:多短视频平台时间差举报滥用漏洞

漏洞标题&#xff1a;跨平台内容发布时序漏洞导致的恶意举报攻击向量 漏洞类型&#xff1a;逻辑缺陷/滥用机制 漏洞等级&#xff1a;中高风险 漏洞描述&#xff1a; 攻击者可利用多平台内容发布时间差&#xff0c;伪造原创证明对合法内容发起恶意举报。该漏洞源于平台间缺乏发…...

【LINUX】学习宝典

一.Linux系统常用单词翻译 1.new folder 新建文件夹 2.paste 粘贴 3.select all 全选 4.open in terminal 打开终端/命令行 5.keep aligned 保持对齐 6.organize deaktop by name按名称组织桌面 7.change background更改背景 8.cancel 取消 9.create创造 创建 10.wal…...

青少年编程考试 CCF GESP图形化编程 四级认证真题 2025年3月

图形化编程 四级 2025 年 03 月 一、单选题&#xff08;共 10 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 1、2025 年春节有两件轰动全球的事件&#xff0c;一个是 DeepSeek 横空出世&#xff0c;另一个是贺岁片《哪吒 2》票房惊人&#xff0c;入了全球票房榜…...

学习海康VisionMaster之平行线查找

一&#xff1a;进一步学习了 今天学习下VisionMaster中的平行线查找&#xff0c;这个还是拟合直线的衍生应用&#xff0c;可以同时测量两条线段&#xff0c;输出中线 二&#xff1a;开始学习 1&#xff1a;什么是平行线查找&#xff1f; 按照传统的算法&#xff0c;必须是开两…...

小甲鱼第004讲:变量和字符串(下)| 课后测试题及答案

问答题: 0. 请问下面代码有没有毛病&#xff0c;为什么? 请问下面代码为什么会出错&#xff0c;应该如何解决&#xff1f; 答:这是由于在字符串中&#xff0c;反斜杠()会与其随后的字符共同构成转义字符。 为了避免这种不测情况的发生&#xff0c;我们可以在字符串的引号前面…...

2025 蓝桥杯省赛c++B组个人题解

声明 本题解为退役蒻苟所写&#xff0c;不保证正确性&#xff0c;仅供参考。 花了大概2个半小时写完&#xff0c;感觉比去年省赛简单&#xff0c;难度大概等价于 codeforces dv4.5 吧 菜鸡不熟悉树上背包&#xff0c;调了一个多小时 题目旁边的是 cf 预测分 所有代码均以通…...

2025蓝桥杯算法竞赛深度突破:创新题型与高阶策略全解析

一、新型算法范式实战 1.1 元启发式算法应用&#xff08;预测难度&#xff1a;★★★★&#xff09; 题目场景&#xff1a;星际货物装载 需在飞船载重限制下选择最优货物组合&#xff0c;引入遗传算法解决NP-Hard问题&#xff1a; 染色体编码&#xff1a;二进制串表示货物选择…...

网络流量管理-流(Flow)

1. 传统网络的问题&#xff1a;快递员送信模式 想象你每天要寄100封信给同一个朋友&#xff0c;传统网络的处理方式就像一个固执的快递员&#xff1a; 每封信都单独处理&#xff1a;检查地址、规划路线、盖章、装车…即使所有信的目的地、收件人都相同&#xff0c;也要重复100…...

Spring Boot对接马来西亚股票数据源API

随着对东南亚市场的兴趣日益增长&#xff0c;获取马来西亚股票市场的实时和历史数据变得尤为重要。本文将指导您如何使用Spring Boot框架对接一个假定的马来西亚股票数据源API&#xff08;例如&#xff0c;StockTV API&#xff09;&#xff0c;以便开发者能够轻松访问和处理这些…...

MySQL 面经

1、什么是 MySQL&#xff1f; MySQL 是一个开源的关系型数据库&#xff0c;现在隶属于 Oracle 公司。是我们国内使用频率最高的一种数据库&#xff0c;我本地安装的是比较新的 8.0 版本。 1.1 怎么删除/创建一张表&#xff1f; 可以使用 DROP TABLE 来删除表&#xff0c;使用…...

【Flink运行时架构】作业提交流程

本文介绍在单作业模式下Flink提交作业的具体流程&#xff0c;如下图所示。 客户端将作业提交给YARN的RM&#xff1b;YARN的RM启动Flink JobManager&#xff0c;并将作业提交给JobMaster&#xff1b;JobMaster向Flink内置的RM请求slots&#xff1b;Flink内置的RM向YARN RM请求…...

【AutoTest】自动化测试工具大全(Java)

&#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#xff0c;请给博主一个一键三连 &#x1f680;&#x1f680;&#x1f680; 吧 &#xff08;点赞 &#x1f9e1;、关注 &#x1f49b;、收藏 &#x1f49a;&#xff09;&#xff01;&#xff01;&#xff01;您的支持 &#x…...

当DRAM邂逅SSD:新型“DRAM+”存储技术来了!

在当今快速发展的科技领域&#xff0c;数据存储的需求日益增长&#xff0c;对存储设备的性能和可靠性提出了更高的要求。传统DRAM以其高速度著称&#xff0c;但其易失性限制了应用范围&#xff1b;而固态硬盘SSD虽然提供非易失性存储&#xff0c;但在速度上远不及DRAM。 为了解…...

【算法】快速排序

算法系列六&#xff1a;快速排序 一、快速排序的递归探寻 1.思路 2.书写 3.搭建 3.1设计过掉不符情况&#xff08;在最底层时&#xff09; 3.2查验能实现基础结果&#xff08;在最底层往上点时&#xff09; 3.3跳转结果继续往上回搭 4.实质 二、快速排序里的基准排序 …...

Python快速入门指南:从零开始掌握Python编程

文章目录 前言一、Python环境搭建&#x1f94f;1.1 安装Python1.2 验证安装1.3 选择开发工具 二、Python基础语法&#x1f4d6;2.1 第一个Python程序2.2 变量与数据类型2.3 基本运算 三、Python流程控制&#x1f308;3.1 条件语句3.2 循环结构 四、Python数据结构&#x1f38b;…...

机器学习中的数学(PartⅡ)——线性代数:2.1线性方程组

概述&#xff1a; 现实中很多问题都可被建模为线性方程组问题&#xff0c;而线性代数为我们提供了解决这类问题的工具。先看两个例子&#xff1a; 例子1&#xff1a; 一家公司有n个产品&#xff0c;分别是&#xff0c;生产上述产品需要m种原料&#xff0c;每个产品需要其中一…...

大模型上下文协议MCP详解(2)—核心功能

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 标准化上下文交互技术 1.1 实时数据接入能力 MCP(Model Context Protocol)通过标准化的接口,为 AI 模型提供了强大的实时数据接入能力,使其能够快速获取和处理来自不同数据源的实时信息。…...

检测到目标URL存在http host头攻击漏洞

漏洞描述 修复措施 方法一: nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。 server {listen 80 default_server; …...

【 Beautiful Soup (bs4) 详解】

引言 Beautiful Soup 是 Python 最流行的 HTML/XML 解析库&#xff0c;能够从复杂的网页文档中高效提取数据。以下是其核心知识点及示例代码。 一、库简介 1. 核心模块 BeautifulSoup&#xff1a;主类&#xff0c;用于构建文档树结构Tag&#xff1a;表示 HTML/XML 标签的对象…...

Cuto壁纸 2.6.9 | 解锁所有高清精选壁纸,无广告干扰

Cuto壁纸 App 提供丰富多样的壁纸选择&#xff0c;涵盖动物、风景、创意及游戏动漫等类型。支持分类查找与下载&#xff0c;用户可轻松将心仪壁纸设为手机背景&#xff0c;并享受软件内置的编辑功能调整尺寸。每天更新&#xff0c;确保用户总能找到新鲜、满意的壁纸。 大小&am…...

人工智能之数学基础:复矩阵

本文重点 复矩阵是线性代数中以复数为元素的矩阵,是实矩阵在复数域上的自然推广。与实矩阵相比,复矩阵在数学性质、运算规则和应用场景上具有独特性,尤其在量子力学、信号处理、控制理论等领域发挥关键作用。 复矩阵的定义与表示 定义:复矩阵指的是元素含有复数的矩阵。…...