本教程的目的是教你如何經過(個人)前端面試css
本文涵蓋了本人平常面試中常常問到的知識點, 面試對象爲2~10年工做經驗的前端工程師, 我始終認爲: 一個合格的前端工程師, 首先應該是一個合格的工程師, 故涉及到的內容不止於前端範疇, 甚至能夠說是全棧範疇了, 但願能夠給想得到提升的前端工程師一些幫助前端
本文的重點是列出值得思考的點, 而不是單純的羅列面試題目, 題目不會直接給出明確的答案, 部分題目自己就是開放性問題, 沒有固定答案, 但願你們能夠帶着思辨性思惟去閱讀vue
從上到下是一個大概的優先級順序, 越靠前的知識點, 面試評價佔比越高node
js基礎問題通常是在整個面試過程當中穿插提問, 我我的並不會單獨集中提問這裏涉及到的問題, 一來這些問題能夠在面試溝通的字裏行間逐漸感覺到候選人的水平, 二來這些問題過於基礎, 默認來面試的人都應該已經會了, 重點提問會讓對方感受不被尊重(就像問一個數學系博士一元二次方程解法同樣滑稽), 但這並非說這些知識不那麼重要mysql
引用傳遞是js基礎中最重要的幾個問題之一(若是這種問題不瞭解那這場面試基本就聊不下去了), 不熟悉引用傳遞這一特性的開發者會在代碼中埋下天坑, 這類隱藏bug極可能在測試階段矇混過關, 最終在線上爆發react
常規問題是:webpack
事件循環不管在瀏覽器端仍是node場景, 都是最基礎的問題之一, 這一問題我會重點提問, 對事件循環不理解的開發者可能會寫出難以捉摸的bug, 或者濫用事件循環機制帶來性能損耗, 我遇到過一個候選人, 他遇到個棘手的問題最終包一層setTimeout 0 就解決了, 可是他本身也不明白爲何(這就很恐怖), 對於這一知識點, 合格的前端開發須要徹底明白事件循環的原理, 運做流程, 接觸過node開發的還應當知道node與瀏覽器中事件循環的差別, 對於高級一些的開發者, 則但願其對事件循環的設計作出一些評價, 例如: 爲何要區分microtask和macrotask, 這樣設計的目的是什麼?git
常規問題是:程序員
做用域是寫任何代碼都須要考慮清楚的問題, 對做用域不熟悉的人, 每每會使用錯誤的方式寫出運行結果看似正確的代碼, 實際上潛藏的很大的隱患, 可能本身寫的模塊沒問題, 但實際上由於做用域的關係影響到了其餘的模塊卻不自知, 做用域的考察不會專門出題(由於不必並且題目很差設計), 但會夾在其餘題目內順帶考察es6
常規問題是:
語法沒什麼可說的, 須要面試者熟練掌握es6+的新語法特性, 瞭解新的數據類型(Map, Set, Symbol, WeakMap, WeakSet 等). Promise, Async/Await, 解構賦值, 擴展運算符, 箭頭函數這些極其經常使用的語法須要特別熟練, Generator, Reflect, Proxy, Class, Decorator等語法也要求會用.
常規問題是:
開發者天天都在製造bug, 調試能力是影響開發者工做效率的重要因素, 我面試時會對調試能力有硬性要求, 不會使用調試工具的, 憑意念猜想碰運氣調試的選手必定會被掛掉, 正常開發者應當熟練使用chrome dev tool, 而且有嚴謹的邏輯思惟, 知道經過二分法, 控制變量法等方式快速定位問題
常規問題是:
當前時間點, 前端框架通常是指 vue/react/angular, 公司的技術棧總體偏向vue, 我面試的時候會稍微偏向提問vue的問題, 固然我本人是保持技術中立的, 面試者若是隻會react or angular, 也會對應換成react/angular的問題, 框架相關的面試問題傾向於底層原理, 框架實現的角度(畢竟用誰都會用)
這一部分的問題一般是針對經驗較少的面試者, 校招, 外包面試或較初級的崗位面試會常常提到, 正常狀況下只涉及到vue和react, 國內開發者使用angular的不多, 面試遇到的很少, 這部分問題主要是考察面試者是否可以熟練使用框架開發前端應用, 是否能避免一些顯而易見的坑
常規問題是:
正常的前端開發人員, 只會使用框架確定是不行的, 若是對框架的原理不瞭解, 會在不經意間踩到隱藏的坑, 熟悉框架原理也能幫助你更好的優化前端應用, 也能夠提高一我的的架構設計思惟能力, 前端面試中我會重點考察這一部分的能力, 這裏面也會涉及較多開放性問題, 與面試中探討交流之中我有時能夠學到知識, 也能夠很快判定一我的的綜合能力
常規問題是:
前端開發天天都會和網絡通訊技術打交道, 這部分知識點包括各類網絡協議, 瀏覽器中的一些特殊機制, 好比跨域等, 這些也是很基礎的知識點, 任何開發者都必須熟練掌握
關於網絡協議能夠考察的知識點很是多, 一般非計算機專業出身的前端對網絡協議這塊知識不瞭解, 推薦閱讀 Unix網絡編程 這本書來補充知識點. 主要考察內容是http/https, 也會考察一些tcp/udp的知識, 尤爲是面試者作過nodejs開發的時候
常規問題是:
跨域自己應當屬於網絡協議的內容, 但前端開發會很頻繁遇到這個問題, 因此單獨拉出一節來說, 這也是很重要的基礎知識之一, 任何開發者都必須熟悉跨域的出現場景, 如何解決跨域等
常規問題是:
dns問題在前端面試中不常見, 一般面試者作過服務端開發, 或是面試node職位會重點考察, 對於高級的前端開發人員, 也須要了解其中的一些原理, 來輔助排查或規避問題, 或是找到一些問題的解決方案或優化方案
常規問題是:
網絡安全是個大問題, 很容易產生嚴重的事故, 但大多數前端人員對此缺少了解, 一個合格的前端工程師, 應當瞭解常見的網絡安全漏洞, 瞭解常規攻擊手段和對應手段, 可以敏銳的察覺代碼中的安全問題
常規問題是:
工程化能力是現代前端開發很重要的能力之一, 高級前端開發須要有本身搭建前端工程腳手架的能力, 這其中包括了 webpack, babel, eslint, npm等不少相關工具, 這些工具要求熟練使用, 同時懂原理會有很大加分
webpack周邊生態很複雜, 插件繁多, webpack自己功能也多, 想了解原理並不容易, 通常只考察經常使用的功能的使用, 部分功能最好懂得原理
常規問題是:
babel一般搭配webpack使用, 通常做爲webpack loader爲前端項目服務, 一般考察常規用法與其中的工做原理
常規問題是:
eslint能夠考察的內容不多, 通常是搭建工程腳手架使用到, 考察方向偏應用, 不考察原理
常規問題是:
npm和前端工做息息相關, 通常是兩種用法, 一個是使用依賴包, 一個是開發依賴包, 對於高級的前端開發人員, 我但願他能夠理解npm工做原理, 可以本身搭建私有npm倉庫, 並基於此制定一系列包的使用規範, 瞭解npm常見問題, 對於依賴包的管理有必定看法
常規問題是:
docker是如今最流行的容器引擎, 不管是前端仍是後端開發, 都應該對此有必定了解和使用經驗, 一個積極主動的前端工程師應當主動探索這些流行的技術可以給前端開發帶來什麼幫助, 目前主要應用於node服務, 部署開源工具, 持續集成等方面
常規問題是:
開發工具時會常常與Linux打交道, 開發node服務也會每天登陸服務器處理問題, Linux基礎是前端工程師必備的能力, 面試中不會重點考察, 但會穿插在其餘問題中間接提問, 若是對Linux基本操做不熟悉, 可能會致使前端項目編譯時出現問題不知道如何解決, 甚至一些基本的軟件安裝, 環境配置都搞不定, 更差的狀況還會誤刪文件, 搞壞服務器等
常規問題是:
這裏主要考察自動化構建發佈相關知識, 指望開發者能夠了解自動化運維的工做流程, 或者能夠自行搭建總體的持續集成, 持續交付體系, 但並不要求全部人都會這些, 簡歷提到必問
常規問題是:
這部分主要是前端常規的一些預處理器(sass/less) 或者一些js擴展語言 (ts/cs),一般開發者都應該掌握其中幾種或所有, 來提高本身的開發效率, 同時也是考察面試者的技術廣度和主動學習能力
ts是當前時間點(2019年底), 全部前端程序員都須要會的技能, 若是你尚未開始學習ts, 那你已經落後於時代不少了, 一般我都會詢問面試者是否會用ts, 若是是熟悉ts的開發, 我會把ts的熟練程度當作一個重點的加分項
常規問題是:
css預處理方言不少, 這裏通常選最多見的兩種考察, 一般狀況下會應用便可, 瞭解底層原理也會有必定加分
常規問題是:
其實這部分重要性本應該很高的, 排到這裏主要是由於前端開發廣泛對這塊不重視, 不瞭解, 若是要求太高就會招不到人了, 很無奈只能將它的優先級定在這裏. 但對於想要得到自我提高, 有很高追求的前端工程師, 這些也是必須很是很是熟練掌握的技能
數據結構這個話題顯得有些學院派, 和前端重視應用的場景格格不入, 實際上若是能夠很是熟悉數據結構的知識, 能夠幫助你寫出性能更優的前端應用, 同時也是提高一我的編程思惟的重要途徑, 我面試中通常會考察這些知識, 並做爲很大的加分項
常規問題是:
算法也是很重要但不少人不會的技能, 目前前端面試考察算法的公司也愈來愈多了, 我面試時也會適當考察幾個簡單算法題目, 重點是看面試者的思惟能力, 分析和解決問題的能力
常規問題是:
面試問的很少, 通常是面試者提起或簡歷有提到纔會問, 掌握編譯原理的開發者能夠經過更多的視角去看待編程問題, 思惟也更加縝密理性, 這種面試者會大大加分
常規問題是:
任何一個合格的前端工程師, 他都不該當只是個前端, 掌握必定的服務端開發技能是一個工程師必須作到的, 常規狀況下你們學node比較多, 也有一部分前端工程師掌握至少一門服務端開發語言, 一般狀況下, 簡歷提到服務端相關的知識, 我都會詳細詢問, 這在必定程度上能夠體現一個前端面試者的技術廣度, 和學習的主動性, 同時瞭解服務端開發也能夠在工做中更順暢的與其餘服務端開發合做, 或者承擔一些前端組內工具服務的開發工做
任何前端工程師至少都應該掌握一些node技能, 不管是使用webpack dev server仍是本身開發我的網站, 開發工具, 都有很多的應用場景, 這裏有一個誤區須要說明, 會寫js跑在node上面, 不表明會node開發
常規問題是:
目前各大公司服務端都是微服務的架構, 對微服務有必定了解能夠更好的與他人合做, 知識面足夠的狀況下還可以幫助其餘服務端開發優化總體架構設計
常規問題是:
優秀的前端工程師應該對目前流行的pg mysql mongodb等數據庫有必定的瞭解和實踐, 一來能夠學習另一個角度的編程思想, 二來能夠理解服務端爲何會和你說"這樣格式的數據很差存/很差改", 從而你能夠站在更高的角度看待問題, 同時前端團隊內部工具的開發每每也會用到這些
常規問題是:
若是上述問題滿分算一百分,你以爲本身怎麼也有個七八十分,那哈囉出行-基礎架構部門-前端研發團隊歡迎你,base上海,咱們在招 資深前端工程師/前端技術專家,郵箱porcelainheart@qq.com投遞簡歷