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

Redis 7.x 系列【11】数据类型之位图(Bitmap)

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 基本命令
      • 2.1 SETBIT
      • 2.2 GETBIT
      • 2.3 BITCOUNT
      • 2.4 BITPOS
      • 2.5 BITFIELD
      • 2.6 BITFIELD_RO
      • 2.7 BITOP
    • 3. 应用场景
      • 3.1 用户登录状态
      • 3.2 签到打卡

1. 概述

Redis Bitmap 实际不是一个独立的数据类型,而是基于 String 类型实现的。它主要用于存储二值状态(即集合元素的取值只有 01 两种)。由于每个位只能表示两种状态,在需要快速进行大量数据的排序、查找、去重等操作时具有显著优势。

Bitmap 实际上是利用 String 类型的最大容量(512 MB)存储一个连续的二进制序列。每个字节的 8 位可以分别代表 8 个独立的状态,因此可以用一个 Bitmap 来跟踪多达数百万甚至数十亿的状态。

2. 基本命令

所有命令:

命名描述
BITCOUNT统计给定范围内为1的位的数量
BITFIELD对字符串类型的 key 进行基于位的操作
BITFIELD_RO使用 BITFIELD命令进行只读操作
BITOP执行针对多个 Bitmap 的并集、交集、差集等位操作
BITPOS查找指定位值的第一个位置
GETBIT获取指定偏移量处的位状态
SETBIT设置指定偏移量处的位状态

2.1 SETBIT

SETBIT 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。时间复杂度为 O(1),因为直接在内存中操作字符串的位表示。返回值为存储在指定偏移量处的原始位值(01)。

基本语法:

SETBIT key offset value

参数说明:

  • key:操作的 key
  • offset:指定偏移量,从 0 开始计数。注意,偏移量必须大于或等于 0 ,且小于 2^32
  • value:设置的值,只能是 01

注意事项:

  • 如果key不存在,会自动为其创建一个新的字符串。
  • 如果设置的偏移量超过了字符串的当前长度,会扩展字符串以确保可以在指定的偏移量处设置值。扩展部分会使用 0 填充。
  • 警告操作:当key 不存在,或者是比较小的字符串时,直接设置 2^32-1 位置时,会立即分配所有内存,这有可能会导致服务阻塞

示例:

# 想设置其偏移量为7的位为1
SETBIT mykey 7 1

2.2 GETBIT

GETBIT 命令是用于获取存储在 key 中的字符串值在指定偏移量上的位(bit)值的操作。返回值是一个整数,表示指定偏移量上的位的值。返回值只可能是 01

基本语法:

GETBIT key offset

示例:

# 获取偏移量为7的位的值
GETBIT mykey 7

2.3 BITCOUNT

BITCOUNT 命令用于统计指定 key 所储存的字符串值中,被设置为1的二进制位的数量。

基本语法:

BITCOUNT key [start] [end]

参数说明:

  • key:要统计的 key ,对应的值应该是一个字符串。
  • start(可选):统计二进制位的开始位置,参数类型为整数,默认从0开始统计。
  • end(可选):统计二进制位的结束位置,参数类型为整数,默认统计到整个字符串的末尾。

注意事项:

  • 如果指定的 key 不存在,会将其视为空字符串,因此返回值为 0
  • 时间复杂度为 O(N),其中N是字符串的长度(以字节为单位)。在处理大数据量时,请注意性能问题。

无参示例:

redis> SET mykey "foobar"  
OK  
redis> BITCOUNT mykey  
(integer) 26

带参示例:

redis> SET mykey "\xff\xf0\x00"  
OK  
redis> BITCOUNT mykey 0 7  
(integer) 12  
redis> BITCOUNT mykey 0 0 4  
(integer) 4  
redis> BITCOUNT mykey 1 1 4  
(integer) 6

2.4 BITPOS

BITPOS 命令用于查找字符串中第一个设置为指定值(01)的 bit 位,并返回该位置。如果没有找到匹配的 bit,则返回-1

基本语法:

BITPOS key bit [start] [end]

参数说明:

  • key:要操作的 key,其值应为一个字符串。
  • bit:要查找的 bit 值,只能是 01
  • start(可选):开始查找的起始位置,默认为 0
  • end(可选):结束查找的位置,默认为 -1 ,表示字符串的最后一个 bit

