当前位置: 代码迷 >> Java相关 >> 中国民生银行笔试题2011(人民大学)解决方案
  详细解决方案

中国民生银行笔试题2011(人民大学)解决方案

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


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

字符串键值索引 怎么弄?

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

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