前端開發是一個很是特殊的行業,它的歷史實際上不是很長,可是知識之繁雜,技術迭代速度之快是其餘技術所不能比擬的。javascript
winter
在他的《重學前端》課程中提到:html
到如今爲止,前端工程師已經成爲研發體系中的重要崗位之一。但是,與此相對的是,我發現極少或者幾乎沒有大學的計算機專業願意開設前端課程,更沒有系統性的教學方案出現。大部分前端工程師的知識,其實都是來自於實踐和工做中零散的學習。
這樣是一個很是真實的現狀,實際上不少前端開發者都是自學甚至轉行過來的,前端入門簡單,學習了幾個API
之後上手作項目也很簡單,可是這每每成爲了限制自身發展的瓶頸。前端
只是停留在會用階段是遠遠不夠的,咱們還須要不斷探索和深刻。如今市面上並不缺乏學習教程,技術文章,若是盲目的學習你會發現看過之後的知識留存率會很低,並且發現沒有了解到的知識愈來愈多,這會讓人產生焦慮。vue
實際上,除了堅持學習的強大的自驅力,你還須要一個很簡單的學習方法。那就是:創建本身的知識體系。它能幫助你更系統性的學習,同時你也時刻能知道本身哪些地方是不足的。java
我會把我工做和學習中接觸到的知識所有概括到個人知識體系中,其中不只僅包括我已經學過的,還有不少我沒有來得及學習的。node
這不只僅是個人知識體系,更是我時刻提醒本身的自檢清單。react
下面我會把個人自檢清單分享給你們,你能夠按照清單上的知識檢測本身還有哪些不足和提高,我也建議你們建本身的知識體系,這樣工做或者學習甚至面試時,你能快速定位到知識清單中的點,若是你有哪些我沒概括到的點,歡迎在評論區告訴我。webpack
前端工程師吃飯的傢伙,深度、廣度同樣都不能差。
JavaScript
規定了幾種語言類型JavaScript
對象的底層數據結構是什麼Symbol
類型在實際開發中的應用、可手動實現一個簡單的Symbol
JavaScript
中的變量在內存中的具體存儲形式null
和undefined
的區別JavaScript
數據類型的方式,以及他們的優缺點,如何準確的判斷數組類型JavaScript
能夠存儲的最大數字、最大安全數字,JavaScript
處理大數字的方法、避免精度丟失的方法JavaScript
中的原型規則instanceof
的底層實現原理,手動實現一個instanceof
Node
)中應用原型繼承的案例new
一個對象的詳細過程,手動實現一個new
操做符es6 class
構造以及繼承的底層實現原理JavaScript
的做用域和做用域鏈JavaScript
的執行上下文棧,能夠應用堆棧信息快速定位問題this
的原理以及幾種不一樣使用場景的取值try
裏面放return
,finally
還會執行,理解其內部機制JavaScript
如何實現異步編程,能夠詳細描述EventLoop
機制Promise
實現串行Node
與瀏覽器EventLoop
的差別ECMAScript
和JavaScript
的關係es5
、es6
提供的語法規範,JavaScript
提供的全局對象(例如Date
、Math
)、全局函數(例如decodeURI
、isNaN
)、全局屬性(例如Infinity
、undefined
)map
、reduce
、filter
等高階函數解決問題setInterval
須要注意的點,使用settimeout
實現setInterval
JavaScript
提供的正則表達式API
、可使用正則表達式(郵箱校驗、URL
解析、去重等)解決常見問題JavaScript
異常處理的方式,統一的異常處理方案HTML
,從分類和語義的角度使用標籤head
、title
、meta
)的使用目的和配置方法HTML5
離線緩存原理Canvas API
、SVG
等繪製高性能的動畫CSS
盒模型,在不一樣瀏覽器的差別CSS
全部選擇器及其優先級、使用場景,哪些能夠繼承,如何運用at
規則CSS
僞類和僞元素有哪些,它們的區別和實際應用HTML
文檔流的排版規則,CSS
幾種定位的規則、定位參照物、對文檔流的影響,如何選擇最好的定位方式,雪碧圖實現原理6
種以上並對比它們的優缺點BFC
實現原理,能夠解決的問題,如何建立BFC
CSS
函數複用代碼,實現特殊效果PostCSS
、Sass
、Less
的異同,以及使用配置,至少掌握一種CSS
模塊化方案、如何配置按需加載、如何防止CSS
阻塞渲染CSS
實現常見動畫,如漸變、移動、旋轉、縮放等等CSS
瀏覽器兼容性寫法,瞭解不一樣API
在不一樣瀏覽器下的兼容性狀況CSS
繪製幾何圖形(圓形、三角形、扇形、菱形等)CSS
實現曲線運動(貝塞爾曲線)關於編譯原理,不須要理解很是深刻,可是最基本的原理和概念必定要懂,這對於學習一門編程語言很是重要
JavaScript
代碼解析成抽象語法樹(AST
)base64
的編碼原理JavaScript
中如何表示和轉換TCP/IP
網絡協議族的構成,每層協議在應用程序中發揮的做用TCP
有哪些手段保證可靠交付DNS
的做用、DNS
解析的詳細過程,DNS
優化原理CDN
的做用和原理HTTP
請求報文和響應報文的具體組成,能理解常見請求頭的含義,有幾種請求方式,區別是什麼HTTP
全部狀態碼的具體含義,看到異常狀態碼能快速定位問題HTTP1.1
、HTTP2.0
帶來的改變HTTPS
的加密原理,如何開啓HTTPS
,如何劫持HTTPS
請求WebSocket
協議的底層原理、與HTTP
的區別據我瞭解的大部分前端對這部分知識有些欠缺,甚至抵觸,可是,若是突破更高的天花板,這部分知識是必不可少的,並且我親身經歷——很是有用!
sleep
函數call、apply、bind
Promise/A+
規範的Promise
、手動實現async await
EventEmitter
實現事件發佈、訂閱JSON.stringify
、JSON.parse
懶加載
、下拉刷新
、上拉加載
、預加載
等效果數組
、字符串
的存儲原理,並熟練應用他們解決問題二叉樹
、棧
、隊列
、哈希表
的基本結構和特色,並能夠應用它解決問題圖
、堆
的基本結構和使用場景回溯算法
、貪心算法
、分治算法
、動態規劃
等解決複雜問題咱們須要理清語言和環境的關係:nginx
ECMAScript
描述了JavaScript
語言的語法和基本對象規範瀏覽器做爲
JavaScript
的一種運行環境,爲它提供了:文檔對象模型(DOM
),描述處理網頁內容的方法和接口、瀏覽器對象模型(BOM
),描述與瀏覽器進行交互的方法和接口gitNode也是
JavaScript
的一種運行環境,爲它提供了操做I/O
、網絡等API
W3C
標準的DOM
操做API
、瀏覽器差別、兼容性BOM
)提供的全部全局API
、瀏覽器差別、兼容性DOM
操做、海量數據的性能優化(合併操做、Diff
、requestAnimationFrame
等)DOM
事件流的具體實現機制、不一樣瀏覽器的差別、事件代理ajax
、fetch
、能夠熟練使用第三方庫JavaScript
引擎以及它們的異同點、如何在代碼中進行區分URL
到頁面展示的詳細過程HTML
代碼的原理,以及構建DOM
樹的流程CSS
規則,並將其應用到DOM
樹上DOM
樹進行繪製Node
在應用程序中的做用,可使用Node
搭建前端運行環境、使用Node
操做文件、操做數據庫等等Node
開發框架,如Express
,Express
和Koa
的區別Node
提供的API
如Path
、Http
、Child Process
等並理解其實現原理Node
的底層運行原理、和瀏覽器的異同Node
事件驅動、非阻塞機制的實現原理輪子層出不窮,從原理上理解纔是正道
泛型
、接口
等面向對象的相關概念,TypeScript
對面向對象理念的實現TypeScript
的好處,掌握TypeScript
基礎語法TypeScript
的規則檢測原理React
、Vue
等框架中使用TypeScript
進行開發React
和vue
選型和優缺點、核心架構的區別React
中setState
的執行機制,如何有效的管理狀態React
的事件底層實現機制React
的虛擬DOM
和Diff
算法的內部實現React
的Fiber
工做原理,解決了什麼問題React Router
和Vue Router
的底層實現原理、動態加載實現原理React API
、生命週期等,可應用HOC
、render props
、Hooks
等高階用法解決問題React
的特性和原理,能夠手動實現一個簡單的React
Vue
的API
、生命週期、鉤子函數MVVM
框架設計理念Vue
雙向綁定實現原理、Diff
算法的內部實現Vue
的事件機制template
轉換成真實DOM
的實現機制SPA
)的原理和優缺點,掌握一種快速開發SPA
的方案Viewport
、em
、rem
的原理和用法,分辨率、px
、ppi
、dpi
、dp
的區別和實際應用JavaScript
移動客戶端開發技術,如React Native
:能夠搭建React Native
開發環境,熟練進行開發,可理解React Native
的運做原理,不一樣端適配JavaScript
PC
客戶端開發技術,如Electron
:可搭建Electron
開發環境,熟練進行開發,可理解Electron
的運做原理React
和Vue
傳統的跨組件通訊方案,對比採用數據流管理框架的異同Redux
管理數據流,並理解其實現原理,中間件實現原理Mobx
管理數據流,並理解其實現原理,相比Redux
有什麼優點Vuex
管理數據流,並理解其實現原理UI
組件框架,如antd design
,理解其設計理念、底層實現Echart
,理解其設計理念、底層實現,能夠本身實現圖表GIS
開發框架,如百度地圖API
Three.js
、D3
lodash
、underscore
、moment
等,理解使用的工具類或工具函數的具體實現原理charls
Android
、IOS
模擬器進行調試,並掌握一種真機調試方案Vue
、React
等框架調試工具的使用前端工程化:以工程化方法和工具提升開發生產效率、下降維護難度
npm
、yarn
依賴包管理的原理,二者的區別npm
運行自定義腳本Babel
、ESLint
、webpack
等工具在項目中承擔的做用ESLint
規則檢測原理,經常使用的ESLint
配置Babel
的核心原理,能夠本身編寫一個Babel
插件Polyfill
Webpack
的編譯原理、構建流程、熱更新原理,chunk
、bundle
和module
的區別和應用loaders
和plugins
解決問題,能夠本身編寫loaders
和plugins
nginx
服務器、nginx
內置變量,掌握經常使用的匹配規則寫法nginx
實現請求過濾、配置gzip
、負載均衡等,並能解釋其內部原理mock
工具的使用,如yapi
TDD
與BDD
模式,至少會使用一種前端單元測試框架Git
的核心原理、工做流程、和SVN
的區別Git
命令、git rebase
、git stash
等進階命令線上分支回滾
、線上分支錯誤合併
等複雜問題CI/CD
技術的意義,至少熟練掌握一種CI/CD
工具的使用,如Jenkins
Web
應用、移動客戶端應用、PC
客戶端應用、小程序、H5
等等)Web
、App
性能優化方案SEO
排名規則、SEO
優化方案、先後端分離的SEO
SSR
實現方案、優缺點、及其性能優化Webpack
的性能優化方案Canvas
性能優化方案React
、Vue
等框架使用性能優化方案XSS
攻擊的原理、分類、具體案例,前端如何防護CSRF
攻擊的原理、具體案例,前端如何防護HTTP
劫持、頁面劫持的原理、防護措施vczh
大神在知乎問題【如何能之後達到溫趙輪三位大神的水平?】下的回答:
這十幾年我一共作了三件事:
上面幾點可能有點難,第一點我就作不到,可是作到下面績點仍是比較容易的。關於寫博客說明下,能給別人講明白的知識會比本身學習掌握的要深入許多
本身
的代碼,不要盲目的扎進公司業這部分可能比上面九條加起來重要!
CEO
、CTO
、COO
、CFO
、PM
、QA
、UI
、FE
、DEV
、DBA
、OPS
等B2B
、B2C
、C2C
、O2O
等"PPT"
能力有了知識體系,在閱讀一篇技術文章的時候就很容易把它歸類,我一直以來就是這樣作的。
事實證實,在閱讀文章或書籍時,有目的和歸類的閱讀比"隨便看看"後的只是留存率要高不少。
每閱讀到一篇好的文章或者書籍,我都會收藏並歸類到個人知識體系中。
下面是一些我以爲還不錯的文章、博客或者書籍教程等等,分享給你們,資源很少,但都是精品。
學習一門知識,最好先閱讀官方文檔,把全部的API
大概瀏覽一遍,再繼續看大佬們總結的進階知識,什麼東西是搬運過來的,什麼是乾貨,一目瞭然。
JavaScript
高級程序設計(必看):https://book.douban.com/subje... JavaScript
:https://book.douban.com/subje... JavaScript
教程:https://zh.javascript.info/ ECMAScript 6
教程:http://es6.ruanyifeng.com/ ECMAScript 6
標準:https://www.ecma-internationa... HTML meta
標籤總結與屬性使用介紹:https://segmentfault.com/a/11... CSS
編碼指導:https://github.com/chadluo/CS... HTTP
:https://book.douban.com/subje... JavaScript
設計模式與開發實踐:https://book.douban.com/subje... LeetCode
題目的思路:https://github.com/MisterBooo... JavaScript
數據結構和算法:https://github.com/ConardLi/a... 30-seconds-of-code
(裏面有不少js
代碼很是巧妙,我正在將它翻譯成中文):https://github.com/ConardLi/3... NodeJS
:https://github.com/nqdeng/7-d... Node.js
模塊加載與運行原理:https://efe.baidu.com/blog/no... TypeScript Handbook
:https://zhongsp.gitbooks.io/t... React.js
小書:http://huziketang.mangojuice.... React
深刻系列:https://juejin.im/post/5cad39... Webpack React
小書:https://fakefish.github.io/re... Vue.js
技術揭祕:https://github.com/ustbhuangy... Vuex
-在Vue
中管理狀態:https://sabe.io/tutorials/get... Mobx
仍是Redux
?:https://juejin.im/post/5a7fd7... Underscore
源碼分析:https://yoyoyohamapi.gitbooks... Web
前端知識庫:https://github.com/AlloyTeam/... babel
:https://zhuanlan.zhihu.com/p/... Webpack
傻瓜式指南:https://zhuanlan.zhihu.com/p/... Webpack
原理:https://segmentfault.com/a/11... git
教程:https://www.liaoxuefeng.com/w... Git
:https://marklodato.github.io/... Nginx
知識:https://juejin.im/post/5c85a6... Web
安全攻防解析:https://github.com/ljianshu/B... 另外推薦我一直在關注的幾位大佬的我的博客:
其實在這個信息發達的時代最不缺的就是資源,如何從衆多的資源中獲取到真正精華的部分,是很是重要的,資源在於精不在於多,強烈建議在保證深度的狀況下再保證廣度。
但願你閱讀本篇文章後能夠達到如下幾點:
特別聲明 該文章轉載於 conardli,你們能夠關注一下她,有不少能夠幫助到咱們得文章