仓库源文站点原文


layout: post title: "微软面试总结" date: 2019-04-03 19:36 comments: true

categories: 美国生活

起因

上周参加了微软在 UW-Madison 的 Campus Interview,这是我的一个真正意义上的 Coding Interview,面试官也是华人小姐姐,非常 nice,给我十分详细地指导,所以这里记录下自己的面试过程和经验。

<!--more-->

过程

说起来微软真地对 UW-Madison 非常好,我其实只是在 School Info Session 和面试官谈了谈,他就给我发邮件提醒我注册面试。微软是派自己一线的 coder 来面试,所以还是非常贴近实战的。当然我的 case 比较特别,我直接告诉面试官我其实改变了自己的计划,已经开始读博,所以不会去微软实习或者工作。

可能是我的诚实打动了面试官,同时作为同胞希望帮助我,面试官给了我很多建议和指导,从我的简历如何修改到我白板写代码的具体问题,她都给出了详细地建议与帮助。都是非常实用的建议。

大概提前两周,微软发来一个邮件链接让你注册,一个人30min 的 slot 当然面试官其实和我谈了 45 min,对我帮助巨大。

然后到了时间,去微软在学校预定的 Room 等候,然后进入房间开始面试。

首先是简历的部分,面试官问了几个简历的问题,同时帮助我修改简历。然后开始了 coding 问题,leetcode 的原题,当然我并没有解答出来。但是面试官给了很多提示,结束之后还对我需要注意的地方特别做了指导。

经验总结

简历修改1 : 添加关键词

之前的简历确实缺少了 CS 关注的关键词部分,这是第一次听到面试官的反馈。

简历修改2 : 请已经工作的同学/朋友帮忙修改

确实是发现不同的人看问题会有不同的角度,我的简历非常学术化,所以并不是适合工业界的简历,这次面试官告诉我,她当时修改了将近15遍,确实是至理名言。

Leetcode 继续刷题

其实这是最重要的硬性技能,没有硬本事,什么都惘然。不说了接着刷题。应该每天定时起床,刷到一定数量的题目去学校。

面试技巧 1: 写代码之前一定要交流

交流内容 (1) 题意复述

(2) Test Cases & Edge Cases

(3) 时空复杂度要求

面试技巧 2: 写 Brute Force 解法 First

很多时候,说起来,大家都觉得 Brute Force 解法低级,但是要是仔细分析会发现其实 Brute Force 解法也很多时候就是 Leetcode 的解法。而且,好多时候 Brute Force 解法是优化的起点,其次,这个给你白板写代码的机会,不然很多时候你要是遇到了 DP 没有任何思路,你真的可能连写代码的机会都没有。

Be safe at first.

面试技巧 3: 如何设计 Test Cases

这个也被面试官耳提面命了一番,其实从更高的角度思考

(1) Function Test

比如一个正常的输入,输出是多少?

(2) Edge Test

比如,

  1. empty string/array/list/tree/node 怎么办?报错? 返回 0? 还是别的?
  2. 要求整数输入浮点数怎么办? 报错? 返回 0? 还是别的?
  3. 正数变成负数怎么办?
  4. 特别是一些特定的 cases 的返回值是不是需要被调用?

(3) Stree Test

问下是不是需要考虑特别大的数字,特别长的字符串,特别小的数值,或者是不是需要考虑分布式系统。

面试技巧 4: 写完代码一定要自己带入自己的 test cases 运行一遍

这点在 Leetcode 时候不太注意就忽略了,但是其实很重要。养成在提交代码前,自己人工带入运行程序的好习惯。

准备面试: 找到同学一起 Mock 会更加重要