1. 程式人生 > 其它 >最全的BAT大廠面試題整理,這份資料可幫你解決95%的問題

最全的BAT大廠面試題整理,這份資料可幫你解決95%的問題

螞蟻一面

??就做了?道演算法題,要求兩?時內完成,給了?度為N的有重複元素的陣列,要求輸出第10?的數。典型的TopK問題,快排演算法搞定。演算法題要注意的是合法性校驗、邊界條件以及異常的處理。另外,如果要寫測試?例,?定要保證測試覆蓋場景儘可能全。加上平時刷刷演算法題,這種考核應該沒問題的。

螞蟻二面

  • ?我介紹下唄
  • 開源項?貢獻過程式碼麼?(Dubbo提過?個列印accesslog的bug算麼)
  • ?前在部?做什麼,業務簡單介紹下,內部有哪些系統,作?和互動過程說下
  • Dubbo踩過哪些坑,分別是怎麼解決的?(說了異常處理時業務異常捕獲的問題,?定義了?個異常攔截器)
  • 開始進?正題,說下你對執行緒安全的理解(多執行緒訪問同?個物件,如果不需要考慮額外的同步,調?物件的?為就可以獲得正確的結果就是執行緒安全)
  • 事務有哪些特性?(ACID)
  • 怎麼理解原?性?(同?個事務下,多個操作要麼成功要麼失敗,不存在部分成功或者部分失敗的情況)
  • 樂觀鎖和悲觀鎖的區別?(悲觀鎖假定會發?衝突,訪問的時候都要先獲得鎖,保證同?個時刻只有執行緒獲得鎖,讀讀也會阻塞;樂觀鎖假設不會發?衝突,只有在提交操作的時候檢查是否有衝突)這兩種鎖在Java和MySQL分別是怎麼實現的?(Java樂觀鎖通過CAS實現,悲觀鎖通過synchronize實現。mysql樂觀鎖通過MVCC,也就是版本實現,悲觀鎖可以通過select... forupdate加上排它鎖)
  • HashMap為什麼不是執行緒安全的?(多執行緒操作?併發控制,順便說了在擴容的時候多執行緒訪問時會造成死鎖,會形成?個環,不過擴容時多執行緒操作形成環的問題再JDK1.8已經解決,但多執行緒下使?HashMap還會有?些其他問題?如資料丟失,所以多執行緒下不應該使?HashMap,?應該使?ConcurrentHashMap)怎麼讓HashMap變得執行緒安全?(Collections的synchronize?法包裝?個執行緒安全的Map,或者直接?ConcurrentHashMap)兩者的區別是什麼?(前者直接在put和get?法加了synchronize同步,後者採?了分段鎖以及CAS?持更?的併發)
  • jdk1.8對ConcurrentHashMap做了哪些優化?(插?的時候如果陣列元素使?了紅?樹,取消了分段鎖設計,synchronize替代了Lock鎖)為什麼這樣優化?(避免衝突嚴重時連結串列多?,提?查詢效率,時間複雜度從O(N)提?到O(logN))
  • redis主從機制瞭解麼?怎麼實現的?
  • 有過GC調優的經歷麼?(有點虛,答得不是很好)
  • 有什麼想問的麼?

