大决战·微软面经(十四):来自微软的荣誉

Lili带着我到一个Manger的办公室,半路上她就给我介绍,这个Manager就是Sun Shaw,刚才跟我们一起吃饭的那位,我不由就高兴起来——他确实是一位很可亲的人呢! 他的办公室完全就是一个私人空间,有很多他的自己私人物品,恰好他在我进来之后就说有事出去一下,所以给了我一个“偷窥”的机会。 最吸引我的是他的书柜。这个一人高的全木制柜子分了好多层,里面都有好多东西。 书柜顶上放着的是两幅比较大的照片,上面都是用人组成的英文字母。左边是“ATC”,很显然,这代表微软亚洲工程院;另一个是一个心形加上一个“IE”,这应该是中国的IE团队表达对自己工作成果的热爱吧。说起来,IE 7确实是一个令人惊讶的产品呢,很不错。 书柜的第一层放着很多的奖杯和证书。让我最迷惑也最能吸引眼球的是两个很大的名叫“Ship·It”的奖杯,上面贴了十几个微软的产品的金属标签。此外,还有一个“在微软工作十周年”的几乎全玻璃奖牌,上面有Bill Gates和微软另一名核心成员的签名,并且写着很多鼓励的话。书柜的那一层还有一些其他的资格证书什么的,这让我感觉在微软工作的荣誉。 我实在觉得这一个个奖杯和证书说明了一段历史,更加吸引老员工在这里干下去。后来知道“Ship·It”意味着参与过并最终变成产品发布的项目,Sun有十几个标签,想必看着这些东西就非常有荣誉感吧。“马上我还可以得到一个Vista的标签”,Sun后来很高兴的跟我说,从他的表情我可以深切感觉到,微软的是一个让他呆了十几年还能感到兴奋地方——这就是我所向往的地方了! Sun回来之后,我就乖乖的坐到位置上等待第四面的开始。我发现自己比原来更加期待能够获得在这里工作的机会了!

大决战·微软面经(十三):命运,在此刻改变

Sun和那位mm出去了以后,我们这里的气氛反而更加紧张起来。马上有人从微软宣传册中找到了他们,原来Sun是工程院的工程总监之一啊,呼……而那位mm则是HR的老大…… 接下来的时间估计比较难熬,因为谁都知道自己的命运将要在接下来的几分钟内决定,如果现在离开微软,那么就一点机会也没有了,如果至少撑到下午,回去的时候也多少有面子一些……我的想法其实还是蛮单纯的,只是想多混几轮,回去写面经可以写得尽量长些…… 恰好现在手头有一个HR要求的表格要填写,我一门心思考虑这个表格去了,也懒得想起来,这样子让我真的平静好多。 不知道过了多久……反正不是很久,会议室的门慢慢被推开了……走进来一位mm,是早上的Lili,她脸上带着笑容,手上拿着一大堆文件。 空气,几乎在此刻凝固。我还没填完表格,不管……不要管……继续填……什么都别想……但是怎么能够不想? 她应该就要说出结果了,我不能预测,我不敢假设,但是期望……会是什么呢? “请下面的同学跟我出来一下……”她唇齿轻盈,轻松的带着笑容。 我听到了自己的名字,是第二个!霎时间,大脑一片空白,只记得带上资料起身跟着她走出会议室。 我当时在笑么?不知道……但是我知道,命运,已经开始改变了……!

大决战·微软面经(十二):Lunch Interview,吃得很饱

