[数据结构#1] 并查集 | FindRoot | Union | 优化 | 应用
目录
1. 并查集原理
问题背景
名称与编号映射
数据结构设计
2. 并查集基本操作
(1) 初始化
(2) 查询根节点 (FindRoot)
(3) 合并集合 (Union)
(4) 集合操作总结
并查集优化
(1) 路径压缩
(2) 按秩合并
3. 并查集的应用
(1) 统计省份数量
(2) 判断等式方程是否成立
并查集是一种用于处理 元素分组和集合操作 的数据结构,主要功能是支持以下两种操作:
- 合并:将两个集合合并成一个集合。
- 查询:判断某个元素属于哪个集合。
并查集实际上是由多棵 互不相交的树 组成的森林,以下是详细的整理内容。
1. 并查集原理
问题背景
在一些问题中,需要将 n 个不同的元素划分为若干个互不相交的集合,并支持以下操作:
- 查询某个元素所属的集合。
- 合并两个集合。
例如,某公司校招的 10 名学生,分别来自不同地区,起初各自独立。根据他们的交流情况,可以将其分为几个小团体。通过并查集,可以很好地表示这些分组关系,并实现高效的集合操作。
- 首先先给这些学生进行编号:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 给以下数组用来存储该小集体,数组中的数字代表:该小集体中具有成员的个数。(负号下文解释)
继续往下看,如何描述他们之间的关系呢?
西安学生小分队s1={0,6,7,8},成都学生小分队s2={1,4,9},武汉学生小分队s3={2,3,5}就相互认识了,10个人形成了三个小团体。假设右三个群主0,1,2担任队长,负责大家的出行。如何表示这三个集合呢?
很简单,把他们建立三颗树形结构。一个数据结构有多颗树不就是之前所说的森林了。如何建树呢?一个集体随便选取一个节点作根,剩下节点取做它的孩子。
那我们如何来表示这里的集合结构呢?
并查集是森林,森林是由多个树组成,这里用两层来表示这里的关系。
- 像堆类似,用数组下标表示关系
- 双亲表示法(存储双亲的下标)
仔细观察数组中内融化,可以得出以下结论:
- 数组的下标对应集合中元素的编号
- 数组中如果为负数,负号代表根,数字绝对值 代表该集合中元素个数
- 数组中如果为非负数,代表该元素双亲在数组中的下标
合并过程:
继续往下看,如何将已经有的集合合并呢? 刚才都是独立的集合直接合并,现在是已经有集合怎么合并呢?
比如说在公司工作一段时间后,西安小分队中8号同学与成都小分队4号同学奇迹般的走到了一起,两个小圈子的学生相互介绍,最后成为了一个小圈子:怎么合并呢?
- 不能直接合并,而是找到两个数的根,让根合并。
找根很简单,看自己位置保存的是不是负数,如果是负数自己就是根了,如果不是负数保存的就是双亲的下标了,就去看看双亲下标保存的是不是负数,不是负数还跳,直到找到双亲下标保存的值是负数,这个下标也就是根了。
把1下标的值加道0下标,然后1下标位置保存0下标。
通过以上例子可知,并查集一般可以解决一下问题:
- 查找元素属于哪个集合
沿着数组表示树形关系以上一直找到根(即:树中中元素为负数的位置) - 查看两个元素 是否属于同一个集合
沿着数组表示的树形关系往上一直找到树的根,如果根相同表明在同一个集合,否则不在 - 将两个集 合归并成一个集合
将两个集合中的元素合并
将一个集合名称改成另一个集合的名称 - 集合的个数
遍历数组,数组中元素 为负数的个数即为集合的个数。
下面就实现一下并查集~
名称与编号映射
- 可能会有这样的问题,内部给他们编号,万一外面给的是10个人给的是名字,我怎么知道谁是那个编号呢?怎么解决?
借助vector,map建立对应映射关系!
vector
:存储名称列表,通过下标快速找到名字。map
:建立名字到编号的映射关系。
代码示例:
template<class T>
class UnionFindSet
{
public:
UnionFindSet(const T* a, size_t sz)
{for (int i = 0; i < sz; ++i){_a.push_back(a[i]);//将数组中元素添加到vector中_IndexMap[a[i]] = i;//将人映射到hash中}
}private:
vector<T> _a; //编号找人
map<T, int> _IndexMap; //人找编号
};int main()
{string arr[] = { "张三","李四","王五","赵六" };UnionFindSet<string> ufs(arr, 4);return 0;
}
_a.push_back(a[i]);
:这一行代码将数组a
的第i
个元素添加到成员变量_a
向量的末尾。这里a
是构造函数参数中的一个指针,指向传入的数组,而a[i]
则是该数组中第i
个位置的元素。_IndexMap[a[i]] = i;
:此行代码则是在建立一个映射关系。它使用成员变量_IndexMap
,这是一个从类型T
映射到整数类型的关联容器(map)。这里它将数组a
的第i
个元素作为键,i
作为值插入到_IndexMap
中。因此,以后当我们知道某个人的名字时,可以通过_IndexMap
快速查找这个人在原始数组中的索引位置。
这样不管是给下标还是给名字都可以解决这里的问题。
数据结构设计
并查集通过一个数组表示关系:
- 数组下标 表示集合中的元素编号。
- 数组值 用于表示该元素的父节点或根节点的信息。
-
- 负数:表示集合的根,绝对值为该集合中元素的个数。
- 非负数:表示其父节点在数组中的下标。
双亲表示法:每个节点存储其父节点的位置,通过不断向上查找父节点,最终可以找到集合的根节点。
2. 并查集基本操作
(1) 初始化
- 初始时,每个元素自成一个集合,数组值均为 -1,表示每个集合的大小为 1。
UnionFindSet(int sz): _ufs(sz, -1) {} // 初始化,大小为 sz,每个位置存储 -1
(2) 查询根节点 (FindRoot)
- 找到某个元素所在集合的根节点。
- 如果当前节点的父节点为负数,则该节点是根节点。
- 路径压缩:为了提高查询效率,将查询路径上的所有节点直接连接到根节点。
int FindRoot(int x) {int root = x;// 向上查找根节点while (_ufs[root] >= 0) {root = _ufs[root];//利用上述讲到的特性原则,实现向上查找}// 路径压缩while (_ufs[x] >= 0) {int parent = _ufs[x];_ufs[x] = root;x = parent;}return root;
}
这里在补充说一点,并查集 路径压缩 的问题。比如集合是下面这个样子,要从9找到根需要跳很多层。影响找根的效率,能不能想到什么办法把路径压缩一下呢?
其实也很简单 ,反正都是在同一个集合,是不是直接可以考虑把下面的直接压到根的下面做根的孩子。这样就变成了一层。如果数据量很多层数很高压缩路径后这样很不错。
- 一般在查找根的时候去压缩。
- 查找谁就把它这一条路径压缩。
- 找到根之后判断一下,如果它的父亲就是根就不用压缩,如果不是说明中间有间隔层,然后就可以把这条路径压缩。
比如是这个4,首先先把4变成2的孩子,然后将4的父亲1也去变成2的孩子,这条路径都可以变成2的孩子。
(3) 合并集合 (Union)
- 并查集 除了路径压缩,还有一种提高效率的方式,比如两个集合 合并的时候
-
- 小集合向大集合合并,以减少树的深度。
- 实现步骤:
-
- 找到两个集合的根节点。
- 如果根节点相同,说明两个元素已在同一个集合中,无需合并。
- 否则,将小集合的根指向大集合的根,并更新集合大小。
bool Union(int x1, int x2) {int root1 = FindRoot(x1);int root2 = FindRoot(x2);if (root1 == root2) return false;// 控制小集合向大集合合并if (abs(_ufs[root1]) < abs(_ufs[root2])) {swap(root1, root2);}_ufs[root1] += _ufs[root2];_ufs[root2] = root1;return true;
}
(4) 集合操作总结
- 查找元素所属集合:找到其根节点。
- 判断两个元素是否属于同一集合:检查它们的根节点是否相同。
- 统计集合数量:统计数组中负数的个数,即为集合的数量。
并查集优化
(1) 路径压缩
- 在查询根节点时,将路径上的节点直接连接到根节点,减少树的高度。
- 优化后的查找复杂度接近 O(1) 。
(2) 按秩合并
- 优先将元素较少的集合合并到元素较多的集合,进一步减少树的高度。
- 实现方法:比较根节点的绝对值,选择小集合向大集合合并。
完整代码:
#pragma once#include<iostream>
#include<vector>
#include<map>using namespace std;//template<class T>
//class UnionFindSet
//{
//public:
// UnionFindSet(const T* a, size_t sz)
// {
// for (int i = 0; i < sz; ++i)
// {
// _a.push_back(a[i]);
// _IndexMap[a[i]] = i;
// }
// }
//
//
//private:
// vector<T> _a; //编号找人
// map<T, int> _IndexMap; //人找编号
//};class UnionFindSet
{
public:UnionFindSet(int sz):_ufs(sz,-1)// 初始时,将数组中元素全部设置为1{}bool Union(int x1, int x2){int root1 = FindRoot(x1);int root2 = FindRoot(x2);// x1已经与x2在同一个集合if (root1 == root2)return false;//控制数据量小的往大的集合合并if (abs(_ufs[root1]) < abs(_ufs[root2])){swap(root1, root2);}// 将两个集合中元素合并_ufs[root1] += _ufs[root2];// 将其中一个集合名称改变成另外一个_ufs[root2] = root1;return true;}// 给一个元素的编号,找到该元素所在集合的名称int FindRoot(int x){int root = x;while (_ufs[root] >= 0)// 如果数组中存储的是负数,找到,否则一直继续{root = _ufs[root];}//路径压缩while (_ufs[x] >= 0){int parent = _ufs[x];_ufs[x] = root;x = parent;}return root;}bool IsSet(int x1, int x2){return FindRoot(x1) == FindRoot(x2);}// 数组中负数的个数,即为集合的个数size_t SetSize(){size_t count = 0;for (auto e : _ufs){if (e < 0) ++count;}return count;}private:vector<int> _ufs;
};
3. 并查集的应用
(1) 统计省份数量
题目链接:[LCR 116. 省份数量]
- 思路:
-
- 使用并查集,将直接连接的城市合并到同一个集合。
- 遍历矩阵,统计并查集中集合的数量。
代码实现:
int findCircleNum(vector<vector<int>>& isConnected) {int n = isConnected.size();vector<int> ufs(n, -1);auto Findroot = [&](int x) {while (ufs[x] >= 0) {x = ufs[x];}return x;};for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {if (isConnected[i][j] == 1) {int root1 = Findroot(i);int root2 = Findroot(j);if (root1 != root2) {ufs[root1] += ufs[root2];ufs[root2] = root1;}}}}return count_if(ufs.begin(), ufs.end(), [](int x) { return x < 0; });
}
(2) 判断等式方程是否成立
题目链接:[990. 等式方程的可满足性]
- 思路:
-
- 将所有“相等”的变量合并到同一个集合。
- 遍历“不等”关系,若两个变量属于同一个集合,则矛盾。
代码实现:
bool equationsPossible(vector<string>& equations) {vector<int> ufs(26, -1);auto Findroot = [&](int x) {while (ufs[x] >= 0) {x = ufs[x];}return x;};// 合并“相等”关系for (auto& eq : equations) {if (eq[1] == '=') {int root1 = Findroot(eq[0] - 'a');int root2 = Findroot(eq[3] - 'a');if (root1 != root2) {ufs[root1] += ufs[root2];ufs[root2] = root1;}}}// 检查“不等”关系for (auto& eq : equations) {if (eq[1] == '!') {int root1 = Findroot(eq[0] - 'a');int root2 = Findroot(eq[3] - 'a');if (root1 == root2) return false;}}return true;
}
并查集 使用场景:两极性的集合划分
连接或不连接,相等或不相等 的判断
并查集是一种高效的数据结构,支持快速的 合并 和 查询 操作,并在路径压缩和按秩合并优化下性能接近常数时间。
相关文章:
[数据结构#1] 并查集 | FindRoot | Union | 优化 | 应用
目录 1. 并查集原理 问题背景 名称与编号映射 数据结构设计 2. 并查集基本操作 (1) 初始化 (2) 查询根节点 (FindRoot) (3) 合并集合 (Union) (4) 集合操作总结 并查集优化 (1) 路径压缩 (2) 按秩合并 3. 并查集的应用 (1) 统计省份数量 (2) 判断等式方程是否成…...
用于卫星影像间接RPC模型精化的通用光束法平差方法
引言 介绍了通用RPC模型的表达式,which has been down to death 描述了RPC模型产生误差的原因——主要与定义传感器方位的姿态角有关。 每个影像都会对应一个三维点云,但是对同一地物拍摄的不同影像对应出来的三维点云是不一样的,所以才需…...
关于Redis主从复制实验操作
需要搭建帮助的可以去taobao搜索Easy Company技术服务,谢谢!!! 需要搭建帮助的可以去taobao搜索Easy Company技术服务,谢谢!!! Redis主从复制需要一主二从(共三个Redis…...
【HarmonyOS】鸿蒙获取appIdentifier,Identifier
【HarmonyOS】鸿蒙获取appIdentifier,Identifier 一、前言 三方后台需要填写的所谓appIdentifier,Identifier信息,其实对应鸿蒙应用的appID。 二、解决方案: 注意,模拟器获取data.signatureInfo.appIndentifer为空…...
matplotlib(二)
目录 1、折线图(plot)与基础绘制图功能 1.1、设置图形风格 2、多坐标系显示图像 3、折线图的应用场景 1、折线图(plot)与基础绘制图功能 # import matplotlib.pyplot as plt # import random # #1.创建画布 # plt.figure(figs…...
Jenkins容器使用宿主机Docker(五)
DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六&#…...
基于前后端分离的食堂采购系统源码:从设计到开发的全流程详解
本篇文章,笔者将从系统设计到开发的全过程进行详解,帮助开发者和企业了解如何高效构建一套完善的食堂采购系统。 一、系统需求分析 在开发一套基于前后端分离的食堂采购系统前,必须对业务需求和功能模块进行详细分析,确保系统设…...
git使用教程(超详细)-透彻理解git
一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉,我们要重新认识本文所讲述的所有概念。 1.worktree worktree是一个目录,你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree必须要与一个…...
Bugku---misc---隐写2
题目出处:首页 - Bugku CTF平台 ✨打开发现是一张图片,于是查看属性,放在010查看,这都是基本步骤了,发现里面有一个flag.rar!!!拿binwalk分析也确实存在 ✨于是按照压缩包的起始位置…...
数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)
数据仓库、商业智能及维度建模初步 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 博主在这里先把这本书"变薄"~有时间的小伙伴可以亲自再读一读,感受一下…...
将 Ubuntu 22.04 LTS 升级到 24.04 LTS
Ubuntu 24.04 LTS 将支持 Ubuntu 桌面、Ubuntu 服务器和 Ubuntu Core 5 年,直到 2029 年 4 月。 本文将介绍如何将当前 Ubuntu 22.04 系统升级到最新 Ubuntu 24.04 LTS版本。 备份个人数据 以防万一,把系统中的重要数据自己备份一下~ 安装配置SSH访问…...
Springboot3.x配置类(Configuration)和单元测试
配置类在Spring Boot框架中扮演着关键角色,它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置,取代了早期版本中依赖的XML配置文件。 集中化管理:借助Configuration注解,Spring Boot让用户能在一个或几个配…...
Python:类方法、实例方法与静态方法深度解析(补)
目录 一.实例变量 二.类变量 三.实例方法 四.类方法 五.静态方法 六.小结 总结 今天看程序时,发现自己好像忘了这三者的区别,所以重新写了一篇深度解析,希望之前看博客没看懂的小伙伴可以通过这个博客分清楚这三个方法。跟的是麦叔的课…...
Certimate:简化 SSL 证书管理的开源工具
引言 SSL(Secure Sockets Layer)证书对于保护网站和用户数据至关重要。然而,管理多个 SSL 证书可能变得繁琐和复杂。为了解决这个问题,Certimate 应运而生。Certimate 是一款开源的 SSL 证书管理工具,旨在简化 SSL 证书的申请、部署和续期流程。它特别适合需要管理多个域…...
rabbitMq举例
新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服! 生产者 代码举例 public String sendMsg(final String exchangeName,final String routingKey,final String msg) {} /*** 发送消息* param exchangeName exchangeName* param routin…...
人工智能增强的音频和聊天协作服务
论文标题:AI-enabled Audio and Chat Collaboration Services 中文标题:人工智能增强的音频和聊天协作服务 作者信息: Emil P. Andersen, Norwegian Defence Research Establishment (FFI), Kjeller, NorwayJesper R. Goksr, Sindre E. Ha…...
ctr: content digest XXX not found
1、问题描述 ctr 推送镜像到本地仓库报错 ctr: content digest sha256:b96e30ccb0a1e225493e53d4f81cb2c27183406e5f902ed43c4bf15dc6f21c9c: not found 2、问题原因 本人的平台是M1,正常情况下载镜像会自动按平台寻找版本,但是由于我下载的镜像版本没…...
java内存模型
文章目录 1.java内存模型2.重排序3.内存屏障3.1四类内存屏障指令 4.happens-before4.1 规则5.volatile5.1特性5.2规则5.3 内存语义5.4 内存屏障插入策略 1.java内存模型 java内存模型(JMM)定义了线程和主内存之间的抽象关系:线程之间的共享变…...
Java Object类与Objects类
1. Object 类 (1) Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法(public class Object)。 . (2) Object类常见方法 方法说明public String toString()返回对象的字符串形式public boolean eq…...
【目标检查】YOLO系列之:Triton 推理服务器Ultralytics YOLO11
Triton 推理服务器 1、引言2、Triton服务器2.1 什么是Triton Inference Server2.2 将YOLO11 导出为ONNX 格式2.3 设置Triton 模型库2.3.1 创建目录结构2.3.2 将导出的ONNX 模型移至Triton 资源库 2.4 运行Triton 推断服务器2.4.1 使用 Docker 运行Triton Inference Server2.4.2…...
力扣69. x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1:…...
关于目标检测YOLO 各版本区别v1-v11/vX/vR
概述 YOLO(You Only Look Once,你只看一次)是一系列开创性的实时目标检测模型,它们彻底改变了计算机视觉领域。由Joseph Redmon开发,后续版本由不同研究人员迭代,YOLO模型以其在图像中检测对象的高速度和准…...
求成绩的平均值,统计低于平均分的人数
【问题描述】编写函数double average(double score[ ], int n,int *m)对存放在实型数组中考试成绩进行求平均分和低于平均分的人数,要求在主函数里面进行班级人数和成绩的输入,调用average函数进行计算成绩平均值和低于平均分的人数后,返回主…...
SGD、BGD、MBGD 之间的区别
文章目录 SGD(Stochastic Gradient Descent,随机梯度下降)BGD(Batch Gradient Descent,批量梯度下降)MBGD(Mini-Batch Gradient Descent,小批量梯度下降) 前置࿱…...
Android -- WebView之loadData加载html字符串显示网页
目录 前言1. loadUrl 加载网页地址2. loadData 加载Html字符来显示网页3. loadDataWithBaseURL4. 总结 前言 最近在给一个老项目做64位so文件的适配,当应用发布到应用市场上后,用户反馈64位手机上的网页加载不出内容,但32位的手机上是正常…...
单片机:实现数码管00盗99显示(附带源码)
单片机实现数码管00到99显示 在嵌入式开发中,数码管是最常用的显示设备之一,特别适合用于显示数字信息。本项目的目标是利用8051单片机控制数码管实现数字显示,从00到99的循环显示。我们将通过按键或定时器来控制数字的增减,并通…...
大厂面试智力题大全(详细解题思路,持续更新)
目录 八个球有一个比较重,问称几次可以把较重的球拎出来,具体称重的方法是怎样的? 64 匹马 8 个赛道,找出前四名,最少赛多少场(腾讯) 一个城市的加油站数量 5L的水桶和3L的水桶怎么量出4L的水 有一堆粗细不均匀的绳子,燃烧完一个绳子需要2小时,如何用这些绳子凑出…...
使用 acme.sh 签发和自动续期 ssl https 证书
acme.sh 是一个热度非常高的签发和自动续期 https 证书的工具,虽然官网上提供了充分的操作说明,但是不够简洁,本文以在 nginx 中签发和配置http 为例,列出必要的几个简单步骤。 安装 因为网络原因,github 大部分人是…...
YOLOv9改进,YOLOv9引入DLKA-Attention可变形大核注意力,WACV2024,二次创新RepNCSPELAN4结构
摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…...
docker安装mysql8
上一篇提到了docker安装mysql5.7和mysql8有所不同,这一篇说一下mysql8的安装 1、宿主机创建映射目录 mkdir -p /data/mysql8/log mkdir -p /data/mysql8/data mkdir -p /data/mysql8/conf这里我放在了/data/mysql8目录下 2、拉取mysql镜像 docker pull mysql:8.…...
【云原生知识】Kubernets实践-前端服务如何访问后端服务
文章目录 概述步骤1:部署后端服务步骤2:配置Nginx步骤3:创建Nginx服务总结 如何确保 Nginx 能持续访问后端服务?相关文献 概述 假设你正在使用Kubernetes作为容器云平台,以下是如何配置Nginx以及相关服务,…...
M3DM的autodl环境构建过程笔记
文章目录 在3D-ADS环境https://blog.csdn.net/tfxzgp/article/details/144259472基础上构建(失败的记录,不用看)更换镜像重来(成功)安装缺少的包修改models.py中的RGB和点云backbone的路径修改main.py路径参数运行 在3D-ADS环境https://blog.…...
jmeter CLI Mode 传参实现动态设置用户数
一.需求 CLI 运行模式下每次运行想要传入不同的用户数,比如寻找瓶颈值的场景,需要运行多次设置不同的用户数。 二.解决思路 查看官方API Apache JMeter - Users Manual: Getting Started api CLI Mode 一节中提到可以使用如下参数做属性的替换&#…...
Mac系统下 jdk和maven 安装教程
一、jdk安装教程 1、先去官网选择对应版本下载 官网网址:Java SE | Oracle Technology Network | Oracle 中国 这里我选择的是jdk8的版本,如果你们想下载更高的版本就选择其他版本,目前大部分公司和教程使用jdk8的版本比较多。 点击macos&a…...
pyfink1.20版本下实现消费kafka中数据并实时计算
1、环境 JDK版本:1.8.0_412python版本:3.10.6apache-flink版本:1.20.0flink版本:1.20kafka版本:kafka_2.12-3.1.1flink-sql-connector-kafka版本:3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…...
【经验分享】私有云运维的知识点
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
影像组学+病理组学+深度学习人工智能应用
影像组学 基础学习内容: 特征提取:使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选:应用ICC、相关系数、mRMR、Lasso等方法。建模:使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估:通过A…...
how to write 述职pptx as a tech manager
As a technical manager, crafting an effective 述职 (performance review) PPT requires you to highlight your leadership, team accomplishments, technical contributions, challenges faced, and future plans. Heres a structured approach to design your PPT: 1. Cov…...
用户发送请求后服务端i/o工作过程
华子目录 服务端i/o介绍磁盘i/o机械磁盘的寻道时间、旋转延迟和数据传输时间常见的机械磁盘平均寻道时间值常见磁盘的平均延迟时间每秒最大IOPS的计算方法 网络i/o网络I/O处理过程磁盘和网络i/o 一次完整的请求在内部的执行过程 服务端i/o介绍 i/o在计算机中指Input/Output&am…...
功能篇:springboot实现防盗链功能
防盗链(Hotlink Protection)是一种防止其他网站直接链接到你网站的资源(如图片、视频等),从而节省带宽和保护内容的有效手段。在Spring Boot应用程序中实现防盗链功能,可以通过多种方式来达成,例…...
MySQL迁移SQLite
将 MySQL 的表结构和数据迁移到 SQLite,可以通过以下步骤实现。这个过程主要包括导出 MySQL 数据库到 SQL 文件,然后将其导入到 SQLite 数据库中。 步骤 1: 导出 MySQL 数据库 首先,需要将 MySQL 数据库导出为一个 SQL 文件。可以使用 mysq…...
嵌入式面试知识点总结 -- 面试篇
1、请你做个简单的自我介绍 把所有工作内容,分类整理出和岗位匹配的能力关键字,然后围绕关键字展开讲。每段经历要用数据来支撑。 例如: 面试官你好,我叫XXX,毕业于XXX,很荣幸参加此次面试。 围绕面试岗位…...
华为OD机试真题---观看文艺汇演问题
华为OD机试中的“观看文艺汇演问题”是一道考察算法与数据结构能力的题目。以下是对该题目的详细解析: 一、题目描述 为了庆祝某个重要节日(如中国共产党成立100周年),某公园将举行多场文艺表演。很多演出都是同时进行的&#x…...
类OCSP靶场-Kioptrix系列-Kioptrix Level 2
一、前情提要 二、实战打靶 1. 信息收集 1.1. 主机发现 1.2. 端口扫描 1.3.目录遍历 2.漏洞发现 2.1. 登录框测试 2.2. 发现命令执行 2.3 构造命令执行利用payload 3.提权 3.1. 搜索提权exp 3.2. 查看exp信息 3.3. Privilege Escalation的exp利用 exp_9542 一、前…...
openlane
openlane数据集,lane3d_1000里训练集157807张图片,测试集39981张图,md太多了...
修改vscode设置的原理
转载请标明出处:小帆的帆的专栏 修改vscode设置 首先需要理解的是,vscode的系统设置和插件设置都是通过settings.json文件管理的。 vscode中有三个Settings,三个Settings分别对应三个settings.json文件 Default Settings:默认…...
解决docker环境下aspose-words转换word成pdf后乱码问题
描述 环境:docker 部署工具:Jenkins 需求:本地上传的word文档需要转换成pdf 问题:转换之后的pdf文档出现小框框(乱码) 转换成PDF的操作 pom: <dependency><groupId>org.apach…...
2024年12月16日Github流行趋势
项目名称:PDFMathTranslate 项目维护者:Byaidu reycn hellofinch Wybxc YadominJinta项目介绍:基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/Docker。项目star数…...
ElasticSearch 常见故障解析与修复秘籍
文章目录 一、ElasticSearch启动服务提示无法使用root用户二、ElasticSearch启动提示进程可拥有的虚拟内存少三、ElasticSearch提示用户拥有的可创建文件描述符太少四、ElasticSearch集群yellow状态分析五、ElasticSearch节点磁盘使用率过高,read_only状态问题解决六…...
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力 🐸 前言 🐸🐞往期绘画>>点击进所有绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 汤…...