资源调度系统面试参考

简介: 大规模集群资源调度和管理,对应的技术领域:分布式操作系统研发和运用。提到操作系统,大家就会说这太底层了,其实和我的工作实际过程要求的技术技能有些Gaap。对于广大的研发同学来说,大部分职责都是业务研发,内核这方面的业务需求一般都是基础软件团队的工作范围。但是,对分布式操作系统有兴趣的同学,特别是云平台资源调度管理有兴趣同学,如果想通过应聘进入这个领域,那么有没有一些通用的面试题参考呢。本文就从多年工作、面试过程中,抽取相关内容,供有需要的同学进行学习、总结。下面从调度队列和优化、调度稳定性、分布式一致性、数据分析和算法、开源源码做一个初步的梳理。

调度队列和优化

  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

目录
相关文章
|
1月前
|
C语言
经典面试题:嵌入式系统中经常要用到无限循环,怎么样用C编写死循环呢
在嵌入式系统开发中,无限循环常用于持续运行特定任务或监听事件。使用C语言实现死循环很简单,可以通过`while(1)`或`for(;;)`的结构来编写。例如:`while (1) { /* 循环体代码 */ }`,这种写法明确简洁,适用于需要持续执行的任务或等待中断的场景。
|
1月前
|
存储 消息中间件 缓存
系统设计面试参考-设计Spotify系统
【10月更文挑战第4天】支持用户将自己喜欢的音乐、专辑、播放列表等分享到社交媒体平台,如 Facebook、Twitter、Instagram 等。分享内容可以包括音乐链接、封面图片、简介等信息,吸引更多的用户来使用 Spotify 系统。同时,系统可以跟踪分享的效果,如点击量、转化率等,以便评估社交分享对系统推广的贡献。
|
4月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
62 1
|
4月前
|
消息中间件 算法 NoSQL
面试题Kafka问题之Kafka保证系统的可用性如何解决
面试题Kafka问题之Kafka保证系统的可用性如何解决
41 0
|
5月前
|
Java Linux Android开发
Android面试题之说说系统的启动流程(总结)
这篇文章概述了Android系统的启动流程,从Boot Rom到Zygote进程和SystemServer的启动。init进程作为用户级别的第一个进程,负责创建文件目录、初始化服务并启动Zygote。Zygote通过预加载资源和创建Socket服务,使用fork函数生成SystemServer进程。fork过程中,子进程继承父进程大部分信息但具有独立的进程ID。Zygote预加载资源以减少后续进程的启动时间,而SystemServer启动众多服务并最终开启Launcher应用。文中还讨论了为何从Zygote而非init或SystemServer fork新进程的原因。
80 2
|
4月前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
56 0
|
4月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
55 0
|
4月前
|
设计模式 存储 缓存
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
38 0
|
6月前
|
缓存 监控 算法
Python性能优化面试:代码级、架构级与系统级优化
【4月更文挑战第19天】本文探讨了Python性能优化面试的重点,包括代码级、架构级和系统级优化。代码级优化涉及时间复杂度、空间复杂度分析,使用内置数据结构和性能分析工具。易错点包括过度优化和滥用全局变量。架构级优化关注异步编程、缓存策略和分布式系统,强调合理利用异步和缓存。系统级优化则涵盖操作系统原理、Python虚拟机优化和服务器调优,需注意监控系统资源和使用编译器加速。面试者应全面理解这些层面,以提高程序性能和面试竞争力。
81 1
Python性能优化面试:代码级、架构级与系统级优化
|
6月前
|
Linux 网络安全
CentOS系统openssh-9,网络安全大厂面试真题解析大全
CentOS系统openssh-9,网络安全大厂面试真题解析大全