前端面試必須知道的技術點

1、diff算法(列表渲染key)

2、原型和class

子類必須在constructor方法中調用super方法,否則新建實例時會報錯。這是因爲子類自己的this對象,必須先通過父類的構造函數完成塑造,得到與父類同樣的實例屬性和方法,然後再對其進行加工,加上子類自己的實例屬性和方法。如果不調用super方法,子類就得不到this對象。

ES5 的繼承,實質是先創造子類的實例對象this,然後再將父類的方法添加到this上面(Parent.apply(this))。ES6 的繼承機制完全不同,實質是先將父類實例對象的屬性和方法,加到this上面(所以必須先調用super方法),然後再用子類的構造函數修改this

  1. promise和async的區別

promise鏈式調用

promise.all()

promise和async的錯誤處理機制

  1. 事件循環機制

setTimeout promise async執行順序 宏任務隊列 微任務隊列

  1. bind call apply
  2. instanceof  typeof  toString
  3. http2.0 多路複用
  4. 虛擬dom

Virtual DOM render + diff 顯然比渲染 html 字符串要慢,但是!它依然是純 js 層面的計算,比起後面的 DOM 操作來說,依然便宜了太多。可以看到,innerHTML 的總計算量不管是 js 計算還是 DOM 操作都是和整個界面的大小相關,但 Virtual DOM 的計算量裏面,只有 js 計算和界面大小相關,DOM 操作是和數據的變動量相關的。前面說了,和 DOM 操作比起來,js 計算是極其便宜的。這纔是爲什麼要有 Virtual DOM:它保證了 1)不管你的數據變化多少,每次重繪的性能都可以接受;2) 你依然可以用類似 innerHTML 的思路去寫你的應用。

  1. session,cookie,token
  2. 瀏覽器緩存機制(強制緩存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、函數柯里化

35BFC、彈性佈局

 

 

Vue:

  1. Vue雙向綁定原理(數據劫持defineProperty+發佈訂閱模式)

Data屬性get()添加watcher依賴  set通知相關訂閱者更新

2nextTickVue是異步執行dom更新的,一旦觀察到數據變化,Vue就會開啓一個隊列,然後把在同一個事件循環 (event loop) 當中觀察到數據變化的 watcher 推送進這個隊列。如果這個watcher被觸發多次,只會被推送到隊列一次。這種緩衝行爲可以有效的去掉重複數據造成的不必要的計算和DOm操作。而在下一個事件循環時,Vue會清空隊列,並進行必要的DOM更新。

當你設置 vm.someData = 'new value'DOM 並不會馬上更新,而是在異步隊列被清除,也就是下一個事件循環開始時執行更新時纔會進行必要的DOM更新。如果此時你想要根據更新的 DOM 狀態去做某些事情,就會出現問題。。爲了在數據變化之後等待 Vue 完成更新 DOM ,可以在數據變化之後立即使用 Vue.nextTick(callback) 。這樣回調函數在 DOM 更新完成後就會調用。

  1. watch  deepimmidiate屬性
  2. extend component的對比和區別
  3. directivefilter
  4. 生命週期()
  5. Computer 裏面實際是get,還可以調用set方法
  6. Filterdirective
  7. vuex
  8. vue-router導航守衛 beforeEach
  9. computed(set,get),watch(deep,immeditate)

 

js、css編程題:

  1. 實現call,apply,bind
  2. 實現new
  3. 實現

 

前端基礎算法:

  1. 快速排序、冒泡排序
  2. 二分查找
  3. 深度遍歷、廣度遍歷

這是粗略的總結了前端大部分的基礎技術點,歡迎一起來完善。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章