面试题答案
一键面试数据结构
- 哈希表(HashMap):用于快速定位特定HFile,以记录其使用频率和最近访问时间。键为HFile的唯一标识(如文件名或ID),值可以是一个自定义对象,包含使用频率和最近访问时间的信息。这样在查询和更新HFile信息时,时间复杂度可以达到O(1)。
- 双向链表(Doubly Linked List):结合哈希表使用,用于按照访问时间顺序维护HFile。链表节点包含HFile的相关信息。每次访问HFile时,将对应的节点移动到链表头部,表示该HFile是最近访问的。当需要淘汰HFile时,从链表尾部选择最久未访问的HFile。这种数据结构可以在O(1)时间内完成节点的插入、删除和移动操作。
算法设计思路
- 初始化:创建一个哈希表和一个双向链表。哈希表用于快速查找HFile,双向链表用于按访问时间排序。
- 访问HFile:当有对HFile的访问请求时,首先在哈希表中查找该HFile对应的节点。如果找到,更新该节点中的使用频率(加1),并将该节点从链表当前位置移动到链表头部。如果哈希表中未找到,表示是新的HFile,在哈希表中插入新的记录,并在双向链表头部插入新节点,同时初始化使用频率为1。
- 淘汰HFile:当需要淘汰HFile时,从双向链表尾部取出节点,该节点对应的HFile即为最久未访问的。然后在哈希表中删除对应的记录,同时从双向链表中删除该节点。
- 定期维护:可以设置一个定期任务,定期检查HFile的使用频率和访问时间。例如,每隔一段时间,遍历双向链表,对使用频率低于某个阈值且距离上次访问时间超过一定时长的HFile进行淘汰操作,以优化资源利用。同时,对哈希表中的数据进行同步更新。