第0轮:(在线):20个MCQ+2个编码问题:
MCQs主题:操作系统页面错误、等待时间(RR调度)、分页、信号量等。 DS:散列(基于简单链接的数字) 能力倾向:1道概率题、1道谜题、2道C题等。
共进行了4轮面试(均为技术面试)。每轮比赛持续45-50分钟。
第一轮: 在这轮面试中,面试官问了我以下两个问题。 1.a)给定一个数字,用同一组数字找出下一个更大的数字。( 用同一组数字查找下一个更大的数字 ) 我必须编写涵盖所有边缘情况的完整代码。 因为我练习过这个问题,所以没花太多时间编写代码。
1.b)给定一棵二叉树,将其转换为一棵树,其中每个节点包含原始树中左右两个子树的总和。( 将给定树转换为其和树 ) 对于这个问题,我首先讨论了该方法,确认了边缘情况,然后使用递归编写了代码。
第二轮: 这一轮从操作系统的问题开始。 面试官问了我一些关于进程和线程、进程调度、互斥和信号量以及内存管理的问题。 被问到的一些问题: a) 进程和线程之间的区别。 b) 使用线程的优点和缺点。 c) b/w调度器和调度器的区别。 d) 列出所有进程调度算法,并解释循环进程调度。 e) 一台机器一次最多可以激活多少线程? f) 什么是竞赛条件?我们如何避免它? g) 信号量和互斥量之间的区别? h) 什么是辅助内存?我们为什么要使用它? i) 什么是鞭打?
然后他问了我一些关于计算机网络的问题。 a) 解释OSI参考模型,并写出模型中的所有层以及每层使用的协议。 b) TCP和UDP之间的区别。
最后,他给了我一个问题,并告诉我首先与他讨论该方法,然后编写相同的代码,覆盖所有边缘情况。 问题如下: 你会得到无限的数字流,在任何时刻你都必须打印出最早的非重复数字。 例:2 3 4 2 5 6输出3 2 3 4 2 3 7 8输出4 我和他讨论了我的方法,他告诉我要进一步提高效率,并给了我一些提示。 根据他的提示,我想出了最终的解决方案(使用双链表和HashMap)并编写了代码。 他对它进行了评估,发现了3个错误。
第三轮: 在这一轮面试中,面试官问了我一些关于实习项目的问题。 他让我简要解释一下整个项目,并就同一个问题问了各种问题。
然后他给了我一个编码问题,让我先解释方法,然后再编码。 问题是, 给你一个无限的数字流和一个整数k,你必须在任何时刻打印扫描到的前k个元素。 我解释了使用大小为k的数组,然后在适当位置插入元素,从而确保 数组始终保持排序。复杂性O(k) 他对这个解决方案不满意,并告诉我进一步改进它,即目标为O(log(k))。 我做了一段时间的头脑风暴,然后用一个最小的k大小的堆给了他最终的解决方案。 他还让我 写下最小堆的完整代码 .
下一个问题是关于缓存。 他让我说出不同的页面替换策略。 然后他问我,” 您将如何实现LRU缓存“? 我告诉他,它可以使用优先级队列来实现。 然后,他就优先级队列、其内部实现和复杂性对我进行了盘问。 他没有要求为它编码。
第四轮: 面试官给了我45分钟来解决下面的编码问题。
你会得到一个无限的数字流,在任何时刻,你都必须打印到那时为止扫描的元素的中值。
这里的数组中值是指排序后数组的中间元素。 首先我告诉他,我将维护一个排序数组,因此插入顺序将是O(N),查询顺序将是O(1)。 他让我进一步优化它。 我曾想过使用堆,并试图在插入和查询时实现O(log(N)),但后来他告诉我,它可以进一步优化。 他让我分别针对O(log(N))和O(1)进行插入和查询。 突然我想到我可以利用minheap和maxheap来解决这个问题。 我和他讨论了我的方法。他印象深刻。
最后我对问题进行了编码。 最后,他问我:“如果按顺序遍历BST,你能构建这棵树吗?”?我告诉他是的。然后他问我,“有多少这样的树是可能的”? 我知道这个问题的答案,因为这是课堂上教的。 我告诉他加泰罗尼亚的号码。
判决:从33名受访者中选出3名。
如果你喜欢Geeksforgek,并想贡献自己的力量,你也可以写一篇文章,然后把你的文章发到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。