百度商業變現Java後端二面面經

本來約的今天晚上七點,下午面試官加微信說到時候可能有事改到了八點,然後八點會議沒結束我又等了大概20多分鐘纔開始。

開頭還是自我介紹,自我介紹和項目介紹完之後,面試官說先聊一下java基礎知識,後面再聊項目。

面試官先問了解Java中的HashMap嗎,先說一下數據結構。然後問爲什麼是轉成紅黑樹而不是其他樹,我說紅黑樹是平衡二叉樹的一種實現,最壞情況下查詢複雜度也是O(log n)的,然後面試官說紅黑樹是自旋樹,對它的插入操作有了解嗎。我說忘了,只記得紅黑樹的Node有顏色屬性,插入時需要保證兩段路徑不能全紅,具體怎麼旋轉之類的忘了。

然後問了對HashMap的put操作了解嗎,說一下大致的過程。說完問對HashMap的put可能導致死鎖瞭解嗎,幸虧之前看過多線程環境下HashMap擴容可能死鎖的內容,就大概說了一下爲什麼有可能造成死鎖。然後問對ConcurrentHashMap有了解嗎,我說ConurrentHashMap是通過給Node加synchronized保證不會出現死鎖,面試官說是synchronized嗎,我有點猶豫了,因爲這塊看的不是很仔細。

然後面試官問那ConurrentHashMap和HashTable有什麼區別。面試官說HashTable答對了,ConcurrentHashMap回頭自己再看看。

然後問對Collection有了解嗎。我有點懵,問面試官是指什麼方面,面試官就說比如平時用過Collection的什麼方法,或者具體的實現類。然後我說是指ArrayList和LinkedList嗎,然後面試官問那就說一下ArrayList和LinkedList的區別。然後問ArrayList和LinkedList遍歷的時候速度有差別嗎,Iterator遍歷的時候速度有差別嗎。

然後問對線程安全的理解是什麼?我回答的時候提了synchronized,於是又問我平時怎麼用的synchronized關鍵字,我說大一寫Android的時候寫過單例。然後讓我寫一下單例模式的代碼,於是讓我講一下volatile和synchronized,講完問我synchronized是怎麼實現的。

答了基於Monitor對象的進出,提到了對象頭Mark Word中的標識信息,然後問鎖的各種狀態有了解嗎,它們都在什麼時候轉化。答了無鎖、偏向鎖、輕量級鎖、重量級鎖的概念。然後又問我平時怎麼用synchronized實現線程安全的,我說就單例和最近寫的項目中模擬秒殺用了synchronized,然後優化用了redis的分佈式鎖。於是又問我分佈式鎖的實現,SETNX和GETSET的作用。

我說完怎麼實現的分佈式鎖之後,面試官說有沒有考慮過其他的實現,比如用redis的原子減或者java中的原子類,我說沒有...
然後就是問MySQL了,先問了聚集索引和非聚集索引的理解。然後問了Innodb索引的結構和爲什麼用B+樹,然後問了聯合索引,給了一個sql語句問會不會走聯合索引。

到這大概面了四五十分鐘左右了,面試官說現在聊聊項目。沒問我深度學習的項目,問了最近學習SpringBoot寫的後端項目,問了一下實現的功能,創建的表的結構,因爲這個用到了微信支付,所以又具體問了用戶支付的流程以及如果微信的異步通知傳給後端時服務不可用應該怎麼做。我說我這就是個體驗微信支付的demo,沒有考慮那麼多。

最後就是反問,我問後續通知大概多久會收到(感覺自己前面答得不是很好,而且面試官問的對xx的理解感覺自己回答的比較差差不多涼了),面試官說今晚有點晚了,最晚明天會通知,然後說還可以,算過了。(屬實沒想到)然後說一面記錄我對框架不熟,所以二面沒有問spring框架,以後可以好好看一下框架的知識。​

  • 寄語

    最後祝大家都能拿到心儀的offer,前程似錦.

如果你想過去更對最新的面試題以及學習資料和視頻,可以關注小編的公衆號:《Java爛豬皮》,回覆【666】即可免費獲取

如果你想學好JAVA這門技術,也想在IT行業拿高薪,可以進來看看 ,羣裏有:Java工程化、高性能及分佈式、高性能、深入淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點。

如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿里面試但擔心面試不過的,大家都可以關注作者的公衆號:《Java爛豬皮》

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