成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序員經典面試題,設計定時任務調度器,用什么算法與數據結構

新聞 算法
當年我還是個學生的時候,有一次去參加歡聚時代的一個面試,有一道面試題記憶尤新,讓你來實現一個定時任務,你會怎么做?為了簡化問題,我們只用考慮內存方案,不用考慮數據持久化。

 當年我還是個學生的時候,有一次去參加歡聚時代的一個面試,有一道面試題記憶尤新,讓你來實現一個定時任務,你會怎么做?為了簡化問題,我們只用考慮內存方案,不用考慮數據持久化。

數組法

最簡單的,我們可以把所有的任務存放在一個數組里面,然后,每隔單位時間遍歷整個數組,找到是否有任務滿足當前時間,如果有,那么從數組中取出,然后執行。每隔單位時間查詢算法復雜度為O(N)。

那么,新增一個任務怎么操作呢?我們只要簡單地往數組中追加一個元素即可,算法時間復雜度為O(1)

[[278610]]

優先隊列法

評估一個算法,我們既要考慮它的查詢算法復雜度,也要考慮他的插入算法復雜度。在定時任務場景中,很顯然,查詢場景是非常多的。幾乎我們每個單位時間都要輪詢一遍,那么我們有沒有優化算法的可能呢?

我們每次查詢,都只要查詢時間最接近當前時間的,時間比當前時間更早的,肯定被我們丟棄了。所以這個題目,等價于我們查詢隊列里面時間最小的。我們不禁想到一個熟悉的數據結構,優先隊列!活著我們可以使用一個小根堆進行實現。

每次我們插入一個新的定時任務,我們將一個任務插入優先隊列,每次插入的時候,隊列內部需要進行調整,算法時間復雜度為O(logN)。值得注意的是,在討論算法時間復雜度的時候,logN是Base2的,也就是說,如果N等于8的時候,logN就是3。

同理,雖然我們可以在O(1)的時間里面找到時間最小的任務,但是如果我們取出這個元素,優先隊列需要做內部的調整,這個算法時間復雜度也是O(logN)的。

時間輪法

上述優先隊列的算法,綜合算法時間復雜度是O(logN)的,已經很高效了,但是在我們大并發的分布式系統下,這個速度,還是太慢了。我們有沒有更高效的算法呢?

那便是時間輪算法,時間輪是一個環形隊列,按照時間的單位區分,我們假設1秒,每個單位里面,是一個鏈表,用來存儲定時任務。

程序員經典面試題,設計定時任務調度器,用什么算法與數據結構

可能你會問,一個環形隊列里面的元素,畢竟是優先的,如果超過了長度,我們該怎么辦呢?我們可以聯想到我們家里的水表,是不是也有很多個輪子,每一個輪子的單位不一樣!

同樣,時間輪也是如此,我們可以用多級時間輪進行優化,就跟我們的時鐘或者水表一樣,這一層的走了一圈,下一層的才走了一格。

程序員經典面試題,設計定時任務調度器,用什么算法與數據結構

那么,這個算法的 時間復雜度怎么計算呢?插入的時候,我們從低層開始查找,找到在哪一層,然后直接插入對應的刻度。假如我們的時間輪有5層,那么我們最多查找5次。

查詢的時候,我們每一秒都是推動時間輪的滾動,每次都是直接取隊首的元素,相當于算法時間復雜度為O(1)。當轉了一圈的時候,把下一層的下一格再推下來。這樣子,我們一個元素,最多會從第5層,逐漸插到第1層,綜合下來一個元素最多會被插入5次,在算法時間復雜度評估的時候,我們通常會忽略常數,最終算法時間復雜度為O(1)。

總結

一個非常簡單的面試題,竟然有好幾種不同的解法。這才是算法與數據結構的魅力,歡迎大家關注我,共同學習,共同進步。大家的支持是我繼續嘮嗑的動力。

責任編輯:華軒 來源: 今日頭條
相關推薦

2018-09-11 10:04:27

程序員面試數據結構

2020-04-26 09:48:11

MySQL數據庫架構

2020-03-18 09:33:47

數據庫程序員數組

2020-05-06 15:02:58

MySQL數據庫技術

2012-05-25 10:15:06

Java程序員面試題

2019-10-18 09:40:19

程序員固態硬盤Linux

2020-04-08 10:18:56

MySQL數據庫SQL

2020-02-06 08:58:09

程序員技術數據庫

2020-03-02 17:00:24

程序員數據庫MySQL

2020-02-07 10:14:07

程序員設計人生第一份工作

2019-09-20 14:25:21

程序員Google人生第一份工作

2020-04-12 22:29:50

程序員MySQL數據

2020-05-11 10:48:01

技術資訊

2018-07-16 22:25:33

程序員數據結構算法

2023-11-16 09:30:27

系統任務

2024-07-24 08:38:07

2014-07-28 14:00:40

linux面試題

2020-10-21 14:57:04

數據結構算法圖形

2013-05-14 09:44:41

程序員面試

2023-03-08 08:03:09

數據結構算法歸并排序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99九色 | 久久久91精品国产一区二区三区 | 日韩精品在线一区二区 | 国产精品一区视频 | 91久久精品一区二区三区 | 国产欧美一区二区三区另类精品 | a级片播放| 中文成人在线 | 97国产精品 | 日日干夜夜操 | www.一区二区三区 | 国产精品久久久亚洲 | 精品久久一区二区三区 | 伦理二区| 精精国产xxxx视频在线野外 | 国产在线观看不卡一区二区三区 | 九色在线观看 | 成人免费观看男女羞羞视频 | 日韩欧美一级 | 国产欧美精品一区二区色综合朱莉 | 久艹网站| 亚洲国产成人精品在线 | 亚洲精品九九 | 一区二区三区四区五区在线视频 | 日韩在线不卡视频 | 国产精品一区二区在线 | 欧美国产日韩在线观看成人 | 亚洲视频在线一区 | 91九色麻豆 | 奇米四色影视 | 久久久久久久久久久久久9999 | 亚洲一视频 | 国产91精品久久久久久久网曝门 | h片免费在线观看 | 日韩国产一区二区三区 | 免费午夜电影 | 欧美一级欧美三级在线观看 | 成人免费xxxxx在线视频 | 亚洲国产成人久久综合一区,久久久国产99 | 国产性网| 视频一二三区 |