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

C++AVL树(一)详解

文章目录

  • AVL树
    • 概念
    • AVL树的插入
    • 平衡因子的更新
    • 旋转的规则
      • 左单旋
      • 右单旋
        • 抽象的情况
        • h==0
        • h==1
        • h== 2
        • h == 3

AVL树

概念

  • AVL树是一棵平衡二叉查找树,AVL树是空树,保证左右子树都是AVL树,AVL树要求高度差的绝对值不超过1,因为最好情况是1,比如4个节点高度差最好是1,2个也是1,3个节点最好是0
  • 任何子树-左右子树高度差的绝对值都是1
  • 这样AVL树就接近完全二叉树了,高度为logN,增删查改的效率就为logN
  • 任何节点的平衡因子:右子树-左子树的高度,0/-1/1,有了平衡因子就更容易控制AVL树是否平衡,但AVL树并不是必须要平衡因子

AVL树的插入

  1. 按二叉搜索树的规则进行插入
  2. 新增节点后会影响祖先节点的高度,也就是祖先节点的平衡因子,所以更新从新增节点到根节点路径上的平衡因子,实际最坏情况要跟新到根,也可能根新到中间就停止了
  3. 更新平衡因子中没有出现问题,插入结束
  4. 不平衡子树要进行旋转,旋转的本质是调平衡,进而降低子树的高度,不会再影响上一层,则插入结束

平衡因子的更新

更新规则:

  • 平衡因子 = 右子树的高度 - 左子树的高度
  • 只有子树的高度变化才会影响当前节点的平衡因子
  • 插入新节点,插入在左子树,parent节点平衡因子减减,插入在右子树,parent节点平衡因子加加
  • parent所在子树的高度的变化决定了是否继续向上更新
  • 高的那边才会影响平衡因子

更新的停止条件:

  1. 更新后平衡因子是1或者-1,那么更新前更新中平衡因子是0->-1,0->1,说明更新前parent子树两边一样高,更新后一边高一边低,符合平衡的要求,但是高度增加了1,高度的增加会影响parent节点的平衡因子,所以要继续向上更新
  2. 更新后parent平衡因子是0,更新中parent的平衡因子变化为-1->0,1->0,更新前parent的子树一边高一边低,更新后parent子树一样高,不会影响parent的平衡因子,所以停止更新
  3. 更新后parent平衡因子是2或-2-1->-2,1->2,更新前parent的子树一边高一边低,更新后,增加节点到了高的那边,高的那边更高了,所以高的那边破坏了平衡,需要旋转处理
  4. 旋转的目标:把parent的子树旋转平衡;降低parent子树的高度,恢复到插入之前的高度。插入之前是平衡的。
  5. 结束的3个情况:旋转后,插入结束;平衡因子是0;平衡因子是-1/1,但是更新到根节点都是-1/1也就结束了
    在这里插入图片描述

旋转的规则

  1. 保证旋转前和旋转后都是搜索树
  2. 让旋转的树从不满足平衡到满足平衡,其次还会降低旋转树的高度来满足平衡因子
    旋转分为四种:左单旋/右单旋/左右双旋/右左双旋

左单旋

左单旋:右边的树比左边的树高
左单旋和右单旋类似就不多做说明了
在这里插入图片描述

右单旋

右单旋:左边的树比右边的树高
a,b,c的高度都是h
h >= 0,a,b,c都是搜索二叉树,只是把它抽象出来了

抽象的情况
  1. 往右旋,5变为根,10变为5的右节点,b变为10的左节点
    在这里插入图片描述
h==0

在这里插入图片描述

h==1

在这里插入图片描述

h== 2

在这里插入图片描述

h == 3

在这里插入图片描述

