延迟队列

关于淘点点面试中碰到的架构问题​

一笑奈何 提交于 2020-01-10 14:05:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 从事开发工作两年来,从未写过只言片语,俗话说的好”好记性不如烂笔头“,最近心血来潮开始想慢慢写点博文,不仅是知识的积累还是为了若干年后回头看看当年努力的过程,希望把这个养成习惯并坚持下去,啰嗦了这么久 来点干货把。 之前面试淘点点的时候被问倒得一个问题至今牵挂,由于工作环境的限制,我没能接触到一些大数据量的并发工作,也没能有机遇参与复杂系统的设计,而我学习复杂或高并发系统的唯一途径就是阅读源码,惭愧的是,至今也只阅读了Tomcat的部分源码,于是我在oschina上贴出问题与互联网猿一同分析( 大家可以先看看问题:关 于淘点点面试中碰到的架构问题 ),非常感谢大家的意见,尤其是@ 林中漫步 @JerryLin 两位先生 最终确定两钟实现思路: 1、 具有排序功能的队列 2、 Redis+定时器 思路 1 原理: 第一种思路也就是大家推荐的延迟队列实现的原理,其就是一个按时间排好序的队列,每次put的时候排序,然后take的时候就计算时间是否过期,如果过期则返回队列第一个元素,否则当前线程阻塞X秒,这个也是JDK 自带 DelayQueue 的思路。详细可看源码 代码实现: 待实现后补充 思路 2 原理: 第二种思路需要利用Redis的有序集合,说到使用 Redis 就不得不考虑Score的设计