5 allenxguo

尚未进行身份认证

我要认证

C++

等级
TA的排名 2w+

Redis数据结构原理解析:字符串篇

Redis对象通用对象由于所有的redis对象都包含此结构以便redis管理对象的内存、创建、销毁等等,所以这里需要先介绍此对象结构。// 所有redis结构都有这个头:server.h#define LRU_BITS 24typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_cl

2020-06-27 21:00:30

Redis原理扫盲(长篇)

文章目录简介数据结构Redis对象通用对象字符串string常用操作数据结构存储方式为什么是44字节扩容列表list常用操作快速列表quicklist数据结构存储方式特点整数集合intset字典常用操作使用场景数据结构扩容关于扩容的问题高位进位法扩容字典遍历hash攻击集合set常用操作跳表skiplist常用操作使用场景数据结构跳表的构建特点压缩列表ziplist数据结构级联更新问题紧凑列表listpack数据结构解决级联更新问题为什么listpack比ziplist更好取代ziplist基数树压缩存储应

2020-06-21 18:44:20

【Go系列】

Go1、GoGC整理

2020-02-24 20:27:36

GoGC整理

引用自《Go GC 20 问》https://mp.weixin.qq.com/s/o2oMMh0PF5ZSoYD0XOBY2Q含义GarbageCollection 垃圾回收,一种自动内存管理机制根集合,在GC时最先检查,包括:全局变量执行栈寄存器常见的GC方式追踪式标记清理:从根对象触发,标记清扫可回收的对象标记整理:为了解决内存碎片,将对象尽可能整理到一块连续内存增...

2020-02-24 20:26:10

Go实现滑动窗口限频

