redis面试基础知识

redis的数据类型

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:

五种基本数据类型

Redis 通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key

  • DEL:删除一个指定的key

  • EXISTS:判断key是否存在

  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

  • TTL:查看一个KEY的剩余有效期

通过help [command] 可以查看一个命令的具体用法,例如:

  • KEYS

127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379>
​
# 查询以a开头的key
127.0.0.1:6379> keys a*
1) "age"
127.0.0.1:6379>

贴心小提示:在生产环境下,不推荐使用keys 命令,因为这个命令在key过多的情况下,效率不高

  • DEL

127.0.0.1:6379> help del
​DEL key [key ...]summary: Delete a keysince: 1.0.0group: generic
​
127.0.0.1:6379> del name #删除单个
(integer) 1  #成功删除1个
​
127.0.0.1:6379> keys *
1) "age"
​
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 #批量添加数据
OK
​
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "age"
​
127.0.0.1:6379> del k1 k2 k3 k4
(integer) 3   #此处返回的是成功删除的key,由于redis中只有k1,k2,k3 所以只成功删除3个,最终返回
127.0.0.1:6379>
​
127.0.0.1:6379> keys * #再查询全部的key
1) "age"    #只剩下一个了
127.0.0.1:6379>

贴心小提示:同学们在拷贝代码的时候,只需要拷贝对应的命令哦~

  • EXISTS

127.0.0.1:6379> help EXISTS
​EXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic
​
127.0.0.1:6379> exists age
(integer) 1
​
127.0.0.1:6379> exists name
(integer) 0
  • EXPIRE

贴心小提示:内存非常宝贵,对于一些数据,我们应当给他一些过期时间,当过期时间到了之后,他就会自动被删除~

127.0.0.1:6379> expire age 10
(integer) 1
​
127.0.0.1:6379> ttl age
(integer) 8
​
127.0.0.1:6379> ttl age
(integer) 6
​
127.0.0.1:6379> ttl age
(integer) -2
​
127.0.0.1:6379> ttl age
(integer) -2  #当这个key过期了,那么此时查询出来就是-2 
​
127.0.0.1:6379> keys *
(empty list or set)
​
127.0.0.1:6379> set age 10 #如果没有设置过期时间
OK
​
127.0.0.1:6379> ttl age
(integer) -1  # ttl的返回值就是-1

String字符串

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串

  • int:整数类型,可以做自增.自减操作

  • float:浮点类型,可以做自增.自减操作

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对

  • GET:根据key获取String类型的value

  • MSET:批量添加多个String类型的键值对

  • MGET:根据多个key获取多个String类型的value

  • INCR:让一个整型的key自增1

  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

  • SETEX:添加一个String类型的键值对,并且指定有效期

贴心小提示:以上命令除了INCRBYFLOAT 都是常用命令

  • SET 和GET: 如果key不存在则是新增,如果存在则是修改

127.0.0.1:6379> set name Rose  //原来不存在
OK127.0.0.1:6379> get name 
"Rose"127.0.0.1:6379> set name Jack //原来存在,就是修改
OK127.0.0.1:6379> get name
"Jack"
  • MSET和MGET

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
​
127.0.0.1:6379> MGET name age k1 k2 k3
1) "Jack" //之前存在的name
2) "10"   //之前存在的age
3) "v1"
4) "v2"
5) "v3"
  • INCR和INCRBY和DECY

127.0.0.1:6379> get age 
"10"
​
127.0.0.1:6379> incr age //增加1
(integer) 11127.0.0.1:6379> get age //获得age
"11"
​
127.0.0.1:6379> incrby age 2 //一次增加2
(integer) 13 //返回目前的age的值127.0.0.1:6379> incrby age 2
(integer) 15127.0.0.1:6379> incrby age -1 //也可以增加负数,相当于减
(integer) 14127.0.0.1:6379> incrby age -2 //一次减少2个
(integer) 12127.0.0.1:6379> DECR age //相当于 incr 负数,减少正常用法
(integer) 11127.0.0.1:6379> get age 
"11"
​
  • SETNX

