微软面试经历 |设置 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 帮助我准备面试。