總結幾道面試筆試題

來源:互聯網
上載者:User

1)各大網路公司都喜歡問,比如說給你兩個存放有10G個名字的檔案,每個名字需要64個位元組,你的電腦只有4G記憶體,問怎樣找到兩個檔案中相同的名字(假設單個檔案中沒有重複)。

    這個問題其實代表了很常見的一類問題,即大資料的處理問題,這類問題通常的做法是使用hash函數將大檔案中的資料放到記憶體可以放下的小檔案中,然後調用普通方法(如記憶體中的統計,排序)進行處理。上面的問題每個檔案有640G的大小,按照記憶體4G處理,可以把兩個檔案分成320個小檔案,然後對每個名字進行hash處理,分到320小檔案中,然後將小檔案讀到記憶體中進行名字統計,如果摸個名字出現了兩次則是兩個檔案中重複的。

(2)給你10個盛放藥品的瓶子,其中9個是放的是A,另一個放的B,A和B放到一起會在60分鐘後變色,問給你70分鐘,問至少需要幾隻試管可以測出那隻瓶子中存放的是B。

    問題很進階,解法很巧妙,首先將十隻瓶子進行編號(0000,0001,0010,0011,0100,0101,0110,0111,1000,1001),然後取四隻試管,分別代表四位,將相應位為1的藥瓶中的藥品取少量放入試管中,等待60分鐘後,變色的位代表1,不變色的代表0,這樣就找到盛有B藥品的藥瓶編號,所以四個試管就可以找出盛有B藥品的藥瓶。

(3)有1000盞等,編號從1到1000,有1000個人,編號從1到1000,所有的燈開始都是滅的,每個人必須對是他自身編號倍數(如3可以對3,6,9...號燈進行操作)的燈進行一次操作,如果燈是亮的就按滅他,否則按亮他。問所有的人都操作成後,所有的燈是什麼狀態。

    可以通過特例來進行分析,如16和20,9可以被1,16,2,8,4操作,然後他是亮的,20可以被1,20,2,10,4,5操作,最後他是滅的,所以對於一個數N,只要有一個數x可以整除他,那必定有一個y存在,y=N/x,所以他們這樣的數對N的操作可以抵消,只有當x=y時不能被抵消,即N開方是整數時,不可以被抵消,這樣的燈是亮的,其餘的燈是滅的。

(4)給你一個函數f(),他以機率p產生0,以機率1-p產生1,問如何產生一個函數g(),以相同的機率產生0和1。

    問題很巧妙,要求你用f()產生兩種機率相等的狀態就行,其他變種也都差不多,也是找到n中機率相等的狀態就可以了。如使用f()兩次,可以產生(0,0),(0,1),(1,0),(1,1),顯然產生(0,1),(1,0)狀態就是相等的,產生其他狀態是可以在重複調用兩次f()直到產生需要的兩種狀態位置,這樣就構造除了g()函數。

(5)給你一個大小為N的數組int[] A,求取N個乘積,第i個乘積為除去A[i]的數組中所有數的乘積,不能用除法,問如何在O(n)的時間複雜度內,求的所有的N個乘積。

    這個問題是明顯的空間換時間的問題,可以對數組遍曆兩遍求取所有數組的從前到後,從後到前的部分積,如現在要求第i個乘積,只需取出從1到i-1的部分積和從N到i+1的部分積相乘就可以了,總共進行了3N次操作,時間複雜度為O(N)。

(6)給你一個天平,稱三次,問最多可以從多少個小球中找到品質較輕的一個。

    答案是27個,因為天平每次可以將小球分成三組,並可以判斷品質較輕的那個小球在那一組中,三次就可以找出較輕的那個。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.