Redis 字符串操作实战(全)

目录

SET 存入键值对

SETNX

SETEX

SETBIT

SETRANGE

MSET 批量存入键值对

MSETNX

PSETEX

BITCOUNT 计算值中1的数量

BITOP 与或非异或操作

DECR 减1

DECRBY

APPEND 追加

INCR 自增

INCRBY

INCRBYFLOAT

GET 取值

GETBIT

GETRANGE

GETSET 取旧值赋新值

MGET 批量取值

STRLEN 计算值的长度


SET 存入键值对

SET key value [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp | KEEPTTL ] [NX|XX]

  • EX seconds: 设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value
  • PX milliseconds: 设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 
  • EXAT timestamp:指定过期时间为Unix时间,单位是秒
  • PXAT milliseconds-timestamp:指定过期时间为Unix时间,单位是毫秒
  • KEETTTL:保存ttl时间
  • NX: 只在键不存在时,才对键进行设置操作,常用于添加。 SET key value NX 效果等同于 SETNX key value
  • XX: 只在键已经存在时,才对键进行设置操作,常用于更新

存入字符串键值对

如果 key 已经持有其他值, set 就覆写旧值,无视类型。

对于某个原本带有生存时间(TTL)的键来说, 当 set 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

127.0.0.1:6379> set time '2023-09-14'
OK
127.0.0.1:6379> get time
"2023-09-14"
# 设置过期时间EX 5 单位是秒
127.0.0.1:6379> set time '2023-09-14' EX 5
OK
127.0.0.1:6379> get time
"2023-09-14"
# 过5秒之后time已过期,获取不到
127.0.0.1:6379> get time
(nil)
# 设置过期时间PX 5000 单位是毫秒
127.0.0.1:6379> set time '2023-09-14' PX 5000
OK
127.0.0.1:6379> get time
"2023-09-14"
# 过5000毫秒之后time已过期,获取不到
127.0.0.1:6379> get time
(nil)
127.0.0.1:6379> set time '2023-09-14' NX
OK
# NX:key为time已存在,设置失败
127.0.0.1:6379> set time '2023-09-14' NX
(nil)
# XX:key为time已存在,设置成功
127.0.0.1:6379> set time '2023-09-14' XX
OK
# XX:key为time1不存在,设置失败
127.0.0.1:6379> set time1 '2023-09-14' XX
(nil)

时间复杂度为O(1)。

SET 成功时才返回OK。

SETNX

SETNX key value(set if not exists的简写):将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。

127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> setnx name zhangsan
(integer) 0
127.0.0.1:6379> set name zhangxan nx
(nil)
127.0.0.1:6379> get name
"lisi"

时间复杂度为O(1)。成功返回OK,否则返回0。

SETEX

SETEX key seconds value:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值。

该命令相当于以下两条命令 set key value; expire key seconds; 两条命令。

SET key value
EXPIRE key seconds  # 设置生存时间

不同的是,SETEX是一个原子操作。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setex name 10 xxian
OK
127.0.0.1:6379> get name
"xxian"
127.0.0.1:6379> get name
(nil)

时间复杂度为O(1)。

成功返回OK,seconds不合法时,报错ERR value is not an integer or out of range。

SETBIT

SETBIT key offset value:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

位的设置或清除取决于 value 参数,可以是 0 也可以是 1 。key不存在时生一个新的字符串值。

字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。

offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setbit bit 1 1
(integer) 0
127.0.0.1:6379> setbit bit 3 1
(integer) 0
127.0.0.1:6379> setbit bit 5 1
(integer) 0
127.0.0.1:6379> setbit bit 7 0
(integer) 0
127.0.0.1:6379> setbit bit 9 0
(integer) 0
127.0.0.1:6379> getbit bit 1
(integer) 1
127.0.0.1:6379> getbit bit 7
(integer) 0
127.0.0.1:6379> getbit bit 2
(integer) 0

时间复杂度为O(1)。

成功返回0,offset有错或value有错时报错。

SETRANGE

SETRANGE key offset value:用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。不存在的 key 当作空白字符串处理。

MSET 批量存入键值对

MSET key value [key value ...]:批量存储字符串键值对(同时设置一个或多个 key-value 对),如果某个给定 key 已经存在,那么mset会用新值覆盖原来的旧值。

