工作10多年,每年都會幫組里面試一些新同學校招社招的都有,下面我就從一個面試官的視角來給大家拆解一下如何淡然應對后端開發技術面試。
1.一面多為電話面試
(1)問七問八
①簡歷要注重內容,形式上不丑沒有錯別字即可。之前收到過一個工作5年的簡歷,內容只有一面,因為他一直在一個公司的一個項目組,他就寫了一個大項目。這種簡歷很有問題,如果你確實沒項目可寫,
②換工作不能太頻繁。如果你跳槽的頻率是半年到一年,相信我,沒有大廠敢要你,因為大廠流程復雜,半年相當于剛把你培訓上道,你卻要跑了。
③不要說自己是被優化掉的。你自己不承認,面試官懷疑也沒有用,如果你面試狀態很不錯,其實沒有影響。但是如果你上來就說自己是被上家優化掉的,很多大廠都不會考慮。
(2)自我介紹免不了
①下面是個不好的例子:我告訴他進行一次簡短的自我介紹,結果他聊了15分鐘也不停歇,嘗試打斷他,沒說幾句,他又開始聊起來自認為很牛x的項目。
(3)背八股。你說你精通c++,剛好我也懂。。。
①面試官很喜歡問一些底層實現之類的問題以彰顯他們的智慧,比如虛函數是怎么實現的?如果你能條理清晰的虛函數表的內存布局就差不多了。還有比如STL的hashmap是如何實現的?其實這些東西在工作中鮮有實際用途,但是能判別一個人是不是真的一天到晚CRUD,從不學習底層技術。你也知道大廠都是招聘火箭專家進來打螺絲。
(4)系統設計侃大山
①一般電話面試不會要求做題(也有那種給你一個共享文檔讓你來做題的情況),但是系統設計是可以不用寫寫畫畫就能聊的,比如面試官會讓你設計實現一個限流器,碰到這種問題,你不要一上來就給答案,你需要先跟面試官溝通問清楚需求,比如問面試官如下問題:你是要給什么東西限流,面試官會說后端API接口;然后再問是給單機服務限流還是集群API限流;然后再問需求是否是只需要限制每秒少于N個請求即可還是說要盡可能的平滑請求等等;你把需求問清楚了,思路基本就出來了,比如你給出了一個用redis實現的令牌桶。
(5)你有什么問題?
①理論上你可以問面試官任何問題,但是最好不要問,你們組卷不卷,加班多不多之類的問題,你問了,面試官會覺得你不喜歡加班,而且這種問題你在面試官那里也得不到真實的答案,這個問題你最好問給你內推的人。
2.二面/三面
二面三面基本都是硬核的做題類型的面試。
(1)自我介紹,請開始你的表演。注意時長(5分鐘以內),重點說難度說亮點。什么叫難度?高并發高可用低延遲,往這上面靠就行。
(2)八股文你能背出來嗎?
①所有你簡歷上的內容,你都需要提前準備,尤其是你精通的,比如你說你精通Redis,面試官可能就會問你,redis為什么這么快?你如果只回答了一句因為redis是存內存的,你可能這次面試會掛,即使你作對了兩道題。而如果你說了很多點,比如非阻塞I/O多路復用,以及哈希表優化等等,即使你兩道編程題只做對了一道,一般還會有下次機會。
(3)先做一道入門級別的編程題熱熱身.
①這里一般面試官會讓你用自己最擅長的語言寫一道基本的編程題。比如將一個數1234轉成中文一千二百三十四,拿到這種題目切記不要大意,面試官考察的是你能否編寫干凈整潔和正確的代碼,干凈整潔需要你邏輯清晰不寫垃圾代碼,正確需要你想清楚各種邊邊角角的情況比如4000,0等,并寫好單元測試。
(4)工作5年,并發編程應該小菜一碟吧。
①比如讓你寫一個多線程壓測工具,給你一個url,需要你開多線程對這個網站發送http請求,并打印出來當前壓測的QPS是多少。你如果用java,拿到這個題,你至少需要知道如何開thread,如何發http請求,如何線程安全的記錄QPS,可以看出這種題目并不難,但是如果你寫代碼不多,很容易寫不滿足要求的代碼。
(5)重頭戲來了:算法和數據結構
①這一塊可能很難,如果你面試的職級比較高,碰到比較難的題例如某些復雜的動態規劃題目的概率就比較大,?還有一般女生碰到難題的概率相對較小,以及特別牛X轟轟的人碰到難題的概率相對較大。
②正常都是leetcode上中等難度的題,比如對常見的數據結構二叉樹,就會出一道這樣的題,給你一個二叉樹,驗證它是否是一個二叉搜索樹,什么?你連二叉搜索樹是啥都不知道?這時候你不要慌,你就說平時編程時沒有用過二叉搜索樹,5年前學過的,現在忘記了,讓面試官提醒你一下二叉搜索樹的特性;面試官心情不差的情況下應該會告訴你;要是你剛好刷過這道題,你應該竊喜,并且不露聲色的做思考狀,“嗯,這道題沒做過,遞歸不好搞啊,遍歷一下怎么樣,左中右,BST遍歷之后應該是升序啊,然后裝作問面試官,是升序就是BST?”。如果你很誠實,也可以告訴面試官我剛做過,請換一道。。
3.終面
(1)不清楚,等我當上領導了再說吧。