6 轮面试,进微软了

AlwaysBeta

共 2516字,需浏览 6分钟

 ·

2022-03-01 03:46

很多人问我微软面试主要考察什么,以及如何准备面试。这里我结合自身面试经历,和在准备面试过程中查阅的大量资料,做一个全面的总结。

但是,这里不会给出任何具体面试题目,主要担心具体的题目会把人的思维限制住,光准备那几道题目,结果面试的时候一个都没用上。我尽可能提供准备面试的最详细指导,有任何问题可以留言或私信我。

先介绍下个人背景,我是本科学历,非 985、211 院校,2009 年毕业后一直做软件开发。主要做 C++ 方面的开发,以 Windows 客户端和服务端开发为主,另外有三年的 Ruby On Rails 全栈开发经验。进入微软之前在国内某大厂做 Windows 客户端开发,在 2021 年 12 月份拿到了微软、腾讯的 Offer。微软的职位是服务端开发,title 是 Senior Software Engineer,工作地点在北京。

微软在中国目前主要在北京、上海、苏州、深圳四个城市,最近几年,微软在大力发展苏州,岗位很多,目前,微软苏州已成为中国区最大的研发中心。

下面分别从面试整体流程、编程语言、算法、系统设计、英语、项目经历、基础知识几个方面加以阐述。

关于整体流程

微软的社会招聘面试总共是 1 轮电话面试 + 5 轮线上面试(疫情原因)。候选人以内推为主,微软暂时未与猎头公司合作。简历筛选通过后,先约电话面试时间,电话面试和每轮线上面试时间都在 1 小时左右。电话面试通过后,大约一周以后会约线上面试时间,线上面试用的是 Microsoft Teams,5 轮线上面试一天完成,效率杠杠滴~。线上面试大约一周后会告知结果,通过之后就是 offer、背调等流程。

电话面试主要对候选人做初步筛选,问一些项目经历、基础知识、算法。千万不要大意,电话面试问的算法可能非常难,我当时被问到 3 个困难级别算法(后来才知道电话面试官是我未来的直接领导)。电话面试之前最好准备好纸和笔,算法题可以在纸上推演一下,有助于整理思路。

关于编程语言

微软的面试不太注重编程语言本身的考察,因为对一个优秀的程序员来说编程语言不算障碍。比如我主要做 C++ 方面的开发,但是面试的职位是用 C#。这点国外大厂都一样,我同学在亚马逊也是如此。面试写算法的时候用你自己熟悉的编程语言即可。编程语言问题仅在电话面试和其中一轮线上面试问到了几个,都是针对你熟悉的语言,对我来说就是 C++,难度不会太大。

关于算法

这是面试的重头戏,我是除了最后一轮外其余每轮都面了算法。方式是打开一个共享网址,手写代码,没有任何语法高亮和补全提示,所以平时一定要练好手写代码。难度大概是 leetcode 的中等和困难级别,也会有面试官自己想的题目,也会变换题目条件。leetcode 刷个 100 道以上应该算是门槛值吧。另外推荐阅读微软亚洲研究院的同事编写的《编程之美》,该书作者全是公司内部人士,有很大的参考价值。


leetcode 题目太多了,目前总共有 2491 道题(还在不断增长中),不知道哪些是高频题,无从下手,除了买plus会员外,你还可以参考这个网站:

https://codetop.cc/home

该网站也是微软的一个同事开发的,收录各大厂高频面试题。

目前网上写 leetcode 题解的特别多,遇到问题的时候搜一下能找到很多精彩的题解。

对于算法一定要特别重视,现在国内大厂也向国外大厂看齐,都考察算法,腾讯的 6 轮面试有 4 轮面了算法,其中第 3 轮几乎全是算法。leetcode 中国网站排名第一的哥们是前微软员工,他总共通过了 2456 道题!!

还有一部分编程题不是纯算法,算法与实际问题结合,难度较大,一般不会让当场写代码,但是会让说思路,然后面试结束后把完整代码发给面试官。解决这种题目,平时的技术积累和思维方式很重要。

关于系统设计

这是面试的另一个重头戏,除了最后一轮外其余每轮都有系统设计题。系统设计的问题比较开放,主要是口述,有的也会让写伪代码。平时需要多积累,知识要有广度,对一些好的协议、系统设计都要了解,达到融会贯通、举一反三,这样才能在遇到未见过的问题时,能从平时的知识积累里提炼出解决方案。Github 有一个仓库是专门针对系统设计面试题的,可以作为参考,但是仅依靠这个仓库不足以通过系统设计面试,平时还是要多思考、学习各种系统的实现方式。

https://github.com/donnemartin/system-design-primer

关于英语

不同的部门面试时对英语的考察不一样,有的要求英文自我介绍,有的英文面试具体问题,准备个英文版的自我介绍应该是基本的要求。英语是微软的工作语言,后续的 offer、公司的资料、邮件全是英文,英语不好的话会比较吃力。英语对程序员也是非常重要,学好英语很有必要。我本人是英语 6 级,建议没有过 4 级的(以前我以为所有本科生都过了 4 级)努力补一下这块短板。

项目经历

这是最后一轮大老板的主要问题。每个写在简历上的项目都要了熟于心,你在其中担任的角色,做的主要贡献,遇到了什么难题,项目最后达到了什么样的效果。提前按照简历准备一遍,做到心中有数。

基础知识

这部分问题相对少点,主要是计算机的基础知识,包括操作系统、网络协议以及一些具体的开源库。

大概就是这些,主要考察内容还是算法和系统设计。另外注意一点,在面试的时候如果遇到算法题不会的时候,可以跟面试官说出你的思路,让面试官给些提示,切记一言不发的思考,最后说不会。外企面试官喜欢沟通探讨(这一点跟国内大厂很不一样),有些问题本身也是开放性的,有多种思路,积极跟面试官沟通讨论很重要。

不同部门和不同面试官的面试风格、侧重点可能差别很大,但主要考察点应该没有太大出入。网上也有很多人写微软的面经,也可以多搜一些作为参考,但是他们列出的面试题在你面试的时候可能一个也不会遇到!


浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报