標籤 : 面試前端
[TOC]java
2017 年互聯網校招已近尾聲,做爲一個非 CS 專業的應屆生,零 ACM 經驗、零期刊論文發表,我經過本身的努力和準備,從找實習到校招一路運氣不錯,面試所有經過,謹以此文記錄個人校招感悟。git
寫做動機github
你能夠從這篇文章獲取哪些信息面試
這篇文章不能帶給你什麼算法
春招找實習,投了三家(阿里,騰訊,美團),所有拿到實習 Offer,去了阿里。spring
秋招爲了穩妥地轉正,拿一個好的評級,在專心準備轉正面試,錯過了提早批,正式批投了五家,面了三家(阿里,騰訊,網易),基本都是 special offer:數據庫
招聘,對公司而言,是尋找勞動力;對員工而言,是尋找將來的同事。因此考覈的東西確定有以下幾點:編程
因此不少人掛的緣由就很明顯了:技術能力不佳,掛;看不到學習的悟性,只會已有技能,掛;聊天思路不清晰,溝通障礙,掛…………設計模式
固然,招聘原本就是一個雙向選擇的過程,公司在選擇你的同時,你也在選擇公司,好比工做要拼仍是要 balance,這種事見仁見智。
雖然面試考覈的東西不少,但技術面試最主要的仍是考覈技術能力,記得學長告訴過我:「技術基礎和項目經歷,至少得有一個拿得出手」,因此下面談談所謂的「技術基礎」。
我投的全部崗位都是 Java 研發,因此就以 Java 研發爲例,以文字的形式寫出大體的知識圖譜/思惟導圖。不少我就只點到爲止,不可能面面俱到。
算法和數據結構基礎
Java 基礎
Java Web
數據庫(主要是 MySQL)
計算機網絡
操做系統
1.這麼多東西,從哪學起呢?
我本身的學習路線規劃:技能的主線是 Java 語言基礎 -> Spring 框架開發業務 -> 分佈式系統解決高併發,基礎方面 算法,網絡協議,操做系統 帶着學
2.學到什麼程度呢?
以上四種程度逐層加深,固然越深越好,一般前兩種程度只能稱之爲「瞭解」;而寫上簡歷迎接考覈的,至少須要掌握到「原理」的程度。
好比,Java 你至少得看過經常使用類的 JDK 源碼;數據庫只會增刪改查確定不夠,起碼得把底層索引結構講清楚;常見算法起碼能講清楚關鍵步驟,分析時間空間複雜度,而且 bug free 地寫出來。
技術儲備是一切的基礎,若是基礎都不會,那後面的簡歷撰寫,臨場引導面試官等技巧根本無從下手,只有被虐的份
「冰凍三尺非一日之寒」,功夫在平時,與其背面經寄但願於碰原題,不如紮實學習,以不變應萬變。
能夠經過 看書+記筆記 的形式來學習,書上的代碼能夠對着敲一敲,學習筆記和代碼能夠發到 GitHub 上,用來展現本身的學習熱情。
下面是我這一年多來看過的書,每一本我讀以前都作了充分的調研和篩選,豆瓣評分通常都在 7~9 分:
少看了一本《深刻理解計算機系統》,因此被問到系統相關問題就很虛。
附上買書的截圖
我整理了一些學習筆記和源碼:
首先 最重要的就是寫簡歷,找工做就像相親,簡歷就是顏值,在這個看臉的社會,只有長得過關,別人才願意深刻發掘你。從我面試的感覺來講,經過與否,簡歷能夠佔到 50% 以上。
建議儘早的開始準備簡歷,由於寫簡歷時纔會發現本身的簡歷沒什麼東西可寫,纔會有一種危機感。若是等到校招纔開始寫,就晚了。
怎麼寫一個好的簡歷網上不少帖子,就不贅述了,這裏簡單說幾點:
項目經歷的提煉能夠從如下幾個方面着手準備,這些問題均可以事先想好,多口述演練,以避免臨場緊張出錯
基本問題
開放問題
沒有項目經歷能夠本身找找開源的項目作,或者找一些本身感興趣的方向作一些玩具項目,世上無難事,只怕有心人。
面試本質是信息溝通,是你向面試官展現你能勝任這個崗位,而不是一問一答。你應該儘可能主導面試,引導面試官,而不是被動答題。即使同一個衆人皆知的問題,也不該止步於答出來便可,要爭取儘可能回答的和別人不同,展示出本身獨到的研究和體會。
因此不少人疑惑:爲何我每一問都答上來了,爲啥還掛了?多半就是自我感受良好,其實答的不咋樣,或者就是被面試官牽着鼻子走,給人一種是在背面經的感受。其實不少問題沒有標準答案,面試官看的是你解決問題的思路,思考問題的方式,而不是這個問題答案是什麼
我從本身被問過的問題和反思中簡單說幾點:
好比最經典一個問題:輸入一個網址到看到頁面,經歷了哪些過程。若是隻是回答 DNS,OSI 的幾層協議,那格局未免過小,同時會把面試官引導往網絡協議提問,接踵而至的可能就是 TCP/IP(三次握手,TIME_WAIT,滑動窗口),HTTP(keep-alive,HTTPS)等一系列協議細節,就把本身的展現機會限制在很小的範圍了。
而這個問題其實能夠從網站架構的層面先宏觀描述,如 DNS,負載均衡,靜態頁面/動態頁面,數據庫訪問,緩存,甚至前端的瀏覽器渲染等等,這樣你能夠聊得東西就不少,同時證實你有實際的項目經驗,知道業界是如何作的,而後再回頭把網絡層面的東西簡單提一提。
再好比被問到有哪些 hash 方法?由於通常都是問哈希衝突解決方法,不少人會說開放地址法,鏈表法等等。至於 hash 方法,真的有點懵逼,憑下意識說了一個取模(取餘數),答到這確定不夠,因而我把 Java 幾個基本類型的包裝類 Integer, Boolean, String 的 hashcode
方法的實現說了一遍,一方面做爲例子填充回答,另外一方面,表示我研究過 JDK 源碼
譬如,被問到 AOP,IoC 這些概念時,不要官方的解釋背一遍,最好結合本身的使用經驗,把使用場景和感覺到的好處說一下,會比較生動。
以前被問到「倒排索引」的問題時,我只是舉了個例子把這個概念講清楚了,後來以爲並非太好,只是停留在解釋的層面,若是能首先提綱挈領的來一句「通常的索引,是文檔到單詞的映射;而倒排索引,是單詞到文檔的映射」,整個回答的高度就不同了。
再好比「二叉樹搜索和哈希查找的區別」,若是能答出搜索二叉樹是基於比較的排序,因此時間複雜度爲 O(log n)
,哈希查找是一個函數映射,因此能作到 O(1)
,說明你不是背面經的。
面試中不免會遇到不會的,這時千萬不要不懂裝懂,若是以爲有想法、能說一點,能夠先坦誠認可本身不會,希望意嘗試回答一下,這樣即便說錯了,也不會被懟,由於你已經把場子撿開了。
好比當問到「JVM 如何標記要回收的內存」,我其實記不得了,就說不清楚,但標記無非就那麼幾種方法,因此提了兩種:要麼在每塊內存留一點標識位(好比一個字節)來標識,要麼另外用一個調度表之類的存儲結構來統一記錄和管理。這樣還能夠和麪試官進一步交流學習。
每一場面完都要反思總結,看看哪裏答得很差。若是是知識性的缺陷,就趕快補起來;知道答案但答得很差的,就從新組織措辭和表達方式;即便是回答上來的,也能夠反思一下如何答得更好。
固然,全部技巧的前提,是認真踏實的基礎準備
我以爲不少公司的筆試是過場,主要仍是根據簡歷刷人。由於我筆試歷來沒所有 AC 過,但都經過筆試了,認識的一些朋友三題 AC,卻沒過筆試。
有的大公司會全程電話面試(如阿里),有的是先電話面試篩選簡歷,而後通知現場面(如網易)。電話面試的好處就是不用手寫代碼,缺點就是語言不少時候傳遞的信息是不夠的,不少面部反饋、手勢和圖例都沒法展現。
大多數公司仍是會安排現場面試,要麼安排你去公司面試(大公司會報銷路費),要麼安排公司員工到你學校來,一般就是 2 面技術面+1 面 HR 面 。每一個公司風格不一樣,好比騰訊通常是一天一面,戰線有三天,而網易是一天面完。
另外,其實校招的戰線已經從每一年的 9 月份提早到了 3 月份,尤爲是阿里,實習生留用會佔很大一個比例。因此但願認清緊迫的形式,越早準備越好。3 月能不能找到一個好的實習,對找工做影響仍是挺大的,畢竟,若是沒實習經歷,那面試只能全程懟基礎了,而基礎是個無底洞。並且,手裏是否有一個保底的轉正 offer,你面試的心態是不同的。
最後祝各位找工做順利,這篇文章主要是寫給學弟學妹的,但願儘早重視起來,開始準備。若是讀完以爲有收穫的話,歡迎給我打賞(http://brianway.github.io/about/)