如何準備校招技術面試

愛程式設計廚師發表於2018-06-29

你可以從這篇文章獲取哪些資訊

如何看待校招面試

以 後臺研發 為例,校招技術面試的考核範圍和難度

如何提升自己的技術內功(長期)

如何有針對性地做面試準備(短期)

面試交談中的一些技巧

一線網際網路公司的校招面試流程

這篇文章不能帶給你什麼

本文並不是速成寶典/突擊手冊

本文不會羅列面試原題和題解

我的面試經歷

春招找實習,投了三家(阿里,騰訊,美團),全部拿到實習 Offer,去了阿里。

阿里:菜鳥網路;3 面技術電面 + 1 面 HR 視訊面。二面佈置了一個工程小作業,做了兩天

騰訊:投的後臺開發(事業群無意向),被轉到 SNG 運營開發;簡歷評級 S,2 面電話面試 + 線路現場面試 2 面技術 + 1 面 HR

美團:美團餐飲平臺;2 面電話面試 + HR 直接通知 offer。歷時一週多,最效率

秋招為了穩妥地轉正,拿一個好的評級,在專心準備轉正面試,錯過了提前批,正式批投了五家,面了三家(阿里,騰訊,網易),基本都是 special offer:

阿里:菜鳥網路;成功轉正,評級不錯

騰訊:投的微信 Web 開發,被調到 IEG 後臺開發(不知道為什麼多了一個阿里實習,我的簡歷評級反而從 S 變成了 A+);線上筆試 + 現場 2 技術面 + 1 HR面。HR 面時我期望薪資提的 sp 的價格,offer 報批中。

網易:跨境電商(考拉海購);線上筆試 + 現場 2 技術面 + 1 HR 面。HR 說技術面評價不錯,問題不大。結合身邊同學,我應該是 sp。網易面試體驗最好,面試官(尤其一面那位)很專業,很佩服

頭條(放棄面試):來校園宣講,免筆試直接面試,沒去

網易遊戲(放棄面試):計費應用系統開發;電話通知筆試過了,手裡有 3 個 offer 了,就主動告知不面了。

如何看待校招面試

招聘,對公司而言,是尋找勞動力;對員工而言,是尋找未來的同事。所以考核的東西肯定有如下幾點:

技術能力:招你進來是幹活的,公司不是慈善機構,不養閒人,所以你需要 證明你能勝任這項工作

學習能力/潛力:要能幹活的走社招就行了,應屆的優勢就是潛力,你得 向公司證明值得培養你

軟技能:招你進來是和其他人共事的,所以為人處事、溝通能力、是否合群、三觀等等, 你的“調性”要和公司/組裡的吻合

所以很多人掛的原因就很明顯了:技術能力不佳,掛;看不到學習的悟性,只會已有技能,掛;聊天思路不清晰,溝通障礙,掛…………

當然,招聘本來就是一個雙向選擇的過程,公司在選擇你的同時,你也在選擇公司,比如工作要拼還是要 balance,這種事見仁見智。

技術面試考核的技術範圍

雖然面試考核的東西很多,但技術面試最主要的還是考核技術能力,記得學長告訴過我:“技術基礎和專案經歷,至少得有一個拿得出手”,所以下面談談所謂的“技術基礎”。

我投的所有崗位都是 Java 研發,所以就以 Java 研發為例,以文字的形式寫出大致的知識圖譜/思維導圖。很多我就只點到為止,不可能面面俱到。

演算法和資料結構基礎 

資料結構:陣列,連結串列,雜湊表,堆,佇列,棧,二叉樹,B樹/B+樹,紅黑樹,圖(研發問圖不多)

常見的排序演算法(冒泡,插入,快排,堆排,歸併排序…)

簡單的動態規劃問題(揹包,上樓梯)

各種時間空間複雜度分析

Java 基礎 

最基本的語言基礎:語法,關鍵字含義,物件導向….

集合類(ArrayList, HashMap, ConcurrentHashmap…等等)

多執行緒(鎖,CAS,執行緒池,concurrent 包下的類)

語言特性:反射,動態代理,泛型,Java 8 新特性

IO (裝飾器模式,NIO)

JVM:記憶體模型,垃圾回收,類載入機制

Java Web 

Tomcat,Servlet,JSP,Cookie/Session 等基本概念

框架使用和原理:Spring(AOP,IoC),MyBatis 等

資料庫(主要是 MySQL) 

基本 SQL 語句,索引優化

儲存引擎(InnoDB,MyISAM),索引原理

事務 ACID,隔離級別

分庫分表,主從複製,讀寫分離

計算機網路 

OSI 7 層模型和 TCP 4 層模型

傳輸層:TCP/IP 相關知識,和 UDP 比較

HTTP 協議:報文結構,POST/GET 方法

網路程式設計 (socket, NIO, select 等)

作業系統 

基本 Linux 的操作指令