注意事项:

  • 如果指定的 key 不存在,会将其视为一个空字符串,并查找空字符串中的 bit
  • 如果在指定的范围内没有找到匹配的 bit,则返回 -1
  • 查找范围是基于 bit 的,而不是基于字节的。例如,start=0end=7 表示查找前 8bit,而不是第一个字节。
  • 命令的时间复杂度为 O(N) ,其中 N 是字符串的长度(以 bit 为单位)。在处理大数据量时,请注意性能问题。

假设当前对应的字符串值为"\xff\x00\x00",这是一个二进制字符串的十六进制表示,"\xff"代表8个连续的1"\x00"代表8个连续的0

查找第一个为1bit

BITPOS mykey 1  
(integer) 0

查找第一个为0bit

BITPOS mykey 0 8  
(integer) -1  
BITPOS mykey 0 9  
(integer) 9

2.5 BITFIELD

BITFIELD 允许将 Redis 字符串视为一个位数组,并允许用户对其中的位进行操作,如获取、设置和递增等。对于每个子命令,BITFIELD都会返回一个响应数组,其中每个数组元素都与参数列表中的相应操作相匹配。

基本语法:

BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW wrap|sat|fail]

参数说明:

  • key:要操作的Redis键。
  • GET:用于从字符串中获取指定位置的位域值。
  • SET:用于设置字符串中指定位置的位域值。
  • INCRBY:用于将字符串中指定位置的位域值进行增加。
  • OVERFLOW:用于指定溢出处理方式,可选值有 wrap(回绕)、sat(饱和)和fail(失败)。

子命令GET参数说明:

  • type:指定读取数据的类型,可以是u(无符号整数)或 i(有符号整数)。
  • offset:位字段的起始偏移位置,从0开始计数。

子命令SET参数说明:

  • type:类型标识,可以是u(无符号整数)或 i(有符号整数)。
  • offset:位字段的起始偏移位置。
  • value:要设置的位域值。

子命令INCRBY参数说明:

  • type:指定要递增的数据类型。
  • offset:位字段的起始偏移位置。
  • increment:递增的值。

OVERFLOW用于指定溢出处理方式,参数说明:

  • wrap:使用回绕方法处理溢出,位域超过最大值后再次增加数值则回到最小值。
  • sat:饱和计算,超过最大值再增加则数值仍不变。
  • fail:超过最大值再增加,则命令直接报错,拒绝指定。

注意事项:

  • 可以在同一个命令调用中使用多个子命令,并按照给定的顺序执行它们。
  • 命令的时间复杂度为O(1),用于指定的每个子命令。
  • 使用BITFIELD命令时,请确保对二进制位操作有深入的理解,以避免出现意外的结果。

示例,假设有一个 key 其对应的字符串值为"abcd"(其ASCII码值分别为97, 98, 99, 100)。获取第一个字符的 ASCII 码值(无符号8位整数):

BITFIELD mykey GET u8 0

修改第二个字符的ASCII码值为大写'B'ASCII码值为66):

BITFIELD mykey SET u8 8 66

将第三个字符的ASCII码值增加1'c'变为'd'):

BITFIELD mykey INCRBY u8 16 1

2.6 BITFIELD_RO

BITFIELD_RO 命令作为 BITFIELD 命令的只读变体。这个命令允许用户从二进制位图中安全地读取数据,而不需要担心在只读副本上执行写操作。

基本语法:

BITFIELD_RO key [GET encoding offset [GET encoding offset ...]]

参数说明:

  • key: 要操作的二进制位图的键名。
  • GET: 表示读取操作。
  • encoding: 指定要读取的数据的编码类型(如 u8i8u16i16u32i32u64i64f32f64)。
  • offset: 指示在二进制位图中的起始位置(以位为单位)。

注意事项:

  • 由于原始的 BITFIELD 命令包含 SETINCRBY 等写操作选项,因此它在 Redis 命令表中被标记为写命令。这意味着在 Redis 集群的只读副本上,即使连接处于只读模式,该命令也会被重定向到主实例。
  • 为了在只读副本上允许 BITFIELD 行为而不破坏命令标志的兼容性,Redis 6.2 引入了 BITFIELD_RO 变体。
  • 通过使用 BITFIELD_RO,可以在只读副本上安全地执行读取操作,而无需担心数据的不一致性或其他与写操作相关的问题

