整个过程包括一轮在线面试、一次集体飞行、几次技术面试,以及对高级经理的f2f面试。
在线编码回合:
这一轮有3个问题,在cocubes平台上进行。我得到的问题是:
- 给出一张车号和日期的清单,返回从这些车上收取的罚款总额。如果日期是奇数,每辆偶数车将被罚款250卢比,反之亦然。(2分)
- 中缀表达式的计算。 (3分)
- 从n位数字中去掉k位,使形成的数字最小。类似 这 (5分)
CGPA(9+)良好或至少做了2道题的人进入下一轮。
集体飞行:
大约有22人参加了小组的飞行,其中15人被选中接受采访。在这一轮中,我们得到了两个问题,我们必须与导师讨论该方法,并在页面上编写一个可编译的代码。问题是:
- 检查两个给定的二叉树是否是彼此的镜像。可以找到解决方案 在这里 .
- 给定一个文本和一本词典,检查文本是否可以被分解成属于词典的单词。如果你能告诉你有多少种方法可以做到这一点,你会得到额外的分数。这可以通过递归方法(没有DP)完成,但这需要指数时间。我们被期望在空间和时间上优化该方法。可以找到解决方案 在这里 .
尝试用大量注释和适当的变量名编写干净的find。他们还考虑了您是否给出了迭代方法或递归方法(迭代方法更可取,因为它速度更快,但最终没有太大区别)。
技术采访:
我进行了3次技术面试,尽量与面试官互动。如果你给他们一个蛮力的方法,确保你告诉他们有什么问题,然后再跳进一个优化的解决方案。
第一轮 :这一轮的所有问题都基于数组。
我得到的第一个问题是在一个大小为k的窗口中计算不同数字的数量。可以找到解决方案 在这里 在得出O(n)解之前,我给出了2-3种时间和空间复杂度的方法。
接着,他让我在大小为k的窗口中打印最大的数字。可以找到解决方案 在这里 .我必须为这个问题编写一个可编译的代码,我使用“出列”解决了它。他还要求我创建测试用例,并对代码进行试运行,我的评判标准是我是否能想到我的方法中的关键案例。
第二轮 当前位置这一轮的问题错综复杂。
第一个问题是基于二进制搜索的,只是为了热身。他问了我几个关于字符串的问题(比如带有唯一字符和LCS的最大子字符串),但我告诉他我以前见过它们,所以我们转到了动态编程问题。
在下一个问题中,我得到了一个布尔数组,其中[I]=1表示第I个位置是安全的,而[I]=0表示第I个位置包含炸弹。给定初始速度k,在到达安全点后,你可以将我的速度增加或减少1,或者保持不变。你可以在数组中精确移动k步数,其中k是你当前的速度。如果你到达阵法末端,或者你的速度在任何安全点变为0,你就赢了。如果你踩到炸弹或超过阵型大小,你就会死亡。你能以多少方式赢得这场比赛?我先给了他一个递归的解决方案,然后尝试用动态规划的方法来解决这个问题。除了几个角落的案子,我可以解决这个问题。
这一轮的最后一个问题是基于树的,我得到了一个二叉树,其中节点包含一个0-9范围内的数字,因此从根到叶的每条路径都可以被认为是一个n位数,其中n是路径长度。我必须找到所有路径的总和。由于总和可能溢出,我不得不使用模运算。后来他让我为同样的东西写一个可编译的代码。
当我解决这些问题时,有人问了我一些关于我的项目的问题。这些问题通常与身份验证(会话和令牌)和数据库有关。
第三轮: 这一轮相当简单,我被问到了一些基本问题。
首先,我被要求编写一个代码,用星号(*)打印金字塔图案。后来,星号被帕斯卡三角形所取代。
最后,我被要求编写一个返回通用树高度的代码。
最终面试:
这与其说是一次采访,不如说是一次互动。我和高级经理讨论了微软正在进行的各种项目,他向我展示了他正在做的项目。他很友好。
最后,在花了15个多小时的面试后,我被选中了,和我学院的其他5个人一起!