127.0.0.1:6379> help setnx
​SETNX key valuesummary: Set the value of a key, only if the key does not existsince: 1.0.0group: string
​
127.0.0.1:6379> set name Jack  //设置名称
OK
127.0.0.1:6379> setnx name lisi //如果key不存在,则添加成功
(integer) 0
127.0.0.1:6379> get name //由于name已经存在,所以lisi的操作失败
"Jack"
127.0.0.1:6379> setnx name2 lisi //name2 不存在,所以操作成功
(integer) 1
127.0.0.1:6379> get name2 
"lisi"
  • SETEX

127.0.0.1:6379> setex name 10 jack
OK
​
127.0.0.1:6379> ttl name
(integer) 8
​
127.0.0.1:6379> ttl name
(integer) 7
​
127.0.0.1:6379> ttl name
(integer) 5

Hash散列表

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。 

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

Hash类型的常见命令

  • HSET key field value:添加或者修改hash类型key的field的值

  • HGET key field:获取一个hash类型key的field的值

  • HMSET:批量添加多个hash类型key的field的值

  • HMGET:批量获取多个hash类型key的field的值

  • HGETALL:获取一个hash类型的key中的所有的field和value

  • HKEYS:获取一个hash类型的key中的所有的field

  • HINCRBY:让一个hash类型key的字段值自增并指定步长

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

贴心小提示:哈希结构也是我们以后实际开发中常用的命令哟

  • HSET和HGET

127.0.0.1:6379> HSET heima:user:3 name Lucy//大key是 heima:user:3 小key是name,小value是Lucy
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 21// 如果操作不存在的数据,则是新增
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 17 //如果操作存在的数据,则是修改
(integer) 0
127.0.0.1:6379> HGET heima:user:3 name 
"Lucy"
127.0.0.1:6379> HGET heima:user:3 age
"17"
  • HMSET和HMGET

127.0.0.1:6379> HMSET heima:user:4 name HanMeiMei
OK
127.0.0.1:6379> HMSET heima:user:4 name LiLei age 20 sex man
OK
127.0.0.1:6379> HMGET heima:user:4 name age sex
1) "LiLei"
2) "20"
3) "man"
  • HGETALL

127.0.0.1:6379> HGETALL heima:user:4
1) "name"
2) "LiLei"
3) "age"
4) "20"
5) "sex"
6) "man"
  • HKEYS和HVALS

127.0.0.1:6379> HKEYS heima:user:4
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "20"
3) "man"
  • HINCRBY

127.0.0.1:6379> HINCRBY  heima:user:4 age 2
(integer) 22
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "22"
3) "man"
127.0.0.1:6379> HINCRBY  heima:user:4 age -2
(integer) 20
  • HSETNX

127.0.0.1:6379> HSETNX heima:user4 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
127.0.0.1:6379> HSETNX heima:user:3 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
5) "sex"
6) "woman"

List链表

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序

  • 元素可以重复

  • 插入和删除快

  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element ... :向列表左侧插入一个或多个元素

  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

  • RPUSH key element ... :向列表右侧插入一个或多个元素

  • RPOP key:移除并返回列表右侧的第一个元素

  • LRANGE key star end:返回一段角标范围内的所有元素

  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

  • LPUSH和RPUSH

127.0.0.1:6379> LPUSH users 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH users 4 5 6
(integer) 6
  • LPOP和RPOP

127.0.0.1:6379> LPOP users
"3"
127.0.0.1:6379> RPOP users
"6"
  • LRANGE

127.0.0.1:6379> LRANGE users 1 2
1) "1"
2) "4"

Set集合

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集.并集.差集等功能

Set类型的常见命令

  • SADD key member ... :向set中添加一个或多个元素

  • SREM key member ... : 移除set中的指定元素

  • SCARD key: 返回set中元素的个数

  • SISMEMBER key member:判断一个元素是否存在于set中

  • SMEMBERS:获取set中的所有元素

  • SINTER key1 key2 ... :求key1与key2的交集

  • SDIFF key1 key2 ... :求key1与key2的差集

  • SUNION key1 key2 ..:求key1和key2的并集

例如两个集合:s1和s2:

求交集:SINTER s1 s2

求s1与s2的不同:SDIFF s1 s2

具体命令

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem s1 a
(integer) 1127.0.0.1:6379> SISMEMBER s1 a
(integer) 0127.0.0.1:6379> SISMEMBER s1 b
(integer) 1127.0.0.1:6379> SCARD s1
(integer) 2

