前端框架及項目面試 聚焦VUE,React和webpack(三)

Vue面試題真題演練

v-show和v-if的區別

  • v-show通過CSS display控制顯示和隱藏
  • v-if組件真正的渲染和銷燬,而不是顯示和隱藏
  • 頻繁切換顯示狀態用v-show,否則用v-if

爲何在v-for中用key

  • 必須用key,且不能是index和random
  • diff算法中通過tag和key來判斷,是否是sameNode
  • 減少渲染次數,提升渲染性能

描述Vue組件生命週期(父子組件)

  • 單組件生命週期圖
  • 父子組件生命週期關係

Vue組件如何通訊(常見)

  • 父子組件props和this.$emit
  • 自定義事件event.$on , event.$off, event.$emit
  • vuex

描述組件渲染和更新的過程

在這裏插入圖片描述
雙向數據綁定v-model的實現原理

  • input元素的value=this.name
  • 綁定input事件this.name=$event.target.value
  • data更新觸發re-render

對MVVM的理解
在這裏插入圖片描述
computed有何特點

  • 緩存,data不變不會重新計算
  • 提高性能

爲何組件data必須是一個函數?
在這裏插入圖片描述
ajax請求應該放在哪個生命週期

  • mounted
  • JS是單線程的,ajax異步獲取數據
  • 放在mounted之前沒有用,只會讓邏輯更加混亂

如何將組件所有props傳遞給子組件?

  • $props
  • <User v-bind="$props"/>
  • 細節知識點,優先級不高

如何自己實現v-model

在這裏插入圖片描述
多個組件有相同的邏輯,如何抽離?

  • mixin
  • 以及mixin的一些缺點

何時要使用異步組件?

  • 加載大組件
  • 路由異步加載

何時需要使用keep-alive?

  • 緩存組件,不需要重複渲染
  • 如多個靜態tab頁的切換
  • 優化性能

何時需要使用beforeDestory

  • 解綁自定義事件event.$off
  • 清除定時器
  • 解綁自定義的DOM事件,如window scroll等

什麼是作用域插槽

在這裏插入圖片描述
Vuex中action和mutation有何區別

  • action中處理異步,mutation不可以
  • mutation做原子操作
  • action可以整合多個mutation

Vue-router常用的路由模式

  • hash默認
  • H5 history(需要服務器端支持)
  • 兩者比較

如何配置Vue-router異步加載

在這裏插入圖片描述
請用vnode描述一個DOM結構

在這裏插入圖片描述
監聽data變化的核心API是什麼?

  • Object.defineProperty
  • 以及深度監聽,監聽數組
  • 有何缺點

Vue如何監聽數組變化

  • Object.defineProperty不能監聽數組變化
  • 重新定義原型,重寫push pop等方法,實現監聽
  • Proxy可以原生支持監聽數組變化

請描述響應式原理

  • 監聽data變化
  • 組件渲染和更新的流程

diff算法的時間複雜度

  • O(n)
  • 在O(n^3)基礎上做了一些調整

簡述diff算法過程

  • patch(elem,vnode) 和 patch(vnode,newVnode)
  • patchVnode和addVnodes和removeVnodes
  • updateChildren(key的重要性)

Vue爲何是異步渲染,$nextTick何用?

  • 異步渲染(以及合併data修改),以及提高渲染性能
  • $nextTick在DOM更新完之後,觸發回調

Vue常見性能優化方式

  • 合理使用v-show和v-if

  • 合理使用computed

  • v-for中加key,以及避免和v-if同時使用

  • 自定義事件,DOM事件及時銷燬

  • 合理使用異步組件

  • 合理使用keep-aive

  • data層級不要太深

  • 使用vue-loader在開發環境做模板編譯(預編譯)

  • webpack層面的優化(後面會講)

  • 前端通用的性能優化,如圖片懶加載

  • 使用SSR

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