手撕题
文章平均质量分 63
skier~
Java 偏执狂
展开
-
生产者消费者模型
生产者和消费者问题是线程模型中老生常谈的问题,也是面试中经常遇到的问题。今天我们就盘它!!!一、生产者消费者模型何为生产者消费者模型呢?生产者消费者模型是由两类线程构成:生产者线程:“生产”产品,并把产品放到一个缓冲区里;消费者线程:“消费”产品。如图所示:小贴士:生产者持续生产,直到缓冲区满,满时阻塞;缓冲区不满后,继续生产;如果缓冲区里的产品从无到有,生产者就得通知一下消费者,告诉它可以来消费了;消费者持续消费,直到缓冲区空,空时阻塞;缓冲区不空后,继续消费;如果缓冲区里原创 2021-12-18 18:40:28 · 583 阅读 · 1 评论 -
两个线程交替打印
题目:起两个线程交替打印0~100的奇偶数这个问题大家可能在面试的时候遇到过,虽然学过多线程相关的知识,可能当时一时半会还写不出来,现在就让我带大家写一遍吧!方法一首先,我们可以观察到打印的是奇数和偶数,那么我们就可以通过这个特点去写代码。假如我们有一个全局变量 count,当 count 等于偶数的时候,我们就让线程1打印,当 count 等于奇数的时候,我们就让线程2打印。那如何实现呢?这里我们就可以用到锁了,来保证同一时刻只有一个线程在执行。但是如果同一个线程一直抢到锁,而另一个线程一直没有拿到原创 2021-12-18 18:39:57 · 1860 阅读 · 0 评论 -
手撕 LRU
相信大家对 LRU 算法一点都不陌生,今天我们就来手撕它!LRU 算法描述:首先要接收一个 capacity 参数作为缓存的最大容量,然后实现两个 API,一个是 put(key, val) 方法存入键值对,另一个是 get(key) 方法获取 key 对应的 val,如果 key 不存在则返回 -1。小贴士:get 和 put 方法必须都是 O(1) 的时间复杂度LRU 算法设计:分析上面的操作过程,要让 put 和 get 方法的时间复杂度为 O(1),我们可以总结出 cache 这个.原创 2021-12-18 18:39:19 · 272 阅读 · 0 评论