目前人在字節,萬千字節面試官之一,其他崗位我不太清楚,開發崗位我可以詳細聊一聊。
一、對面試官的要求
字節的面試雖然對面試者的要求很高,但對面試官的要求也不少,我們有一份很詳細的規定,規定了面試官的面試時長、可以問的和不可以問的問題等諸多細節,盡量做到給面試者良好的面試體驗。所以如果有同學來字節面試,一般不會遇到很不靠譜的面試官。我以往一些工作經歷中,曾遇到一些面試時漫不經心的、玩手機的、全場接電話的、鄙視求職者過往經驗的、嫌棄面試者上家公司業務的、問求職者薪資和個人情感問題的面試官,這些問題你來字節面試都不會遇到。另外,字節的面試要求面試官詳細地記錄面試中提問的問題和面試者的回答,同時在征得面試者允許的情況下做一些面試錄音,以方便后續面試官和 HR 部門對面試結果做參考和評判。面完之后,字節也會邀請面試者對面試體驗做評價和反饋。所以,來字節面試,你不用擔心在人的方面被坑。這大概也是這幾年字節能招募許多優秀的人才、快速發展壯大的原因。
二、對面試者的要求
一般技術面試至少有三輪(不包括 HR 面),當然前提是你得通過前面的一面和二面,春招和秋招在面試前會有筆試題。
無論是 BAT 還是字節這樣的大公司,面試七分看實力和背景,三分看運氣,運氣方面包括你可能在某次面試的時候恰好遇到一個比較賞識你的面試官(下文會提到),那么面試就比較容易過。運氣部分大多數人都抓不住,我們來說說可以抓得住的實力部分吧,實力部分包括技術實力和溝通(話術)實力。
三、4 位面試未通過的同學所犯的錯誤
我們先來看 4 位未通過面試的案例吧,希望給大家一點啟發。前 3 位同學都是應屆生,最近面的,學歷都不錯;第 4 位是一個工作七年以上的同志。
3.1 第 1 位同學
第 1 位是北京某大學的同學,這位同學在簡歷上寫的是主要編程語言是 Java,並且在簡歷上貼了自己的 github 項目地址和博客地址。我面試前看他簡歷的時候,特地去看了他的博客和 github 代碼,代碼風格很不錯,博客上的文章原創多,且流程圖畫的非常精致,這給我留下了非常好的印象,為這位同學點贊。
實際面試的時候,我問了一些 Java 方面常用的知識,如 HashMap 的數據結構、擴展因子、算法復雜度、線程的創建、== 和 equals 方法的區別、線程池的設計等等,最后讓這位同學寫了一道算法題。他也很快在 IDEA 中用 Java 寫出來了,並且測試也沒問題。於是,一面我就讓他過了,並且面試給予不錯的評價。
二面是我的同事面的,由於一面我沒有問網絡方面的問題,二面上來第一個問題是問了三次握手的問題,這位同學直接回答說“這個問題比較復雜,不太清楚”,我在旁邊旁聽,聽到他說這話的時候,我就知道他這場面試已經走遠了,面試肯定過不了。果不其然。我看二面的面試評價時,詳細地記錄了這個問題和他的回答。最終二面給到他的總體評價是:基本功不扎實,計算機網絡掌握的差。
個人覺得這位同學就比較冤,正常對於像問三次握手這樣的問題,認真准備一下,問題應該不大,無非就是話術問題,他說出的答案感覺出他對這些基本功的輕視,而這類基礎問題恰恰是可以適當准備的。
3.2 第 2 位同學
第 2 位同學是合肥某學校的同學。這位同學前期學的是 Java,但是找了一份實習工作做的是 php,然后在簡歷寫上自己熟悉 Java 和 php。
面試開始的時候,我先問了一些 Java 的基礎問題,該同學基本上都沒答好,接着我問了計算機網絡、多線程、數據庫、Redis 方面的問題,基本上也沒答好。於是我就給了他幾道算法題,讓他自己選兩道題目來做。
他說他用 Java 寫一下,我們是線上面試。於是我看到他打開 VSCode 開始寫 Java 代碼,我就提醒他說,Java 開發一般不是用 IDEA 開發嘛,VSCode 方便嗎?他說方便。大概過了15 分鍾,他代碼寫完了,開始編譯,但是有編譯錯誤,我看他在那里搗鼓了一會兒仍然沒解決編譯錯誤,於是我就給了他一點提示。在他解決了編譯錯誤以后,跑測試用例的時候,跑出來的結果總是不符合預期。於是我就問他,結果非預期有解決思路嗎?他又搗鼓了一會兒,最終放棄了。
在這位同學做算法題期間,我又認真看了一遍這位同學的其他面試記錄,發現這位同學筆試成績不合格(分數偏低),后找人內推,參加了兩個部門的面試,都沒面過,后來又被內推到其他七八個部門,簡歷篩選均未通過。這次面試我們部門也是內推的。
面試結束了,這位同學自知面試無法通過,當我問他有什么問題想問我的時候,他說希望我告訴給他一些學習的建議。我總結了一下:
- 無論是學習還是找實習,在未學好的情況下,學習內容要做一些收攏
比如這位同學,明明開始是學習 Java 的,找的實習卻是 php,當我問及他為什么要找 Java 實習的時候,他說他因為一些事情耽誤了找實習的最佳時機,后來 Java 實習找不到,勉強找了一份 php 實習。結果實習的內容僅僅是一些 CRUD 的工作,php 未學好,原來的 Java 也生疏了。但是簡歷上寫的是熟悉 Java 和 php,我看他的之前面試記錄,他曾在前面某一場面試時,被問及到 php 的一些問題,答不出來;在前面的某一場和這次的面試,被問及 Java 的基礎問題也答不好。不能為了實習而實習,如果基本功未掌握好,不如踏踏實實留在學校夯實基本功。 - 不注重基礎知識的學習
該同學在算法數據結構、網絡編程、多線程、數據庫等方面,都未掌握好。 - 不善於總結和反思,動手能力差,且遇到問題無清晰的解決問題的思路
我在面試的過程中,特地挑了幾個在他之前面試被問到的問題,結果這位同學仍然答錯或者不得要點;該同學在編寫代碼時,對編程工具不熟悉,缺乏基本的編譯、調試能力,遇到不符合預期的輸出結果,也無很好的解決思路。 - 學習知識不注重理解,喜歡機械式地記憶;網上看到的帖子,不加甄別地吸收
我問了這位同學一些關於三次握手的問題,但是我稍微變通一下,問如果連接一個不存在的主機、或者連接一個存在的主機但目標端口號未開啟偵聽時的握手情形,該同學就不知道如何分析了。當問到 HTTP GET 和 POST 方法的區別時,該同學直接就搬出了一篇網絡上有錯誤的文章中的內容,不假思索地說出 GET 請求底層只發一個包,POST 會發兩個包的論斷。當然,網上這篇文章誤導了很多同學。
3.3 第 3 位同學
第 3 位同學是浙江某高校的一位同學。這位同學學習的 C++ 技術棧,C++ 語言部分掌握的還可以,但是在網絡編程、多線程等基礎知識上掌握的不好,例如網絡分層結構說不清楚、 select 函數用法不清楚、搞不清楚基本的網絡模型、epoll 的邊緣模式對讀寫事件的處理理解不清楚、條件變量不知道虛假喚醒、HTTP 協議格式說不清楚。
該同學還存在的一個比較大的問題就是簡歷上寫了過多的未掌握的或者一些不相關的技術棧,如 Redis、Nginx 並不熟悉,還寫了 SpringBoot、Vue 等不相關技術。簡歷中要注意揚長避短,比如你的學歷不占優勢,那你就不要把學歷放在醒目位置,關於如何避免簡歷中常犯的錯誤可以參考這里。
3.4 第 4 位同學
第四位同學是社招,工作七年以上,對於這樣的同學我們沒有安排算法題,而是期望這位同學有扎實的基本功、一定的經驗或者有擅長的技術方向。但實際面試下來,在討論過往項目時,就項目中涉及到的一些關鍵的技術點說不清道不明,然后我們就分布式、RPC、緩存、數據庫、消息隊列、CDN、系統優化、架構設計、項目管理、團隊管理等方面交流了一下,感覺該同學無一方面熟悉,遂結束面試,當然面試結果肯定也是無法通過。一般面試者哪方面熟悉,我就和他聊哪方面,可惜最后結果不是很滿意。
四、一些總結
通過上面幾個失敗的案例我想說的是:
- 在絕對實力面前,字節的面試並不難;
- 適當掌握一些面試話術技巧,可以增大面試成功的幾率,至少不要犯像上文中第一位同學那樣的表達錯誤;
- 面試前要適當准備一下。
五、幾個大家比較關心的問題
5.1 關於學歷
通常來說,字節對於校招是有一定的學歷要求的,基本上一本及一本以上,一本以下的一般在簡歷篩選階段被過濾的幾率較大;對於社招,簡歷篩選階段,某些部門適當放低對學歷要求,最后能不能進主要看面試表現。
5.2 關於基本功與項目經驗
通常來說,對於校招應屆生,一般不對項目經驗、實習經驗做刻意要求,但對基本功要求高,尤其是算法和數據結構,校招算法題答的不好,基本面試通過幾率不大,當然,這也是大廠普遍要求,基本功通常包括算法數據結構、某個編程語言本身的內容、操作系統原理、多線程、網絡編程、數據庫;校招,對於工作年限不長的同學,也會考察一定的算法和數據結構知識,然后是基本功和一定的項目經驗;對於工作年限較長的,期望在某個技術方向有些自己的積累和沉淀。
5.3 關於分布式和高性能高並發項目經驗要求
很多社招的同學擔心,自己無分布式項目開發經驗,或者無高性能高並發項目開發經驗,會不會面試通過不了。一般來說,根據我的經驗以及和各個其他作為面試官的同事的交流下來,一般對這兩塊也不作強行要求。一般看以往的工作經驗,經驗是否豐富、對一些技術是否有自己的沉淀和獨到的理解和歸納總結。
5.4 關於內推
通常找人內推要比獵頭推薦或者網上自己投簡歷要快很多,內推的時候可以經常聯系內推的同學獲取最新的面試結果。以上面第 2 位同學為例,如果不是找的師兄內推,根據他第一次的面試記錄,不會有多少部門願意再次給他提供面試機會。
機會總是給有准備的人,祝各位都能拿到滿意的 offer。
六、內推字節(其他 BAT 公司也可以)
七、為技術開發的同學准備的福利
我為做開發的同學精心准備了一份書單,書的數量不多,少即是精: