- 博客(4)
- 收藏
- 关注
原创 面试常问的LRU缓存模式,即LRUCache
定义就不复制粘贴了。这道题目之所以有区分度,是因为考察了面试者对数据结构的应用,而不是什么计算机底层的“缓存”知识。我们的任务,就是在有限的空间中存储数据,如果“进来”的数据太多以至于存不下,那么就删掉最不常被访问的数据。所以,需要记录数据本身,以及被访问的顺序。如果这么简单的话,实现的方法很多。但问题的关键在于:高速缓存,需要在固定的空间内,满足增删改查O(1)。熟悉数据结构的小伙伴都知道...
2020-04-30 23:54:47 277
原创 Double-Checked Locking(DCL) 单例模式(双重校验锁)
package xiaomi;public class DoubleCheckedLocking { /* DCL单例模式,在懒汉式的套路上加入并发控制,保证在多线程环境下,对外仅存在一个对象。 不加并发控制,在多线程环境下可能出现冲突。例如,B线程从内存中读取的时候,A线程还没有完成写入 单例模式的套路: 1. 构造器私有化 2. 提供私有的...
2020-04-09 17:44:58 279
原创 计算机中的减法——原码,反码和补码
计算机中的减法首先,介绍根据位运算衍生出的三个概念:原码:带符号位的,二进制表示的数值反码:正数的反码是原码,负数的反码是除了符号位之外其余位取反补码:正数的补码是原码,负数的补码是反码+1(补码+1是为了在二进制计算中消除-0,因此负数的表示要加1。具体参见相关书籍)不严谨的说,计算机处理器没有加法引擎,减法是通过加法实现的。在计算机中,两个数的减法是:第一个数和第二个数的...
2020-03-11 22:28:31 3556 7
原创 关于堆(Stack)和栈(Heap)
堆和栈的概念,在数据结构、C/C++、Java中,是完全不同的。必须明确讨论的范围,才能给出具体的答案。数据结构中的堆和栈——以下内容整理自《大话数据结构》堆堆的来源简单选择排序中,并没有做到把每次比较的结果保存下来,因此存在一定的浪费。1964年,Floyd和Williams共同发明了堆排序(Heap Sort)算法。该算法是对简单选择排序的一种改进。通过堆排序,可以避免浪费每次比...
2020-03-10 18:50:38 223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人