10.20 一天面完三面
技術面
一面自我介紹,二面無
簡要介紹專案以及專案程序中遇到的問題
專案拓展問題
-
Redis和MySQL快取一致性問題和解決策略(旁路快取 / 延時雙刪)
-
Redis鍵洗掉策略(定時、惰性),策略的特點和優劣(定時記憶體友好,惰性CPU友好)
-
專案用到的Redis資料結構(繼續深入介紹專案)
-
場景:存盤一件商品的資訊,最適用的Redis資料結構(Hash)
-
快取采用Redis的原因(記憶體型、速度快),如何判斷比直接使用SQL查詢快(AOP攔截方法進行比較)
-
WebFilter在專案中的使用,如何檢查請求資料以及檢查的原因(doFilter的request引數、檢查SQL敏感陳述句)
-
MyBatis防止SQL注入的機制(#{}占位符),XML映射檔案對應DAO介面的作業原理(全型別+介面名作為key映射對應由XML標簽決議得到的MappedStatement并執行對應SQL陳述句)
-
上面說的是執行SQL陳述句時的作業原理,說下對接收SQL回傳值的原理的了解(不太清楚,說了動態代理和攔截器,面試官說很接近)
-
專案中訪問遠程介面時使用的資料序列化傳輸方式(JSON)
-
對Dubbo的了解以及大概說說RPC的架構(特別感謝聲哥的RPC專案對我的秋招專案的啟發)
-
Netty框架出現的原因(封裝NIO方便編碼)及其優勢(基于NIO相比較傳統BIO效率高、利用責任鏈機制實作擴展性),Netty的執行緒模型(主從多執行緒,Boss,Worker)
-
專案中的信道復用如何實作(存盤Channel到Map作為快取,創建連接時判斷服務IP埠和序列化方式是否一致)
-
了解的序列化方式,展開描述Protobuf如何使用(message定義以及protoc編譯等)以及與JSON的區別(可讀性、序列化速度和空間占用)
- 專案中Zookeeper集群的部署情況和起到的作用(注冊中心,引入服務宣告的方式)
Java集合和資料結構
- HashMap底層資料結構
- 除鏈地址法以外解決Hash沖突的其他方法(開放定址、再哈希、公共溢位區,引入ThreadLocalMap的線性探測)
- 紅黑樹的特點(根節點黑、葉子節點為NIL且黑色、從根節點到葉子節點黑色節點數量一致、紅色節點不能與紅色節點相鄰),使用紅黑樹的原因和優勢(插入速度較快且能保證O(logn)),與AVL樹的比較(AVL樹要求左右子樹高度差不超過1)
- Entry陣列是否可以用鏈表替代(引入Hash演算法,如何定位陣列下標,2倍擴容原因等)
- 提到陣列支持隨機訪問,深入到底層地址是如何獲取到的(陣列起始地址+下標偏移量)
- PriorityQueue底層資料結構(堆)
- 堆的特性(大根堆小根堆),本質屬于哪種樹(完全二叉樹)
- 堆插入和洗掉的時間復雜度,O(logn)的話為什么不選擇其他樹
- 佇列的實作方式(提到鏈表,還提了LeetCode演算法題用兩個堆疊去實作)
- 兩個堆疊去實作佇列效率差的原因
- 鏈表實作佇列時入隊出隊的時間復雜度,O(1)是如何做到的(隊頭隊尾指標)
- 堆疊的實作方式(陣列、鏈表)
Java并發和作業系統
- 行程和Java執行緒的狀態(創建、運行、就緒、阻塞、等待、超時等待、終止)
- 如何查看Java行程中執行緒的狀態(例如查看是否死鎖,使用jps,jstack命令)
- 如何確定執行緒池執行緒數(CPU密集型N+1,IO密集型>2N)
- 死鎖的概念,死鎖的必要條件(互斥、請求與保持、不可搶占、回圈等待),大概描述下可能造成死鎖的場景
- 描述下如何實作兩個執行緒交替進行操作(wait/notify,Condition)
- sleep和wait的區別
Java基礎
- 面向物件編程的原則(不太理解想問的是哪方面知識,說了封裝、繼承、多型,以及private修飾類的域、getter/setter等)
- static修飾符的作用(宣告類變數和類方法),場景:類中存在static修飾的HashMap參考,某個實體對參考內容進行修改時對其他實體可能造成的影響(對所有實體可見)
計算機網路
- HTTP協議所在的層(應用),以及HTTP請求的程序在每一層用到的協議(TCP,IP等)
- 內網通過交換機訪問外網的程序,如何得知交換機的MAC地址,ARP的流程(廣播和快取)
MySQL
- MySQL索引的資料結構(B+樹),索引什么情況下失效(模糊查詢、函式、運算子、OR、范圍查詢、聯合索引未最左匹配)
- 查詢陳述句出現慢查詢時的排查和優化(EXPLAIN(Type:沒用上索引,Extra:檔案排序),慢查詢日志,SHOW PROFILE(是否出現臨時表),資料量過多(分庫分表),并發量較大(主從復制、讀寫分離))
- MySQL事務的概念和作用(ACID),事務隔離級別(引入InnoDB默認隔離級別可重復讀和MVCC)
- 場景:一段業務代碼分為四個步驟:查詢1萬條資料,篩選出20條,插入表,提交日志,可以只在插入表添加事務嗎?可以整段業務代碼添加事務嗎?性能方面的影響如何體現?
以上這些面試題的參考答案已經整理好了,需要的朋友可以關注微信公眾號:Java團長,回復“去哪”獲取~
HR面
- HR介紹公司部門架構,培養制度,詢問意向部門
- 常規HR面問題
沒有記錄面試問題,基本憑印象,有些問題可能沒有記住......
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344228.html
標籤:java
上一篇:CSDN實訓 - Java模擬二次驗證碼(動態令牌)
下一篇:Mybatis plus簡單使用
