京東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握手畫出來了,第二個問題沒答上來