📜  微软面试经历 |第 54 组(用于 SDE)

📅  最后修改于: 2022-05-13 01:58:27.294000             🧑  作者: Mango

微软面试经历 |第 54 组(用于 SDE)

第 1 轮(45 分钟):
说说你自己。

1. 给定一个以RGB为字符的字符串数组。对数组进行排序,使所有 R 排在第一位,然后是 Gs & 然后是 Bs。在O(n)时间复杂度内完成。 (纸码
例如。数组是:
输入/输出:GGRBRBBGRBR
O/P:RRRRGGBBBB

提示:与排序 0、1 和 2字符串的问题相同。

使用与立即排序 0、1 和 2 相同的逻辑完成。面试官很高兴。 *:) 快乐的

2. 你能在O(n)的时间复杂度中使用单链表 (SLL)双链表 (DLL)执行上述相同的程序吗?

使用 DLL 轻松完成。
但是使用 SLL 我被卡住了,因为我们每次都必须跟踪 PREV 指针。如果可能的话,他希望它在一个单一的通行证中完成。无法为 SLL 执行此操作。


第 2 轮(1.30 小时):

告诉我你参与过的项目。

1. 2 个矩阵的矩阵乘法。这两个矩阵都分布在节点集群中。矩阵很大( BigData )。如何有效地将这些矩阵相乘。他只想知道方法,而不是实际的代码。
(他问我这个分布式问题,尤其是因为我在我的项目中研究过Apache Spark 和 Hadoop 分布式架构。所以他非常热衷于检查我在分布式和大数据领域的知识。)

提示:考虑MapReduce作业。

我的方法:众所周知,在矩阵乘法中,第 i 行与第 j 列相乘,第 (i+1) 行与第 (j+1) 列相乘,依此类推,直到第 (n-1) 行与 ( m-1) 列。

将第 i 行映射到第 j 列,第 (i+1) 行映射到 (j+1) 列,依此类推,直到第 (n-1) 行映射到 (m-1) 列。
这个想法是将键作为行索引,将值作为列索引。
在进行Reduce操作时,使用上面的 Mapped Rows & Columns 将相应的行和列相乘。 B'coz 通常在 MapReduce 作业的 Reduce 操作中,Spark/Hadoop 将所有映射的数据带到一个服务器中进行计算并存储结果。所以在Reduce操作中,Spark/Hadoop在做实际乘法时只会带上映射的Row & Column。我们不需要一次带来所有行和列数据。

这是我的方法。人们也可以考虑另一种方法并分享他们更好的方法。

后来他更详细地向我询问了 MapReduce 工作,并询问了我有关 Hadoop 和分布式架构(NameNode、DataNode 等)的信息。关于可扩展性的一些问题。

2. 给定一棵包含数千个节点N 叉树配对(加入)不共享公共路径的叶节点。即两片叶子只有在它们没有相交路径时才能配对。

例如,

A
    /  |  \
   B   C   D
 /   / | \
E   F  G  H 

叶节点:E、F、G、H 和 D

O/Ps 中可能的对:
a) (EF)、(GH) 或
b) (EG)、(FH) 或
c) (EH)、(FG) 或
d) (ED)、(FG) 或
e) (ED)、(GH) 或
f) (ED)、(FH) 或
g) (DH)、(FG) 或
h) (DG), (FH) 或
i) (DF), (GH)

注意:如果我们配对(加入)比如(EF) ,那么我们不能配对(DG)(DH)中的任何一个,因为它们共享从 A 到 C 的公共路径。
即 EBACF —> (EF) 对
DACG —> (DG) 对
DACH —> (DH) 对

所以上述情况是不可能的。

此外,如果有偶数个孩子,那么恰好 n/2 对是可能的。如果 Childs 的数量为奇数,则其中 1 个 Childs 将被保留为Unpaired

我已经告诉他使用BFS准确地遍历每个 Edge ONCE 。这个想法是在进行 BFS 遍历时,如果访问节点的两个子节点都是叶节点,则对访问节点的子节点进行配对。
如果访问节点只有一个子节点(仅左子节点或右子节点),则将此子节点存储在 TEMPORARY 数组(指向子节点的指针数组)中。
一旦 BFS 遍历结束,将TEMPORARY数组中剩余的子节点一一配对。
由于 BFS 工作LEVEL-WISE ,他再次不满意。所以他告诉我,如果某些节点有数千个节点的SKEWED子树怎么办。
我被困。 🙁

他告诉我应用数学归纳法
如果我们可以证明基本案例至少可以配对2K个孩子。然后我们对2K+2, 2k+4, , , , , , ,2K+n Childs 进行配对和证明。
我对 MI 概念一无所知。
无法解决此问题。 🙁

他对我使用 MapReduce 的第一个问题的方法印象深刻 *:) 很满意。他对第二个问题的方法有点满意。所以我被转发到第三轮。

午餐时间。太好了。食物太好了。真的很喜欢。

第三轮(50分钟):

他很快就看了我的简历。然后他让我谈谈我从事和从事的项目。由于我主要从事机器学习NLP领域的工作,他问了我几个关于NLP的问题。您将如何扩展您当前的项目。

1.给定一个句子,逐字反转。
例如,
I/P:“Microsoft Azure 是最好的云解决方案之一”
O/P:“解决方案云中最好的是 Azure Microsoft”

太简单。在 GFG 上给出。 🙂
一下子就搞定了。
他让我一次性完成。由于该解决方案需要2 次 PASSES的句子。 (第一个用于反转每个单词,第二个用于反转整个句子)。
被困。 🙁 想了很久。无法做到这一点。最后他又问了我一个问题。

2. 检测单链表中的循环。 *:) 快乐的
鉴于 GFG 方法。他很高兴。

3.移除上面 SLL 中的 Loop。
再次给出相同的 GFG 解决方案。 🙂

我被告知要等待第四轮和最后一轮。


第 4 轮(设计轮):

你对云计算了解多少。
您对Microsoft Azure有什么了解吗?

DropBox云存储一样设计一个WindowsBox

使用面向服务的架构 (SOA)提供所有服务IaaSPaaSSaaS
给出了非常低级的设计。不符合他的期望。因为我之前没有从事过云技术。 🙁
在这一轮中表现不佳。 🙁

建议
准备设计问题和可扩展性
可以通过此链接:https://www.quora.com/How-should-I-prepare-system-design-questions-for-Google-Facebook-Interview
注意这个视频。这很好。
他们寻找数据结构和算法的基础知识。 (尤其是链表和树)

最后,GeeksForGeeks 是所有人的最佳来源。 GFG 真的帮了我很多准备。

谢谢🙂

微软的所有练习题!