想入職世界500強(qiáng),微軟面試題了解一下?
來(lái)源:
奇酷教育 發(fā)表于:
每到畢業(yè)季有兩件事必須要做。
每到畢業(yè)季有兩件事必須要做:
1.做畢業(yè)論文;
2.刷面試題。
那么想入職世界500強(qiáng)的,微軟面試題了解一下?
以下內(nèi)容選自劉潤(rùn),潤(rùn)米咨詢董事長(zhǎng)《來(lái)吧,測(cè)測(cè)你能否加入微軟》
請(qǐng)寫下你對(duì)其中一題,或者全部5題的思考過(guò)程,得出你的答案。
1. 有三個(gè)連續(xù)的,大于六的整數(shù),已知其中兩個(gè)是質(zhì)數(shù),求證第三個(gè)數(shù)能被6整除。
2. 有2個(gè)骰子,每一個(gè)骰子都是6面的正方體,每一面上只能放0到9的數(shù)字一個(gè),問(wèn)這2個(gè)骰子如何組合,可以達(dá)到顯示日歷的效果(從01-31)?
3. 昨天,我早上8點(diǎn)爬山,晚上8點(diǎn)到山頂。睡了一覺(jué)后,今天,我早上8點(diǎn)從山頂原路下山,晚上8點(diǎn)到山腳。請(qǐng)問(wèn),有沒(méi)有一個(gè)時(shí)刻,昨天和今天,我站在同樣位置?
4. 上海有多少輛自行車?
5. 如何用兩個(gè)指針,來(lái)判斷一個(gè)鏈表是否有環(huán)?
記住,答案不是最重要的,思考過(guò)程最重要。思路也未必有唯一正確的答案。
1
思考完之后,下面,我就開(kāi)始給出答案以及背后的考點(diǎn)和出發(fā)點(diǎn)了。你準(zhǔn)備好了嗎?一定要思考完再看哦。
有三個(gè)連續(xù)的,大于六的整數(shù),已知其中兩個(gè)是質(zhì)數(shù),求證第三個(gè)數(shù)能被6整除。
我先來(lái)說(shuō)一下這道題該怎么解,然后再說(shuō)這道題的用意是什么,要考核被試者的什么能力。
三個(gè)連續(xù)大于6的整數(shù)我們都明白,比如7、8、9,或者說(shuō)11、12、13等等。
另外,題中還給了一個(gè)條件,叫其中兩個(gè)是質(zhì)數(shù)。質(zhì)數(shù)我們也明白,就是只能被1和這個(gè)數(shù)字本身整除的數(shù)。
問(wèn)題是,要證明第三個(gè)數(shù)能被6整除。為什么突然冒出來(lái)個(gè)6?這個(gè)6是怎么來(lái)的,就是解這道題的關(guān)鍵。
以往我在面試的時(shí)候,通常會(huì)給面試者一摞草稿紙,在面試者抓耳撓腮地算的時(shí)候,我們會(huì)建議他,把自己的思考過(guò)程說(shuō)出來(lái),一邊說(shuō)一邊思考,這樣我們就能知道他的思考過(guò)程。
比如有的面試者可能就會(huì)列一堆方程式,什么n,n+1,n+2,然后不斷去用方程式來(lái)計(jì)算它們跟6的關(guān)系。那這時(shí)候我們就知道,他陷入歧途了。
那這道題的正確解法是什么呢?
你要先把被6整除這個(gè)問(wèn)題,分解成同時(shí)能被2整除,也能被3整除,然后你只需要證明第三個(gè)數(shù)既能被2整除、也能被3整除就可以了。
那怎么證明呢?只要你想到了這一步,接下來(lái)就會(huì)非常簡(jiǎn)單,甚至接近于常識(shí)了。
我們知道,任意連續(xù)的兩個(gè)整數(shù)中間一定有一個(gè)數(shù)是2的倍數(shù),也就是能被2整除;同時(shí)我們還知道,任意三個(gè)整數(shù)中間一定有一個(gè)數(shù)是3的倍數(shù),也就是能被3整除。
這也就是說(shuō),這連續(xù)的3個(gè)整數(shù)里面,一定有一個(gè)數(shù)可以被2整除,還有一個(gè)數(shù)可以被3整除。
但是題干告訴我們,題中的三個(gè)數(shù),有兩個(gè)數(shù)都是質(zhì)數(shù),也就是只能被1和這個(gè)數(shù)本身整除,而這三個(gè)數(shù)還都大于6,不可能是2或者3。
所以,這三個(gè)數(shù)里能被2整除的數(shù)和能被3整除的數(shù),只能是同一個(gè)數(shù),也就是這兩個(gè)質(zhì)數(shù)之外的第三個(gè)數(shù)。
這樣,我們就證明了第三個(gè)數(shù)既能被2整除也能被3整除,也就是能被6整除。
聽(tīng)我說(shuō)完之后你會(huì)發(fā)現(xiàn),這考的就是小學(xué)數(shù)學(xué)的知識(shí),我當(dāng)年進(jìn)微軟的時(shí)候也被問(wèn)過(guò)這道題,那么為什么要考這道題呢?
因?yàn)檫@道題能考驗(yàn)一個(gè)人"分解問(wèn)題"的能力,對(duì)應(yīng)到這題,就是把能被6整除這件事情拆解為能被2整除,也能被3整除這兩個(gè)小問(wèn)題。這種能力特別重要。
我舉個(gè)例子。假設(shè)你遇到了一個(gè)客戶,他的電腦突然宕機(jī)了,而你遠(yuǎn)在千里之外只能用電話遠(yuǎn)程指揮,可電腦宕機(jī)的理由有千萬(wàn)種,你怎么辦?
如果你懂得拆解問(wèn)題就知道,這種情況無(wú)非三種可能:電源沒(méi)插好、硬件出了問(wèn)題、軟件除了問(wèn)題。那這時(shí)候,你就可以一一來(lái)排除問(wèn)題到底出在哪了。
我再舉個(gè)例子。如何解決全球變暖問(wèn)題,如何解決碳排放問(wèn)題?專家們給出了成千上萬(wàn)的建議,吵得不可開(kāi)交。
但是Bill Gates在一次TED的演講中,給出了一個(gè)解決碳排放問(wèn)題的"分解公式":
CO2 = P x S x E x C
P,就是People,人口;
S,就是Service Per Person,每個(gè)人使用多少項(xiàng)服務(wù),比如開(kāi)車,壁爐,燒烤等等;
E,就是Energy Per Service,每項(xiàng)服務(wù)使用多少能源;
C,就是CO2 Per Unit Energy,每單位能源,排放多少二氧化碳。
所以,解決碳排放問(wèn)題,就是分別解決人口問(wèn)題,環(huán)保的生活方式問(wèn)題,能源使用效率問(wèn)題,產(chǎn)生能源的碳排放問(wèn)題。每個(gè)人,每個(gè)領(lǐng)域各司其職,共同推進(jìn)。
你看,把一個(gè)如此宏大的問(wèn)題,"分解"為四個(gè)問(wèn)題,這種能力甚至可以用來(lái)拯救世界。
所以,面試微軟員工時(shí),我們特別在乎候選人分解問(wèn)題,然后解決問(wèn)題的能力。這道題只是眾多題庫(kù)中的一項(xiàng),但目的是考驗(yàn)"分解"。
答案不是最重要的,思維習(xí)慣更重要。如果你太輕松地直接說(shuō)出答案,我會(huì)給你換另一道更難的題。
2
有2個(gè)骰子,每一個(gè)骰子都是6面的正方體,每一面上只能放0到9的數(shù)字一個(gè),問(wèn)這2個(gè)骰子如何組合,可以達(dá)到顯示日歷的效果(從01-31)?
這道題的邏輯是這樣的。首先,大多數(shù)人都會(huì)想到,我們有兩個(gè)立方體,那就一共12個(gè)面?,F(xiàn)在有0-9,一共10個(gè)數(shù),放到這12個(gè)面上,所以,一定有數(shù)字是重復(fù)出現(xiàn)在兩個(gè)立方體上的。
那么,哪些數(shù)是會(huì)重復(fù)出現(xiàn)的呢?
想到我們的目的是用這兩個(gè)立方體表示日歷,也就是01-31這一串?dāng)?shù)字。那么,有哪些數(shù)字是在個(gè)位和十位上都必須有的呢?
我們有11號(hào)和22號(hào),所以1和2這兩個(gè)數(shù)字在兩個(gè)立方體上必須都出現(xiàn),那這樣一算,正好就是12個(gè)數(shù)字和12個(gè)面,可以一一對(duì)應(yīng)了。
但是如果你細(xì)想想,就會(huì)發(fā)現(xiàn)不對(duì)啊,當(dāng)日期是一位數(shù)的時(shí)候,0還需要在十位的位置上補(bǔ)位呢,所以0也必須同時(shí)出現(xiàn)在兩個(gè)立方體上。
如果0也必須出現(xiàn)2次,那就有13個(gè)數(shù)字,要出現(xiàn)在12個(gè)面上了。這樣就少了一個(gè)面。怎么辦?
其實(shí)如果你能想到這里,就已經(jīng)能拿到一半的分了。
那少的這一面該怎么辦?怎么在12個(gè)面上放13個(gè)數(shù)字?有沒(méi)有數(shù)字能重復(fù)用?
有,那就是6和9。到這為止,這個(gè)問(wèn)題就解決了。
那這個(gè)問(wèn)題考核的是什么呢?
這里的考點(diǎn)叫"跨越思維",也就是跳出固定框架去思考的能力。如果你覺(jué)得6就是6,9就是9,那就是沒(méi)有跳出固定的思維框架。
這種跨越思維的能力,在現(xiàn)實(shí)生活中,極其重要。
比如,誰(shuí)說(shuō)冰箱的冰格,一定要在冰箱里面呢?如果把冰格放滿廚房呢?這就是"分布式冰箱"??缭剿季S,是創(chuàng)新的源泉。我們對(duì)創(chuàng)新能力要求高的人,非常重視對(duì)這種能力的考核。
同樣,如果我感覺(jué)到你對(duì)這道題很熟悉,后面還有幾十道其他類似的題等著。再次記住,思維方式,比答案重要。
3
昨天,我早上8點(diǎn)爬山,晚上8點(diǎn)到山頂。睡了一覺(jué)后,今天,我早上8點(diǎn)從山頂原路下山,晚上8點(diǎn)到山腳。請(qǐng)問(wèn),有沒(méi)有一個(gè)時(shí)刻,昨天和今天,我站在同樣位置?
這道題我先告訴你答案:一定有。
很多同學(xué)會(huì)想:我上山跟下山的速度肯定是不一樣的,那是不是一定有呢?可能有吧。
怎么證明呢?很多人就開(kāi)始列方程,算了一打草稿紙也沒(méi)算出來(lái)。
這道題其實(shí)是一個(gè)"轉(zhuǎn)換思路"的問(wèn)題。
你可以把這道題轉(zhuǎn)換成這樣的一道題:你和另一個(gè)人,一個(gè)從山頂往下走,一個(gè)從山腳往上走,走的是同一條路,是不是一定會(huì)相遇?
答案是一定的啊,你們走在一條路上,一定會(huì)遇見(jiàn)的。
這道題就是這么簡(jiǎn)單,但如果你不懂得"轉(zhuǎn)換思維",可能就是答不出來(lái)。
甚至,如果你習(xí)慣用數(shù)學(xué)方式來(lái)解題,我還可以給你提供一個(gè)思路:
你可以畫一個(gè)坐標(biāo)系,橫軸是時(shí)間,早八點(diǎn)到晚八點(diǎn),縱軸是山的高度,從0到海拔多少米。這時(shí)候你按照兩天的行程畫出兩條線,你就會(huì)發(fā)現(xiàn),無(wú)論你怎么畫,兩天的速度有多么不一樣,這兩條線都一定會(huì)在某一時(shí)刻、某一高度相交的。
好,第三題就說(shuō)到這里。
這個(gè)"轉(zhuǎn)換思維"有什么用處呢?
就是用"其實(shí)就是"這四個(gè)字,看透問(wèn)題,然后找到解決方案。
顧客吃完飯結(jié)賬,200元。服務(wù)員說(shuō),"對(duì)了,我們今天有個(gè)充值免單活動(dòng)。您只要充值1000元,這頓飯就可以免單,很劃算呢"。全額免單?這是莫大的優(yōu)惠??!你可能充了1000元。
但是,如果有"轉(zhuǎn)換思維",你就會(huì)想到,這"其實(shí)就是"花1000元買1200元的東西。相當(dāng)于打了83折。
"其實(shí)就是"這樣的轉(zhuǎn)化思維,在解決商業(yè)問(wèn)題,技術(shù)問(wèn)題時(shí),至關(guān)重要。
4
上海有多少輛自行車?
這道題考的是"系統(tǒng)思維"。也就是你理解一個(gè)系統(tǒng)、事物之間的關(guān)聯(lián)的能力。
這道題其實(shí)是沒(méi)有標(biāo)準(zhǔn)答案的,我在這給你提供幾種思路。
比如,你可以先查一下上海一共有多少人口,接下來(lái)你可以估算一下,這些人口當(dāng)中有多大比例是騎自行車的?比如可能20-60歲之間,工作的人會(huì)騎自行車,通過(guò)比例你可以估算出有多少自行車。
你還可以大致算一下上海有多少條街道,每條街道大致能容納多少輛自行車,這樣也能得出一個(gè)相對(duì)準(zhǔn)確的數(shù)字。
甚至在以前,自行車掛車牌的時(shí)候,有的人會(huì)說(shuō),我去街上隨機(jī)攔幾十輛自行車,算出這幾十輛自行車車牌數(shù)字的中位數(shù),通過(guò)這個(gè)中位數(shù),我也能算出上海市一共發(fā)放了多少車牌。
當(dāng)然,這些都是思路,而且也并非是完美的思路。這就對(duì)了。因?yàn)橹挥袥](méi)有標(biāo)準(zhǔn)答案,我才能測(cè)試你的思路,測(cè)試你發(fā)現(xiàn)自行車和人群、自行車和街道、自行車和車牌或者和這個(gè)生態(tài)中其他因素的關(guān)系的能力,也就是建立模型,構(gòu)建系統(tǒng)的能力。
當(dāng)你建立模型,構(gòu)建系統(tǒng)的能力越接近現(xiàn)實(shí)世界,你的"系統(tǒng)思維"能力就越強(qiáng)。
這種系統(tǒng)思維能力重不重要呢?這種系統(tǒng)思考的能力,在軟件世界的能力,我想我就不用說(shuō)了。
就算在商業(yè)世界,也尤其重要。比如,在分析房?jī)r(jià)問(wèn)題時(shí),到底是房租決定了房?jī)r(jià),還是房?jī)r(jià)決定了房租?當(dāng)你能夠畫出一張模型圖,找到中間相互關(guān)聯(lián)的各種自變量和因變量,你才能系統(tǒng)性地思考和回答這個(gè)問(wèn)題。
5
如何用兩個(gè)指針,來(lái)判斷一個(gè)鏈表是否有環(huán)?
我說(shuō)大部分人是沒(méi)學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)的,如果你不懂,可以忽略這道題。這其實(shí)是我埋的一個(gè)伏筆。
我之所以放這道題在這,就是想看看,在不懂計(jì)算機(jī)、不懂?dāng)?shù)據(jù)結(jié)構(gòu)的情況下,你是否會(huì)去查一查什么是鏈表,什么叫做指針。
以前我在微軟的時(shí)候,有一個(gè)人來(lái)面試,但是面試沒(méi)通過(guò),他特別遺憾,說(shuō)特別想進(jìn)微軟。
當(dāng)時(shí),他的面試官就從桌上拿起了一本厚厚的全英文的書,跟他說(shuō):如果你真的想來(lái)微軟,那就把這本書拿回去看,一個(gè)星期之后再過(guò)來(lái)。
結(jié)果,一個(gè)星期之后這個(gè)人真的回來(lái)了,而且很不錯(cuò)地回答了考官問(wèn)的,關(guān)于這本書的問(wèn)題。要知道,這本書是全英文的專業(yè)書籍,如果沒(méi)有強(qiáng)烈的求知欲和快速學(xué)習(xí)能力,是不可能在一周之內(nèi)看完的。
后來(lái)這個(gè)人也如愿以償進(jìn)了微軟。當(dāng)我們問(wèn)他是怎么啃下這本這么難的書的時(shí)候,他說(shuō),他天天在家翻這本書,夏天天氣熱,他媽媽就在旁邊幫他扇扇子,就這么沒(méi)日沒(méi)夜地看了一個(gè)星期。
這道題也是一樣,考察的就是你的求知欲和快速學(xué)習(xí)的能力。
那我們說(shuō)回這道題。你對(duì)區(qū)塊鏈感興趣嗎?區(qū)塊鏈就是一種鏈表。
但是,很多號(hào)稱懂區(qū)塊鏈的人,可能從來(lái)沒(méi)有學(xué)過(guò)"鏈表"這種數(shù)據(jù)結(jié)構(gòu)。我們簡(jiǎn)單介紹一下。
什么叫做用兩個(gè)指針來(lái)判斷一個(gè)鏈表是否有環(huán)?
你可以把"鏈表"想象成無(wú)數(shù)的小房間,每個(gè)房間里面都有一張紙條,紙條里上寫的是下一個(gè)房間的號(hào)碼,如果你進(jìn)到第357號(hào)房間,紙條上寫著456,那你就跑到第456號(hào)房間。然后456房間里面寫著578,你就再跑到578號(hào)房間,然后從578再到632,從632再到7號(hào)房。這就叫鏈表,其實(shí)一點(diǎn)都不復(fù)雜。
那什么叫有環(huán)呢?你到了7號(hào)房間,發(fā)現(xiàn)里面的紙條寫著456。你進(jìn)到456,咦,我剛才不是來(lái)過(guò)嗎?這就是環(huán)。
那什么是指針呢?你,或者說(shuō)一直在走的這個(gè)人,就是指針。
那怎么來(lái)判斷這個(gè)鏈表是不是有環(huán)?這里面考察的就是"相對(duì)思維"。
這道題的解法是這樣的。讓兩個(gè)人同時(shí)走房間,其中一個(gè)人一間一間的走,另一個(gè)人要走得更快一些,在前一個(gè)人走一個(gè)房間的時(shí)間內(nèi),他要走兩個(gè)房間。
這樣,每當(dāng)前者走一個(gè)房間,后者就比前者多走了一個(gè)房間,相對(duì)于前者,后者多走的房間就會(huì)越來(lái)越多。那么,如果這個(gè)鏈表有環(huán)的話,后者就一定會(huì)在某一個(gè)房間和前者相遇。否則,兩人都會(huì)先后到達(dá)終點(diǎn)。
這就是"相對(duì)思維",就是讓你在一個(gè)無(wú)休無(wú)止的問(wèn)題里面,懂得制造相對(duì)速度。
(本文作者,劉潤(rùn),潤(rùn)米咨詢董事長(zhǎng))