博主背景
中流985软件工程专业本科,acm银牌选手,无实习经历,无项目。
先介绍一下微软比较看重的能力
这些部分是我在和一起参与面试的人沟通的时候了解到的,和大家做个分享,希望能帮助到各位。
代码能力
这个不用多说,代码能力越强越好。
沟通能力
这个点是很重要但是很容易被人忽略的一个点(包括我)。在和面试官交流的时候一定要自然主动的去做沟通,尤其是在做题的时候,要把自己的思路去展现出来。遇到不会做的题可以和面试官交流,面试官会给提示,注意一定要get到他的点,get不到的话可能就得凉凉。
快速学习能力
学历并不是最重要的东西,学历只能保证你能有面试机会,微软比较看重你的快速学习能力,而不是你已经知道了哪些知识,985本科就已经够用了,剩下的就看你的算法能力,思维能力和情商等等。你需要表现给面试官的是快速的上手并学习思考的过程。同面试的兄弟有题做的非常好,但是最后面试官说了一句,看得出你刷了很多题,然后给挂了的。所以我感觉若是遇到你做过的题,不要太飘。
思维习惯和情商
群里不少华五本硕也一样被挂掉了,有些可能只是因为和面试官沟通的时候没那么愉快。微软希望看到的是一个聪明有灵性有情商的人,而不是刷题机器和老卷王。你需要给面试官表现出你是一个遇到一个新问题能有自己的思考和一套解决问题的逻辑和办法的形象,这就需要同学们平时生活中多多思考了。
做题的一些须知
微软的大头是做算法题,而面试官的要求不可能只是能够做对。他对你会有更高的要求,要学会优化代码,包括时间和空间。很多同学平时写题可能觉得能AC就行了,但是面试的时候面试官是不太会在意你的代码能不能AC(因为是面试官肉眼评价,根本不会上评测机),而是需要你一步一步按照他给的指示去思考,去优化你的算法,减少空间和时间。
接下来是我的两轮面试分享
一面(平行面,没过进入第二面,否则直接进入终面)
博主一面直接过了,因此无二面。一面遇到的面试官准备了两道题,难度第一题如果没有做过的话难度应该在接近hard水平,第二题是个medium的常规简单题。接下来是整个面试流程。
做题方式是共享屏幕,用自己的IDE写代码和调试。
自我介绍
没啥好多说的,就是花了两三分钟做了一下常规的自我介绍。
第一题
给你一个int数组,让你找出最大的没有出现在数组中的负整数。
上来我有点紧张,他一开始没有要求复杂度,因此我直接用最简单的哈希去写了一波,时间和空间复杂度为O(n)。
写完之后面试官问了我个问题:为啥数组大小开1e6+5?这个数字有什么意义吗?
答:因为打竞赛的习惯,如果数据范围是1e6,那如果只开1e6很容易在边界产生问题,因此开大一点可以保证不出问题。
随后面试官问,你这样的复杂度是O(n)的,那是否可以把空间复杂度优化到O(1),只开常数级别的额外空间?
上来懵了,因为没做过这种题。但是思考的过程中其实和正解擦肩而过,比较可惜。思考一阵子无果之后,和面试官说没什么思路。
面试官回:你刚刚的做法是哈希,那如果不允许开额外的空间,那是不是可以在原来的数组上原地哈希?
思考一波,终于明白了,做法是把 -i swap到下标为 i 的位置。里面有一些细节,所以第一次写的时候写的很乱,写完了给面试官看,面试官马上找了一个反例,然后我继续调试了一波。调试完了之后面试官看了我的代码,问我当中一个 if 中什么判断条件其实是多余的。想了一下告诉了面试官,第一题就结束了。
第二题
给你n个正整数,让你取一些数出来,使得和最大,要求不能取相邻的两个数
简单的dp,上来直接秒了,没什么好多说的。
写完后面试官和我说,我的代码数组下标都是从1开始,我和他解释这是我们竞赛经常这样写,目的是为了第一个数的初始化不用特判。他说以后工作写代码的时候还是得从0开始,不然可读性和空间浪费会是问题。
反问环节
结束前面试官问我什么想问的问题吗?我问面试官觉得微软最吸引人的地方是什么。面试官笑了笑,说人和人的关系非常简单,没有那么多勾心斗角,你可以很自我,很个性。然后说你来了以后自己体会balabala的(原话是这么说的,那一刻瞬间觉得一面稳了没挂23333)。
终面
终面大概是做了点自我介绍,然后问了一下项目(然而我并没有什么项目,随口说了一下作业),估计是看我没啥项目好问的,直接开始做题了。
做题方式:面试官给了个链接,是一个共享文本,不是IDE,在上面写字面试官能看到内容。
自我介绍
常规介绍,两三分钟。
做题:最近公共祖先(力扣236)
遇到这道题我可乐了,运气好抽了个简单题。面试官问我有没有做过这题,我说我做过类似的。
上来先讲思路,我的思路是像倍增法一样先把两个节点跳到同一个高度,然后一起网上跳。所以第一遍dfs记录所有点深度和父亲节点。
写完后面试官让一行一行解释代码。完事之后问我有没有什么办法减少内存使用,比如我现在用了俩哈希表,能不能减少一个。
但是我一开始没get到她的意思,自己想了另一个思路来减少一点内存开销。还有一种思路就是从根节点到两个点的路径的公共前缀的最后一个元素就是LCA。直接dfs的过程中记录这两条路径,我说这样内存大概可以减少一点,面试官告诉我说不只是一点点,是很多了。
后来面试官才告诉我她本意是,我不需要记录每个点的深度,只需要记录那两个就行。不过我直接换了种思路。
接下来问我,如果不用递归怎么写。我回答:那就是用栈去模拟搜索这棵树的过程,然后大概思考了一下给了做法,面试官提出了一点小问题但是说思路是大致对的,也没让写代码。
最后的问题是我写的两种思路各有什么优缺点。答:第一种思路因为预处理了很多数据,所以如果后续有更多的查询可以充分利用这些处理好的数据去减少时间开销。第二种没有常驻内存的数据,因此对空间的占用比较少。
反问环节
我问了面试官的组是做什么的。文章来源:https://www.toymoban.com/news/detail-448737.html
面试后续情况
2022.1.26
已经发了data collection,大概率是中了,等后续情况吧。
2022.1.28
成功拿到offer。不过地点是在北京。文章来源地址https://www.toymoban.com/news/detail-448737.html
到了这里,关于微软 苏州STCA 2022暑期实习生 平行面+终面 面经的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!