【C++笔记】数据结构进阶之二叉搜索树(BSTree)
【C++笔记】数据结构进阶之二叉搜索树(BSTree)
🔥个人主页:大白的编程日记
🔥专栏:C++笔记
文章目录
- 【C++笔记】数据结构进阶之二叉搜索树(BSTree)
- 前言
- 一.二叉搜索树的概念
- 二.二叉搜索树的性能分析
- 三.二叉搜索树的实现
- 3.1二叉树的中序遍历
- 3.2二叉搜索树的插入
- 3.3二叉搜索树的查找
- 3.4二叉搜索树的删除
- 四.二叉搜索树key和key/value使用场景\
- 4.1key搜索场景
- 4.2key/value搜索场景
- 4.3key_value结构的实现
- 4.4二叉搜索树的拷贝构造和析构
- 后言
前言
哈喽,各位小伙伴大家好!上期我们讲了C++三大特性之多态。今天我们来讲一下二叉搜索树(BSTree)。话不多说,我们进入正题!向大厂冲锋
一.二叉搜索树的概念
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:
• 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值
• 若它的右子树不为空,则右子树上所有结点的值都⼤于等于根结点的值
• 它的左右子树也分别为二叉搜索树
• ⼆叉搜索树中可以支持插入相等的值,也可以不支持插人相等的值,具体看使用场景定义,后续我们学习map/set/multimap/multiset系列容器底层就是二叉搜索树,其中map/set不之持插入相等值,multimap/multiset支持插如相等值
二.二叉搜索树的性能分析
二叉搜索树最多查找高度次。因此二叉搜索树的性能取决的树的高度。
-
最优情况
最优情况下,二叉搜索树为完全⼆叉树(或者接近完全⼆叉树),其高度为: log2 N
-
最坏情况
最差情况下,⼆叉搜索树退化为单⽀树(或者类似单⽀),其⾼度为: N
所以综合而言⼆叉搜索树增删查改时间复杂度为: O(N)。
那么这样的效率显然是无法满足我们需求的,我们后续需要继续讲解⼆叉搜索树的变形,平衡二叉搜索树AVL树和红黑树,才能适用于我们在内存中存储和搜索数据。
- 二分查找
另外需要说明的是,二分查找也可以实现 O(log2 N) 级别的查找效率,但是而分查找有两大缺陷:
- 需要存储在支持下标随机访问的结构中,并且有序。
- 插入和删除数据效率很低,因为存储在下标随机访问的结构中,插入和删除数据⼀般需要挪动数据。
这里也就体现出了平衡⼆叉搜索树的价值。
三.二叉搜索树的实现
3.1二叉树的中序遍历
因为_root是私有成员,所以我们可以这样多套一层调用。
void Inorder()
{_Inorder(_root);cout << endl;
}
void _Inorder(const node* root)
{if (root == nullptr){return;}_Inorder(root->left);cout << root->_key << " ";_Inorder(root->right);
}
3.2二叉搜索树的插入
插入的具体过程如下:
- 树为空,则直接新增结点,赋值给root指针
- 树不空,按二叉搜索树性质,插入值比当前结点大往右走,插入值比当前结点小往左左,找到空位置,插入新结点。
- 如果支持插入相等的值,插入值跟当前结点相等的值可以往右走,也可以往左走,找到空位置,插入新结点。(要注意的是要保持逻辑⼀致性,插入相等的值不要⼀会往右走,⼀会往左走)
bool Insert(const k& x)
{if (_root == nullptr)//插入根节点{_root = new node(x);return true;}node* cur = _root;node* parent = nullptr;//记录父亲节点while (cur){//介质不冗余/*if (x < cur->_key){parent = cur;cur = cur->left;}else if (x > cur->_key){parent = cur;cur = cur->right;}else{return false;}*///介质冗余if (x <= cur->_key)//相等插入左子树{parent = cur;cur = cur->left;}else if (x > cur->_key){parent = cur;cur = cur->right;}}if (x > parent->_key){parent->right = new node(x);}else//相等插入左子树{parent->left = new node(x);}return true;
}
介质冗余:
介质不冗余:
3.3二叉搜索树的查找
bool Find(const k& x)
{node* cur = _root;while (cur){if (x < cur->_key)//节点在左子树{cur = cur->left;}else if (x > cur->_key)//节点在右子树{cur = cur->right;}else{return true;//找到target}}return false;
}
3.4二叉搜索树的删除
⾸先查找元素是否在二叉搜索树中,如果不存在,则返回false。
如果查找元素存在则分以下四种情况分别处理:(假设要删除的结点为N)
- 要删除结点N左右孩子均为空
- 要删除的结点N左孩子位空,右孩子结点不为空
- 要删除的结点N右孩子位空,左孩子结点不为空
- 要删除的结点N左右孩子结点均不为空
对应以上四种情况的解决方案:
- 左右为空
把N结点的父亲对应孩子指针指向空,直接删除N结点(情况1可以当成2或者3处理,效果是⼀样的)
-
左空右不空
把N结点的父亲对应孩子指针指向N的右孩子,直接删除N结点 -
右空左不空
把N结点的父亲对应孩子指针指向N的左孩子,直接删除N结点
如果删除根节点直接修改_root。再删除节点即可。
-
左右均不空
无法直接删除N结点,因为N的两个孩子无处安放,只能用替换法删除。找N左子树的值最大结点R(最右结点)或者N右子树的值最小结点R(最左结点)替代N,因为这两个结点中任意⼀个,放到N的位置,都满足⼆叉搜索树的规则。替代N的意思就是N和R的两个结点的值交换,转而变成删除R结点,R结点符合情况2或情况3,可以直接删除。
bool Erase(const k& x)
{node* cur = _root;node* parent = nullptr;while (cur){if (x < cur->_key){parent = cur;cur = cur->left;}else if (x > cur->_key){parent = cur;cur = cur->right;}else//找到删除节点{if (cur->left == nullptr)//左为空{if (cur == _root)//防止删除根节点{_root = cur->right;}else//判断连接父亲的左子树还是右子树{if (cur == parent->left){parent->left = cur->right;}else{parent->right = cur->right;}}delete cur;return true;}else if (cur->right == nullptr){if (cur == _root)//防止删除根节点{_root = cur->left;}else//判断连接父亲的左子树还是右子树{if (cur == parent->left){parent->left = cur->left;}else{parent->right = cur->left;}}delete cur;return true;}else{//替代节点的父亲初始化为删除节点防止不进去循环node* replaceparent = cur;//替代节点的父亲node* replace = cur->right;while (replace->left)//寻找右子树的最小节点{replaceparent = replace;replace = replace->left;}cur->_key = replace->_key;//替换根节点//判断连接父亲的左子树还是右子树if (replace == replaceparent->left){replaceparent->left = replace->right;}else{replaceparent->right = replace->right;}delete replace;return true;}}}return false;
}
四.二叉搜索树key和key/value使用场景\
4.1key搜索场景
只有key作为关键码,结构中只需要存储key即可,关键码即为需要搜索到的值,搜索场景只需要判断key在不在。key的搜索场景实现的⼆叉树搜索树⽀持增删查,但是不支持修改,修改key破坏搜索树结构了。
场景1:小区无人值守车库,小区车库买了车位的业主车才能进小区,那么物业会把买了车位的业主的车牌号录入后台系统,车辆进入时扫描车牌在不在系统中,在则抬杆,不在则提示非本小区车辆,无法进入。
场景2:检查⼀篇英文 章单词拼写是否正确,将词库中所有单词放入二叉搜索树,读取文章中的单词,查找是否在⼆叉搜索树中,不在则波浪线标红提示。
4.2key/value搜索场景
每⼀个关键码key,都有与之对应的值value,value可以任意类型对象。树的结构中(结点)除了需要存储key还要存储对应的value,增/删/查还是以key为关键字⾛⼆叉搜索树的规则进行比较,可以快速查找到key对应的value。key/value的搜索场景实现的⼆叉树搜索树支持修改,但是不支持修改key,修改key破坏搜索树性质了,可以修改value。
场景1:简单中英互译字典,树的结构中(结点)存储key(英⽂)和vlaue(中文),搜索时输入英文,则同时
查找到了英文对应的中文。
场景2:商场无人值守车库,入口进场时扫描车牌,记录车牌和入场时间,出口离场时,扫描车牌,查找入场时间,⽤当前时间-入场时间计算出停车时长,计算出停车费用,缴费后抬杆,车辆离场。
场景3:统计⼀篇文章中单词出现的次数,读取⼀个单词,查找单词是否存在,不存在这个说明第⼀次出现,(单词,1),单词存在,则++单词对应的次数。
4.3key_value结构的实现
- 结构的定义
把节点封装,key_value多了一个V的类型。
同时这里using可以当成typedef使用。
//key结构
template<class k>
struct BSTNode
{using node = BSTNode<k>;k _key;node* left;node* right;BSTNode(const k& key):_key(key), left(nullptr), right(nullptr){}
};
template<class k>
class BSTree
{using node = BSTNode<k>;
public:
private:node* _root = nullptr;
};
//key_value结构
template<class k, class v>
struct BSTNode
{using node = BSTNode<k, v>;k _key;v _value;node* left;node* right;BSTNode(const k& key, const v& value):_key(key), _value(value), left(nullptr), right(nullptr){}
};
template<class k, class v>
class BSTree
{using node = BSTNode<k, v>;
public:
private:node* _root = nullptr;
};
- 查找和删除
查找和删除的逻辑不需要改变。但是如果想知道查找的节点的value可以返回节点指针。同时如果允许介质冗余的话,那就需要查找中序的第一个,所以我们相同值时,先保留,继续去左子树查找即可。
node* Find(const k& x)
{node* ret = nullptr;node* cur = _root;while (cur){if (x < cur->_key){cur = cur->left;}else if (x > cur->_key){cur = cur->right;}else{ret = cur;//保留当前节点cur = cur->left;//继续向左子树查找中序的第一个}}return ret;
}
、、key_value结构
- 插入
插入只需要多插入一个value值即可,逻辑不变。
bool Insert(const k& x, const v& v)
{if (_root == nullptr)//插入根节点{_root = new node(x, v);return true;}node* cur = _root;node* parent = nullptr;//保留父亲节点while (cur){/*介质不冗余*/if (x < cur->_key){parent = cur;cur = cur->left;}else if (x > cur->_key){parent = cur;cur = cur->right;}else{return false;}//介质冗余//if (x <= cur->_key)//相等插入到左子树//{// parent = cur;// cur = cur->left;//}//else if (x > cur->_key)//{// parent = cur;// cur = cur->right;//}}if (x > parent->_key){parent->right = new node(x, v);}else//相等插入左子树{parent->left = new node(x, v);}return true;
}
4.4二叉搜索树的拷贝构造和析构
- 拷贝构造
直接new构造根节点,再让根节点连接递归构造的左右子树即可。注意如果按照插入的思路构造,那就必须是层序遍历节点插入,否则拷贝出来的子树就不一样。
BSTree(const BSTree<k,v>& x)
{_root = Copy(x._root);
}
node* Copy( node* x)
{if (x == nullptr){return x;}node* root = new node(x->_key, x->_value);root->left =Copy(x->left);root->right = Copy(x->right);return root;
}
- 析构
这里先析构左右子树在析构根节点即可。
void Destory(const node* root){if (root == nullptr){return ;}Destory(root->left);Destory(root->right);delete root;}~BSTree(){Destory(_root);_root = nullptr;}
- 赋值
这里先拷贝tmp,然后交换_root指针,函数结束后析构tmp空间。
BSTree<k, v>& operator = (BSTree<k, v> tmp)
{swap(_root,tmp._root);return *this;
}
后言
这就是数据结构进阶之二叉搜索树(BSTree)。大家自己好好消化!今天就分享到这!感谢各位的耐心垂阅!咱们下期见!拜拜~
相关文章:
【C++笔记】数据结构进阶之二叉搜索树(BSTree)
【C笔记】数据结构进阶之二叉搜索树(BSTree) 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】数据结构进阶之二叉搜索树(BSTree)前言一.二叉搜索树的概念二.二叉搜索树的性能分析三.二叉搜索树的实现3.1二叉树的中序…...
c++设计模式模块与系统
c 中lambda 本质就是一个匿名(没有名)的函数; 可以用一个数组元素存储一个函数的指针; 通过数组下标来使用函数; 高内聚低耦合 如何理解设计模式中的高内聚低耦合 高内聚: 用于指导如何组织和划分软件设计。 **定义:**高内聚指的…...
【81-90期】Java核心面试问题深度解析:性能优化与高并发设计
🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 文章题目:Java核心面试问题深度解析:性能优化与高并发设计 摘要: 本文聚…...
python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接
前言 python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接 简单易懂,直接上码 源码 import socket import threadingclass TCPServer:# 修改此处ip 端口def __ini…...
【R安装】R语言的详细安装及环境配置(2024年11月)
目录 R及Rstudio下载R下载Rstudio下载 R及Rstudio安装R安装Rtools 安装Rstudio安装 运行 RStudio通过RStudio配置使用特定的R版本 参考 R及Rstudio下载 R下载 R官网-The R Project for Statistical Computing 点击【download R】,进入下载界面: 选择…...
Android 12.0 通知--PendingIntent基本代码
一. PendingIntent 在 Android 通知中的使用场景 使用场景: Android 通知的 setContentIntent() 需要传入 PendingIntent , 即当点击通知时,执行 intent 的动作.如下例子: //1.创建Intent对象Intent intent new Intent(this, MainActivity1.class); //2.获取能启动 Activity 的…...
网络安全在数字时代保护库存数据中的作用
如今,通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而,技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要,而且必不可少。 了解网络安全及其…...
文本搜索程序(Qt)
头文件 #ifndef TEXTFINDER_H #define TEXTFINDER_H#include <QWidget> #include <QFileDialog> #include <QFile> #include <QTextEdit> #include <QLineEdit> #include <QTextStream> #include <QPushButton> #include <QMess…...
云原生革命:构建未来应用的无限可能
在这个数字化飞速发展的时代,云原生技术如同一股不可阻挡的潮流,正深刻改变着软件开发和部署的方式。它不仅仅是一种技术变革,更是一场关于如何更高效、更灵活地构建和运行应用的革命。今天,我们就来深入探讨云原生的魅力所在&…...
【Ubuntu 24.04】How to Install and Use NVM
参考 下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash激活 Activate NVM: Once the installation script completes, you need to either close and reopen the terminal or run the following command to use nvm immediately. exp…...
android12锁屏界面pin码或者图案解锁居中显示
设置pin码或者图案锁屏后,在锁屏界面向上划左边,图案解锁就在左边, 向上划右边图案就在右边,如何设置一直居中显示呢? diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI…...
【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战
VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…...
【UE5 C++课程系列笔记】05——组件和碰撞
效果 可以看到我们可以实现的功能是 (1)可以通过鼠标旋转视角 (2)通过使用Pawn移动组件来控制Pawn移动 (3)Pawn碰到物体会被阻挡然后逐渐滑动 (4)通过空格切换激活/关闭粒子效果…...
【docker 拉取镜像超时问题】
问题描述 在centosStream8上安装docker,使用命令sudo docker run hello-world 后出现以下错误: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Ti…...
51-基于单片机的智能语音识别与处理系统设计
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,搞L298N驱动两个电机转动,然后搞LCD1602显示屏,弄个超声波传感器实时检测距离 通过LCD1602显示距离,如果距离小于阈值,则两…...
民安:助力提升城市安全水平
随着城市化进程的加速,平安城市的创建成为了社会治理的重要议题。为了解公众对平安城市创建的看法和评价,为提升城市安全水平提供参考,近期某市委托民安智库专业市场调查公司开展了一次安全感满意度调查。 本次调查围绕公共安全、个人安全、…...
类和对象--中--运算符重载、日期类实现(重要)
目录 1.运算符重载 2.日期类 1.运算符重载 2.1作用: 为了让C的新类型:类。也可以进行内置类型的运算符操作。所以就有了运算符重载。 2.2定义: 运算符重载是具有特殊名字的函数,他的名字是由operator和后⾯要定义的运算符共…...
个人回顾。
一鸡摸塔塔开! 2024/11/24 18:20:42 2019.6毕业。入职hg。到2020.6。入职一年。居住侨源山庄极小房间。月租一千。 一鸡摸塔塔开! 2024/11/24 18:21:15 期间也有保持学习。也玩游戏看小说。把大学缺失的补回来。 一鸡摸塔塔开! 2024/11/24 18:30:33 博客园随笔 学习笔记 100…...
前端面试题-1(详解事件循环)
1.了解浏览器的进程模型 1.什么是进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 2.什么是线程?…...
http的文件上传和下载原理
目录 一:上传 1:http请求格式 2:文件上传类型分析 1:md5秒传 2:分片上传 1. 什么是分片上传 2. 分片上传的场景 3:断点续传 1. 什么是断点续传 2. 应用场景 3. 实现断点续传的核心逻辑 4. 实现流…...
leetcode 212. 单词搜索 II
给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…...
1、数据结构概述及顺序表(附:可以直接打印显示的源码)
《数据结构》概述: 数据结构:数据元素之间的关系(逻辑关系) 数据类型:高地电平 表示 1/0 要做大量的运算:诞生了基本数据类型:int double .....--》反应了数据的取值范围 (int字…...
Redis
概述 Redis(全称 REmote DIctionary Server)是一个开源的内存数据存储系统,它被广泛应用于缓存、消息队列、实时数据存储等场景。Redis 是一个基于内存的数据结构存储,可以作为数据库、缓存和消息中间件使用 优点 高性能…...
Android 13 编译Android Studio版本的Launcher3
Android 13 Aosp源码 源码版本Android Studio版本Launcher3QuickStepLib (主要代码) Launcher3ResLib(主要资源)Launcher3IconLoaderLib(图...
【高等数学学习记录】微分中值定理
一、知识点 (一)罗尔定理 费马引理 设函数 f ( x ) f(x) f(x) 在点 x 0 x_0 x0 的某邻域 U ( x 0 ) U(x_0) U(x0) 内有定义,并且在 x 0 x_0 x0 处可导,如果对任意的 x ∈ U ( x 0 ) x\in U(x_0) x∈U(x0) ࿰…...
百度 文心一言 vs 阿里 通义千问 哪个好?
背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…...
wordpress使用Markdown语法写的文章图片显示不正常,记录一次折腾之旅
wordpress使用Markdown语法写的文章图片显示不正常,记录一次折腾之旅 当我把wordpress站点地址改成域名之后,wordpress上写的文章是使用Markdown语法进行写作的,但是Markdown引用的图片就会加载不出来,但如果把站点地址改成局域网的IP,所有的一切都显示正常了。除非我把图…...
MTK 展锐 高通 sensorhub架构
一、MTK平台 MTK框架可以分为两部分,AP和SCP。 AP是主芯片,SCP是协处理器,他们一起工作来处理sensor数据。 SCP 是用来处理sensor和audio相关功能和其他客制化需求的一个协处理理器,MTK SCP选择freeRTOS作为操作系统,…...
npm 最新国内淘宝镜像地址源 (旧版已不能用)
注意:原域名https://registry.npm.taobao.org/ 在 2022.06.30 号正式下线和停止 DNS 解析 最新地址: #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npmmirror.com 查看镜像使用状态 npm config get registr…...
(超详细图文详情)Navicat 配置连接 Oracle
1、下载依赖文件 Oracle官网下载直链:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 夸克网盘下载(oracle19c版本):https://pan.quark.cn/s/5061e690debc 官网下载选择对应 Oracle 版…...
iOS 系统中使用 webView 打印 html 的打印边距问题
需求是使用系统提供的打印功能将HTML代码打印出来 1、使用CSS page 设置边距(iOS不生效) page {margin: 0;padding: 0;size: A6 portrait; }在 Android 中边距设置生效的,但是在 iOS 系统使用CSS page规则是不生效的 当从 iOS 系统打印网页…...
深度学习Pytorch中的模型保存与加载方法
深度学习:Pytorch中的模型保存与加载方法 在 PyTorch 中,模型的保存和加载对于模型的持久化和后续应用至关重要。这里详细介绍了两种主要方法:保存整个模型(包括架构和参数)和仅保存模型的状态字典。以下内容进一步完善了加载模型…...
(vue)启动项目报错The project seems to require pnpm but it‘s not installed
(vue)启动项目报错The project seems to require pnpm but it’s not installed 原因 该错误信息表明你的项目需要使用 pnpm 作为包管理工具,但系统中尚未安装 pnpm。 解决方法 【1】删除pnpm.lock 【2】npm install -g pnpm 之后再重新启动 yarn报错࿰…...
【Leetcode 每日一题】3250. 单调数组对的数目 I
问题背景 给你一个长度为 n n n 的 正 整数数组 n u m s nums nums。 如果两个 非负 整数数组 ( a r r 1 , a r r 2 ) (arr_1, arr_2) (arr1,arr2) 满足以下条件,我们称它们是 单调 数组对: 两个数组的长度都是 n n n。 a r r 1 arr_1 arr1 是…...
C++语法·叭
阁下何不乘风起,扶摇直上九万里。 qi fei 目录 内存管理 分区介绍 1.栈区: 2.内存映射段: 3.堆: 4.数据段: 5.代码段: 补充: C内存管理(简略回忆) C内存…...
ComfyUI | ComfyUI桌面版发布,支持winmac多平台体验,汉化共享等技巧!(内附安装包)
ComfyUI 桌面版正式推出,支持 Windows 与 macOS 等多平台,为 AI 绘画爱好者带来全新体验。其安装包便捷易用,开启了轻松上手之旅。汉化共享功能更是一大亮点,打破语言障碍,促进知识交流与传播。在操作上,它…...
探索Python词云库WordCloud的奥秘
文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍:为何选择WordCloud?2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍:为何选择Wo…...
用PHP抓取HTTPS资源时的常见问题与解决方法
概述 随着互联网的发展,HTTPS已经成为主流协议,网站的数据安全性得到了显著提升。然而,对于开发者来说,HTTPS的广泛应用也增加了数据抓取的复杂性。尤其是在PHP中实现HTTPS资源的抓取时,开发者可能会遇到以下问题&…...
spring知识点复习--针对面试的
前言 此内容是笔者通过B站的视频总结而来。原视频链接地址:6、Bean Factory与FactoryBean有什么区别_哔哩哔哩_bilibili 1.谈谈springIOC的理解,原理与实现 回答涉及到的点: 控制反转:是一种理论思想,原来的对象是由…...
Web前端学习_CSS盒子模型
content padding border margin <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS盒子模型</title><style></style> </head> <body> <div class"demo&quo…...
ajax基础
一:express框架 在终端输入nodejs文件名 // 引入express const express require(express); //创建应用对象 const app express(); //创建路由规则 app.get(/,(request,response) > {//设置响应response.send(Hello Express); }); // 监听3000端口 app.lis…...
Python轴承故障诊断 (21)基于VMD-CNN-BiTCN的创新诊断模型
往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…...
强化学习导论 -章9 基于函数逼近的同轨策略预测
基于函数逼近的同轨策略预测 我们前面已经完成了基于表格的学习任务,基于表格的就是每个s是独立学习的,基本上不考虑泛化的能力,但是也对于每个任务状态学习的非常好。考虑到状态空间越来越大,我们必须考虑到函数逼近的情况。 1…...
Ubuntu环境中RocketMQ安装教程
参考教程 https://blog.csdn.net/weixin_56219549/article/details/126143231 1、安装JDK,并配置环境变量(略) 2、下载RocketMQ安装包 RocketMQ下载地址,选择二进制包下载 unzip rocketmq-all-5.0.0-ALPHA-bin-release.zip 使…...
Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)
上篇文章:Linux操作系统2-进程控制2(进程等待,waitpid系统调用,阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库:Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点:进程替换 目录 …...
ThinkPHP Nginx 重写配置
目录 NGINX 重写 Admin项目隐藏入口文件,且禁用Admin模块&Admin.php 1️⃣配置仅用模块 2️⃣新增admin_xyz.php文件(自定义入口文件名),并绑定admin模块 3️⃣配置nginx 重写规则 NGINX 重写 在Nginx低版本中࿰…...
SpringBoot小知识(2):日志
日志是开发项目中非常重要的一个环节,它是程序员在检查程序运行的手段之一。 1.日志的基础操作 1.1 日志的作用 编程期调试代码运营期记录信息: * 记录日常运营重要信息(峰值流量、平均响应时长……) * 记录应用报错信息(错误堆栈) * 记录运维过程数据(…...
深度学习:利用GPU进行训练
深度学习:利用GPU进行训练 在现代深度学习框架中,如PyTorch,利用GPU加速模型训练是一种常见的做法。GPU(图形处理单元)由于其并行处理能力,特别适合执行大量的矩阵运算,这在训练神经网络时尤为…...
PHP 生成分享海报
因为用户端有多个平台,如果做分享海报生成,需要三端都来做,工作量比较大。 所以这个艰巨的任务就光荣的交给后端了。经过一定时间的研究和调试,最终圆满完成了任务,生成分享海报图片实现笔记如下。 目录 准备字体文件…...
A050-基于spring boot物流管理系统设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...