示例,假设有一个名为 hello 的二进制位图,并且我们想要从第 16 位开始读取一个 8 位有符号整数(i8):

BITFIELD_RO hello GET i8 16

2.7 BITOP

BITOP 命令用于对多个键(包含字符串值)执行位操作,并将结果存储在目标键中。它支持四种位操作:AND(与)、OR(或)、XOR(异或)和 NOT(非)。NOT 操作是特殊的,因为它只接受一个输入键,因为位反转只作为一元运算符才有意义。

基本语法:

BITOP <AND | OR | XOR | NOT> destkey key [key ...]

参数说明:

  • <AND | OR | XOR | NOT>:要执行的位操作类型。
  • destkey:存储操作结果的目标键。
  • key [key ...]:要参与位操作的键列表。对于 NOT 操作,只需要一个键。

示例:

redis> SET key1 "foobar"  
"OK"  
redis> SET key2 "abcdef"  
"OK"  
redis> BITOP AND dest key1 key2  
(integer) 6  
redis> GET dest  
"`bc`ab"

3. 应用场景

Bitmap 以极小的空间存储大量数据,2^32次方(约40亿)数据只需要约 500MB 内存,并提供了快速的查询和统计功能。Redis Bitmap的应用场景广泛,尤其在处理大量二进制数据或需要快速进行二值状态统计的场合下表现出色。

二值状态统计是指在集合中,元素的取值只有 01 两种状态,在实际开发中,经常会遇到签到/未签到登录/未登录等情况。

常用场景:

  • 签到打卡:每个用户每天的签到情况可以用一个 bit 位表示,签到为1未签到为0
  • 限制IP地址访问频率:每个 IP 地址对应 Bitmap 的一个 bit 位,访问时设置该位为1。判断某个 IP 地址是否已经访问过,并据此限制其访问频率。
  • 用户登录状态:可以使用 bit 位来记录用户的登录状态, 1 表示已登录,0 表示未登录。

3.1 用户登录状态

例如,当天 ID0-3的用户进行了登录:

localhost:0>SETBIT login_status:20240624 0 1
"0"
localhost:0>SETBIT login_status:20240624 1 1
"0"
localhost:0>SETBIT login_status:20240624 2 1
"0"
localhost:0>SETBIT login_status:20240624 3 1
"0"

查看某个用户当天是否登录:

localhost:0>GETBIT login_status:20240624 3
"1"
localhost:0>GETBIT login_status:20240624 4
"0"
localhost:0>

查看当天登录用户总数:

localhost:0>BITCOUNT login_status:20240624
"4"

3.2 签到打卡

在这里插入图片描述
设置 ID123 的用户在 202405 第一天和第六天进行了签到:

localhost:0>SETBIT sign:123:202405 0 1
"0"
localhost:0>SETBIT sign:123:202405 5 1
"0"

查看用户当月某日是否进行了签到:

localhost:0>GETBIT sign:123:202405 10
"0"
localhost:0>GETBIT sign:123:202405 0
"1"

统计当月的签到次数:

localhost:0>BITCOUNT sign:123:202405
"2"

查看当月第一次签到的日期:

localhost:0>BITPOS sign:123:202405 1
"0"

相关文章:

Redis 7.x 系列【11】数据类型之位图(Bitmap)

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 基本命令2.1 SETBIT2.2 GETBIT2.3 BITCOUNT2.4 BITPOS2.5 BITFIELD2.6 BITF…...

如何评定旅游卡的品质与服务?

评定旅游卡的品质与服务&#xff0c;可以从以下几个关键方面进行综合考量&#xff1a; 公司实力与资质&#xff1a;选择有实力、资质齐全的公司发行的旅游卡。查看公司背景&#xff0c;确认其是否长期稳定运营&#xff0c;是否具有旅游行业的专业资质&#xff0c;如旅行社许可证…...

适合学生暑假适用的护眼大路灯有哪些?五款好用护眼灯分享!

在护眼领域&#xff0c;护眼大路灯已经成为越来越多人的选择。这种具备实力的工具可以有效地缓解用眼疲劳、改善光线环境&#xff0c;是学生党和办公族的必备神器。然而&#xff0c;市面上的护眼大路灯品牌众多&#xff0c;如何选择一款性价比高、品质优良的产品呢&#xff1f;…...

linux服务器 部署jenkins

