跳转至

故事分析⚓︎

拿到 offer⚓︎

11月6日,10:00,某大厦4层。

木头的手机响了:我是微软xxx,我们对你的面试很满意,我们决定给你这个offer......

木头:(激动啊......)您给我个正式的邮件吧。

11月7日木头收到了正式的邮件。

故事就写到这里吧,下面总结一下微软这样的公司需要什么样的人做 SDE:

  1. 技能点是否符合 JD 要求

第一个面试官是一个 PM,他的主要职责是询问木头的技能点是否满足 JD 要求。比如在这次面试中,希望木头有大批量数据的处理经验,因为是要做一个后台的 Pipeline(数据处理流程)。

  1. 沟通能力(Communication Skill)

面试刚开始时,面试官一般都让你聊一聊自己的项目,并且时不时地插问几个问题,实际上就是看看你的表达能力如何。当今的软件规模很大,没有那种一个人可以搞定的,需要团队配合,所以沟通能力很重要。

第二个面试官也是 PM,她更多地是与木头进行谈话,以确定木头的沟通能力是满足团队工作要求的。幽默的性格是每个团队都欢迎的,因为它是乐观、开放、聪明的集合体。

一些高大上的业余爱好也是有加分的,比如音乐、桥牌、魔方等技能。

  1. 熟悉算法

第三个面试官是一个Dev Lead,他会着重在算法和 Coding Skill(代码能力)上。

我们前面讲过从算法到程序到软件的演进过程,如果基本算法都不能保证,那后面的就谈不上了。算法又分两种: - 标准算法,比如快速排序、Dijkstra等。基本算法只能解决固定套路的问题。这些算法如果在面试时被问到,说明这个公司不行,至少是面试官的水平不行; - 应用算法,即一个实际问题没有固定的解法,需要你寻找一个合适的算法组合来解决。

在考察算法的同时,也考察了代码能力。

  1. 设计能力

第四个面试官是Dev Manager,他会着重在算法和设计能力上。

在考察OO(Object Oriented,面向对象)概念的同时,也考察了基本设计能力和数据结构知识。设计能力通常用面向对象的建模作为题目。木头遇到的是几个比较简单的建模题,后来木头在面试别人时,也会出一些稍微复杂的题目,如: - 如何给三阶魔方建模。现场给面试者一个拆开的魔方,主要是对一个对象的建模; - 如何给一个十字路口的红绿灯系统建模,这个问题稍微复杂一些了,要对对象、行为、外部控制等建模。

  1. 系统思维能力

从旁观者看来,木头遇到的这些面试题并不难,面试官主要是考察木头的思维习惯,以及在压力面前的表现,而不是用一个很难的题目难倒面试者。Skill(技能)当然要具备,Passion(激情)和 Potential(潜力)是最重要的。

第五个面试官是 Architect(架构师),她关心的是木头的系统思维能力(Systematic Thinking),所以当木头讲完一些对系统的理解后,基本上可以满足她的要求了。

  1. 学习能力

学习能力从一个小时的面试过程中是看不出来的,只能从面试者的经历中做判断。最后一个面试官就是 AA,他可以从木头在语音增值业务系统上的经验和自学游泳的四种泳姿的经历中考察木头的学习能力。

其实人类的学习能力是有“互通”性的,“聪明”是学习能力强的代名词,它可以应用到学习任何技能上,而不仅仅是编程能力。

  1. 测试能力

第二个面试官问过关于手机测试的问题。关于“测试”有两个误区:

  • 不能狭隘地把测试能力理解为“软件测试”的能力,而应该是从外部“观察”一个对象的能力。有了这种观察力,对理解软件系统的各个方面是有帮助的,当然也会对写出高质量代码有帮助。

  • 不要认为测试能力是对测试人员的要求,懂测试、能测试,是对开发人员的基本要求。

  • 解决问题的能力(Problem Solving)

在木头的面试中并没有考察到这个能力,通常情况是,面试官会问一个比较开放式的问题,这个问题没有确切答案,是想看看面试者如何思考并解决。比如: - 为什么井盖儿是圆的? - 北京有多少个加油站? - 为什么民间有“八月十五云遮月,正月十五雪打灯”的说法?

这种能力何时使用呢?领导交给你一个任务,其中会有很多困难,有一些环节有成熟的解决方案,有些环节没有任何前人经验和参考资料,需要你抓住重点和主线,一个一个地解决它们,为最终完成任务铺平道路。

<此处要不要举例说明?>