1、diff算法(列表渲染key)
2、原型和class
子類必須在constructor
方法中調用super
方法,否則新建實例時會報錯。這是因爲子類自己的this
對象,必須先通過父類的構造函數完成塑造,得到與父類同樣的實例屬性和方法,然後再對其進行加工,加上子類自己的實例屬性和方法。如果不調用super
方法,子類就得不到this
對象。
ES5 的繼承,實質是先創造子類的實例對象this
,然後再將父類的方法添加到this
上面(Parent.apply(this)
)。ES6 的繼承機制完全不同,實質是先將父類實例對象的屬性和方法,加到this
上面(所以必須先調用super
方法),然後再用子類的構造函數修改this
- promise和async的區別
promise鏈式調用
promise.all()
promise和async的錯誤處理機制
- 事件循環機制
setTimeout promise async執行順序 宏任務隊列 微任務隊列
- bind call apply
- instanceof typeof toString
- http2.0 多路複用
- 虛擬dom
Virtual DOM render + diff 顯然比渲染 html 字符串要慢,但是!它依然是純 js 層面的計算,比起後面的 DOM 操作來說,依然便宜了太多。可以看到,innerHTML 的總計算量不管是 js 計算還是 DOM 操作都是和整個界面的大小相關,但 Virtual DOM 的計算量裏面,只有 js 計算和界面大小相關,DOM 操作是和數據的變動量相關的。前面說了,和 DOM 操作比起來,js 計算是極其便宜的。這纔是爲什麼要有 Virtual DOM:它保證了 1)不管你的數據變化多少,每次重繪的性能都可以接受;2) 你依然可以用類似 innerHTML 的思路去寫你的應用。
- session,cookie,token
- 瀏覽器緩存機制(強制緩存cache-control,expires、協商緩存if-modified,if-modified-since,ETag)
10、服務端渲染
11、this的幾種綁定類型
12、數據類型(基本數據類型null,undefined,Number,Boolean,String,Symblo,引用數據類型:object)
(1)浮點數精度問題(EPSILON,0.1+0.2=?)
(2)數據類型強制轉換(if,for,==….)
13、https ssl加密+證書+完整性檢驗
14、輸入url之後的過程(TCP三次握手+瀏覽器渲染原理)
15、瀏覽器渲染原理(解析html生成dom樹->解析css 生成cssdom樹->計算盒子模型,生成渲染樹->繪製在頁面上)
1、javascript阻塞html下載解析,因此放在body後面,也可用defer和動態異步加載
2、動態加載
16、重排和重繪,重排一定會導致重繪,重排會重新計算盒子模型和位置,所以一定會導致重繪(見瀏覽器渲染如案例)
17、優化性能:
1、引用cdn
2、減少http請求數:例如合併js,雪碧圖等
3、緩存(強制緩存,協商緩存),webWorker
4、圖片懶加載
5、圖片優化
(1)合適格式的圖片,無需細節要求高的選jpeg,如果兼容性滿足的情況下使用webp,有損壓縮
(2)有細節要求選Png,png8,png32,png 24
(3)小圖標,使用矢量圖svg
(4) 使用CDN根據屏幕加載合適大小的圖片
6、文件壓縮
7、代碼上的:
(1)減少單個修改樣式,可用class,createDocumentFragment不會迴流
(2)無需嵌套多層css
3)算法緩存
4)能用動畫代替圖片則用動畫,動畫定位用absolute等
18、post,get,head,put,delete等方法
19、animation基本瞭解一下(轉圈圈,移動)
20、防抖和節流
21、let const var區別
暫時性死區、聲明提升、不允許重複聲明
對於引用類型,const只是不能修改引用地址
22、數組去重 set
23、原型,繼承,prototype和class繼承的區別
Prototype先定義自己的this,然後將自己父構造函數的this賦給它
Class,直接調用父類的this,生成自己的this
25、create() 複製原型
26、原型鏈繼承,組合繼承、寄生組合繼承
27、babel相關知識(babel-core,babel-preset,….)
28、cmd、amd(cmd就近加載,amd預先加載)
29、webpack工作原理
Enrty 入口
Modules 用相應loader解析文件
Css-loader,sass-loader,babel-loader,url-loader,vue-loader…
Plugin 輸出文本方式, html-webpack-plugin,commosChunkplugin,extractText….
Uglifyplugin….
Output輸出地址
30、xss和csrf
Xss攻擊:反射性,存儲型
31、跨域 jsop
CORS,通過設置Access-Control-Allow-Origin來進行的
32、移動端適配方案(rem,適口)
33、移動端1px問題
34、函數柯里化
35、BFC、彈性佈局
Vue:
- Vue雙向綁定原理(數據劫持defineProperty+發佈訂閱模式)
Data屬性get()添加watcher依賴 set通知相關訂閱者更新
2、nextTick:Vue是異步執行dom更新的,一旦觀察到數據變化,Vue就會開啓一個隊列,然後把在同一個事件循環 (event loop) 當中觀察到數據變化的 watcher 推送進這個隊列。如果這個watcher被觸發多次,只會被推送到隊列一次。這種緩衝行爲可以有效的去掉重複數據造成的不必要的計算和DOm操作。而在下一個事件循環時,Vue會清空隊列,並進行必要的DOM更新。
當你設置 vm.someData = 'new value',DOM 並不會馬上更新,而是在異步隊列被清除,也就是下一個事件循環開始時執行更新時纔會進行必要的DOM更新。如果此時你想要根據更新的 DOM 狀態去做某些事情,就會出現問題。。爲了在數據變化之後等待 Vue 完成更新 DOM ,可以在數據變化之後立即使用 Vue.nextTick(callback) 。這樣回調函數在 DOM 更新完成後就會調用。
- watch deep,immidiate屬性
- extend 和 component的對比和區別
- directive、filter
- 生命週期()
- Computer 裏面實際是get,還可以調用set方法
- Filter,directive
- vuex
- vue-router導航守衛 beforeEach
- computed(set,get),watch(deep,immeditate)
js、css編程題:
- 實現call,apply,bind
- 實現new
- 實現
前端基礎算法:
- 快速排序、冒泡排序
- 二分查找
- 深度遍歷、廣度遍歷
這是粗略的總結了前端大部分的基礎技術點,歡迎一起來完善。。。。