前言
2020年最后一個月了,熬夜多天整理出17張思維導圖,對前端面試復習知識點進行了最全的總結,分享給大家。每個知識點都盡量找到最好的文章來解釋,通過思維導圖的形式進行展示。
1-Javascript
內置類型
-
介紹一下JS內置類型有哪些
-
介紹一下typeof區分類型的原理
-
介紹一下類型轉換
作用域
-
說說你對javascript的作用域的理解
-
什么是作用域鏈
-
解釋下 let 和 const 的塊級作用域
執行上下文
-
說說你對執行上下文的理解
閉包
-
對閉包的看法,為什么要用閉包?說一下閉包原理以及應用場景
-
閉包問題及優化
this指向
-
如何確定this指向
-
改變 this 指向的方式都有哪些
-
介紹箭頭函數的 this
原型/繼承
-
說一下對原型鏈的理解,畫一個經典的原型鏈圖示
-
舉例說明js如何實現繼承
-
ES5/ES6 的繼承除了寫法以外還有什么區別
事件循環
-
你對事件循環有了解嗎?說說看!
-
微任務和宏任務有什么區別
-
瀏覽器和Node 事件循環的區別
異步編程
-
異步解決方案有哪些
-
Promise
- 實現一個Promise
- 實現Promise.all,race,allSeleted等
- async/await
2-DOM
事件
-
事件冒泡、捕獲等理解
-
介紹下瀏覽器事件委托
-
實現一個自定義事件
dom操作
位置與大小
-
JavaScript獲取DOM元素位置和尺寸大小
3-CSS
BFC
-
BFC 是什么?觸發 BFC 的條件是什么?有哪些應用場景?
1px
-
如何解決移動端 Retina 屏 1px 像素問題
position
-
position 有哪些屬性
-
position: sticky 用過沒,有啥效果
flex
-
flex:1 的完整寫法是?分別是什么意思?
重繪回流
-
介紹下重繪和回流(Repaint & Reflow),以及如何進行優化
-
說說你對GPU的理解,舉例說明哪些元素能觸發GPU硬件加速?
常見布局
-
居中
-
單列布局
-
兩列自適應布局
-
三欄布局
-
粘連布局
動畫實現
-
css 如何實現動畫
-
使用純CSS代碼實現動畫的暫停與播放
-
使用css3動畫代替js的動畫有什么好處?
盒模型
4-瀏覽器
跨域
-
跨域通信有哪些方式
-
表單可以跨域嗎
從輸入URL到頁面展示,這中間發生了什么?
- 一文摸透從輸入URL到頁面渲染的過程
- 從輸入 URL 到頁面展示到底發生了什么?看完吊打面試官!
- 從輸入 URL 到頁面展示,這中間發生了什么?
- 從輸入URL到頁面展示,這中間發生了什么?
- 前端經典面試題: 從輸入URL到頁面加載發生了什么?
HTML、CSS和JavaScript,是如何變成頁面的?
chrome僅僅打開了1個頁面,為什么有4個進程?
localstorage
cookie
5-網絡
HTTP
-
你知道哪些http頭部
-
說一下 Http 緩存策略,有什么區別,分別解決了什么問題
TCP
-
請描述處TCP的三次握手和四次揮手
-
為什么瀏覽器要限制tcp的連接最大個數?
HTTP2
-
HTTP2.0 特點
-
說一下 HTTP2.0 多路復用原理,多路復⽤有哪些優勢?
HTTPS
-
簡述https原理,以及與http的區別
CDN
-
CDN 是什么?描述下 CDN 原理?為什么要用 CDN?
DNS
-
DNS 查詢的過程,分為哪兩種,是怎么一個過程
6-框架
vue
-
你知道Vue響應式數據原理嗎?Proxy 與 Object.defineProperty 優劣對比
-
Vue2.x組件通信有哪些方式
-
Vue 中的 computed 和 watch 的區別在哪里
-
組件中的data為什么是一個函數
-
nextTick的實現原理是什么
-
說說你對keep-alive組件的了解
-
你都做過哪些Vue的性能優化
-
vue3.0介紹
-
Composition API 的出現帶來哪些新的開發體驗,為啥需要這個
-
vuex
-
什么情況下使用 Vuex
-
可以直接修改state的值么
-
為什么 Vuex 的 mutation 中不能做異步操作
-
v-model和vuex有沖突么
-
-
router
-
路由懶加載是什么意思?如何實現路由懶加載
-
Vue-router 導航守衛有哪些
-
vue路由hash模式和history模式實現原理分別是什么,他們的區別是什么
-
react
-
React 事件綁定原理
-
React中的setState缺點是什么呢
-
React組件通信如何實現
-
類組件和函數組件的區別
-
請你說說React的路由是什么
-
React有哪些性能優化的手段
-
React hooks用過嗎,為什么要用
vue/react
-
虛擬DOM的優劣如何
-
v-for循環中key有什么作用?
-
React 和 Vue 的 diff 時間復雜度從 O(n^3) 優化到 O(n) ,那么 O(n^3) 和 O(n) 是如何計算出來的
-
聊聊 Redux 和 Vuex 的設計思想
7-工程化
腳手架
-
你知道什么是腳手架嗎?
-
你們公司有自己的腳手架工具么,他是怎么工作的
構建工具
-
webpack
-
webpack的核心思想是什么
-
Loader和Plugin的區別
-
有哪些常見的Loader和Plugin,簡單聊一聊各自的作用
-
說一下 Webpack 的熱更新原理吧
-
如何優化 Webpack 的構建速度
-
自己寫過Loader和Plugin么
-
代碼分割的本質是什么?有什么意義呢
-
說下 tree-shaking 的原理
-
babel原理
-
項目部署
-
你們公司項目發布流程是什么樣的
-
前端資源發布路徑怎么實現非覆蓋式發布(平滑升級)?
-
SSR項目是如何發布的
內部包
-
你有發布過自己的npm包嗎?流程是怎樣的?
-
介紹下 npm 模塊安裝機制,為什么輸入 npm install 就可以自動安裝對應的模塊?
-
你會搭建私有的npm倉庫嗎?怎么搭建?
開發規范
- eslint
運維
- nginx
- cdn
git
構建優化
-
Webpack 為什么慢,如何進行優化
8-性能
頁面是否可以快速加載
-
網絡優化
- http2
- CDN
-
代碼大小
- 代碼分割
- 代碼壓縮
- tree-shaking
-
SSR
-
離線
-
緩存
是否允許用戶快速開始與之交互
-
渲染優化
-
web worker
滾動和動畫是否流暢
-
如何優化大數據列表(10萬+)的性能?說說你的方案
-
requestAnimationFrame
-
動畫性能如何檢測
-
js動畫和css動畫有什么區別
-
分離圖層做動畫有什么好處呢
-
重繪重排
圖片優化
-
圖片壓縮
-
圖片懶加載
骨架屏+合理的loading
9-監控
異常
-
項目中如何進行異常捕獲
-
為什么會有那么多Script Error錯誤
性能
-
前端是如何監控性能的
埋點
-
頁面埋點怎么實現
為什么通常在發送數據埋點請求的時候使用的是 1x1 像素的透明 gif 圖片
sendbeacon
10-安全
- [2020全網最全前端安全綜述](https://mp.weixin.qq.com/s/Qm_YI9pxfWQJpSLwbSFKbw)
xss
csrf
網絡傳輸安全
- 一次安全可靠的通信——HTTPS原理000046a5fdc7802a15f7508b556413
- HTTPS中間人攻擊實踐(原理·實踐)
接口加簽
接口加密
接口防重放
環境檢測
代碼加密混淆
無處不在的驗證碼s
瀏覽器為什么要阻止跨域請求?如何解決跨域?每次跨域請求都需要到達服務端嗎?
11-Node
node 事件循環
談談 node 的內存泄漏
node 中間層怎樣做的請求合並轉發
pm2 怎么做進程管理,進程掛掉怎么處理
SSR
-
SSR解決了什么問題?有做過SSR嗎?你是怎么做的?
-
SSR這么好為啥不大規模使用了,基本公司項目還走的是前端渲染
GraphQL
-
使用過GraphQL么,解決了什么問題
-
和普通接口相比GraphQL有什么優勢呢
12-跨端
Hybrid App
-
說一下H5和native之間是如何進行交互的,知道jsbridge么
Weex
-
weex實現大致原理
RN
Flutter
13-微信開發
公眾號
-
微信授權流程
小程序
-
了解微信小程序的底層實現嗎
-
h5跟小程序有什么區別
-
五花八門的小程序框架實現原理知道么
14-新主題
微前端
-
你了解什么是微前端嗎?說說你對它的理解?
serverless
-
說說你對serverless的理解,它對前端有什么影響?
邊緣計算
-
你聽過邊緣計算嗎?說說你對它的理解?
WebAssembly
15-手寫
Promise
-
手寫一個Promise
-
使用Promise實現紅綠燈交替重復亮
-
Promise.all,race,allSeleted
-
sendRequests(urls, max, callback),同一時間最多發起max個請求,請求全部完成后執行callback
-
maxRequest(fn, maxNum),實現maxRequest,成功后resolve結果,失敗后重試,嘗試超過一定次數才真正的reject
-
頁面上有一個輸入框,兩個按鈕,A按鈕和B按鈕,點擊A或者B分別會發送一個異步請求,請求完成后,結果會顯示在輸入框中。用戶隨機點擊A和B多次,要求輸出顯示結果時,按照用戶點擊的順序顯示
this
-
call/apply
-
bind
-
new
-
鏈式調用4.add(1).add(2).add(3)
原型鏈
-
instanceof
-
各種繼承
閉包
-
修改函數正確執行
-
柯里化
防抖節流
-
debounce
-
throttle
網絡請求
-
手寫AJAX
-
手寫JSONP
設計模式
-
eventEmiter
-
singleton
深拷貝
16-高頻算法
字符串
數組
鏈表
二叉樹
棧/隊列
排序
- 冒泡排序
- 選擇排序
- 插入排序
- 希爾排序
- 歸並排序
- 快速排序
- 堆排序
遞歸
二分法
動態規划
貪心與分治
滑動窗口
位運算
17-項目/技術之外
項目開發中有遇到什么挑戰沒?
對哪個項目印象比較深刻深刻,遇到最難的項目是啥?
項目研發流程中作為前端開發一般扮演的啥角色?
現在有的項目中覺得哪些項目可以繼續優化,為啥沒有優化?
平時寫項目總結么,一般總結哪些東西?
工作中能夠持續學習么?
學習的動力怎么來的,如何維持?
未來會有什么樣的規划?
對於加班你是怎么看的?
說下你學習前端的歷程吧?
前端未來展望?
給大家准備了高清的思維導圖和食用更加方便的PDF文檔,全部聚合思維導圖一張,分類思維導圖17張,涉及前端開發的方方面面面,JS基礎,工程化,性能優化,安全,框架等。如果您是准備面試,或者享擴展前端知識,都可以通過這個目錄進行學習。
完整思維導圖實在太大,可關注公眾號「前端復習課」回復“思維導圖”獲取高清大圖,總共18張,還有整理好的PDF哦。
本文首發於17張思維導圖,2021年作為一名前端開發者需要掌握這些,前端面試復習資料參考大綱,轉載請聯系作者