第 1 轮:机器编码轮(1.5 小时)
我得到了以下问题陈述,并要求我使用任何选择的编程语言来实现它。他们希望代码是生产级的、模块化的并且没有错误。在此之后,对代码进行了一轮评估。他们在所有极端情况下测试了代码,并要求我修改代码以满足我能够轻松完成的新需求。
作业调度器
一个作业调度器,用于在一台机器上的 N 个线程上调度 M 个作业。输入包含以下数据:
- 职位名称
- Duration:完成工作所需的时间
- 优先级:作业的优先级。 P0 > P1 > P2
- 截止时间:过期后不应运行作业(时钟从 0 开始,截止时间为实际时钟时间)
- UserType:发起任务的用户类型,用户优先级Root > Admin > User
有各种调度算法-
最短作业优先 – SJF
Shortes job first (SJF),是一种调度策略,选择执行时间最短的等待进程下一个执行。在平局的情况下,请按照以下顺序选择工作-
- 优先级(优先级高的作业先被调度)
先到先得
工作按先到先得的原则执行。将输入作为需要安排的作业顺序。
固定优先级调度-FPS
每个进程都被分配了一个优先级。优先级最高的进程将首先执行,依此类推。在平局的情况下,请按照以下顺序选择工作-
- 用户类型
- 最长作业优先
最早截止日期优先 – EDF
下一个工作将根据最接近其截止日期的工作进行搜索。如果是平局,请按照以下顺序选择工作——
- 优先级(优先级高的作业先被调度)
- 持续时间(较短持续时间的工作首先被安排)如果我们不能安排一个工作,使其在截止日期之前完成,那么它应该被忽略。
您将获得一份作业列表(有关格式,请参阅下面的示例)和线程数作为输入。您应该打印为每个线程上的每个算法安排的作业顺序作为输出。
例子
输入
Threads= 2
Job Name | Duration | Priority | Deadline | User Type |
---|---|---|---|---|
J1 | 10 | P0 | 10 | Root |
J2 | 20 | P0 | 40 | Admin |
J3 | 15 | P2 | 40 | Root |
J4 | 30 | P1 | 40 | User |
J5 | 10 | P2 | 30 | User |
输出
SJF
Thread 1 - J1, J3, J4
Thread 2 - J5, J2
FCFS
Thread 1 - J1, J3, J5
Thread 2 - J2, J4
FPS
Thread 1 - J1, J4, J5
Thread 2 - J2, J3
EDF
Thread 1 - J1, J2
Thread 3 - J5, J4
第 2 轮:PS-DS 轮(1 小时)
这是一个问题解决和数据结构相关的回合。
面试官用工作代码问了我以下问题。
- 在任何时间点,从无限数的传入流中找到最大 k 个数的平均值。我使用 k 大小的最小堆解决了这个问题,并维护了一个sum变量来找到平均值。每次插入 min-heap 将元素添加到sum ,对于 min-heap 的每次删除,从sum 中减去元素。得到平均回报总和/no。的元素。
- 将给定堆栈的内容以相同的顺序复制到另一个堆栈,而不使用额外的空间。
- 雨水收集问题。 https://www.geeksforgeeks.org/trapping-rain-water/
我解决了上述所有问题,我的面试官很满意。
第 3 轮:招聘经理轮(1 小时)
HM就我最新的项目和我在项目中用到的技术进行了深入的讨论。他也问了我很多行为问题。
几周后,我收到了offer。