大家好,我是 Nolan,前美團高級前端工程師,長期擔任面試官,曾主持過美團的多個重要產品的開發工作?,F在旅居澳大利亞,擔任一家支付公司的前端業務負責人。
多年的面試官經歷,使我得出一個結論:面試表現和工作能力,并沒有大多數人以為的那么相關。一個技術能力優秀的程序員,很可能因為忘記 Event Loop 的內容而被認為基礎知識不扎實;一個原來在團隊中沒有存在感每天劃水的人,卻有可能因為碰巧面試前一天晚上刷到了瀏覽器緩存機制的面試題,而被認為是基礎扎實的大牛。實際上,如果面試總是能準確地反映出一個人真正的技術能力,大公司里就不會有這么多劃水的人了。
工作能力強,并不代表面試表現就一定好;工作有工作的技巧,面試有面試的技巧,它們有一些聯系,但是它們是兩個不同的學科。如果你下個月要參加長跑比賽,從現在開始你會每周練習三次長跑;但是如果你下個月要參加面試,卻不從現在開始花一個月的時間刷一遍面試題,豈不是很奇怪嗎?
市面上有不少介紹前端面試的資料,但是都包含各式各樣的問題:有的年代久遠題目過時已久;有的主題不全,某些資料竟然以作者不熟悉 CSS 為由將 CSS 的題目一筆帶過,而關于 TypeScript,React Native,層疊上下文,移動端開發的題目更是少之又少;有的淺嘗輒止,只是提供一個答案不做深入研究,讓讀者一知半解;有的東拼西湊,完全形不成系統。
所以我決定自己來寫一個面試專欄,這個專欄花費了我很多精力,但是我相信是值得的。只要你從頭到尾練習一遍,一定可以解答你的很多疑惑,為你的面試助力。
我選擇題目的標準是:
- 實用性。 即,題目背后的知識點一定是面試中大概率會被問到的知識點
- 代表性。 即,每道題目可以都準確地代表一類知識點,這樣有利于讀者舉一反三,遇到這一類的題目都能有思路
- 全面性。 即,覆蓋到所有常見的前端面試知識點,這樣讀者只需要通讀本專欄,而不需要四處搜尋其他的材料作為補充
- 科學性。 即,越是常考的題目,越放在前面。這樣可以保證讀者熟知最常考到的題目。比如大多數面試書會遵循 JavaScript 技術書籍的編寫原則:把 JavaScript 的變量與變量類型 這個題目放在第一節。實際上這是不科學的,因為 JavaScript技術書籍要兼顧到 JavaScript 新手,所以第一節一定要講最基本的知識;而大部分面試書籍的讀者都有一定的前端知識,就不如把 函數調用、執行上下文、異步函數等知識放在第一章。
本專欄共分為 7 章,分別為:
- 開篇
本章介紹了整個專欄的基本內容以及設計原則 - JavaScript
本章包含了 JavaScript 相關知識的常見考點,包含 函數定義、調用、閉包、原型與繼承、異步函數等等內容,是整個專欄中的重中之重,同學們務必要掌握每一道題目。 - CSS
本章包含了 CSS 單位、布局、層疊上下文、自適應等內容,這一章的內容是很多面試書籍會忽略的內容,因為 CSS 是很多前端程序員的薄弱項,包括這些書籍的作者。這就造成了很多對 JavaScript 能侃侃而談卻被一道簡單的 CSS 題目難倒的尷尬場景。而本章致力于覆蓋 CSS 面試中常見的面試題目,希望能為 CSS 基礎薄弱的同學助力。 - 客戶端
本章的內容是瀏覽器相關,包括 HTML、瀏覽器、性能優化、HTTP 等知識點,這部分內容考察面試者在代碼能力之外的知識能力。 - 框架與庫
本章的內容包含了 React、Vue、TypeScript、React Native 等常考知識點。React 小節包含了 React Hook 的內容,而 Vue 則包含了 Vue3 的相關知識。網上關于 TypeScript 的面試題很少,React Native 的題目則更是難得,筆者總結了一些經典題目。 - 計算機基礎知識
很多公司喜歡考察一些前端以外的知識,以證明你有主動學習的熱情。本章總結了一些常見的計算機相關的面試知識。 - 簡歷與面試
本章筆者根據自己多年的擔當面試者與面試官的經驗,聊一聊關于簡歷和面試的心得。幫助讀者樹立對于面試的正確態度。
希望每位同學都能在這本書中有所收獲。