127.0.0.1:6379> mset name 'xxjava' age 25 address '贵州'
OK
127.0.0.1:6379> mget name age address
1) "xxjava"
2) "25"
3) "\xe8\xb4\xb5\xe5\xb7\x9e"

注:mset 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。

时间复杂度为O(N), N 为要设置的 key 数量。

MSET 不可能失败,所以总是返回OK。

MSETNX

MSETNX key value [key value ...]:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。(MSETNX是原子性)

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> msetnx a 1 b 2 c 3 d 4
(integer) 1
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> msetnx a 1 e 5 f 6 g 7
(integer) 0
# 不成功是因为key为a 的已经厦

时间复杂度O(N),N为KEY的数量。

成功返回1,否则返回0(至少有一个key已经存在)。

PSETEX

PSETEX key milliseconds value:与 SETEX 命令相似。

不同之处

  • SETEX是以秒为单位设置 key 的生存时间
  • PSETEX是以毫秒为单位设置 key 的生存时间

BITCOUNT 计算值中1的数量

BITCOUNT key [start] [end]:计算给定字符串中,被设置为 1 的比特位的数量。

一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。

start 和 end 可以是负数::比如 -1 表示最后一个位,而 -2 表示倒数第二个位,以此类推。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setbit bit 1 1
(integer) 0
127.0.0.1:6379> setbit bit 3 1
(integer) 0
127.0.0.1:6379> setbit bit 5 1
(integer) 0
127.0.0.1:6379> setbit bit 7 0
(integer) 0
127.0.0.1:6379> setbit bit 9 0
(integer) 0
127.0.0.1:6379> getbit bit 1
(integer) 1
127.0.0.1:6379> getbit bit 7
(integer) 0
127.0.0.1:6379> getbit bit 2
(integer) 0
127.0.0.1:6379> bitcount bit
(integer) 3

时间复杂度为O(N)。

返回被设置为1的数量。

BITOP 与或非异或操作

BITOP operation destkey key [key ...]:对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。

有四种操作:

  • AND: BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
  • OR:BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey。
  •  XOR:BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
  • NOT:BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey。

注:多key的情况,短的key补0,空key全补0。

求逻辑并 AND操作 和 求逻辑或 OR 操作:

127.0.0.1:6379> flushdb
OK# 设置xx1为1100
127.0.0.1:6379> setbit xx1 0 1
(integer) 0
127.0.0.1:6379> setbit xx1 1 1
(integer) 0# 设置xx2为0011
127.0.0.1:6379> setbit xx2 2 1
(integer) 0
127.0.0.1:6379> setbit xx2 3 1
(integer) 0# and 求逻辑并 xx1 and xx2 = 1100 and 0011 = 0000
127.0.0.1:6379> bitop and destkey xx1 xx2
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 0
127.0.0.1:6379> getbit destkey 1
(integer) 0
127.0.0.1:6379> getbit destkey 2
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> getbit destkey 3
(integer) 0# or 求逻辑或 xx1 or xx2 = 1100 or 0011 = 1111
127.0.0.1:6379> bitop or destkey xx1 xx2
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 1
127.0.0.1:6379> getbit destkey 1
(integer) 1
127.0.0.1:6379> getbit destkey 2
(integer) 1
127.0.0.1:6379> getbit destkey 3
(integer) 1

求逻辑异或 XOR操作 和 求逻辑非 NOT 操作

127.0.0.1:6379> flushdb
OK# 设置k1 为1001
127.0.0.1:6379> setbit k1 0 1
(integer) 0
127.0.0.1:6379> setbit k1 1 0
(integer) 0
127.0.0.1:6379> setbit k1 2 0
(integer) 0
127.0.0.1:6379> setbit k1 3 1
(integer) 0# 设置k2 为0011
127.0.0.1:6379> setbit k2 0 0
(integer) 0
127.0.0.1:6379> setbit k2 1 0
(integer) 0
127.0.0.1:6379> setbit k2 2 1
(integer) 0
127.0.0.1:6379> setbit k2 3 1
(integer) 0# XOR 求逻辑异或 k1 xor k2 = 1001 xor 0011 = 1010
127.0.0.1:6379> bitop xor destkey k1 k2
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 1
127.0.0.1:6379> getbit destkey 1
(integer) 0
127.0.0.1:6379> getbit destkey 2
(integer) 1
127.0.0.1:6379> getbit destkey 3
(integer) 0# 对 k1 求逻辑非 not 1001 = 0110
127.0.0.1:6379> bitop not destkey k1
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 0
127.0.0.1:6379> getbit destkey 1
(integer) 1
127.0.0.1:6379> getbit destkey 2
(integer) 1
127.0.0.1:6379> getbit destkey 3
(integer) 0