当我走进放着午饭的会议室时,其他的七位同学已经开吃一段时间了。午饭是据称“为我们特制的”盒饭,饭菜比较能够适应大众口味,我刚一闻到就非常喜欢。 不过在这里吃饭的不止我们八个人而已,还包括两位我从未见过的微软员工,他们坐在长长的会议桌两头,刚好将我们分成四对四的两拨,似乎不是巧合…… 坐我身旁的是一位女士,我很礼貌的问了问她的称呼,在说一声“您好”之后就忘记她怎么称呼了……坐在她对面的是一位看起来30岁左右的员工,看起来非常具有活力,很友善的样子,后来知道他叫Sun Shaw。正因为大家看起来都很好说话的样子,加上之前在网上看到说ATC面试没有Lunch Interview,所以我就什么也不管,填饱肚子再说。 吃饭的过程中,大家都聊一些轻松的话题,似乎没有涉及到上午的面试,也没涉及到其他公司的面试情况,毕竟还是有微软员工在场嘛,不能够太放松。在闲聊中,Sun比较爱说话,渐渐就成为大家的焦点。我们慢慢知道,他是香港人,已经在微软工作了十几年,最近才从美国总部调过来的,顿时我们就对他敬仰万分。他总能够调动气氛,让大家变得非常放松。 突然,Sun拿起一个名单,问我:“刚才进来的同学是叫做……” 我马上回答。然后,他说:“好,我记下位置,等下比较好对名字。” 咯噔!心里突然一紧……莫非,这就是传说中的Lunch Interview啊!嗯……我刚刚都做了些什么来着…… 仔细想想,似乎刚刚主要顾着吃饭去了,没说太多的话,这才慢慢放心下来。但是有Lunch Interview这真是让我始料不及呢,没想到MSRA才有的待遇终于也在ATC普及了啊。好吧,下面那我就来认真对待了。 实际上,在面试之前我就考虑过Lunch Interview的事情。我是一个不怎么容易紧张的人,无论如何,要吃要睡都会非常的安稳,但是太放松往往在面试中不是优点而是缺点。我只要认真对待这件事情,那么凭借以前积累的说话技巧,一般来说应该不会出大漏子。所以我应对这种Interview的既定对策就是:少说,吃好。 Sun看大家吃得都差不多了,就开始问问题,让我们一个个的回答。我相信到这个时候,所有的同学都明白这次午饭也是面试环节,应该认真面对了。我的PM对手第一个回答,他用非常具有逻辑性的语言、沉稳的音调、中英混杂的说话方式缓缓说出自己的观点,让人不得不服——我做不到!顿时,我有一种不祥的预感……接着,其他同学抢着说出自己的观点,我意识到周围的这些同学果然都是精英中的精英,让我丝毫感觉不到自己的优势了。 终于我也抢到发言权了,我尽量精炼、有条理、沉稳……但是还是拖泥带水草草收场,汗……突然,我觉得自己如果说英语似乎会表现得更好些…… 气氛由于这种循环回答问题而变得越来越紧张,我忽然有种冲动要改变一下这么无趣的气氛——我真的不知道当时怎么就有这样想法——于是在Sun问完这一轮问题之后,我马上主动问大家一个问题。 “我来问大家一个问题!不知道在座各位谁知道Microsoft的第五个字母,就是这个o,为什么有一个缺口?” 各位看官可能已经郁闷了,是的,又是这个问题!这其实是我在11年前使用Windows 3.1时“发现”的有趣事情,但是一直以来,从没有在任何地方找到相关的解释。这次有幸来到微软中国总部,不弄明白这个问题,怎么好意思回去呢? 不过在坐的并没有人能回答这个问题,很可惜,Sun很热心的说,他等下就群发封邮件问问是怎么回事,他也挺感兴趣的(不知道最后真的发了没……)。 在我突然“搅局”之后,Lunch Interview也恰好结束了,我知道接下来的时间就是等待宣判。谁会在这场竞争中胜出呢?看着对面的竞争者,我不安……但看看其他人都剩一大堆饭,我真的……吃得好饱!

大决战·微软面经(十一):产品界面是如何设计的?

解决完界面问题,她的面试问题就结束了,接下来就交给我了。 我的第一个问题让她汗了一下,就是她的名字,是的,她也忘说了。不过呢,跟上次一样,她介绍完自己之后,这些内容就从我另一只耳朵出去了…… 第二个问题,是关于Microsoft的第五个字母(又是这个……),她说不知道,微笑。 第三个问题,开始有技术含量了。我很奇怪,一个产品的界面也需要PM来设计么? 她回答道:事实上,微软还有专门设计界面的美工人员,但是PM是最终对界面负责的人。也就是说,PM应该决定界面上有什么东西,美工仅仅负责将这些东西排布得最好看。到时候产品发布的时候,人们如果看到这个产品非常酷、很好用,他们就会说“哦,这个项目的PM好厉害!”反之,如果界面非常的难用,人们会说“啊,哪个愚蠢的PM设计出来的垃圾呀!”不管怎么样,PM是最终负责的人,所以这当然是他的职责。 我继续问:那么哪个PM负责做这些事情呢?比如像Visual Studio.Net的IDE,那么多的窗口,肯定不是一个PM能够设计的出来,怎么分工呢? 她告诉我,有一个顶级的Product Planer会决定像Visual Studio.Net这样的大工程会做成什么样,拥有哪些特性,然后一级一级的PM Leader再将这些特性细分到每个PM。最终,会有一些PM专门负责做界面,而另外一些PM则会实现界面上一些功能,例如某个按钮按下的特性。如果某个实现功能的PM发现需要在界面上加上什么元素的时候,他就需要跟负责界面的PM沟通,让后者来满足自己的要求。 我本来还打算接着问,但是她发现面试时间已经超过半个小时(接下来的午饭时间已经过去了半个小时,天!),所以匆匆把我带到吃饭的地方去了。想必可怜的面试官mm也没有时间吃自己的午餐了吧……

