今天我們來說說常見的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()
,來對於每個屬性的 getter
和 setter
進行劫持,在數據更改時,發佈消息給到訂閱者,重新渲染頁面。
(具體的步驟有興趣的可以去看源碼)
15、知不知道hash和history兩種模式?簡單說說:
直觀上的區別就是差一個“#”
,hash中的地址是寫在“#”
後邊的;但history沒有。
要是使用hash模式,hash之前的內容會包含在請求中;history模式URL就要和後端進行一致,所以要改為history也需要後端的配合,否則會報錯。
所以hash模式在每次刷新頁面時是直接更改“#”
後的東西,history每次刷新會重新像後端請求整個網址,也就是重新請求服務器。如果後端沒有及時響應,就會報錯404!。history的好處是可以進行修改歷史記錄,並且不會立刻像後端發起請求。不過如果對於項目沒有硬性標準要求,我們可以直接使用hash模式開發。
16、在開發時,有沒有遇到過什麼問題印象深刻?
(按照自己的情況說。)
17、好的,準備入職
文章寫到這裡,希望大家可以有所收穫!
weChat:VillinWeChat