1. 程式人生 > >畢業後就是程式設計師——我的阿里、金山、中華、騰訊、360、網易面試總結(三)

畢業後就是程式設計師——我的阿里、金山、中華、騰訊、360、網易面試總結(三)

接著上篇,這篇側重於具體的筆試、面試的問題,至於是哪個公司的就不去追究了,但一定是經常問到的,而且我嵌入式系統工程師和移動開發工程師都參與了,問題要區別看待,那麼自然就少了很多對C++問題的考察。
筆試
    有一個教訓是,題目讓你程式設計實現的,不要羅列一大堆思想方法,程式設計麼,就是把你的程式碼寫上去,比如寫個非遞迴的中序遍歷二叉樹,都知道用個棧就好了,但是還是要寫的。
    嵌入式中最常考的就是
   (1)運算子優先順序,實在記不下來,每次去前看一遍(沒辦法,人家非要考)
   (2)用變數a給出下面的定義(《程式設計師面試寶典》,後面很多題都是其中的),注意a)一個指向有10個整型數陣列的指標 b)一個指向函式的指標,該函式有一個整型引數並返回一個整型數 c)一個有10個指標的陣列,該指標指向一個函式,該函式有一個整型引數並返回一個整型數

   (3)結構體佔用記憶體空間大小的計算,然後優化;考察記憶體對齊(為什麼要對齊?),其實不同編譯器,不同平臺都是有差別的,但既然要考,把基本的弄清楚。
   (4)剩下的對const的理解,#define和inline的區別,typedef、volatile的理解使用以及值傳遞、地址傳遞,記憶體空間分配(堆疊)等寶典上都有。

   (5)這裡加兩個程式碼的:a)CPU大小端的判斷(要理解)

  1. int check_endian(){  
  2.     union w{  
  3.         int a;  
  4.         char b;  
  5.     }  
  6.     c.a = 1;  
  7.     return
     (c.b == 1)  
  8. }  

    b)求二進位制數中1的個數(《程式設計之美》),這個很常用,是一些問題的基礎,其中a是要求1個數的數

  1. int num = 0;  
  2. while(a){  
  3.     a &= (a-1);  
  4.     num++;  
  5. }  
  6. return num;  
   (6)Java中主要涉及介面、抽象類的理解,異常處理機制
   (7)對記憶體回收時機的考察(恰當時候,不是一定回收),finalize的執行,順帶的可以和final、finally的理解一起出現,而且注意finally即使在return後面,也照樣執行;有些公司考到記憶體的分代回收,可以瞭解下。

   (8)字串常量池的理解,題目的話就是結合new建立物件和==、equal,問你建立了幾個物件,判斷兩個物件是否相同,一般記住new肯定建立新的引用,而是否指向同一個字串用==無法判斷,而單獨宣告String物件,那麼就沒有新建立物件。
   (9)String類的+操作,StringBuild的優化和StringBuffer的區別,相類似的對各種容器的區別理解(List,Set,Map),而且會說到執行緒安全SynchronizedMap和ConcurrentHashMap的區別;至於真的考察Java中I/O類的聯合使用,那就靠自己的經驗了。
   (10)內部類、泛型、反射好好看看《Java程式設計思想》,基本應該能搞定。而且你還會看到是否有sizeof,執行緒之間的協作問題等等。
面試
    不管答案怎樣,面試的心態和表達技巧一定要多學習,不要僅僅回答是或否,要有條理的展開,否則一個小時左右的面試會有各種各樣的問題,總有你答的不好的;面試是個人和人交流的過程,但是簡單基礎的問題千萬別錯,否則後面一點機會沒有。
   (1)必問:程序間通訊、寫個擅長的排序或者網路公司問個TCP、UDP區別,其實可以從問你DNS、HTTP、Ping等屬於哪一層,底層是基於傳輸層的什麼來考察你的;還有就是各種許可權相關的,序列化相關,C++的虛擬函式實現,Java的記憶體回收機制,強調的是要用自己的話說出來,儘量不要去背。嵌入式的基本nand nor Flash的區別以及筆試中的大小端、巨集定義、斷言等問題也常在面試中出現。
   (2)常問在《程式設計之美》上的如摸石頭的遊戲3篇, 求二進位制數中1的個數 ,尋找最大的K個數,斐波那契(Fibonacci)數列,陣列相關的如 求陣列的子陣列之和的最大值,求陣列中最長遞增子序列 以及 桶中取黑白球等,很多是原題,也有就是以此為基礎來做的; 比如百萬級數量的IP段,一個區段對應一個地方(比如北京,西安之類),給一個IP查詢確定是哪個地方
   (3)設計模式 23個常用的要了解一下,單例模式要會實現,看看我推薦的書應該問題也不大的。
   (4)Android相關的也是些框架的理解,程序間通訊,四大元件的理解使用,從這些問題上看看你到底用到、學習到一個什麼樣程度,對錯估計不是特別在意的。
   (5)非技術性的就是些專案難點,收穫,感受,你的優勢,證明你的能力之類,還有就是你期望的工作環境、氛圍,職業規劃,理想;有時會遇到壓力的優缺點,把一個MP3推銷給聾子等問題。補充一下的是,有時候會從你做的專案中問你對產品的思考,包括UI、功能實現,效能優化等等。面試還是針對公司的特點,多看以往的面經比較好。
    最後要說的是不管你大二、大三,研一、研二,其實對於找實習都是個非常好的鍛鍊機會,早早的瞭解自己的優勢和需要彌補的地方,同時也能證明你是個用心,早做準備之人,機會是留給有準備的人的,祝你好運!後面會再寫一篇關於工作,關於人生道路的選擇的。