天哪,我现在接受采访了。不管你准备多少,你都会忘记一切。 :)
我想我会分享这个问题,而这在脑子里是新鲜的。
1)您有1000个对象作为缓存保留。您应该以有效的方式创建缓存,以便搜索时间非常短。
显然他们正在寻找一个提供持续访问时间的HashSet。
2)如何在缓存中获取至少(不是最旧但最少)使用的对象?什么用作哈希码来实现这一点,以及如何在不进行任何昂贵搜索的情况下获得这个桶?
我正在考虑将对象的时间戳用作哈希码。但是,如果不进行任何搜索,我将如何获得最少使用的对象?
答案 0 :(得分:1)
我认为他们的方式是使用最近最少使用的缓存算法。有关维基百科的更多信息:Cache Algorithms
此StackOverflow question还有一个LRU缓存。
答案 1 :(得分:1)
我的解决方案(我最近实现了类似的东西)是同时拥有Dictionary
(Hashset)和有序LinkedList
。 LinkedList
将包含访问项和计数器。当你想获得你的项目时,你会查看Dictionary
以获取LinkedList的节点,然后你增加计数器并向前推送节点以保持列表排序。如果你想获得最不常用的项目,你可以选择列表的头部(或尾部)。
这使得检索O(1)
和插入O(n)
处于最差(非常罕见)和O(1)
最佳情况。