📜  微软面试经历 |设置 117(校外)

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

微软面试经历 |设置 117(校外)

我通过 CoCubes 在校外申请了微软软件工程师的职位。选拔过程包括一轮编码、小组飞行和 3 次面试。

第1轮
这一轮有 3 个问题,由 cocubes 主持。我们有 75 分钟的时间来编写代码。

1)给定一个包含整数的数组,零被认为是无效数字,其余所有数字都是有效的。如果两个最接近的有效数字相等,则将第一个的值加倍并将第二个数字设为 0。最后将所有有效数字移到左边。
例如:
输入:2 4 5 0 0 5 4 8 6 0 6 8
输出:2 4 10 4 8 12 8 0 0 0 0 0

2)在给定的链表中,某些节点中包含零值,计算两个零之间的值之和,并用该和替换链表中的零值。
例如:7 0 4 5 6 0 1 1 将变为 7 15 1 1。
零总是成对出现。

3) 给定一个链表,每个节点包含 x,y 平面的坐标。删除中间点。

Input:  (0,10)->(1,10)->(5,10)->(7,10)
                                  |
                                (7,5)->(20,5)->(40,5)
Output: Linked List should be changed to following
        (0,10)->(7,10)
                  |
                (7,5)->(40,5)

第 2 轮组飞
有 2 个问题必须写在纸上。
1)给定一个句子。垂直打印,不使用等量的额外空间。

Input:  "Welcome to Microsoft" 
Output : 
W  t   m
e   o    i
l         c
c        r    
o       o
m      s
e       o
         f 
         t

2) 给定任意的字符词汇顺序“bsazc ... 'ng' ... 'st' ...”

这里 ng 和 st 被视为单个字符。

给你这个订单和两个字符串,你必须输出

+1 是 str1 str2

0 如果 str1 == str2

第三轮
面试官很酷。他让我感觉很放松。他问我关于我的项目是什么

关于强化学习。我回答了他的问题。

然后他给了我两个简单的代码问题。我很容易对它们进行了编码。

1) 打印二叉树的边界遍历。

2) 在 k 个节点的集合中反转一个链表。
他问了我一些极端案例,以及在测试这段代码时我会尝试哪些测试案例。他问我有什么问题,我问了几个。

第四轮
这次面试官似乎很严厉,问我前几轮的情况。

我回答他们很好,但他似乎怀疑我。

然后他给了我一个代码问题。

计算 am X n 矩阵中从左上角到右下角的所有可能路径。

我直接跳到需要 O(m X n) 空间的 dp 解决方案。

然后他说如果我知道这个问题,我说是的,然后他告诉我我应该告诉他我知道这个问题。

他似乎对我的回答不满意,并要求我在更小的空间内完成 O(m)

我这样做了,然后他补充说一些网格点包含障碍物,我们无法通过这些障碍物。

我也解决了这个问题。然后他让我在 O(1) 空间中做这件事。我告诉他我们可以反复做这件事,但这会增加时间复杂度。

他说我编码并告诉他答案。我做到了,但他似乎仍然不满意并问我“你确定这会起作用吗?”

我说我将对代码进行一次试运行,并为此绘制了一个递归树。然后他说时间到了,我应该在外面等。

第 5 轮
这是一轮技术+人力资源。他问了我一个笼统的问题“告诉我你自己”。

然后他问我关于 Unix 中的 grep函数,它在一组文件中搜索字符串。

他问我会用什么方法来搜索一组文件中的字符串。

我告诉他 Tries 和三叉树,我还提到 Windows 执行索引,这使得搜索更快,并且存储在辅助内存中。
然后他告诉我尝试和三叉树存储在主存储器中,并且在重新启动系统后会消失,那么我将如何将它们存储到辅助存储器中。

我告诉他序列化和反序列化过程,并举了一个二叉树的例子。

他似乎很满意,并没有要求我编码。

我要感谢 GeeksforGeeks 帮助我准备面试。

相关练习题

变换数组