您现在所在的位置:首页 >学员就业 > 就业宝典 > 想入职世界500强,微软面试题了解一下?

想入职世界500强,微软面试题了解一下?

来源:奇酷教育 发表于:

每到毕业季有两件事必须要做。

每到毕业季有两件事必须要做:
 
1.做毕业论文;
 
2.刷面试题。
 
那么想入职世界500强的,微软面试题了解一下?
 
以下内容选自刘润,润米咨询董事长《来吧,测测你能否加入微软》
 
请写下你对其中一题,或者全部5题的思考过程,得出你的答案。
 
1. 有三个连续的,大于六的整数,已知其中两个是质数,求证第三个数能被6整除。
 
2. 有2个骰子,每一个骰子都是6面的正方体,每一面上只能放0到9的数字一个,问这2个骰子如何组合,可以达到显示日历的效果(从01-31)?
 
3. 昨天,我早上8点爬山,晚上8点到山顶。睡了一觉后,今天,我早上8点从山顶原路下山,晚上8点到山脚。请问,有没有一个时刻,昨天和今天,我站在同样位置?
 
4. 上海有多少辆自行车?
 
5. 如何用两个指针,来判断一个链表是否有环?
 
记住,答案不是最重要的,思考过程最重要。思路也未必有唯一正确的答案。
 
1
 
思考完之后,下面,我就开始给出答案以及背后的考点和出发点了。你准备好了吗?一定要思考完再看哦。
 
有三个连续的,大于六的整数,已知其中两个是质数,求证第三个数能被6整除。
 
我先来说一下这道题该怎么解,然后再说这道题的用意是什么,要考核被试者的什么能力。
 
三个连续大于6的整数我们都明白,比如7、8、9,或者说11、12、13等等。
另外,题中还给了一个条件,叫其中两个是质数。质数我们也明白,就是只能被1和这个数字本身整除的数。
 
问题是,要证明第三个数能被6整除。为什么突然冒出来个6?这个6是怎么来的,就是解这道题的关键。
 
以往我在面试的时候,通常会给面试者一摞草稿纸,在面试者抓耳挠腮地算的时候,我们会建议他,把自己的思考过程说出来,一边说一边思考,这样我们就能知道他的思考过程。
 
比如有的面试者可能就会列一堆方程式,什么n,n+1,n+2,然后不断去用方程式来计算它们跟6的关系。那这时候我们就知道,他陷入歧途了。
 
那这道题的正确解法是什么呢?
 
你要先把被6整除这个问题,分解成同时能被2整除,也能被3整除,然后你只需要证明第三个数既能被2整除、也能被3整除就可以了。
 
那怎么证明呢?只要你想到了这一步,接下来就会非常简单,甚至接近于常识了。
 
我们知道,任意连续的两个整数中间一定有一个数是2的倍数,也就是能被2整除;同时我们还知道,任意三个整数中间一定有一个数是3的倍数,也就是能被3整除。
 
这也就是说,这连续的3个整数里面,一定有一个数可以被2整除,还有一个数可以被3整除。
 
但是题干告诉我们,题中的三个数,有两个数都是质数,也就是只能被1和这个数本身整除,而这三个数还都大于6,不可能是2或者3。
 
所以,这三个数里能被2整除的数和能被3整除的数,只能是同一个数,也就是这两个质数之外的第三个数。
 
这样,我们就证明了第三个数既能被2整除也能被3整除,也就是能被6整除。
 
听我说完之后你会发现,这考的就是小学数学的知识,我当年进微软的时候也被问过这道题,那么为什么要考这道题呢?
 
因为这道题能考验一个人"分解问题"的能力,对应到这题,就是把能被6整除这件事情拆解为能被2整除,也能被3整除这两个小问题。这种能力特别重要。
 
我举个例子。假设你遇到了一个客户,他的电脑突然宕机了,而你远在千里之外只能用电话远程指挥,可电脑宕机的理由有千万种,你怎么办?
 
如果你懂得拆解问题就知道,这种情况无非三种可能:电源没插好、硬件出了问题、软件除了问题。那这时候,你就可以一一来排除问题到底出在哪了。
 
我再举个例子。如何解决全球变暖问题,如何解决碳排放问题?专家们给出了成千上万的建议,吵得不可开交。
 
但是Bill Gates在一次TED的演讲中,给出了一个解决碳排放问题的"分解公式":
 
CO2 = P x S x E x C
 
P,就是People,人口;
 