案例

  • 将下列数据用Redis的Set集合来存储:

  • 张三的好友有:李四.王五.赵六

  • 李四的好友有:王五.麻子.二狗

  • 利用Set的命令实现下列功能:

  • 计算张三的好友有几人

  • 计算张三和李四有哪些共同好友

  • 查询哪些人是张三的好友却不是李四的好友

  • 查询张三和李四的好友总共有哪些人

  • 判断李四是否是张三的好友

  • 判断张三是否是李四的好友

  • 将李四从张三的好友列表中移除

127.0.0.1:6379> SADD zs lisi wangwu zhaoliu
(integer) 3127.0.0.1:6379> SADD ls wangwu mazi ergou
(integer) 3127.0.0.1:6379> SCARD zs
(integer) 3127.0.0.1:6379> SINTER zs ls
1) "wangwu"127.0.0.1:6379> SDIFF zs ls
1) "zhaoliu"
2) "lisi"127.0.0.1:6379> SUNION zs ls
1) "wangwu"
2) "zhaoliu"
3) "lisi"
4) "mazi"
5) "ergou"127.0.0.1:6379> SISMEMBER zs lisi
(integer) 1127.0.0.1:6379> SISMEMBER ls zhangsan
(integer) 0127.0.0.1:6379> SREM zs lisi
(integer) 1127.0.0.1:6379> SMEMBERS zs
1) "zhaoliu"
2) "wangwu"

SortedSet(有序集合)

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表

SortedSet具备下列特性:

  • 可排序

  • 元素不重复

  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

  • ZREM key member:删除sorted set中的一个指定元素

  • ZSCORE key member : 获取sorted set中的指定元素的score值

  • ZRANK key member:获取sorted set 中的指定元素的排名

  • ZCARD key:获取sorted set中的元素个数

  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

  • ZDIFF.ZINTER.ZUNION:求差集.交集.并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member

  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

三种特殊的数据类型

Geo 地理位置

命令介绍
(1)geoadd命令:将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。
格式:geoadd key 经度 纬度 地理位置
例如:geoadd china:city 116.40 39.90 beijing
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回下述错误。
(error) ERR invalid longitude,latitude pair 39.900000,116.400000
同时,这个命令还可以添加多个元素,例如:
geoadd china:city 116.40 39.90 beijing 121.47 32.23 shanghai

规则:两级(南极北极)是无法直接添加的,一般会下载城市数据,直接通过Java程序一次性导入

(2)geopos命令:从key里返回所有给定位置元素的位置(经度和纬度)。
格式:geopos key member
例如:geopos china:city beijing
返回值:GEOPOS 命令返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。
当给定的元素不存在时,对应的数组项为空值。

(3)geodist命令:返回两个给定位置之间的直线距离,如果两个位置之间的其中一个不存在,那么命令就返回空值。
格式:geodist key member1 member2 [unit]
指定单位的参数 unit 必须是以下单位的其中一个:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

(4)georadius命令:以给定的经纬度为中心,找出某一半径内的元素。
以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。
格式:georadius key longitude latitude radius m|km|ft|mi
例如: georadius china:city 110 23 1000 km
key为键,longitude、latitude表示当前位置的经纬度,radius表示搜索半径,m|km|ft|mi表示单位。

上图的代码解释:
以110 23为经纬度查询方圆1000km内的城市。前提是所有的数据录入了china:city中。

Hyperloglog 基数统计

  • 什么是基数?

一个可重复集合内不重复元素的个数就是基数。

  • 简介

Redis 2.8.9版本就更新了Hyperloglog数据结构。
Redis Hyperloglog基数统计的算法。

  • 优点

占用的内存是固定的,2^64不同元素的技术,只需要费12KB内存。如果要从内存角度来比较的话,Hyperloglog是首选。

举例:网页的UV(一个人访问一个网站多次,但是还是算作一个人)

传统的方式:使用set保护用户的ID,然后就可以统计set中的元素数量作为标准判断,这个方式如果保存大量的用户id,就会比较麻烦。

我们的目的是为了计数,而不是存储用户id。

(1)pfadd key member1 member2 ....:添加一个或者多个元素
(2)pfcount key:统计key集合中基数的个数

