职位:软件工程师 – 2(大数据团队,班加罗尔)
我是通过推荐申请的。一周内接到电话。
第 1 轮(Skype-班加罗尔)(~45 分钟)
面试官直接让我解释一下我目前的项目。从那里开始 5-6 个问题。
我的项目是基于云计算的,所以他问了我一些关于云计算的基本问题。关于
三层(IAAS、PAAS、SAAS)等。
CloudStack 和 OpenStack 的区别(CloudStack(CS),我正在做的产品)。
OpenStack 是一个类似的产品。使用 CS 的场景(客户如何从 CS 中受益)。
然后,他转到了算法部分。您将如何区分问题与 google code jam 和
facebook黑客杯(因为我参加了两个比赛)
他让我给他一个问题。我告诉,要查找字符的字符串,最长的回文子。
然后,他问我解决方案,给出了 Manachar 的算法。问算法细节面试官和时间、空间复杂度。
第 2 轮(F2F-班加罗尔)(~1 小时 15 分钟)
面试官从我的介绍开始。然后他扫描了我的整个简历,所有的项目,
甚至涵盖了我的学校项目等。
Java和 C++ 的区别。各有利弊。
您最熟悉哪种语言。给自己打 5 分。
之后他问,运行时多态性如何在 C++ 中工作。 C++ 如何解决它。我解释了
虚拟的东西和相关的 VPTR 和 VTABLE。
然后,他问了我上一个项目的细节。项目中的一些问题。
他转到了算法部分。
Q-1:给定 MxN 二进制矩阵,找出最大的全为 1 的子方阵。
我想出了一个DP解决方案。他让我先解释算法,然后让我在纸上写代码。我留下了一些验证案例,所以他要求处理这些,然后问我关于时间、空间复杂度和编写所有测试案例的问题。
Q-2:在 MxN 二进制矩阵中找到包含最多 1 的行,其中每行 0 后面总是跟着 1。给了他二进制搜索算法,但他让我进一步优化。然后,我想出了 O(M+N) 的步进线性时间算法。 (同样,要求先在纸上写代码,然后是测试用例)。时间和空间复杂度。
第 3 轮(F2F-班加罗尔)(~1 小时)
面试官从我的介绍开始。这是一种设计回合。
他让我设计你自己的 BitSet API。所有的方法,如flip、set、reset、countOnes等。
您将使用什么数据结构。然后,他设置了一个约束,比如如果多个线程访问
方法。我给出了使用互斥锁的解决方案。他问我信号量和互斥量的区别,然后
如何处理死锁情况。我说过要分两阶段维护锁。 (增长和缩小
阶段)。然后问了实现细节。将所有代码写在纸上。测试用例和时间、空间
每个操作的复杂性。
Round-4(F2F-Bangalore)(~1小时)
介绍。为什么是微软,你为什么要离开,问我上一个项目的细节。
然后他让我在白板上设计 LRU 缓存。要求编写用于搜索密钥的代码
在 LRU 上。像往常一样,时间、空间复杂度和测试用例。
算法问题:
检查给定的二叉树是否是二叉搜索树?如何处理多线程情况?
对此进行一些讨论。在白板上写代码、测试用例并询问时间、空间复杂度。
Round-5(F2F-Bangalore)(~45分钟)
介绍,询问产品。要求绘制产品的架构。对架构的每个组件的一些讨论。您在当前工作之外探索的内容。我谈到了 docker 容器。对此进行一些讨论。详细介绍了他们的工作。对职位有什么期望,等等……
Round-6(Skype-Redmond)(~45分钟)
它从我的介绍开始。面试官问了我目前项目的细节。
项目持续了多长时间,有多少成员参与?
使用了多少种编程语言?你知道多少种编程语言?
你最舒服的是哪一种?评分为 5。
然后他问我 C++ 中类和结构之间的区别。如何在 C++ 中实现接口。
等等..
算法问题:
给定两个按升序排序的链表,将它们合并为一个链表(维护排序)。就地做。他让我在文本编辑器中写作,分享我的屏幕。让我列出所有测试用例,以及时间、空间复杂度。
Round-7(Skype-Redmond)(~45分钟)
介绍。问我项目详情。对此进行一些讨论。
算法问题:
用有限的内存对 10 亿个整数进行排序。我告诉他们一个块一个块地排序,然后
合并。然后他问我如何决定块大小。我用一个例子来解释。询问时间
复杂。然后,询问如果我们有无限内存,这是否需要相同的时间。一世
讲述了主内存和二级内存的访问时间差异。询问详情
二级内存,关于磁盘技术,扇区,寻道时间,旋转延迟等。
Round-8(F2F-Bangalore)(~45分钟)
再次从我的介绍开始。他问了我的项目细节。他是该团队的工程总监。
算法问题:
查找具有有限内存的无限整数流的中位数。我想出了一个解决方案,让我们拥有无限的记忆。我从插入排序开始,然后优化到最小堆和最大堆方法。但他更感兴趣的是有限内存算法。我很努力,但想不出一个。他让我在白板上为我的解决方案编写代码。照常要求写测试用例,时间和空间复杂度。