微软苏州STCA 暑期实习提前批面经

微软的一面与二面属于平行面,通过其中一场即可参加三面(即终面)。因为我通过了一面,所以没有经历二面。

一面

HR把我分到了搞NLP的组,而我简历明显偏系统啊😅。所以面试官开场就先简单介绍了组内情况(也招研发、也有ToB项目),问我需不需要联系HR换组😅。我:来都来了,重新安排也麻烦,反正都是研发,NLP组也👌。

自我介绍之后,面试官仔细问了我介绍中的内容(本科毕设和在导师公司实习搞的区块链项目)。然后抓着我简历上大三做的操作系统项目(MiniOS,ZJU的操作系统课设)问了半天,我也没敢说当时自己是被大佬带飞的😅。不过幸好自己对RISC-V还有一些模糊的印象,瞎吹了一会儿什么Machine Mode、Supervisor Mode、User Mode,Mode之间转换要设置一段内存等等😅。

随后就是写题啦,Leetcode 43. 字符串相乘。我的做法很naive,就是模拟竖式乘法,和面试官大概描述了一下思路就开始用Java写代码。其实之前刷过这题,所以写的时候特别注意避开了一些坑。总共写了大概70行代码,其中实现的大数加法部分有些代码重复,我自己给指出来了,面试官说了他觉得可以改进的思路,但是没要我改。

最后还剩大概15分钟,真正的痛苦开始了😅。我一直以为外企不怎么问八股文的(毕竟字节新加坡两轮面试可是一道八股文都没问),没想到该来的还是来了😅。面试官看我写代码用的Java,就问我Java的内存回收机制,我:我其实平常Rust写的多,只是刷题的时候用Java😅😅😅,因为Rust刷题太麻烦了,所有类型转换都要显式标明……但是我还是扯了一下已经淘汰的引用计数😅。然后面试官问我页面置换算法,不过很快又改问进程调度算法,我凭借自己模糊的印象描述了一下Round Robin、SJB、FCFS、Priority等等算法的思想和缺陷😅。最后还问了我封装、继承、多态,我:磕磕绊绊绞尽脑汁支支吾吾编了些概念,期间甚至扯了一些英语😅😅😅😅。然后我赶紧转移话题说继承不好,很多语言比如Rust和Go都用组合替代继承啦balabala😅😅😅,本还想举个例子的,但是大脑已经完全空白,就放弃了😅😅😅😅😅😅😅😅😅。

随后就是按惯例的反问,随便问了些问题后面试结束。

三面

面试官同样还是NLP组的。简单介绍之后,面试官对我关于区块链的项目很感兴趣,谈笑风生了大概15分钟。随后写题:k-means😅😅😅。虽然真的很简单,但是我还是磕磕绊绊写了快半个小时,不过代码应该是没啥问题的。

写完k-means时间就差不多了,直接进入反问环节,面试官说最好要了解一些算法🥲。

时间线

  • 1.17 一面(没错,在字节的day1我就跑出去面试了)
  • 1.21 三面
  • 1.25 收到数据补充邮件
  • 1.29 收到conditional offer(要求5.23前回国)