这是我在采访中遇到的一个问题。这有点难以解释,请耐心等待。
想象一下铁路票务柜台。
您是保安人员,现在您可以选择在新柜台处理谁。
计数器标记为1,2,3和4(蓝色方框)。排队的人被标记为A,B,C等。首先是A,然后是B,然后是C等。
我被要求给出答案和答案背后的逻辑。 面试官不断就我的答案提出更多问题。
例如 - 当我说,
采访者辩称说E和G是如何获得相同的偏好(优先级)。
经过几分钟的争论后,我告诉我这似乎是一个简单的调度问题,如果有一个共同的队列并且安全警卫将队列中的下一个人发送到FCFS之后的空闲计数器,这个问题很容易解决。
然而,面试官并没有留下深刻的印象。
我错过了不同的方法吗?回答这些问题的正确方法是什么?
PS:我没有通过这一轮:(答案 0 :(得分:3)
如果人们按字母顺序排列并且每个人大致在同一时间内获得服务,那么IMO最多"公平"解决方案是将模式D
移至新计数器,在E
之后移动A
,在F
之后移动B
然后让G
和{{ 1}}进入,即:
H
逻辑是,由于1 2 3 4 1 2 3 4
---------- ----------
A B C >> A B C D
D E F E F G H
是第一位的,所以应首先提供服务,因此A
会更快地站在E
之后,而不是站在A
之后
从评论中更新: 为了避免很多动作:
B
排队的四个人:
1 2 3 4 1 2 3 4 1 2 3 4
---------- ---------- ----------
A B C >> A B C D >> A B C D
D E F E F G E F H
G H
答案 1 :(得分:2)
我的建议是
D-> 4,E-> 1,F-> 2,G-> 3,H-> 4
前提是每个人在柜台服用相同的时间。这样每个人都将按正确的顺序处理。
如果每个人在计数器上花费不同的未知时间,那么队列是唯一有效的解决方案(除了每次有人处理时切换线路,这实际上是相同的。)
答案 2 :(得分:2)
鉴于我在这个主题中的背景和业内多年,而不是我在这里承认...... :-) ......我假设你为什么没有进入下一轮:这不是一个程序设计问题,而是行为问题。
这类面试问题通常不是关于解决方案,而是关于解决问题的方法。我(面试官)给了你几个开放可能性的问题。首先,这显然是"显然"操作系统多处理情况的隐喻。
我想要一个理想的候选人有了对问题的更好描述,现在我希望您通过解决方案,始终如一地吸引客户(我)参与一般方法和具体细节。例如,这是敏捷方法的关键部分。另外,我想看看你如何解释我不理解的事情。
请注意,第2项非常非常重要:如果您的真正客户是在轮班结束时退休的腐败保安人员,那么正确的解决方案可能是举行贿赂竞标战进入公开柜台。
这是你的下一次面试的作业:为了使你的解决方案成为一个好的解决方案需要哪些假设?如何与客户验证这些假设?
我的直接问题包括以上问题,以及......
这是我的打字赶上了我的思维过程,停止的公平点。