首页 > 其他分享 >cmu15445面经总结

cmu15445面经总结

时间:2023-10-11 22:34:13浏览次数:32  
标签:总结 缓存 面经 cmu15445 访问 LRU 次访问 淘汰 数据

lru与lru-k区别

LRU(最近最少使用替换算法)

思想:如果数据最近被访问过,那么将来被访问的几率也更高

实现:使用一个栈,新页面或者命中的页面则将该页面移动到栈底,每次替换栈顶的缓存页面。

优点:LRU算法对热点数据命中率是很高的。

缺点:

  1.缓存颠簸,当缓存(1,2,3)满了,之后数据访问(0,3,2,1,0,3,2,1。。。)(3弹出,0进入。后面为了访问3又要置换而弹出2,PUSH入3,而马上又要访问2,又要在置换。。。。)。

  2.缓存污染,突然大量偶发性的数据访问,会让内存中存放大量冷数据。(可能会由于一次冷数据的批量查询而误导大量热点的数据)

LRU-K(LRU-2、LRU-3)

思想:最久未使用K次淘汰算法

LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。

相比LRU,LRU-K需要多维护一个队列,用于记录所有缓存数据被访问的历史。只有当数据的访问次数达到K次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K会淘汰第K次访问时间距当前时间最大的数据。

实现:

1)数据第一次被访问,加入到访问历史列表;

2)如果数据在访问历史列表里后没有达到K次访问,则按照一定规则(FIFO,LRU)淘汰;

3)当访问历史队列中的数据访问次数达到K次后,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;

4)缓存数据队列中被再次访问后,重新排序;

5)需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第K次访问离现在最久”的数据。

LRU

LRU(Least Recently Used)是一种缓存淘汰策略,用于在缓存空间不足时决定哪些项目被移除以腾出空间来存储新的数据。LRU策略的基本思想是:当需要淘汰一个缓存项时,选择最近最少使用的缓存项进行移除。

具体来说,LRU策略会维护一个访问顺序列表,当有数据被访问时,该数据项会被移动到列表的最前面,表示它是最近访问过的。当缓存达到容量上限且需要插入新数据时,LRU策略会移除列表末尾的数据项,因为那些在最长时间内没有被访问的数据项被认为是最近最少使用的。

例如,假设缓存容量为3,按以下访问顺序访问缓存项:A -> B -> C -> A -> D。那么在进行D的插入时,缓存中的数据项顺序可能变为:C -> A -> D,B被淘汰,因为它是最近最少使用的。

LRU策略在许多情况下表现良好,特别适合对数据访问模式有时局部性(局部数据集会被反复访问)的场景。

LRU-K

LRU-K是对经典的LRU(Least Recently Used)缓存淘汰策略的一种改进和扩展,它引入了历史信息来更准确地判断哪些缓存项应该被淘汰。LRU-K考虑了过去K次访问的历史,而不仅仅是最近的一次访问。

在经典的LRU策略中,当缓存满时,会选择最久未使用的缓存项进行淘汰。但在某些情况下,这可能不是最优的选择,特别是在存在顺序泛洪(Sequential Flooding)等情况下,经典LRU策略可能会失效。

LRU-K引入了K这个参数,表示考虑过去K次访问的历史。它的工作原理如下:

当访问一个缓存项时,将其移动到链表的最前面(或更新历史访问信息)。
当需要淘汰缓存项时,不仅考虑最久未使用的,还要考虑过去K次访问中最久未使用的。
具体实现时,LRU-K可以使用一个双向链表和一个哈希表来维护缓存项和它们的访问历史。在插入和访问操作时,需要更新链表中的顺序,而在淘汰操作时,需要根据历史访问信息选择最适合淘汰的项。
LRU-K可以根据不同的场景和访问模式进行调整K值,从而在不同情况下获得更好的性能。它相对于经典LRU策略来说,在一些特殊情况下,例如频繁顺序访问或周期性访问模式,可能能够更准确地识别和保留需要缓存的数据项。

标签:总结,缓存,面经,cmu15445,访问,LRU,次访问,淘汰,数据
From: https://www.cnblogs.com/studie/p/17758389.html

相关文章

  • 每日总结20231011
    代码时间(包括上课)3h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周三,今天上午上的是软件构造,软件构造讲的是程序规范化。2、今天下午我们进行了献血的演讲的观看,明白了献血的意义。3、今天还打算看看软件设计师相关的题目,我要过,我要通过,我要高分通过!......
  • 面试了10家互联网大厂,我总结出这份面试宝典
    前言很多人害怕面试,一想到面试就心里发怵。实际上,在找工作这件事上,雇佣者和求职者是平等的,双方都希望找到合适的对方。如果你能从更深层次上理解面试,并进行大量的模拟练习,距离成为“面霸”就不远了。下面是面试了10家大厂后得出的经验,希望对正在看文章的你有帮助。模拟面试100次以......
  • 2023.10.11——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.java的一些特性;明日计划:学习......
  • 修改docker默认存储路径方法总结
    默认情况下,docker镜像的默认存储路径是/var/lib/docker或其他根目录,有的服务器本身硬盘容量不足需要挂载到数据盘中,所以总结一下修改docker的默认路径,方法如下:先创建新的docker目录mkdir/home/docker以挂载home目录为例,此处也可另外挂载一块磁盘,把新的docker目录建在新磁盘上......
  • LLM采样后处理总结:LLM的后处理的cpp实现
    LLM采样后处理总结:LLM的后处理的cpp实现在经过LLM的lm_head之后,会得到[batch,vocab_size]大小的矩阵向量,此时需要对输出的逻辑张量进行采样,除了beam_search的贪心策略,还有repetition_penalty、temperature、top_k、top_p等几种控制采样的方法。repetition_penaltyrepetition_p......
  • TA 美术相关问题总结
    建模流程:模型阶段->贴图阶段->渲染阶段模型阶段导出的格式一般为fbxSubstancePainter适用于游戏领域,mari适用于影视领域因为相同纹理在同精度下,SP的效果不如mari。但SP更简单,适合初学者;而mari更加复杂次世代建模流程次世代流程次世代流程与手绘流程的区别......
  • 导出excel文件总结
    使用alibaba的easyExcel一定要给要导出的类加注解,例:@ExcelProperty(value="文件传输结果(1=成功,0=失败,2=未传输)")导出的excel文件如果是只有属性没有值,查看自己的查询条件是否由默认值影响了异步导出,先确定好list是否为0,再返回成功如果导出的文件卡住了,也没有异......
  • 10.11每日总结
    关于java集合迭代器中的it.hashNext()和it.next()方法今天突然想了一下找个问题,网上大多数说是直接取下一个元素,很迷惑,那么迭代器中it.next()方法到底是取当前元素并且指针下移还是直接取得下一个元素呢?下面就找个问题追了一下源码 //jdk1.8privateclassItrimplementsIter......
  • IT技术栈:Golang面试攻略详细总结,有的坑,原来真的可以躲过去
    IT技术栈:Golang面试攻略详细总结,有的坑,原来真的可以躲过去首发2023-10-1017:38·大侠技术栈make与new的异同  相同点:都是用来给变量分配内存的不同点:new一般给值类型的变量,例如:string、int、arr分配内存,make给slice、channel、map等引用类型的变量分配内存返回值......
  • 每日总结20231010
    代码时间(包括上课)7h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周二,今天上午上的是大数据、习概,大数据讲的是MapReduce的原理,习概讲的是国家安全地展开。2、今天下午上机课,自己通过搜索成功的建立了c#的第一个程序。3、今天还打算看看软件设计师相关的题目,我要过,我要通过,......