自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java 协程

协程是啥? 我们都知道,线程是CPU调度的基本单位,但是到底设置多少个线程是很难决定的,并且如果一个线程陷入了IO等待的话,会降低整个系统的吞吐量。在Java中,每个线程对应JVM以及操作系统的一个轻量级线程。因为stack的容量是有限的,所以不可能一直生成很多个线程。 协程的本质上其实还是和上面的方法一样,只不过他的核心点在于调度那块由他来负责解决,遇到阻塞操作,...

2019-04-29 17:15:33 1329

原创 求一个二进制串mod 3的余数

求一个二进制串mod 3的余数 这是某BAT公司技术面三面的一道代码题目,没做出来,现在整理一波 首先,第一个思路是将这个二进制串转换为十进制,然后再进行计算,但是这个肯定不是面试官想要的答案,对于很长的二进制串不能转换为十进制数字。 下面讲第二个思路,状态机(其实可用于求mod任何数的情况) 整个状态机分为三个状态,0,1,2,分别代...

2019-04-22 13:23:52 1880

原创 Redis 的设计与实现——(七)Redis持久化机制

RDB持久化 由于Redis是内存数据库,所以当数据库down的时候,所有数据都会丢失,为了防止数据的丢失,我们采用RDB将数据库状态保存为文件。首先生成RDB文件的命令有两个:SAVE 和 BGSAVE SAVE命令会阻塞Redis服务器,直到RDB文件创建完成 BGSAVE则不阻塞服务器,创建一个子进程进行保存 RDB文件生成后,...

2019-04-16 17:34:14 118

原创 Redis 的设计与实现——之(六)Redis数据库的实现与过期机制

Redis服务器的数据库实现~redisServer 在启动的时候默认启动16个数据库,每个redisClient有自己连接的db,记录在redisClient的db属性里,客户端可以切换自己链接的db.不难理解,其实每个db都有一个dic字典,保存key与value,我们的set也是将key与value设置到里面,删除、更新同理。在对键进行访问时,会维护lru、更新dirty值等信息如下...

2019-04-16 17:32:14 328

原创 原 Redis 的设计与实现——数据结构实现之(五)Redis对象

对象 Redis并没有直接用上面的几种数据结构实现kv数据库,而是将他们组合成为不同对象。Key对象与value对象。对象的数据结构定义如下:(zset为有序集合)下面是对象类型与实现的关系:字符串对象——String当为小于32位的整数时(因为ptr*是四个字节)存储为int 当为小于32字节的字符串时:embstr(浮点数也是保存为字符串) 当大于3...

2019-04-15 21:25:04 115

原创 Redis 的设计与实现——数据结构实现之(四)压缩列表

Ziplist 是Redis中对于少量列表项的实现用于hash和list的实现,是由连续的内存块组成的数据结构,主要是为了节约内存,没有一个struct:其中每个节点的entry的值为:其中previous_entry_length用于保存前一个节点的长度,当前一个结点长度在254之内,则该属性只有一个字节,否则该属性由5个字节组成,其中第一个字节为0XFE。这个属性当然是为了从后...

2019-04-15 21:21:35 128

原创 Redis 的设计与实现——数据结构实现之(三)跳跃表与整数集合

跳跃表首先,跳跃表是一种有序的数据结构,其查找的平均复杂度为O(logN),最坏的时间复杂度为O(N),大部分情况下可以与平衡树媲美。Redis使用它作为有序集合的实现,和集群节点中作为数据结构。跳跃表的数据结构定义如下,左边为node,右边为表:其中左图的后退指针是用来进行反向遍历链表,而成员对性robj必须为唯一的,每个节点的层高是1-32中的随机数。整...

2019-04-15 17:27:03 104

原创 Redis 的设计与实现——数据结构实现之(二)链表与字典

链表首先Redis中存在的抽象结构为List,而链表是其一种实现方式,当list元素较多或者元素都为比较长的字符串时,采用链表作为底层实现。此外,链表还用在Redis服务器保存客户端状态、发布与订阅功能等等。 在Redis中,链表是双向链表,其Node结构定义如左图,List的定义如右图:观察得知,Redis中链表的特点如下无环(头节点的pre指向nul...

2019-04-15 16:30:06 120

原创 Redis的设计与实现——数据结构实现之(一)字符串

Redis 数据结构实现(一)字符串 Redis采用SDS(simple dynamic string)来表示字符串,表示一个可以修改的字符串值。用在Redis的key和value中。注意:Redis所有的key都是这个类型,value有不同的其他类型,SDS还可以用在缓冲区中。其具体的定义如下:为什么不用C原生字符串?是因为Redis中有STRLEN命令,该命...

2019-04-15 15:17:29 141

8puzzle-testing.zip

8-puzzle,测试代码,用于学习Coursera,进行相关的测试与验证。Coursera是免费大型公开在线课程项目,由美国斯坦福大学两名计算机科学教授创办。旨在同世界顶尖大学合作,在线提供免费的网络公开课程。Coursera的首批合作院校包括斯坦福大学等

2020-05-13

空空如也

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

TA关注的人

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