1. 程式人生 > >【面試】京東成都研發部面試

【面試】京東成都研發部面試

在拉鉤上投遞的簡歷,第二天京東就打電話了,效率還挺快的,激動得發抖。由於面試預約的是週一,所以週末在家準備了,啃了幾遍《深入理解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