在 Linux 服务器上部署 Jenkins 通常包括以下几个步骤&#xff1a; 更新系统软件包&#xff1a; sudo apt update sudo apt upgrade 安装 Java&#xff1a; Jenkins 需要 Java 运行时环境。推荐使用 OpenJDK 11。 sudo apt install openjdk-11-jdk 添加 Jenkins 软件源并导入…...

电商控价:系统监测的必要性与优势

在品牌的发展进程中&#xff0c;会遭遇各种各样的渠道问题&#xff0c;控价乃是其中颇为关键的一环。品牌进行控价的目的无疑是为了妥善治理低价链接&#xff0c;低价链接的发现途径可以是人工&#xff0c;也可以是系统。力维网络在为上百个品牌提供服务的过程中察觉到&#xf…...

港股下半年能恢复上涨趋势吗?

今日港股两大指数涨跌不一&#xff0c;早盘盘初恒指冲高&#xff0c;涨幅一度扩大至1%。截至收盘&#xff0c;香港恒生指数涨0.57%。板块方面&#xff0c;电力、航空、石油、内险股、燃料电池、环保等板块涨幅居前&#xff1b;互动媒体与服务、生物科技、汽车零部件、新经济概念…...

软件测试项目实战:银行贷款业务测试介绍-2

1、利息计算 正常利息贷款本金*借款天数*贷款年利率/360 罚息逾期本金*逾期天数*逾期年利率/360 复利逾期利息*逾期天数*逾期年利率/360 2、贷款五级分类 正常贷款&#xff1a;正常及逾期60天以内 关注贷款&#xff1a;逾期60天及以上&#xff0c;不足90天 次级贷款&#xff1…...

如何将Hive表的分区字段插入PG表对应的时间戳字段?

文章目录 1、背景描述2、场景分析 1、背景描述 数据仓库的建设通常是为业务和决策服务的。在数仓开发的应用层阶段&#xff0c;BI可以直接从主题层/业务层取数&#xff0c;而前端需要根据具体的作图需求通过后端查询数据库 作图的指标需要根据主题层/业务层做查询计算&#xf…...

Spring Boot与MyBatis的集成应用

Spring Boot与MyBatis的集成应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来聊聊Spring Boot与MyBatis的集成应用。MyBatis是一款优秀的持久层框…...

在昇腾服务器上使用llama-factory对baichuan2-13b模型进行lora微调

什么是lora微调 LoRA 提出在预训练模型的参数矩阵上添加低秩分解矩阵来近似每层的参数更新&#xff0c;从而减少适配下游任务所需要训练的参数。 环境准备 这次使用到的微调框架是llama-factory。这个框架集成了对多种模型进行各种训练的代码&#xff0c;少量修改就可使用。 …...

Kafka 管理TCP连接

生产者管理TCP连接 Kafka生产者程序概览 Kafka的Java生产者API主要的对象就是KafkaProducer。通常我们开发一个生产者的步骤有4步&#xff1a; 第1步&#xff1a;构造生产者对象所需的参数对象。 第2步&#xff1a;利用第1步的参数对象&#xff0c;创建KafkaProducer对象实例…...

electron教程(一)创建项目

一、方式① 根据官网描述将electron/electron-quick-start项目克隆下来并启动 electron/electron-quick-start地址&#xff1a; GitHub - electron/electron-quick-start: Clone to try a simple Electron app git clone https://github.com/electron/electron-quick-start…...

如何在Oracle、MySQL、PostgreSQL上终止会话或取消SQL查询

How to Kill session or Cancel SQL query on Oracle , MySQL, PostgreSQL 数据库维护过程中难免会遇到一些不正常的SQL或会话进程正在占用系统大量资源&#xff0c;临时需要终止查询或kill会话&#xff0c;在Oracle, MySQL, Postgresql数据库中不同的操作。 Oracle KILL会话…...

3、FTL基本工作过程

上文描述了FTL的四大功能&#xff0c;这里简述一下每个功能的含义。 地址转换简述 FTL要维护一个地址转换表&#xff0c;这个转换表是主机读/写硬盘的逻辑地址到硬盘实际物理地址的转换关系。 假如SSD的容量是128G&#xff0c;SSD逻辑块的大小是4KB&#xff0c;那SSD的逻辑块…...

微信小程序的跳转页面

