CHuiL

redis中的数据结构—SDS简单动态字符串

SDS底层实现 struct __attribute__ ((__packed__)) sdshdr5 { //从未使用过 unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ /* 第三位表示类型,高5位表示长度*/ char buf[]; }; struct __attribu...

redis中的数据类型

字符串 值最大不能超过512MB。 使用场景 1.缓存功能 通过设置合理的键值,如 业务名:对象名:id:[属性]”作为键名(也可以不是分号)。 2.计数 incr命令用于对值做自增操作,返回结果分为三种情况 值不是整数,返回错误。 值是整数,返回自增后的结果。 键不存在,按照值为0自增,返回结果 除了decr(自减)、incrby(自增指定数字)、decrby...

redis中的内存回收

引用计数 refcount 每个redisObject对象都会带有一个引用计数 refcount,在创建一个新对象时该数值会被赋值为1,如果对象被引用时引用数会+1,不再被引用时-1,当该值为0时会被释放; 删除到期的对象 惰性删除 当使用到的时候才检查是否已过期;可能造成不在使用的键值一直停留在内存中 定时任务删除 默认10s,分为慢模式和快模式,两者的逻辑是一样的,只是超时时间不同...

redis中的数据结构—字典

redis中字典结构的源码 哈希节点 typedef struct dictEntry { void *key; union {//v可以是不同类型的, void *val; uint64_t u64; int64_t s64; double d; } v; struct dictEntry...

字符串的排列

剑指offer

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 解法 按照该图的思路,排列可以将字符串分成两部分,第一部分为第一个字符,第二部分为除第一个字符之后的所有字符;固定第一位字符,然后求出后面字符可能出现的所有排列情况;求出后将第一位字符与后面的字符交换(更换...

和为s的连续正数序列

剑指offer

题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出所有和为S的连续正数序列。序列内按...

和为s的两个数字

剑指offer

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 解法 由于是递增的,所以可以设立两个字指针,分别从头和尾部开始,依次相加比较是否等于S,若结果大于S,则high–,反之则low++; 代码 vector<int> FindNumbersWithSum(vector<int...

删除链表中重复的节点

剑指offer

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 分析:检测当前节点和后续的几点是否相同(排好序的),相同则删除后面的节点和当前的节点; 可以利用前驱节点或者不用前驱节点,区别是删除节点的时候会方便一些; /*...

丑数

剑指offer

题目 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 解法 判断一个数是否是丑数,只需依次判断该数连续被2除,被3除,被5除是否满足最后等于1; 本题的最直接的方式就是 写一个上述判断方法,然后从不断判断每一个数字是不是丑数,然后达到指定数目后返回;但是这样...

圆圈中最后剩下的数字

剑指offer

题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。 HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的: 首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。 每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始, 继续0…m-1报数….这样下去...