日期:2014-05-20  浏览次数:22331 次

中国民生银行笔试题2011(人民大学)
写一个缓存类ExpiringCache:
1.缓存有限数量的任意对象,以字符串键值索引缓存的对象
2,如果超过缓存对象数量的上限,从缓存中去掉最早缓存的对象,将新缓存的对象加入缓存。


------解决方案--------------------
一个类似多例的方法:
一个map里存放缓存对象,设置一个count值,一个size值。每加一个缓存对象,count++,当count>size,则remove掉第一个缓存对象,然后add进新对象。
这样就行了。
------解决方案--------------------
探讨

字符串键值索引 怎么弄?

------解决方案--------------------
1楼说的不全对。
字符键值索引决定了必须用HashMap或者HashTable存放对象
根据放进缓存的时间顺序清理缓存决定了对象必须依序存放,依序添加,依序删除,所以对象必须同时存在于一个有序队列中,比如可以用ArrayList或Vector实现

所以最终的方案是: 同时维护一个HashTable和Vector,选择用这两个类是因为缓存必然面对多线程同时存取的问题,而这两个类本身已考虑了同步。
------解决方案--------------------
搜索 linkedHashMap lru
------解决方案--------------------
一个双向链表,每次访问一个元素的时候就将该元素移到头部,尾部就是最老的元素,是可以移除的