調度隊列和優化
- Golang 實現無重複元素的隊列
- Golang 實現固定Size的循環隊列
- 模擬貨運運輸和優化 假設: 有N個貨物,每個貨物有三個屬性: 貨物ID、貨物裝上車耗費的時間、貨物裝車後價值。 假設N個貨物同時到達站點等待裝車,裝車操作有序執行
作答要求:
(1)模擬N個貨物的單個貨物的耗費時間、貨物價值
(2)輸出:計算N個貨物總排隊時間
總排隊執行時間:
定義第n個貨物排隊+執行耗時 time(n),n=0,time(0)=0
定義第n個貨物裝車時間 load(n)= 隨機值
第n個貨物排隊執行時間:time(n)= time(n-1)+load(n)
(3)編程語言:java、golang、c、c++ 任意一種 - 基於上面試題3,假設貨物之間裝載沒有依賴關係,誰先誰後都是可以的
假設貨車體積有限,如何優化,使得使得等待時間最小、貨物價值最大?
編程語言:java、golang、c、c++ 任意一種 - 模擬公平調度算法實現 例如:Linux Completely Fair scheduler (CFS) 或者 hadoop Fair Scheduler模擬實現 參考鏈接
https://en.wikipedia.org/wiki/Completely_Fair_Scheduler https://github.com/kanaka/rbt_cfs http://www.dreamincode.net/forums/topic/147939-fair-scheduling-in-java/ http://dongxicheng.org/mapreduce/hadoop-fair-scheduler/ https://github.com/sakeven/RbTree
- 模擬Goroutine調度器 Scalable Go Scheduler Design
Go Preemptive Scheduler Design
NUMA‐aware scheduler for Go - 基於Golang 模擬 定時任務框架 要求:支持超時控制、支持主動停止任務、支持任務調度週期的改變
調度穩定性方面
- Golang實現 Pod打散的一種算法 需求描述:有一堆候選服務器列表,每個服務器隨機分配一個得分,
服務器同時屬於一個pod並且只屬於唯一一個pod
算法輸出:進行按得分排序,同時兼顧按pod打散的 topN 輸出
舉例:10個結點,結點如下,
{nc:a,score:1.0,pod:1} {nc:b,score:1.0,pod:2} {nc:c,score:4.0,pod:3} {nc:d,score:3.0,pod:2} {nc:e,score:4.0,pod:5} {nc:f,score:2.0,pod:4} {nc:g,score:2.0,pod:3} {nc:h,score:2.0,pod:1} {nc:i,score:4.0,pod:3} {nc:j,score:3.0,pod:2} top5:輸出如下: {nc:e,score:4.0,pod:5} {nc:c,score:4.0,pod:3} {nc:b,score:3.0,pod:2} {nc:a,score:2.0,pod:1} {nc:e,score:2.0,pod:4} top4:輸出如下: {nc:e,score:4.0,pod:5} {nc:c,score:4.0,pod:3} {nc:b,score:3.0,pod:2} {nc:a,score:2.0,pod:1} 或者 任意一個輸出都算有效 {nc:e,score:4.0,pod:5} {nc:c,score:4.0,pod:3} {nc:b,score:3.0,pod:2} {nc:e,score:2.0,pod:4} top6:輸出如下 {nc:e,score:4.0,pod:5} {nc:c,score:4.0,pod:3} {nc:b,score:3.0,pod:2} {nc:a,score:2.0,pod:1} {nc:e,score:2.0,pod:4} {nc:i,score:4.0,pod:3}
分佈式一致性方面
- Java或者Golang實現 一致性hash算法
- 模擬raft協議中leader 選舉。 通俗說N個node,只要一半以及以上node 獲得投票 就成為leader,選舉結束
- Golang實現LRUCache
- Golang實現 任務中斷或者宕機可恢復的生產者、消費者框架
數據分析和算法
- N個時序結點,每個結點包括timestamp、value
要求擬合 時序趨勢 - 有N個數據結點,數值區間0 到 100
要求給出 N個結點的 99分位值 - 有N個數據結點,數值區間0 到 100 要求 給出一個數值,給出這個數值的分組值
- 組合關係挖掘 給定N個Node,每個Node上0到M 個 Container
同時,Node分配一個cpu值,每個Container一個cpu值
Node 和Container的 cpu 值區間0到60
Node cpu = 上面所有Container cpu 和 每個Container 包括一個 id,name,cpu值
並且Container id相同的,其cpu值也相同要求:
從N個Node和每個Node上面的Container數據中
挖掘有效組合關係模型,也就 那些Container在一起最佳
最佳的標準:Node cpu值最大或者最小 - 有N個Node,M個Container,每個Node 包括CPU、mem、disk值
每個Container也包括CPU、mem、disk值
有Q個工單,每個工單對應一種Container和數量
要求:
如何將Q個工單資源編排進N個Node,使得N個Node的分配率最好
開源源碼
- etcd源碼
- kubelet源碼
- yarn 源碼
- messos源碼
- CloudSim源碼
- Google-cluster-sim 源碼
- Golang源碼
- Docker 源碼
- Pouch 源碼
原文參考 https://github.com/sebarzi/interview_scheduler/blob/master/questions_part_one.md