S,就是Service Per Person,每个人使用多少项服务,比如开车,壁炉,烧烤等等;
 
E,就是Energy Per Service,每项服务使用多少能源;
 
C,就是CO2 Per Unit Energy,每单位能源,排放多少二氧化碳。
 
所以,解决碳排放问题,就是分别解决人口问题,环保的生活方式问题,能源使用效率问题,产生能源的碳排放问题。每个人,每个领域各司其职,共同推进。
 
你看,把一个如此宏大的问题,"分解"为四个问题,这种能力甚至可以用来拯救世界。
 
所以,面试微软员工时,我们特别在乎候选人分解问题,然后解决问题的能力。这道题只是众多题库中的一项,但目的是考验"分解"。
 
答案不是最重要的,思维习惯更重要。如果你太轻松地直接说出答案,我会给你换另一道更难的题。
 
2
 
有2个骰子,每一个骰子都是6面的正方体,每一面上只能放0到9的数字一个,问这2个骰子如何组合,可以达到显示日历的效果(从01-31)?
 
这道题的逻辑是这样的。首先,大多数人都会想到,我们有两个立方体,那就一共12个面。现在有0-9,一共10个数,放到这12个面上,所以,一定有数字是重复出现在两个立方体上的。
 
那么,哪些数是会重复出现的呢?
 
想到我们的目的是用这两个立方体表示日历,也就是01-31这一串数字。那么,有哪些数字是在个位和十位上都必须有的呢?
 
我们有11号和22号,所以1和2这两个数字在两个立方体上必须都出现,那这样一算,正好就是12个数字和12个面,可以一一对应了。
 
但是如果你细想想,就会发现不对啊,当日期是一位数的时候,0还需要在十位的位置上补位呢,所以0也必须同时出现在两个立方体上。
 
如果0也必须出现2次,那就有13个数字,要出现在12个面上了。这样就少了一个面。怎么办?
 
其实如果你能想到这里,就已经能拿到一半的分了。
 
那少的这一面该怎么办?怎么在12个面上放13个数字?有没有数字能重复用?
 
有,那就是6和9。到这为止,这个问题就解决了。
 
那这个问题考核的是什么呢?
 
这里的考点叫"跨越思维",也就是跳出固定框架去思考的能力。如果你觉得6就是6,9就是9,那就是没有跳出固定的思维框架。
 
这种跨越思维的能力,在现实生活中,极其重要。
 
比如,谁说冰箱的冰格,一定要在冰箱里面呢?如果把冰格放满厨房呢?这就是"分布式冰箱"。跨越思维,是创新的源泉。我们对创新能力要求高的人,非常重视对这种能力的考核。
 
同样,如果我感觉到你对这道题很熟悉,后面还有几十道其他类似的题等着。再次记住,思维方式,比答案重要。
 
3
 
昨天,我早上8点爬山,晚上8点到山顶。睡了一觉后,今天,我早上8点从山顶原路下山,晚上8点到山脚。请问,有没有一个时刻,昨天和今天,我站在同样位置?
 
这道题我先告诉你答案:一定有。
 
很多同学会想:我上山跟下山的速度肯定是不一样的,那是不是一定有呢?可能有吧。
 
怎么证明呢?很多人就开始列方程,算了一打草稿纸也没算出来。
 
这道题其实是一个"转换思路"的问题。
 
你可以把这道题转换成这样的一道题:你和另一个人,一个从山顶往下走,一个从山脚往上走,走的是同一条路,是不是一定会相遇?
 
答案是一定的啊,你们走在一条路上,一定会遇见的。
 
这道题就是这么简单,但如果你不懂得"转换思维",可能就是答不出来。
 
甚至,如果你习惯用数学方式来解题,我还可以给你提供一个思路:
 
你可以画一个坐标系,横轴是时间,早八点到晚八点,纵轴是山的高度,从0到海拔多少米。这时候你按照两天的行程画出两条线,你就会发现,无论你怎么画,两天的速度有多么不一样,这两条线都一定会在某一时刻、某一高度相交的。
 
好,第三题就说到这里。
 
这个"转换思维"有什么用处呢?
 
就是用"其实就是"这四个字,看透问题,然后找到解决方案。
 
顾客吃完饭结账,200元。服务员说,"对了,我们今天有个充值免单活动。您只要充值1000元,这顿饭就可以免单,很划算呢"。全额免单?这是莫大的优惠啊!你可能充了1000元。
 
