螞蟻一面
??就做了?道算法題,要求兩?時內完成,給了?度為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就提前和我確認能否接受這樣強度的?作,想來的?鐵還是要做好準備
最后
既已說到spring cloud alibaba,那對于整個微服務架構,如果想要進一步地向上提升自己,到底應該掌握哪些核心技能呢?
就個人而言,對于整個微服務架構,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等這些都是最最核心的知識,架構師必經之路!下圖,是自繪的微服務架構路線體系大綱,如果有還不知道自己該掌握些啥技術的朋友,可根據小編手繪的大綱進行一個參考。
如果覺得圖片不夠清晰,也可來找小編分享原件的xmind文檔!
且除此份微服務體系大綱外,我也有整理與其每個專題核心知識點對應的最強學習筆記:
-
出神入化——SpringCloudAlibaba.pdf
-
SpringCloud微服務架構筆記(一).pdf
-
SpringCloud微服務架構筆記(二).pdf
-
SpringCloud微服務架構筆記(三).pdf
-
SpringCloud微服務架構筆記(四).pdf
-
Dubbo框架RPC實現原理.pdf
-
Dubbo最新全面深度解讀.pdf
-
Spring Boot學習教程.pdf
-
SpringBoo核心寶典.pdf
-
第一本Docker書-完整版.pdf
-
使用SpringCloud和Docker實戰微服務.pdf
-
K8S(kubernetes)學習指南.pdf
需要下載的請**點擊傳送門:《出神入化——SpringCloudAlibaba》**
另外,如果不知道從何下手開始學習呢,小編這邊也有對每個微服務的核心知識點手繪了其對應的知識架構體系大綱,不過全是導出的xmind文件,全部的源文件也都在此,照樣可免費分享給有需要的你!
204888/java-p7)**
[外鏈圖片轉存中…(img-txiWhDAU-1627101497506)]
另外,如果不知道從何下手開始學習呢,小編這邊也有對每個微服務的核心知識點手繪了其對應的知識架構體系大綱,不過全是導出的xmind文件,全部的源文件也都在此,照樣可免費分享給有需要的你!