面试
月亮好像心动了❤️
这个作者很懒,什么都没留下…
展开
-
手写LRU
描述: LRU,在缓存中删除总是删除最近最少使用的key 思路分析: 1、缓存实现:查询、更新,一定是使用HashMap 2、通过链表来判断最近最少使用的是哪一个,即:最近有使用的放链表头、最近最少使用的放链表尾 3、因为需要删除链表中某个过期的节点,所以选择使用双向链表 4、HashMap中key就存查询搜索的key;value存放双向链表的节点 代码实现: package com.qu; i...原创 2019-08-16 14:57:42 · 668 阅读 · 0 评论 -
手写自旋锁
思路分析: 1、手写自选锁,使用原子引用类型记录获得锁的线程 2、使用原子引用类的compareAndSet()方法实现 代码实现: package com.qu; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; /** * @title: SpinLockDe...原创 2019-08-16 15:33:11 · 788 阅读 · 0 评论 -
手写缓存
思路分析: 1、需要一个线程写的时候不能被打断,即写操作要保证原子性 2、读写锁保证同一时刻可以多个线程读、但只能一个线程写 3、lock / sync 是独占锁、只要加了锁、其他线程就不许读了、所以不好 4、读写锁适用于多读场景 代码实现: /** * @title: MyCache * @description: 写一个模拟的分布式缓存(Redis),写的时候要求⼀个线程进去,读的时候允...原创 2019-08-16 15:52:21 · 306 阅读 · 0 评论 -
手写生产-消费者的实现(通过阻塞队列实现)
思路分析: 1、两个线程、一个生产、一个消费,要保证可见性,所以需要volatile 2、多线程下要保证原子性,所以生产消费的数据用IAtomicnteger 3、使用那种阻塞队列需要依赖传入的参数来决定,所以构造传接口进来 4、使用阻塞队列中包含超时的offer、poll 代码实现: /** * @title: MyResource * @description: 实现生产-消费者 * ...原创 2019-08-16 16:56:45 · 205 阅读 · 0 评论