自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Redis 跳跃表

跳跃表跳跃表基础知识跳跃表网易公开课->跳跃表总结效率堪比各种平衡树结构,如红黑树,B树,B+树实现起来简单,仅用到链表的知识。基于概率论,有个随机过程,但表现不错。

2017-06-03 23:07:50 284

原创 Redis 字典

Redis Dict字典,哈希表,HashMap仅仅是说法不同而已。本质上就是一种key,value存储,可以高效的存储和访问。定义typedef struct dictEntry { void *key; void *val; struct dictEntry *next;} dictEntry;typedef struct dictType { unsigned

2017-06-03 20:06:20 205

原创 Redis 链表

redis链表定义(双链表)typedef struct listNode { struct listNode *prev; struct listNode *next; void *value;} listNode;typedef struct list { listNode *head; listNode *tail; void *(*dup)(

2017-06-03 19:23:21 289

原创 Redis SDS简单动态字符串

结构体定义本质上说就是用C语言来实现基本的面向对象,来对底层的字符串进行表示,方便上层使用,为调用者减少负担。typedef char *sds;struct sdshdr { int len; int free; char buf[];};举例常用操作:static inline size_t sdslen(const sds s) { struct sdshdr

2017-06-03 19:15:33 336

原创 双队列=>栈

队列先进先出(FIFO)栈后进先出(LIFO)双队列实现栈如何用两个队列,仅使用队列的基本操作实现栈。 思路: 1. 进栈操作作使用queue2, 当push数据时,直接把数据enqueue到queue2. 2. 出栈操作时, 依次从queue2中取出一个元素,然后判断此时queue2是否为空,如果不为空则把当前元素enqueue进队列queue1,如果为空,则表示当前元素是最后一个进入队

2017-05-30 22:26:31 289

原创 双栈=>队列

队列先进先出(FIFO)栈后进先出(LIFO)双栈实现队列如何用两个栈,仅使用栈的基本操作实现队列。思路: 1. 进队列操作使用stack2, 当enqueue数据时,直接把数据push到stack2. 2. 出队列操作使用stack1, 当dequeue数据时, 首先判断stack1是否为空,如果不为空,则从stack1 pop数据返回。如果stack1为空,则依次把stack2的数据全部

2017-05-30 22:05:47 311

原创 队列

队列栈是一种基于先进先出(FIFO)策略的集合类型,队列是日常现象的排队模型,进入队列的元素维持它们的原有顺序,并按照此顺序移出队列。队列的基本操作由此可以定义队列的基本操作: void enqueue(Item item) Item dequeue() boolean isEmpty() int size() 以上就是队列支持的所有操作,这是一个严格的接口说明书,没有额

2017-05-30 21:42:03 207

原创

栈栈是一种基于后进先出(LIFO)策略的集合类型,当放入数据时,压入(push)最顶端,当取数据时,从顶端弹出(pop)。栈的基本操作由此可以定义栈的基本操作: void push(Item item) Item pop() boolean isEmpty() int size() 以上就是栈支持的所有操作,这是一个严格的接口说明书,没有额外的多余操作,这是一个良好的习惯

2017-05-30 19:39:50 185

原创 双循环链表

线性存储数组和链表都是一维结构,以线性结构存储数据。数组数组和计算机内存结构保持一致,现有的编程语言提供了语言层面对数组的支持,数组支持随机访问,可以按照索引高效读取和存储。一般来说,数组在初始化时,已固定大小。当数组存储已满,需要再存储额外的数据,则需要申请更大的一个数组,把原来的数据全部搬到新数组。 这在某些场景下是不合理的,从而引出另一种存储结构:链表单链表单链表是另一种基本的链式存储结构,很

2017-05-30 18:46:09 2454

原创 Go的类型与变量

变量变量是所有编程语言支持的基本要素,从计算机底层来说只有内存地址以及内部存储的二进制数据。计算机科学是分层结构,我们使用不同的语言站在不同的层次来思考问题,当使用类似C++,Java,Python,Go等语言时候的变量,相当于我们给某块存储空间起了一个名字,这个名字起着一个线索的作用,通过这个变量名称我们可以找到内存中存储的数据。变量类型把Go支持的类型简单分为基本类型和高级类型。基本类型bool

2017-05-15 21:20:24 327

原创 Go语言包管理(一)

Go语言中的包我们在使用其他语言,比如Java,Python,都有类似包的概念,Go也不例外,其核心思想即为分组和模块化。人的大脑对庞大和复杂的事情很难掌控,可以对其采用分而治之的策略,使其模块化,从而更容易管理。 如下是标准库中net包的树形结构图 net ├─http │ ├─cgi │ │ └─testdata │ ├─cookiejar │ ├─f

2017-05-15 20:24:39 2188

原创 密码学之二(自签名证书解析)

KeyTool生成keystore文件 keytool -genkey -alias A1.keystore -keyalg RSA -validity 40000 -keystore A1.keystorekeystore导出证书 keytool -exportcert -v -alias A1.keystore -keystore A1.keystore -file A1.cerWi

2016-12-28 15:24:11 1460

原创 密码学之一(Hash函数)

定义单向性数据完整性Hash冲突常用的Hash算法程序Hash环问题Hash应用场景定义Hash函数H将可变长度的数据M作为输入,产生固定长度的Hash值h。 Hash函数,哈希函数,散列函数,杂凑函数它们说的都是同一个含义,后续我们都称之为Hash函数。 h=H(M)h = H(M)单向性给定输入M,通过函数H可以很容易计算出输出h;但如果给定h,则找到M在计算上不可行。数据

2016-12-21 18:07:53 5204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除