(3)pfmerge newKey key1 key2 ...:合并key1和key2中的元素,并且剔除其中重复的元素,产生新的集合newKey。

key1中的元素有:a b c d e f g
key2中的元素有:h i j a e q n m c
重复的元素有:a e c
产生的newKey中的元素有:a b c d e f g h i j q n m


应用场景:适合做页面统计。
如果允许容错,那么一定要使用Hyperloglog;
如果不允许容错,就使用set或者自己的数据类型即可。
(容错就是当由于种种原因在系统中出现了数据、文件损坏或丢失时,系统能够自动将这些损坏或丢失的文件和数据恢复到发生事故以前的状态,使系统能够连续正常运行的一种技术,很简单的意思)

Bitmap位图

  • 概括

Bitmap是位图,数据结构,都是操作二进制位来进行记录,就只有0和1两个状态。
365天 = 365bit 1字节 = 8bit 大约45个字节左右
基本命令
(1)setbit key offset value:value只能是0或者1,如下例子所示:

使用bitmap来记录周一到周日的打卡。
上图中的offeset表示周几,value的0表示未打卡,1表示打开成功。
周一0:1,周二1:0,周三2:1,周四3:1,…

2)getbit key offset:获取key中的offset值,查看某一天是否打卡

以上表示的是查看周四是否打卡,周日是否打卡。

(3)bitcount key:统计操作,统计打开的天数,相当于统计sign中value为1的元素个数

应用场景
统计用户信息、活跃、不活跃、登录、未登录、打卡等等… 两个状态的都可以使用Bitmap。

在生活或者开发中都有十分多的应用场景。

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

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

相关文章

思维(交互题),CF 1990E2 - Catch the Mole(Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 E2 - Catch the Mole(Hard Version) 二、解题报告 1、思路分析 考虑每次误判都会让鼹鼠上升一层,相应的,最外层的一层结点都没用了 由于数据范围为5000,我们随便找个叶子…

Electron案例解析-编写一个简单的electron程序

index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8" /><!-- 内容安全策略--><metahttp-equiv"Content-Security-Policy"content"default-src self; script-src self"/><metahttp-equiv&quo…

C语言-栈和队列

文章目录 &#x1f3af;引言&#x1f453;栈和队列1.栈1.1栈的概念与结构1.2栈的实现 2.队列2.1队列的概念与结构2.2队列的实现 &#x1f947;结语 &#x1f3af;引言 欢迎来到HanLop博客的C语言数据结构初阶系列。在之前的文章中&#xff0c;我们详细介绍了链表及其操作方法。…

8年前端总结和感想(转)~

我是牛奶&#xff0c;本文是我前端工作 8 年的一些总结和感想 主要记录下个人点滴、前端知识点、场景应用、未来的憧憬以及个人规划&#xff0c;供自己以后查漏补缺&#xff0c;也欢迎同道朋友交流学习。 自我介绍 我是一名工作在非知名公司的 8 年前端&#xff0c;双非普通本…

JMeter使用手册

安装 下载地址 https://jmeter.apache.org/download_jmeter.cgi 下载后解压到win的文件夹中 打开JMeter的bin文件夹&#xff0c;双击这个jar就启动了JMeter 启动 出现这样的界面 基本使用 添加变量 这个变量在使用的时候可以被引用 创建线程组 所有的请求都得基于…

Linux:Linux进程概念

目录 前言 1. 冯诺依曼体系结构 2. 操作系统 2.1 什么是操作系统 3. 进程 3.1 基本概念 3.2 描述进程——PCB 3.3 进程和程序的区别 3.4 task_struct-PCB的一种 3.5 task_struct的内容分类 4. 查看进程 4.1 通过系统文件查看进程 4.2 通过ps指令查看进程 4.3 …

lse:一款专为渗透测试和CTF设计的Linux枚举工具

关于linux-smart-enumeration linux-smart-enumeration是一款专为渗透测试和CTF设计的Linux枚举工具&#xff0c;该工具可以帮助广大研究人员收集与本地Linux系统安全相关的信息。 工具特性 该工具从2.0版本开始符合POSIX标准&#xff0c;并且经过了shellcheck和posh测试。它…

前端三大主流框架Vue React Angular有何不同?

前端主流框架&#xff0c;Vue React Angular&#xff0c;大家可能都经常在使用&#xff0c;Vue React&#xff0c;国内用的较多&#xff0c;Angualr相对用的少一点。但是大家有思考过这三大框架的不同吗&#xff1f; 一、项目的选型上 中小型项目&#xff1a;Vue2、React居多…

【数据结构-前缀和】力扣2550.统计范围内的元音字符串数

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内&#xff08;包含 这两个值&#xff09;并且以元音开头和结尾的字符串的数目。 返回一个整数数组&#xff0c;其中…

中文诗歌生成

用transformer在诗歌集上训练出的模型 import os os.environ["KERAS_BACKEND"] "tensorflow" # param ["tensorflow", "jax", "torch"] os.environ[TF_CPP_MIN_LOG_LEVEL] 2 os.environ[HF_ENDPOINT] https://hf-mirro…

IT程序员的黄金机遇

在这个数字化时代&#xff0c;IT程序员不仅是技术革新的推动者&#xff0c;更是全球经济的重要支柱。而对于拥有一技之长的IT人才来说&#xff0c;加拿大正敞开大门&#xff0c;提供一片充满机遇的热土。本文将为你揭示为何加拿大是IT程序员移民的不二之选&#xff0c;并提供实…

SecureCRT (mac or windows)解决中文显示乱码

中文乱码问题的方法主要包括设置SecureCRT的编码为UTF-8以及设置LANG环境变量为zh_CN.UTF-8。‌ 1.设置SecureCRT的编码为UTF-8&#xff1a;‌ 打开SecureCRT&#xff0c;‌进入Options -> Global Options -> Default Session -> Edit Default Settings-> Appear…

深入理解设计模式:六大经典模式解析

深入理解设计模式&#xff1a;六大经典模式解析 1. 单例模式&#xff08;Singleton Pattern&#xff09;1.1 概述1.2 示例场景1.3 实现要点 2. 工厂模式&#xff08;Factory Pattern&#xff09;2.1 简单工厂2.2 抽象工厂2.3 示例场景2.4 实现要点 3. 观察者模式&#xff08;Ob…

Idea配置远程开发

Idea配置远程开发 本篇博客介绍使用idea通过ssh连接ubuntu服务器进行开发 目录 Idea配置远程开发1.idae上点击file->Remote Development2.点击New Connection3.填写相关信息4.输入密码5.选择IDE版本和项目路径5.1 点击open an SSH terminal打开控制台5.2 依次执行命令 6.成…

竖版html网页简易抽奖系统

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <script src"htt…

初阶数据结构的实现1 顺序表和链表

顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表&#xff08;不去实现&#xff09;1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.…

人工智能算法工程师(高级)课程4-图像生成项目之自编码生成模型与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(高级)课程4-图像生成项目之自编码生成模型与代码详解。自编码生成模型&#xff08;Autoencoder&#xff09;是一种无监督学习算法&#xff0c;旨在通过编码器和解码器学习数据的有效表示。本文将…

聊聊Hugging Face

概述 HuggingFace是一个开源社区&#xff0c;提供了开源的AI研发框架、工具集、可在线加载的数据集仓库和预训练模型仓库。HuggingFace提出了一套可以依照的标准研发流程&#xff0c;按照该框架实施工程&#xff0c;能够在一定程度上规避开发混乱、开发人员水平不一致的问题&a…

spring 5.3.x 、6.1.x、6.0.x 源码本地编译运行

参考大佬文章&#xff0c;完美完成本地idea spring源码编译和demo测试 参考链接&#xff08;spring5.3.x&#xff09; spring5.3.x源码阅读环境搭建 下面是spring6.0.x参考 spring6.0.x jdk调成17 idea 2022.2.4版本本地编译spring源码项目 spring6.0.x 分支 gradle-8…

ubuntu22.04 配置grpc(优化官方教程)

优化了官方教程&#xff0c;2024.7.17顺利打通。 一&#xff1a;添加环境变量 打开root文件夹下的 .bashrc 文件 编辑文件&#xff1a;滚动到文件的底部&#xff0c;然后添加以下行&#xff1a; export MY_INSTALL_DIR$HOME/.local mkdir -p "$MY_INSTALL_DIR" exp…