淘寶2011春季校園招聘筆試試題(答案+個人解析版)

淘寶2011春季校園招聘筆試試題(答案+個人解析版)

    

     星期五晚上淘寶面試試題,我給出自己的答案,不一定正確,僅供參考。

 

選擇題:

1.       這題是有關網絡的題,由於計算機網絡開始學,以前也沒怎麼去研究過網絡這方面的東西,直接pass了!那晚坐公交回來的時候,聽到幾個人討論這題,題目說的是“哪種方式的性能成本最高”,仔細琢磨這句話,意思就是哪種方式性能最差了,其實這題我做的時候還真理解錯了。答案未知,以後補上!

 

2.       這題考的是幾種排序算法,觀察所給的順列(2149810620),冒泡排序經過兩趟之後必然會冒出兩個最大或最小的值;選擇排序亦是;瞭解快速排序的思想之後就能發現,第一趟之後就有一個數將順列分成兩部分,左邊的值都比它大(或小),右邊的值都比它小(或大),而題目中這個順列顯然不滿足這個特徵;插入排序的思想是將順列分成兩部分,左邊有序,右邊無序,每趟從右邊拿出一個插入到左邊使有序,所以這題21是一個降序的序列,故應該是選擇插入排序。       

 

3.       這題倒是像考概率論的了, 由於題目說“不一致的數據與原始數據進行比較,糾正錯誤”,這樣最後出錯的情況只有一種可能——甲乙在同一個位置均出錯,甲乙同時出錯的概率是1/1000000,再加上在同一個位置出錯,這樣結果遠小於1/1000000了。

 

4.       這題完全是考程序設計基礎語法, 首先排序AD,因爲char val=’A’;  val並不是通過new或者malloc在堆上分配內存,故不能用delete或者free進行回收。Val如果是全局變量,就在數據區;若是局部變量,就在內存的棧區。如果要想在堆上分配一塊內存給程序,可以使用new或者malloc,一定要強調的是程序中newdeletemallocfree是成對出現的,如果一直在分配內存而不釋放,在C/C++中很容易就出現內存泄漏的錯誤。如果一個區域已經delete或者free釋放之後,那麼指向這個內存區域的指針就變成野指針,此時正確的做法就是讓它賦爲NULL,以防後面再次使用它導致很隱蔽的錯誤。還有就是一個內存塊也不能多次釋放,否則也會出現問題。關於指針要注意的問題很多很多,也是各公司筆試都很青睞的題目。

 

5.       這題是我這張卷子做的第一道題,選的是A。不過最後檢查的時候,才發現還有貓膩的,說的是“深度優先中序遍歷”,你應該知道不是選擇A了。

 

6.       這題考察棧的數據結構特點——First In Last Out(FILO),然後檢查每個選項就能找出正確答案AD。看到這題我就想到2010年全國研究生考試計算機專業統考一道題,是這樣的:

 “若abcdef依次進棧,允許進棧、出棧交替操作,但不允許連續三次出棧,問不可能得到的序列是()”,是不是很相似啊~

 

7.       Cache替換策略命中率最高的肯定是最少使用的算法,但付出代價應該比其它的要大吧。根據程序的局部性原理,最後進來的很可能還會用到。

 

8.       這個二分查找,應該是很簡單的,如果你知道原理的話。但是我萬萬想不到我身邊坐的一位科大的碩士生竟然會選擇2難道真的應了那句話,後面再說那句是什麼話。

 

 

填空題:

1.       這題,淘寶是在考我們的智商嗎???

2.    又出現了一個二分查找,接着上面沒說完的那句話吧,這是我在《編程珠璣》這本書上第一次看到的——“只有10%的程序員可以寫出二分查找算法”!作者說了一個故事,說在貝爾實驗室做過實驗,那些專業的程序員有幾個小時的時間,可以用他們選擇的語言去寫一個二分查找算法,即使寫出高級僞代碼也可以。考試結束後,差不多所有程序員都認爲自己寫出了正確的程序。但是最後對他們編寫的代碼經過測試用例驗證的結果,一百多人的結果相差無幾:90%的程序員寫的程序中有bug

   說到這,你不妨不看下面自己動手寫寫二分查找算法的程序,用你熟悉的語言,看看你是屬於10%還是90%

            言歸正傳,我寫了一個程序,畫線的地方是考試讓我們填的空,很簡單不是嗎?

  

3.       又來了一個指針的題了,這題我想小閔肯定會做,記得他某天在QQ空間寫了一篇日誌,就是關於二維數組指針的問題,我還是看到他的日誌沒看太明白,最後翻了下書,正好還用上了,我回來測了一下我寫的是對的,答案應該是**p+2+3;

我上學期看了不少C語言的書,都是蠻經典的,其中有《C和指針》、《C專家編程》等等,我認爲你如果能將下面這句解釋的很清楚,你C指針這塊就應該沒什麼大問題了:

這是一個系統調用函數,用於通知運行時系統,當某種特定的“軟件中斷”發生時調用特定的程序。

 

4.       這題也很水啊,如果平時你編程時沒注意可能會出現這樣的錯誤,調試之後才能發現;但這是考試,你肯定會多一個心眼兒,就能知道每個case分量如果沒有break,會一直執行下去的,因此結果應該是 000122 

 

客觀題

1.   算是智力題吧,也是一個比較老的題目了,去網上一搜就出現很多解法,我目前還沒發現一個最好的,我當時寫的是:

讓一個人P1去將湯分成3份;

第二人P23份湯分成兩組ABA組一份,B組有兩份;

第三人P3如果選擇A的話,那麼P1P2B組兩份混合,按照一個人分湯,一個人先選湯來分配。

         如果選擇B的話,那麼將AP1P2P3按照上面方法分湯。

 

2.   這題算是一個經典的動態規劃題目吧:

    sum(i)表示數組下標爲前i個數的最大連續下標最大的和,那麼,當我們加上一個正數時,和會增加;當我們加上一個負數時,和會減少。如果當前得到的和是個負數,那麼這個和在接下來的累加中應該拋棄並重新清零,不然的話這個負數將會減少接下來的和。這樣可以得到如下的式子:

         Sum(i) = max{s(i-1)+a[i], a[i], 0}    i>0 && i<N;

         Sum(0)=max{a[0], 0}

 

程序代碼爲:

  

此題爲動態規劃的思想應用,上序算法的時間複雜度僅僅爲O(n),空間複雜度爲O(1)。如果是用暴力搜索的話時間複雜度將達到O(n^3),如果寫這樣的程序我想在這次筆試中是不會有分的。關於這種題目的變種,也是運用DP思想的,有很多很多題目,可以去網上找找看。

關於算法這塊,我強烈推薦《編程之美》這本書,如果你能將這本書上的算法都能實現一遍,我想任何公司的筆試算法這塊都沒有問題了。我特地買了這本書,但一直沒有時間去閱讀,實爲遺憾啊!

 

3.   這題我還沒有什麼好的算法,待以後補上。

 

                                                                                                                                    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章