鲸域科技一面

一面就是做题
设计一个LRUCache
•get (key):获取指定key 的value 值(如果存在),并将该key 移动到最近使用的位置。。
•put (key, value):插入一个新的key-value 对,如果插入前缓存已经满了,那么将最久未使用的 key-value 对删除。
•可输出缓存结构内所有key-value对。

package thread;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

public class LRUCache {
    public static void main(String[] args) {
        LRUCache cache = new LRUCache(5);
        cache.put(1,1);
        cache.put(2,2);
        cache.put(3,3);

        System.out.println(cache.get(0));
        cache.put(4,4);
        cache.put(5,5);

        cache.put(6,6);

        System.out.println(cache.get(3));

        cache.put(2,3);
    }

    private int capacity;
    private Map<Integer, Integer> cache;
    private LinkedList<Integer> keyOrder;

    public LRUCache(int capacity) {
        this.capacity = capacity;
        cache = new HashMap<>();
        keyOrder = new LinkedList<>();
    }

    public Integer get(int key) {
        if(!cache.containsKey(key)){
            return null;
        }

        // 移动最近使用的位置
        keyOrder.remove(key);
        keyOrder.addLast(key);

        return cache.get(key);
    }

    public void put(int key, int value) {
        if (cache.size() > 5) {
            return;
        }

        // 先判断key是否已存在
        if (cache.containsKey(key)){
            // 如果已经存在了,移动到最近的位置
            cache.put(key,value);
            keyOrder.remove(key);
            keyOrder.addLast(key);
        }else{
            if(cache.size() == capacity){
                // 满了就删除最久没使用过的
                int old = keyOrder.removeFirst();
                cache.remove(old);
            }

            cache.put(key,value);
            keyOrder.addLast(key);
        }

    }

}
全部评论
1. 大佬,除了做题,一面还问啥了? 2. 这个题可以使用 LinkedHashMap 吗?
点赞 回复 分享
发布于 2024-09-13 17:06 河北

相关推荐

小厂面经,也是我的处女面(30min)1.自我介绍2.spring&nbsp;boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring&nbsp;task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务