在微信小程序中&#xff0c;要实现从当前页面返回到指定页面的功能&#xff0c;通常不直接使用“返回上一页”的逻辑&#xff0c;而是利用小程序的页面栈管理和navigateBack或者重新定向到目标页面的API。下面我将介绍两种主要的方法&#xff1a; 方法一&#xff1a;使用 navi…...

深入理解 Java 中的线程间通信:`wait()`, `notify()`, `notifyAll()`

引言 在多线程编程中&#xff0c;线程间通信是一个重要且复杂的主题。Java 提供了一套基本的机制来实现线程间通信&#xff0c;即使用 wait(), notify(), 和 notifyAll() 方法。这些方法由 Object 类提供&#xff0c;用于协调多个线程对共享资源的访问。本文将详细介绍这些方法…...

23种设计模式【创建型模式】详细介绍之【单例模式】

23种设计模式【创建型模式】详细介绍之【单例模式】 设计模式的分类和应用场景总结单例模式1. 概述2. 实现方式2.1 饿汉式单例模式2.2 懒汉式单例模式&#xff08;非线程安全&#xff09;2.3 懒汉式单例模式&#xff08;线程安全&#xff09; 3. 单例模式的优缺点3.1 优点3.2 缺…...

某汽车配件制造公司任职资格体系项目成功案例纪实

——基于岗位特点和核心能力要求&#xff0c;分层分级能力测评&#xff0c;实现个性化人才培养 【客户行业】生产制造&#xff1b;汽车配件制造 【问题类型】任职资格体系建立&#xff1b;人才管理系统 【客户背景】 某汽车配件制造公司是一家专注于汽车配件研发、生产和销…...

【Linux】生物信息学常用基本命令

wget网址用于直接从网上下载某个文件到服务器&#xff0c;当然也可以直接从网上先把东西下到本地然后用filezilla这个软件来传输到服务器上。 当遇到不会的命令时候&#xff0c;可以使用man “不会的命令”来查看这个命令的详细信息。比如我想要看看ls这个命令的详细用法&…...

React Native V0.74 — 稳定版已发布

嗨,React Native开发者们, React Native 世界中令人兴奋的消息是,V0.74刚刚在几天前发布,有超过 1600 次提交。亮点如下: Yoga 3.0New Architecture: Bridgeless by DefaultNew Architecture: Batched onLayout UpdatesYarn 3 for New Projects让我们深入了解每一个新亮点…...

Python面试宝典第4题:环形链表

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。如果存在环 &#xff0c;则返回 true 。 否则&#xff0c;返回 false 。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xf…...

Kubernetes (K8s) 底层原理

Kubernetes (K8s) 的底层原理涉及多个关键组件和概念&#xff0c;确保容器化应用程序的自动化部署、扩展和管理。以下是 Kubernetes 的底层原理及其关键组件的详细描述。 核心组件 Etcd 功能&#xff1a;分布式键值存储&#xff0c;用于存储集群的所有数据&#xff0c;包括配置…...

解析Kotlin中的委托(包括类委托,属性委托)【笔记摘要】

1.委托模式 委托模式&#xff1a;操作对象不会去处理某段逻辑&#xff0c;而是会把工作委托给另外一个辅助对象去处理。 例如我们要设计一个自定义类的来实现Set&#xff0c;可以将该实现委托给另一个对象&#xff1a; class MySet<T> (val helperSet: HashSet<T>…...

vue3+ts+uniapp+vite+pinia项目配置

开发环境&#xff1a; node >18&#xff0c;npm >8.10.2&#xff0c;vue < 3.2.31 安装项目 npx degit dcloudio/uni-preset-vue#vite-ts vue3-uniapp 1、引入样式规范 npm add -D eslint eslint-config-airbnb-base eslint-config-prettier eslint-import-resolv…...

大数据开发语言 Scala(四):面向对象编程

目录 1. 概述 2. 面向对象编程的基本概念 2.1 类和对象 2.2 继承和多态 2.3 封装和访问控制 3. 面向对象编程在大数据开发中的应用 3.1 Spark中的面向对象编程 3.2 面向对象编程在数据清洗和预处理中 3.3 面向对象编程在机器学习中的应用 4. 面向对象编程的高级特性 …...

C++ //练习 14.31 我们的StrBlobPtr类没有定义拷贝构造函数、赋值运算符及析构函数,为什么?

