前端面試題——Vue

2020-12-13 SegmentFault思否

前言

前幾天整理了一些 html + css + JavaScript 常見的面試題(https://segmentfault.com/u/youdangde_5c8b208a23f95/articles),然後現在也是找了一些在 Vue 方面經常出現的面試題,留給自己查看消化,也分享給有需要的小夥伴。

如果文章中有出現紕漏、錯誤之處,還請看到的小夥伴留言指正,先行謝過。

以下 ↓

1. 說一下 Vue 的雙向綁定數據的原理

vue 實現數據雙向綁定主要是:採用數據劫持結合「發布者 - 訂閱者」模式的方式,通過 Object.defineProperty() 來劫持各個屬性的 setter、 getter,在數據變動時發布消息給訂閱者,觸發相應監聽回調。

2. 解釋單向數據流和雙向數據綁定

單向數據流: 顧名思義,數據流是單向的。數據流動方向可以跟蹤,流動單一,追查問題的時候可以更快捷。缺點就是寫起來不太方便。要使 UI 發生變更就必須創建各種 action 來維護對應的 state。

雙向數據綁定:數據之間是相通的,將數據變更的操作隱藏在框架內部。優點是在表單交互較多的場景下,會簡化大量與業務無關的代碼。缺點就是無法追蹤局部狀態的變化,增加了出錯時 debug 的難度。

3. Vue 如何去除 URL 中的

vue-router 默認使用 hash 模式,所以在路由加載的時候,項目中的 URL 會自帶 「#」。如果不想使用 「#」, 可以使用 vue-router 的另一種模式 history:

newRouter({ mode:'history', routes:[]})需要注意的是,當我們啟用 history 模式的時候,由於我們的項目是一個單頁面應用,所以在路由跳轉的時候,就會出現訪問不到靜態資源而出現 「404」 的情況,這時候就需要服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態資源,則應該返回同一個 「index.html」 頁面。

4. 對 MVC、MVVM 的理解

MVC

特點:

View 傳送指令到 Controller;Controller 完成業務邏輯後,要求 Model 改變狀態;Model 將新的數據發送到 View,用戶得到反饋。所有通信都是單向的。

MVVM

特點:

各部分之間的通信,都是雙向的;採用雙向綁定: View 的變動,自動反映在 ViewModel,反之亦然。5. Vue 生命周期的理解

Vue 實例有一個完整的生命周期,生命周期也就是指一個實例從開始創建到銷毀的這個過程。

beforeCreated():在實例創建之間執行,數據未加載狀態。created():在實例創建、數據加載後,能初始化數據,DOM 渲染之前執行。beforeMount():虛擬 DOM 已創建完成,在數據渲染前最後一次更改數據。mounted():頁面、數據渲染完成,真實 DOM 掛載完成。beforeUpadate():重新渲染之前觸發。updated():數據已經更改完成,DOM 也重新 render 完成,更改數據會陷入死循環。beforeDestory() 和 destoryed():前者是銷毀前執行(實例仍然完全可用),後者則是銷毀後執行。6. 組件通信

父組件向子組件通信

子組件通過 props 屬性,綁定父組件數據,實現雙方通信。

子組件向父組件通信

將父組件的事件在子組件中通過 $emit 觸發。

非父子組件、兄弟組件之間的數據傳遞

/*新建一個Vue實例作為中央事件總嫌*/let event =newVue();/*監聽事件*/event.$on('eventName',(val)=>{//......do something});/*觸發事件*/event.$emit('eventName','this is a message.')7. vue-router 路由實現

路由就是用來跟後端伺服器進行交互的一種方式,通過不同的路徑,來請求不同的資源,請求不同的頁面是路由的其中一種功能。

8. v-if 和 v-show 區別

使用 v-if 的時候,如果值為 false ,那麼頁面將不會有這個 html 標籤生成。

v-show 則是不管值為 true 還是 false , html 元素都會存在,只是 CSS 中的 display 顯示或隱藏。

9. $route 和 $router 的區別

$router 為 VueRouter 實例,想要導航到不同 URL,則使用 $router.push 方法。

$route 為當前 router 跳轉對象裡面可以獲取 name 、 path 、 query 、 params 等。

10. NextTick 是做什麼的

$nextTick 是在下次 DOM 更新循環結束之後執行延遲回調,在修改數據之後使用 $nextTick,則可以在回調中獲取更新後的 DOM。

具體可參考官方文檔:深入響應式原理(https://cn.vuejs.org/v2/guide/reactivity.html)。

11. Vue 組件 data 為什麼必須是函數

因為 JS 本身的特性帶來的,如果 data 是一個對象,那麼由於對象本身屬於引用類型,當我們修改其中的一個屬性時,會影響到所有 Vue 實例的數據。如果將 data 作為一個函數返回一個對象,那麼每一個實例的 data 屬性都是獨立的,不會相互影響了。

12. 計算屬性 computed 和事件 methods 有什麼區別

我們可以將同一函數定義為一個 method 或者一個計算屬性。對於最終的結果,兩種方式是相同的。

不同點:

computed:計算屬性是基於它們的依賴進行緩存的,只有在它的相關依賴發生改變時才會重新求值。method:只要發生重新渲染, method 調用總會執行該函數。13. 對比 jQuery ,Vue 有什麼不同

jQuery 專注視圖層,通過操作 DOM 去實現頁面的一些邏輯渲染; Vue 專注於數據層,通過數據的雙向綁定,最終表現在 DOM 層面,減少了 DOM 操作。

Vue 使用了組件化思想,使得項目子集職責清晰,提高了開發效率,方便重複利用,便於協同開發。

16. Vue 中怎麼自定義指令

全局註冊

// 註冊一個全局自定義指令 `v-focus`Vue.directive('focus',{// 當被綁定的元素插入到 DOM 中時…… inserted:function(el){// 聚焦元素 el.focus()}})局部註冊

directives:{ focus:{// 指令的定義 inserted:function(el){ el.focus()}}}參考官方文檔:自定義指令(https://cn.vuejs.org/v2/guide/custom-directive.html)。

15. Vue 中怎麼自定義過濾器

可以用全局方法 Vue.filter() 註冊一個自定義過濾器,它接收兩個參數:過濾器 ID 和過濾器函數。過濾器函數以值為參數,返迴轉換後的值。

Vue.filter('reverse',function(value){return value.split('').reverse().join('')})<!-- 'abc' => 'cba' --><spanv-text="message | reverse"></span>過濾器也同樣接受全局註冊和局部註冊。

16. 對 keep-alive 的了解

keep-alive 是 Vue 內置的一個組件,可以使被包含的組件保留狀態,或避免重新渲染。

<keep-alive><component><!-- 該組件將被緩存! --></component></keep-alive>可以使用 API 提供的 props,實現組件的動態緩存。

具體參考官方API(https://cn.vuejs.org/v2/api/#keep-alive)。

17. Vue 中 key 的作用

key 的特殊屬性主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時辨識 VNodes。如果不使用 key,Vue 會使用一種最大限度減少動態元素並且儘可能的嘗試修復/再利用相同類型元素的算法。使用 key,它會基於 key 的變化重新排列元素順序,並且會移除 key 不存在的元素。

有相同父元素的子元素必須有獨特的 key。重複的 key 會造成渲染錯誤。

具體參考官方API(https://cn.vuejs.org/v2/api/#key)。

18. Vue 的核心是什麼

數據驅動、組件系統。

19. Vue 等單頁面應用的優缺點

優點

良好的交互體驗良好的前後端工作分離模式減輕伺服器壓力缺點

SEO 難度較高前進、後退管理初次加載耗時多後記

整理的過程也是重新梳理知識點的過程,途中會發現很多自己理解不是很到位的東西,也算是一種收穫吧。

後面會一直不定期更新一些其他方面的面試題或者遇到的有趣的東西,感興趣的小夥伴可以關注哦。

完整版面試題:https://github.com/ltadpoles/web-document/tree/master/Other

遇見更優秀的自己,從現在開始!

以上。

相關焦點

  • 35道常見的前端vue面試題
    來源 | https://segmentfault.com/a/1190000021936876今天這篇文章給大家分享一些常見的前端vue面試題。對於前端來說,儘管css、html、js是主要的基礎知識,但是隨著技術的不斷發展,出現了很多優秀的mv*框架以及小程序框架。因此,對於前端開發者而言,需要對一些前端框架進行熟練掌握。這篇文章我們一起來聊一聊VUE及全家桶的常見面試問題。1、請講述下VUE的MVVM的理解?
  • 2020最新Web前端經典面試題試題及答案(持續更新)-開課吧
    Web前端面試題Web前端面試題:說說你對webpack的看法解析:webpack是一個模塊打包工具,可以使用webpack可以將代碼切割成不同的chunk,實現按需加載,降低了初始化時間支持sourceUrls和sourceMaps,易於調試具有強大的plugin接口,大多是內部插件,使用起來比較靈活webpack使用異步IO並具有多級緩存,在增亮編譯上更加快Web前端面試題
  • 2019 前端面試題匯總(主要為 Vue)
    (給前端大全加星標,提升前端技能)作者:前端小醬https://segmentfault.com/a/1190000018225708
  • 2020 前端面試|第二波面試題總結
    前言哈,看樣子年後跳槽還是大家比較關心的一件事情了,繼第一波面試題匯總的反響和評論,觀看和點讚的朋友們很多,我繼續將後續面試的一些內容寫出來,有很多面試題答案我自己寫的比較含糊,但是在面試的過程中是描述的表較多的。畢竟寫文字要寫出來太多了。我也只是寫了一個大概,如果對答案不太滿意的同學可以自行查詢標準答案哈。
  • 前端面試題集合
    vue和react的區別vue的原理閉包let和var的區別,let的產生背景?定寬定高,如何垂直居中,那不定寬定高呢?雙向綁定原理,vue-loader做了什麼webpack的插件大致流程編程題:給出一個字符串(「obj.a」),返回對象屬性obj.a,類似eval的效果前端路由會不會發請求畫布濡染有了解嗎前端監控,pm2,如果我伺服器掛了,如何快速發現並且定位錯誤pm2除了監控還能幹什麼,如何實現express中間件如何實現
  • 2018web前端面試總結
    關於流程一般的實習&校招招聘大體有這麼一個流程:(這裡我個人都是走的官網投遞的渠道,沒有經歷過宣講會的環節,這一部分我沒啥經驗)筆試筆試作為招聘的第一個環節,一般考察的都是專業基礎知識,這裡會著重考察你在學校的計算機相關基礎,也就是很多人會發現,我明明考的是前端的卷子為啥前端的知識點考的這麼少,而且有時候也會發現,前端的卷子考的沒有前端的知識點
  • Vue面試題(3)Vue-Router和Vuex
    本文收集和整理了有關Vue-Router和Vuex的面試題,希望對準備面試和深入學習的小夥伴有所幫助!
  • Vue面試中,經常會被問到的面試題/Vue知識點整理
    來源 | https://segmentfault.com/a/1190000016344599看看面試題,只是為了查漏補缺,看看自己那些方面還不懂
  • 一個前端自學者從面試被吊打,到拿 offer 的心路歷程
    前言先交代下博主是在二線城市,所以也面不了什麼大廠自然也就沒什麼大廠面經(就算有我也沒有這個實力),昨天面試了一家中小型的公司,這裡就不透露名字了,總共面了兩輪總結後寫下了這篇文章,我相信也是有很多和我在二線城市的小夥伴需要這些常見的面試題的,我是剛畢業出來實習,所以馬上要出去找實習的小夥伴可以看看,參考下。2. 面試之前準備什麼?
  • 【別笑】手撕吊打面試官系列面試題
    必備面試題js基礎1.用js列印一個乘法表這一題面試官考察的是你關於js的列印相關基礎api的熟悉程度,以及基本的數學常識,送分題console.log(`1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=16
  • 2020 前端面試:第一波面試題總結
    ,然後公司內部轉崗到開發部門工作,算下來前端經驗也快三年之久。令我意外的是,近一個月收到多家公司的面試邀請。因此總結一波2020年最新面試題,希望對大家有所幫助!後面的答案為自行整理,如有疏漏,歡迎指正!面試總結以下面試均為電話面試一面構造函數 ,是一種特殊的方法。主要用來在創建對象時初始化對象。
  • 請收藏:H5前端開發工程師常見面試問題總匯
    雲和數據的就業指導老師根據學生的反饋,總結出以下H5前端開發工程師的常見面技術面試題,如有需要請收藏!1、項目中用到哪些技術棧(IT術語:一系列技能組合的統稱)2、vue我不是太懂,你能幫我介紹一下它的流程和特性嗎3、vue的工具有哪些4、我們的手機網站都是打包成app的,你了解過怎樣打包嗎5、聊了一些小程序
  • 30 道 Vue 面試題,內含詳細講解
    11、父組件可以監聽到子組件的生命周期嗎?Vue 組件間通信是面試常考的知識點之一,這題有點類似於開放題,你回答出越多方法當然越加分,表明你對 Vue 掌握的越熟練。Vue 組件間通信只要指以下 3 類通信:父子組件通信、隔代組件通信、兄弟組件通信,下面我們分別介紹每種通信方式且會說明此種方法可適用於哪類組件間通信。
  • 2019 前端秋季社招面試經歷總結(二年多經驗)
    前言本文內容講筆者在 2019 的秋季社招時期,去大廠面試的問題和經驗總結。居安思危,安逸久了,都要試著知道自己目前的市場價,而最好的方法就是去外面面試幾場,受受打擊,知道自己的不足,以後加強。」筆者入坑前端 3 年多了,有 2 年多的前端工作經驗,面試坐標:廣州。本文的面試問題只寫了些開放性的問題,其公司要求保密的試題就不寫出來了。2.
  • 2020大廠前端面試之vue專題
    將結果返回給前端,頁面重新渲染。MVVM :傳統的前端會將數據手動渲染到頁面上, MVVM 模式不需要用戶收到操作 dom 元素,將數據綁定到 viewModel 層上,會自動將數據渲染到頁面中,視圖變化會通知 viewModel層 更新數據。ViewModel 就是我們 MVVM 模式中的橋梁.
  • 2020年底面試題
    建議每一次面試後記下面試題每次面試完記得總結,把每一個知識點都學習會,防止後面再面又不會。我以下記錄的都不全,其實有重複的題。但有的沒弄明白,後面又會答不好。當時一個星期沒有通知面試,滴滴的投的約的比較早,一面確實面的不太好,可能之前滴滴掛的面試記錄,對面試也有影響吧。滴滴聊了一會,做了一套面試題,用騰訊文檔出的,基本是粘貼的題的圖,所以下面也直接粘過來了。一面用 JS 實現二分查找(折半查找)算法,並寫出時間複雜度。用 JS 實現深拷貝。4. 如下代碼,分別彈出什麼信息?
  • 2020Web前端面試題匯總-開課吧
    Web前端面試題說說前端中的事件流?以上就是小科今天整理提供的Web前端開發面試題,希望為Web前端同學提供了有用的面試素材,以後小科每日均會提供Python、Web及MySQL資料庫相關的習題。學習沒有捷徑,希望大家都能少走一些彎路,順利找到工作!
  • 你們問了好久的四月前端面試總指南(下篇)來啦,康康自己過關了嗎?
    上次的四月份前端面試題總指南上篇發布後小夥伴們有好好碼住複習嗎有沒有把難點拎出來反覆推敲呢是否已經準備好面試時大展身手了呢如果還沒琢磨完,那可要加把勁嘍這不,咱們下篇馬上就來啦這次的面試題下篇主要說的是學員們在面試當中普遍被問到的問題,說的不對的地方請小夥伴們即使指正出來,或者有其他的看法也可以一起探討
  • 前端框架VUE,理解這一點,快速成為大咖
    首先大家要知道,IT行業迅速發展,想成為一個全棧開發工程師,你就要精通後端到前端,進大公司可能要求你在某個技術點有深入研究或者精通。進創業型公司或者小公司,你要明白老闆是招來幹活的,而不是培養你的技術,最後你跳槽,那人家不損失大。
  • 學會了Vue,前端面試卻沒找到工作
    不可否認Vue是一個很不錯也很值得學習的前端開發框架。然而大家一味地跟風,難道是學會了Vue就可以在前端界馳騁?成為一名優秀前端工程師?找到滿意的前端工作了嗎?稍微懂行的人都知道,你想多了,目前Vue幾乎是從事前端開發工作的必備技能,但是如果你只會用Vue,原生JS和其它前端技能掌握的不好,照樣完蛋。就有讀者和我說面試掛了,雖然他也學了Vue。