螞蟻三面

  • 簡單?我介紹下
  • 監控系統怎麼做的,分為哪些模組,模組之間怎麼互動的??的什麼資料庫?(MySQL)使?什麼儲存引擎,為什麼使?InnnoDB?(?持事務、聚簇索引、MVCC)
  • 訂單表有做拆分麼,怎麼拆的?(垂直拆分和?平拆分)
  • ?平拆分後查詢過程描述下
  • 如果落到某個分?的資料很?怎麼辦?(按照某種規則,?如雜湊取模、range,將單張表拆分為多張表)
  • 雜湊取模會有什麼問題麼?(有的,資料分佈不均,擴容縮容相對複雜 )
  • 分庫分表後怎麼解決讀寫壓??(?主多從、多主多從)
  • 拆分後主鍵怎麼保證位置?(UUID、Snowflake演算法)
  • Snowflake?成的ID是全域性遞增唯?麼?(不是,只是全域性唯?,單機遞增)
  • 怎麼實現全域性遞增的唯?ID?(講了TDDL的?次取?批ID,然後再本地慢慢分配的做法)
  • Mysql的索引結構說下(說了B+樹,B+樹可以對葉?結點順序查詢,因為葉?結點存放了資料結點且有序)
  • 主鍵索引和普通索引的區別(主鍵索引的葉?結點存放了整?記錄,普通索引的葉?結點存放了主鍵ID,查詢的時候需要做?次回表查詢)?定要回表查詢麼?(不?定,當查詢的欄位剛好是索引的欄位或者索引的?部分,就可以不?回表,這也是索引覆蓋的原理)
  • 你們系統?前的瓶頸在哪??
  • 你打算怎麼優化?簡要說下你的優化思路
  • 有什麼想問我麼?

螞蟻四面

  • 介紹下??
  • 為什麼要做逆向?
  • 怎麼理解微服務?
  • 服務治理怎麼實現的?(說了限流、壓測、監控等模組的實現)
  • 這個不是中介軟體做的事麼,為什麼你們部?做?(當時沒有單獨的中介軟體團隊,微服務剛搞不久,需要進?監控和效能優化)
  • 說說Spring的?命週期吧
  • 說說GC的過程(說了young gc和full gc的觸發條件和回收過程以及物件建立的過程)
  • CMS GC有什麼問題?(併發清除演算法,浮動垃圾,短暫停頓)
  • 怎麼避免產?浮動垃圾?(記得有個VM引數設定可以讓掃描新?代之前進??次young gc,但是因為gc是虛擬機器?動排程的,所以不保證?定執?。但是還有引數可以讓虛擬機器強制執??次young gc)
  • 強制young gc會有什麼問題?(STW停頓時間變?)
  • 知道G1麼?(瞭解?點 )
  • 回收過程是怎麼樣的?(young gc、併發階段、混合階段、full gc,說了Remember Set)
  • 你提到的Remember Set底層是怎麼實現的?
  • 有什麼想問的麼?

?結

螞蟻?試?較重視基礎,所以Java那些基本功?定要紮實。螞蟻的?作環境還是挺讚的,因為我?的是穩定性保障部?,還有許多單獨的?組,什麼三年1班,很有?春的感覺。?試官基本?平都?較?,基本都P7以上,除了基礎還問了不少架構設計??的問題,收穫還是挺?的。

拼多多

  • ?試前
  • ??
  • ??
  • 三?
  • ?結

?試前

?完螞蟻后,早就聽聞拼多多這個獨?獸,決定也去??把。?先我在脈脈找了?個拼多多的HR,加了微信聊了下,發了簡歷便開始我的拼多多?試之旅。這?要?常感謝拼多多HR?姐姐,從?試內推到offer確認?直都在幫我,?真的很nice。

