
面试
月亮好像心动了❤️
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
手写LRU
描述:LRU,在缓存中删除总是删除最近最少使用的key思路分析:1、缓存实现:查询、更新,一定是使用HashMap2、通过链表来判断最近最少使用的是哪一个,即:最近有使用的放链表头、最近最少使用的放链表尾3、因为需要删除链表中某个过期的节点,所以选择使用双向链表4、HashMap中key就存查询搜索的key;value存放双向链表的节点代码实现:package com.qu;i...原创 2019-08-16 14:57:42 · 716 阅读 · 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 · 860 阅读 · 0 评论 -
手写缓存
思路分析:1、需要一个线程写的时候不能被打断,即写操作要保证原子性2、读写锁保证同一时刻可以多个线程读、但只能一个线程写3、lock / sync 是独占锁、只要加了锁、其他线程就不许读了、所以不好4、读写锁适用于多读场景代码实现:/** * @title: MyCache * @description: 写一个模拟的分布式缓存(Redis),写的时候要求⼀个线程进去,读的时候允...原创 2019-08-16 15:52:21 · 356 阅读 · 0 评论 -
手写生产-消费者的实现(通过阻塞队列实现)
思路分析:1、两个线程、一个生产、一个消费,要保证可见性,所以需要volatile2、多线程下要保证原子性,所以生产消费的数据用IAtomicnteger3、使用那种阻塞队列需要依赖传入的参数来决定,所以构造传接口进来4、使用阻塞队列中包含超时的offer、poll代码实现:/** * @title: MyResource * @description: 实现生产-消费者 * ...原创 2019-08-16 16:56:45 · 247 阅读 · 0 评论