我從事的是前端崗位,四月中旬時投過一波,不少都是找朋友或老同事內推,但都沒響應,連面試機會都沒有,只得做罷。前端
一直到五月底開始,陸陸續續開始有人來找我投簡歷,我在 boss 直聘和拉勾上公開了部分工做和項目信息後,找個人人也變多了。webpack
我投了幾家大廠或上規模的公司,都須要好幾輪,基本都是電話或視頻面試,只去了兩個現場。面的內容能夠分爲兩大塊:技術和項目,這些年一直專一於前端基礎知識的積累(前端躬行記系列),而忽視了項目的沉澱以及團隊的建設。而且因爲求職的崗位都是資深或高級前端,所以相對的要求也比較高(除了技術要紮實以外,還須要時刻關注着前沿技術,而且還得是個業務專家,能爲公司做出額外的貢獻),使得這麼屢次面試都不太理想。不過,從這幾回的面試中,獲得的收穫也很多,既然認清了當前形勢,就得適當的調整一下從此的工做重點。git
目前來看求職的時候公司會看年齡、畢業院校和大廠經驗,年輕名校有大廠經驗的人機會會多一點。3 ~ 5 年工做經驗的人特別吃香,很是建議早作職業規劃,在畢業後開始幾年先沉澱一下,而後去大廠歷練歷練,對之後的職業發展會有很大幫助。github
本身爲了能更好的應對面試,也整理了一套面試資料,但願對你們會有所幫助。web
1)基礎要紮實面試
對於基礎知識,得脫口而口,信手捏來。此次面的內容涉及 CSS 的比較少,JavaScript 和網絡問的比較多,性能優化是必問的,還有時髦的 ES6 、React (我平時的項目都是用React寫的)也是出現的比較多,數據結構和簡單的算法也須要好好準備準備。算法
除了常規的問答以外,還須要手寫代碼。上機測試或者現場筆試,很是建議你們平時純手寫,不要藉助 IDE 的自動提示。目前來看,不少公司都會出個幾道筆試題,試試求職者的編程能力。題目的話都不會很難,有空的話能夠去刷刷牛客網或力扣,保持手感。簡單的算法能夠練練,像快速排序、遞歸等,數據結構中的鏈表、二叉樹平時均可以複習一下,只靠面試前的突擊很容易忘記。我此次算法沒有準備的很好,遇到一道很簡單的揹包問題,沒有答出來,惋惜了。數據庫
2)視野要寬闊編程
不要侷限於本身眼前的一畝三分地,在平時就要有意識的拓寬本身的技術視野。例如如今很是流行小程序,那麼你是否對小程序的原理有所瞭解。還好比不少公司都在實現同構,那麼你是否本身操做過。還有微前端地目的是否有過了解,市面上給出的方案是否作過對比。時刻關注前沿技術,緊跟時代潮流,這也算是前端的一個特點吧。前端技術突飛猛進,沒過多少天,就會冒出新思想新技術。json
3)理解要深度
不要只停留在表層,適當地去深究一下你所看到的技術。例如你說跨域用的方案是CORS,那麼它的跨域原理是怎麼樣的?若是要傳遞Cookie,那麼先後端要如何配置?什麼狀況下,會發出兩次請求?等等。當拋出一個技術點時,能夠深挖到不少知識點。平時開發中,多問本身幾個爲何?或許就能注意到本身的盲點。面試官會根據你的簡歷,找一個技術點去慢慢的滲透,看你理解到什麼程度。有次面試還被問到,你最擅長的技能點是什麼?平時真的能夠往某個點作些深刻研究。
4)團隊的建設
除了完成本身手頭工做以外,你爲團隊還帶來了哪些貢獻或變化?例如爲新人提供技術思路,封裝通用組件爲成員使用,又或者制定自動化工做流改善工做效率等。多爲團隊着想,就能發現不少問題,試着解決這些問題,提高本身的同時也爲團隊帶來便利。
5)思路要多樣
面試中會遇到許多場景題,而後讓你給出解決方案,大部分都是你沒遇到過的,而你的回答固然是方案越多越好。這時候就得用本身過往的經驗以及大膽的創新來給出技術思路。例如如何在一個域名中登陸,而在另外一個域名中直接是登陸狀態。再好比當重寫XMLHttpRequest後,若是遇到第三方庫也重寫了它,碰到問題該如何排查?
其實平時上班的時候多向本身問幾個爲何,時間長了,本身的思路也能更加開闊。還有就是平時項目中遇到的難點,本身也須要有意識的記錄下來,試着多搞出些方案來。
在考察項目時,常常會問你遇到的比較困難的項目是什麼?
我自認爲項目中的難點就是解決從未遇到過的問題。但說着說着本身會感受好像也沒那麼難,就是有點煩。大部分人所作的業務都不會很難,那麼就本身給本身加點難度。例如我平時會作廣告落地頁,就是個表單填線索,加個圖片滑動,商品介紹,商業視頻等部分。很普通很平凡,可是若是作成一個可拖拽的可視化編輯器,那麼就會頗有搞頭,不只能大大提高工做效率(甚至可讓非技術人員自行搭建頁面),而且涉及到的技術點會不少,將碰到許許多多、形形色色的各種問題。這個時候就能夠和麪試官侃侃而談了。要作成這種程度,須要大把時間的沉澱,非一朝一夕可成,因此建議你們早作打算。
再好比我在簡歷中提到本身設計過一個性能監控系統,有次面試正好碰到一個作過多年監控系統的面試官。因爲我這系統還未正式上線,不少點還未考慮到,而且還僅僅是個雛形,很不完善,面試官問到的許多問題我也答不上來,即便回答了,也感受給出的解釋很是的蒼白無力。例如經過你這系統解決過哪些業務瓶頸?你的系統架構是怎麼樣的?一個月後你預估數據庫的存儲量將是多少?你在選擇的服務器配置是怎麼樣的?很是建議你們平時在公司推進一些本職工做之外的項目,固然這些項目對業務是有益的,其實就是爲本身增值,在上線後記錄遇到的問題以及帶來的貢獻。
1)企鵝杏仁
第一輪 電話面試
在開始的時候,問了點項目問題,讓我挑幾個有挑戰的說。剩下的就都是在問題基礎,下面只列出了想到的幾個問題。
(1)網絡:描述TCP三次握手,四次揮手,HTTP2.0的優點,HTTP協議的特色。
(2)數據結構:鏈表和數組的區別,棧和隊列的特色。
(3)簡單算法:在兩個數組中找到相同的元素,在數字數組中找出最大值。
第二輪 技術面試
下午三點的面試,提前到了,整層樓都是該公司的,不過工位有點小。
先作一份筆試試卷,四道題目,三十分鐘。其實四道題目能夠在一張紙裏打印,不過用了兩張紙,第一張紙翻過來還有一道題目,被我漏掉了。
題目作好後在一個會議室裏等了四十分鐘,纔等到一個前端小姐姐。主要問了些比較基礎的問題,集中在:
(1)白屏處理、懶加載的實現等性能問題。
(2)Hooks的使用等React語法問題。
(3)Webpack使用了哪些加載器等工程化問題。
(4)CDN的原理等網絡問題。
(5)KOA有哪些中間件等Node.js問題。
面好後等了十幾分鍾,技術leader來面我,他問:
(1)在實現一個微信聊天功能的時候會用到哪些技術。
(2)你對目前前端現狀的見解。
(3)你將來兩年的職業規劃是怎樣的。
(4)小程序在微信中是如何執行的。
(5)如何經過微信公衆號獲取用戶信息。
(6)JavaScript的緩存有哪些(cookie、LocalStorage等)。
(7)如何作到在兩個域名中保持登陸狀態,例如在淘寶登陸的賬號,當從淘寶頁面進入天貓時不須要從新登陸。
(8)你與其餘人相比,有哪些優點。
(9)對微前端的理解。
(10)兩個數字變量,不使用第三個臨時變量,交換二者的值。
(11)你最近在讀什麼書?
(12)Charles可以解讀HTTPS的原理是什麼?
再次面完後,HR與我交流,詢問了個人指望薪資、居住地、籍貫等問題,最後說若是該輪經過,會在3-5個工做日內安排CTO視頻面試。
2)京東
第一輪 電話面試
項目和基礎相輔相成,問的問題比較全面。
說說你最近的項目,深刻討論如何封裝的組件。在簡歷中提到了本身設計的一個UI庫和插件,就被問到如何使用,擴展,原理等。
基礎題包括JavaScript、網絡和CSS,下面只列出了想到的幾個問題。
(1)JavaScript:閉包,Event Loop。
(2)網絡:輸入URL發生的過程。
(3)CSS:兩欄佈局,上下居中。
3)華爲
週六下午四點鐘左右,華爲HR讓我投個簡歷,和我簡單介紹了一下華爲的4輪面試流程。
第一輪 在線作題
在牛客網上生成的一個考試地址,有三道題,兩道一星,一道兩星。他們給了一個練習地址,既能熟悉考試環境,也能練練感受。
在準備的這兩天,本身意識到平時得儘可能手寫方法名稱,不要過於依賴自動提示。而且有空的時候就去刷刷難度在中等偏下的編程題,保持手感。
第二輪 技術視頻面試
有兩個面試官,第一個是當前面試部門的面試官,以項目爲主,基礎概念問的很少。
(1)在內部作過哪些技術分享。
(2)你以爲組件封裝有哪些注意點。
(3)你遇到的比較困難的項目是什麼?
(4)你平時會作哪些性能優化?
(5)請敘述一下React的生命週期。
(6)雙向綁定的原理。
(7)diffing算法比對過程。
(8)有沒有搞過前端架構?初始化項目的那種。
(9)最後一道編程題
第二個是跨部門的面試官,一樣以項目爲主,基礎概念比較少,有幾個是給你一個場景,讓你來分析,還有一些是比較底層的計算機知識。
(1)介紹一下你的項目經歷
(2)Chrome瀏覽器打開了幾個進程。
(3)瀏覽器性能優化,若是瀏覽器佔了300M內存,該如何優化。
(4)package.json中有哪些經常使用字段?package.lock.json有什麼做用?
(5)你有了解過Nginx嗎?
(6)最後一道編程題。
4)喜馬拉雅
第一輪 視頻面試
使用了騰訊會議,下午兩點的面試,天氣很陰沉,隨時要下陣雨的節奏,可是直到面試結束都沒下大雨。視頻面試的範圍比較普遍,有基礎也有實際項目。
(1)用過哪些CSS動畫,CSS的定位有哪些?
(2)是否用過React Hooks?函數式編程的理解。
(3)在瀏覽器輸入URL後發生的過程。強緩存和協商緩存。前端狀態碼301和302。HTTPs爲什麼是安全的?
(4)設計模式實現發佈訂閱。
(5)你的職業規劃是怎麼樣的。
(6)用Node.js作過些什麼?
(7)什麼狀況下會驅使你去看書?
(8)你作過哪些比較有困難的項目?
(9)你的開發經歷跨度很大,爲何如今選擇前端?
(10)session和cookie的區別。
(11)談談你對XSS和CSRF的理解。
(12)事件委託的原理。
第二輪 現場面試
面試安排在下午,當天是雷暴預警,喜馬拉雅的總部仍是蠻大的,有兩棟樓,樓的外層裝修也很喜馬拉雅。面試官會從簡歷中挑出一個技術點,有深度有廣度的提問,很容易問到本身的技術盲點。
(1)JSBridge原理。iOS和安卓對JSbridge的處理有哪些不一樣,爲何使用iframe實現?
(2)CORS原理。跨域的時候帶cookie是怎麼配置的。有時候跨域請求會發送兩次,爲何?
(3)你對哪一個技術點比較擅長。
(4)同構的原理是怎麼樣的。爲何能夠作到服務端和客戶端只用一套代碼就能夠了。
(5)SSR有什麼特色?
(6)你最近在看什麼書?
(7)SVG有哪些特色?和Canvas比有什麼區別。
(8)webpack的加載器和插件有什麼本質區別?
(9)Promise的原理是怎麼樣的?
(10)請寫一個正則,讀取URL中的參數。
(11)你平時是怎麼作性能優化的?
(12)宏任務和微任務有哪些?瀏覽器對它們的處理有何不一樣?
(13)如何上傳大圖。
(14)如何在Canvas中畫一張第三方域名的圖片。
(15)服務端如何將分片的文件組合成一個完整的文件。
(16)React爲何要推廣Hooks?
(17)請用兩種方式實現前端的路由。
5)餓了麼
第一輪 技術基礎
當天面完喜馬拉雅,餓了麼的人找到了我。投過簡歷後,過了一個小時就打我電話安排面試,正好當天沒啥安排,就直接開面了。問的內容仍是比較偏基礎的,包括一些CSS的解決方案。
(1)rem是如何計算的。
(2)iframe之間是如何通訊的。
(3)有一個彈層,如何禁止下層頁面的滾動?
(4)如何實現雙向綁定。
(5)對ES6的代理有了解嗎?
(6)白屏的依據是什麼?如何優化?
(7)解釋一下Event Loop。宏任務和微任務。
(8)webpack的運行過程是怎麼樣的。
第二輪 技術項目
交談了30分鐘左右,主要圍繞着實際項目展開。
(1)說說你的工做經歷。
(2)你最近在瞭解什麼新技術?有沒有考慮應用到團隊中?
(3)你平時會不會關注本身的業務?有沒有想過拓展公司業務?
(4)大家跨域是怎麼作的?有沒有用網關實現?
(5)你最近有沒有遇到比較困難的事情?
(6)你作了這麼多年前端,有沒有對這個行業提供一些產出?
(7)在團隊中,你有沒有制訂過標準?或者有什麼貢獻?
(8)大家的代碼是如何發佈的?具體發佈原理有了解過嗎?
技術負責人
(1)你爲何選擇前端?
(2)你爲何作了5年後端後才選擇前端?
(3)大家團隊幾我的?你爲團隊作過哪些貢獻?
(4)你最拿的出手的項目是什麼?
(5)若是你還在這家公司呆着,你接下來會作什麼?
(6)你指望要加入的團隊是怎麼樣的?
(7)你作的性能監控系統與業界的相比,有什麼特色或優點?
(8)你有什麼優點?
(9)你簡歷中完成了100多個項目,這個數字很醒目,你想說明什麼?
第三輪 跨部門
跨部門遇到的面試官是專門搞監控系統的,他在看了個人簡歷後,着重對簡歷上的性能監控系統開展了提問,下面只列出了幾個。
(1)你作過的比較困難的項目有哪些?
(2)你的性能監控系統的架構是怎麼樣的?
(3)你目前負責哪些業務?
(4)你有沒有計算過一個月後,你的MongoDB的存儲量是多少?
(5)在重寫XMLHttpRequest後,若是遇到第三方庫也重寫了它,碰到問題該如何排查?
(6)如何經過你的性能系統,來找出業務瓶頸?
(7)是否考慮過監控多端,例如瀏覽器、小程序、客戶端等。