面試筆記 -- 前端

也沒有啥重點,就是一些基本知識,有需要的可以看看,持續更新,希望能幫助您。

vue

  1. 對於MVVM的理解

1首先我們明白是什麼: MVC
Model View Controller 是模型(model)-視圖(view)-控制器(controller)的縮寫

① Model(模型)表示應用程序核心(比如數據庫記錄列表)。
Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。   通常模型對象負責在數據庫中存取數據。

②View(視圖)顯示數據(數據庫記錄)。
View(視圖)是應用程序中處理數據顯示的部分。   通常視圖是依據模型數據創建的。

③Controller(控制器)處理輸入(寫入數據庫記錄)。
Controller(控制器)是應用程序中處理用戶交互的部分。   通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據

mvc 是大後端思想的最主要的基本模型,thinkphp爲典型案例。將不同的數據功能,以模塊化思想,把不同數據模型,展示在顯示層,將不同的西瓜分給不同的人去做。
更多 MVC、MTV、MVP、CBD、ORM

  1. MVVM :Model-View-ViewModel 本質上就是MVC 的改進版 MVVM 就是將其中的View 的狀態和行爲抽象化,讓我們將視圖 UI 和業務邏輯分開

組成

  • 模型 模型是指代表真實狀態內容的領域模型(面向對象),或指代表內容的數據訪問層(以數據爲中心)。
  • 視圖 就像在MVC和MVP模式中一樣,視圖是用戶在屏幕上看到的結構、佈局和外觀(UI)。
  • 視圖模型 視圖模型是暴露公共屬性和命令的視圖的抽象。MVVM沒有MVC模式的控制器,也沒有MVP模式的presenter,有的是一個綁定器。在視圖模型中,綁定器在視圖和數據綁定器之間進行通信。
  • 綁定器 聲明性數據和命令綁定隱含在MVVM模式中。在Microsoft解決方案堆中,綁定器是一種名爲XAML的標記語言。綁定器使開發人員免於被迫編寫樣板式邏輯來同步視圖模型和視圖。在微軟的堆之外實現時,聲明性數據綁定技術的出現是實現該模式的一個關鍵因素

特點

  • 低耦合。視圖(View)可以獨立於Model變化和修改,一個ViewModel可以綁定到不同的- "View"上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
  • 可重用性。你可以把一些視圖邏輯放在一個ViewModel裏面,讓很多view重用這段視圖邏輯。
  • .獨立開發。開發人員可以專注於業務邏輯和數據的開發(ViewModel),設計人員可以專注於頁面設計,使用Expression Blend可以很容易設計界面並生成xaml代碼。
  • 可測試。界面素來是比較難於測試的,而現在測試可以針對ViewModel來寫。

3既然都問了什麼是mvvm就應該把原理說下
雙向數據綁定怎麼實現
重點 Object.defineProperty() 原理 vue的雙向數據綁定的原理相信大家都十分了解;主要是通過ES5的Object對象的defineProperty屬性;重寫data的set和get函數來實現的 解析 雙向數據編訂 是採用數據劫持結合發佈者-訂閱者模式的方式 new一個新的mvvm

1實現一個數據監聽器Observer,能夠對數據對象的所有屬性進行監聽,如有變動可拿到最新值並通知訂閱者
2實現一個指令解析器Compile,對每個元素節點的指令進行掃描和解析,根據指令模板替換數據,以及綁定相應的更新函數
3實現一個Watcher,作爲連接Observer和Compile的橋樑,能夠訂閱並收到每個屬性變動的通知,執行指令綁定的相應回調函數,從而更新視圖
4new一個新的mvvm 入口函數


3 vue-router
動態路由匹配我們經常需要把某種模式匹配到的所有路由,全都映射到同個組件 例如我們有一個 goods 組件,對於所有 ID 各不相同的商品,都要使用這個組件來渲染。
動態路由
那麼,我們可以在 vue-router 的路由路徑中使用動態路徑參數(dynamic segment)來達到這個效果:

{
    path:"/two:id",
    component:{template:"#b"},
},

嵌套路由
我們經常將動態路由和嵌套路由共同使用,嵌套路由即是在原路由的基礎上增加一個 children ,children 是一個數組.並且我們還需要在原來的組件上添加< /router-view >來渲染 chlidren 裏面的路由.

  {
    // name: 'Layout',
    path: '/',
    component: () => import('@/views/Layout'),
    children: [{
        name: 'home',
        path: '',
        component: () => import('@/views/home')
      },
      {
        name: 'user',
        path: '/user',
        component: () => import('@/views/user')
      },
    ]
  },

命名路由
有時我們通過一個名稱來標識一個路由顯得更方便一些,特別是在鏈接一個路由,或者是執行一些跳轉的時候。你可以在創建 Router 實例的時候,在 routes 配置中給某個路由設置名稱。

const routes = [
{
        path:"/login",
        name:"login",
        component:{template:"#a"}
    },
]

要鏈接到一個命名路由,可以給 router-link 的 to 屬性傳一個對象:
<router-link :to="{ name: 'login'}">User</router-link>

2一句話就能回答的面試題 搬運

1.css只在當前組件起作用
答:在style標籤中寫入scoped即可 例如:<style scoped></style>

2.v-if 和 v-show 區別
答:v-if按照條件是否渲染,v-show是display的block或none;

3.和router的區別答:

4.vue.js的兩個核心是什麼?
答:數據驅動、組件系統

5.vue幾種常用的指令
答:v-for 、 v-if 、v-bind、v-on、v-show、v-else

6.vue常用的修飾符?
答:.prevent: 提交事件不再重載頁面;.stop: 阻止單擊事件冒泡;.self: 當事件發生在該元素本身而不是子元素的時候會觸發;.capture: 事件偵聽,事件發生的時候會調用

7.v-on 可以綁定多個方法嗎?
答:可以

8.vue中 key 值的作用?
答:當 Vue.js 用 v-for 正在更新已渲染過的元素列表時,它默認用“就地複用”策略。如果數據項的順序被改變,Vue 將不會移動 DOM 元素來匹配數據項的順序, 而是簡單複用此處每個元素,並且確保它在特定索引下顯示已被渲染過的每個元素。key的作用主要是爲了高效的更新虛擬DOM。

9.什麼是vue的計算屬性?
答:在模板中放入太多的邏輯會讓模板過重且難以維護,在需要對數據進行復雜處理,且可能多次使用的情況下,儘量採取計算屬性的方式。好處:
①使得數據處理結構清晰;
②依賴於數據,數據更新,處理結果自動更新;
③計算屬性內部this指向vm實例;
④在template調用時,直接寫計算屬性名即可;
⑤常用的是getter方法,獲取數據,也可以使用set方法改變數據;
⑥相較於methods,不管依賴的數據變不變,methods都會重新計算,但是依賴數據不變的時候computed從緩存中獲取,不會重新計算。

10.vue等單頁面應用及其優缺點
答:優點:Vue 的目標是通過儘可能簡單的 API 實現響應的數據綁定和組合的視圖組件,核心是一個響應的數據綁定系統。MVVM、數據驅動、組件化、輕量、簡潔、高效、快速、模塊友好。
缺點:不支持低版本的瀏覽器,最低只支持到IE9;不利於SEO的優化(如果要支持SEO,建議通過服務端來進行渲染組件);第一次加載首頁耗時相對長一些;不可以使用瀏覽器的導航按鈕需要自行實現前進、後退。

11.怎麼定義 vue-router 的動態路由? 怎麼獲取傳過來的值
答:在 router 目錄下的 index.js 文件中,對 path 屬性加上 /:id,使用 router 對象的 params.id 獲取。

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