拼多多一面:

  • Java中的HashMap、TreeMap解釋下?(TreeMap紅?樹,有序,HashMap?序,陣列+連結串列)
  • TreeMap查詢寫?的時間複雜度多少?(O(logN))
  • HashMap多執行緒有什麼問題?(執行緒安全,死鎖)怎麼解決?( jdk1.8?了synchronize + CAS,擴容的時候通過CAS檢查是否有修改,是則重試)重試會有什麼問題麼?(CAS(Compare And Swap)是??和交換,不會導致執行緒阻塞,但是因為重試是通過?旋實現的,所以仍然會佔?CPU時間,還有ABA的問題)怎麼解決?(超時,限定?旋的次數,ABA可以通過原理變數AtomicStampedReference解決,原理利?版本號進???)超過重試次數如果仍然失敗怎麼辦?(synchronize互斥鎖)
  • CAS和synchronize有什麼區別?都?synchronize不?麼?(CAS是樂觀鎖,不需要阻塞,硬體級別實現的原?性;synchronize會阻塞,JVM級別實現的原?性。使?場景不同,執行緒衝突嚴重時CAS會造成CPU壓?過?,導致吞吐量下降,synchronize的原理是先?旋然後阻塞,執行緒衝突嚴重仍然有向滔的吞吐量,因為執行緒都被阻塞了,不會佔有CPU )
  • 如果要保證執行緒安全怎麼辦?(ConcurrentHashMap)
  • ConcurrentHashMap怎麼實現執行緒安全的?(分段鎖)
  • get需要加鎖麼,為什麼?(不?,volatile關鍵字)
  • volatile的作?是什麼?(保證記憶體可?性)
  • 底層怎麼實現的?(說了主記憶體和?作記憶體,讀寫記憶體屏障,happen-before,並在紙上畫了執行緒互動圖)
  • 在多核CPU下,可?性怎麼保證?(思考了?會,匯流排嗅探技術)
  • 聊想聊,系統之間是怎麼互動的?
  • 系統併發多少,怎麼優化?
  • 給我?張紙,畫了?個九?格,都填了數字,給?個MN矩陣,從1開始逆時針列印這MN個數,要求時間複雜度儘可能低(內?OS:之前貌似碰到過這題,最優解是怎麼實現來著)思考中。。。
  • 可以先說下你的思路(想起來了,說了什麼時候要變換?向的條件,向右、向下、向左、向上,依此迴圈)
  • 有什麼想問我的?

拼多多二面:

  • ?我介紹下
  • ?上還有其他offer麼?(拿了螞蟻的offer)
  • 部?組織結構是怎樣的?(這輪不是技術?麼,不過還是??實實說了)
  • 系統有哪些模組,每個模組?了哪些技術,資料怎麼流轉的?(?試官有點禿頂,?看級別就很?)給了我?張紙,我在上?簡單畫了下系統之間的流轉情況
  • 鏈路追蹤的資訊是怎麼傳遞的?(RpcContext的attachment,說了Span的結構:parentSpanId +curSpanId)
  • SpanId怎麼保證唯?性?(UUID,說了下內部的定製改動)
  • RpcContext是在什麼維度傳遞的?(執行緒)
  • Dubbo的遠端調?怎麼實現的?(講了讀取配置、拼裝url、建立Invoker、服務匯出、服務註冊以
  • 及消費者通過動態代理、filter、獲取Invoker列表、負載均衡等過程(嘩啦啦講了10多分鐘),我可以喝??麼
  • Spring的單例是怎麼實現的?(單例登錄檔)
  • 為什麼要單獨實現?個服務治理框架?(說了下內部剛搞微服務不久,主要對服務進??些監控和效能優化)
  • 誰主導的?內部還在使?麼?
  • 你向有想過怎麼做成通航麼?
  • 有什麼想問的麼?

拼多多三面:

?????完後就直接HR?了,主要問了些職業發展、是否有其他offer、以及?職意向等問題,順便說了下公司的福利待遇等,都?較常規啦。不過要說的是?上有其他offer或者??經歷會有?定加分

拼多多的?試流程就簡單許多,畢竟是?個成?四年多的公司。?試難度中規中矩,只要基礎紮實應該不是問題。但不得不說?作強度很?,開始?試前HR就提前和我確認能否接受這樣強度的?作,想來的?鐵還是要做好準備

總結

我們總是喜歡瞻仰大廠的大神們,但實際上大神也不過凡人,與菜鳥程式設計師相比,也就多花了幾分心思,如果你再不努力,差距也只會越來越大。實際上,作為程式設計師,豐富自己的知識儲備,提升自己的知識深度和廣度是很有必要的。

Mybatis原始碼解析

本文已被CODING開源專案:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊+實戰專案原始碼】收錄