文章目录@[toc]各类限频原理实现方法实现代码压测试压测试输出压测试客户端输出各类限频原理网上有很多讲解限频原理以及限频原因的,限频常用在接口、服务的流量、并发上,主要是为了合理使用后端资源,防止后端被压垮,雪崩等等。实现方法这里使用使用go的ring(环形队列)实现滑动窗口实现代码package mainimport ( "fmt" "net" "os"...

2019-10-06 10:12:45

LeetCode刷题记录4-寻找两个有序数组的中位数

题目给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2...

2019-04-26 15:39:29

LeetCode刷题记录3-无重复字符的最长子串

题目给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wk...

2019-04-26 15:15:16

LeetCode刷题记录2-两数相加

题目给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原...

2019-04-26 14:14:47

【深入理解C++11】第八章 融入实际应用

深入理C++118.1 对齐支持8.1 对齐支持 对齐的数据在读写上有性能优势,比如频繁使用的数据如果与处理器的高速缓存大小对齐,有可能提高缓存性能。数据不对齐,可能会导致一些应用的崩溃,例如某些平台,硬件无法读取不按字节对齐的的数据,可能会抛出异常。 C++11标准为了支持对齐,主要引入了:操作符alignof、对齐描述符alignas。...

2019-04-24 22:16:20

【深入理解C++11】第七章 为改变思考方式而改变

深入理C++117.1 指针空值 nullptr7.1 指针空值 nullptr 在C++中一般一个指针声明都是char* p = NULL;表示一个指针处于初始化状态,NULL一般是一个宏定义,定义如下:#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((vo...

2019-04-22 22:31:08

【深入理解C++11】第六章 提高性能及操作硬件能力

现在各类语言百花齐放,大多都有很高的开发效率、或者专用场合使用,但是性能方面C++程序通常会有不可比拟的优势。C++11中我们可以进一步发掘程序运行性能。深入理C++116.1 常量表达式6.1.1 常量表达式函数6.1.2 常量表达式值6.1.3 常量自定义类型6.1.4 常量表达式其他应用6.2 变长模板6.2.1 变长函数和变长模板参数6.2.2 变长模板:模板参数包和函数参数包6.2....

2019-02-02 17:52:40

【深入理解C++11】第五章 提高类型安全

深入理C++115.1强类型枚举5.1强类型枚举普通枚举在全局区域存在相同的名字则会编译异常例如:enum Type{General, Light, Medium};enum Category{General, Light, Medium};C++11引入强类型枚举,即“枚举类”。enum class Type{General, Light, Medium};他有以下几点优势:...

2018-12-24 22:27:36

【深入理解C++11】第四章 新手易学,老兵易用

深入理C++114.2 auto类型推导4.3 decltype4.3.1 typeid与decltype4.3.2 decltype的应用4.3.3 decltype推导四规则4.3.4 cv限制符的继承与冗余的符号4.4 追踪返回类型4.4.1 追踪返回类型的引入4.4.2 使用追踪返回类型的函数4.5 基于范围的for循环4.2 auto类型推导auto在C++11中有了新的定义,例如a...

2018-12-24 22:26:48

【深入理解C++11】第三章 通用为本,专用为末

通用为本,专用为末3.1 继承构造函数3.1.1 使用using声明3.1.2注意继承构造函数使用过多造成的冲突问题3.2 委派构造函数3.3 右值引用:移动语义和完美转发3.3.1 指针成员与拷贝构造3.3.2 移动语义3.3.3 左值、右值与右值引用3.3.4 强制转化为右值3.3.5 移动语义的一些其他问题3.3.6 完美转发3.5 列表初始化3.5.1 初始化列表3.5.2 防止类型收窄3...

2018-12-24 22:25:12

【深入理解C++11】

深入理C++11第一章第二章第三章继承构造函数使用using声明注意继承构造函数使用过多造成的冲突问题第一章第二章第三章继承构造函数派生类可以自动获得从基类的成员变量和接口,如果派生类需要使用基类的构造函数,通常需要在构造函数显示声明:struct A { A(int) {} };struct B { B(int i) : A(i) {} };如果构造函数非常多,我们就需要把每个...

2018-10-24 22:53:32

【算法】选择排序

选择排序概述从1-N,循环遍历,每次从剩下的序列中选择最大或者最小的元素放到剩下序列的前一个。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:初始状态:无序区为R[1…n],有序区为空。第1趟排序在无序区R[1…n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1…1]和R[2…n]分别变为记录个数增加1个的新有序区和记录个数减少1个的...

2018-10-06 12:31:26

【算法】反转队列前K个元素

反转队列前K个元素想到队列的反转那肯定首先想到的就是堆栈(同理堆栈反转也可以利用队列)有一个办法我们可以将K个元素入栈,然后可以另一个队列将剩下的元素放入,随后我们首先将栈元素回归原来的队列,最后将临时队列也入队。//使用一个辅助的队列和堆栈实现//前k个放入堆栈,后面的放入队列//取出时堆栈先入后出,达到反转目的void reversalQueue(queue<int>&...

2018-09-28 21:49:02

【算法】使用队列实现栈

使用队列实现栈前一篇使用栈实现队列文章用2个栈实现了一个队列,其实实现栈也是同理(修改一点点代码即可实现)。struct Stack{ Stack() {} Stack(std::initializer_list<int> list) : first(list) {}; void push(int value) { first.p...

2018-09-27 16:35:06

【算法】使用栈实现队列

使用栈实现队列栈中的元素采用LIFO (Last In First Out),即后进先出。队列(Queue)与栈类似,都是采用线性结构存储数据。它们的区别在于,栈采用LIFO方式,而队列采用先进先出,即FIFO(First in First Out)。所以2个栈交换数据可以达到队列的效果。具体实现如下:struct Queue{ Queue() {} Queue(std...

2018-09-27 16:26:46

【算法】使用栈检查表达式的括号匹配

使用栈检查表达式的括号匹配给定一个表达式字符串exp,编写一个程序来检查对和“{”,“}”,“(”,“)”,“[”,“]”的顺序是否在exp中是正确的。 例如,程序应该为exp =“[()] {} {[()()]()}”打印为true,对于exp =“[(])”则为false。算法步骤其实这种字符串有一个特点,就是如果当前字符串是“右边”的括号类型,那么它的前一个必定是与之匹配的括号。声...

2018-09-27 15:14:54

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。