3.31 学习

3.31 学习

lru缓存

class LRUCache {
    //20:43
    class DlinkedNode{
        DlinkedNode next;
        DlinkedNode prev;
        int key;
        int val;
        public DlinkedNode(){};
        public DlinkedNode(int _key,int _val){
            this.key=_key;
            this.val=_val;
        }
    }

    HashMap<Integer,DlinkedNode> map;
    int capacity;
    int size;
    DlinkedNode head;
    DlinkedNode tail;

    public LRUCache(int capacity) {
        this.capacity=capacity;
        size=0;
        map=new HashMap<>();
        head=new DlinkedNode();
        tail=new DlinkedNode();
        head.next=tail;
        tail.prev=head;
    }
    
    public int get(int key) {
        if(!map.containsKey(key)) return -1;
        DlinkedNode node=map.get(key);
        removeNode(node);
        addToHead(node);
        return node.val;
    }
    
    public void put(int key, int value) {
        DlinkedNode node=map.get(key);
        if(node==null){
            DlinkedNode newNode=new DlinkedNode(key,value);
            if(size==capacity){
                int k=removeTail();
                map.remove(k);
                addToHead(newNode);
                map.put(key,newNode);
            }
            else{
                addToHead(newNode);
                map.put(key,newNode);
                size++;
            }
        }
        else{
            node.val=value;
            moveToHead(node);
        }
    }

    public void moveToHead(DlinkedNode node){
        removeNode(node);
        addToHead(node);
    };
    public void addToHead(DlinkedNode node){
        head.next.prev=node;
        node.next=head.next;
        node.prev=head;
        head.next=node;
    };
    public int removeTail(){
 
    };
    public void removeNode(DlinkedNode node){
        node.prev.next=node.next;
        node.next.prev=node.prev;
    }
}

/**
 * Your LRUCache object will be instantiated and called as such:
 * LRUCache obj = new LRUCache(capacity);
 * int param_1 = obj.get(key);
 * obj.put(key,value);
 */

主要注意一下初始化的时候key在前

计网

应用层 HTTP/HTTPS/DNS 包括URL,方法,版本,消息头,消息体

传输层 TCP,UDP 包括源端口号,目的端口号,同步序列号SYN(syncronized sequence number),确认序列ACK,以及几个标识位,窗口大小,校验和

网络层 IP 包括源IP地址,目的IP地址,协议,总长度

网络接口层MAC 包括接收方mac地址,发送方mac地址,协议类型

HTTP演变:

HTTP1.1,底层用TCP,请求方和响应方都有对头阻塞问题。

HTTP2.0,主要做了四点改进:头部压缩,二进制格式,并发传输,主动推送。一个TCP连接内部传多个Stream解决了请求方的对头阻塞问题。

HTTP3.0,底层改用UDP+Quic协议解决了对头阻塞,同时Quic协议也实现了可靠传输。

posted @ 2025-03-31 15:29  vast_joy  阅读(55)  评论(0)    收藏  举报