EMC校招筆試題目

orchid發表於2013-11-26

-------------------------------------------------

1,7×(1/7) = 1是什麼率?

乘法運算滿足結合律,交換律和分配率。這個題目用的應該是交換律。

2,what's database view?

檢視是根據使用者需求從一個表或者多個表構建的虛表。

檢視與表的區別:檢視不儲存資料,只儲存定義。

檢視與查詢的區別:檢視儲存為資料庫設計的一部分,查詢則不是。

3,4*(3*2) = (4*3)*2是什麼率?

結合律

4,ABCDEF六城市兩兩相連,問從A到B路徑有多少個(路徑上不能出現環)?

這是個很簡單的排列組合問題。

經過0個城市的路徑:1

經過1個城市的路徑:4

經過2個城市的路徑:4*3=12

經過3個城市的路徑:4*3*2=24

經過4個城市的路徑:4*3*2*1=24

共1+4+12+24+24=65

5,問要進行stable的sorting,會避免使用哪種演算法?

常用的排序演算法中,穩定排序有:氣泡排序,插入排序,歸併排序,基數排序

不穩定排序有:堆排序,快速排序,選擇排序,希爾排序

6,0.15625寫成二進位制是什麼?

0.00101

7,問1,2,3,5,8,13...這個數列,第58個除以第57個得多少?

這是個斐波那契數列。如果是個選擇題,可以用估計法,至少這個數大於1.5的。

8,Raid0的作用

RAID 0 splits data evenly across two or more disks without parity information for speed. RAID 0 was not one of the original RAID levels and provides no data redundancy. RAID 0 is normally used to increase performance, although it can also be used as a way to create a large logical disk out of two or more physical ones.

9,火星上到處是硬幣,隨便拿起一個,如果是頭朝上的就翻成字朝上的,如果是字朝上的就丟擲,落地後有各一半的機會頭朝上或字朝上。再隨便拿起包括剛才那個在內的所有硬幣中的一個,重複前述步驟。問,很多很多次後字朝上和頭朝上的硬幣比例?

這個題目真心有點難,是個極限概率的問題,用我這已經忘得差不多的概率論的知識姑且推導如下:

一開始星球上的硬幣可以假設是隨機分佈的,但是這點不重要,因為我們要求的是無限情況,無論初始情況什麼樣子,無限扔了之後,都會達到一個穩定的狀態。那麼這時候,求所有硬幣字朝上的與字朝下的比例,與求一個硬幣扔了無限次之後字朝上的概率與字朝下的概率比是一樣的。

p(字朝上,n)表示操作了n次之後字朝上的概率,p(頭朝上,n)表示操作了n次之後字朝下的概率,那麼有:

p(字朝上,n)=p(字朝上,n-1)*(1/2)+p(投朝上,n-1)

p(頭朝上,n)=p(字朝上,n-1)*(1/2)

那麼,

lim(p(字朝上,n)/p(頭朝上,n))=lim((p(字朝上,n-1)*(1/2)+p(投朝上,n-1))/(p(字朝上,n-1)*(1/2)))

a=1+2(1/a)

可得到a=2

9,raid5

是一種儲存效能,資料安全和儲存成本兼顧的解決方案;他使用的是DISK striping(硬碟分割槽)技術,raid5至少需要3個硬碟,raid5不對儲存的資料進行備份,而是把資料和相對應的奇偶校驗資訊組成raid5的各個磁碟上,並且奇偶校驗資訊和相應的資料分別儲存於不同的硬碟上,raid5的一個硬碟資料發生損壞後,利用剩下的資料和相應的奇偶校驗資訊去恢復被損壞的資料。

10,問又要考慮安全又要充分利用頻寬的網路中,是先加密後壓縮,還是先壓縮後加密?

這題不知道。至少,認為壓縮後產生的加密資料變小所以先壓縮後加密,是不對的。別忘了,即使對原始資料先加密,產生的多餘資料也會被壓縮,資料量不一定比前種方法多。

11,問要使一群人存在2人同月出生概率不低於50%的最小人數是多少?

P(k,12)/12^k<0.5

P(k,12)/12^k是k個人生日各不相同的概率,P(k,12)是4從12個月取k的月的排列。

k的最小值是4.

13 寫一個畫圓的函式

int drawCircle(int x, int y, int radius);

要求:要讓圓看起來連續圓滑,要畫多餘4×radius個點。

這個關鍵是要計算出圓弧上點的位置,如果1度一個點,那麼需要畫360個點,如果圓心的座標是(x,y),從最上面的點為第0個點,順時針,第i的點的x,y座標為:

xi=x+sin(i/2pi)

yi=y+cos(i/2pi)

然後把相鄰點用直線連線起來。

畫4*radius的點也同樣。

14, 函式宣告如下

  int func(int i ,int N);

  其中i <= N,功能輸出i遞增到N再遞減到i的整數,每行輸出一個數。比如func(1,5)就是

1

2

3

4

5

4

3

2

1

要求是隻用一條語句(函式體就一個分號)完成功能。要求:

不能有逗號,不能有新變數宣告,不能用?:,不能用迴圈,不能用char int 什麼什麼的保留字元。

