二月份拜托一位学长帮忙内推了一下微软上海,等了很久才收到了一封“2018 微软预科生计划邀请函”,我是面的是 Software Engineer-C+E 岗,基本上就相当于开发岗。最后还是在课堂上做完了笔试,没想到居然过了,也算是运气好吧……有幸去了紫竹园区参加了三轮面试,在这里做一篇面经,简单分享一下自己的三轮面试感受。

流程

微软面试一般是 2-3 轮,每一轮持续一个小时的一对一 PK。前两轮一般是你所申请的对应 Team 的两名技术人员来面,最后一轮则是一个 Leader,如果你过了,那么大概率就是你在实习时候的 Mentor。

每一轮的流程基本上都是一样的,首先是一个 2-3 分钟的简单自我介绍。建议是准备一份英文的稿子记住,我第一轮用的英文,之后面试官就没有要求英文了。之后会询问你的简历上的内容,主要会结合你在自我介绍时候说到的你感兴趣的方面,来问 1-2 个项目。感觉微软算是比较看重比赛这方面的经验的,前两轮都问了我的数学建模参赛情况,然而我已经忘得差不多了…… 除了项目方面的话,最后一轮的 Leader 问了我关于 AI 的看法,最奇葩的是第二轮的面试官看见我说自己对 Machine Learning 比较感兴趣的话,为什么没有在我的 GitHub 上 Star 一下 Tensorflow……(后来回来看发现真的没 Star 囧……)

总的来说,微软面试感觉真的是的确很棒,因为在面试官的点播和提示之下,你解决了很多新颖的问题,但是用到的东西却是你曾经在课本上学到的,或者在竞赛比赛实践生活中掌握的知识。而且和面试官交流也会涉及不仅仅代码方面,比如我和第一轮的小哥还聊了一会儿音乐哈哈哈哈哈。

题目

题目的话,有两道给我印象比较深刻,第一个是第一轮的第二道问了我这样一个问题:

1
假设给你一份音乐乐谱,使用一种 Machine Learning 的方法,来尝试找出它对应什么调。

我当时想到的是用神经网络来做,然后就需要考虑怎么处理数据集啊,比如归一化啊,就讨论了很久……

第二轮问的题目比较有意思:

1
2
3
给定一种数组
a = [1, 2, 4, 5, 2, 8, 7, 1]
其中 1 <= a[i] <= len(a),且每一种元素最多出现两次,求其中出现了两次的元素。要求 时间复杂度O(n), 空间复杂度O(1)。

这道题的关键就在于1 <= a[i] <= len(a),那么我们考虑元素把出现的次数,存在数组a中对应的下标的位置。我考虑的是把每一个元素最后补上一位,用来存放次数。其实更简单的一种方法是,把对应的下标位置的元素变为负即可,因为这里题目有限定说每一种元素最多出现两次……


下周出结果,不过感觉自己第三轮的时候,没有把深搜写好…… 感觉是凉了。不过也算是一次很好的锻炼吧,最后放一张紫竹园区门口的夕阳~不知道还有没有机会再见呢👋

ms