布隆过滤器

简介布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 在讲述布隆过滤器的原理之前,我们先思考一个问题,如果想要判断一个元素是否存在,你通常会怎么做?一般的做法都是将其保存起来然后通过比较确...
NoSQL

红黑树相比于BST和AVL树有什么优点?

什么是红黑树?红黑树是一种自平衡的二叉查找树。 性质: 节点是红色或黑色。 根节点是黑色。 每个叶子节点都是黑色的空节点(NIL节点)。 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。 红黑树相比于BST和AVL树有什么优点? 红黑树是牺牲了严格的高度平衡的优越条件为代价,...

Java内存模型-JMM

介绍Java内存模型(Java Memery Model)用来屏蔽掉各种硬件和操作系统的内存访问差异。以至于让Java在各中平台下都能达到一致的内存访问效果。 简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障. 从硬件角度来看。因为处理器的运算速度很快,比如做一个递增操作,就需要从内存中拿值,操作后再放回内存。这样的I/...
Java

线程间通信问题

wait/notify/notifyAll wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。 wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。 由于 wait()、not...
并发

Redis跳跃表

Redis跳跃表相关问题…

NoSQL

假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

使用keys指令可以扫出指定模式的key列表。 对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题? 这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令, scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复...
NoSQL

Redis事务的CAS(check-and-set)

和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。

NoSQL

为什么redis需要把所有数据放到内存中?

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。 如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
NoSQL

Redis内存淘汰机制

Redis 提供 6 种数据淘汰策略 volatile-lru(least recently used): 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 volatile-ttl: 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 volatile-random: 从已设置过期时间的数据集(s...
NoSQL

Java反射相关知识点

什么是反射?反射是在运行状态中,对于任意一个类, 都能够知道这个类的所有属性和方法;对于任意一个对象, 都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 哪里用到反射机制? JDBC中,利用反射 (Class.forName(xxx)) 动态加载了数据库驱动程序。 Web服务器中利用反射调用了Sevlet的服务方法。 Ecl...
Java