1. 程式人生 > >京東面試題(JAVA)

京東面試題(JAVA)

京東17號一面問題與回答情況(Java崗)
作者:牛客190525號
Q1: HashMap的原理, 以及HashMap如何擴充bucket的大小
A1: 原理答上來了,如何擴容瞎答的,之前不知道擴容之後已經雜湊的MapEntry如何處理,當時就說擴容後已經雜湊的全部再計算並分配到新的桶裡。

Q2: 是否對多執行緒有了解
A2: 瞭解的不深,被專案岔開沒繼續問

Q3: 專案中的Queue,單機容量達到上限如何叢集擴充套件
A3: 懵逼,然後參考Hadoop的架構,把Queue分散到不同的slave server中,並用一個”負載均衡伺服器” master做反向代理,master存有job到slaves的對映表,接收broswer的Job請求,把Job分派給不同的slave server。

Q4: 知道哪些負載均衡演算法
A4: 不知道

Q5: Myisam, Innodb區別
A4: 當時的回答: 1、Innodb支援事務 2、Myisam支援表鎖,Innodb支援行鎖 3、Myisam資料索引一起儲存,Innodb資料索引分開儲存

Q6: Mysql索引的分類(Btree, hash),各自使用什麼情況
A6: 沒答好,當時回答說Mysql只有記憶體表支援hash索引(似乎並不是),面試官表示沒聽說Mysql記憶體表

Q7: Btree的查詢原理:
A7: 沒答上來,只大概敘述了一下B+tree的結構,每個子節點有一個指標指向兄弟節點。

Q8: Spring的原理(AOP IOC), AOP的原理
A8: AOP實現原理是代理,給他講了一下代理模式,然後嘴賤的說了一句AOP是基於cglib的動態代理實現的。

Q9: cglib是動態代理嗎?簡要敘述cglib的原理
A9: 瞎答:cglib基於ASM位元組碼生成框架,在執行時生成代理類的位元組碼檔案並動態載入

Q10: cglib和jdk代理的區別?Jdk是不是動態代理?動態代理和靜態代理的區別
A10: jdk需要介面,cglib不需要。Jdk是靜態代理,根據反射來實現。動態代理是程式碼編譯前代理類不存在,在執行時生成。(面試官說答錯了,cglib是靜態代理,jdk是動態代理,cglib在框架啟動前已經生成好了所有的代理類。感覺他說的也不全對)

Q11:簡述三次握手,如果c端發起握手請求,s端無法立刻建立連線應該回應什麼?
A11: tcp握手畫出來了,第二個問題沒答上來