【粉丝投稿】机器马大佬的微软面经

语言: CN / TW / HK

目前是站在面试已经过去3个月的时间点写这篇面经, 微软其实一直是 我心中的理想公司 ,最主要的两点是 WLB和transfer机会,但是 最后我没有选择微软,具体原因之后讲如何选offer的文章会提到.

这篇主要讲一下微软的面试流程和面经. 我面的岗位具体是Azure的后端开发工程师,技术栈是.NET. 但是会不会.NET并不影响面试流程,我完全没有相关经验一样拿到了offer. 

微软面经(已offer)

一面(60分钟)

本来没想过能进微软,一面根本没复习,直接摆烂了。微软按组匹配的,面试官全是同一个组的,也就是说未来会是你的同事和上级。

面试官是一个小姐姐,先让我自我介绍,主要问了项目,然后说切换到英文,问了俩项目问题。

做了一个算法题,合并两个有序链表,用迭代方法写完的,然后问我递归怎么写,写完递归测完,问我如果两个链表都是逆序的怎么办,我说反转之后合并再反转。这个时候面试到了55分了,问我有没时间写一下反转链表,3分钟秒了。

反问环节:

问了一下面试官微软面试要不要求bug free. 面试官说没有这个要求,但是如果是面试官帮你发现bug肯定会有一定影响,自己CR出来的就无所谓.

第二天HR通知我面试过了,问我周四全天有没有时间,我说有,然后周四约了4连面,10-11点,11-12点,2-3点,3-4点

二面 - 四面

同一天面的,具体问题记得不太清楚了,每一面都是项目+算法,算法题一般都给2-3题,先给一个简单的然后问follow up。三面是先做的算法题,然后才问的项目。中间问了几个2面和4面都问了两个英语问题。主要也是关于项目的。

记得的题目

  1. 有序数组二分法搜索

    1. 旋转有序数组二分法搜索

    2. 旋转又重复有序数组二分法搜索

  2. 两个有序数组找两边都出现过的数字

  3. 两个字符串,判断两个字符串是否能通过旋转match(是否能通过旋转从a变成b)我一开始想得很复杂,通过双指针进行判断,后来其实不用,把s1复制一次然后如果s2是通过旋转产生的则肯定在s1出现过。 kmp就行。

  4. 一个小插曲

    三面的时候有个算法题出了个很简单的问题, 但是我当时有点慌, 我直接用IDE开启debug模式, 一秒钟找到问题就改对了. 

    面试官最后对我说代码写得挺快的,但是毕竟我们是在面试, 最好自己肉眼debug.

五面

Team leader,跟我说和之前的面试官沟通过了,项目没啥好问的了,直接开始刷题。

  1. x1,y1 x2,y2两个点确定一个矩形,x3,y3,x4,y4确定另一个矩形,求两个矩形交集,不需要写代码,和面试官讨论思路。其实就是横轴和纵轴的合并区间。我一开始说要先通过射线法判断两个图形相对位置关系,然后根据位置关系求解。之后讨论了老半天,最后才想到横纵坐标合并区间方案。

  2. 简单计算器,给了一个web,卡得要死,总是断线,语言选择也没有golang,相当于白板写代码,也不需要运行,看着差不多就行,思路要说清楚。写完了问我怎么测试,怎么写边界case,反转情况很多,说了一大堆。然后说我说的差不多了,也面了一个小时了。问我有什么问题,问了一下工作节奏和福利。

六面

看着像大boss,头发都白了,面试也不好约,一直在催hr才约上。这一面基本就是聊天,聊个 人情况,问了一些经典的BQ问题.

1. 你为什么想来我们公司

2. 未来长期职业发展

3. 如果你和同事或者上级意见不合怎么处理

4.  你更喜欢团队氛围是什么样的

反问环节:

1. 组内任务怎么分配,

2. 公司有没有technical sharing,hackthon之类的东西

总结

面试流程

外企的面试官在我看来是很nice的, 面试官并不是面试者的敌人,我一直很不喜欢一些"吊打面试官"之类的说法. 实际上面试官和面试者的目标是一致的, 面试也不是为了从面试者身上找优越, 抱着平等的心态去面试.

  1. 首先在面试开始的时候会自我介绍,介绍本次面试的流程和一些注意的点,然后才会让你开始自我介绍.

  2. 即使碰到一些不会的问题也不用慌, 你实际上是在和面试官一起讨论解题方案, 有不清楚的地方及时和面试官反馈. 面试官的目的是考验你的技能是否能满足目标岗位,而不是为了难倒你.和某些公司形成鲜明对比(就不点名了). 

  3. 面试没有八股文,全是算法题和项目问答. 一定要对自己之前的项目有清晰的认知和反复过逻辑,你为什么要这么设计,这么设计有没有什么好处,能不能用别的方案.

  4. 把你准备的所有东西用英语准备一遍.

算法题做题步骤

  1. 确认题目是不是你理解的

  2. 和面试官讨论思路,确认思路ok再开始写

  3. coding

    1. 边界条件开头判断好.

    2. 变量函数命名写好,英文驼峰还是下划线,别混用,别用无意义变量名.

    3. 注释,最好写好注释,更容易理解,面试官不一定懂你写题的语言.

  4. 告诉面试官写好了,跑一个测试用例,如果面试官需要就解释一下,分析时间空间复杂度

  5. 大概率会有follow up,根据你写的速度.

END

我的爬虫架构课开课啦!

爬虫架构进阶就在这里

送未闻Code知识星球一年订阅!

未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~

一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

“未闻 Code技术交流群” 等你来!

入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)

好文和朋友一起看~