哆啦A梦

用于汇总一些基础知识及平时踩过的坑

设计模式之状态模式

糖果机器:分为投入硬币-》转动手柄-》抛出糖果 代码: 状态上下文类:GumballMachine.java /** * 投币机 */ @Data @ToString public class GumballMachine { State soldOutState; ...

2019-05-08 19:17:18

阅读数 14

评论数 0

java自定义注解

自定义一个注解,用来检测某个值是否符合 1、注解接口:SensitiveWordCheck.java,SensitiveWordValidator.class为实现类 /** * @Description: */ @Target({ElementType.METHOD, ElementT...

2019-05-07 11:17:44

阅读数 43

评论数 0

java架构统一处理接口调用前后日志打印

利用切面技术,统一处理接口调用前后,接口信息的日志打印情况 /** * Controller控制层处理切面,负责处理服务层调用前后的操作。 * */ @Slf4j @Aspect @Component public class HandlerControllerLoggerAspect...

2019-05-07 10:24:23

阅读数 11

评论数 0

java架构统一处理异常

该统一异常处理基于springboot架构,利用切面技术,在service层或者controller层抛出异常后,被控制层切面捕获,转换后统一返回 1、切面:控制层异常类,HandlerExceptionAspect.java /** * 控制层异常切面 */ @Slf4j @Contr...

2019-05-07 10:17:08

阅读数 9

评论数 0

设计模式之组合模式

组合模式定义:允许将对象组合成树形结构来表现“整体部分”层次结构。组合能使客户以一致方式处理个别对象以及对象组合 1、例如通过将菜单和菜单项放到相同的结构中,我们创建一个“整体部分”层次结构,即3由菜单和菜单项组成的对象树 2、组合模式让我们能用树行方式创建对象的结构,树里面包含了组合以及个别...

2019-04-30 19:28:12

阅读数 14

评论数 0

Nginx完美解决跨域问题

1、跨域问题存在情况: 当我们当前的域名与请求接口的域名不在同一个域名下时,在浏览器Console下会看到,跨域的错误提示,下面举一个例子来说明: 1)前提条件: i、当前域名http://kuayu.com ii、请求接口域名:http://csdn.b.com/cat 当在前端页面通...

2019-01-23 10:47:45

阅读数 750

评论数 0

Redis-HyperLogLog内部实现原理源码解析

1、HyperLogLog算法时一种非常巧妙的近似统计大量去重元素数量的算法,它内部维护了16384个桶来记录各自桶的元素数量,当一个元素过来,它会散列到其中一个桶。当元素到来时,通过 hash 算法将这个元素分派到其中的一个小集合存储,同样的元素总是会散列到同样的小集合。这样总的计数就是所有小集...

2019-01-17 10:30:50

阅读数 279

评论数 0

Redis-字典遍历内部实现原理源码

1、遍历Redis 1)Redis对象树的主干是一个字典,如果对象很多,那么这个树会很大,当我们执行keys命令时,首先它会遍历整棵树,查找出满足条件的key,其次会判断遍历出的key对应的对象是否过期,如果过期则从主干中删除掉 void keysCommand(client *c...

2019-01-17 10:23:21

阅读数 62

评论数 0

Redis-懒惰删除内部实现

        异步线程在Redis内部有个特别的名称,叫作BIO(background IO),意思是后台运行的io线程,不过内存回收本身不是io操作,只是cpu计算消耗比较大。 1、Redis的内部对象共享机制会阻碍异步线程的改造,原因是懒惰删除是要测底删除某个对象,不能藕断丝连,如果底层数...

2019-01-17 10:15:42

阅读数 148

评论数 0

Redis-LFU与LRU内部实现原理源码分析

1、LRU模式有效控制内存的大小,将冷数据从内存中淘汰出去,在Redis里引入一个新的淘汰形式LFU                                     1)LFU全称是Least Frequently Used 表示按最近的访问频率进行淘汰,更加准确的判断一个key别访问的热...

2019-01-17 10:11:15

阅读数 163

评论数 0

Redis-基树数源码原理分析

 1、Rax是Redis内部比较特殊的一种数据结构,它是有序字典树,按照key进行排序,支持快速定位、插入、删除操作。它与zset排序不同,zset是按照score排序,而Rax是按照key进行排序。   集中数据结构的特点如下图所示                         咱们...

2019-01-17 10:05:48

阅读数 24

评论数 0

Redis-紧凑列表源码原理分析

1、Redis 5.0 增加了新的数据结构listpack,它是对ziplist结构的改进,优点是在存储空间上更加节省以及在结构上比ziplist更精简 1)结构体 struct listpack<T> {     int32 tot...

2019-01-17 10:03:50

阅读数 46

评论数 0

Redis-跳跃列表原理源码分析

1、Redis 的 zset 是一个复合结构,结构特点: 1)需要通过hash 结构来存储 value 和 score 的对应关系 2)要支持按照 score 来排序 3)还要按照指定 score 的范围来获取 value 列表的 4)要实现上诉的功能的结构,作者想到了跳跃列表 5)zs...

2019-01-17 10:02:39

阅读数 37

评论数 0

Redis-快速列表原理源码分析

1、早期版本存储list集合,采用ziplist和linkedlist,但由于链表的附加空间高,prev和next就要占去16个字节,而且每个节点的内存都要单独分配,会加剧内存的碎片化,所以后面的版本对结构进行了改造,使用快速列表(quicklist) 1)实例 &gt...

2019-01-17 10:01:18

阅读数 37

评论数 0

Redis-压缩列表源码原理解析

1、Redis为了节约内存空间,zset和hash在对象比较少的时候,采用压缩列表(ziplist)来存储,可以用过debug object key 来查看结构 1)ziplist的结构体 struct ziplist<T> {   ...

2019-01-17 10:00:03

阅读数 45

评论数 0

Redis-字典源码内部原理解析

 1、dict是Redis服务器中出现最为频繁的复合型数据结构,用到地方很多,例如hash结构,整个Redis所有key和value组成一个全局的字典、带过期时间的key集合、zset集合汇总存储value和score直接映射关系等等 1)结构体: struct RedisDb { ...

2019-01-17 09:58:17

阅读数 62

评论数 2

Redis-字符串源码原理

1、Redis的字符串结构被设计成一个[SDS]结构,字符串实际内容是被存放在一个数组中,如下表 struct SDS<T> {   T capacity; // 数组容量   T len; // 数组实际长度   by...

2019-01-15 09:19:36

阅读数 52

评论数 0

Redis-字段源码原理

1、dict是Redis服务器中出现最为频繁的复合型数据结构,用到地方很多,例如hash结构,整个Redis所有key和value组成一个全局的字典、带过期时间的key集合、zset集合汇总存储value和score直接映射关系等等 1)结构体: struct RedisDb { ...

2019-01-14 21:03:49

阅读数 127

评论数 0

JVM第二篇之字节码加载、组成部分

1、Class字节码的加载 1)ClassLoaderde的继承关系从BootStrapClassLoader开始,然后是ExtClassLoader,最后是AppClassLoader 2)BootStrapClassLoader用户加载java自带核心类(例如java.lang.*) 3...

2019-01-14 21:00:15

阅读数 29

评论数 0

Redis-压缩列表内部实现

1、Redis为了节约内存空间,zset和hash在对象比较少的时候,采用压缩列表(ziplist)来存储,可以用过debug object key 来查看结构 1)ziplist的结构体 struct ziplist<T> {   ...

2019-01-14 20:59:34

阅读数 303

评论数 0

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