时间复杂度为O(N),N为max(len(k1), len(k2))的值。

返回到destkey中。

DECR 减1

DECR key:将 key 中储存的数字值减一。

  • 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
  • 若值不为数字类型,则返回错误。
  • 本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> decr age
(integer) 99
127.0.0.1:6379> get age
"99"# key不存在
127.0.0.1:6379> decr name
(integer) -1# key不为数字
127.0.0.1:6379> set name 'cxian'
OK
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range

时间复杂度为O(1)。

返回执行命令DECR后的值。

当值不为数字则报错。

DECRBY

DECRBY key decrement:将 key 所储存的值减去减量 decrement 。

  • 若key不存在,则新给key赋值为0,然后再执行DECRBY操作
  • 若key的值不为数字,则返回错误;
  • 本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> DECRBY age 30
(integer) 70# key不存在
127.0.0.1:6379> DECRBY name 30
(integer) -30
127.0.0.1:6379> set name 'cxian'
OK# key不为数字
127.0.0.1:6379> DECRBY name 30
(error) ERR value is not an integer or out of range
127.0.0.1:6379>

时间复杂度为O(1)。返回执行命令DECRBY后的值。当值不为数字则报错。

APPEND 追加

APPEND key value:如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾;如果 key 不存在,APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name 'xiao'
OK
127.0.0.1:6379> APPEND name ' xian'
(integer) 9
127.0.0.1:6379> get name
"xiao xian"

时间复杂度为O(1)。

返回追加后字符串的长度。

相关命令:

  • STRLEN key: 输出key的值的长度
  • GETRANGE key start end: 返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
  • SETRANGE key offset value: 用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始

INCR 自增

INCR key:将 key 中储存的数字值增一。

  • 若key不存在,则新给key赋值为0,然后再执行 INCR 操作
  • 若key的值不为数字,则返回错误
  • 本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)# key不存在
127.0.0.1:6379> incr age
(integer) 1# key存在
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> incr age
(integer) 101

时间复杂度为O(1)。

返回INCR命令后key的值。

INCRBY

INCRBY key increment:所DECR相似,不同在于DECRBY是减,而INCRBY是相加。

INCRBYFLOAT

INCRBYFLOAT key increment:对key 对应的值转为浮点数加上浮点数增量 increment。

  • 如果 key 不存在,那么 INCRBYFLOAT 会先给 key 赋值为0 ,再执行加法操作。
  • 如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者。
  • key的值和increment都可以用指数符号形式表示(如2.0e7 、 3e5 、 90e-2等)
127.0.0.1:6379> flushdb
OK
# key不存在
127.0.0.1:6379> incrbyfloat age 2.55
"2.55"# key存在
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> incrbyfloat age 2.55
"102.55"# key的值不为数字类型
127.0.0.1:6379> set name 'cxian'
OK
127.0.0.1:6379> incrbyfloat name 2.55
(error) ERR value is not a valid float

时间复试度O(1)。

返回执行INCRBYFLOAT命令后的值。

GET 取值

GET key:返回 key 所关联的字符串值。

  • key 不存在,返回nil
  • key 的值不为字符串,返回一个错误(GET只处理字符串)
127.0.0.1:6379> flushdb
OK# key不存在
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> set age '100'
OK
127.0.0.1:6379> get age
"100"# key对应的值不为字符串get报错
127.0.0.1:6379> lpush fruits apple banana orange
(integer) 3
127.0.0.1:6379> get fruits
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回key对应的值。

GETBIT

GETBIT key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

  • 当 offset 比字符串值的长度大,或者 key 不存在时,返回 0
