面試是朋友推薦過去,事前已經發過簡歷,一周后通知我去面試,早上9:30准時到,地點在中關村教堂后面。
公司門廳有保安小哥,打電話來領人,進門就在大廳開始。
面試官兩人,一年輕(以下"輕官"代替),一年長(以下“長官”代替)。年長的穿了件大外套+北京布鞋,很有個性。
無筆試,直接技術面,開始大部分是“”長官提問,后來“輕官”問了一些。
提問順序記不太清了,出門時候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(鋼琴鍵盤),問如何實現,如何判斷確認點擊按鍵,如何繪制,優化。主要關心項目中對面向對象的理解,類如何設計提問。
然后,詢問項目中用到哪些算法,如何設計,算法復雜度。
例如確認某個點擊事件是按在哪個按鍵,需要去遍歷全部按鍵,算法復雜度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 -北京 -鳥窩附近

