面試是朋友推薦過去,事前已經發過簡歷,一週後通知我去面試,早上9:30準時到,地點在中關村教堂後面。java
公司門廳有保安小哥,打電話來領人,進門就在大廳開始。android
面試官兩人,一年輕(如下"輕官"代替),一年長(如下「長官」代替)。年長的穿了件大外套+北京布鞋,頗有個性。c++
無筆試,直接技術面,開始大部分是「」長官提問,後來「輕官」問了一些。面試
提問順序記不太清了,出門時候10:40左右,期間一直沒停,能想起來的提問以下:算法
面試問題 總結 1.寫一個函數,把int轉換成byte[]; 1.1 java中數據存儲區域有哪些; 1.2 String str1 = "abc" String str2 = "abc" str1 == str2嗎 爲何?; 2.模擬一個ArrayList ,寫一個add(Object obj ) 函數 ; 2.1 說說時間和複雜度 2.2 數據變多後如何處理越界 3.Activity 四種啓動模式,分別說說意思和區別 ; 3.1 什麼狀況下使用四種模式,爲何? 4.數的理解,二叉樹如何平衡; 4.1 若是插入的數據相似9,8,7,6....1 如何保證左右平衡 5.Handler,Thread , Looper , Message 關係 5.1 Handler 是任何地方均可以建立的嗎? 5.2 每一個線程是否都有Looper , 5.3 可否在一個Handler 中 new Thread ().start(); 6. 假若有一個List ,裏面有十個數 0-9 , 6.1 若是循環遍歷中若是 i%2 == 0 執行remove ,是否能夠順利執行 for (int i = 0; i < array.size(); i++) { if (i%2 == 0) { array.remove(i); } } 6.2 若是能夠順利執行,執行完畢,list剩餘的數位哪幾個; 7.看簡歷項目 7.1 說說簡歷框架如何實現 7.2 哪個頁面是你寫的,頁面的佈局是如何設計,具體到某個控件使用的是什麼view; 7.3 某個view 如何保持劇中, LinearLayout ,RelativeLayout 中view 如何居中,對齊, 7.4 某個頁面相似 android 桌面,排列着N個 按鈕,如何動態計算顯示按鈕 例如: 需求:N <= 20 ,每行顯示 5個 ;N>=20 每行顯示 6 個 每行顯示控制如何實現 7.5 簡歷項目中涉及到自定義View ,如何實現。 7.6 自定義view 如何控制刷新,如何優化,遇到哪些問題,如何解決,刷新區域如何指定。 7.7 View 原理,(須要看view源碼) 看源碼 理解源碼很重要 ; 7.8 簡歷中項目的框架搭建設計思想,相似mvc設計,view 顯示層/控制層/ 8.簡歷有寫,熟悉Android UI框架,請你說說 你理解的UI框架; 9.簡歷有寫 熟悉經常使用設計模式 ,請你說說 你經常使用的設計模式,而且在項目中用獲得的有哪些。 9.1 簡歷中的項目,用到了你說的設計模式有哪些,哪些地方用到,爲何這麼用,這麼用有什麼好處? 9.2用的單例,觀察者,工廠 。 觀察者 模式中,說說誰是觀察者,誰是被觀察者 ,之間的關係 10.C,/C++ 掌握程度(0) 11.TCP ,UDP 區別,項目中哪些地方使用過? 11.1 如何保證UDP狀況下數據包不丟包/完整性(非心跳鏈接,例如發送10個包,中間3個發送時候UDP 未鏈接,如何識別/保證) (2014-08-05 10:19 補充)
面試官出來時候自帶簡歷,坐下後開始看,我主動自我介紹。設計模式
介紹簡單,姓名,籍貫後開始從第一家公司 和第一個項目提及,前公司業務方向,我負責的內容。。數組
「長官」從第一個項目開始,我負責自定義View(鋼琴鍵盤),問如何實現,如何判斷確認點擊按鍵,如何繪製,優化。主要關心項目中對面向對象的理解,類如何設計提問。數據結構
而後,詢問項目中用到哪些算法,如何設計,算法複雜度。mvc
例如確認某個點擊事件是按在哪一個按鍵,須要去遍歷所有按鍵,算法複雜度f(n);框架
詢問項目中用到哪些設計模式。
接下來問最近的項目,我作了項目的介紹,而後演示。介於項目框架我是負責,「長官」問了框架如何搭建,優點,有那些優化,佈局如何設計等很詳細的問題。
例如:整個框架是Activity + Fragment 某個Fragment 中存在ViewPager ,ViewPager中包含了多個Fragmeng ,「長官」聽了只是笑笑,我沒太明白小哪裏,是這樣不太好,若有看官知道,望指教。
問項目中隨時問Activity相關,Handler Thread 相關。
看得出「長官」技術很好,還問了一些基礎,
例如讓我寫一段函數,將int 轉換成byte[] ,當時我想的是:
new Integer(x).getBytes();
「長官」看了,我感到了被鄙視的眼神。。。說:「我沒見過這樣寫的」;
我補充了一句,是不是想讓我用位移運算,「長官」沒說什麼。
回來後查詢了下確實沒有 new Integer(x).getBytes(); 這個API ,
2014-08-05 10:07 補充:能夠參考:http://my.oschina.net/u/169390/blog/97495
「輕官」後來問了幾個關於數據結構的,
例如,如何設計一個鏈表結構,能夠簡單畫一下。
答:我在紙上簡單話了 節點 的結構 ,包含了「data」 和 「index」 內容,能夠擴展 指向先後 鏈表 「data」 「left_index」 「 right_index」 等
再問:若是鏈表中出現了一個 節點,他的「left_index」 指向了一個錯誤的 節點,如何找出來,
答:我想到將鏈表遍歷 將「left_index」 存在數組,若是出現重複,能找到,這樣是最笨的方式,算法複雜度f(n) ;
。。。。
最後兩人回去,讓我等一會,幾分鐘後「輕官」回來 委婉的表示 他們須要高級技術人員(2-2 以上),我只能達到(2-1) ;
表示有些問題例如算法和結構,項目中或許歷來不會用到,但拿來面試仍是很管用,若是想來,能夠準備好再來面試。
表示感謝後下樓,外面下雨了。。
此次面試相比以前遇到過的頗有難度,在此對面試官表示感謝。
補充:關於面試問題答案,有時間會補充進來,沒有補充的話,自行google吧
羅嗦一大堆,感受本身技術仍是太菜,項目中用到的會去了解,用不到的,就瞭解的少或者理解不夠。
1.Java博大精深,簡歷上寫「精通java」 ,實際上不少基礎理解不夠,須要學習的還不少。
2.Android 只是知道表面,API 都沒所有看過,原理更不清楚,須要加深理解。
3.數據結構和算法,一般用不到,當時須要瞭解基本的算法實現原理,和基本的機構,(面試前把「大話數據結構」 看了一遍,沒吸取全);
4.設計模式也須要知道,瞭解不是目的,真正用到項目中才是掌握。
5.額,學歷也是附加項。
接下來要作的
1.Java基礎 有時間複習下;
2.Android 須要瞭解框架,真是瞭解,看源碼,瞭解設計思想,不僅僅是調用API
(這方面源碼已經下載,還罩着教程編譯成功,惋惜編譯經過不表明就瞭解了)
3.數據結構和算法,繼續看書,課後習題要本身實現,不能看似簡單就不動手
(大話數據結構 代碼是c++ ,順帶也要學習c++了)
4.C++ ,跑不了要學,只作應用層沒前圖,Framework是下一個目標;
5.設計模式,須要看一下。
6.還有英語。。。。
7.學歷。。。。。
雖然總結接下來須要作的事情,但願能堅持一條條作到,不少時候都是三分鐘熱度,例如減肥/健身。。。。
不進步的話,就沒毛爺爺娶媳婦。
--------------------2014-08-04 -北京 -鳥窩附近