127.0.0.1:6379> flushdb
OK# 设code的值为1001
127.0.0.1:6379> setbit code 0 1
(integer) 0
127.0.0.1:6379> setbit code 1 0
(integer) 0
127.0.0.1:6379> setbit code 2 0
(integer) 0
127.0.0.1:6379> setbit code 3 1
(integer) 0# 取位置3的值
127.0.0.1:6379> getbit code 3
(integer) 1
# 取位置2的值
127.0.0.1:6379> getbit code 2
(integer) 0
# 取位置1的值
127.0.0.1:6379> getbit code 1
(integer) 0
# 取位置0的值
127.0.0.1:6379> getbit code 0
(integer) 1# 取offset比key的值长度大
127.0.0.1:6379> getbit code 64
(integer) 0# 取不存在的
key127.0.0.1:6379> get id
(nil)
127.0.0.1:6379> getbit id 0
(integer) 0

时间复杂度O(1)。

返回字符串值指定偏移量上的位(bit)

GETRANGE

GETRANGE key start end:返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

  • 负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推
  • 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> SET address "shuangshuangguiyang"# 返回过引0-3的字符串,包括3
127.0.0.1:6379> getrange address 0 3
"shua"# 返回-3~-1 即 倒数第三个~最后一个(属从左往右,正常返回)
127.0.0.1:6379> getrange address -3 -1
"ang"# 返回-1~-3 即 最后一个~倒数第三个(属从右往左,返回空串)
127.0.0.1:6379> getrange address -1 -3
""
# 返回3~0 即 第四个~第一个(属从右往在,返回空串)
127.0.0.1:6379> getrange address 3 0
""# 不在key的值的长度范围之外的部分返回空串
127.0.0.1:6379> getrange address 10 100
"ngguiyang"

时间复杂度为O(N)(N为返回字符串的长度)。

返回截取得同的子字符串。

GETSET 取旧值赋新值

GETSET key value:将给定 key 的值设为 value ,并返回 key 的旧值。

  • 若key不存在,则设置key的值为value,返回nil
  • 若key存在且不为字符串,返回错误
127.0.0.1:6379> flushdb
OK# key不存在
127.0.0.1:6379> getset name 'cxian'
(nil)
127.0.0.1:6379> get name
"cxian"# key存在且为字符串
127.0.0.1:6379> getset name lisi
"cxian"# key存在且不为字符串
127.0.0.1:6379> lpush fruits apple banana orange
(integer) 3
127.0.0.1:6379> getset fruits 123
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度为O(1)。

返回给定key的旧值。

  • 当key不存在返回nil
  • 当key旧值不为字符串报错

MGET 批量取值

MGET key [key ...]:依次返回所有(一个或多个)给定 key 的值。

  • 当key不存在 或key的值不为字符串,返回nil
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 88
OK
127.0.0.1:6379> lpush fruits apple banana orange pear
(integer) 4# fruits为集合和name不存在,返回nil
127.0.0.1:6379> mget age fruits name
1) "88"
2) (nil)
3) (nil)

时间复杂度O(N),N为key的数量。

返回一个包含所有给定 key 的值的列表。

STRLEN 计算值的长度

STRLEN key:返回 key 所储存的字符串值的长度。

  • 当key不存在是,返回0
  • 当key的值不为字符时报错
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> lpush fruits apple banana orange pear
(integer) 4# key存在返回对应值的长度
127.0.0.1:6379> strlen age
(integer) 3# key不存在返回0
127.0.0.1:6379> strlen name
(integer) 0# key存在但不为字符串,报错
127.0.0.1:6379> strlen fruits
(error) WRONGTYPE Operation against a key holding the wrong kind of value

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

权限提升Linux篇

提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…

Git学习笔记4

GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库,提供公有仓库和私有仓库,但私有仓库是需要付费的。 到Github上找类似的项目软件。 GitLab可以创建免费的私有仓库。 GitLab是利用 Ruby开发的一个开源的版本管理系统,实现一个…

如何使用Docker安装最新版本的Redis并设置远程访问(含免费可视化工具)

文章目录 安装Docker安装Redisredis.conf文件远程访问Redis免费可视化工具相关链接Docker是一种开源的应用容器引擎,使用Docker可以让我们快速部署应用环境,本文介绍如何使用Docker安装最新版本的Redis。 安装Docker 首先需要安装Docker,具体的安装方法可以参考Docker官方文…

