第二次面試給了天貓
Java
1. hashCode的作用
每個實例一個hash值,如果不覆蓋則每個對象都不一樣。常用來hashMap的桶定位
2. 集合框架
Collection->list,st
Map
Stack和HashTable是線程安全的,ConcurrentHashMap和Cow也是
通過Collections.synchronizedList();
3. AIO和BIO的區別
aio是異步的,bio是阻塞的
Jdk1.4之前是bio,Jdk1.7之後是aio
4. 多線程的ABA問題
通過版本號機制來解決
5. 線程池的執行原理
6. Java的內存結構
堆,方法區,本地方法棧,虛擬機棧,程序計數器
7. 什麼時候Full GC和Young GC
eden滿時是young Cc
old滿時是full gc
框架
8. Mybatis的$和#差異
剛開始聽成佔位符和#的差異了,這個地方交流誤區,沒聽清所以浪費了時間
$:佔位符,僅僅爲一個純碎的 string 替換,在動態 SQL 解析階段將會進行變量替換
#:把傳入的值作爲字符串,防止SQL注入。解析爲一個 JDBC 預編譯語句(prepared statement)的參數標記符,一個 #{ } 被解析爲一個參數佔位符 。
9. Spring bean的生命週期
new,注入,aware,前置,init,後置,註冊回調函數,執行,執行回調函數,銷燬
MySQL
10. 隔離級別
RU,RC,RR,S
11. MySQL和Oracle的隔離級別
前者RR,後者RC
12. 如何優化數據庫的性能
優化字段
創建表的範式和反範式
索引,前綴索引,hash索引,組合索引
13. 數據量太大怎麼辦
分庫分表,每個表橫向切分
14. 分表主鍵唯一性
通過觸發器在業務層面上約束
- UUID:通過唯一識別碼16個字節128位的長數字;組成部分:當前日期和時間序列+全局的唯一性網卡mac地;優點:代碼實現簡單、不佔用寬帶、數據遷移不受影響;缺點:無序、無法保證趨勢遞增(要求3)字符存儲、傳輸、查詢慢、不可讀、可以逆向出mac地址不安全
- 雪花算法:表示符+時間戳+機器碼+12位毫秒計數器;優點:自增,靈活度高;缺點:依賴機器的時鐘,每個機器的時鐘不可能完全同步
- 通過mysql的auto_increment的間隔
- 通過redis的步長來保證
計算機網絡
15. session和cookie的區別
http是無狀態的
Session是在服務端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據可以保存在集羣、數據庫、文件中;
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式
數據結構
16. 如何判斷循環鏈表
快慢指針
17. 怎麼查看環的入口
slow pointer 到入口的順時針距離爲head到入口的距離
項目
18. 說一下項目的流程
業務
19. 項目的難點
TPS和安全方面
20. 爲什麼做這個項目
21. 兩個域名如何實現登錄態的共享
cookie不能跨域,這個是SSO
- client訪問a.com
- a.com發現沒有a_cookie,跳轉到ssoServer
- ssoServer發現沒有sso_cookie,使client跳轉登錄界面
- client登錄後,ssoServer存儲session,並使得client攜帶sso_cookie,此時把ticket發送給a.com
- a.com拿到ticket後,請求ssoServer的ticket是否正確,如果正確,則設置client的a_cookie,登錄成功
- client訪問b.com
- b.com發現沒有b_cookie,跳轉到ssoServer
- ssoServer發現有sso_cookie,即client已經登錄,那麼會把ticket傳給b.com
- b…com拿到ticket後,請求ssoServer的ticket是否正確,如果正確,則設置client的b_cookie,登錄成功
22. 如何保證Redis和MySQL的一致性
- 實時策略:刪除Redis緩存,先更新MySQL,然後刪除Redis的緩存(先寫redis再寫mysql,如果寫入失敗事務回滾會造成redis中存在髒數據)。第一個刪除爲了保證redis中沒有該數據,第二個刪除防止其他線程髒讀
- 異步策略,更新redis,異步更新MySQL
23. 如何保證MQ的消息一致性和冪等性
consumer如何確定把消息同步到數據庫中
首先通過MQ的事物保證redis和producer的一致性
producer-ack-broker-ack-consumer,通過ack來保證一直性
MQ在重發消息的時候怎麼保證冪等性
可能生產者重發消息,也可能消費者重發消息。mq內部有一個記錄消息消費成功的id,如果存在該id則不去消費
其他
24. 平時有什麼愛好
籃球唱歌
25. 怎麼刷基礎理論
看面經和源碼
26. 有效的Java代碼有多少行
5k行
27. 實驗室的矛盾怎麼處理
覆盤
本來以爲準備的很充足,但是項目回答的不是太好,緩存一致性和消息一致性都沒回答上來。面試官說我理論還行,廣度可能還不夠,看來的我整理的面經還是起到一定的作用。其他的都還好,再加上逗比屬性的加成,這次總算是有驚無險~
總之,以不變應萬變,沖沖衝