C Primer&#xff08;第5版&#xff09; 练习 14.31 练习 14.31 我们的StrBlobPtr类没有定义拷贝构造函数、赋值运算符及析构函数&#xff0c;为什么&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释&#xff1a; 因为…...

通配符和正则表达式之间的关系

通配符和正则表达式&#xff08;正则&#xff09;都是用于匹配字符串的工具&#xff0c;但它们的复杂性和用途有所不同。下面是它们之间的主要关系和区别&#xff1a; 通配符 通配符主要用于简单的模式匹配&#xff0c;常见于文件系统操作中&#xff0c;例如在命令行中查找文…...

GY-30光照传感器软件I2C方式驱动代码,基于STM32Cube

GY-30光照传感器的具体资料可以去淘宝搜索然后问卖家要&#xff0c;网上也有&#xff0c;所以这里我就不多嘴了。 VCC连接3到5伏电压&#xff0c;根据文件开头的描述在STM32CubeMX中配置好外设。 STM32Cube开发方式就是4个字“简单直接”&#xff0c;直接上代码。 gy30.h #…...

双相元编程:一种新语言设计方法

本文讨论了编程语言的一种趋势&#xff0c;即允许相同的语法表达 在两个不同阶段或环境&#xff08;上下文&#xff09;中执行的计算同时保持跨阶段&#xff08;上下文&#xff09;的一致行为。这些阶段通常在时间上&#xff08;运行时间&#xff09;或空间上&#xff08;运行…...

基于SpringBoot校园外卖配送系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…...

茗鹤APS高级计划排程系统,在集团多工厂协同生产下的应用

随着业务规模的扩大和市场的全球化&#xff0c;越来越多的企业选择“总部多工厂基地”的模式&#xff0c;此种模式大幅提升企业的产能与产量&#xff0c;有效分散风险。然后&#xff0c;与之而来的是对企业的管理提出更高的管理要求。多个生产基地不仅面临集团下发的周期性计划…...

分享六款免费u盘数据恢复工具,U盘恢复工具集合【工具篇】

U盘里面的数据丢失了怎么找回&#xff1f;随着数字化时代的深入发展&#xff0c;U盘已成为我们日常生活中不可或缺的数据存储工具。然而&#xff0c;由于各种原因&#xff0c;如误删除、格式化、病毒攻击等&#xff0c;U盘中的数据可能会丢失&#xff0c;给用户带来极大的困扰。…...

Linux 的启动流程

第一步、加载内核 操作系统接管硬件以后&#xff0c;首先读入 /boot 目录下的内核文件。 以我的电脑为例&#xff0c;/boot 目录下面大概是这样一些文件&#xff1a; $ ls /bootconfig-3.2.0-3-amd64config-3.2.0-4-amd64grubinitrd.img-3.2.0-3-amd64initrd.img-3.2.0-4-amd6…...

思维导图插件--jsMind的使用

vue引入jsmind&#xff08;右键菜单&#xff09;_jsmind.menu.js-CSDN博客 第一版 vue-JsMind思维导图实现&#xff08;包含鼠标右键自定义菜单&#xff09;_jsmind 右键菜单-CSDN博客 // 新增节点addNode() {console.log(this.get_selected_nodeid());this.get_selected_…...

mac上使用finder时候,显示隐藏的文件或者文件夹

默认在finder中是不显示隐藏的文件和文件夹的&#xff0c;但是想创建.gitignore文件&#xff0c;并向里面写入内容&#xff0c;即便是打开xcode也是不显示这几个隐藏文件的&#xff0c;那有什么办法呢&#xff1f; 使用快捷键&#xff1a; 使用finder打开包含隐藏文件的文件夹…...

泰雷茲具有首个通过FIPS 140-3 三级认证的HSMs

泰雷兹LunaHsm是业界首款通过FIPS140-33级认证的解决方案&#xff0c;安策引进泰雷兹HSM产品可以帮助您满足您的数据安全合规性需求&#xff0c;阻力企业提高竞争力。 安策提供泰雷茲ThalesLunaHSMs成为首个通过FIPS140-3三级认证的硬件安全模块图 我们很高兴地宣布&#xff0c…...

美术馆预约小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;展品信息管理&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;美术馆管理&#xff0c;基础数据管理&#xff0c;论坛管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;美术馆&#xff…...

序列化Serializable