大决战·微软面经(十):第三面,设计自己的产品

在三楼稍事休息,第三轮的面试官就过来接我了。她是一个mm,很和蔼的样子,我默默的跟着她走向另一个未知的地点。 我发现这种面试虽然号称是“车轮面”,但是中间的间隙倒大有文章可言。第一面结束,我正是靠着仅有的时间来调整低落的心态,让自己回归最平和的状态;第二面结束,我对自己的表现很满意,但是过于兴奋也不是件好事,所以我再次调整心态,让自己平静下来。有效的利用这些时间来调节状态是面试制胜的一种重要方法。 我们走到面试的地点,坐下,开始一些轻松的谈话。很出乎意料,她竟然使用中文问问题,让我突然还有些不自然了。不过这种情况没有持续多久,在问过我英语水平之后,她就开始飚英语了,还好,经过两个小时的磨练,她的英语已经很轻松就能应对了。 这一面的主要针对我的创新性来展开。我不清楚创新性到底是考什么东西,反正见招拆招啦。 具体来说,这是一个很实际的需求,她希望我根据描述来归纳最关键的特性。我虽然做过很多项目,但是项目的特性往往都是甲方或者开发代表来确定的,我并没有参与这方面的讨论,一开始还是很没有章法,几次被她喊停,让我回到正确的路上。我一直在白板上画画写写,希望能够表达出自己的意思,可是越发开始关注技术细节,似乎偏离了主题。好了,冒汗的感觉又开始出现了…… 突然,我悟到一点什么了,非常高兴的说:“啊,我们还是回到分析特性上面来吧!”是的,我已经偏离主题很久了。 我悟到的是一个很简单的道理,那就是“特性”的内涵:特性应该是能够看得见的功能。就像Media Player,能在主窗口播放视频是特性,用什么技术保证视频流畅则是技术细节,我应该在一开始关注的是最朴实易见的东西才对。 于是,我重新从最简单的特性开始罗列,似乎这回终于走上正轨了,她也渐渐不再打断。 接下来,她觉得特性已经足够,希望我来设计这个程序的界面。 嗯……界面这个东西……我没有真正设计过这种东西,那么就临场发挥吧。我虽然不知道怎么设计最好,但是我知道仿造现在已有的、功能也类似的东西进行设计肯定没错。我找了一个微软的产品做样子,在它的界面上修修改改,拼凑成现在需要的东西,看上去还算不错了。可是她决不是这么想! “你来给这些特性分个级吧。”她没有直接评论我的设计,而是引导我思考。 我略加思索,告诉她答案。 “很好,那么你看看现在的设计存在什么问题吧。”她很平静的对我说。 我突然意识到问题所在了!我的界面竟然没有突出最重要的特性,反而是把一些看起来很有意思但又根本没有什么实际作用的东西放在最显眼的地方,明显的本末倒置。 我马上在白板上设计出第二版的界面,与上一个几乎完全不同,画完之后自己都觉得很有信心。果然,她仅仅是问了问界面上的细节考虑就让我过关。好的,我相信自己这一轮表现的也还算不错,有希望了!

大决战·微软面经(九):PM如何寻求合作?

又轮到我问问题,新鲜独特的问题又来了! 首先问了一个让他比较汗的问题,请问他的名字。他才发现,原来忘了自我介绍了,于是告诉我他的名字和职位,不过我依然秉承传统,他的话音刚落,我就忘记他的名字了…… 接着又是那个经典的Mircosoft的第五个字母的问题。为什么“o”的右边有一个缺口呢?他给我说了一个有趣的传说:传说微软在盖好了自己的办公地点,并准备开张的时候,办公楼大门口的Microsoft标志还是完好无缺的,但是很不巧,他们的工人在装修的时候不小心碰掉了标志的一小块,就是那个“o”的右边,但是时间紧迫,没办法在开张之前换掉了,于是微软只好将错就错,以后的Microsoft都是在那里缺一个口子啦。他说完之后,再三强调只是一个传说,恐怕并不是事实。 最后,才是我最为感兴趣的问题,PM如何寻求合作的? 我知道,PM不经过授权就可以管理进度,但是很显然,每个PM所带领的小组之间肯定多少要有联系,那么他们如何进行合作呢? 他告诉我,PM上面还有PM Leader,Leader负责协调,同时同一个Feature的PM还会互相交流,看看之间又没有关联的地方。 我接着问,那么PM如何转化研究院的成果呢?是不是要把研究院的开发者“抓”下来一起做项目呢? 他告诉我,这一般是需要项目组内成员自己理解才行的,虽然研究院的同事如果过来帮忙是最好不过,但是只是看他个人心情,私下里帮忙,绝对不可能真的把他调过来的。所以PM还是要自力更生,多利用现有的资源。 这次貌似又一直问到超时,他适时的打断我,领我回到三楼大厅等待下一轮面试。