但是,如果有"转换思维",你就会想到,这"其实就是"花1000元买1200元的东西。相当于打了83折。
 
"其实就是"这样的转化思维,在解决商业问题,技术问题时,至关重要。
 
4
 
上海有多少辆自行车?
 
这道题考的是"系统思维"。也就是你理解一个系统、事物之间的关联的能力。
 
这道题其实是没有标准答案的,我在这给你提供几种思路。
 
比如,你可以先查一下上海一共有多少人口,接下来你可以估算一下,这些人口当中有多大比例是骑自行车的?比如可能20-60岁之间,工作的人会骑自行车,通过比例你可以估算出有多少自行车。
 
你还可以大致算一下上海有多少条街道,每条街道大致能容纳多少辆自行车,这样也能得出一个相对准确的数字。
 
甚至在以前,自行车挂车牌的时候,有的人会说,我去街上随机拦几十辆自行车,算出这几十辆自行车车牌数字的中位数,通过这个中位数,我也能算出上海市一共发放了多少车牌。
 
当然,这些都是思路,而且也并非是完美的思路。这就对了。因为只有没有标准答案,我才能测试你的思路,测试你发现自行车和人群、自行车和街道、自行车和车牌或者和这个生态中其他因素的关系的能力,也就是建立模型,构建系统的能力。
 
当你建立模型,构建系统的能力越接近现实世界,你的"系统思维"能力就越强。
 
这种系统思维能力重不重要呢?这种系统思考的能力,在软件世界的能力,我想我就不用说了。
 
就算在商业世界,也尤其重要。比如,在分析房价问题时,到底是房租决定了房价,还是房价决定了房租?当你能够画出一张模型图,找到中间相互关联的各种自变量和因变量,你才能系统性地思考和回答这个问题。
 
5
 
如何用两个指针,来判断一个链表是否有环?
 
我说大部分人是没学过数据结构的,如果你不懂,可以忽略这道题。这其实是我埋的一个伏笔。
 
我之所以放这道题在这,就是想看看,在不懂计算机、不懂数据结构的情况下,你是否会去查一查什么是链表,什么叫做指针。
 
以前我在微软的时候,有一个人来面试,但是面试没通过,他特别遗憾,说特别想进微软。
 
当时,他的面试官就从桌上拿起了一本厚厚的全英文的书,跟他说:如果你真的想来微软,那就把这本书拿回去看,一个星期之后再过来。
 
结果,一个星期之后这个人真的回来了,而且很不错地回答了考官问的,关于这本书的问题。要知道,这本书是全英文的专业书籍,如果没有强烈的求知欲和快速学习能力,是不可能在一周之内看完的。
 
后来这个人也如愿以偿进了微软。当我们问他是怎么啃下这本这么难的书的时候,他说,他天天在家翻这本书,夏天天气热,他妈妈就在旁边帮他扇扇子,就这么没日没夜地看了一个星期。
 
这道题也是一样,考察的就是你的求知欲和快速学习的能力。
 
那我们说回这道题。你对区块链感兴趣吗?区块链就是一种链表。
 
但是,很多号称懂区块链的人,可能从来没有学过"链表"这种数据结构。我们简单介绍一下。
 
什么叫做用两个指针来判断一个链表是否有环?
 
你可以把"链表"想象成无数的小房间,每个房间里面都有一张纸条,纸条里上写的是下一个房间的号码,如果你进到第357号房间,纸条上写着456,那你就跑到第456号房间。然后456房间里面写着578,你就再跑到578号房间,然后从578再到632,从632再到7号房。这就叫链表,其实一点都不复杂。
 
那什么叫有环呢?你到了7号房间,发现里面的纸条写着456。你进到456,咦,我刚才不是来过吗?这就是环。
 
那什么是指针呢?你,或者说一直在走的这个人,就是指针。
 
那怎么来判断这个链表是不是有环?这里面考察的就是"相对思维"。
 
这道题的解法是这样的。让两个人同时走房间,其中一个人一间一间的走,另一个人要走得更快一些,在前一个人走一个房间的时间内,他要走两个房间。
 
这样,每当前者走一个房间,后者就比前者多走了一个房间,相对于前者,后者多走的房间就会越来越多。那么,如果这个链表有环的话,后者就一定会在某一个房间和前者相遇。否则,两人都会先后到达终点。
 
这就是"相对思维",就是让你在一个无休无止的问题里面,懂得制造相对速度。
 
(本文作者,刘润,润米咨询董事长)