深入分析解讀MySQL鎖,解決幻讀問題,征服Java面試官
拼多多(三面)
面試前
面完螞蟻后,早就聽聞拼多多這個獨角獸,決定也去面一把。首先我在脈脈找了一個拼多多的HR,加了微信聊了下,發了簡歷便開始我的拼多多面試之旅。這裡要非常感謝拼多多HR小姐姐,從面試內推到offer確認一直都在幫我,人真的很nice。
拼多多:一面
- 為啥螞蟻只待了三個月?沒轉正?
- Java中的HashMap、TreeMap解釋下?
- TreeMap查詢寫入的時間複雜度多少?
- HashMap多執行緒有什麼問題?
- CAS和synchronize有什麼區別?都用synchronize不行麼?
- 如果要保證執行緒安全怎麼辦?(ConcurrentHashMap)
- ConcurrentHashMap怎麼實現執行緒安全的?
- get需要加鎖麼,為什麼?
- volatile的作用是什麼?
- 底層怎麼實現的?
- 在多核CPU下,可見性怎麼保證?
- 聊專案,系統之間是怎麼互動的?
- 系統併發多少,怎麼優化?
- 給我一張紙,畫了一個九方格,都填了數字,給一個MN矩陣,從1開始逆時針列印這MN個數,要求時間複雜度儘可能低
- 可以先說下你的思路(想起來了,說了什麼時候要變換方向的條件,向右、向下、向左、向上,依此迴圈)
- 有什麼想問我的?
拼多多:二面
- 自我介紹下
- 手上還有其他offer麼?
- 部門組織結構是怎樣的?
- 系統有哪些模組,每個模組用了哪些技術,資料怎麼流轉的?
- 鏈路追蹤的資訊是怎麼傳遞的?
- SpanId怎麼保證唯一性?
- RpcContext是在什麼維度傳遞的?
- Dubbo的遠端呼叫怎麼實現的?
- Spring的單例是怎麼實現的?
- 為什麼要單獨實現一個服務治理框架?
- 誰主導的?內部還在使用麼?
- 逆向有想過怎麼做成通用麼?
- 有什麼想問的麼?
拼多多:三面
二面老大面完後就直接HR面了,主要問了些職業發展、是否有其他offer、以及入職意向等問題,順便說了下公司的福利待遇等,都比較常規啦。不過要說的是手上有其他offer或者大廠經歷會有一定加分。
拼多多面試小結
拼多多的面試流程就簡單許多,畢竟是一個成立三年多的公司。面試難度中規中矩,只要基礎紮實應該不是問題。但不得不說工作強度很大,開始面試前HR就提前和我確認能否接受這樣強度的工作,想來的老鐵還是要做好準備
位元組跳動
面試前
頭條的面試是三家裡最專業的,每次面試前有專門的HR和你約時間,確定OK後再進行面試。每次都是通過視訊面試,因為都是之前都是電話面或現場面,所以視訊面試還是有點不自然。也有人覺得視訊面試體驗很贊,當然蘿蔔青菜各有所愛。最坑的二面的時候對方面試官的網路老是掉線,最後很冤枉
位元組跳動:一面
- 先自我介紹下
- 聊專案,逆向系統是什麼意思
- 聊專案,逆向系統用了哪些技術
- 執行緒池的執行緒數怎麼確定?
- 如果是IO操作為主怎麼確定?
- 如果計算
型 操作又怎麼確定? - Redis熟悉麼,瞭解哪些資料結構?
- 跳錶的查詢過程是怎麼樣的,查詢和插入的時間複雜度?
- 紅黑樹瞭解麼,時間複雜度?
- 既然兩個資料結構時間複雜度都是O(logN),zset為什麼不用紅黑樹
- 點了點頭,說下Dubbo的原理?
- CAS瞭解麼?
- 那我們做一道題吧,陣列A,2*n個元素,n個奇數、n個偶數,設計一個演算法,使得陣列奇數下標位置放置的都是奇數,偶數下標位置放置的都是偶數
- 先說下你的思路
- 下一個奇數?怎麼找?
- 有思路麼?
- 你這樣時間複雜度有點高,如果要求O(N)要怎麼做
- 時間差不多了,先到這吧。你有什麼想問我的?
位元組跳動:二面
- 面試官和藹很多,你先介紹下自己吧
- 你對服務治理怎麼理解的?
- 專案中的限流怎麼實現的?
- 具體怎麼實現的?
- 如果突然很多執行緒同時請求令牌,有什麼問題?
- 怎麼解決呢?
- 如果不用訊息佇列怎麼解決?
- 分散式追蹤的上下文是怎麼儲存和傳遞的?
- Dubbo的RpcContext是怎麼傳遞的?
- 你說的記憶體洩漏具體是怎麼產生的?
- 執行緒池的執行緒是不是必須手動remove才可以回收value?
- 那你說的記憶體洩漏是指主執行緒還是執行緒池?
- 可是主執行緒不是都退出了,引用的物件不應該會主動回收麼?
- 那你說下SpringMVC不同使用者登入的資訊怎麼保證執行緒安全的?
- 這個直接用ThreadLocal不就可以麼,你見過SpringMVC有鎖實現的程式碼麼?
- 我們聊聊mysql吧,說下索引結構
- 為什麼使用B+樹?
- 什麼是索引覆蓋?
- Java為什麼要設計雙親委派模型?
- 什麼時候需要自定義類載入器?
- 我們做一道題吧,手寫一個物件池
- 有什麼想問我的麼?
位元組跳動面試小結
頭條的面試確實很專業,每次面試官會提前給你發一個視訊連結,然後準點開始面試,而且考察的點都比較全。
面試官都有一個特點,會抓住一個值得深入的點或者你沒說清楚的點深入下去直到你把這個點講清楚,不然面試官會覺得你並沒有真正理解。二面面試官給了我一點建議,研究技術的時候一定要去研究產生的背景,弄明白在什麼場景解決什麼特定的問題,其實很多技術內部都是相通的。很誠懇,還是很感謝這位面試官大大。
最後
按照上面的過程,4個月的時間剛剛好。當然Java的體系是很龐大的,還有很多更高階的技能需要掌握,但不要著急,這些完全可以放到以後工作中邊用別學。
學習程式設計就是一個由混沌到有序的過程,所以你在學習過程中,如果一時碰到理解不了的知識點,大可不必沮喪,更不要氣餒,這都是正常的不能再正常的事情了,不過是“人同此心,心同此理”的暫時而已。
“道路是曲折的,前途是光明的!”