開發與維運

前端常見Vue2.0面試題

今天我們來說說常見的vue面試題,其實這個技術已經出現了幾年時間,每個城市的問法也都八九不離十,因為vue也就那麼些技術,問不出什麼太新鮮的東西。目前vue3.0興起,可能會有一些面試官頂多問下與2.0的區別,那麼今天我們就簡單說說關於vue的一些面試題。

其實博主自己也是不愛背題,在面試前從來不怎麼看題,一般都是用到的東西說一說。但事實上面試官就看你回答得怎麼樣,很少有面試官真正能感覺出你到底是不是背的,所以博主在這方面就很吃虧,先說一下經常被問到的知識,簡單些,回答上你們可以更好。我給你們學一下大部分的面試官:
️注意:本人簡歷中有本人博客鏈接,若面試官看到此篇文章就當作沒看見就可以了。自己頭腦不好使,這些都是隨筆記錄,寫完也經常記不住的

--- 開始:

0、vue用了多久了?說一下自己所做的項目情況。
根據自己的情況說。

1、vue中的通信都有哪些?
父子通信,兄弟通信,vuex。

2、嗯,那你說說父子通信都怎麼傳值的?
父傳子用props接收參數進行傳值,在子組件中定義一個props,來接受父組件傳過來的值,並在子組件中使用。

3、那如果想傳參嚴謹一些怎麼實現呢?比如只接受某些類型的參數?
我們在props中可以定義參數的類型,比如我就固定接收一個數字類型,我可以定一個變量為num,設置一些類型。

props:{
  num:Number
}

4、嗯,那子傳父呢?
子傳父,用一個回調函數,通過this.$emit()的方法。它有兩個參數,第一個是父組件中監聽的方法名,第二個是方法。父組件監聽這個方法名即可。

5、嗯,那還有沒有其他方法可以實現的呢?
vue中新增了兩個新增事件,一個是v-bind="$attrs",一個是v-on='$listeners'。當我們在創建一些組建的時候,這兩個事件可以幫助我們監聽到子組件的改變,從而實現了父組件的變化。

6、那這兩個方法分別是什麼用途呢?
v-bind="$attrs" 它包含了父作用域中不作為 prop 被識別的特性綁定;
v-on='$listeners' 它包含了父作用域中的事件監聽器,可以觸發父組件中的事件。

7、好,那你介紹一下vueX吧,說說其中都有什麼。
vueX是處理複雜的父子通信時,需要用到的技術。
state中可以定義一些常量,getters中寫觸發state改變的方法,通常用到getters比較少。
還有兩個可以存放方法的地方是actions和mutations,一個是異步,一個是同步,我們一般都用mutations存放一些方法,在頁面中通過this.$store.commit()方法來觸發mutations,從而改變state中的值。
複習vuex可以點擊這裡

8、自己怎麼封裝一個組件?(或者問如果頁面有相同的功能塊怎麼辦?)
很簡單啊,在components文件夾中創建一個 .vue 組件,我們標準命名首字母大寫。寫上公用的組件和樣式,內部的值都用動態綁定。並且創建props接收方法即可。不過現在的UI庫也都特別多,我們一般都直接使用UI庫就可以了,簡單還方便,有不同的地方,簡單封裝一下就可以了。

9、你們路由都怎麼封裝的?
我們都是使用公司給的框架,vue-cli在創建路由時,會直接引入路由組件的,我們只需要在 views 文件夾下創建自己的頁面,在路由 path 中定義頁面路徑;寫個 name 名稱;在 component 中可以用個箭頭函數寫上頁面的路徑即可。並且我們一般會定義一個重定向 redirect 到一個指定頁。

10、那你們環境都怎麼配置的?
(雖然說公司都是配置好的,不過也要簡單的說說,點此跳轉vue框架配置
目前我們用的都是vue3.0的配置,下載完框架後,自建 vue.config.js 文件,其中可以引入node中的 path 來打包一些樣式文件等,是他們壓縮到一個盤下。vue3.0提供了一個 publicPath屬性,之前2.0叫 baseURL。在這我們可以進行測試環境或上線環境的配置,可以通過 process.env.NODE_ENV === 'production' ? '/自己項目的路徑path/' : '/' 進行三目判斷,我們還可以配置各種 loader ,以及配置 proxy 來解決跨域請求。

11、嗯,那你再說一下vue中常用的生命週期有哪些,分別是幹什麼的
常用的有8個(生命週期不僅僅是8個),都是成對出現。分別是:
beforeCreate階段、created階段;
beforeMount階段、mounted階段;
beforeUpdate階段、updated階段;
beforeDestroy階段、destroyed階段;
分別為:創建前/後,載入前/後,更新前/後,銷燬前/後。

12、那實例是在哪個階段創建完的?
在mounted階段實例創建完成。

13、實例初始化是在哪個階段?
在created階段實例初始化,但還未完成。

14、有沒有了解過vue的實現原理?
vue採用的是數據劫持,結合發佈者和訂閱者模式,通過 Object.defineProperty() ,來對於每個屬性的 gettersetter進行劫持,在數據更改時,發佈消息給到訂閱者,重新渲染頁面。
(具體的步驟有興趣的可以去看源碼)

15、知不知道hash和history兩種模式?簡單說說:
直觀上的區別就是差一個“#”,hash中的地址是寫在“#”後邊的;但history沒有。
要是使用hash模式,hash之前的內容會包含在請求中;history模式URL就要和後端進行一致,所以要改為history也需要後端的配合,否則會報錯。
所以hash模式在每次刷新頁面時是直接更改“#”後的東西,history每次刷新會重新像後端請求整個網址,也就是重新請求服務器。如果後端沒有及時響應,就會報錯404!。history的好處是可以進行修改歷史記錄,並且不會立刻像後端發起請求。不過如果對於項目沒有硬性標準要求,我們可以直接使用hash模式開發。

16、在開發時,有沒有遇到過什麼問題印象深刻?
(按照自己的情況說。)

17、好的,準備入職

文章寫到這裡,希望大家可以有所收穫!

weChat:VillinWeChat

Leave a Reply

Your email address will not be published. Required fields are marked *