📜  微软面试经历| IDC 班加罗尔 | 3年经验| 2020 年 1 月

📅  最后修改于: 2021-09-23 05:14:24             🧑  作者: Mango

我被一个大学前辈推荐了。整个过程共耗时2周。
1 轮电话,询问我的经验作为一些基本的 DS 问题。

4/5 天后,被邀请在他们的班加罗尔办公室采访他们。(我已经在班加罗尔了)
4 轮背靠背,中间有 1 小时的午休时间。所有的回合大约持续了 45 分钟到 1 小时。招聘经理回合持续了 2 个小时。

1

他让我自我介绍,然后继续问我以前的项目等。然后他要求在二叉树中找到 LCA。
这是一个相当简单的问题。我首先被要求接近。一旦我告诉他我的方法,他就要求使用白板对其进行编码。编码后,他问我是否可以进一步优化它。他向我暗示了即使在找到 lca 之后发生的额外递归调用的数量。我想出了并编辑了代码以满足要求。在那之后,他让我测试我的代码以及我应该考虑的所有情况。 (尽可能多地使用边缘案例/负面案例。微软痴迷于递归和边缘案例)。他似乎对此很满意。然后他问我这是否是 BST,我将如何处理这个问题。在讨论了该方法后,我不得不编辑代码以运行 BST。 (时间复杂度和边缘案例)然后他继续问我为什么要这么早转换(因为我在 3 个月前加入了另一家公司)以及我是否有任何问题。

第二轮:

快速介绍。设计一个视频推荐引擎,并以歌曲流派和艺术家作为用例。首先讨论方法。我使用简单的树状结构来存储元数据,我的方法是基于歌曲评级和观看时间。她从中问了我很多问题。让我在白板上写下类图。写完类图后,她问我遵循什么设计模式,我将如何扩展它,我更喜欢什么样的存储以及为什么。接下来她问我这个问题:“假设一个孩子在 MS Paint 空白页上画了一个规则的几何形状,写一个算法来识别这个形状。”。她在等我反问她关于各种场景的问题,问题最终归结为在二维矩阵中识别一个形状,其中 0 表示未填充颜色,1 表示填充颜色。我被期望编写模块化代码正确命名变量和函数。她似乎对我的回答很满意。然后她问我是否有任何问题要问她等等。

第 3 轮:

面试官是另一位资深人士。他自我介绍并讲述了他在微软的角色。然后他让我自我介绍,我们就我以前的项目进行了讨论。然后他问:“有一个来源号码和一个目的地号码。您可以继续执行以下任何操作:*2、/2、+2 源。如果目标可以实现,你必须想出是或否”。他让我在白板上写代码。在那之后,他问我这是否是我开发并想发布的应用程序,在发布之前我应该考虑什么。在将其部署到不同环境之前我将进行的所有测试,我将如何确保由于我的应用程序中的递归函数而没有堆栈溢出(我想出了计数器方法)。在对我的应用程序进行负载测试时要考虑的所有事情等。他问了一些关于速率限制、线程同步和锁的更多问题。经过长时间的讨论,他问了我同样的问题,比如我为什么想加入 MS(废话!),为什么这么早切换,以及一些更多的行为问题。

午休

第 4 轮:

面试官是个很资深的人(Director Level),他先问了我一些行为问题。为什么是MS?,为什么这么早离开?等等 。然后我们就我以前的项目以及我在这些项目中的角色进行了深入讨论。然后他问我最小平台数问题。给出方法后,他让我在白板上编码(也问了时间复杂度),然后将其修改为:“假设每个Pi平台都有一个卖茶的人,每个火车Ti都有Xi人登上火车。现在,如果每个乘客在上车前都喝茶,你将如何将列车分配到车站,以最小化茶叶销售商的最大利润差异(假设茶价不变)。这个修改花了我一些时间才明白。起初他表现出一点激动(可能只是想看看受访者如何应对不利情况),但后来我们笑得很开心。我问了一些反问题,最后想出了一种基于堆的方法。他问我时间复杂度,然后让我在白板上编码。 (所有轮次的所有代码都在白板上)。他似乎对我的回答很满意。他继续问一些更多的行为问题。

要点:如果您有任何困惑,请提出问题。大量练习白板编码!对时间复杂度有很好的了解(他们会在你写的每一个代码之后问你)。在测试代码时考虑所有边缘情况。如果不会增加时间复杂度,则首选递归解决方案。

终于在一周后,我接到了 HR 的电话并收到了 Offer !感谢 GeeksForGeeks 帮助我完成准备工作。