|
|
|
|
移动端

何氏贵宾会游戏登录:程序员经典面试题,设计定时任务调度器,用什么算法与数据结构

本文来源:http://www.2233122.com/war_163_com/

太阳城娱乐网最快登入,消息中写道:“儿童医院9月1日起全面取消窗口挂号,现场排队没用。  她们都觉得参加长征光荣,愿意随主力部队进行战略转移,不愿意留在当地。  部分中共中央政治局委员、中央书记处书记出席会议。而这位不幸的姑娘居然再次被骗!直到她找到第三个放款人,才终于得到了8000元贷款。

  查看主板金融系、地产、有色、煤碳、中字头等各板块走势,都还处于上升趋势途中,轮动带动指数上涨还是有潜力。我们无法求助国际刑警,请求他们把对方列入红色通告中。凌晨三点左右,学生家长和亲属赶到医院,询问了医生、校方和相关同学事发情况,并说该生曾有哮喘病史已治愈。  新华社“中国网事”记者就这件事对韩春雨进行了采访。

当年母子俩出院后,出于种种考虑,何小惠撤销了对田伟建的控诉,并再次和他生活在一起,又陆续生育了三个儿子。”“商业街区的二层过街功能的开辟,将借鉴香港,让交通更加有序、安全。中方面临的关键问题是如何说服邻国相信中国无意从强硬走向侵略。

当年我还是个学生的时候,有一次去参加欢聚时代的一个面试,有一道面试题记忆尤新,让你来实现一个定时任务,你会怎么做?为了简化问题,我们只用考虑内存方案,不用考虑数据持久化。

作者:沙茶敏碎碎念来源:今日头条|2019-10-09 17:22

当年我还是个学生的时候,有一次去参加欢聚时代的一个面试,有一道面试题记忆尤新,让你来实现一个定时任务,你会怎么做?为了简化问题,我们只用考虑内存方案,不用考虑数据持久化。

数组法

最简单的,我们可以把所有的任务存放在一个数组里面,然后,每隔单位时间遍历整个数组,找到是否有任务满足当前时间,如果有,那么从数组中取出,然后执行。每隔单位时间查询算法复杂度为O(N)。

那么,新增一个任务怎么操作呢?我们只要简单地往数组中追加一个元素即可,算法时间复杂度为O(1)

优先队列法

评估一个算法,我们既要考虑它的查询算法复杂度,也要考虑他的插入算法复杂度。在定时任务场景中,很显然,查询场景是非常多的。几乎我们每个单位时间都要轮询一遍,那么我们有没有优化算法的可能呢?

我们每次查询,都只要查询时间最接近当前时间的,时间比当前时间更早的,肯定被我们丢弃了。所以这个题目,等价于我们查询队列里面时间最小的。我们不禁想到一个熟悉的数据结构,优先队列!活着我们可以使用一个小根堆进行实现。

每次我们插入一个新的定时任务,我们将一个任务插入优先队列,每次插入的时候,队列内部需要进行调整,算法时间复杂度为O(logN)。值得注意的是,在讨论算法时间复杂度的时候,logN是Base2的,也就是说,如果N等于8的时候,logN就是3。

同理,虽然我们可以在O(1)的时间里面找到时间最小的任务,但是如果我们取出这个元素,优先队列需要做内部的调整,这个算法时间复杂度也是O(logN)的。

时间轮法

上述优先队列的算法,综合算法时间复杂度是O(logN)的,已经很高效了,但是在我们大并发的分布式系统下,这个速度,还是太慢了。我们有没有更高效的算法呢?

那便是时间轮算法,时间轮是一个环形队列,按照时间的单位区分,我们假设1秒,每个单位里面,是一个链表,用来存储定时任务。

程序员经典面试题,设计定时任务调度器,用什么算法与数据结构

可能你会问,一个环形队列里面的元素,毕竟是优先的,如果超过了长度,我们该怎么办呢?我们可以联想到我们家里的水表,是不是也有很多个轮子,每一个轮子的单位不一样!

同样,时间轮也是如此,我们可以用多级时间轮进行优化,就跟我们的时钟或者水表一样,这一层的走了一圈,下一层的才走了一格。

程序员经典面试题,设计定时任务调度器,用什么算法与数据结构

那么,这个算法的 时间复杂度怎么计算呢?插入的时候,我们从低层开始查找,找到在哪一层,然后直接插入对应的刻度。假如我们的时间轮有5层,那么我们最多查找5次。

查询的时候,我们每一秒都是推动时间轮的滚动,每次都是直接取队首的元素,相当于算法时间复杂度为O(1)。当转了一圈的时候,把下一层的下一格再推下来。这样子,我们一个元素,最多会从第5层,逐渐插到第1层,综合下来一个元素最多会被插入5次,在算法时间复杂度评估的时候,我们通常会忽略常数,最终算法时间复杂度为O(1)。

总结

一个非常简单的面试题,竟然有好几种不同的解法。这才是算法与数据结构的魅力,欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。

【编辑推荐】

  1. 集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt
  2. 程序员年薪40万被国企同学怒怼:没啥贡献,凭什么工资这么高!
  3. 要求公开华人程序员自杀真相,清华学霸被Facebook开除了
  4. 从平庸到大牛程序员,不能错过9月的这十篇热门文章!
  5. 怒了,Facebook强行辞退要求公布跳楼真相的程序员!
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
大家都在看
猜你喜欢
24H热文
一周话题
本月获赞

订阅专栏+更多

CentOS 8 全新学习术

CentOS 8 全新学习术

CentOS 8 正式发布
共16章 | UbuntuServer

72人订阅学习

用Python玩转excel

用Python玩转excel

让重复操作傻瓜化
共3章 | DE8UG

201人订阅学习

AI入门级算法

AI入门级算法

算法常识
共22章 | 周萝卜123

165人订阅学习

读 书 +更多

网络技术应试辅导(三级)

本书根据教育部考试中心2004年最新发布的《全国计算机等级考试大纲》编写,针对计算机等级考试三级网络技术各方面的考点进行讲解和训练。本...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微

申博太阳城官网直营 www.1111msc.com 申博官网太阳城娱乐网 申博会员开户 太阳网上娱乐登入 申博支付宝充值
申博娱乐开户 申博桌面版下载直营网 菲律宾申博娱乐直营网 申博管理平台登入 申博游戏直营网 申博游戏直营网
www.188msc.com 老虎机微信支付充值 申博管理网网址 申博娱乐场直营网 申博真人游戏娱乐登入 www.6699sun.com