大决战·微软面经(七):第二面,战胜“设计模式”

像走迷宫一样,我随着面试官来到不同于刚才的另一个房间。 他给我的第一感觉是,瘦,第二感觉是,说话快。 又是全英语面试,没有任何选择。一开始很有些不习惯,说英语真的很快,有些跟不上,但是很快就适应过来了,毕竟都是中国人,互相之间在怎么样也挺容易理解。他看了看我的简历,马上就开始针对简历的内容提问。 “看你简历上写熟悉设计模式,在那么多项目之中,哪个项目设计最为复杂?”他问道。我选择今年上半年做的ASN.1编译器项目,并简单说了项目的工作内容以及用到的一些技术。 接着,他就出了一个听起来挺复杂的需求要我设计一个类体系,希望我尽量用一些面向对象的设计方法来解决问题。我简单思考了一下,画了一个协作图的草图。不过马上就觉得不爽,又画了一个第二版。在这个图里面我没有写任何的接口,所有的关系都依赖于实际的功能类,我是故意这样做的。我知道他接下来的问题肯定针对这种设计的扩展性展开,所以我等着在问题中提出想法。 果然,他问我为什么要把一些功能分出来,目的和意义是什么。我就说,如果这个类抽象出一个接口的话,那我就能支持新的功能,而且使得整体结构不变,顺手,我改掉了协作图的关系,加上新的内容。然后又是类似的问题,我慢慢为这个框架加入新的接口,引入更多的间接层次,慢慢的,设计模式也就跟着冒出来了——这就是重构的思想了,只在必要的时候引入设计模式! 协作图看来让他非常的满意,接着就是实现核心代码了。这一点让我郁闷了一两分钟,毕竟,这个需求有点大,从哪里开始下手比较好呢?他看我发了一会呆,就好心的提醒我要把握时间,不要等到时间到了什么东西都没写那就不好评价了。OK,我马上开始下笔如飞的写代码,恰好此时我也找到了写代码的门路。 由于肯定无法写完所有的代码,而且类的层次已经确定,所以我发现只要关注核心业务逻辑就可以。也就是说,所有的真正功能用函数调用和功能类来表示,于是,写代码就类似于写伪码,临时创造一些必要的功能类都可以。我一共写了三个成员函数,提交上去之后感觉不错,他似乎也非常满意。看来这一次我差不多过关了。 “好的,我们再回到你的简历吧,设计的问题就到这里。”他结束了设计与编程的考察,我心里暗暗的松了口气。

大决战·微软面经(八):项目管理没有再让我翻船

他接下来关心的是我现在正在做的项目,灰度图像打标,希望我能谈谈如何管理这个项目的进度的。 说到这个,我真的就有点心虚了。这个项目现在正处于立与不立的边缘,甲方催得急,我们却又没有十足的把握达到全国第一,着实矛盾,所以谈到长远的计划,那还真的从来没想过……不过我也得给一些合理的预测和估计才行。 我为这个项目定了三个检查点,一个是用于立项的时间点,一个是用于输出评审的时间点,最后一个是用于结题的时间点,并且我定义这三个点需要做的输出。一开始,他一直问一些比较刁钻的问题,可以说是涉及到项目对各种极端情况,包括延期、改需求等等方面,让我给出解决方案,我始终坚持两点,以此应对:第一,立项的时候签订的正式文件约束甲乙两方要按照既定需求办事,只能修订并加入新的小的功能点而不能彻底推翻;第二,遇到任何的进度问题,都应该先考虑增加人员,然后是与甲方商议进度,最后是缩减承诺的需求,按时完成最为紧要的东西。 当问到如何提交软件版本的时候我说采用渐进的方法提交。也就是说,立项的时候提交alpha版的软件,能演示功能;输出评审的时候提交实现所有重要功能的beta版软件,并且可以给甲方试用;结题的时候则提交正式的软件,供甲方进行完备的测试。这种提交的方法虽然以前并没有同学如此总结过,但是以前确实也是这么做的,不但听起来合理,更是一种必然结果,灰度图像以后也应该这样做才对。 我觉得这次总算答的比较圆满,他似乎也比较满意,不过这个还应该是准备得当的功劳。首先,进度问题在武汉的一面中就有问到,我也认真思考过怎么回答比较好,当时答的时很差的。其次,我始终都试图采用列表的方式来说明自己的观点,这个小小的动作非常有效,既让我赢得了思考时间,又能够让面试官看清楚自己的关键想法。 很快,他的问题问完,轮到我问他了。

