位图的实现和拓展
一:位图的介绍
①:需要位图的场景
给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中?
要判断一个数是否在某一堆数中,我们可能会想到如下方法:
A:将这一堆数进行排序,然后通过二分查找的方法判断该数是否在这一堆数中。
B:将这一堆数插入到unordered_set容器中,然后调用find函数判断该数是否在这一堆数中。
单从方法上来看,这两种方法都是可以,而且效率也不错,第一种方法的时间复杂度是O (NlogN ) O(NlogN)O(NlogN),第二种方法的时间复杂度是O (N)
重点是,40亿个数,占用16G的空间,空间消耗是很大的,不可能用代码直接开辟出16g的空间!
所以,这时候,就需要位图了
②:位图的意义
在上述问题中,我们只需确定某个无符号整数是否存在,即只有两种可能的状态(存在或不存在)。因此,可以用一个二进制位来表示无符号整数的状态:1表示存在,0表示不存在。如图:
无符号整数总共有232个,因此记录这些数字就需要232个比特位,也就是512M的内存空间,内存消耗大大减少。
③:位图的概念及使用场景
所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。
二:库中的位图的使用方法
①:bitset的定义方式
// 构造一个16位的位图,所有位都初始化为0。
bitset<16> bs1; //0000000000000000//构造一个16位的位图,根据所给值初始化位图的前n位。
bitset<16> bs2(0xfa5); //0000111110100101//构造一个16位的位图,根据字符串中的0/1序列初始化位图的前n位。
bitset<16> bs3(string("10111001")); //0000000010111001
解释: bs2(0xfa5)
用十六进制数 0xfa5 初始化 bs2;0xfa5 的二进制形式是 111110100101(共 12 位)。
由于 bitset 是 16 位的,而 0xfa5 只有 12 位,因此 高位补 0,最终存储为:
0000111110100101(16 位)。
②:bieset的成员函数
#include <iostream>
#include <bitset>
using namespace std;int main()
{bitset<8> bs;bs.set(2); //设置第2位bs.set(4); //设置第4位cout << bs << endl; //00010100bs.flip(); //反转所有位cout << bs << endl; //11101011cout << bs.count() << endl; //6cout << bs.test(3) << endl; //1bs.reset(0); //清空第0位cout << bs << endl; //11101010bs.flip(7); //反转第7位cout << bs << endl; //01101010cout << bs.size() << endl; //8cout << bs.any() << endl; //1bs.reset(); //清空所有位cout << bs.none() << endl; //1bs.set(); //设置所有位cout << bs.all() << endl; //1return 0;
}
运行结果:
bitset还有各种运算符的使用.......不再介绍了
三:位图的模拟实现
前提须知:& 和 | 的规则:
虽然位图有这么多的函数,但是我们实现,只实现set、reset、tes,已经能让我们了解bitset了!
①:构造函数
template<size_t N>
class bitset
{//构造函数bitset(){_bits.resize(N/32 + 1, 0); // 初始化所有位为 0}private:vector<int> _bits;};
解释:N/32+1的意义
我们一般从题目中得到了整形的个数后,用bitset去开辟相应个数的位出来,所以先N/32;
假设现在有50个数,那我们应该开50个位出来,但是50/32只能得到1,所以直接50/32+1等于2,开辟两个整形出来,即64个位;避免小于32的数字在构造函数里面开辟了0个空间;
②:set函数->将第 x
位设为 1
void set(size_t x)
{assert(x <= N); // 检查 x 是否越界size_t i = x / 32; // 计算 x 在哪个 int 中size_t j = x % 32; // 计算 x 在该 int 中的比特位位置_bits[i] |= (1 << j); // 将第 j 位设为 1
}
解释:_bits[i] |= (1 << j)
旨在:通过位运算将第 j
位设为 1
,且不影响其他位。
假设通过前两步得知我们的x对应的位是vector中第一个整形中的第五个二进制位,所以_bits[1] |= (1 << 5) 的效果如图:
符合预期,把第5位 置为了1
这例子很简单,如果原本的vector的其他位也有位1的,这时候进行|=操作后,照样是不影响其他位的,因为|代表一个为1则为1,两个为0才是0,所以不影响!
③:reset函数->将第 x
位设为 0
void reset(size_t x)
{assert(x <= N);size_t i = x / 32;size_t j = x % 32;_bits[i] &= ~(1 << j); // 将第 j 位设为 0
}
解释:_bits[i] &= ~(1 << j)
通过位运算将第 j
位设为 1
,且不影响其他位。
假设通过前两步得知我们的x对应的位是vector中第一个整形中的第五个二进制位,所以_bits[1] &= ~(1 << 5) 的效果如图:
符合预期,把第5位 置为了0
这例子很简单,如果原本的vector的其他位也有位1的,这时候进行&=操作后,照样是不影响其他位的,因为&代表一个为0则为0,两个为1才是1,所以不影响!
④:test函数->检查第 x
位是否为 1
bool test(size_t x)
{assert(x <= N);size_t i = x / 32;size_t j = x % 32;return _bits[i] & (1 << j); // 返回第 j 位的值
}
解释:_bits[i] & (1 << j);
注意:这一步为何没有&= 而是 & ,因为该函数只是想看某一位为什么,不能改变该位!
返回值:若 _bits[i] 的第 j 位为 1,返回 true;否则返回 false。
Q:为什么能判断某一位是否为 1?
A:& 运算后,只有第 j 位可能非0(因为其他位都是 0)。
如果结果 ≠ 0 → 说明 _bits[i] 的第 j 位是 1(返回 true)。
如果结果 = 0 → 说明 _bits[i] 的第 j 位是 0(返回 false)。
四:位图总代码及测试
①:总代码
#pragma once
#include<assert.h>namespace bit
{template<size_t N>class bitset{public:bitset(){_bits.resize(N/32+1, 0);//cout << N << endl;}// 把x映射的位标记成1void set(size_t x){assert(x <= N);size_t i = x / 32;size_t j = x % 32;_bits[i] |= (1 << j);}// 把x映射的位标记成1void reset(size_t x){assert(x <= N);size_t i = x / 32;size_t j = x % 32;_bits[i] &= ~(1 << j);}bool test(size_t x){assert(x <= N);size_t i = x / 32;size_t j = x % 32;return _bits[i] & (1 << j);}private:vector<int> _bits;};
}
②:测试代码
void test_bitset(){bitset<100> bs1;bs1.set(50);bs1.set(30);bs1.set(90);for (size_t i = 0; i < 100; i++){if (bs1.test(i)){cout << i << "->" << "在" << endl;}else{cout << i << "->" << "不在" << endl;}}bs1.reset(90);bs1.set(91);cout << endl << endl;for (size_t i = 0; i < 100; i++){if (bs1.test(i)){cout << i << "->" << "在" << endl;}else{cout << i << "->" << "不在" << endl;}}
预期效果:100个位中 第一次打印:50 30 90 位值为1;第二次打印:50 30 91 为1;
运行效果:
符合预期!
五:位图相关题目
了解了biset的相关实现后,用库中的bitset做几道题目吧~
①:双位图找只出现一次的数字
-
场景:从数组中找出所有只出现一次的数字(类似“单身狗”问题)。
-
数组:int a[] = { 5,7,9,2,5,99,5,5,7,5,3,9,2,55,1,5,6 };
-
解决:用
two_bit_set
(双位图)记录每个数字的状态:-
10
:出现多次。 -
01
:出现一次。 -
00
:未出现。 -
遍历数组后,输出状态为
01
的数字。 -
two_bit_set
(双位图)的成员变量就是两个位图即可
-
代码:
#include<iostream>
#include <bitset>
using namespace std;// 双位图:独立类,组合两个bitset
template<size_t N>
class two_bit_set
{
public:void set(size_t x){if (!_bs1.test(x) && !_bs2.test(x)){_bs2.set(x); // 00 → 01}else if (!_bs1.test(x) && _bs2.test(x)){_bs1.set(x); // 01 → 10_bs2.reset(x);}// 10 → 10(无需处理)}bool test(size_t x){if (_bs1.test(x) == false&& _bs2.test(x) == true){return true;}return false;}private:bitset<N> _bs1; // 高位bitset<N> _bs2; // 低位};
void test_bitset2()
{int a[] = { 5,7,9,2,5,99,5,5,7,5,3,9,2,55,1,5,6 };two_bit_set<100> bs;for (auto e : a){bs.set(e);}for (size_t i = 0; i < 100; i++){//cout << i << "->" << bs.test(i) << endl;if (bs.test(i)){cout << i << endl;}}
}int main()
{test_bitset2();return 0;
}
②:求两个数组的交集
-
场景:找出两个数组中共同存在的数字。
-
两个数组:int a1[] = { 5,7,9,2,5,99,5,5,7,5,3,9,2,55,1,5,6 }; int a2[] = { 5,3,5,99,6,99,33,66};
-
解决:
-
用两个
bitset
分别标记两个数组的数字。 -
遍历所有数字,输出在两个位图中均为
1
的数字。
-
代码:
void test_bitset3()
{int a1[] = { 5,7,9,2,5,99,5,5,7,5,3,9,2,55,1,5,6 };int a2[] = { 5,3,5,99,6,99,33,66 };bitset<100> bs1;bitset<100> bs2;for (auto e : a1){bs1.set(e);}for (auto e : a2){bs2.set(e);}for (size_t i = 0; i < 100; i++){if (bs1.test(i) && bs2.test(i)){cout << i << endl;}}
}
int main()
{test_bitset3();return 0;
}
运行结果:
此时回到最开始的问题:
给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中?
思路:
1:用库中的位图开辟40亿个位出来
2:读取题目给的数据,把40亿个整形对应的位置为1
3:然后在看待查询的数对应的位是否为1即可
代码无法写出来,因为没有这个庞大的数据,但是可以了解一下40亿位如何开辟:
bitset<-1> bs2;bitset<UINT_MAX> bs3;bitset<0xffffffff> bs4;
解释:
1. bitset<-1> bs2
-
模板参数
size_t N
接受-1
时会发生隐式转换 -
-1
转换为size_t
类型会变成最大值(即2³²-1
)
2:bitset<UINT_MAX> bs3
标准定义:
-
UINT_MAX
是<climits>
中定义的无符号整数最大值 -
标准值:
4,294,967,295
(即2³²-1
)
3:bitset<0xffffffff> bs4
十六进制解析:
-
0xffffffff = 4,294,967,295
(即2³²-1
) -
完全等价于
bitset<UINT_MAX>
4:bitset<4294967296> bs1;
记得住数字 也可以这样
③:一些位图解题的思想
Q:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数?
A:如果内存不够,分批次读是不可靠的,因为有可能在不同的批次中都出现了一次,加起来就超过了题目要求;假设要题目数据总大小1g(1024),但我们只有512MB;此时我们先读整数范围前半部分的值 再读范围为后半部分的值,先读0~2^31 再读2^31~2^31-1的范围即可。
所以空间再小一点都可以,只是要将范围分细一点罢了
相关文章:
位图的实现和拓展
一:位图的介绍 ①:需要位图的场景 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中? 要判断一个数是否在某一堆数中,我们可能会想到如下方法: A…...
字符串问题c++
题目描述 小 Z 有一个字符串 s,他对这个字符串会进行如下两个操作: 1 p c 把字符串的第 p 个字符改成 c2 l r 把 s 的第 l 个字符到第 r 个字符按顺序输出。 这里『第 i 个字符』的下标计数从 1 开始,例如,a 是字符串 abc 的第…...
Redis事务
Redis中的事务是指提供一种将多个命令打包到一起,一次性按照顺序执行的机制。Redis在执行事务期间,不会接收处理其他操作命令。 Redis事务有以下局限性 无回滚机制:如果某个命令执行失败,不会影响其他命令的执行,因此…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:数据质量分析之异常值识别(Z-score法 / IQR法 / 业务规则法)3.3 异常值识别3.3.1 Z-score法3.3.2 IQR法3.3.3 业…...
MCP底层协议完整通信过程
2025 年是智能体的元年, 也注定是智能体集中爆发的一年! 两个互联领域的重大挑战: 第一、 Agent 与 Tools (工具)的交互 Agent 需要调用外部工具和 API...
C语言 指针(5)
目录 1.冒泡排序 2.二级指针 3.指针数组 4.指针数组模拟二级数组 1.冒泡排序 1.1 基本概念 冒泡排序(Bubble Sort) 是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元 素,如果它们的顺序错误就把它…...
MYSQL-联合查询
经过上节课,我们学会了如何设计表以及了解到各种范式,这节课就请大家和小L一起来学习设计表之后如何使用 1.为什么要使用联合查询 在数据设计时由于范式的要求,数据被拆分到多个表中,那么要查询⼀个条数据的完整信息,…...
一篇撸清 Http,SSE 与 WebSocket
HTTP,SSE 和WebSocket都是网络传输的协议,本篇快速介绍三者的概念和比较。 SSE(Server-Sent Events) 是什么? SSE(Server-Sent Events),服务器发送事件, 是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端(如浏览器)推送实时数据。它设计用于单向通信(服务器到…...
系统架构设计师:设计模式——行为设计模式
一、行为设计模式 行为模式涉及算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的、复杂的控制流。它们将用户的注意力从控制流转移到对象间的联系方式上来。 行为类模式使用继承机制在类间分…...
OpenCV入门指南:从环境搭建到第一个图像处理程序
引言 你是否想让计算机"看懂"世界?OpenCV(Open Source Computer Vision Library)正是打开计算机视觉大门的钥匙。本文将带你从零开始搭建开发环境,理解图像处理核心概念,并完成第一个OpenCV程序。无论你是想…...
基于STM32的温湿度光照强度仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)
这里写目录标题 **1.****主要功能****2.仿真设计****3.程序设计****4.设计报告****5.下载链接** 基于STM32的温湿度光照强度仿真设计(Proteus仿真程序设计设计报告讲解视频) 仿真图Proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号…...
4个纯CSS自定义的简单而优雅的滚动条样式
今天发现 uni-app 项目的滚动条不显示,查了下原来是设置了 ::-webkit-scrollbar {display: none; } 那么怎么用 css 设置滚动条样式呢? 定义滚动条整体样式 ::-webkit-scrollbar 定义滚动条滑块样式 ::-webkit-scrollbar-thumb 定义滚动条轨道样式…...
修复笔记:SkyReels-V2项目中的 from_config 警告
#工作记录 Windows避坑部署SkyworkAI/SkyReels-V2昆仑万维电影生成模型_skyreels-v2本地部署-CSDN博客 一、项目背景 项目名称:SkyReels-V2 项目简介:由昆仑万维开源的全球首个无限时长电影生成模型,支持文本到视频、图像到视频等多种生成方…...
[硬件电路-11]:模拟电路常见元器件 - 什么是阻抗、什么是输入阻抗、什么是输出阻抗?阻抗、输入阻抗与输出阻抗的全面解析
1. 阻抗(Impedance) 定义:阻抗是电路或元件对交流信号(AC)流动的阻碍能力,用符号Z表示,单位为欧姆(Ω)。它综合了电阻(R)、电感(L&am…...
MCP协议与Dify集成教程
一、MCP协议概述 MCP(Model Control Protocol)是一种新兴的开放协议,为大型语言模型(LLM)与外部应用之间构建了双向通信通道。它就像是AI的"USB-C"接口,帮助模型发现、理解并安全调用各种外部工…...
flink常用算子整理
文章目录 前言1.重新分配(即打散)2.合并流的算子3.算子链操作4.侧边输出(目前只有一种)5.键控进行分区6.输出算子7.其他基础操作算子8.其他常用的算子9.Flink窗口等情况10.窗口举例前言 提示:以下是本篇文章正文内容,下面案例可供参考 1.重新分配(即打散) 2.合并流的算子 3…...
【SimSession】1:将视频发送逻辑与 libuv 事件循环集成是一个典型的并发设计问题
之前对SimSession的信令进行测试,echo可以与relay联通,现在单独提取 已经集成了webrtc的发送模块及libuv框架与SimSession和echo集成: 采集、编码和发送之前在pacedsender内部实现的 现在从pacedsender中去掉采集、编码,放在session中运行。 而pacedsender仅暴露发送部分:…...
Circular Plot系列(五): circle plot展示单细胞互作
这是我们circle系列的最后一节,我想常见的弦图是绕不开的,所以最后从前面介绍的circle plot思路,做一遍弦图。其实前面的内容如果消化了,plot互作弦图也就不成什么问题了。 效果如下: #cellchat提取互作结果ÿ…...
LLama-v2 权重下载
地址:llama模型 官方github仓库:llama仓库 注意点 网络代理位置:美国下面的国家选择 United States 克隆仓库后 运行bash download.sh输入邮箱收到的URL选择要下载的权重等待下载完成即可 有问题留言!!!…...
深入解析Linux进程间通信(IPC):机制、应用与最佳实践
引言 在多任务操作系统中,进程间通信(Inter-Process Communication, IPC)是协同工作的核心机制。Linux作为现代操作系统的典范,提供了8种主要IPC方式,从传统的管道到面向网络的套接字,每种方法都暗藏独特的…...
基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量稳定性构建研究
摘要:在私域流量时代,传统实体零售的"时间积累"逻辑被直播电商等新业态颠覆。完美日记等新锐品牌通过构建私域流量池,实现了从0到1的指数级增长,而传统品牌却陷入"流量焦虑"。本文提出以开源AI大模型AI智能名…...
第13章:陈默再访海奥华
第13章:陈默再访海奥华 第一节:启程——穿越虫洞的旅程 2046年,赤色世界的和平与繁荣达到了前所未有的高度。人类已经完成了从物质文明向意识文明的转变,精神力的普及让每一个人都拥有了学习、修复和感知的能力。然而࿰…...
Prompt compress 技术探究-LLMLingua2
LLMLingua2 https://arxiv.org/pdf/2403.12968是LLMLingua的改进版本。我们知道 LLMLingua需要用小模型压缩,模型太小不一定能保证性能,模型太大耗费时间又太长。这个方法理论上可以,但实际上不是很方便用。很难选择到合适的小模型。 小模型…...
【机器学习案列-22】基于线性回归(LR)的手机发布价格预测
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
python调用国税乐企直连接口开数电票之获取数字化电子发票批量预赋码信息
乐企平台介绍 乐企平台作为国家税务总局推出的唯一数电票标准化的API接口重要平台,旨在通过税务系统与企业自有信息系统的直连涉税服务,开票员登录企业自有系统(ERP、OMS、发票管理系统等)无需通过第三方平台即可实现国税直连开票…...
Axure打开html文件失败,解决方案:
1、在原型文件中找到 2、文件后缀名改为 axure-chrome-extension.rar ,解压后到axure-chrome-extension 3、打开Chrome浏览器,找到扩展程序 选择刚刚解压的文件axure-chrome-extension文件夹,配置完成,打开html试试吧...
Android第四次面试总结之Java基础篇(补充)
一、设计原则高频面试题(附大厂真题解析) 1. 单一职责原则(SRP)在 Android 开发中的应用(字节跳动真题) 真题:“你在项目中如何体现单一职责原则?举例说明。”考点:结合…...
网络开发基础(游戏)之 心跳机制
简介 心跳机制:是指客户端定时(比如每隔着10秒)向服务端发送PING消息,服务端收到后回应PONG消息。服务端会记录客户端最后一次发送PING消息的时间,如果很久没有收到下一次客户端发来的消息,服务端就就判…...
Hive进阶之路
目录 一、Hive 基础回顾 二、数据定义语言(DDL)进阶 2.1 复杂表创建 2.2 分区与分桶优化 三、数据操作语言(DML)深入 3.1 高效的数据加载 3.2 灵活的数据更新与删除 四、Hive 函数高级应用 4.1 内置函数的巧用 4.2 自定义…...
imx6uLL应用-v4l2
Linux V4L2 视频采集 JPEG 解码 LCD 显示实践 本文记录一个完整的嵌入式视频处理项目:使用 V4L2 接口从摄像头采集 MJPEG 图像,使用 libjpeg 解码为 RGB 格式,并通过 framebuffer 显示在 LCD 屏幕上。适用于使用 ARM Cortex-A 系列开发板进…...
以太坊智能合约开发框架:Hardhat v2 核心功能从入门到基础教程
一、设置项目 Hardhat 项目是安装了 hardhat 包并包含 hardhat.config.js 文件的 Node.js 项目。 操作步骤: ①初始化 npm npm init -y②安装 Hardhat npm install --save-dev hardhat③创建 Hardhat 项目 npx hardhat init如果选择 Create an empty hardhat.…...
【现代深度学习技术】现代循环神经网络06:编码器-解码器架构
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
Jasper and Stella: distillation of SOTA embedding models
摘要 Dense检索是许多深度学习应用系统中(例如常见问题 (FAQ) 和检索增强生成 (RAG))关键组成部分。在此过程中,Embedding模型将原始文本转换为向量。然而,目前在文本Embedding基准…...
程序的本质—API接口
API 是什么 官方定义:API 英文全称 Application Programming Interface,翻译过来为程序之间的接口。也是程序与外部世界的桥梁,实现了服务拆分与解藕的核心机制 大白话:按照规则提供输入,它帮你得到对应的输出 API可…...
Python函数完全指南:从零基础到灵活运用
Python函数是组织代码、实现代码复用的基本单元,也是Python编程中最重要的概念之一。本文将全面介绍Python函数的知识体系,帮助初学者系统掌握函数的使用方法。 一、函数基础概念 1. 什么是函数? 函数是一段可重复使用的代码块,…...
第十章.XML
文章目录 1.XMl简介2.解析XML技术2.1DOM解析XML 2.2DOM4j3.json 1.XMl简介 EXtensible Markup Language ,可扩充标记语言 特点: XML与操作系统,编程语言的开发平台无关实现不同系统之间的数据交换 作用: 数据交互配置应用程序和网站 XML标签 xml文档由一系列标签元素组成<…...
5个情感丰富GPT-4o图像提示词(不是吉卜力风格)
一场新的创意运动正在迅速兴起——人们不仅使用ChatGPT进行写作,还用它来构思富有想象力、情感丰富的视觉概念。 这一趋势正在改变我们讲故事、建立品牌和探索创意的方式。从异想天开的海报世界到基于物品的故事叙述,各行业的创作者正在将ChatGPT与视觉生成工具结合使用,赋…...
华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…...
《七年一剑》速读笔记
文章目录 书籍信息概览知己知彼市场的本质认识自我了解他人人剑合一 技术分析精要K线分型均线节奏形态画线成交量周期级别指标之王——MACD波动理论 管窥基本面A股周期论实战角度看财报 构建交易系统打开交易之门交易基础之买卖依据风险控制与仓位管理系统评估及情绪管理 实战秘…...
VMware-centOS7安装redis分布式集群
1.部署redis包 1.1 在usr/local文件夹里创建文件夹 mkdir software 1.2 进入文件夹 cd /usr/local/software/ 下载redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解压 tar zxvf redis-6.2.6.tar.gz重命名文件夹 mv redis-6.2.6 redis安装gcc编译器 yum i…...
Kubernetes(k8s)学习笔记(六)--KubeSphere前置环境安装
1、安装 helm(master 节点执行) Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos 中使用的 yum 或者 Python 中的 pip 一样,能快速查找、下载和安装软件包。Helm由客户端组件 helm 和服务端组件 Tiller 组…...
黑马点评day01(基于Redis)
1.7 Redis代替session的业务流程 1.7.1、设计key的结构 首先我们要思考一下利用redis来存储数据,那么到底使用哪种结构呢?由于存入的数据比较简单,我们可以考虑使用String,或者是使用哈希,如下图,如果使用…...
14.Excel:排序和筛选
一 位置 两个位置。 二 排序:如何使用 1.常规使用 补充:不弹出排序提醒排序。 选中要排序列中的任意一个单元格,然后排序。 2.根据要求进行排序 1.根据姓名笔画进行降序排序 要勾选上数据包含标题,默认是勾选了。 2.根据运营部、…...
力扣-字符串-468 检查ip
思路 考察字符串的使用,还有对所有边界条件的检查 spilt(“\.”),toCharArray,Integer.parseInt() 代码 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…...
C++名称空间
名称空间 名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代码块中。因此,在默认情况下,在名称空间中声明的名称的链接性为外部的(除非它引用了常量) 名称空间是开放的,你可以在…...
Redis 过期与淘汰机制全解析
概述 Redis 作为一种高性能的内存数据库,提供了数据过期和淘汰策略以管理存储的数据。本文将详细探讨 Redis 中数据失效的基本原理、实现方式,并结合源码进行分析,帮助读者更深入地理解和优化 Redis 的使用。 数据过期机制 过期键的存储方…...
PMP-第四章 项目整合管理(一)
项目整合管理 项目整合管理包括对项目管理过程组内的各种过程和项目管理活动而进行识别、定义、组合、统一与协调的各种过程和活动项目整合管理必须由项目经理负责。其他知识领域可以由相关领域专家管理,但整合的责任不能被授权或转移项目与项目管理本质上具有整合…...
VSCode搭建STM32开发调试环境
闲言碎语: 好久没更,在忙着科研→校招→写毕业论文。 临近毕业,总结自己的大学生活:C\C、Java、Python、深度学习,学的乱七八糟。 秋招找了个嵌入式工作(涉及AI应用),大致确定了以后…...
【数据结构】稀疏矩阵的快速转置
稀疏矩阵的快速转置 如图给出一个稀疏矩阵,要求表示出它的转置矩阵 由这个矩阵我们能轻松得到它的三元组顺序表 6行(x坐标)7列(y坐标)8个元素121213931-3361443245218611564-7 接下来我们同样把转置后的矩阵的三元组…...
【Godot】使用 Shader 实现可调节的精确切角效果
今天我们要实现的是一个四角精确切割Shader,可以在UI元素或Sprite的四个角分别切割出不同大小的三角形区域。 文章目录 什么是Godot Shader?数学原理详解左上角切割右上角切割右下角切割左下角切割四角切割Shader完整代码使用方法在Godot编辑器中设置通过代码控制进阶技巧1. …...