使用 rtty 进行远程 Linux 维护和调试

rtty 是一个用于在终端上进行远程连接和数据传输的工具。它提供了一种简单的方式来与远程设备进行通信,使得在不同主机之间传输数据变得更加方便。 安装 rtty 是一个可执行程序,可以在 Linux、macOS 和 Windows 等平台上使用。 Linux/macOS 在终端中执…

开发者必备!如何将闲置iPad Pro打造为编程工具,使用VS Code编写代码

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. ipad pro通过软件远程vscode6.1 创建TCP隧道 7. ip…

Java-day17(反射)

Reflection(反射) 动态语言的关键 允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法提供的功能: 在运行时判断任意一个对象所属类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在…

怒刷LeetCode的第15天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:哈希表双向链表 方法二:TreeMap 方法三:双哈希表 第二题 题目来源 题目内容 解决方法 方法一:二分查找 方法二:线性搜索 方法三:Arrays类的b…

基于SpringBoot的在线文档管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 员工功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势…

90行代码写一个视频播放器

上一篇文章视频播放器的技术组成写了视频播放器的整体结构 下面我们就来上伪代码&#xff1a; #include <iostream> #include <thread> #include <list> #include <string> using namespace std;//下文代码都需要考虑并发&#xff0c;并发代码没写是…

ArcGIS 10.3软件安装包下载及安装教程!

【软件名称】&#xff1a;ArcGIS 10.3 【安装环境】&#xff1a;Windows 【下载链接 】&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1K5ab7IHMYa23HpmuPkFa1A 提取码&#xff1a;oxbb 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 软件解压码点击原文…

java面试题-jvm基础知识

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&a…

代码随想录算法训练营day6| 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

目录 一、哈希表理论 hash function ​编辑hash collision 常见哈希结构 1&#xff09;set 2&#xff09;map 二、&#xff08;leetcode 242&#xff09;有效的字母异位词 三、&#xff08;leetcode 349&#xff09;两个数组的交集 四、&#xff08;leetcode 202&…

JAVA学习-全网最详细

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

Linux学习第19天:Linux并发与竞争实例: 没有规矩不成方圆

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 先说点题外话&#xff0c;上周参加行业年会&#xff0c;停更了一周。接下来的周五就要开启国庆中秋双节模式&#xff0c;所以有的时候&#xff0c;尤其是工作以后…

设计模式——备忘录模式

备忘录模式 备忘录模式是什么&#xff1f;备忘录模式解决什么问题&#xff1f;备忘录模式实现 备忘录模式是什么&#xff1f; 在不破坏封装性的前提下&#xff0c;捕获一个对的的内部状态&#xff0c;并在该对象之外保持这个状态。这样以后就可将该对象恢复到原先保持的状态 …

java面试题-设计模式基础

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

游戏录屏软件推荐,教你录制高清游戏视频

“有没有好用的游戏录屏软件推荐呀&#xff0c;最近当上了游戏主播&#xff0c;平台要求每天都要发一个游戏视频&#xff0c;可是我的游戏录屏软件太拉胯了&#xff0c;录制出来的视频非常糊&#xff0c;导致平台审核不通过&#xff0c;所以想问问大家有没有游戏录屏软件推荐一…

SQL server 创建存储过程

SQL Server如何创建存储过程 存储过程&#xff1a; 可以理解为完成特定功能的一组 SQL 语句集&#xff0c;存储在数据库中&#xff0c;经过第一次编译&#xff0c;之后的运行不需要再次编译&#xff0c;用户通过指定存储过程的名字并给出参数&#xff08;如果该存储过程带有参数…

时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解

时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 1.分解效果图 &#xff0…

opencv dnn模块 示例(17) 目标检测 object_detection 之 yolo v5

在前文【opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4】介绍的yolo v4后的2个月&#xff0c;Ultralytics发布了YOLOV5 的第一个正式版本&#xff0c;其性能与YOLO V4不相伯仲。 文章目录 1、Yolo v5 和 Yolo v4 的区别说明1.1、Data Augmentation - 数据增强1…