畢業後就是程式設計師——我的阿里、金山、中華、騰訊、360、網易面試總結(三)
阿新 • • 發佈:2019-01-24
接著上篇,這篇側重於具體的筆試、面試的問題,至於是哪個公司的就不去追究了,但一定是經常問到的,而且我嵌入式系統工程師和移動開發工程師都參與了,問題要區別看待,那麼自然就少了很多對C++問題的考察。
筆試
有一個教訓是,題目讓你程式設計實現的,不要羅列一大堆思想方法,程式設計麼,就是把你的程式碼寫上去,比如寫個非遞迴的中序遍歷二叉樹,都知道用個棧就好了,但是還是要寫的。
嵌入式中最常考的就是
(1)運算子優先順序,實在記不下來,每次去前看一遍(沒辦法,人家非要考)
(2)用變數a給出下面的定義(《程式設計師面試寶典》,後面很多題都是其中的),注意a)一個指向有10個整型數陣列的指標 b)一個指向函式的指標,該函式有一個整型引數並返回一個整型數 c)一個有10個指標的陣列,該指標指向一個函式,該函式有一個整型引數並返回一個整型數
(3)結構體佔用記憶體空間大小的計算,然後優化;考察記憶體對齊(為什麼要對齊?),其實不同編譯器,不同平臺都是有差別的,但既然要考,把基本的弄清楚。
(4)剩下的對const的理解,#define和inline的區別,typedef、volatile的理解使用以及值傳遞、地址傳遞,記憶體空間分配(堆疊)等寶典上都有。
(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、功能實現,效能優化等等。面試還是針對公司的特點,多看以往的面經比較好。
最後要說的是不管你大二、大三,研一、研二,其實對於找實習都是個非常好的鍛鍊機會,早早的瞭解自己的優勢和需要彌補的地方,同時也能證明你是個用心,早做準備之人,機會是留給有準備的人的,祝你好運!後面會再寫一篇關於工作,關於人生道路的選擇的。
筆試
有一個教訓是,題目讓你程式設計實現的,不要羅列一大堆思想方法,程式設計麼,就是把你的程式碼寫上去,比如寫個非遞迴的中序遍歷二叉樹,都知道用個棧就好了,但是還是要寫的。
嵌入式中最常考的就是
(1)運算子優先順序,實在記不下來,每次去前看一遍(沒辦法,人家非要考)
(2)用變數a給出下面的定義(《程式設計師面試寶典》,後面很多題都是其中的),注意a)一個指向有10個整型數陣列的指標 b)一個指向函式的指標,該函式有一個整型引數並返回一個整型數 c)一個有10個指標的陣列,該指標指向一個函式,該函式有一個整型引數並返回一個整型數
(3)結構體佔用記憶體空間大小的計算,然後優化;考察記憶體對齊(為什麼要對齊?),其實不同編譯器,不同平臺都是有差別的,但既然要考,把基本的弄清楚。
(4)剩下的對const的理解,#define和inline的區別,typedef、volatile的理解使用以及值傳遞、地址傳遞,記憶體空間分配(堆疊)等寶典上都有。
(5)這裡加兩個程式碼的:a)CPU大小端的判斷(要理解)
- int check_endian(){
- union w{
- int a;
- char b;
- }
- c.a = 1;
-
return
- }
b)求二進位制數中1的個數(《程式設計之美》),這個很常用,是一些問題的基礎,其中a是要求1個數的數
- int num = 0;
- while(a){
- a &= (a-1);
- num++;
- }
- return num;
(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、功能實現,效能優化等等。面試還是針對公司的特點,多看以往的面經比較好。
最後要說的是不管你大二、大三,研一、研二,其實對於找實習都是個非常好的鍛鍊機會,早早的瞭解自己的優勢和需要彌補的地方,同時也能證明你是個用心,早做準備之人,機會是留給有準備的人的,祝你好運!後面會再寫一篇關於工作,關於人生道路的選擇的。