首先,阿里的面試官都很nice,每次結束電話都會說謝謝,問到你不會的問題,也會讓你別急,會給你提示,面試體驗很好。
第一次,上午十點電話去洗手間了,沒接到,有點方。
下午3點,阿里電話一面,應該是個技術小哥,跟我聊了很多亂七八糟的,中間我可能有點緊張,說話語速有點快,小哥讓我不要急,說我的知識面已經很廣,不要怕。之後我就很冷靜nice的跟小哥聊天了。
小哥上來問了項目經驗,此處略過。之後問了兩個簡單的演算法,數組逆序(直接兩個指標一頭一尾交換,還有棧,先入後出,然後我說棧不好,佔用空間大),第二個是找到一個數組中K個最大的數,我說建一個K個數組的小頂堆,然後發現比最小值大的,就更新堆,複雜度為(nlogk).
然後小哥問我什麼課程學的比較好,我說密碼學,然後小哥讓我解釋一下SSL原理,哭,我真的不知道,我就知道他是用來訪問網站加密的,然後給小哥介紹了一下RSA,AES。還算記得吧。
小哥問我還有什麼學的好,我說數學,小哥愣了,後來跟我聊了一下演算法,動態規劃的思想,我說就是分階段的求解,後一階段依賴前一階段的解。大概就是這樣吧。可能還要細一點,現在我要答得話,可能會跟貪婪演算法作對比,列一下兩個演算法的不同應用情境。下次再問我什麼學的好,我就說資料庫還有設計模式,當初怎麼沒想到。
小哥還問了spring,IOC和AOP的原理,已經應用,以及實現(AOP實現可能答得不太好,動態代理JDK反射,以及過濾器)
之後問我java記憶體回收(這個有些地方記得有些模糊,記憶體不夠的時候記憶體回收,其實確切的來講是這樣 Eden space 完成記憶體配置,當Eden滿了,再建立對象。會因為申請不到空間,除法Minor GC.進行 (Eden+S0或者Eden+S1)新生代記憶體回收,Minor GC時,Eden Space不能被回收的對象被放入到空的survivor(S0或者S1,Eden肯定會被清空),另一個Survivor裡不能被GC的也會放入這個,必須保證有個Survivor為空白。step3 如果survivor滿了,則這些對象會被copy到old區,或者survivor沒有滿,但是有些對象足夠被放到old space,當old space滿了的時候,進行full GC.
問我項目中遇到的問題,有一個記憶體泄露,記憶體流失就是有一個長期存活的對象持有短命對象的引用,導致短命對象無法被釋放。還有些效能最佳化。
晚上8:00阿里二面,技術大哥,直接問並發編程。syntronized 內部實現,我說加鎖(還有些別的東西,暫時未整理)。
Runnable 和 Thread的區別,一個是類一個是介面,還有(當時並不知道)Runnable可以方便的進行資源共用,thread並不能,thread實現了runnable介面
相關資料參考http://developer.51cto.com/art/201203/321042.htm
run()和 statr()的區別 我覺得還有更詳細專業的答法http://www.cnblogs.com/linjiqin/archive/2011/04/10/2011272.html
問了設計模式 單例模式 與裝飾者模式
問了重寫和重載 傳回值不一樣 算不算重載
問了hashmap的實現
兩天后 阿里三面:
自我介紹
項目經驗
spring
抽象類別與介面的區別
Java記憶體回收
列一個我讀過的書單吧:
Java編程思想 細讀
Java核心技術 掃過其中幾章
資料結構與演算法分析-java語言描述 細讀 手寫代碼實現
effective Java 讀了1/2 關於java常用知識點的思考 目前正在看
深入理解java虛擬機器 重點看了記憶體回收 以及類載入
java並發編程 看了一些章節 目前正在看
演算法設計與分析基礎
演算法導論 看了一些章節
編程珠璣 主要是講編程思想
深入理解電腦網路 看了其中幾章TCP-UDP HTTP
大話設計模式 21種設計模式 有些東西講的不是很清楚
heard First設計模式 常用的13種設計模式 講解清晰
heard First sevelet &JSP 讀了1/2瞭解了一些基本的東西
程式員面試寶典 感覺是三本書裡面 看著最順眼的
劍指offer 很多例子用C++實現 看著不爽
編程之美 很多遊戲題 想法很有意思