一、传输对象的方式 将对象从内存传输到磁盘进行保存&#xff0c;或者进行网络传输&#xff0c;有两种方式&#xff1a; 实现Serializable接口&#xff0c;直接传输对象转成json字符串后&#xff0c;进行字符串传输 二、直接传输对象 implements Serializable Data Equal…...

编写静态库

一、静态库 1.制作完成整体目录结构 2.首先创建mymath.c和mymath.h 3.编写Makefile 4.创建测试的main函数 test文件夹 先把lib移到test文件夹里面 4.编译链接 gcc main.c -I ./lib/include/ -L ./lib/mymathlib/ -l mymath 5.形成可执行程序a.out 要是不想执行第四步那么麻烦…...

hive的表操作

常用的hive命令 切换数据库use test;查询表的建表信息show create table 数据库名称.表名;查看表的类型信息desc formatted 数据库名称.表名; 删除内部表 drop table 数据库名称.表名; 先启动hdfs &#xff0c;mysql &#xff0c; hiveservice2&#xff0c;beeline CREATE [EX…...

基于多视点编码光场的全景三维重建方法

欢迎关注GZH《光场视觉》 摘要&#xff1a;在基于光场的一系列应用中&#xff0c;目标的三维重建是基础且关键的任务。普通光场只能重建单一视角而无法重建全景&#xff0c;并且在纹理特征匮乏的区域也无法生成准确的三维信息。针对以上问题&#xff0c;提出一种基于多视点编码…...

Spring Boot中的分布式文件系统

Spring Boot中的分布式文件系统 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何在Spring Boot中实现分布式文件系统的搭建和应用…...

three.js地理坐标系有哪些,和屏幕坐标系的转换。

坐标系很好理解&#xff0c;就是点线面体的位置&#xff0c;一个点是一个坐标&#xff0c;一条线段2个坐标&#xff0c;一个矩形四个坐标&#xff0c;一个立方体8个坐标&#xff0c;three.js面对的是三维空间&#xff0c;屏幕则是二维的&#xff0c;这就面临着转换问题&#xf…...

聊聊C++20的三向比较运算符 `<=>`

C20标准引入了许多新特性&#xff0c;其中之一是三向比较运算符 <>&#xff0c;也被称为太空船运算符。这个新运算符为C程序员提供了一种全新的比较对象的方式&#xff0c;它能有效简化比较逻辑&#xff0c;避免编写多个比较运算符重载的情况。 为什么需要三向比较运算符…...

CVE-2024-0603 漏洞复现

CVE-2024-0603 源码&#xff1a;https://gitee.com/dazensun/zhicms 开题&#xff1a; CVE-2024-0603描述&#xff1a;ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化&#xff0c;从而远程…...

西部智慧健身小程序+华为运动健康服务

1、 应用介绍 西部智慧健身小程序为用户提供一站式全流程科学健身综合服务。用户通过登录微信小程序&#xff0c;可享用健康筛查、运动风险评估、体质检测评估、运动处方推送、个人运动数据监控与评估等公益服务。 2、 体验介绍西部智慧健身小程序华为运动健康服务核心体验如…...

Spring Boot中如何处理异步任务

Spring Boot中如何处理异步任务 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Spring Boot应用中如何处理异步任务&#xff0c;以提升系统的性…...

数字化精益生产系统--RD研发管理系统

R&D研发管理系统是一种用于管理和监督科学研究和技术开发的软件系统&#xff0c;其设计和应用旨在提高企业研发活动的效率、质量和速度。以下是对R&D研发管理系统的功能设计&#xff1a;...

鱼眼相机 去畸变

目录 枕形畸变和去枕形畸变 去枕形畸变失败 枕形畸变和去枕形畸变 import cv2 import numpy as np import matplotlib.pyplot as plt# 创建一个带网格的原始图像 def create_grid(image_size512, grid_size20):image np.zeros((image_size, image_size, 3), dtypenp.uint8)…...

DC/AC电源模块:为智能家居设备提供恒定的电力供应

BOSHIDA DC/AC电源模块&#xff1a;为智能家居设备提供恒定的电力供应 DC/AC电源模块是一种常见的电源转换器&#xff0c;它将直流电源&#xff08;DC&#xff09;转换为交流电源&#xff08;AC&#xff09;&#xff0c;为智能家居设备提供恒定的电力供应。在智能家居系统中&a…...

