(轉)十月百度,阿里巴巴,迅雷搜狗最新面試七十題

(轉)十月百度,阿里巴巴,迅雷搜狗最新面試十一題

來自:http://blog.csdn.net/v_july_v/article/details/6855788

引言

   立即早已進入10月份,十一事後,招聘,筆試,面試,求職漸趨火熱。而在這一系列過程背後浮出的各大IT公司的筆試/面試題則蘊含着諸多思想與設計,細細把玩,思考一番亦能有很多收穫。html

    上個月,本博客着重整理九月騰訊,創新工場,淘寶等公司最新面試十三題,這次重點整理百度,阿里巴巴,迅雷和搜索等公司最新的面試題。同上篇同樣,答案望諸君共同討論之,我的亦在慢慢思考解答。多謝。前端

    本人正在一步一步整理本文中50多道題的答案,但願諸君各位與我一塊兒作這些題。已經作出來的題目我會把答案即時更新到文章中。諸君,一塊兒努力吧。謝謝。July、2011.10.14更新。linux

最新面試十一題

  1. 十月百度:一個數組保存了N個結構,每一個結構保存了一個座標,結構間的座標都不相同,請問如何找到指定座標的結構(除了遍歷整個數組,是否有更好的辦法)?(要麼預先排序,二分查找。要麼哈希。hash的話,座標(x,y)你能夠當作一個2位數,寫一個哈希函數,把(x,y)直接轉成「(x,y)」做爲key,默認用string比較或如Edward Lee所說,將座標(x, y)做爲 Hash 中的 key。例如(m, n),經過 (m,n) 和 (n, m) 兩次查找看是否在 HashMap 中。也能夠在保存時就規定 (x, y) , x < y ,在插入以前作個判斷。
  2. 百度最新面試題:如今有1千萬個隨機數,隨機數的範圍在1到1億之間。如今要求寫出一種算法,將1到1億之間沒有在隨機數中的數求出來。(編程珠璣上有此相似的一題,若是有足夠的內存的話能夠用位圖法,即開一個1億位的bitset,內存爲100m/8== 12.5m, 而後若是一個數有出現,對應的bitset上標記爲1,最後統計bitset上爲0的便可。)
  3. Alibaba筆試題:給定一段產品的英文描述,包含M個英文字母,每一個英文單詞以空格分隔,無其餘標點符號;再給定N個英文單詞關鍵字,請說明思路並編程實現方法
        String extractSummary(String description,String[] key words)
    目標是找出此產品描述中包含N個關鍵字(每一個關鍵詞至少出現一次)的長度最短的子串,做爲產品簡介輸出。(不限編程語言)20分。(掃描過程始終保持一個[left,right]的range,初始化確保[left,right]的range裏包含全部關鍵字則中止。而後每次迭代:
    1,試圖右移動left,中止條件爲再移動將致使沒法包含全部關鍵字。
    2,比較當前range's length和best length,更新最優值。
    3,右移right,中止條件爲使任意一個關鍵字的計數+1。
    4,重複迭代。
    編程之美有最短摘要生成的問題,與此問題相似,讀者可做參考。
  4. 搜狗:有N個正實數(注意是實數,大小升序排列) x1 , x2 ... xN,另有一個實數M。 須要選出若干個x,使這幾個x的和與 M 最接近。 請描述實現算法,並指出算法複雜度(參考第五章、尋找知足條件的兩個或多個數)。
  5. 迅雷:給你10臺機器,每一個機器2個cpu,2g內存,如今已知在10億條記錄的數據庫裏執行一次查詢須要5秒,問用什麼方法能讓90%的查詢能在100毫秒之內返回結果。(@geochway:將10億條記錄排序,而後分到10個機器中,分的時候是一個記錄一個記錄的輪流分,
    確保每一個機器記錄大小分佈差很少,每一次查詢時,同時提交給10臺機器,同時查詢,
    由於記錄已排序,能夠採用二分法查詢。
    若是沒法排序,只能順序查詢,那就要看記錄自己的機率分佈,不然不可能實現。
    一個機器2個CPU未必能起到做用,要看這兩個CPU可否並行存取內存,取決於系統架構
    。)
  6. 給定一個函數rand()能產生0到n-1之間的等機率隨機數,問如何產生0到m-1之間等機率的隨機數?
  7. 騰訊:五筆的編碼範圍是a ~ y的25個字母,從1位到4位的編碼,若是咱們把五筆的編碼按字典序排序,造成一個數組以下:
        a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy
    其中a的Index爲0,aa的Index爲1,aaa的Index爲2,以此類推。
    1)編寫一個函數,輸入是任意一個編碼,好比baca,輸出這個編碼對應的Index;
    2)編寫一個函數,輸入是任意一個Index,好比12345,輸出這個Index對應的編碼。
  8. 2011.10.09百度筆試題(下述第8-12題):linux/unix遠程登錄都用到了ssh服務,當網絡出現錯誤時服務會中斷,linux/unix端的程序會中止。爲何會這樣?說下ssh的原理,解釋中斷的原理。
  9. 一個最小堆,也是徹底二叉樹,用按層遍歷數組表示。
      1.  求節點a[n]的子節點的訪問方式
      2.  插入一節點的程序void add_element(int *a,int size,int val);
      3.  刪除最小節點的程序。
  10. a)求一個全排列函數:如p([1,2,3]) ,輸出:  [123],[132],[213],[231],[321],[323]。
    b)求一個組合函數:    如p([1,2,3]) ,輸出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]。
    這兩問能夠用僞代碼(全排列請參考這裏的第67題:微軟、Google等公司很是好的面試題及解答[第61-70題] )。
  11. 有這樣一種編碼:如,N=134,M=f(N)=143,N=020,M=fun(N)=101,其中N和M的位數同樣,N,M能夠都可以以0開頭,N,M的各位數之和要相等,即1+3+4=1+4+3,且M是大於N中最小的一個,
    如今求這樣的序列S,N爲一個定值,其中S(0)=N,S(1)=fun(N),S(2)=fun(S(1))。
  12. 有1000萬條URL,每條URL 50字節,只包含主機前綴,要求實現URL提示系統:
    (1)要求實時更新匹配用戶輸入的地址,每輸出一個字符,輸出最新匹配URL
    (2)每次只匹配主機前綴,例如對 www.abaidu.comwww.baidu.com,用戶輸入www.b時只提示www.baidu.com(3)每次提供10條匹配的URL
    (4)以用戶需求爲主。
  13. 海量記錄,記錄形式以下: TERMID URLNOCOUNT urlno1 urlno2   ..., urlnon 
    怎麼考慮資源和時間這兩個因素,實現快速查詢任意兩個記錄的交集,並集等,設計相關的數據結構和算法。
  14. 百度最新筆試題(感謝xiongyangwan提供的題目):利用互斥量和條件變量設計一個消息隊列,具備如下功能:
       1 建立消息隊列(消息中所含的元素)
       2 消息隊列中插入消息
       3 取出一個消息(阻塞方式)
       4 取出第一消息(非阻塞方式)
  15. 百度移動終端研發筆試:系統設計題(40分)
    對已排好序的數組A,通常來講可用二分查找能夠很快找到。現有一特殊數組A[],它是循環遞增的,如A[]={ 17 19 20 25 1 4 7 9},試在這樣的數組中找一元素x,看看是否存在。
    請寫出你的算法,必要時可寫僞代碼,並分析其空間、時間複雜度。
  16. #include<stdio.h>
    #include <string.h>
    void main()
    {
     int a[2000];
     char *p = (char *)a;
     int i ;
     for( i = 0; i < 2000; i++)
      a[i] = -i -1;
     printf("%d\n", strlen(p));
    }
    寫出輸出結果
    onlyice:i = FFFFFF00H 的時候,纔有'\0'出現,就是最後一個字節,C風格字符串讀到'\0'就終止了。FFFFFF00H 是 -256,就是 i 的值爲255時a[i] = FFFFFF00H ....
  17. 騰訊10.09測試筆試題:有N+2個數,N個數出現了偶數次,2個數出現了奇數次(這兩個數不相等),問用O(1)的空間複雜度,找出這兩個數,不須要知道具體位置,只須要知道這兩個值。(@Rojay:xor一次,獲得2個奇數次的數之和x。第二步,以x(展開成二進制)中有1的某位(假設第i位爲1)做爲劃分,第二次只xor第i位爲1的那些數,獲得y。而後x xor y以及y即是那兩個數。
  18. @well:一個整數數組,有n個整數,如何找其中m個數的和等於另外n-m個數的和?(與上面第4題相似,參考:第五章、尋找知足條件的兩個或多個數)。
  19. 阿里雲筆試題:一個HTTP服務器處理一次請求須要500毫秒,請問這個服務器如何每秒處理100個請求。
  20. 今天10.10阿里雲筆試@土豆:一、三次握手;二、死鎖的條件。互斥條件(Mutual exclusion):一、資 源不能被共享,只能由一個進程使用。二、請求與保持條件(Hold and wait):已經獲得資源的進程能夠再次申請新的資源。三、非剝奪條件(No pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。四、循環等待條件(Circular wait):系統中若干進程組成環路,該環路中每一個進程都在等待相鄰進程正佔用的資源。處理死鎖的策略1. 忽略該問題。例如鴕鳥算法,該算法能夠應用在極少發生死鎖的的狀況下。爲何叫鴕鳥算法呢,由於傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥以爲看不到 危險也就沒危險了吧。跟掩耳盜鈴有點像。2.檢測死鎖而且恢復。3.仔細地對資源進行動態分配,以免死鎖。4.經過破除死鎖四個必要條件之一,來防止死 鎖產生。
  21. 微軟2011最新面試題(如下三題,第2二、2三、24題皆摘自微軟亞洲研究院的鄒欣老師博客):瀏覽過本人的程序員編程藝術系列的文章,必定對其中的這個問題很有印象:第七章、求連續子數組的最大和。求數組最大子數組的和最初來源於編程之美,image。我在編程藝術系列中提供了多種解答方式,然而這個問題若擴展到二維數組呢?再者,若數組首尾相連, 像一個輪胎同樣, 又怎麼辦呢?聰明的同窗仍是給出了漂亮的答案, 而且用 SilverLight/WPF 給畫了出來, 以下圖所示:

    好, 設想如今咱們有一張紙帶,兩面都寫滿了像如上第一幅圖那樣的數字, 咱們把紙帶的一端扭轉, 和另外一端接起來, 構成一個莫比烏斯環 (Möbius Strip,如將一個長方形紙條ABCD的一端AB固定,另外一端DC扭轉半周後,把AB和CD粘合在一塊兒 ,獲得的曲面就是麥比烏斯圈,也稱莫比烏斯帶。),以下圖所示:ios

    如 上,儘管這個紙帶扭了一下,  可是上面仍是有數組, 仍是有最大子數組的和,對麼? 在求最大子數組的和以前, 咱們用什麼樣的數據結構來表示這些數字呢? 你能夠用 Java, C, C#, 或其餘語言的數據結構來描述這個莫比烏斯環上的數組。數據結構搞好了, 算法天然就有了。(@風大哥:莫比烏斯帶,用環形數組或者鏈表能夠 表示。環型數組的話,1-N,到N特殊處理一下,連到1就是環型數組了,一個紙帶上正反兩面各有N個數,A1...An,B1...Bn,那麼就能夠構造 一個新的數組:A1-An-B1-Bn.訪問到Bn下一位就是A1,就是環形的數組了。從某個位置k開始,用i,j向一個方向遍歷,直到i到達k位置,或 者i=j,被追上,用數組須要一點技巧,就是J再次過k須要打個標誌,以便計算終止條件和輸出。固然,若是用鏈表就更簡單了。把鏈表首尾相接便可,即An 執行B1,Bn指向A1便可。)  c++

  22. 《編程之美》的第一題是讓Windows 任務管理器的CPU 使用率曲線畫出一個正弦波。我一直在想, 能不能把CPU 使用率邊上的網絡使用率也如法炮製一下呢?  好比, 也來一個正弦曲線?
  23. 若是你沒看過, 也至少據說<人月神話>  (The Mythical Man-month) 這本在軟件工程領域頗有影響的書.  當你在微軟學術搜索中輸入 「manmonth」 這個詞的時候, 你會意外地碰到下面這個錯誤:程序員

    經 過幾回試驗以後, 你發現必需要輸入 「man-month」 才能獲得但願的結果。 這不就是隻差一個  ‘-’ 符號麼?  爲何這個搜索引擎不能作得聰明一些, 給一些提示 (Query Suggestion)? 或者自動把用戶想搜的結果展示出來 (Query Alteration)?   咱們在輸入比較長的英文單詞的時候, 也不免會敲錯一兩個字母, 網站應該幫助用戶, 而不是冷冰冰地拒絕用戶啊。 web

    微軟的學術搜索 (Microsoft Academic Search) 索引了超過 3千萬的文獻,  2 千萬的人名, 怎麼能以比較小的代價, 對常常出現的輸入錯誤提供提示? 或直接顯示相關結果, 避免用戶反覆嘗試輸入的煩惱?   面試

    你可能會說, 這很難吧,   可是另外一家搜索引擎彷佛輕易地解決了這個問題 (谷歌,讀者能夠一試)。 因此, 仍是有辦法的。算法

    這個題目要求你:
     1) 試驗不一樣的輸入, 反推出目前微軟的學術搜索是如何實現搜索建議 (Query Suggestion)的。
     2) 提出本身的改進建議,  並論證這個解決方案在千萬級數據規模上能達到 「足夠好」 的時間 (speed) 和空間 (memory usage)效率。
     3) 估計這事須要幾個 人·月 (man-month) 才能作完?  (備註:順便給鄒欣老師傳個話,若是應屆畢業生能夠能作好上述所有三個題目,即可直接找他。http://www.cnblogs.com/xinz/archive/2011/10/10/2205232.html)。數據庫

  24. 今天10.10阿里雲部分筆試題目:
    一、一個樹被序列化爲數組,如何反序列化。
    二、如何將100百萬有序數據最快插入到STL的map裏。
    三、有兩個線程a、b分別往一條隊列push和pop數據,在沒有鎖和信號量的狀況下如何避免衝突訪問。
    四、寫一個函數,功能是從字符串s中查找出子串t,並將t從s中刪除。
  25. 將長度爲m和n的兩個升序數組複製到長度爲m+n的數組裏,升序排列。
  26. tencent2012筆試題附加題
    問題描述: 例如手機朋友網有n個服務器,爲了方便用戶的訪問會在服務器上緩存數據,所以用戶每次訪問的時候最好能保持同一臺服務器。
    已 有的作法是根據ServerIPIndex[QQNUM%n]獲得請求的服務器,這種方法很方便將用戶分到不一樣的服務器上去。可是若是一臺服務器死掉了, 那麼n就變爲了n-1,那麼ServerIPIndex[QQNUM%n]與ServerIPIndex[QQNUM%(n-1)]基本上都不同了,所 以大多數用戶的請求都會轉到其餘服務器,這樣會發生大量訪問錯誤。

    問: 如何改進或者換一種方法,使得:
    (1)一臺服務器死掉後,不會形成大面積的訪問錯誤,
    (2)原有的訪問基本仍是停留在同一臺服務器上;
    (3)儘可能考慮負載均衡。(思路:往分佈式一致哈希算法方面考慮。關於此算法,可參見此文:http://blog.csdn.net/21aspnet/article/details/5780831

  27.  騰訊面試題:A.txt和B.txt兩個文件,A.txt有1億個QQ號 , B.txt  100W個QQ號, 用代碼實現交、並、差。

  28.  說出下面的運行結果
    #include <iostream>
    using namespace std;

    class A
    {
    public:
        virtual void Fun(int number = 10)
        {
            std::cout << "A::Fun with number " << number<<endl;
        }
    };

    class B: public A
    {
    public:
        virtual void Fun(int number = 20)
        {
            std::cout << "B::Fun with number " << number<<endl;
        }
    };

    int main()
    {
        B b;
        A &a = b;
        a.Fun();
     return 0;
    }                 //虛函數動態綁定=>B,非A,缺省實參是編譯時候肯定的=>10,非20 。

  29.  今晚阿里雲筆試:有101根電線 每根的一頭在樓底  另外一端在樓頂  有一個燈泡 一個電池 無數根很短的電線  怎麼樣在樓上一次在樓下去一次將電線的對應關係弄清楚。

  30. 金山筆試題:
     一、C ++爲何常常將析構函數聲明爲虛函數?
     二、inline和#define的如何定義MAX,區別是什麼。
     三、const的用法,如何解除const限制。
     四、智能指針的做用和設計原理。
     五、STL中vetor如何本身設計,關鍵設計點,函數聲明,自定義刪除重複元素的函數。
     六、如何用一條SQL語句,刪除表中某字段重複的記錄。
  31.  淘寶:

    在現代web服務系統的設計中,爲了減輕源站的壓力,一般採用分佈式緩存技術,其原理以下圖所示,前端的分配器將針對不一樣內容的用戶請求分配給不一樣的緩存服務器向用戶提供服務。
                   分配器
          /             |         \
    緩存         緩存 . ..緩存
    服務器1 服務器2 ...服務器n

     1)請問如何設置分配策略,能夠保證充分利用每一個緩存服務器的存儲空間(每一個內容只在一個緩存服務器有副本)
     2)當部分緩存服務器故障,或是由於系統擴容,致使緩存服務器的數量動態減小或增長時,你的分配策略是否能夠保證較小的緩存文件重分配的開銷,若是不能,如何改進?
     3)當各個緩存服務器的存儲空間存在差別時(若有4個緩存服務器,存儲空間比爲4:9:15:7),如何改進你的策略,按照如上的比例將內容調度到緩存服務器?(思路:往memcached或者一致性hash算法方面考慮,但具體狀況,具體分析。)

  32.  騰訊:50個臺階,一次可一階或兩階,共有幾種走法(老掉牙的題了,詳見微軟面試100題2010版。

    long long Fibonacci_Solution1(unsigned int n)
    {
          int result[2] = {0, 1};
          if(n < 2)
                return result[n];

          return Fibonacci_Solution1(n - 1) + Fibonacci_Solution1(n - 2);
    })。

  33.  有兩個float型的數,一個爲fmax,另外一個爲fmin,還有一個整數n,若是 (fmax - fmin)/n ,不能整除,怎麼改變fmax,fmin,使改變後能夠整除n 。

  34.  2011.10.11最新百度電面:
     一、動態連接庫與靜態連接庫的區別(  靜態連接庫是.lib格式的文件,通常在工程的設置界面加入工程中,程序編譯時會把lib文件的代碼加入你的程序中所以會增長代碼大小,你的程序一運行lib代碼強制被裝入你程序的運行空間,不能手動移除lib代碼。
      動態連接庫是程序運行時動態裝入內存的模塊,格式*.dll,在程序運行時能夠隨意加載和移除,節省內存空間。
      在大型的軟件項目中通常要實現不少功能,若是把全部單獨的功能寫成一個個lib文件的話,程序運行的時候要佔用很大的內存空間,致使運行緩慢;可是若是將 功能寫成dll文件,就能夠在用到該功能的時候調用功能對應的dll文件,不用這個功能時將dll文件移除內存,這樣能夠節省內存空間
    。)
     二、指針與引用的區別(相同點:1. 都是地址的概念;
    指針指向一塊內存,它的內容是所指內存的地址;引用是某塊內存的別名。

    區別
    1. 指針是一個實體,而引用僅是個別名;
    2. 引用使用時無需解引用(*),指針須要解引用;
    3. 引用只能在定義時被初始化一次,以後不可變;指針可變;
    4. 引用沒有 const,指針有 const;
    5. 引用不能爲空,指針能夠爲空;
    6. 「sizeof 引用」獲得的是所指向的變量(對象)的大小,而「sizeof 指針」獲得的是指針自己(所指向的變量或對象的地址)的大小;
    7. 指針和引用的自增(++)運算意義不同;
    8.從內存分配上看:程序爲指針變量分配內存區域,而引用不須要分配內存區域
    。)
     三、進程與線程的區別(①從概念上
    進程:一個程序對一個數據集的動態執行過程,是分配資源的基本單位。
    線程:一個進程內的基本調度單位。
    線程的劃分尺度小於進程,一個進程包含一個或者更多的線程。
    ②從執行過程當中來看
    進程:擁有獨立的內存單元,而多個線程共享內存,從而提升了應用程序的運行效率。
    線程:每個獨立的線程,都有一個程序運行的入口、順序執行序列、和程序的出口。可是線程不可以獨立的執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
    ③從邏輯角度來看:(重要區別)
    多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。可是,操做系統並無將多個線程看作多個獨立的應用,來實現進程的調度和管理及資源分配
    。)
     四、函數調用入棧出棧的過程
     四、c++對象模型與虛表
     五、海量數據處理,以及如何解決Hash衝突等問題
     六、系統設計,機率算法

  35.  今天騰訊面試:
    一個大小爲N的數組,裏面是N個整數,怎樣去除重複,
    要求時間複雜度爲O(n),空間複雜度爲O(1)(此題答案請見@做者hawksoft:http://blog.csdn.net/hawksoft/article/details/6867493)。

  36. 一個長度爲10000的字符串,寫一個算法,找出最長的重複子串,如abczzacbca,結果是bc(思路:後綴樹/數組的典型應用,@well:就是求後綴數組的height[]的最大值 
    )。

  37. 今晚10.11大華筆試題:創建一個data structure表示沒有括號的表達式,並且找出全部等價(equivalent)的表達式
    好比:
    3×5 == 5×3
    2+3 == 3+2
  38. 今晚10.11百度二面:判斷一個數的全部因數的個數是偶數仍是奇數(只 須要你判斷因數的個數是偶數個仍是奇數個,那麼能夠這麼作@濱湖&&土豆:那隻在計算質因數的過程當中統計一下當前質因數出現的次數,若是 出現奇數次則結果爲偶,而後能夠當即返回;若是每一個質因數的次數都是偶數,那麼結果爲奇。若是該數是平方數 結果就爲奇  不然就爲偶了)。
  39. 好比A認識B,B認識C,可是A不認識C, 那麼稱C是A的二度好友。找出某我的的全部十度好友.  數據量爲10萬(BFS,同時記錄已遍歷過的頂點,遍歷時遇到的已遍歷過的頂點不插入隊列。此是今晚10.11人人筆試題目,但它在上個月便早已出如今本人博客中,即此文第23題第2小題:九月騰訊,創新工場,淘寶等公司最新面試十三題)。
  40. map在什麼狀況下會發生死鎖;stl中的map是怎麼實現的?(有要參加淘寶面試的朋友注意,淘寶喜歡問STL方面的問題
  41. 昨日筆試:有四我的,他們每次一塊兒出去玩的時候,用同時剪刀包袱錘的方式決定誰請客。設計一種方法,使得他們只需出一次,就能夠決定請客的人,而且每一個人請客的概率相同,均爲25%。
  42. Given two sets of n numbers a1, a2…, an and b1, b2…bn, find, in polynomial time, a permutation Π such that ∑i |ai - b Π(i)| is minimized?  Prove your algorithm works.
    有兩個數組,在多項式時間裏找到使 兩數組元素 的差 的絕對值 的和 最小 的一種置換。
    並證實算法的有效性。注意,關鍵是證實。(此題我的去年整理過相似的一題,詳見微軟面試100題2010版第32題:http://blog.csdn.net/v_JULY_v/archive/2011/01/10/6126444.aspx
  43. 對已排好序的數組A,通常來講可用二分查找 能夠很快找到。
    現有一特殊數組A[],它是循環遞增的,如A[]={ 17 19 20 25 1 4 7 9},
    試在這樣的數組中找一元素x,看看是否存在。
    請寫出你的算法,必要時可寫僞代碼,並分析其空間 時間複雜度。
  44. 網易:題意很簡單,寫一個程序,打印出如下的序列。
    (a),(b),(c),(d),(e)........(z)
    (a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)
    (a,b,c),(a,b,d)....(a,b,z),(a,c,d)....(x,y,z)
    ....
    (a,b,c,d,.....x,y,z)(思路:全排列問題
  45. int global = 0;

    // thread 1
    for(int i = 0; i < 10; ++i)
     global -= 1;

    // thread 2
    for(int i = 0; i < 10; ++i)
     global += 1;

    以後global的可能的值是多少(多種可能)?

  46. 今天10.13新浪筆試:
     一、用隱喻說明class和object的區別,要求有新意。
     二、DDL,DML,DCL的含義,和距離
     三、TCP創建鏈接的三次握手
     四、設計人民幣面值,要求種類最好,表示1——1000的全部數,平均紙幣張數最少
     五、UML
  47. 一個數組。裏面的數據兩兩相同,只有兩個數據不一樣,要求找出這兩個數據。要求時間複雜度0(N)空間複雜度O(1)。
  48. 兩個數相乘,小數點後位數沒有限制,請寫一個高精度算法。
  49. 面試基礎題:
     一、靜態方法裏面爲何不能聲明靜態變量?
     二、若是讓你設計一個類,何時把變量聲明爲靜態類型?
     三、抽象類和接口的具體區別是什麼?
  50. 谷歌昨晚10.13算法筆試三題:
    1.一個環形公路,上面有N個站點,A1, ..., AN,其中Ai和Ai+1之間的距離爲Di,AN和A1之間的距離爲D0。
    高效的求第i和第j個站點之間的距離,空間複雜度不超過O(N)
    它給出了部分代碼以下:
    #define N 25
    double D[N]
    ....
    void Preprocess()
    {
         //Write your code1;
    }
    double Distance(int i, int j)
    {
          //Write your code2;
    }

    2. 一個字符串,壓縮其中的連續空格爲1個後,對其中的每一個字串逆序打印出來。好比"abc   efg  hij"打印爲"cba gfe jih"。

    3. 將一個較大的錢,不超過1000000(10^6)的人民幣,兌換成數量不限的100、50、十、五、二、1的組合,請問共有多少種組合呢?(其它選擇題考的是有關:操做系統、樹、機率題、最大生成樹有關的題,另外聽老夢說,谷歌不給人霸筆的機會。)。

  51. 谷歌在線筆試題:
    輸入兩個整數A和B,輸出全部A和B之間知足指定條件的數的個數。指定條件:假設C=8675在A跟B之間,若(8+6+7+5)/ 4 > 7,則計一個,不然不計。
    要求時間複雜度:log(A)+log(B)。
  52. 十五道百度、騰訊面試基礎測試題@fengchaokobe:
     一、寫一個C的函數,輸入整數N,輸出整數M,M知足:M是2的n次方,且是不大於N中最大的2的n次方。例如,輸入4,5,6,7,都是輸出4 。
     二、C++中虛擬函數的實現機制。
     三、寫出選擇排序的代碼及快速排序的算法。
     四、你認爲何排序算法最好?
     五、tcp/ip的那幾層協議,IP是不是可靠的?爲何?
     六、進程和線程的區別和聯繫,什麼狀況下用多線程,何時用多進程?
     七、指針數組和數組指針的區別。
     八、查找單鏈表的中間結點。
     九、最近在實驗室課題研究或工做中遇到的技術難點,怎麼解決的?
     十、sizeof和strlen的區別。
     十一、malloc-free和new-delete的區別
     十二、大數據量中找中位數。
     1三、堆和棧的區別。
     1四、描述函數調用的整個過程。
     1五、在一個兩維平面上有三個不在一條直線上的點。請問可以做出幾條與這些點距離相同的線?
  53. 搜狐的一道筆試題:
     char *s="mysohu";
     s[0]=0; //..
     printf("%s",s);
    輸出是什麼啊?
    搜狐的一道大題:
      數組很是長,如何找到第一個只出現一次的數字,說明算法複雜度。(與我的以前整理的微軟面試100題中,第17題:在一個字符串中找到第一個只出現一次的字符。相似,讀者可參考。
  54. 百度筆試3. 假設有一臺迷你計算機,1KB的內存,1MHZ的cpu,已知該計算機執行的程序可出現肯定性終止(非死循環),問如何求得這臺計算機上程序運行的最長時間,能夠作出任何大膽的假設。
  55. 微軟10.15筆試:對於一個數組{1,2,3}它的子數組有{1,2},{1,3}{2,3},{1,2,3},元素之間能夠不是連續的,對於數組{5,9,1,7,2,6,3,8,10,4},升序子序列有多少個?或者換一種表達爲:數組int a[]={5,9,1,7,2,6,3,8,10,4}  。求其全部遞增子數組(元素相對位置不變)的個數,   例如:{5,9},{5,7,8,10},{1,2,6,8}。
  56. 今日騰訊南京筆試題:
  57.   M*M的方格矩陣,其中有一部分爲障礙,八個方向都可以走,現假設矩陣上有Q+1節點,從(X0,Y0)出發到其餘Q個節點的最短路徑。
    其中,1<=M<=1000,1<=Q<=100。
  58. 另一個筆試題:
    一個字符串S1:全是由不一樣的字母組成的字符串如:abcdefghijklmn
    另外一個字符串S2:相似於S1,但長度要比S1短。
    問題是,設計一種算法,求S2中的字母是否均在S1中。(
    字符串包含問題,詳見程序員編程藝術系列第二章http://blog.csdn.net/v_JULY_v/article/details/6347454)。
  59.  檢索一英語全文,順序輸出檢測的單詞和單詞出現次數。
  60. 今天10.15下午網易遊戲筆試題:給一個有序數組array[n],和一個數字m,判斷m是不是這些數組裏面的數的和。(相似於微軟面試100題2010年版第4題,即至關於給定一棵樹,而後給定一個數,要求把那些 相加的和等於這個數的 全部節點打印出來)。
  61. 一個淘寶的面試題
    文件A:
    uid username
    文件B:
    username password
    文件A是按照uid有序排列的,要求有序輸出合併後的A,B文件,格式爲uid username password(A B 兩個文件都很大,內存裝不下。)
  62. 百度可能會問問memcached(可下載此份文檔看看http://tech.idv2.com/2008/08/17/memcached-pdf/源碼下載地址http://www.oschina.net/p/memcached),apache之類的。
  63. 今上午10.16百度筆試:1.C++ STL裏面的vector的實現機制,
    (1)當調用push_back成員函數時,怎麼實現?(粗略的說@owen,內存足則直接 placement new構造對象,不然擴充內存,轉移對象,新對象placement new上去。具體的參見此文http://blog.csdn.net/v_july_v/article/details/6681522
    (2)當調用clear成員函數時,作什麼操做,若是要釋放內存該怎麼作。(調用析構函數,內存不釋放。 clear沒有釋放內存,只是將數組中的元素置爲空了,釋放內存須要delete。
    2. 函數foo找錯,該函數的做用是將一個字符串中的a-z的字母的頻數找出來
    void foo(char a[100],int cnt[256])
    {
    memset(cnt ,0, sizeof(cnt));
    while (*a!='\0')
    {
    ++cnt[*a];
    ++a;
    }
    for ( char c='a';c<='z';++c)
    {
    printf("%c:%d\n",c,cnt[c]);
    }
    }
    int main()
    {
    char a[100]="百度abc";
    int cnt[256];
    foo(a,cnt);
    return 0;
    }
  64. 騰訊長沙筆試:旅行商問題。
  65. 今天完美10.16筆試題:2D平面上有一個三角形ABC,如何從這個三角形內部隨機取一個點,且使得在三角形內部任何點被選取的機率相同。
  66. 不用任何中間變量,實現strlen函數
  67. 筆試:聯合賦值問題:#include <stdio.h>
    union A{
    int i;
    char x[2];
    }a;
    int main()
    {
    a.x[0]=10;
    a.x[1]=1;
    printf("%d\n",a.i);
    return 0;
    }
    sizeof(a) = sizeof(int) = 4 byte
    4 * 8 = 32 bit
    a = > 00000000 00000000 00000000 00000000
    a.x[0]=10 => 00000000 00000000 00000000 00001010
    a.x[1]=1 => 00000000 00000000 00000001 00001010
    a.i = 1*256 + 1*8 + 1*2 = 256+10 = 266
  68. 昨天作了中興的面試題:
    struct A{
      int a;
      char b;
      char c;
    };
    問sizeof(A)是多大?
  69. 更新至2011.10.16下午.....

    更多面試題,參見橫空出世,席捲Csdn--評微軟等數據結構+算法面試100題 (在此文中,集結了本博客已經整理的236道面試題)。

後記   

    此些面試題看多了,天然會發現題目類型可能會變幻無窮,但解決問題的思路卻只有那麼幾種。再者,寫代碼的時候,不少的細節須要務必注意,如返回值,函數參數的檢查,特殊狀況的處理等等,這是一個代碼規範性的問題。在結文以前,有三事須說明:

  1. 結構之法算法之道所有博文集錦第4期CHM文件下載:http://download.csdn.net/detail/v_JULY_v/3660710
  2. 本博客算法交流羣第14羣:Algorithms_15,112532520。
  3. 微軟面試所有100題的答案現在已由一朋友阿財作出,微軟面試100題2010年版所有答案集錦:http://blog.csdn.net/v_july_v/article/details/6870251,供諸君參考。

    ok,往後一有最新的面試題,再整理,有任何問題,歡迎在本文評論下指出或來信指導(zhoulei0907@yahoo.cn),謝謝。July、2011.10.09。

相關文章
相關標籤/搜索