2019 前端面試題匯總(主要為 Vue)

2021-02-15 前端大全

(給前端大全加星標,提升前端技能)

作者:前端小醬

https://segmentfault.com/a/1190000018225708

畢業之後就在一直合肥小公司工作,沒有老司機、沒有技術氛圍,在技術的道路上我只能獨自摸索。老闆也只會畫餅充飢,前途一片迷茫看不到任何希望。於是乎,我果斷辭職,在新年開工之際來到杭州,這裡的網際網路公司應該是合肥的幾十倍吧。。。。

剛來3天,面試了幾家公司,有些規模比較小,有些是創業公司,也有些已經發展的不錯了;今天把最近的面試題目做個匯總,也給自己復個盤,由於我的技術棧主要為Vue,所以大部分題目都是Vue開發相關的。

1. 談談你對MVVM開發模式的理解

MVVM分為Model、View、ViewModel三者。

Model和View並無直接關聯,而是通過ViewModel來進行聯繫的,Model和ViewModel之間有著雙向數據綁定的聯繫。因此當Model中的數據改變時會觸發View層的刷新,View中由於用戶交互操作而改變的數據也會在Model中同步。

這種模式實現了Model和View的數據自動同步,因此開發者只需要專注對數據的維護操作即可,而不需要自己操作dom。

2. Vue 有哪些指令?

v-html、v-show、v-if、v-for等等。

3. v-if 和 v-show 有什麼區別?

v-show 僅僅控制元素的顯示方式,將 display 屬性在 block 和 none 來回切換;而v-if會控制這個 DOM 節點的存在與否。當我們需要經常切換某個元素的顯示/隱藏時,使用v-show會更加節省性能上的開銷;當只需要一次顯示或隱藏時,使用v-if更加合理。

4. 簡述Vue的響應式原理

當一個Vue實例創建時,vue會遍歷data選項的屬性,用 Object.defineProperty 將它們轉為getter/setter並且在內部追蹤相關依賴,在屬性被訪問和修改時通知變化。每個組件實例都有相應的watcher程序實例,它會在組件渲染的過程中把屬性記錄為依賴,之後當依賴項的setter被調用時,會通知watcher重新計算,從而致使它關聯的組件得以更新。

5. Vue中如何在組件內部實現一個雙向數據綁定?

假設有一個輸入框組件,用戶輸入時,同步父組件頁面中的數據。

具體思路:父組件通過props傳值給子組件,子組件通過 $emit 來通知父組件修改相應的props值,具體實現如下:

import Vue from 'vue'

const component = {

 props: ['value'],

 template: `

   <div>

     <input type="text" @input="handleInput" :value="value">

   </div>

 `,

 data () {

   return {

   }

 },

 methods: {

   handleInput (e) {

     this.$emit('input', e.target.value)

   }

 }

}

new Vue({

 components: {

   CompOne: component

 },

 el: '#root',

 template: `

   <div>

     <comp-one :value1="value" @input="value = arguments[0]"></comp-one>

   </div>

 `,

 data () {

   return {

     value: '123'

   }

 }

})

可以看到,當輸入數據時,父子組件中的數據是同步改變的:

我們在父組件中做了兩件事,一是給子組件傳入props,二是監聽input事件並同步自己的value屬性。那麼這兩步操作能否再精簡一下呢?答案是可以的,你只需要修改父組件:

template: `

   <div>

     <!--<comp-one :value1="value" @input="value = arguments[0]"></comp-one>-->

     <comp-one v-model="value"></comp-one>

   </div>

 `

v-model 實際上會幫我們完成上面的兩步操作。

6. Vue中如何監控某個屬性值的變化?

比如現在需要監控data中, obj.a 的變化。Vue中監控對象屬性的變化你可以這樣:

watch: {

     obj: {

     handler (newValue, oldValue) {

       console.log('obj changed')

     },

     deep: true

   }

 }

deep屬性表示深層遍歷,但是這麼寫會監控obj的所有屬性變化,並不是我們想要的效果,所以做點修改:

watch: {

  'obj.a': {

     handler (newName, oldName) {

       console.log('obj.a changed')

     }

  }

 }

還有一種方法,可以通過computed 來實現,只需要:

computed: {

   a1 () {

     return this.obj.a

   }

}

利用計算屬性的特性來實現,當依賴改變時,便會重新計算一個新值。

7. Vue中給data中的對象屬性添加一個新的屬性時會發生什麼,如何解決?

示例:

<template>

 <div>

   <ul>

     <li v-for="value in obj" :key="value">

       {{value}}

     </li>

   </ul>

   <button @click="addObjB">添加obj.b</button>

 </div>

</template>

<script>

export default {

 data () {

   return {

     obj: {

       a: 'obj.a'

     }

   }

 },

 methods: {

   addObjB () {

     this.obj.b = 'obj.b'

     console.log(this.obj)

   }

 }

}

</script>

<style></style>

點擊button會發現, obj.b 已經成功添加,但是視圖並未刷新:

原因在於在Vue實例創建時, obj.b 並未聲明,因此就沒有被Vue轉換為響應式的屬性,自然就不會觸發視圖的更新,這時就需要使用Vue的全局api—— $set():

addObjB () {

     // this.obj.b = 'obj.b'

     this.$set(this.obj, 'b', 'obj.b')

     console.log(this.obj)

   }

$set() 方法相當於手動的去把 obj.b 處理成一個響應式的屬性,此時視圖也會跟著改變了:

8. delete和Vue.delete刪除數組的區別

delete只是被刪除的元素變成了 empty/undefined 其他的元素的鍵值還是不變。

Vue.delete 直接刪除了數組 改變了數組的鍵值。

   var a=[1,2,3,4]

   var b=[1,2,3,4]

   delete a[1]

   console.log(a)

   this.$delete(b,1)

   console.log(b)

9.如何優化SPA應用的首屏加載速度慢的問題?10. 前端如何優化網站性能?1、減少 HTTP 請求數量

在瀏覽器與伺服器進行通信時,主要是通過 HTTP 進行通信。瀏覽器與伺服器需要經過三次握手,每次握手需要花費大量時間。而且不同瀏覽器對資源文件並發請求數量有限(不同瀏覽器允許並發數),一旦 HTTP 請求數量達到一定數量,資源請求就存在等待狀態,這是很致命的,因此減少 HTTP 的請求數量可以很大程度上對網站性能進行優化。

CSS Sprites

國內俗稱CSS精靈,這是將多張圖片合併成一張圖片達到減少HTTP請求的一種解決方案,可以通過CSS的background屬性來訪問圖片內容。這種方案同時還可以減少圖片總字節數。

合併 CSS 和 JS 文件

現在前端有很多工程化打包工具,如:grunt、gulp、webpack等。為了減少 HTTP 請求數量,可以通過這些工具再發布前將多個CSS或者多個JS合併成一個文件。

採用 lazyLoad

俗稱懶加載,可以控制網頁上的內容在一開始無需加載,不需要發請求,等到用戶操作真正需要的時候立即加載出內容。這樣就控制了網頁資源一次性請求數量。

2、控制資源文件加載優先級

瀏覽器在加載HTML內容時,是將HTML內容從上至下依次解析,解析到link或者script標籤就會加載href或者src對應連結內容,為了第一時間展示頁面給用戶,就需要將CSS提前加載,不要受 JS 加載影響。

一般情況下都是CSS在頭部,JS在底部。

3、利用瀏覽器緩存

瀏覽器緩存是將網絡資源存儲在本地,等待下次請求該資源時,如果資源已經存在就不需要到伺服器重新請求該資源,直接在本地讀取該資源。

4、減少重排(Reflow)

基本原理:重排是DOM的變化影響到了元素的幾何屬性(寬和高),瀏覽器會重新計算元素的幾何屬性,會使渲染樹中受到影響的部分失效,瀏覽器會驗證 DOM 樹上的所有其它結點的visibility屬性,這也是Reflow低效的原因。如果Reflow的過於頻繁,CPU使用率就會急劇上升。

減少Reflow,如果需要在DOM操作時添加樣式,儘量使用 增加class屬性,而不是通過style操作樣式。

5、減少 DOM 操作6、圖標使用 IconFont 替換11. 網頁從輸入網址到渲染完成經歷了哪些過程?

大致可以分為如下7步:

輸入網址;

發送到DNS伺服器,並獲取域名對應的web伺服器對應的ip地址;

與web伺服器建立TCP連接;

瀏覽器向web伺服器發送http請求;

web伺服器響應請求,並返回指定url的數據(或錯誤信息,或重定向的新的url地址);

瀏覽器下載web伺服器返回的數據及解析html源文件;

生成DOM樹,解析css和js,渲染頁面,直至顯示完成;

12. jQuery獲取的dom對象和原生的dom對象有何區別?

js原生獲取的dom是一個對象,jQuery對象就是一個數組對象,其實就是選擇出來的元素的數組集合,所以說他們兩者是不同的對象類型不等價。

原生DOM對象轉jQuery對象:

var box = document.getElementById('box');

var $box = $(box);

jQuery對象轉原生DOM對象:

var $box = $('#box');

var box = $box[0];

13. jQuery如何擴展自定義方法

(jQuery.fn.myMethod=function () {

      alert('myMethod');

})

// 或者:

(function ($) {

       $.fn.extend({

            myMethod : function () {

                 alert('myMethod');

            }

       })

})(jQuery)

使用:

$("#div").myMethod();

目前來看公司面試的問題還是比較基礎的,但是對於某些只追求會用並不研究其原理的同學來說可能就沒那麼容易了。所以大家不僅要追求學習的廣度,更要追求深度。

OK,希望自己能早日拿到心儀的offer.

參考

《淺談網站性能之前端性能優化》

覺得本文對你有幫助?請分享給更多人

關注「前端大全」加星標,提升前端技能

喜歡就點一下「好看」唄~

相關焦點

  • 2021新一輪的前端面試題
    不知道今年是什麼原因,感覺春招來的特別早,本周一趕剛開始上班就有一大批的簡歷來襲,競爭激烈的面試也就此展開了。在此之際,為了能幫助大家找到一個理想的工作,我們在此開始會連續的發一段時間的面試題。在時間比較充裕時候也會發一些面試技巧和面試心得之類的,現在這些公眾號裡已經都有了,雖然是去年的但是「換湯不換藥」,說不定也有能幫助到你的。話不多說,先來看下本期的前端面試題匯總吧!
  • 這個Github項目,搞定前端開發所有React 面試題
    重磅乾貨,第一時間送達隨著JQuery的逐漸衰落離場,如今的前端開發框架界前三已被:Vue,React,Angular 牢牢佔據,Vue,React,Angular三巨頭也是我們前端開發工程師必須要學習的內容之一,三大前端框架相關問題在面試中常常會著重被面試官提問到。
  • 香港摩根大通最新Hirevue面試題流出,不僅題型增多,而且難度三級跳?
    很多童鞋看到視頻面試都會下意識鬆一口氣因為幾乎所有人都認為視頻面試是不刷人的環節但是如果你看到了WST獨家整理的香港摩根大通2019申請季Hirevue面試真題(真題福利文末可領取~)從真題中,不難發現今年的Hirevue
  • 【新年跳槽必備】2020最新(前端原生JS專題)面試題 速領!
    每期面試題都是Richard老師認真準備的真的希望能幫到大家哦本期是前端原生JS專題1. javascript的typeof返回哪些數據類型.2.37. .form中的input可以設置為readonly和disable,請問2者有什麼區別?38. 列舉javaScript的3種主要數據類型,2種複合數據類型和2種特殊數據類型。39. 程序中捕獲異常的方法?40.
  • Web前端面試官會問什麼,不懂性能優化的前端不是好前端
    金三銀四臨近,馬上又到了要為跳槽面試做準備的時候。面試是每一家公司招聘流程裡面必不可少的環節,一個人求職能否成功,很大因素就看面試時候的表現了。一般來說,HR面試官會拋出的問題主要有以下這些:1、進行一下自我介紹;2、簡單說一下對面試公司的了解;3、談一下對應聘崗位的看法;4、針對崗位,簡單考察一下求職者的崗位技能;5、談一下上份工作職責內容及工作結果;6、說一下目前薪資要求;7、談一下離開上家公司原因以上關於HR問的問題結束以後
  • 前端新手教程!如何快速入門web前端
    我進入這個行業已經十一年了,面試過不少人,在企業裡也帶過不少新人和應屆生。所以這篇文章我想分享一些初學者應該怎麼學web,怎麼入門的個人經驗。心態和個人的一些學習方法先說心態問題,經常看到網上很多說前端容易,所以想來學習的。其實,目前隨著前後端分離,前端也逐漸趨向工程化,並不是嵌套在後端項目中寫寫htmlcss就可以的了,需要學習的東西也越來越多。
  • 九大行HireVue面試已發出,700+名企都在用,你收到了嗎?
    後面還有大量真題哦~大名鼎鼎的HireVue是Digital Interview系統的代表,也是當下使用最頻繁」AI面試官「。看似簡單的形式,已經為高盛、安永、Barclays、瑞銀、聯合利華、Hilton、IBM Watson等公司採用。目前已經有700+名企開始使用Hirevue來篩選人才。
  • 一場感覺身體被掏空的前端面試
    而這對於本地求職者來說也是一件好事,既免去了舟車勞頓之苦,又可以專心準備面試。我現在的工作機會就是兩年前作為一個本地候選人得到的。如果公司邀請外地的候選人來面試,則要為他買機票,訂酒店,報銷夥食費租車費等各種費用。這一切的額外成本都會使得對於外地候選人的挑選標準變得更加嚴格。好在,美國IT公司的招聘流程比較清晰,大都遵循著同一種套路。
  • 大廠面試過程復盤(微信/阿里/頭條,附答案篇)
    背景本人前端,3年經驗,由於個人的原因,決定跳槽,於是大概3月開始找工作,總歷時大概2個月,面試了微信/阿里/頭條,三家都拿到了offer,來分享一下面經。問題比較多,而且很多面試題都是跟個人項目相關的,項目相關的問題借鑑意義不大,所以這裡總結一些與項目無絕對關係的問題,歡迎圍觀~整體流程這裡,我梳理了一些自己的心得,先放個思維導圖。微信筆試數組交集,編寫一個函數,輸入兩個數組,輸出它們的交集。
  • 萬字長文,20-50K前端工程師部分面試題集錦 - 附答案(收藏!)
    小提示:如果發現小公司面試套你的技術和架構,迅速結束,開出天價薪資走人 下面正式公布部分面試題,以及答案出於對各個公司的尊重,不公布是哪家公司的面試題,以及面試技巧。只公布部分面試題和答案,以及分析問題的角度,學習方向,面試中考察的不僅僅技術深度,還有廣度,每個人不可能技術面面俱到,前端學習的東西太多,忘掉一部分也是正常。
  • B站、喜馬拉雅、流利說、蜻蜓FM、愛回收等前端面試經歷
    前言2019年6月中旬,實在厭倦了之前平平淡淡的工作和毫不起眼的薪資,不顧親人的反對,毅然決然地決定只身前往沿海城市,想著找到一份更加具有挑戰性的工作,來徹徹底底地重新打磨自己,同時去追求更好的薪資待遇。當然在此之前,自己每天下班後都會利用業餘時間抓緊複習鞏固刷題等等,大概從3月份開始的吧,持續了3個多月。
  • 超清PDF:Java面試題匯總,共41個技術方向!
    最近很多粉絲問我有沒有最新的面試題?於是,我就把我見過的以及遇到過的,還有根據讀者反饋的大廠面試真題,進行了匯總整理。
  • 【每日一題】(33題)面試官:你對圖論了解多少?(三)
    (二)【每日一題】(31題)面試官:你對圖論了解多少?•第 22 題:【每日一題】(22題)面試官問:var與const,let的主要區別是什麼?•第 21 題:【每日一題】(21題)面試官問:談談JS中的 this 的綁定?•第 20 題:【每日一題】(20題)面試官問:談談JS中的 webSockets 的理解?•第 19 題:【每日一題】面試官問:談談JS中的 XMLHttpRequest 對象的理解?
  • 2020年02月24日(周一)| 雅詩蘭黛、花旗銀行、波士頓諮詢等名企筆面試經驗
    95分群面tip分享 【瑞銀集團(UBS)】2020 summer Global markets SH AC面經 【安永(E&Y)】寫在安永2020 SLP即將開始之前 【優衣庫(UNIQLO)】優衣庫umc面經(2020秋招 濟南) 【vivo】2020春招筆試題 【簡歷模板、製作、點評及修改】春招開始了簡歷如何準備 【面試技巧、面經大全】德勤
  • 算法工程師常見面試問題及相關資料匯總(附簡歷模板)
    阿里巴巴計算機視覺算法實習生視頻面試 website面試經驗AI算法工程師(面試官角度) website從零基礎到BAT算法崗SP——秋招準備攻略 website螞蟻金服/曠視/虹軟/騰訊優圖暑期實習offer面經 website我在美團的這兩年(附校招筆試/面試/面經分享) website1000 面試題,BAT
  • 經典面試題(24):以下代碼將輸出的結果是什麼?
    我們先來回顧上一題《經典面試題(23)》。看投票結果,大部分小夥伴都選擇了正確的答案!
  • Python工程師比前端工程師更好招?
  • 80%的前端會答錯的問題:是什么元素?
    前言某天晚上,和幾個朋友去擼串,突然就聊到了面試,都在感嘆現在的面試題太變態了,其中一個突然很神秘的問我