恭喜你,學完了本小冊。下面來總結下本小冊的內容,并補充一些遺漏的內容。
## 總結
本小冊主要帶領大家從準備簡歷開始,逐步梳理技術面試知識點和非技術面試常考問題,最后介紹了一些談 offer 之類的面試技巧。下面帶領大家根據準備、技術面試、非技術面試和 HR 面試四部分,回顧一下每部分的要點。
### 準備階段
簡歷準備:
1. 簡歷要求盡量平實,不要太花俏
2. 格式推薦 PDF
3. 內容包含:個人技能、項目經驗和實習經驗
4. 簡歷應該針對性來寫
5. 簡歷提到的項目、技能都要仔細回想細節,挖掘可能出現的面試題
拿到面邀之后準備:
1. 開場問題:自我介紹、離職原因等
2. 了解面試官、了解公司和部門做的事情
3. 知識梳理推薦使用思維導圖
### 技術面部分
集中梳理了 ECMAScript 基礎、JS-Web-API、CSS 和 HTML、算法、瀏覽器和開發環境六大部分內容,并且就一些高頻考題進行講解。
### 非技術面試部分
主要從軟技能和項目介紹兩個部分來梳理。在軟技能方面,介紹了工程師從業人員應該具有的軟技能,并且通過幾個面試真題介紹了怎么靈活應對面試官;在項目介紹小節,推薦按照項目背景、承擔角色、項目收益和項目總結反思四步來介紹,并且繼續推薦使用思維導圖方式來梳理項目的細節。
### HR 面
在小冊最后,介紹了 HR 面試應該注意的問題,重點分享了作為一個 Web 前端工程師怎么對自己進行估值,然后跟 HR 進行溝通,拿到自己可以接受的 offer。
最后還介紹了一些面試注意事項,在面試整個流程中,太多主觀因素,細節雖小也可能決定候選人面試的結果。
## 補充說明
本著通用性和面試門檻考慮的設計,本小冊對于一些前端進階和框架類的問題沒有進行梳理,沒有涉及的內容主要有:
1. Node.js部分
2. 類庫:Zepto、jQuery、React、Vue 和 Angular 等
3. 移動開發
下面簡單展開下上面的內容。
### Node.js部分
Node.js 涉及的知識點比較多,而且比較偏后端和工具性,如果用 Node.js 來做 Server 服務,需要補充大量的后端知識和運維知識,這里幫助梳理下知識點:
* Node 開發環境
* npm 操作
* package.json
* Node 基礎 API 考查
* file system
* Event
* 網絡
* child process
* Node 重點和難點
* 事件和異步理解
* Steam 相關概念
* Buffer 相關概念
* domain
* vm
* cluster
* 異常調優
* Server 相關
* 庫
* Koa
* Express
* 數據庫
* MongoDB
* MySQL
* Redis
* 運維部署
* Nginx
* 進程守候
* 日志
Node 的出現讓前端可以做的事情更多,除了做一些 Server 的工作以外,Node 在日常開發中可以做一些工具來提升效率,比如常見的前端構建工具目前都是 Node 來編寫的,而我們在研發中,一些類似 Mock、本地 server、代碼實時刷新之類的功能,都可以使用 Node 來自己實現。
### 前端框架(庫)
jQuery 和 Zepto 分別是應用在 PC 和移動上面的庫,大大降低了前端開發人員的門檻,很多前端工程師都是從寫 jQuery 代碼開始的。jQuery 和 Zepto 這兩個庫對外的 API 都是相同的。在面試的時候可能會問到一些具體代碼的實現,比如下面兩個問題:
> 題目:談談 jQuery 的 delegate 和 bind 有什么區別;`window.onload` 和`$().ready`有什么區別
這實際上都是 JS-Web-API 部分基礎知識的實際應用:
* delegate 是事件代理(委托),bind是直接綁定事件
* onload 是瀏覽器部分的全部加載完成,包括頁面的圖片之類資源;ready 則是`DOMContentLoaded`事件,比 onload 提前一些
下面再說下比較火的 Angular、React 和 Vue。
> 為什么會出現 Angular、React 和 Vue 這種庫?
理解為什么會出現一種新技術,以及新技術解決了什么問題,才能夠更好地選擇和運用新技術,不至于落入「喜新厭舊」的怪圈。
首先在互聯網用戶界面和交互越來越復雜的階段,這些 `MV*` 庫是極大提升了開發效率,比如在數據流為主的后臺系統,每天打交道最多的就是數據的增刪改查,這時候如果使用這些庫,可以將注意力轉移到數據本身來,而不再是頁面交互,從而極大地提升開發效率和溝通成本。
React 還有個很好的想法是 React Native,只需要寫一套代碼就可以實現 Web、安卓、iOS 三端相同的效果,但是在實際使用和開發中會有比較大的坑。而且就像 Node 一樣,前端用 Node 寫 Server 可能需要用到的后端知識要比前端知識多,想要寫好 React Native,客戶端的知識也是必不可少的。React Native 和Node 都是拓展了 Web 前端工程師可以走的路,既可以向后又可以向前,所謂「全棧」。
> Angular、React 和 Vue 各自的特點
* AngularJS有著諸多特性,最為核心的是 MVVM、模塊化、自動化雙向數據綁定、語義化標簽、依賴注入等
* React 是一個為數據提供渲染為 HTML 視圖的開源 JavaScript 庫,最大特點是引入 Virtual DOM,極大提升數據修改后 DOM 樹的更新速度,而且也有 React Native 來做客戶端開發
* Vue.js 作為后起前端框架,借鑒了 Angular 、React 等現代前端框架/庫的諸多特點,并取得了相當不錯的成績。
> 一定要用這些庫嗎?
目前這些庫的確解決了實際開發中很多問題,但是這種「三足鼎立」的狀況不是最終態,會是階段性產物。從長遠來說,好的想法和點子終究會體現在語言本身特性上來,即通過這些庫的想法來推動標準的改進,比如 jQuery 的很多選擇器 API,最終都被 CSS3 和 HTML5 接納和實現,也就就有了后來的 Zepto。
另外,以展現交互為主的項目**不太推薦**使用這類庫,本身庫的性能和體積就對頁面造成極大的負擔,比如筆者使用 Vue 做純展現為主的項目,性能要比頁面直出 HTML 慢。純展現頁面指的是那些以展現為主、用戶交互少的頁面,如文章列表頁、文章詳情頁等。
如果是數據交互較多的頁面,例如后臺系統這類對性能要求不多而數據交互較多的頁面,**推薦使用**。
另外,不管是什么庫和框架,我們最終應該學習的是編程思維,比如分層、性能優化等,考慮視圖層、組件化和工程效率問題。相信隨著 ES 標準發展、摩爾定律(硬件)和瀏覽器的演進,目前這些問題和狀況都會得到改善。
關于三者的學習資料就不補充了,因為實在是太火了,隨便搜索一下就會找到。
### 移動開發
這里說的移動開發指的是做的項目是面向移動端的,比如 HTML5 頁面、小程序等。做移動開發用的也是前面幾個小節梳理的基礎知識,唯一不同的是工程師面向的瀏覽器是移動端的瀏覽器或者固定的 Webview,所以會跟普通的 PC 開發有所不同。除了最基礎的 JSBridge 概念之外,這里筆者重點列出以下幾點:
1. 移動端更加注重性能和體驗,因為移動端設備和網絡都比 PC 的差一些
2. 交互跟 PC 不同,比如 touch 事件
3. 瀏覽器和固定的 Webview 帶來了更多兼容性的問題,如微信 webview、安卓瀏覽器和 iOS 瀏覽器
4. 調試技巧更多,在 Chrome 內開發完頁面,放到真機需要再調試一遍,或者需要真機配合才能實現頁面的完整功能
## 后記
小冊梳理了很多知識點,但是限于筆者精力、小冊篇幅和新知識的不斷涌現,難免會有考慮不到的地方,還請大家按照我在第一節提到的思維導圖的方式,自己列腦圖進行梳理。
最后,祝每個人都拿到滿意的 offer!