前言
2020年社招面試總結
文章有點長,請耐心看完,絕對有識訓!不想聽我BB直接進入面試分享:
準備程序
位元組跳動面試分享
拼多多面試分享
螞蟻金服面試分享
總結
說起來開始進行面試是年前倒數第二周,上午9點,我還在去公司的公交上,突然收到螞蟻的面試電話,其實算不上真正的面試,面試官只是和我聊了下他們在做的事情(主要是做雙十一這里大促的穩定性保障,偏中間件吧),說的很詳細,然后和我溝通了下是否有興趣,我表示有興趣,后面就收到正式面試的通知,最后成功入職螞蟻金服,
當時我自己也準備出去看看機會,順便看看自己的實力,當時我其實挺糾結的,一方面現在部門也正需要我,還是可以有一番作為的,另一方面覺得近一年來進步緩慢,沒有以前飛速進步的成就感了,而且業務和技術偏于穩定,加上自己也屬于那種比較懶散的人,骨子里還是希望能夠突破現狀,持續在技術上有所精進,
進入正題,先后進行了位元組跳動、拼多多、螞蟻金服的面試,
準備程序
先說說我自己的情況,我2016先在螞蟻實習了將近三個月,然后去了我現在的老東家,三年多作業經驗,可以說畢業后就一直老老實實在老東家打怪升級,雖說有螞蟻的實習經歷,但是因為時間太短,還是有點虛的,所以面試官看到我簡歷第一個問題絕對是這樣的,
“哇,你在螞蟻待過,不錯啊”,面試官笑嘻嘻地問到,“是的,還好”,我說,“為啥才三個月?”,面試官臉色一沉問到,“嘩啦啦解釋一通,,,”,我解釋道,“哦,原來如此,那我們開始面試吧”,面試官一本正經說到,
尼瑪,早知道不寫螞蟻的實習經歷了,后面仔細一想,當初寫上螞蟻不就給簡歷加點料嘛,
言歸正傳,準備程序其實很早開始了(當然這不是說我作業時老想著跳槽,因為我明白現在的老東家并不是終點,我還需要不斷提升),具體可追溯到從螞蟻離職的時候,當時出來也面了很多公司,沒啥大公司,面了大概5家公司,都拿到offer了,
作業之余常常會去額外研究自己感興趣的技術以及作業用到的技術,力求把原理搞明白,并且會自己實踐一把,此外,買了N多書,基本有時間就會去看,補補基礎,什么作業系統、資料結構與演算法、MySQL、JDK之類的原始碼,基本都好好溫習了(文末會列一下自己看過的書和一些好的資料),我深知基礎就像“木桶效應”的短板,決定了能裝多少水,
此外,在正式決定看機會之前,我給自己列了一個提綱,主要包括Java要掌握的核心要點,有不懂的就查資料搞懂,我給自己定位還是Java工程師,所以Java體系是一定要做到心中有數的,很多東西沒有常年的積累面試的時候很容易露餡,學習要對得起自己,不要騙人,
剩下的就是找平臺和內推了,除了螞蟻,頭條和拼多多都是找人內推的,感謝螞蟻面試官對我的欣賞,讓我再次入職螞蟻
平臺:脈脈、GitHub、v2
位元組跳動
面試前
頭條的面試是三家里最專業的,每次面試前有專門的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為什么要設計雙親委派模型?
- 什么時候需要自定義類加載器?
- 我們做一道題吧,手寫一個物件池
- 有什么想問我的么?
小結
頭條的面試確實很專業,每次面試官會提前給你發一個視頻鏈接,然后準點開始面試,而且考察的點都比較全,
面試官都有一個特點,會抓住一個值得深入的點或者你沒說清楚的點深入下去直到你把這個點講清楚,不然面試官會覺得你并沒有真正理解,二面面試官給了我一點建議,研究技術的時候一定要去研究產生的背景,弄明白在什么場景解決什么特定的問題,其實很多技術內部都是相通的,很誠懇,還是很感謝這位面試官大大,
拼多多(三面)
面試前
面完位元組跳動后,早就聽聞拼多多這個獨角獸,決定也去面一把,首先我在脈脈找了一個拼多多的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就提前和我確認能否接受這樣強度的作業,想來的老鐵還是要做好準備
螞蟻金服(五面)
一面
一面就做了一道演算法題,要求兩小時內完成,給了長度為N的有重復元素的陣列,要求輸出第10大的數,典型的TopK問題,快排演算法搞定,
演算法題要注意的是合法性校驗、邊界條件以及例外的處理,另外,如果要寫測驗用例,一定要保證測驗覆寫場景盡可能全,加上平時刷刷演算法題,這種考核應該沒問題的,
二面
- 自我介紹下唄
- 開源專案貢獻過代碼么?
- 目前該部門做什么,業務簡單介紹下,內部有哪些系統,作用和互動程序說下
- Dubbo踩過哪些坑,分別是怎么解決的?
- 開始進入正題,說下你對執行緒安全的理解
- 事務有哪些特性?
- 怎么理解原子性?
- 樂觀鎖和悲觀鎖的區別?
- 這兩種鎖在Java和MySQL分別是怎么實作的?
- HashMap為什么不是執行緒安全的?
- 怎么讓HashMap變得執行緒安全?
- Collections的synchronize兩者的區別是什么?
- jdk1.8對ConcurrentHashMap做了哪些優化?
- redis主從機制了解么?怎么實作的?
- 有過GC調優的經歷么?
- 有什么想問的么?
三面
- 簡單自我介紹下
- 監控系統怎么做的,分為哪些模塊,模塊之間怎么互動的?用的什么資料庫?
- 使用什么存盤引擎,為什么使用InnnoDB?
- 訂單表有做拆分么,怎么拆的?
- 水平拆分后查詢程序描述下
- 如果落到某個分片的資料很大怎么辦?
- 哈希取模會有什么問題么?
- 分庫分表后怎么解決讀寫壓力?
- 拆分后主鍵怎么保證惟一?
- Snowflake生成的ID是全域遞增唯一么?
- 怎么實作全域遞增的唯一ID?
- Mysql的索引結構說下
- 主鍵索引和普通索引的區別?
- 你們系統目前的瓶頸在哪里?
- 你打算怎么優化?簡要說下你的優化思路
- 有什么想問我么?
四面
- 介紹下自己
- 為什么要做逆向?
- 怎么理解微服務?
- 服務治理怎么實作的?
- 這個不是中間件做的事么,為什么你們部門做?
- 說說Spring的生命周期吧
- 說說GC的程序
- CMS GC有什么問題?
- 怎么避免產生浮動垃圾?
- 強制young gc會有什么問題?
- 知道G1么?
- 回收程序是怎么樣的?
- 你提到的Remember Set底層是怎么實作的?
- 有什么想問的么?
五面
五面是HRBP面的,和我提前預約了時間,主要聊了之前在螞蟻的實習經歷、部門在做的事情、職業發展、福利待遇等,阿里面試官確實是具有一票否決權的,很看重你的價值觀是否match,一般都比較喜歡皮實的候選人,HR面一定要誠實,不要說謊,只要你說謊HR都會去證實,直接cut了,
- 之前螞蟻實習三個月怎么不留下來?
- 實習的時候主管是誰?
- 實習做了哪些事情?
- 你對技術怎么看?平時使用什么技術堆疊?
- 最近有在研究什么東西么
- 你對SRE怎么看
- 對待遇有什么預期么
最后HR還對我說目前穩定性保障部挺缺人的,希望我盡快回復,
小結
螞蟻面試比較重視基礎,所以Java那些基本功一定要扎實,螞蟻的作業環境還是挺贊的,因為我面的是穩定性保障部門,還有許多單獨的小組,什么三年1班,很有青春的感覺,面試官基本水平都比較高,基本都P7以上,除了基礎還問了不少架構設計方面的問題,識訓還是挺大的,
總結
從年前開始面試到最后大概一個多月的時間,真的有點身心俱疲的感覺,最后拿到了拼多多、螞蟻的offer,還是蠻幸運的,頭條的面試對我幫助很大,再次感謝面試官對我的誠懇建議,以及拼多多的HR對我的啰嗦的問題詳細解答,
這里要說的是面試前要做好兩件事:簡歷和自我介紹,簡歷要好好回顧下自己做的一些專案,然后挑幾個亮點專案,自我介紹基本每輪面試都有,所以最好提前自己練習下,想好要講哪些東西,分別怎么講,此外,簡歷提到的技術一定是自己深入研究過的,沒有深入研究也最好找點資料預熱下,不打無準備的仗,
這些年看過的書:
《Java核心知識》《Java面試寶典》《高并發與多執行緒》《Java程式性能優化》、《Spring實戰》、《Zookeeper》、《高性能MySQL》、《億級網站架構核心技術》、《可伸縮服務架構》、《Java編程思想》
說實話這些書很多只看了一部分,我通常會帶著問題看書,不然看著看著就睡著了,簡直是催眠良藥
最后,附一張自己面試前準備的腦圖:
面試前一定少不了刷題,為了方便大家復習,我分享一波個人整理的面試大全寶典
想獲取個人高清面試準備的朋友可以在文末領取及面試題含答案的資料
- Java核心知識寶典整理
Java核心知識
- Spring全家桶(實戰系列)
- 其他電子書資料
Step3:刷題
既然是要面試,那么就少不了刷題,實際上春節回家后,哪兒也去不了,我自己是刷了不少面試題的,所以在面試程序中才能夠做到心中有數,基本上會清楚面試程序中會問到哪些知識點,高頻題又有哪些,所以刷題是面試前期準備程序中非常重要的一點,
以下是我私藏的面試題:
寫在最后
很多人感嘆“學習無用”,實際上之所以產生無用論,是因為自己想要的與自己所學的匹配不上,這也就意味著自己學得遠遠不夠,無論是學習還是作業,都應該有主動性,所以如果擁有大廠夢,那么就要自己努力去實作它,
以上學習資料均免費放送,最后祝愿各位身體健康,順利拿到心儀的offer!
資料獲取方式:掃描下方二維碼即可免費領取~

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/29070.html
標籤:Java
上一篇:面試題精選:資料偽造
下一篇:程式猿職場求生指南