大决战·微软面经(六):珍贵的间隙

第一轮面试结束的时候,时间已经超过一个小时,我随着面试官由二楼坐电梯到三楼,等待下一轮。 再上楼的过程中,我很巧的碰到了在武汉面试我的Dennis Chen,很高兴,不过当时还是忘记握手了,后来也没有请他吃饭,大汗! 三楼的大厅依然很小,而且最重要的是,我没有找到上下楼的楼梯!要是发生火灾怎么办,我偷偷的寻思着…… 我到大厅的时候,只有三个同学在那里等着,看来大家的第一面普遍超时了。我的对手当然也在那里,他还是那么沉稳,让我觉得十分敬畏。我很坦诚的跟他说自己在第一面的感受,觉得被鄙视了,郁闷,他也说第一面发挥不好,考的是编程,英语说得也有些紧张。没聊上两句,他就被一个mm带走,开始二面,而我则继续等待。 三楼的布置和二楼有些类似,但是更加简陋一些。二楼在墙上挂的标志是“微软中国研发集团”,而三楼是“微软亚洲工程院”,这里是更加正宗的ATC。这里的灯光并不明亮,挺昏暗的,同时还有很多来来往往的人,由中国的有外国的,林林总总。这是一个热闹的地方。 我无聊的四处张望,享受着下一场大战前的平静。这是一个非常重要的间隙,正是通过这个缓冲,我慢慢冷静下来,从刚才的郁闷中走出来。我不惧怕连续N小时的轮番轰炸,但是我还是对自己的心态是否能始终平稳抱有疑虑,现在这个间隙让我找到自信。 终于,第二轮面试的面试官出现了,我马上起身跟上他的脚步,走向下一个战场。

大决战·微软面经(五):第一个噩梦的结束

第一轮面试还没有结束,但接下来的问答明显没有之前那么麻烦,我渐渐找回状态,流利的回答每一个问题。 很快,他告诉我面试问题已经没有了,然后是我的提问时间。 关于这个提问环节,我之前确实有所准备,并且我相信自己的问题肯定可以让面试官感觉比较精彩,说不定还会给面试加分。 首先我用英语问道:“我听说作为PM其实并没有对dev(指的是SDE)和tester(指的是SDET)的管理权,那么你是如何有效地管理他们呢?” 他的回答大意是:的确是这样,dev和tester并不会对PM负责,自己的工作报告也是交给dev leader和tester leader的,而不是PM。但是这并不影响PM有效的管理进度、甚至分配任务,这一方面是因为中国人“听话”的本性,另一方面还要靠PM的沟通能力,只要能服人,是否有这个权利倒是其次了。所以微软的这套“不授权的管理模式”特别有它的新奇之处,同时也非常考验PM的个人能力。正因为本来这种管理就不授权,PM有时甚至可以请求dev或tester临时干一些leader都不知道的事情,当然,这些事情就不细说了…… 接着我问了一个关于Microsoft的trade mark的问题:“为什么Microsoft的第五个字母,那个o,有一个小缺口呢?” 他显然从来没有想过或问过这个问题,这是一个很显然、每个看过Microsoft标志的人都会察觉的问题,但是真正把它当回事来研究的恐怕没有几个。他老实的告诉我,不清楚。 最后一个问题是有关他本身的工作的:“你作为PM,有没有机会写代码呢?我听说PM是完全没有机会的……” 他坦诚地说,确实没有机会,但他曾经尝试这么做。在来到微软之前,他在另外一家公司作为一个开发人员干了一段时间,他的专长是写OpenGL程序。过来做PM之后,他确实没有机会写代码,但是他也尝试自己动手写写玩,最近,他还亲自有些了点OpenGL程序,不过发现有点手生了……“A really good question!”最后,他还夸奖了一下。 “好了,我们的面试时间已经超出了,我得赶紧把你送到三楼大厅!”他用不容置疑的语气对我说,我们起身前往三楼的约定之处。第一面的噩梦,看来终于结束了。