#pragma once
#include<iostream>using namespace std;// 节点的结构
// 加了一个parent,为了找到父节点的父节点,从而往上走
template<class K,class V>
struct AVLTreeNode
{// 需要parent指针pair<K, V> _kv;AVLTreeNode<K, V>* _left;AVLTreeNode<K, V>* _right;AVLTreeNode<K, V>* _parent;int _bf;// 平衡因子AVLTreeNode(const pair<K, V>& kv):_kv(kv),_left(nullptr),_right(nullptr),_parent(nullptr),_bf(0)// 刚插入的节点平衡因子都是0{}
};// 树的结构
template<class K,class V>
class AVLTree
{typedef AVLTreeNode<K, V> Node;
public:bool insert(const pair<K, V>& kv){if (_root == nullptr){_root = new Node(kv);return true;}Node* parent = nullptr;Node* cur = _root;while (cur){if (cur->_kv.first < kv.first){parent = cur;cur = cur->_right;}else if (cur->_kv.first > kv.first){parent = cur;cur = cur->_left;}else{// 不冗余return false;}}// 链接父节点cur = new Node(kv);if (parent->_kv.first < kv.first){parent->_right = cur;}else{parent->_left = cur;}cur->_parent = parent;// 更新平衡因子// 控制平衡while (parent){if (parent->_left == cur)parent->_bf--;else if (parent->_right == cur)parent->_bf++;if (parent->_bf == 0){break;}eles if (parent->_bf == -1 || parent->_bf == 1){cur = parent;parent = parent->_parent;}else if (parent->_bf == 2 || parent->_bf == -2){// 旋转break;}else{// 逻辑错误,之前就不是AVL树assert(false);}}return true;}
private:Node* _root = nullptr;
};

相关文章:

C++AVL树(一)详解

文章目录 AVL树概念AVL树的插入平衡因子的更新旋转的规则左单旋右单旋抽象的情况h0h1h 2h 3 AVL树 概念 AVL树是一棵平衡二叉查找树&#xff0c;AVL树是空树&#xff0c;保证左右子树都是AVL树&#xff0c;AVL树要求高度差的绝对值不超过1&#xff0c;因为最好情况是1&#…...

ceph新增节点,OSD设备,标签管理(二)

一、访问客户端集群方式 方式一: 使用cephadm shell交互式配置 [rootceph141 ~]# cephadm shell # 注意&#xff0c;此命令会启动一个新的容器&#xff0c;运行玩后会退出&#xff01; Inferring fsid c153209c-d8a0-11ef-a0ed-bdb84668ed01 Inferring config /var/lib/ce…...

c++学习第七天

创作过程中难免有不足&#xff0c;若您发现本文内容有误&#xff0c;恳请不吝赐教。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考。 一、const成员函数 //Date.h#pragma once#include<iostream> using namespace std;class Date { public:Date…...

F/V/F/I频率脉冲信号转换器

F/V/F/I频率脉冲信号转换器 概述&#xff1a;捷晟达科技的JSD TFA-1001系列是一进一出频率脉冲信号转换器(F/V转换器),该频率转换器是将频率脉冲信号(方波、正弦波、锯齿波)转换成国际标准的模拟量电压(电流)信号,并远距离无失真传送到控制室(如:PLC,DCS,AD,PC采集系统)产品的输…...

SQLServer中DBCC INPUTBUFFER显示从客户端发送到 SQL Server 实例的最后一个语句

SQLServer中DBCC INPUTBUFFER显示从客户端发送到 SQL Server 实例的最后一个语句 1、本文内容 语法参数结果集权限示例 适用于&#xff1a; SQL ServerAzure SQL 数据库Azure SQL 托管实例 显示从客户端发送到 SQL Server 实例的最后一个语句。 2、语法 DBCC INPUTBUFFE…...

Mysql面试题----MySQL中CHAR和VARCHAR的区别

存储方式 CHAR&#xff1a;是一种固定长度的字符串类型。它会按照定义的长度来分配存储空间&#xff0c;无论实际存储的字符串长度是多少。例如&#xff0c;定义一个 CHAR (10) 的列&#xff0c;如果存储的值是 ‘ab’&#xff0c;那么它仍然会占用 10 个字符的存储空间&#…...

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…...

探索JavaScript前端开发:开启交互之门的神奇钥匙(二)

目录 引言 四、事件处理 4.1 事件类型 4.2 事件监听器 五、实战案例&#xff1a;打造简易待办事项列表 5.1 HTML 结构搭建 5.2 JavaScript 功能实现 六、进阶拓展&#xff1a;异步编程与 Ajax 6.1 异步编程概念 6.2 Ajax 原理与使用 七、前沿框架&#xff1a;Vue.js …...

什么是网络爬虫?Python爬虫到底怎么学?

最近我在研究 Python 网络爬虫&#xff0c;发现这玩意儿真是有趣&#xff0c;干脆和大家聊聊我的心得吧&#xff01;咱们都知道&#xff0c;网络上的信息多得就像大海里的水&#xff0c;而网络爬虫就像一个勤劳的小矿工&#xff0c;能帮我们从这片浩瀚的信息海洋中挖掘出需要的…...

React 中hooks之 React.memo 和 useMemo用法总结

1. React.memo 基础 React.memo 是一个高阶组件&#xff08;HOC&#xff09;&#xff0c;用于优化函数组件的性能&#xff0c;通过记忆组件渲染结果来避免不必要的重新渲染。 1.1 基本用法 const MemoizedComponent React.memo(function MyComponent(props) {/* 渲染逻辑 *…...

springboot基于微信小程序的手机银行系统

Spring Boot基于微信小程序的手机银行系统是一种结合现代Web技术和移动应用优势的创新金融服务平台。 一、系统背景与意义 随着信息技术的快速发展和用户对便捷金融服务需求的日益增长&#xff0c;传统手机银行系统的人工管理方法已逐渐显露出效率低下、安全性低以及信息传输…...

Kafka后台启动命令

#保存日志 nohup ./kafka-server-start.sh ../config/server.properties > /path/to/logfile.log 2>&1 &#不保存日志 nohup ./kafka-server-start.sh ../config/server.properties >/dev/null 2>&1 & nohup: 是一个Unix/Linux命令&#xff0c;用于…...

面试题目1

文章目录 C语言函数调用详细过程C语言中const与C中const的区别关系运算符有哪些互斥锁与读写锁的区别gcc的编译过程 C语言函数调用详细过程 调用函数&#xff1a;当程序执行到函数调用语句时&#xff0c;会将当前函数的返回地址、参数列表等信息压入栈中&#xff0c;然后跳转到…...

Android AutoMotive --CarService

1、AAOS概述 Android AutoMotive OS是谷歌针对车机使用场景打造的操作系统&#xff0c;它是基于现有Android系统的基础上增加了新特性&#xff0c;最主要的就是增加了CarService&#xff08;汽车服务&#xff09;模块。我们很容易把Android AutoMotive和Android Auto搞混&…...

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅

CSDN 博客之星 2024&#xff1a;默语的技术进阶与社区耕耘之旅 &#x1f31f; 默语&#xff0c;是一位在技术分享与社区建设中坚持深耕的博客作者。今年&#xff0c;我有幸再次入围成为 CSDN 博客之星TOP300 的一员&#xff0c;这既是对过往努力的肯定&#xff0c;也是对未来探…...

【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)

文章目录 S10L43 Exercise 12 - Vim Buffers1 训练目标2 操作指令2.1. 打开 buf* 文件2.2. 查看缓冲区 View the buffers2.3. 切换缓冲区 Switch buffers2.4. 同时编辑多个缓冲区 Edit multiple buffers at once2.5. 缓冲区的增删操作 Add and delete buffers2.6. 练习 Vim 内置…...

python如何使得pdf加水印后的大小尽可能小

在 Python 中为 PDF 添加水印并尽可能减少文件大小&#xff0c;可以采取以下优化策略&#xff1a; 1. 使用合适的库 常用的 PDF 处理库&#xff1a; PyMuPDF&#xff08;fitz&#xff09;&#xff1a;高效且优化的 PDF 处理reportlab pdfrw&#xff1a;可实现水印合并&#…...

Leetcode 3429. Paint House IV

Leetcode 3429. Paint House IV 1. 解题思路2. 代码实现 题目链接&#xff1a;3429. Paint House IV 1. 解题思路 这一题解法上就是一个动态规划的思路&#xff0c;由于题目有两个限制条件&#xff0c;即相邻不可以同色&#xff0c;以及前后同位置不可以同色&#xff0c;因此…...

ASP.NET Core 实战:JWT 身份验证

一、引言 在当今数字化时代&#xff0c;Web 应用的安全性至关重要。ASP.NET Core 作为一种广泛应用的开发框架&#xff0c;为开发者提供了强大的工具来构建安全可靠的应用程序。而 JWT&#xff08;JSON Web Token&#xff09;身份验证则是保障应用安全的关键环节之一。 JWT 身…...

【学习笔记15】如何在非root服务器中,安装属于自己的redis

一、下载安装包 官网下载黑马程序员给的安装包&#xff08;redis-6.2.6&#xff09; 二、将安装包上传至服务器 我将安装包上传在我的文件夹/home/XXX&#xff0c;指定路径中/src/local/redis/&#xff0c;绝对路径为/home/XXX/src/local/redis/解压安装包 XXXomega:~$ cd …...

基于深度学习的微出血自动检测及解剖尺度定位|文献速递-视觉大模型医疗图像应用

Title 题目 Toward automated detection of microbleeds with anatomical scale localization using deep learning 基于深度学习的微出血自动检测及解剖尺度定位 01 文献速递介绍 基于深度学习的脑微出血&#xff08;CMBs&#xff09;检测与解剖定位 脑微出血&#xff…...

Couchbase UI: Dashboard

以下是 Couchbase UI Dashboard 页面详细介绍&#xff0c;包括页面布局和功能说明&#xff0c;帮助你更好地理解和使用。 1. 首页&#xff08;Overview&#xff09; 功能&#xff1a;提供集群的整体健康状态和性能摘要 集群状态 节点健康状况&#xff1a;绿色&#xff08;正…...

Python

1 变量 1.1 定义 变量&#xff1a;为快速定义目标&#xff0c;将数据在内存占据的存储空间分配的一个名称。 定义&#xff1a;变量名 数据值 作用&#xff1a;临时存储数据 message "hello" print(message)#输出&#xff1a;hello message "hello Pytho…...

一个软件分发和下载的网站源码,带多套模板

PHP游戏应用市场APP软件下载平台网站源码手机版 可自行打包APP&#xff0c;带下载统计&#xff0c;带多套模板&#xff0c;带图文教程 代码下载&#xff1a;百度网盘...

war包 | Docker部署flowable-ui

文章目录 引言I war包部署flowable-ui下载war包配置Tomcat访问 flowable-uiII Docker启动flowable-ui并修改配置Docker启动flowable-ui修改配置访问Flowable UI界面。III 知识扩展加速源docker run -i -t -d 参数引言 Flowable 支持 BPMN 2.0 行业标准,同时提供了一些 Flowab…...

07_游戏加载窗口

隐藏动态提示窗口 创建空节点 命名为 LoadingWnd 意为加载窗口 并设置全屏 在子级下创建Image作为加载背景 也设置成全屏 将以下资源放进Art文件夹中 设置好精灵模式后拖拽至 Image的Source Image框选 创建文本作为提示内容 增加描边组件OutLine可以美化字体 创建Image作为加载…...

proxyman抓包Java中feign请求以及断点请求响应内容修改或流转到本地

proxyman抓包Java中feign请求以及断点请求响应内容修改或流转到本地 配置流程第一步: 借助arthas配置请求代理第二步: 借助proxyman配置远程映射第三步: 借助SwitchHosts配置hosts域名最后: 借助ssh的LocalForward功能, 打通网络(这步网络不通才需要) 最近在修bug的过程中, 因为…...

PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍 torchinfo是一个为PyTorch用户量身定做的开源工具&#xff0c;其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程&#xff0c;让模型架构一目了然。通过torchinfo的summary函数&#xff0c;用户可以快速获取模型的详细结构和统计信息&#xff0…...

centos9编译安装opensips 二【进阶篇-定制目录+模块】推荐

环境&#xff1a;centos9 last opensips -V version: opensips 3.6.0-dev (x86_64/linux) flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, HP_MALLOC, DBG_MALLOC, CC_O0, FAST_LOCK-ADAPTIVE_WAIT ADAPTIVE_WAIT_LOOPS1024, MAX_RE…...

MongoDB 备份与恢复综述

目录 一、基本概述 二、逻辑备份 1、全量备份 2、增量备份 3、恢复 三、物理备份 1、cp/tar/fsync 2、WiredTiger 热备份 3、恢复 四、快照备份 一、基本概述 MongoDB 是一种流行的 NoSQL 数据库&#xff0c;它使用文档存储数据&#xff0c;支持丰富的查询语言和索引…...

Apache Hive3定位表并更改其位置

Apache Hive3表 1、Apache Hive3表概述2、Hive3表存储格式3、Hive3事务表4、Hive3外部表5、定位Hive3表并更改位置6、使用点表示法引用表7、理解CREATE TABLE行为 1、Apache Hive3表概述 Apache Hive3表类型的定义和表类型与ACID属性的关系图使得Hive表变得清晰。表的位置取决于…...

Flutter项目和鸿蒙平台的通信

Flutter项目和鸿蒙平台的通信 前言Flutter和Harmonyos通信MethodChannelBasicMessageChannelEventChannel 前言 大家在使用Flutter开发项目的时候&#xff0c; Flutter提供了Platfrom Channel API来和个个平台进行交互。 Flutter官方目前提供了一下三种方式来和个个平台交互&…...

5. 马科维茨资产组合模型+政策意图AI金融智能体(Qwen-Max)增强方案(理论+Python实战)

目录 0. 承前1. AI金融智能体1.1 What is AI金融智能体1.2 Why is AI金融智能体1.3 How to AI金融智能体 2. 数据要素&计算流程2.1 参数集设置2.2 数据获取&预处理2.3 收益率计算2.4 因子构建与预期收益率计算2.5 协方差矩阵计算2.6 投资组合优化2.7 持仓筛选2.8 AI金融…...

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础 目录 1.NAND FLASH 和NOR FLASH异同 ? 2.CPU,MPU,MCU,SOC,SOPC联系与差别? 3.什么是交叉编译&#xff1f; 4.为什么要交叉编译&#xff1f; 5.描述一下嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别? 1…...

thinkphp8在使用apidoc时, 4层的接口会有问题 解决办法

thinkphp8 4层的接口会有问题, 比如这样的接口 /adminapi/notice/announcements/lists, 应该换成 /adminapi/notice.announcements/lists 这样才行, 有没有人处理过? 实际上在官网的帮助里有描述 自动生成的url不对&#xff1f; | Apidoc // config/apidoc.php //... auto_url…...

【jmeter】下载及使用教程【mac】

1.安装java 打开 Java 官方下载网站https://www.oracle.com/java/technologies/downloads/选择您想要下载的 Java 版本&#xff0c;下载以 .dmg 结尾的安装包&#xff0c;注意 JMeter 需要 Java 8下载后打开安装包点击“安装”按钮即可 2.下载jmeter 打开 Apache JMeter 官方…...

C# ASP.NET MVC项目内使用ApiController

1.在App_Start文件夹新建WebApiConfig.cs文件&#xff0c;建立webApi路由的注册方法。 using System.Web.Http;namespace PrivilegeManager {public class WebApiConfig{public static void Register(HttpConfiguration config){config.MapHttpAttributeRoutes();config.Route…...

Langchain+FastApi+Vue前后端Ai对话(超详细)

一、引入 首先可以先看下作者的文章 FastApi相关文章&#xff1a;创建最简单FastApi的项目Vue相关文章&#xff1a;最简单的aixos二次封装Langchain相关文章&#xff1a;如何使用LangSmith跟踪deepseek模型 二、后端搭建 1 项目文件结构 routers&#xff1a;存放api接口se…...

【电脑无法通过鼠标和键盘唤醒应该怎么办】

【电脑无法通过鼠标和键盘唤醒应该怎么办】 方法一(有时候不起作用):方法二(方法一无效时,使用方法二): 方法一(有时候不起作用): 方法二(方法一无效时,使用方法二):...

OpenCV相机标定与3D重建(65)对图像点进行去畸变处理函数undistortPoints()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从观测到的点坐标计算理想点坐标。 该函数类似于 undistort 和 initUndistortRectifyMap&#xff0c;但它操作的是稀疏点集而不是光栅图像。此外…...

Logo语言的函数实现

Logo语言的函数实现 引言 Logo语言是一种教育性编程语言&#xff0c;最初由西摩尔派普特&#xff08;Seymour Papert&#xff09;在1960年代开发。它以“海龟图形”&#xff08;Turtle Graphics&#xff09;而闻名&#xff0c;通过简单的命令控制一只“海龟”在屏幕上绘制图形…...

前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释

文章目录 前言1、技术复杂性与成熟度 / Technical Complexity and Maturity2.、应用场景与行业需求 / Application Scenarios and Industry Demand3、监管与法律问题 / Regulatory and Legal Issues4、去中心化与网络效应 / Decentralization and Network Effects5、能源消耗与…...

Java设计模式 九 桥接模式 (Bridge Pattern)

桥接模式 (Bridge Pattern) 桥接模式是一种结构型设计模式&#xff0c;它的核心思想是将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合而不是继承的方式来扩展功能&#xff0c;从而减少类之间的耦合度。 1. 模式结构 桥接模式的结构包括以下角色&…...

stm8s单片机(二)外部中断实验

中断优先级 stm8的中断优先级不是固定不变的&#xff0c;stm8的中断分为硬件优先级与软件优先级&#xff1b;当多个中断发生时&#xff0c;cpu会先响应软件优先级高的中断&#xff0c;若软件优先级相同会先响应硬件优先级高的&#xff1b; 其中软件优先级有四个 /*** brief …...

计算机网络 (53)互联网使用的安全协议

一、SSL/TLS协议 概述&#xff1a; SSL&#xff08;Secure Sockets Layer&#xff09;安全套接层和TLS&#xff08;Transport Layer Security&#xff09;传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发&#xff0c;广泛应用于基于万维网的各种网络…...

数学基础 --线性代数之理解矩阵乘法

理解矩阵乘法的解析 矩阵乘法&#xff08;Matrix Multiplication&#xff09;是线性代数中的核心操作之一。在数学、几何和工程实际中&#xff0c;它不仅是一种代数运算规则&#xff0c;还承载着丰富的几何和映射意义。本文将从多个角度深入解析矩阵乘法&#xff0c;帮助读者理…...

数学规划问题2 .有代码(非线性规划模型,最大最小化模型,多目标规划模型)

非线性规划模型 FIrst:转化为标准型 在matlab中求非线性规划的函数 练习题: 典型例题: 最大最小化模型 核心思想&#xff1a; matlab的模型求解 经典例题: 多目标规划模型 基本概念 求解思路: 模型构建步骤 经典例题: 非线性规划模型 非线性规划&#xff08;Nonl…...

jax 和 jaxlib 的 cuda 版本安装

笔者花费时间才在 Ubuntu 20.04 适配上 jax 和 jaxlib 的 cuda 版本安装&#xff0c;以及 chex 版本。 版本展示 本人版本展示 jax0.4.27 &#xff0c;jaxlib0.4.27cuda12.cudnn89&#xff0c;chex0.1.86。 安装过程 cuda 以及环境变量配置过程 首先安装cuda12.4和cudnn8.9&…...

Spring Boot MyBatis Plus 版本兼容问题(记录)

Spring Boot & MyBatis Plus 版本兼容问题&#xff08;Invalid value type for attribute factoryBeanObjectType: java.lang.String&#xff09; 问题描述问题排查1. 检查 MapperScan 的路径2. 项目中没有配置 FactoryBean3. 检查 Spring 和 MyBatis Plus 版本兼容性 解决…...

Ubuntu如何安装redis服务?

环境&#xff1a; Ubuntu22.04 WSL2 问题描述&#xff1a; 如何安装redis服务&#xff1f; 解决方案&#xff1a; 1.在 Linux 上&#xff08;如 Ubuntu/Debian&#xff09;安装 1.通过包管理工具安装 Redis 服务器&#xff1a; sudo apt update sudo apt install redis…...