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协议也实现了可靠传输。

浙公网安备 33010602011771号