開發與維運

資源調度系統面試參考

調度隊列和優化

  1. Golang 實現無重複元素的隊列
  2. Golang 實現固定Size的循環隊列
  3. 模擬貨運運輸和優化 假設: 有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++ 任意一種
  4. 基於上面試題3,假設貨物之間裝載沒有依賴關係,誰先誰後都是可以的
    假設貨車體積有限,如何優化,使得使得等待時間最小、貨物價值最大?
    編程語言:java、golang、c、c++ 任意一種
  5. 模擬公平調度算法實現 例如: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
  1. 模擬Goroutine調度器 Scalable Go Scheduler Design
    Go Preemptive Scheduler Design
    NUMA‐aware scheduler for Go
  2. 基於Golang 模擬 定時任務框架 要求:支持超時控制、支持主動停止任務、支持任務調度週期的改變

調度穩定性方面

  1. 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}

分佈式一致性方面

  1. Java或者Golang實現 一致性hash算法
  2. 模擬raft協議中leader 選舉。 通俗說N個node,只要一半以及以上node 獲得投票 就成為leader,選舉結束
  3. Golang實現LRUCache
  4. Golang實現 任務中斷或者宕機可恢復的生產者、消費者框架

數據分析和算法

  1. N個時序結點,每個結點包括timestamp、value
    要求擬合 時序趨勢
  2. 有N個數據結點,數值區間0 到 100
    要求給出 N個結點的 99分位值
  3. 有N個數據結點,數值區間0 到 100 要求 給出一個數值,給出這個數值的分組值
  4. 組合關係挖掘 給定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值最大或者最小

  5. 有N個Node,M個Container,每個Node 包括CPU、mem、disk值
    每個Container也包括CPU、mem、disk值
    有Q個工單,每個工單對應一種Container和數量
    要求:
    如何將Q個工單資源編排進N個Node,使得N個Node的分配率最好

開源源碼

  1. etcd源碼
  2. kubelet源碼
  3. yarn 源碼
  4. messos源碼
  5. CloudSim源碼
  6. Google-cluster-sim 源碼
  7. Golang源碼
  8. Docker 源碼
  9. Pouch 源碼

原文參考 https://github.com/sebarzi/interview_scheduler/blob/master/questions_part_one.md

Leave a Reply

Your email address will not be published. Required fields are marked *