【面試】京東成都研發部面試
在拉鉤上投遞的簡歷,第二天京東就打電話了,效率還挺快的,激動得發抖。由於面試預約的是週一,所以週末在家準備了,啃了幾遍《深入理解Java虛擬機器第二版》,便上陣了。
9點過來到京東成都研發部(西部智谷),很天真的等到了9:40(大學裡輔導員說去面試時不要去早了,提前10-20分鐘就好),結果上去時有一個哥們已經面試了接近半小時了。
進入一面
走來了一個面帶微笑的同志,很年輕,先讓我做個簡單的自我介紹,過去的工作經歷,為什麼想要離職,這些都是比較主觀的問題,就隨心聊聊了。
幾乎是按著簡歷上寫的東西問問題,然後不斷深入,這個過程,他偶爾嘴角起笑,笑的我瘮的慌,答問題時都緊張起來了。一面時,問的一些問題如下,以及一些我的答題思路。
1.介紹一些ConcurrentHashMap以及底層原理。
可類比HashMap的底層,陣列+連結串列思想。通過HashCode來決定Key在陣列中的位置,然後以一個Bucket(桶)的形式處理Map.Entry物件。ConcurrentHashMap只不過在Bucket上加鎖處理,在Map達到負載容量後,會重排序Bucket,此時涉及到執行緒安全問題。
2.LinkedList, ArrayList區別,分別在那種情況下選用。
LinkedList 底層是連結串列,適用於有更新操作,ArrayList底層為陣列,適用於快速索引訪問。
3.你用過哪些設計模式
單例模式 --- 引出懶漢、餓漢式寫法,按需載入式、列舉式單例,還有一個DCL雙鎖機制單例,這些都需要程式碼說明。
工廠模式、動態代理模式--- 會讓你拓展的展開,代理模式是怎麼回事,動態代理是怎麼回事。關鍵字:InvocationHandler, 反射
4.Spring 中的容器理解
IoC, 各模組協同工作,由容器來管理Bean
5.Int 多少位元組,一個物件的大小編譯期間能確定大小嗎
int 4位元組(哈哈),當時我說能,在編譯期間物件的大小就能夠確定下來,計算物件的屬性欄位即可,然後問我String能確定嗎,當時差點被繞進去。
6.聊聊Volatile關鍵字
輕量級同步方案
7.執行緒在執行同步的靜態和非靜態方法時,有什麼區別。
執行緒進入了一個類的靜態方法後,其他執行緒不能進入該類的同步靜態方法
執行緒進入了一個類的非靜態方法(例項方法)後,其他執行緒不能進入該類的同步例項方法
7.平時逛哪些社群,怎麼拓展Java技術(非技術性問題)。
ImportNew,開源專案
剩下的有些忘了,然後讓我先等一下,焦急的等了一會兒,進入二面。
二面感覺要溫和點,坐下時,讓我先簡單介紹自己,二面主要圍繞JVM,資料庫,多執行緒等,然後繼續。
1.介紹一些JVM的記憶體結構
上Heap,VM Stack,Native Stack, Method area, PC, JVM Engine
2.類載入方式
Bootstrap ClassLoader、Extension ClassLoader、 Application ClassLoader、 委派載入
3.物件從New到被回收,經歷了哪些過程
Eden,Survivavor、老年代
4.介紹G1及處理過程,有什麼優勢
回答的不滿意。
5.設計一個日誌生產者-消費者佇列方案
我提到了一個BlockedQueue. 解決佇列滿了,然後多執行緒生產,多執行緒消費,怎麼控制。沒答好,他提示了用ExecutorService配置執行緒池,配置執行緒方式(可丟棄,繼續等待),這個方案令我茅塞頓開,以前從沒用過,這個在三面時幫我大忙了。
6.兩個Oracle例項,相同的查詢(一條SQL)怎麼返回不同的結果
折騰半天都不會。他提示說用資料庫的某個欄位如ID取模, select update 語句
7.深入聊聊設計模式,如單例中的DCL
程式碼說明就好
8. 繼續聊Volatile
執行緒可見性、指令重排序
9.LRU設計
HashMap+雙向連結串列
然後進入三面,面試官感覺很nice,幾乎是京東的場景回顧設計,涉及到負載,叢集,多執行緒,資料庫等,自由發揮吧。
如 統計Dao層方法,Service方法的執行情況
用工具:jhat,jstack, jmap, VisualVM
用AOP
以上,2015-4-7