1. 程式人生 > >校招面試筆試題

校招面試筆試題

 九月十月百度,迅雷,華為,阿里巴巴,最新校招筆試面試六十題

題記

    本部落格自2010年10月11日開通以來,已經幫助了一大批人找到工作,特別是連續三年在每一年的9、10月份陪伴了至少三屆畢業生找工作的旅程,包括校招中的筆試面試,今年也不會例外,我會在本部落格開通3週年之際一如既往的陪伴大家一起成長。

    本文所整理的全部筆試面試題要麼來源於我群內群友們的分享,要麼摘自論壇或部落格,所有原題均來自網路。雖然本文中整理的絕大部分筆試面試題偏演算法(自己特意為之之故),但不論是哪一年的校招,一般說來,筆試偏基礎尤其是選擇題部分,涵蓋語言,計算機組成原理、作業系統、網路協議、資料庫、概率期望等知識

),而面試則偏演算法(且極具針對性的根據簡歷提問),且無論是筆試還是面試,兩者都很看重你的實際程式設計能力,希望大家知曉。

   OK, 本文會盡量保持每天更新一道新的筆試或面試題,直到校招基本結束(更歡迎各位通過微博私信http://weibo.com/julyweibo,或郵箱[email protected]提供題目,亦可直接評論於本文下),如果大家對以下任何一題中有任何思路,包括參考題解中有任何錯誤,歡迎隨時評論於本文之下,或show me your code!謝謝。

九月迅雷,華為,阿里巴巴,最新筆試面試十題

  1. 8月15日,百度2道面試題:
    1、來自《程式設計之美》的概率題:一個桶裡面有白球、黑球各100個,現在按下述規則取球:的
        i 、每次從通裡面拿出來兩個球;
        ii、如果取出的是兩個同色的求,就再放入一個黑球;
        ii、如果取出的是兩個異色的求,就再放入一個白球。
    問:最後桶裡面只剩下一個黑球的概率是多少?
    2、演算法題:給你一個自然數N,求[6,N]之內的所有素數中,兩兩之和為偶數的那些偶數。
  2. 9月5日,華為2014校園招聘的機試題目
    通過鍵盤輸入一串小寫字母(a~z)組成的字串。請編寫一個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。
    壓縮規則:
        1、僅壓縮連續重複出現的字元。比如字串"abcbc"由於無連續重複字元,壓縮後的字串還是"abcbc"。
        2、壓縮欄位的格式為"字元重複的次數+字元"。例如:字串"xxxyyyyyyz"壓縮後就成為"3x6yz"。
    要求實現函式: 
         void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
        輸入pInputStr
    :  輸入字串lInputLen:  輸入字串長度
        輸出 pOutputStr: 輸出字串,空間已經開闢好,與輸入字串等長;
    注意:只需要完成該函式功能演算法,中間不需要有任何IO的輸入輸出
    示例 
        輸入:“cccddecc”   輸出:“3c2de2c”
        輸入:“adef”     輸出:“adef”
        輸入:“pppppppp” 輸出:“8p”
  3. 9月6日,網新恆天2014校園招聘筆試程式設計題
    已知memcpy的函式為: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指標,src是源指標。不呼叫c++/c的memcpy庫函式,請編寫memcpy。
    點評:老題,參考答案如下
    1. //[email protected] 2013/9/24
    2. void* memcpy(void *dst, constvoid *src, size_t count)      
    3. {      
    4.     //安全檢查
    5.     assert( (dst != NULL) && (src != NULL) );      
    6.     unsigned char *pdst = (unsigned char *)dst;      
    7.     const unsigned char *psrc = (const unsigned char *)src;      
    8.     //防止記憶體重複
    9.     assert(!(psrc<=pdst && pdst<psrc+count));      
    10.     assert(!(pdst<=psrc && psrc<pdst+count));      
    11.     while(count--)      
    12.     {      
    13.         *pdst = *psrc;      
    14.         pdst++;      
    15.         psrc++;      
    16.     }      
    17.     return dst;      
    18. }    
  4. 9月9日,迅雷2014校招筆試程式設計題:
    已知集合A和B的元素分別用不含頭結點的單鏈表儲存,函式difference()用於求解集合A與B的差集,並將結果儲存在集合A的單鏈表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成計算後A={10,20,30}。
    連結串列結點的結構型別定義如下:
    1. struct node    
    2. {    
    3.     int elem;    
    4.     node* next;    
    5. };    
    請完成函式void difference(node** LA , node* LB)
    點評:參考答案或更多題目請參見:http://blog.csdn.net/hackbuteer1/article/details/11482103
  5. 9月10日,美團網2014校招研發筆試哈爾濱站
    1、連結串列翻轉。給出一個連結串列和一個數k,比如連結串列1→2→3→4→5→6,k=2,則翻轉後2→1→4→3→6→5,若k=3,翻轉後3→2→1→6→5→4,若k=4,翻轉後4→3→2→1→5→6,用程式實現
    點評:類似程式設計藝術第1章左旋轉字串,見:http://blog.csdn.net/v_JULY_v/article/details/6322882
    2、一個m*n的矩陣,從左到右從上到下都是遞增的,給一個數elem,求是否在矩陣中,給出思路和程式碼
    點評:楊氏矩陣查詢,見程式設計藝術第23章:http://blog.csdn.net/v_july_v/article/details/7085669
  6. 9月14日,阿里巴巴2014校招筆試哈爾濱站
    1、宿舍內5個同學一起玩對戰遊戲。每場比賽有一些人作為紅方,另一些人作為藍方。請問至少需要多少場比賽,才能使任意兩個人之間有一場紅方對藍方和藍方對紅方的比賽?答案為4場,參考如下圖,作者doc_sgl:

    點評:其餘題目請參見:http://blog.csdn.net/doc_sgl/article/details/11695671
    2、一個有10億條記錄的文字檔案,已按照關鍵字排好序儲存。請設計演算法,可以快速的從檔案中查詢指字關鍵字的記錄。
  7. 9月21日,百度2014校招-濟南站
    1. 9月23日,網易電商部-社招面試
      HashMap與HashTable區別
      點評:HashMap基於Hashtable實現,不同之處在於HashMap是非同步的,並且允許null,即null value和null key,Hashtable則不允許null,詳見:http://oznyang.iteye.com/blog/30690。此外,記住一點:hashmap/hashset等凡是帶有hash字眼的均基於hashtable實現,沒帶hash字眼的如set/map均是基於紅黑樹實現,前者無序,後者有序,詳見此文第一部分:http://blog.csdn.net/v_july_v/article/details/7382693
      不過,估計還是直接來圖更形象點,故直接上圖(圖片來源:本人9月28日在上海交大面試&演算法講座的PPThttp://vdisk.weibo.com/s/zrFL6OXKg_1me):

    2. 9月24日,去哪兒網2014校招西安站筆試題
      給定一個200MB的文字檔案,裡面存的是IP地址到真實地址資訊的對映資訊,例如:211.200.101.100北京
      然後給你6億個IP地址,請設計演算法快速的打印出所對應的真實地址資訊。
    3. 9月25日,阿里巴巴二面
      指標/陣列區別,決策樹訓練原理,SVM原理,網路協議,堆排序,字串轉換成整數,設計一款拼音輸入法等等..
      點評:字串轉換成整數看似簡單,實則很多坑,要寫好並不容易,具體分析和實現見程式設計藝術第30章:http://blog.csdn.net/v_july_v/article/details/9024123;決策樹見:http://blog.csdn.net/v_july_v/article/details/7577684;SVM原理見:http://blog.csdn.net/v_july_v/article/details/7624837
      總結:此次面試的這位同學面的還是堆排/快排/atoi等典型問題,實際上:①面試看基礎演算法程式設計能力,和準備是否充分;②不論結果如何,跟4年前高考一樣,高考和麵試都只是人生路上的其中一站。你的真正核心競爭力不是進哪所名校哪所名企,而是存在你骨子裡的上進心或熱愛鑽研技術的態度。
    4. 9月28日,百度2014校招-武漢站-系統分析師

    5. 10月2日,暴風影音2014校招筆試
      1、合併兩個已經排序的單鏈表為一個排序的單鏈表,相同內容只保留一個
      如:單鏈表a:1->2->3->4
      單鏈表b:3->4->5
      輸出:1->2->3->4->5
      2、編寫程式,在原字串中把尾部m個字元移動到字串的頭部,要求:長度為n字串操作時間複雜度為O(n),時間複雜度為O(1)。
      如:原字串為”Ilovebaofeng”,m=7,輸出結果:”baofengIlove”。
      點評:還是類似程式設計藝術第1章左旋字串:http://blog.csdn.net/v_JULY_v/article/details/6322882
      3、暴風影音的片源伺服器上儲存著兩個檔案a和b,各存放50億條URL,每條URL佔用64位元組,記憶體限制是4G,讓你找出a,b檔案共同的URL。要求:演算法設計。
      點評:上述第3題等海量資料處理面試題,請參見此文第第一部分第6題:http://blog.csdn.net/v_july_v/article/details/7382693
    6. 關於linux核心的幾個面試問題:
      1、Linux中主要有哪幾種核心鎖?
      2、Linux中的使用者模式和核心模式是什麼含意?
      3、使用者程序間通訊主要哪幾種方式?
      4、有哪幾種記憶體分配函式?
    7.  微軟一面:輸入兩個數,相加求和,二進位制輸出。
    8. 阿里巴巴面試:
      阿里的log檔案如下,有三個欄位:time(登陸或登出時間點)+uid+login或logout,每條記錄按時間順序排列。問題如下:給定一個時間點T,統計線上人數。 
      點評:參考分析請見http://blog.csdn.net/tnndye/article/details/12784237
    9. 10月8日,百度移動開發-上海站筆試/面試題
      1、三色球排序的問題,相同的球放到一起,讓你按順序輸出紅白藍三種顏色的球,可以用012來表示,要求只能掃描一次陣列。
      點評:荷蘭國旗問題,參見此文第8小節:http://blog.csdn.net/v_july_v/article/details/6211155
      2、實現C的strstr
      點評:手寫字串處理相關函式是面試中極為常見的一類題型。
      功能:從字串str1中查詢是否有字串str2,
      -如果有,從str1中的str2位置起,返回str1中str2起始位置的指標,如果沒有,返回null。
      給兩份參考程式碼,一份是C程式碼:
      1. char *mystrstr(char *s1 , char *s2)  
      2. {  
      3.     if(*s1==0)  
      4.     {  
      5.         if(*s2)   
      6.             return(char*)NULL;  
      7.         return (char*)s1;  
      8.     }  
      9.     while(*s1)  
      10.     {  
      11.         int i=0;  
      12.         while(1)  
      13.         {  
      14.             if(s2[i]==0)   
      15.                 return s1;  
      16.             if(s2[i]!=s1[i])   
      17.                 break;  
      18.             i++;  
      19.         }  
      20.         s1++;  
      21.     }  
      22.     return (char*)NULL;  
      23. }  
      一份是C++程式碼:
      1. //[email protected] 2013/10月
      2. class Solution {  
      3. public:  
      4.     char *strStr(char *haystack, char *needle) {  
      5.         // Start typing your C/C++ solution below
      6.         // DO NOT write int main() function
      7.         int i,j;  
      8.         for (i = j = 0; haystack[i] && needle[j];) {  
      9.             if (haystack[i] == needle[j]) {  
      10.                 ++i;  
      11.                 ++j;  
      12.             }  
      13.             else {  
      14.                 i = i - j + 1;  
      15.                 j = 0;  
      16.             }  
      17.         }  
      18.         return needle[j]?0:(haystack + i - j);  
      19.     }  
      20. };  
      3、寫一個memmove的函式
      點評:手寫常見字串處理函式是面試官很喜歡考的一類題型。
    10. 10月9日,暴風影音校招研發筆試
      1、給定字串A和B,輸出A和B中的第一個最長公共子串,比如A=“wepiabc B=“pabcni”,則輸出“abc”。
      2、TCP建立連線的3次握手過程?若最後一次握手失敗,會怎樣處理?
    11. 蜻蜓FM2014校招研發筆試

    12. 10月11日,騰訊web前端面試
      一個數組 var arr = ['abc','ddadbc','adbdcd','abcqew'.......] 長度一萬,  用最有效率的方法計算出包含被元素出現最多的。
    13. 單機5G記憶體,磁碟200T的資料,分別為字串,然後給定一個字串,判斷這200T資料裡面有沒有這個字串,怎麼做?
      如果查詢次數會非常的多, 怎麼預處理?
      點評:如果資料是200g且允許少許誤差的話,可以考慮用布隆過濾器Bloom Filter:http://blog.csdn.net/v_july_v/article/details/6685894。但本題是200T,得另尋良策。
      OK,以下是@cy 提供的題解(暴露出的一個問題是題意不是特別明確,因為題解中有不少自己的假設,所以日後各位面試時一定要跟面試官徹底弄清題意再作答,包括各種使用條件):
      ①. 記憶體和資料比是 5GB / 200TB, 約為 1 比 4w, 所以trie啥的就不用想了, 唯一的就是hash.
      ②. 簡單的假設每個字串是相對短的(只要不會超過5GB)
          1. 幾MB, 甚至百MB的字串也能處理, 但是確實對最終的效果有很大影響, 如果只是部分case特別大,可以特殊處理下.
      ③. 一個字串塊 在記憶體中需要一個 條目 來標識
          1. value 需要 8 位元組, key約為4位元組
              1. 200TB總共有 200 * 2^40 位, 地址空間至少為48個bit, 儲存長度用16bit則一個條目的value 需要8個位元組
          1. 這裡的長度是用來存一個 字串塊 的長度, 單位可以優化為KB, 甚至MB, 16bit肯定是夠的
          1. key用4個位元組有些緊張, 可以考慮佔用部分長度的位
          1. 長度也可以不在條目中出現, 而是在塊頭出現, 但這樣取塊的時候有可能浪費, 也有可能要取多次.
          2. 所謂一個 字串塊 就是hash值相同的字串挨個存在一起, 從而得到的字串塊.
      ④. 這樣的話, 5GB 可以存放最多 5GB / 8 約為 4億個條目.
      ⑤. 把原來的200TB字串挨個的hash, 並按hash排序後, 存起來, 建立索引. 
          1. hash值可以用md5之類的雜湊到足夠開, 然後 mod 4億值來求
      ⑥. 根據重排後的檔案, 建立索引, key為hash值, value為前面說到的, 該hash對應字串塊在檔案中的偏移, 和 塊的長度.
      ⑦查詢時, 根據hash值, 找到該字串可能在的字串, 然後將整個字串讀出來, 用kmp比較即可. 
      200TB的資料, 被劃到 4億 個字元塊當中, 平均一塊應該在 800KB 附近, 考慮到hash不均衡, 一般也就是幾MB的樣子, 
      比較起來應該還OK. 
      ⑧其他的小優化點: 
          1. 不是一個檔案, 而是若干個檔案, 但是不影響偏移的編號
          1. 為什麼做hash再分塊? 避免通用字首過多,導致分塊極不均勻
          1. 大長的字串容易導致 字串塊 暴大, 可以考慮分為若干小串, 同時記錄原來的位置, 知道是否是一個整串
          1. 壓縮...留一些空間做常用查詢串的快取...
      ⑨再說怎麼優化這個預處理的排序過程. 每次讀5GB的資料進來, 算好hash分好桶, 這種OK吧, 然後按桶回寫到下去, 這裡也是批量寫的. 處理完繼續處理下一個5GB, 全部處理完後, 再做歸併, 搞幾輪後, 就OK了嘛. 當然, 為了把記憶體中排序時浪費的IO補回來, 可以 並行做, 一個在算的時候,另一個在讀....
    14. 10月12日,百度一面
      JAVA裡面的執行緒同步機制、異常處理機制、集合類、簡單的設計模式、hashmap和hashtable的區別,及HashMap和ConcurrentHashMap的區別。
      點評:關於hashmap和hashtable的區別,請看上文第13題,其餘請自己查閱相關書籍。
    15. stat、SDE、PM、DS等相關職位的面試題
      1、有一組資料,很長,有ID,經緯度,時間4個變數。
      怎麼找出兩人是否有一面之緣。怎麼找出所有relationship(定義是在100米範圍內一起度過1小時以上)。
      2、怎麼找出競爭對手購買了哪些搜尋關鍵詞。
      3、怎麼判斷兩個TB級別的文字是否雷同,是否近似。
      4、怎麼用C實現SQL的join功能。
      5、怎麼最快的在一個大文本里面搜尋字串。
      6、coding計算斐波那契數列。
      更多請參看:http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5ODIzNDQ3Mw==&appmsgid=10000300&itemidx=1&sign=173a62e0db86cb4c76a0bb1e9c22f3e5
    16. 10月12日,網易遊戲專業一面
        1、怎麼判斷單鏈表有沒有環
        2、怎麼判斷兩個無環單鏈表是否相交
        3、101個硬幣中有一個假幣,有一個無砝碼的天平,稱兩次,判斷假幣比真幣重還是輕。
      點評:老掉牙的題,沒點評的慾望,原文請看:http://blog.csdn.net/cqsctlsss/article/details/12747631
    17. 10月13日,百度筆試題:
      1、 給出陣列A={a_0,a_1,a_2,...,a_n}(n是可變的),打印出所有元素的組合
      2、 陣列A中任意兩個相鄰元素大小相差1,現給定這樣的陣列A和目標整數t,找出t在陣列A中的位置。
      3、 求二叉樹的面積(高乘寬),高為二叉樹根到葉子節點的最大距離,寬慰二叉樹最多的節點數。
      4、給了一個百度地圖的截圖,對於地圖上的某一點,需要在地圖上標註該點的資訊,將資訊抽象成一個矩形,可以在該點的左邊標記,也可以在該點右邊標記。但是任意兩點標記後的矩形是不能有覆蓋的,否則刪除其中一個點
          問題1,現給一固定區域,有n個點,設計一個演算法,要求標記足夠多的點
          問題2,當點足夠多時候,演算法會遇到效能瓶頸,需要對演算法重新優化。
      更多題目請參見:http://blog.csdn.net/xyanghomepage/article/details/12687771
    18. 騰訊筆試題兩道
      1、有100W個關鍵字,長度小於等於50位元組。用高效的演算法找出top10的熱詞,並對記憶體的佔用不超過1MB。
      點評:老題,與caopengcs討論後,得出具體思路為:
      ①先把100W個關鍵字hash對映到小檔案,根據題意,100W*50B = 50*10^6B = 50M,而記憶體只有1M,故乾脆搞一個hash函式 % 50,分解成50個小檔案;
      ②針對對每個小檔案依次運用hashmap(key,value)完成每個key的value次數統計,後用堆找出每個小檔案中value次數最大的top 10;
      ③最後依次對每兩小檔案的top 10歸併,得到最終的top 10。

      注:很多細節需要注意下,舉個例子,如若hash對映後導致分佈不均的話,有的小檔案可能會超過1M,故為保險起見,你可能會說根據資料範圍分解成50~500或更多的小檔案,但到底是多少呢?我覺得這不重要,勿糾結答案,雖準備在平時,但關鍵還是看臨場發揮,保持思路清晰關注細節即可。OK,更多類似題目參見此文:http://blog.csdn.net/v_july_v/article/details/7382693
      2、求二叉樹的任意兩個節點的最近公共祖先。
      點評:何謂最低公共祖先,如下圖所示:節點1和節點7的最低公共祖先便是5

      點評:此題看似簡單,實則不簡單,下面參考引用《Cracking the Coding Interview》一書上的解法:
      說簡單是因為如果這棵樹是二叉查詢樹,則最低公共祖先t必在兩個節點p和q的中間處,即p<t<q;
      說不簡單則是因為如果不是二叉查詢樹,則我們必須確定這棵樹的結點是否包含指向父結點的連線,如此:
      ①當包含指向父結點的連線時,如果每個結點都包含指向父結點的連線,我們就可以向上追蹤p和q的路徑,直至兩者相交。
      不過,這麼做可能不符合題目的若干假設,因為它需要滿足以下兩個條件之一:1)可將結點標記為isVisited;2)可用另外的資料結構如散列表儲存一些資料。
      ②不包含指向父結點的連線時,另一種做法是,順著一條p和q都在同一邊的鏈子,也就是說,若p和q都在某結點的左邊,就到左子樹中查詢共同祖先。
      若都在右邊,則在右子樹中查詢共同祖先。要是p和q不在同一邊,那就表示已經找到第一個共同祖先。
      這種做法的實現程式碼如下:
      1. /* 若p為root的子孫,則返回true */
      2. boolean covers(TreeNode root, TreeNode p) {   
      3.     if (root == null) returnfalse;  
      4.     if (root == p) returntrue;  
      5.     return covers(root.left, p) || covers(root.right, p);   
      6. }  
      7. TreeNode commonAncestorHelper(TreeNode root, TreeNode p,   
      8.     TreeNode q) {  
      9.         if (root == null) return null;  
      10.         if (root == p || root == q) return root;  
      11.         boolean is_p_on_left = covers(root.left, p);  
      12.         boolean is_q_on_left = covers(root.left, q);  
      13.         /* 若p和q不在同一邊,則返回root */
      14.         if (is_p_on_left != is_q_on_left) return root;  
      15.         /* 否則就是在同一邊,遍訪那一邊 */
      16.         TreeNode child_side = is_p_on_left ? root.left : root.right;  
      17.         return commonAncestorHelper(child_side, p, q);  
      18. }  
      19. TreeNode commonAncestor(TreeNode root, TreeNode p, TreeNode q) {  
      20.     if (!covers(root, p) || !covers(root, q)) { // 錯誤檢查
      21.         return null;  
      22.     }  
      23. return commonAncestorHelper(root, p, q);  
      24. }  
      但上述程式碼存在一些問題,讀者可以進一步思考,後續可能會在程式設計藝術系列裡詳細闡述,可保持關注。
      OK,其實本題是常見的Lowest Common Ancestor (LCA) 問題,更多分析可再看看這3篇文章:①http://eriol.iteye.com/blog/1170465;②。此外,關於二叉樹有很多面試題目,參見:http://blog.csdn.net/luckyxiaoqiang/article/details/7518888
    19. 10月13日,小米2014校招研發筆試-北京站
      2小時3道程式設計題
      Q1:給出一個int陣列,通過變換使得左邊全為奇數右邊全為偶數。
      Q2:給出一顆有序二叉樹,將它轉換為有序的雙向連結串列輸出。
      有序二叉樹形如:
                10
                /   \
              6     14
            /   \    /    \
          4    8 12  16
      雙向連結串列形如:
      4=6=8=10=12=14=16
      Q3:字串的四則運算。給出一個字串,包含0~9的數字和+-*/()的運算子,-僅代表減號不代表負數。舉例如下:
      輸入:1+2*(3-4)
      輸出:-1.
      參考分析見:http://www.itmian4.com/forum.php?mod=viewthread&tid=3713
    20. 10月13日,百度深度學習演算法研發工程師筆試題
      一、簡答題
          1.深度神經網路目前有哪些成功的應用?簡述原因。(10分)
          2.列舉不同程序共享資料的方式(至少三種)。(10分)
          3.對於N個樣本,每個樣本為D維向量,採用歐式距離使用KNN做類預測。(10分)
      1).給出預測時間複雜度。
      2).當N很大時,有哪些方法可以降低複雜度?
      3).k取值的大小對預測方差和偏差有何影響?
      二、演算法和程式設計
          1.給出一個數據A=[a_0, a_1, a-2, ... a_n](其中n可變),打印出該數值元素的所有組合。(15分) 
          2.有這樣一個數組A,大小為n,相鄰元素差的絕對值都是1,如A={4,5,6,5,6,7,8,9,10,9}。現在給定陣列A和目標整數t,請找到t在陣列中的位置。(15分) 
          3.在平面上有一組間距為d的平行線,將一根長度為l(l<d)的針任意擲在這個平面上,求此針與平行線中任意一根相交的概率,用高等數學(微積分、概率的方法)求解,基於布豐投針的結論,任選一種程式語言(C/C++, matlab, python, java),寫出模擬投針實驗(程式中允許把一個理想的Pi作為常量使用),求解圓周率。(15分)
      三、系統設計題

      2.關於K-means聚類演算法,請回答以下問題:
          1).寫出將N個樣本X=(x1, ... xN)聚類成k類的k_means聚類演算法的優化目標;
          2).描述K-means終止的常用條件;
          3).以Kmeans演算法為例,描述Expectation-Maximization(EM)演算法的基本原理與步驟。
          4).用虛擬碼給出基於MPI或者HADOOP的Kmeans並行演算法。
      題目來源:http://blog.csdn.net/luoweifu/article/details/12685169
    21. 10月13日,百度2014校招移動研發筆試題
      一.簡答題
        1.簡述計算機的儲存系統分為哪幾個層次,為什麼這樣的分層能夠提高程式的執行效率。
        2.浮點數在計算中如何表示,如何對浮點數判等。
        3.簡述TCP與UDP協議的差別,兩者與HTTP的關係。並列舉HTTP的方法,以及常見的返回狀態碼。
      二.演算法與程式設計
        1.設計一個反轉字串的函式 char *reverse_str(char *str),不使用系統函式。
        2.給定一個字串,(1,(2,3),(4,(5,6),7)),使它變為(1,2,3,4,5,6,7),設計一個演算法消除其中巢狀的括號。(c/c++)
        3.使用C語言實現htonl(將long性轉為網路位元組碼),不使用系統自帶函式。
      三.系統設計題
      面向物件是一種思想,使用C語言來實現下列問題。
        1.如何定義一個類?
        2.如何建立以及銷燬物件?
        3.如何實現類的繼承?
      題目來源:http://blog.csdn.net/cocoarannie/article/details/12691025
    22. 輸入一個整形陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值。要求時間複雜度為O(n)。
      例如輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為3, 10, -4, 7, 2,因此輸出為該子陣列的和18。
      點評:求子陣列的最大和這個問題,在本部落格內的程式設計藝術系列第7章:http://blog.csdn.net/v_JULY_v/article/details/6444021 已有詳細闡述,但那畢竟只是針對一維陣列,如果陣列是二維的呢?

      如果 “子陣列” 並不只是一個二維陣列或矩形,而是聯通的元素(上下或左右相鄰即視為聯通)呢?

      再言之,如果是個輪胎呢?嘻

      上述這些問題來源於鄒欣老師的部落格:http://www.cnblogs.com/xinz/p/3318230.html。而且事實上,去年本部落格內也同樣整理過這幾個問題,如此文第22題:http://blog.csdn.net/v_july_v/article/details/6855788
    23. 給平面上的2n個點,怎麼找一個圓包含其中的n個點?
    24. 10月17日,微策略2014校招筆試
      1. coding判定二叉樹是否是有序二叉樹
      2. 一個有序陣列A(buffer足夠大),和一個有序陣列B,設計演算法,merge兩個陣列後有序,不使用任何額外的記