談談近段時間的前端面試

近段時間忙於工作和準備辭職的事忙的不可開交,現在對近段時間的面試情況進行一次總結,感覺收穫良多,很感謝面試我的各位面試官們,好了,閒話不多說了,開始談談近段時間的面試情況。(由於時間不充裕暫時給出現有答案,往後會繼續更新)

公司一:

1. 工作中主要用的html標籤是什麼?以及他們的作用?

答:<title>,<meta>,<header>,<nav>,<footer>,<button>,<h>系列的標籤,<p>,<img>,<a>,<ul>,<li>等語義化標籤,
       他們的優點是有利於seo以及語義化,同時在樣式沒有加載成功時,語義化的標籤能夠提供一定的可
      閱讀性,另外對於一些特殊的設備也有幫助。(我是從整體的作用去敘述,個人有個人的看法)

2. apply,call,bind的區別。

答案:

  (1)用於指定函數內部的this指向的問題,這三個方法都差不多,只是存在形式上的差別,然後根據指定的作用域,調用該函數。

  (2)都可以在函數調用時傳遞參數。call,bind方法需要直接傳入,而apply方法需要以數組的形式傳入

  (3)call,apply方法是在調用之後立即執行函數,而bind方法沒有立即執行,需要將函數再執行一遍

  (4)如果第一個參數設爲null或undefined或者this,則等同於指定全局對象

var arr = ['1','2','3']
var obj = {value:1,label:'番茄'}

function doMain(a, b, c){
    console.log(a + b + c)
}

doMain.call(null, 1, 2, 3) // 這裏是一個一個加參數的,注意
doMain.call(obj)

doMain.apply(null, arr)
doMain.apply(arr)

doMain.bind(null, 1, 2, 3)// 返回doMain()  傳參跟call 的形式一樣
doMain.bind(null, 1, 2, 3)() // 6

3. 箭頭函數的指向

答:  箭頭函數的this是繼承父執行上下文裏面的this 

4. webpack的使用場景

5. Cookie與LocalStorage,sessionStorage的區別

6. post與get的區別

7. 是否瞭解es6語法?說說了解那些?

8. 介紹一下盒子模型?怎麼變成一個標準的盒子模型?

9. 什麼是原型鏈?

10. js 中 this 閉包 作用域?

11. javascript 中 this 的指向問題。

vue部分:

1. 雙向綁定的原理是什麼?

答案:

VUE 實現雙向數據綁定的原理就是利用了 Object.defineProperty() 這個方法重新定義了對象獲取屬性值(get)和設置屬性值(set)的操作來實現的。

Vue3.0 將用原生 Proxy 替換 Object.defineProperty

題外話:爲什麼要替換 Object.defineProperty?(Proxy 相比於 defineProperty 的優勢)

答案:

在 Vue 中,Object.defineProperty 無法監控到數組下標的變化,導致直接通過數組的下標給數組設置值,不能實時響應。

Object.defineProperty 只能劫持對象的屬性,因此我們需要對每個對象的每個屬性進行遍歷。

2. 分別解釋vue的生命週期函數。

答案:

(1) beforeCreate 初始化實例後 數據觀測和事件配置之前調用

(2) created 實例創建完成後調用

(3) beforeMount 掛載開始前被用

(4) mounted el 被新建 vm.$el 替換並掛在到實例上之後調用

(5) beforeUpdate 數據更新時調用

(6) updated 數據更改導致的 DOM 重新渲染後調用

(7) beforeDestory 實例被銷燬前調用

(8) destroyed 實例銷燬後調用

3. <keep-alive>是用來做什麼的?

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

<keep-alive>
  <component>
    <!-- 該組件將被緩存! -->
  </component>
</keep-alive>

4. vuex存儲數據的流程?vuex 有哪幾種屬性?

答:

vuex的State特性
A、Vuex就是一個倉庫,倉庫裏面放了很多對象。其中state就是數據源存放地,對應於一般Vue對象裏面的data
B、state裏面存放的數據是響應式的,Vue組件從store中讀取數據,若是store中的數據發生改變,依賴這個數據的組件也會發生更新
C、它通過mapState把全局的 state 和 getters 映射到當前組件的 computed 計算屬性中

· vuex的Getter特性
A、getters 可以對State進行計算操作,它就是Store的計算屬性
B、 雖然在組件內也可以做計算屬性,但是getters 可以在多組件之間複用
C、 如果一個狀態只在一個組件內使用,是可以不用getters

·  vuex的Mutation特性
Action 類似於 mutation,不同在於:Action 提交的是 mutation,而不是直接變更狀態;Action 可以包含任意異步操作。

5. vue中,怎麼攔截路由?

6. 爲什麼避免 v-if 和 v-for 用在一起?

答案:

當 Vue 處理指令時,v-for 比 v-if 具有更高的優先級,這意味着 v-if 將分別重複運行於每個 v-for 循環中。通過 v-if 移動到容器元素,不會再重複遍歷列表中的每個值。取而代之的是,我們只檢查它一次,且不會在 v-if 爲否的時候運算 v-for。

7. vue-cli 工程升級 vue 版本

答案:

在項目目錄裏運行 npm upgrade vue vue-template-compiler,不出意外的話,可以正常運行和 build。如果有任何問題,刪除 node_modules 文件夾然後重新運行 npm i 即可。(簡單的說就是升級 vue 和 vue-template-compiler 兩個插件)

8. computed與watch的區別?

答案:

watch 主要作用是監聽某個數據值的變化。和計算屬性相比除了沒有緩存,作用是一樣的。

藉助 watch 還可以做一些特別的事情,例如監聽頁面路由,當頁面跳轉時,我們可以做相應的權限控制,拒絕沒有權限的用戶訪問頁面。

9. vue怎麼實現頁面的權限控制

答案:

利用 vue-router 的 beforeEach 事件,可以在跳轉頁面前判斷用戶的權限(利用 cookie 或 token),是否能夠進入此頁面,如果不能則提示錯誤或重定向到其他頁面,在後臺管理系統中這種場景經常能遇到。

 


 

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