前言 HashMap 是无论在工作还是面试中都非常常见常考的数据结构。 比如 Leetcode 第一题 Two Sum 的某种变种的最优解就是需要用到 HashMap 的,高频考题 LRU Cache 是需要用到 LinkedHashMap 的。 HashMap 用起来很简单,底层实现也不复杂,先来 ...
分类:
其他好文 时间:
2020-06-20 15:44:36
阅读次数:
37
前言 HashMap 是无论在工作还是面试中都非常常见常考的数据结构。 比如 Leetcode 第一题 Two Sum 的某种变种的最优解就是需要用到 HashMap 的,高频考题 LRU Cache 是需要用到 LinkedHashMap 的。 HashMap 用起来很简单,底层实现也不复杂,先来 ...
分类:
其他好文 时间:
2020-06-20 14:13:27
阅读次数:
68
Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。 相关知识:Redis 提供 6 种数据淘汰策略: volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最 少使用的数据淘汰 volatile-ttl:从已设置过期时间的数据集( ...
分类:
数据库 时间:
2020-06-18 10:35:25
阅读次数:
59
一、五种常见置换算法 二、最佳置换算法(OPT) *注意*:最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前知道页面访问序列。因此,最佳置置换算法是无法实现的。 三、先进先出置换算法(FIFO) 四、最近最久未使用置换算法(LRU ...
分类:
编程语言 时间:
2020-06-15 16:09:38
阅读次数:
82
常用的三种缓存淘汰(失效)算法:FIFO,LFU 和 LRU. 1 FIFO(First In First Out) 先进先出,也就是淘汰缓存中最老(最早添加)的记录。FIFO 认为,最早添加的记录,其不再被使用的可能性比刚添加的可能性大。这种算法的实现也非常简单,创建一个队列,新增记录添加到队尾, ...
分类:
其他好文 时间:
2020-06-06 00:34:53
阅读次数:
107
在一日一技:实现函数调用结果的 LRU 缓存一文中,我们提到Python自带的LRU缓存lru_cache。通过这个装饰器可以非常轻松地实现缓存。 现在我们考虑下面这个应用场景:MongoDB中有100对id-用户名的对应关系,我从Redis中持续不断读取id,如果id能在MongoDB中找到对应关 ...
分类:
其他好文 时间:
2020-06-05 01:04:48
阅读次数:
93
在工程项目中,可能有一些函数调用耗时很长,但是又需要反复多次调用,并且每次调用时,相同的参数得到的结果都是相同的。在这种情况下,我们可能会使用变量或者列表来存放,例如: resp_1 = get_resp(param=1) resp_2 = get_resp(param=2) resp_3 = ge ...
分类:
其他好文 时间:
2020-06-05 01:03:34
阅读次数:
90
关于页面置换算法的理论知识: https://www.bilibili.com/video/BV1YE411D7nH?p=45 C++代码实现(未优化) #include<iostream> #include<fstream> #include<cstring> using namespace st ...
分类:
编程语言 时间:
2020-06-03 01:01:06
阅读次数:
97
思路 用HashMap类型的cache记录Cache的数据 用List类型的record 记录Cache的各个元素使用情况 record有点类似队列,方便起见,下文就以队列称呼。 对于cache中已有的元素: 若进行get put操作,就将该元素移到队列(record)的最后(即表示该数据最近使用过 ...
分类:
其他好文 时间:
2020-05-30 21:34:36
阅读次数:
48
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) ...
分类:
其他好文 时间:
2020-05-29 23:08:12
阅读次数:
81