這題只能有一句變態還形容了。

經過測試,這麼一句

int func(int i,int N){
return printf("%d\n",i) && (i<N && ((func(i+1,N)) || !printf("%d\n",i)));
}

是對的。

這利用了&&和||運算的性質還做出選擇,利用遞迴實現了迴圈的輸出。

------------------------------------------------------------------------------

1,求=?

這裡利用了一個費馬小定理,這個定理是初等數論四大定理之一。

費馬小定理:如果a是一個整數,p是一個質數,那麼有a^p \equiv a \pmod{p}。也就是說a的p次方與a對p同餘。

所以97的59次方對59取餘=97%59=38

如果a不是p的倍數,這個定義也可以寫成:

a^{p-1} \equiv  1 \pmod{p} 如果a與p互質,那麼a的p-1次方對p取模的結果是1.

2,int a=1000000000, b=2000000000; a=a+b;b=a-b;a=a-b; 最後a,b是多少?

  a=a+b;b=a-b;a=a-b是交換a與b的演算法。

所以,現在a=20000000000,b=10000000

3,如何判別一個數是unsigned

a>=0 && ~a>=0,如果a不是unsingned那麼a>=0必有最高位為0,取反必為1,那麼肯定變為負值,矛盾,所以a為unsigned。

無符號數最高位不代表符號位。

a>=0 && -a>=0 不滿足,可以舉一個反例0.

4,100層樓,兩個雞蛋。某層之上扔雞蛋就會碎。最壞情況下,問至少要測試多少次才能試出這個層數。

它是問最壞情況下的最小測試次數。要想明白兩個問題,一是怎麼測試,二是怎麼才是最壞情況。

加入在50層樓扔第一個雞蛋,碎了,那就只能從1層逐層扔,這是最壞的情況是在49層第二個雞蛋碎了,這就扔了共50次雞蛋。如果50層的沒碎,最壞情況就是第100層第二個雞蛋才碎或是沒碎,這也需要扔50次。

如果先在第10層扔,碎了從第1層開始扔第2個雞蛋,沒碎在從第20層扔第一個雞蛋,然後30層,40層,也就是每次卡在一個10層的區間測試,這樣做的最壞情況在第99層,共扔了10+9=19次雞蛋。

10層10層的卡區間,問題就在於每往上走一個區間,扔的次數就會比上一次多一個,所以要想每個區間扔的次數一樣多,那麼區間值就必須每次減少1。假設開始是x層,下次就到x+(x-1)層...,最後x+(x-1)+(x-2)+...1>=100。這個和應該大於等於100,應該找這個最小的x,這個值是14.

5,25匹馬,每次比賽可選5匹馬賽出次序(無法計時)。問至少要比賽多少次才能確定跑得最快,次快和第三快的三匹馬。

7次。首先分為5組,每組進行一次比賽,然後每組的頭一名共五匹馬比賽一次。假設第一組快於第二組快於第三組依次。最後一次安排第一組的二三名和第二組的一二名和第三組的第一名。

6,上臺階,每次可走一臺階和兩臺階,問上10個臺階有多少種走法

f(10)=f(8)+f(9)=89

---------------------------------------

1,經過最少多少次比較能找出1000個元素中second smallest的一個?

用n個節點作為樹葉建立競賽樹,兩兩比較,誰小誰勝出。最後的勝者為smallest,內部節
點的次數為n-1,即為比較次數。

因為在比較的過程,second smallest的只可能輸一次,這一次就是跟smallest元素比較時
的產生的。所以把跟smallest比較的過的數拿出來,一共是 ceiling(lgN) (樹的高度),這
些數中最小的就是second smallest.我們可以用前面同樣的辦法,用這ceiling(lgN)個數
建立競賽樹,求得最小的,比較次數為ceiling(lgN)-1

所以總的比較次數最多為 n+ceiling(lgN)-2

2,10個口袋每個有100個金幣,其中一個口袋每個金幣9grams,其餘正常的金幣都是10grams。有個天平,問最少幾次可以找出那個口袋  

10個口袋依次取 0 1 2 3 4 5 6 7 8 9 個金幣,稱一次看看比 9*10/2*10 缺多少就知道了

這題目的解法真妙!

3,實驗室裡有1000個一模一樣的瓶子,但是其中的一瓶有毒。可以用實驗室的小白鼠來測試哪一瓶是毒藥。如果小白鼠喝掉毒藥的話,會在一個星期的時候死去,其他瓶子裡的藥水沒有任何副作用。請問最少用多少隻小白鼠可以在一個星期以內查出哪瓶是毒藥

這題真夠經典的,就今年校招,我都見過好多次了。

1000個瓶子,用二進位制編碼,即0000000001~11111101000。然後給老鼠編號1-10,1號老鼠喝瓶子編號第一位是1的瓶子。2號老鼠喝瓶子編號第二位為1的瓶子,以此類推。假設3,4,5號老鼠死了,即第0000011100=28號瓶子有毒。因為只有28號瓶子被3,4,5號老鼠同時喝了。

 

 

 

相關文章