「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」
前言
就目前情况而言,只要你简历上敢写Redis,大厂面试官就一定敢叫你手写LRU,但对于手写LFU相对而言还是比较少见,但如果,你写完LRU还能对面试官说你还掌握LFU算法,那么即使你写不出来只说出个大概,那么在面试官心中也是大大加分的!!!
那么,今天就让我来帮助大家掌握这个高频考点吧!!!
==温馨提示==:主要理解思路在注释中
注释有点浅,大家可以复制到自己的编译器中好好看看
大厂面试题专栏,里面有更多更优质的大厂面试题,可以来看一看瞅一瞅哦!!!
手撕LRU
LRU总体上还是比较简单的,只要你掌握概念,即使长时间没写也还能记得!
LRU总体上思路:最近使用的放在最近的位置(最左边),那么保证了这个最少使用的就自然而然离你远了(往右边去了)
所以说使用双向链表来实现,但光有这还不够,我们还需要使用Map来将key映射到对应的节点
在双向链表中,使用虚拟头节点和尾节点来作为节点,这样在添加节点和删除节点的时候就不需要检查相邻的节点是否存在。
1 | java复制代码public class Main { |
手撕LFU
LFU就不像是LFU那样根据最近使用之类的来编排
LFU是根据使用的频次,简单来说是根据使用的次数来编排(在保证次数的情况下,根据最近使用来排),所以对于链表节点需要多定义一个使用的次数count
1 | java复制代码public class Main { |
最后
我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以==一键三连哦!==,感谢支持,我们下次再见~
分享大纲
本文转载自: 掘金