CorelDRAW2024设计师的神器,一试就爱上!

&#x1f3a8; CorelDRAW 2024&#xff1a;设计界的瑞士军刀&#xff0c;让创意不再受限&#xff01;&#x1f31f; 嗨&#xff0c;各位朋友们&#xff01;&#x1f44b;&#x1f3fb; 今天我要跟大家分享一个神奇的设计神器——CorelDRAW 2024。作为设计师的你&#xff0c;是否…...

github仓库的基本使用-创建、上传文件、删除

1.第一步 先点击左侧菜单栏的远程仓库 2.点击NEW 3.创建仓库 然后点击右下角的 CREATE 4.点击code 点击SSH,然后我出现了You don’t have any public SSH keys in your GitHub account. You can add a new public key, or try cloning this repository via HTTPS. 1&#xff…...

基于Pinia的WebSocket管理与优化实践(实现心跳重连机制,异步发送)

WebSocket作为一种全双工通信协议&#xff0c;允许服务器和客户端之间建立持久的连接&#xff0c;提供了比传统HTTP请求更为高效的数据交换方式。本文将探讨如何使用Pinia状态管理库在Vue应用中优雅地管理和优化WebSocket连接&#xff0c;以实现稳定、高效的实时数据传输。 环境…...

第一篇——导论:数学通识课的体系和学习攻略

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学的认知大厦&#xff1b;之前听的时候就觉得很重要&#xff0c;本次又…...

【Laravel生命周期全景】深入框架的心脏

标题&#xff1a;【Laravel生命周期全景】深入框架的心脏 Laravel是一个优雅的PHP Web框架&#xff0c;为现代Web应用程序的开发提供了丰富的功能和清晰的架构。理解Laravel的生命周期对于开发者来说至关重要&#xff0c;因为它涉及到应用程序从启动到响应请求的每一个环节。本…...

平安养老险宿州中心支公司积极参与“78奋力前行”集体健步行活动

7月3日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;宿州中心支公司组织员工参加由宿州市保险行业协会2024年“78奋力前行”线下集体健步行活动。 平安养老险宿州中心支公司员工高举公司旗帜&#xff0c;与同业伙伴一起出发&#xff0…...

领克07EM-P正式上市,优惠价16.38万元起!

领克07 EM-P作为一款定位高端市场的混合动力车型,搭载的超级增程电动解决方案,不仅承载了年轻消费者对速度与激情的追求,更以高性价比满足了他们对燃油经济性和舒适性的双重需求。这一方案为驾驶者提供了四种不同的驾驶模式,包括纯电动模式、性能模式、超级增程模式以及个性…...

new CCDIKSolver( OOI.kira, iks ); // 创建逆运动学求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某个特定的库或框架来创建一个逆运动学&#xff08;Inverse Kinematics, IK&#xff09;求解器实例。逆运动学在机器人学、动画和计算机图形学等领域中非常重要&#xff0c;它用于根据期望的末端执行器&#xff08;如机器人的…...

行为设计模式之状态模式

文章目录 概述定义结构图 2.代码示例小结 概述 定义 状态模式(state pattern)的定义: 允许一个对象在其内部状态改变时改变它的行为。 对象看起来似乎修改了它的类。 状态模式就是用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.。状态模式将一个对象的状态…...

信息标记形式 (XML, JSON, YAML)

文章目录 &#x1f5a5;️介绍&#x1f5a5;️三种形式&#x1f3f7;️XML (Extensible Markup Language)&#x1f516;规范&#x1f516;注释&#x1f516;举例&#x1f516;其他 &#x1f3f7;️JSON (JavaScript Object Notation)&#x1f516;规范&#x1f516;注释&#x…...

48、spfa求最短路

spfa求最短路 题目描述 给定一个n个点m条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c; 边权可能为负数。 请你求出1号点到n号点的最短距离&#xff0c;如果无法从1号点走到n号点&#xff0c;则输出impossible。 数据保证不存在负权回路。 输入格式 第一行包…...

随笔(二)——项目代码优化

文章目录 前言一、传入的props的默认值定义为空数组1.问题&#xff08;提示对象的类型为unknwn&#xff09;2.优化 二、document 上不存在xxx属性1.问题2.做了一个兼容浏览器的关闭全屏方法3. 解决方法 &#xff08;使用declare globa设置全局变量类型&#xff09;&#xff08;…...