程式/執行緒比較,程式間通訊方式,P/V 操作

磁碟排程,虛擬記憶體

死鎖,中斷

1.這麼多東西,從哪學起呢?

我自己的學習路線規劃:技能的主線是 Java 語言基礎 -> Spring 框架開發業務 -> 分散式系統解決高併發,基礎方面 演算法,網路協議,作業系統 帶著學

2.學到什麼程度呢?

概念性的程度:瞭解是啥,能夠口述含義

使用的程度:可以熟練使用,比如呼叫 API,寫 SQL 查詢

原理的程度:能夠講清楚底層實現

提出見解的程度:從任意技術可以引申出相關技術,並能夠分析聯絡和區別,提出自己的見解和體會

以上四種程度逐層加深,當然越深越好,通常前兩種程度只能稱之為“瞭解”;而寫上簡歷迎接考核的,至少需要掌握到「原理」的程度

比如,Java 你至少得看過常用類的 JDK 原始碼;資料庫只會增刪改查肯定不夠,起碼得把底層索引結構講清楚;常見演算法起碼能講清楚關鍵步驟,分析時間空間複雜度,並且 bug free 地寫出來。

技術儲備是一切的基礎,如果基礎都不會,那後面的簡歷撰寫,臨場引導面試官等技巧根本無從下手,只有被虐的份

如何提升自己的技術內功

“冰凍三尺非一日之寒”,功夫在平時,與其背面經寄希望於碰原題,不如紮實學習,以不變應萬變。

可以通過 看書+記筆記 的形式來學習,書上的程式碼可以對著敲一敲,學習筆記和程式碼可以發到 GitHub 上,用來展示自己的學習熱情。

下面是我這一年多來看過的書,每一本我讀之前都做了充分的調研和篩選,豆瓣評分一般都在 7~9 分:

《演算法》(第四版)圖以前章節

《劍指 Offer》

《Java 程式設計思想》

《Java多執行緒程式設計核心技術》(高洪巖 著)

《Java 併發程式設計實戰》

《深入理解 Java 虛擬機器》

《Java 8 實戰》

《鳥哥的 Linux 私房菜》

《MySQL 必知必會》

《Maven 實戰》

《圖解 HTTP》

《敏捷軟體開發》

《架構探險-從零開始寫 Java Web 框架》

《Spring 3.x 企業應用開發實戰》

《Head First 設計模式》

《大型網站技術架構》(李智慧 著)

《大型網站系統與 Java 中介軟體實踐》

少看了一本《深入理解計算機系統》,所以被問到系統相關問題就很虛。

如何有針對性地做面試準備

首先 最重要的就是寫簡歷,找工作就像相親,簡歷就是顏值,在這個看臉的社會,只有長得過關,別人才願意深入發掘你。從我面試的感受來說,通過與否,簡歷可以佔到 50% 以上。

建議儘早的開始準備簡歷,因為寫簡歷時才會發現自己的簡歷沒什麼東西可寫,才會有一種危機感。如果等到校招才開始寫,就晚了。

怎麼寫一個好的簡歷網上很多帖子,就不贅述了,這裡簡單說幾點:

亮點:名校本碩,專業排名,大賽獲獎,名企實習。(如果一個沒有隻能自求多福)

技能:這些可能是面試官的提問點,不熟別寫

專案:技術棧,難點,貢獻/產出

事實:一萬句“我學習能力很強”不如一句“我專業排名第一”,一萬句“我愛打遊戲”不如一句“我王者農藥打了 1000 多盤,每天投入 4 小時以上”

專案經歷的提煉可以從以下幾個方面著手準備,這些問題都可以事先想好,多口述演練,以免臨場緊張出錯

基本問題 

專案簡介

專案詳解

專案用到的技術

開放問題 

遇到的困難及解決

專案的優缺點及改進

收穫

沒有專案經歷可以自己找找開源的專案做,或者找一些自己感興趣的方向做一些玩具專案,世上無難事,只怕有心人。

面試技巧

面試本質是資訊溝通,是你向面試官展示你能勝任這個崗位,而不是一問一答。你應該儘量主導面試,引導面試官,而不是被動答題。即便同一個眾人皆知的問題,也不應止步於答出來即可,要爭取儘量回答的和別人不一樣,展現出自己獨到的研究和體會。

所以很多人疑惑:為什麼我每一問都答上來了,為啥還掛了?多半就是自我感覺良好,其實答的不咋樣,或者就是被面試官牽著鼻子走,給人一種是在背面經的感覺。其實很多問題沒有標準答案,面試官看的是你解決問題的思路,思考問題的方式,而不是這個問題答案是什麼

我從自己被問過的問題和反思中簡單說幾點:

1.不止步於問題,多展示自己會的

