00:00
各位同学大家好,接下来我们给大家介绍write string数据结构和对应的C语言底层源码,分析我们长期使用的set k1V1底子到底触发了些什么东东?第二个死旧类型,它底层为什么会有不同的编码结构和类型相关的转换?好,下面我们先看问题,再说大纲。同学们请看set k1V1,我相信这个没有任何问题吧,Set age17没有任何问题。type k什么类型?String type age什么类型?String好说明什么?K2个不同的key值也不一样,都是同一个类型。red字符串类型好说,但是类型完了以后,接下来我们就要聊一聊它的对象的物理编码方式。
01:00
分别是什么?以及有哪几种?那这是什么意思呢?来自于哪呢?那么同学们请看啊,Object including。这个时候K1,大家请看in b string in b是in bed的英文缩写,俗称嵌入式的字符串。二好,第二个edge,由于这个edge是十七一回车,弟兄们什么东东,Int,哎,虽然说都叫string字符串,但是它却根据不同的value的值。获得了不同的物理编码类型,那么请问这两个有什么区别,怎么转换的当?以屏幕前的各位同学,大家都清楚,那就好说,K的话就是嵌入式的字符串,那么为什么叫嵌入式?不就叫字符串就行了吗?明白A嘛,是数字,数字都叫int对不对?那假设我现在写个派3.1412926。那么这个时候3.14它又会变成什么呢?好,带着这些问题,那么同学们请回到我们的脑图,请看首先对于我们的string类型以及这五大类型,大家都一定要有个概念啊,底子都叫object,都叫对象,对吧?那么针对于我们的string类型的话,它有三大物理编码方式,现在我们只见了两种,那么下面慢慢展开。首先object内部对应三大物理编码分别是整数嵌入式和RA raw,俗称纯净的未加工的原生的。好,我们先记住第一个问题,Register string类型它的对应的物理编码方式有三种,分别是整数嵌入式的字符串和RA,未经加工的原生的。好,那么这个是来自于哪呢?这两个KT告诉我是不是死蚯类型,OK了,好,那么请问这个type都叫死。
02:59
类型,但是下面including这块。
03:02
当前值对象底层存储的什么通道编码类型?所以带着我们的问题,我们开始来学习这三种编码类型有什么区别不同,以及底层是如何相互转换的。来,同学们请看in它。人如其名,字如其名,万文生义也就会清楚,完全是存储。T不是死中类型的K,但是跟整数相关的,那么来它能保存多大呢?保存long形长整形64位,也即八个字节的有符号的整数,那么二的六十三次方减一,那么个十百千万,10万,百万千万一啊,我就不读了,反正嘟嘟嘟嘟嘟这么多多少位啊,上面数字最多多少位,19位那么够大了。所以说兄弟们对于RA它要存储一个子ju类型的key,这个value所能表达的最大的数字分别是这么多,这种类型主要是是需要比较大整数的系统上相当于我们Java里的big in加了。
04:03
老大老大了啊,那么默认值是零,注意什么类型long型好,我们补充一下啊,只有整数才会使用in,如果是浮点数right内部其实是先将浮点数转换成什么字符串的值啊,然后再保存,那么不妨我们来简单的看一下啊,SK23.14159好,那么现在弟兄们。我们直接这看二啥类型啊,根本就不是印它,对于这样的小数,人家也是先保存成什么嵌入式的string类型这么一个编码,所以符合我们这儿所说的,如果是浮点数red,其实是先将浮点数转化成什么字符串的时候,然后再保存好,那么这是我们的int,那么这个embstr又是什么意思呢?同学们请看代表emb格式的sts啊,哎。来了,简单动态字符串保存的长度是小于多少?44字节的字符串也记,如果是整数字符串的编码就是in,它如果长度是小于44G字节的,那么这个就是嵌入式,那么顾名思义,这个就是什么代表ended string表示嵌入式的string类型。那么来,如果这两个。
05:25
都不包含,都跳过呢,那么自然而然就是raw若保存长度多少大于44自己的字符串,那么所以说弟兄们先明白,这个就是我们使卷类型对应的三大物理编码方式,杨哥求证明。通过上一讲,我们了解了此string类型有三大物理编码方式,Int、嵌入式和raw,杨哥求证明,这是第一个问题,第二个问题终于明白了啊,原来red常用的string类型叫嵌入式的string,它底层封装了一个格式red版的string,俗称SDS简单动态字符串。那么来。
06:11
回顾面试题,请听好,面试的过程当中,如果人家问你第一个right的strong类型底层是个什么?请迅速回答,简单动态字符串,俗称动态字符串SDS,至于这个是什么,我们慢慢展开。第二个string类型,它有几大编码方式,三个int,嵌入式的string和raw。好,那么杨哥,我们现在只见过这个,这个raw还没见过,求证明,求演示。下面按例说话,来,兄弟们第一个。我们先玩理论再说,再做实操,大家请看啊SK1123普通数字我们这一弄多少是不是就是硬它编码,那么再的K1123456789 123456789。
07:07
这个时候是不是二九一十八,长度是不是小于20的一个数字呢,对不对,因为啊大家请看啊,我们前面说过这个东东int是多少。是不是浪这么一个长度啊多少?最多是不是19位,如果超过了呢?那么同学们我们简单的来看一下,如果长度现在是,你看这到九,这到九是不是二九一十八,那么这个K1还是硬它也即我超过了那个整数long形的长整数的最大值,那么这个时候大于等于20,对不起,从特弦会变成什么弦?字符串二,因为纯数字的保存不了了,你即便这样写的是数字,我也超出了我的最高的long型的容量,我只好把你转换成字符串。
08:01
再来看K1ABC什么东东,普通字符串,那么默认就是N长度小于44。NB如果长度大于44呢?对不起,Raw这么说能跟上好了,我们同学们,我们简单的呢,来给弟兄们呢演示一下啊,那么sat k ABC或者是什么,就是我们的123,那么来吧。Object k1类型有了吧,好,那么现在set k1弟兄们请看啊,它最大我们大家都清楚啊,最小值是负数的,这个最大值是不是?正正整整数的这个对吧,正数的这个,那么来弟兄们请看啊,干脆我就这样在K1就这么大,然后K1怎么着,是不是还是在它范围以内是in,突然兄弟们这个时候我把它。
09:04
变成十七五八零七五八幺七是不是大过这个了?好,这个时候同学们请看变成什么?最大的数字超过5807了,扛不住了,从数字型转换成字串型,好,那么再来SK1,现在我们第二种啊,是嵌入式的。长度小于多少44字节,而这个呢,高过44字节的对吧?那么这儿不废话了,一大串哎哎哎哎哎哎哎。OK,那么来,兄弟们,Raw。案例验证完成说明write string类型某个T,它的物理编码方式确确实实是有inb和RW3种。好,那么接下来这个验证了以后,那么案例测试通过,我们就要唠一唠我们的SDS简单动态字符串。第二个面试中经常会问到这个面试题,Write为什么重新要设计一个SDS数据结构?
我来说两句