|
|
|
|
移动端

韋德博彩客戶端:程序员经典面试题,设计定时任务调度器,用什么算法与数据结构

本文来源:http://www.133845.com/www_163xjk_cn/

申博官网下载直营网,但该店店长黄某认为,小蔡在此事中也有过错,全额退款对店方不公平,可退还1500元,其余500元以后还能继续使用。  同一天,复星集团企业报《复星人报》刊发了一篇媒体对郭广昌的采访报道,郭称复星已经基本形成了覆盖全球的保险和私人银行近2000亿美元平台。一次偶然的机会,王建国到医院为一个生病的同事理发,在那里他发现了有很多需要理发的老人,就开始为他们义务理发。误区5:晨练比暮练好。

他指出,上世纪60年代中国就曾探索研制空警一号预警机,但因为技术匮乏和国力限制,最终成了航空博物馆里的展品;2000年与别国的合作合约也撕毁。  张高丽强调,要强化主体功能定位,加快优化国土空间开发格局,大力推进绿色城镇化和美丽乡村建设。  据悉,在《X女特工》拍戏时,唐嫣在戏外遇到了和邱泽分手事件的困扰,后来在拍戏中解压并没有影响发挥。史蒂芬·摩尔还声称,“很多在外交政策上的‘庸俗者’一直担心特朗普的所作所为会羞辱到中国,‘天呐,我们不能这样做,’,对于是否羞辱到了中国,我才不在乎!”“电话门”搅动中美关系美媒讽刺称“菜鸟的错误”美国当选总统特朗普12月2日与台湾地区领导人蔡英文进行了电话交谈。

但因是还没进行的会议,会谈些什么“要尊重我们的朋友”,并没有提供进一步消息。  经查,艾宝俊严重违反政治纪律,欺骗组织,对抗组织审查;严重违反组织纪律,利用职务上的便利在干部选拔任用方面为他人谋取利益并收受财物,不按规定如实报告个人有关事项;严重违反廉洁纪律,收受礼品、礼金,利用职务上的便利为亲属经营活动谋取利益,搞权色交易;严重违反中央八项规定精神,多次违规出入私人会所、打高尔夫球;利用职务上的便利非法占有公共财物,在企业经营方面为他人谋取利益并收受财物。虽然,这一婚变传闻便被当事者否认,称双方现在状态很好。我当时很年轻,很有前途,赞助商也对我有兴趣,现年32岁的洛说道。

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

作者:沙茶敏碎碎念来源:今日头条|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官微

菲律宾申博太阳网城上娱乐 申博太阳开户优惠直营网 申博代理有限公司登入 申博游戏手机怎么下载 申博会员现金网直营网 申博138娱乐网直营
太阳城申博游戏下载官方 太阳城申博88登入 申博在线娱乐登入网址 太阳城官方直营网登入 申博娱乐网址 申博游戏网址
www.9810.com 太阳城申博娱乐直营网 申博游戏吧直营网 太阳城申博客户端下载 澳门美高梅游戏登入 申博代理登录登入