比如最經典一個問題:輸入一個網址到看到頁面,經歷了哪些過程。如果只是回答 DNS,OSI 的幾層協議,那格局未免太小,同時會把面試官引導往網路協議提問,接踵而至的可能就是 TCP/IP(三次握手,TIME_WAIT,滑動視窗),HTTP(keep-alive,HTTPS)等一系列協議細節,就把自己的展示機會限制在很小的範圍了。

而這個問題其實可以從網站架構的層面先巨集觀描述,如 DNS,負載均衡,靜態頁面/動態頁面,資料庫訪問,快取,甚至前端的瀏覽器渲染等等,這樣你可以聊得東西就很多,同時證明你有實際的專案經驗,知道業界是如何做的,然後再回頭把網路層面的東西簡單提一提。

再比如被問到有哪些 hash 方法?因為一般都是問雜湊衝突解決方法,很多人會說開放地址法,連結串列法等等。至於 hash 方法,真的有點懵逼,憑下意識說了一個取模(取餘數),答到這肯定不夠,於是我把 Java 幾個基本型別的包裝類 Integer, Boolean, String 的 hashcode 方法的實現說了一遍,一方面作為例子填充回答,另一方面,表示我研究過 JDK 原始碼

2.結合例子,不要背書

譬如,被問到 AOP,IoC 這些概念時,不要官方的解釋背一遍,最好結合自己的使用經驗,把使用場景和感受到的好處說一下,會比較生動。

3.從更高的層面去總結和闡釋問題

之前被問到“倒排索引”的問題時,我只是舉了個例子把這個概念講清楚了,後來覺得並不是太好,只是停留在解釋的層面,如果能首先提綱挈領的來一句“一般的索引,是文件到單詞的對映;而倒排索引,是單詞到文件的對映”,整個回答的高度就不一樣了。

再比如“二叉樹搜尋和雜湊查詢的區別”,如果能答出搜尋二叉樹是基於比較的排序,所以時間複雜度為 O(log n),雜湊查詢是一個函式對映,所以能做到 O(1),說明你不是背面經的。

4.不會的先把醜話說在前面

面試中難免會遇到不會的,這時千萬不要不懂裝懂,如果覺得有想法、能說一點,可以先坦誠承認自己不會,但願意嘗試回答一下,這樣即使說錯了,也不會被懟,因為你已經把場子撿開了。

比如當問到“JVM 如何標記要回收的記憶體”,我其實記不得了,就說不清楚,但標記無非就那麼幾種方法,所以提了兩種:要麼在每塊記憶體留一點標識位(比如一個位元組)來標識,要麼另外用一個排程表之類的儲存結構來統一記錄和管理。這樣還可以和麵試官進一步交流學習。

5.覆盤反思

每一場面完都要反思總結,看看哪裡答得不好。如果是知識性的缺陷,就趕快補起來;知道答案但答得不好的,就重新組織措辭和表達方式;即使是回答上來的,也可以反思一下如何答得更好。

當然,所有技巧的前提,是認真踏實的基礎準備

一線網際網路公司的校招面試流程

筆試

我覺得很多公司的筆試是過場,主要還是根據簡歷刷人。因為我筆試從來沒全部 AC 過,但都通過筆試了,認識的一些朋友三題 AC,卻沒過筆試。

電話面試

有的大公司會全程電話面試(如阿里),有的是先電話面試篩選簡歷,然後通知現場面(如網易)。電話面試的好處就是不用手寫程式碼,缺點就是語言很多時候傳遞的資訊是不夠的,很多面部反饋、手勢和圖例都無法展示。

現場面試

大多數公司還是會安排現場面試,要麼安排你去公司面試(大公司會報銷路費),要麼安排公司員工到你學校來,通常就是 2 面技術面+1 面 HR 面 。每個公司風格不同,比如騰訊一般是一天一面,戰線有三天,而網易是一天面完。

另外,其實校招的戰線已經從每年的 9 月份提前到了 3 月份,尤其是阿里,實習生留用會佔很大一個比例。所以希望認清緊迫的形式,越早準備越好。3 月能不能找到一個好的實習,對找工作影響還是挺大的,畢竟,如果沒實習經歷,那面試只能全程懟基礎了,而基礎是個無底洞。而且,手裡是否有一個保底的轉正 offer,你面試的心態是不一樣的。

一些建議

簡歷越早投越好:就像《中國好聲音》導師轉椅子一樣,剛開始覺得不錯的就啪啪啪四轉,後來坑不夠了,越來越糾結

只投一種崗位:我全程只投了“Java 研發崗/伺服器端開發”,這樣可以統一準備,避免戰線過長

分梯度精投幾個公司:不要海投,這樣會疲於奔命,勞民傷財還沒有時間準備。可以根據自己的能力,投幾個不同檔次的公司(如:高於自己水平的,希望比較大的,很有把握的,這幾檔),爭取拿到保底的,衝刺心儀的,而不是看到一個公司招人就去面試。


相關文章