天貓實習一面覆盤

第二次面試給了天貓

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. 線程池的執行原理

execute()addWorker()Thread.start()runWorker()getTask()processWorkerExit() execute() \rightarrow addWorker()\rightarrow Thread.start() \rightarrow runWorker() \rightarrow getTask() \rightarrow processWorkerExit()

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. 分表主鍵唯一性

通過觸發器在業務層面上約束

  1. UUID:通過唯一識別碼16個字節128位的長數字;組成部分:當前日期和時間序列+全局的唯一性網卡mac地;優點:代碼實現簡單、不佔用寬帶、數據遷移不受影響;缺點:無序、無法保證趨勢遞增(要求3)字符存儲、傳輸、查詢慢、不可讀、可以逆向出mac地址不安全
  2. 雪花算法:表示符+時間戳+機器碼+12位毫秒計數器;優點:自增,靈活度高;缺點:依賴機器的時鐘,每個機器的時鐘不可能完全同步
  3. 通過mysql的auto_increment的間隔
  4. 通過redis的步長來保證

計算機網絡

15. session和cookie的區別

http是無狀態的

Session是在服務端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據可以保存在集羣、數據庫、文件中;
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式

數據結構

16. 如何判斷循環鏈表

快慢指針

17. 怎麼查看環的入口

slow pointer 到入口的順時針距離爲head到入口的距離

項目

18. 說一下項目的流程

業務

19. 項目的難點

TPS和安全方面

20. 爲什麼做這個項目

21. 兩個域名如何實現登錄態的共享

cookie不能跨域,這個是SSO

  1. client訪問a.com
  2. a.com發現沒有a_cookie,跳轉到ssoServer
  3. ssoServer發現沒有sso_cookie,使client跳轉登錄界面
  4. client登錄後,ssoServer存儲session,並使得client攜帶sso_cookie,此時把ticket發送給a.com
  5. a.com拿到ticket後,請求ssoServer的ticket是否正確,如果正確,則設置client的a_cookie,登錄成功
  6. client訪問b.com
  7. b.com發現沒有b_cookie,跳轉到ssoServer
  8. ssoServer發現有sso_cookie,即client已經登錄,那麼會把ticket傳給b.com
  9. 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. 實驗室的矛盾怎麼處理

覆盤

本來以爲準備的很充足,但是項目回答的不是太好,緩存一致性和消息一致性都沒回答上來。面試官說我理論還行,廣度可能還不夠,看來的我整理的面經還是起到一定的作用。其他的都還好,再加上逗比屬性的加成,這次總算是有驚無險~

總之,以不變應萬變,沖沖衝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章