Redis 学习 RDB篇
基于 Redis 6.2.1
LeetCode 第244场周赛
再再再再再再再再次翻车了 第三个没仔细想+超时挂了3次 第四个最大值没搞好+瞎提交WA了3次。。。 思维又慢,码得又慢,没救了。 5776. 判断矩阵经轮转后是否一致 模拟一下, 旋转可以多次,但状态最多就4种: 不旋转,旋转90度,旋转180度,旋转270度。 这里循环一下, 每次旋转90度,在比较是否相等就好了。 123456789101112131415161718192021222324252627282930class Solution {public: bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) { int n = mat.size(); vector<vector<int>> temp(n, vector<int>(n)); // puts("+++++++++++++ ...
LeetCode 第243场周赛
再次翻车了 第四个卡精度搞了好久好久,,还是看了讨论区才处理精度问题的。。 第三个纯属自己代码写的太丑了,脑子不够清晰吧。赛后1分钟ac。。。 5772. 检查某单词是否等于两单词之和 简单模拟, 不过我这里写的太麻烦了。 12345678910111213141516class Solution {public: bool isSumEqual(string firstWord, string secondWord, string targetWord) { int a = 0, b = 0, t = 0; for(auto c: firstWord) { a = a*10 + (c-'a'); } for(auto c: secondWord) { b = b*10 + (c-'a'); } for(auto c: targetWord) ...
LeetCode 第53场双周赛
GG 5754. 长度为三且各字符不同的子字符串 简单模拟。 123456789101112class Solution {public: int countGoodSubstrings(string s) { int ans =0 ; for(int i=2;i<s.size(); i++) { if(s[i] != s[i-1] && s[i] != s[i-2] && s[i-1] != s[i-2]){ ans ++; } } return ans; }}; 5755. 数组中最大数对和的最小值 排序之后最大的和最小的配对,次大的和次小的配对,以此类推。 123456789101112class Solution {public: int minPairSum(vector<int>& ...
Redis 学习 数据库篇
基于 Redis 6.2.1 服务器中的数据库 Redis 服务器将所有数据库保存到server.h/redisServer结构的db数组中,db数组的每一项都是server.h/redisDb结构,每个redisDb代表一个数据库: 12345struct redisServer { // ... redisDb *db; // 数组,保存服务器的所有数据库 // ...} 说起来,四五百行的结构体,真是活久见啊。。。。 在初始化服务器时,程序会根据服务器状态的dbnum属性来决定创建多少个数据库: 12345struct redisServer { // ... int dbnum; // 服务器的数据库数量 // ...} dbnum的属性值由服务器配置的database选项决定,缺省为16,所以Redis服务器默认会创建16个数据库。 1234567891011121314// redisServer ┌───────────┐ │redisServer│ ├───────────┤ │ ...
Redis 学习 对象篇
基于 Redis 6.2.1 Redis 对象 前文也有提到,Redis 中并没有直接使用底层的基本数据结构,比如简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等。Redis 是基于这些基本的数据结构创建了一个对象系统,这个系统包含字符串对象(string)、列表对象(list)、哈希对象(hash)、集合对象(set)和有序集合对象(sorted sort)等。每种对象都用到了至少一种前面所介绍的数据结构。 通过这五种不同类型的对象,Redis 可以在执行命令前,根据对象的类型判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,可以针对不同的使用场景,采用不同的底层基本数据结构实现对象,从而优化性能。 另外,Redis 的对象系统还实现了基于引用计数的内存回收机制,当程序不再使用某个对象的时候,会自动释放这个对象所占用的内存;Redis 还通过引用计数实现了对象共享机制,在适当的条件下,多个数据库键可以共享同一个对象类节约内存。 最后,Redis 的对象记录了访问时间信息,可以用来计算数据库键的空转时长,在服务器开启了 maxmemory 功能时,空转较大的 ...
LeetCode 第242场周赛
彻底翻车了 最后一个都没写出来。。 找个理由强行解释下,可能是没睡好hhh。 5763 哪种连续子字符串更长 简单模拟, 不过我这里写的太麻烦了。 1234567891011121314151617181920212223242526272829303132class Solution {public: bool checkZeroOnes(string s) { char p = '2'; int mx1 = 0, mx0 = 0; int sum1 = 0, sum0 = 0; for(auto c: s) { if(c == p){ if(c == '0'){ sum0++; mx0 = max(mx0, sum0); } else if(c == ' ...
Redis 学习 基础数据结构篇 之 压缩列表(ziplist)
[TOC] 基于 Redis 6.2.1 图片截取自《Redis设计与实现》 压缩列表(ziplist) 压缩列表(ziplist)是列表键和哈希键的底层实现之一。 当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis 就会使用压缩列表来做列表键的底层实现 当一个哈希键只包含少量键值对,并且每个键值对的键和值要么就是小整数值,要么就是长度比较短的字符串,那么Redis 就会使用压缩列表来做哈希键的底层实现 压缩列表是 Redis 为了节约内存而开发的,是由一系列特殊编码的连续内存快组成的顺序行(sequential)数据结构,是一个特殊编码的双向链表。一个压缩列表可以包含任意过个节点(entry),每个节点可以保存一个字节数组或者一个整数值。 压缩列表结构 ziplist.c 文件顶部的注释内容,解释了ziplist的结构。 ziplist本身声明为一个unsigned char *类型的字符串,总体布局如下: <zlbytes> <zltail> <zllen> <entry> ...
Redis 学习 基础数据结构篇 之 整数集合(intset)
[TOC] 基于 [Redis 6.2.1](redis/redis at 6.2.1 (github.com)) 图片截取自《Redis设计与实现》 整数集合(intset) 整数集合(intset)是Set底层实现之一,当集合只包含整数值元素,且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。 整数集合的实现 整数集合比较简单,简单来说就是用整数数存储整数是在来维护集合。十几年了也没更新过。 整数集合的结构体定义在intset.h 12345typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset; encoding 编码方式:这里有三种INTSET_ENC_INT16、INTSET_ENC_INT32、INTSET_ENC_INT64,分表表示contents中存储的元素的实际类型,所以整数集合真正存储的只有int16_t、int32_t、int64_t这三种类型。 length 集合的元素数 ...
为什么总是爱瞎鼓捣呢?就是不能专注
作为一名不怎么样的C++后台开发工程师,还是应当学习专业技能。这样才好更好的干活,从而晋升加薪走向。混不下去了跳个槽也能用得上。 但是我这个人真的是很奇怪。就是不能专心的学习。。。 大学最开始学了几天C语言就开始搞上了ACM,开始了无尽的刷题生活。这一切都还不错,电脑也就普通用一用罢了。 不过慢慢的觉得Code::Blocks颜色太丑了,于是开始鼓捣了,开始搜Code::Blocks的代码高亮方法。找到了几个暗色的但又不好看,鼓捣鼓捣者用起了Sublime Text. 颜色啥的还都好看,但是编译代码不好用,又开始配置Sublime Text. 折腾了不少,同时发现他可以安装好多插件,于是开始研究插件。就这样浪费了很多时间。 回到正轨之后呢有开始搞ACM,正式比赛都是用的Ubuntu,于是安装上了Ubuntu,从此走上使用 Linux 桌面的不归路。Ubuntu里面的各种配置、软件安装都是命令行完成的。在鼓捣了Linux桌面美化之后开始TUI的折腾。最开始折腾VIM,主题折腾完折腾插件,各种琳琅满目的插件,用的不爽还想自己改,开始看vim script的写法,然后也没做出自己的一个插件 ...