【每日前端面經】2024-03-03

題目來源: 牛客

說說你對Vue3的理解?

  • Vue2面對對象編程,Vue3函數時編程
  • 對TS支持的更好
  • 選項式API替代組合式API
  • 響應式原理由Object.defineProperty變為Proxy
  • 支持template中存在多個根節點
  • 重寫虛擬DOM
  • 增加setup修飾符
  • 支持tree-shaking,減小體積
  • 組件渲染優化(Vue3支持單獨渲染父子組件)
  • Vue3使用createApp,Vue2使用new Vue()
  • diff算法優化,使用靜態樹提升

Vue如何實現的響應式

Vue2

當把一個普通的JS對象傳入Vue實例作為data選項,Vue將遍歷此對象所有的屬性并通過Object.defineProperty為其設置getter和setter,從而讓Vue能夠追蹤依賴的變化,在被訪問和修改時通知變更。每個組件實例都有一個wacher實例,會把渲染過程中需要的數據記錄為依賴,當依賴項的setter觸發時,會通知watch,然后把它關聯的組件重新渲染

  • Vue無法檢測對象屬性的添加或移除,可以使用vm.$set(obj, property, value)為響應式對象添加響應式屬性
  • Vue無法檢測直接使用索引值設置數組項或修改數組長度,可以使用vm.$set(array, index, newValue)來響應式按索引修改屬性值或者使用splice

Vue3

Vue3采用Proxy和Reflect的方法攔截對對象的交互

const exam= {name: "TOM"
};
const handler = {get: function (target, property) {// 檢查當前運行的副作用,并將當前屬性添加為副作用的依賴——訂閱track(target, property);return Reflect.get(target.key);},set: function (target, property, value) {// 觸發以target.property為依賴的副作用進行更新——發布trigger(target, property);return Reflect.set(target, key, value);}
};
const proxy = new Proxy(exam, handler);
proxy.name = "Jerry";
console.log(proxy.name);

Vue生命周期

Vue2

  • beforeCreate: 組件初始化之后,進行數據偵聽和事件/偵聽器的配置之前執行
  • created: 組件創建完成之后立即同步執行,已配置數據偵聽、計算屬性、方法等回調函數
  • beforeMount: 掛載開始之前執行,相關的render函數首次被調用
  • mounted: 組件掛載后執行,不能保證所有的子組件也都被掛載完畢
  • beforeUpdate: 數據發生改變,DOM被更新之前執行
  • updated: 數據更改導致虛擬DOM重新渲染和更新完畢之后調用
  • activated: 被keep-alive緩存的組件激活時調用
  • deactivated: 被keep-alive緩存的組件失活時調用
  • beforeDestoryed: 組件銷毀之前調用
  • destoryed: 組件銷毀之后調用
  • errorCaptured: 捕獲到后代組件的錯誤時調用

Vue3

  • onMounted: 組件掛載完畢后執行
  • onUpdated: 組件因為響應式狀態變更而更新其DOM樹后執行
  • onUnmounted: 組件卸載之后執行
  • onBeforeMount: 組件掛載之前執行
  • onBeforeUpdate: 組件因為響應式狀態變更而更新其DOM樹前執行
  • onBeforeUnmount: 組件卸載之前執行
  • onErrorCaptured: 捕獲了后代組件傳遞的錯誤時執行
  • onRenderTracked: 組件渲染過程中追蹤到響應式依賴時調用
  • onRenderTriggered: 組件響應式依賴的變更觸發了組件渲染時調用
  • onActivated: 若組件是keepAlice緩存樹的一部分,當組件被插入到DOM中執行
  • onDeactivated: 若組件是keepAlice緩存樹的一部分,當組件被從DOM中移除執行
  • onServerPrefetch: 組件實例在服務器上被渲染之前調用

created和mounted這兩個生命周期中請求數據的區別

created是在組件實例一旦創建完成的時候立刻調用,這時候頁面dom節點并未生成mounted是在頁面dom節點渲染完畢之后就立刻執行的觸發時機上created是比mounted要更早的兩者相同點:都能拿到實例對象的屬性和方法討論這個問題本質就是觸發的時機,放在mounted請求有可能導致頁面閃動(頁面dom結構已經生成),但如果在頁面加載前完成則不會出現此情況建議:放在create生命周期當中

對nextTick的理解

Vue在更新DOM時時異步執行的。當數據發生變化時,Vue將開啟一個異步更新隊列,視圖需要等隊列中所有數據變化完成之后,再統一進行更新

對slot的理解?slot使用場景有哪些?

Vue組件通過插槽的方式實現內容的分法,它允許我們在父組件中編寫DOM并在子組件渲染時把DOM添加到子組件的插槽中,使用起來非常方便。在實現上,Vue組件的插槽內容會被編譯為插槽函數,插槽函數的返回值就是向槽位填充的內容。<slot>標簽則會被編譯為插槽函數的調用,通過執行對應的插槽函數,得到外部向槽位填充的內容(即虛擬DOM),最后將該內容渲染到槽位中

通過插槽可以讓用戶可以拓展組件,去更好地復用組件和對其做定制化處理。如果父組件在使用到一個復用組件的時候,獲取這個組件在不同地方有少量的更改,如果去重寫組件是一件不明智的事情。通過slot插槽向組件內部指定位置傳遞內容,完成這個復用組件在不同場景的應用。比如布局組件、表格列、下拉選、彈框顯示內容等

對前端工程化的理解

前端工程化是一種思想,主要目的是為了提高效率和降低成本,即提高開發過程中的開發效率并減少不必要的重復工作時間等。可以從模塊化、組件化、規范化和自動化四個方面著手

項目優化

  • 瀏覽器
    • 減少HTTP請求
    • 使用HTTP2.0
    • 設置瀏覽器緩存策略
    • 白屏時間做加載動畫
  • 資源
    • 靜態資源CDN
    • 靜態資源單獨域名
    • GZIP壓縮
    • 做服務端渲染SSR
    • 將CSS放在頭部,JS放在尾部
  • 圖片
    • 字體圖標代替圖片圖標
    • 精靈圖
    • 圖片懶加載
    • 圖片預加載
    • 使用PNG格式
    • 小于10KB的圖片轉為BASE64
  • 代碼
    • 慎用全局變量
    • 緩存全局變量
    • 減少回流與重繪
    • 節流防抖
    • 少用閉包
    • 減少數據讀取次數
    • 文檔碎片優化
    • 減少判斷層級
  • 項目
    • 長列表優化
    • web worker
    • 避免iframe
  • 打包

面試官:你了解過Vue3嗎?(Vue3知識點匯總)
Vue中的 n e x t T i c k 有什么作用?說說你對 nextTick有什么作用?說說你對 nextTick有什么作用?說說你對nextTick的理解
說說你對slot的理解?slot使用場景有哪些?
由淺入深,理解 Vue3 組件的插槽(slot)
談談你對生命周期的理解?在created和mounted這兩個生命周期中請求數據有什么區別呢?

新人發文,禮貌求關??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營(動態規劃10,11 股票問題)| 121. 買賣股票的最佳時機 122.買賣股票的最佳時機II

動態規劃10 動態規劃5步曲&#xff0c;個人感覺應該加一步狀態分析 狀態分析&#xff1a; 列出所有的狀態&#xff0c;將狀態歸納后定義dp數組狀態轉移&#xff0c;狀態怎么轉移也就是遞推公式是什么 買賣股票的動規五部曲分析如下&#xff1a; 1 確定dp數組&#xff08;d…

pytorch中的可學習查找表實現之nn.Embedding

假設我們需要一個查找表&#xff08;Lookup Table&#xff09;&#xff0c;我們可以根據索引數字快速定位查找表中某個具體位置并讀取出來。最簡單的方法&#xff0c;可以通過一個二維數組或者二維list來實現。但如果我希望查找表的值可以通過梯度反向傳播來修改&#xff0c;那…

上傳項目的全部依賴到maven私有倉庫-nexus

背景 項目之前的私有倉庫不能使用了&#xff0c;本地倉庫可以&#xff0c;但是一旦clean就沒了&#xff0c;所以在本地有依賴的時候可以自己搭建一個maven私有倉庫然后將依賴全部上傳上去 搭建&#xff1a;使用docker-compose方式搭建 docker-compose文件 version: "3…

C語言入門到精通之練習47:一個偶數總能表示為兩個素數之和。

題目&#xff1a;一個偶數總能表示為兩個素數之和。 程序分析&#xff1a;我去&#xff0c;這是什么題目&#xff0c;要我證明這個問題嗎&#xff1f;真不知道怎么證明。那就把一個偶數串聯成兩個素數吧。 實例 #include<stdio.h> #include<stdlib.h> int Isprime…

Python算法100例-3.1 回文數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展7.巧用字符串技巧 1&#xff0e;問題描述 打印所有不超過n&#xff08;取n<256&#xff09;的其平方具有對稱性質的數&#xff08;也稱回…

在國內如何申請US,visa卡?

隨著跨境與AI的發展大家對美國虛擬卡的需求也越來越多&#xff0c;比如說亞馬遜、ebay、Etsy、ChatGPTPLUS、midjourney、POE等等軟件以及海淘的需要&#xff0c;所以我們需要用到美國虛擬卡的場景就越來越多 如何獲得一張US 虛擬信用卡&#xff1f; 方法很簡單&#xff0c;點…

一線大廠軟件測試面試題及答案解析,2024最強版...

【軟件測試面試突擊班】2024吃透軟件測試面試最全八股文攻略教程&#xff0c;一周學完讓你面試通過率提高90%&#xff01;&#xff08;自動化測試&#xff09; 1、什么是兼容性測試?兼容性測試側重哪些方面? 參考答案: 兼容測試主要是檢查軟件在不同的硬件平臺、軟件平臺上…

CNAN知識圖譜輔助推薦系統

CNAN知識圖譜輔助推薦系統 文章介紹了一個基于KG的推薦系統模型&#xff0c;代碼也已開源&#xff0c;可以看出主要follow了KGNN-LS 。算法流程大致如下&#xff1a; 1. 算法介紹 算法除去attention機制外&#xff0c;主要的思想在于&#xff1a;user由交互過的item來表示、i…

OpenShift AI - 部署并使用 LLM 模型

《OpenShift / RHEL / DevSecOps 匯總目錄》 說明&#xff1a;本文已經在 OpenShift 4.15 RHODS 2.7.0 的環境中驗證 文章目錄 安裝 OpenShift AI 環境安裝 Minio 對象存儲軟件配置 Single Model Serving 運行環境創建項目和 Workbench準備模型和配置 Model Server訪問 LLM 模…

arm-linux-gnueabi、arm-linux-gnueabihf 交叉編譯器區別

1、arm-linux-gnueabi&#xff1a; 使用軟件浮點&#xff08;軟浮點&#xff09;。這意味著所有的浮點運算都將由軟件庫來處理&#xff0c;而不會利用硬件中的浮點運算單元。因此&#xff0c;生成的目標代碼包含了對軟件浮點庫的調用。 2、arm-linux-gnueabihf&#xff1a; 使…

c++八股文:c++新特性

文章目錄 [toc] 1.C11的新特性有哪些2.智能指針3.類型推導4.左值和右值5.nullptr6.范圍for循環7.lambda表達式參考 1.C11的新特性有哪些 語法的改進 &#xff08;1&#xff09;統?的初始化?法 &#xff08;2&#xff09;成員變量默認初始化 &#xff08;3&#xff09;auto關…

mybatis中#{}和${}的區別?

#{}是占位符&#xff0c;預編譯處理&#xff1b;${}是拼接符&#xff0c;字符串替換&#xff0c;沒有預編譯處理。 Mybatis在處理#{}時&#xff0c;#{}傳入參數是以字符串傳入&#xff0c;會將SQL中的#{}替換為?號&#xff0c;調用PreparedStatement的set方法來賦值。 Mybat…

DCTNet

DCTNet http://giantpandacv.com/academic/%E7%AE%97%E6%B3%95%E7%A7%91%E6%99%AE/%E9%A2%91%E5%9F%9F%E4%B8%AD%E7%9A%84CNN/CVPR%202020%20%E5%9C%A8%E9%A2%91%E5%9F%9F%E4%B8%AD%E5%AD%A6%E4%B9%A0%E7%9A%84DCTNet/ 一個對輸入圖像進行頻域轉換和選擇的方法&#xff0c;達到…

python實現手機號歸屬地查詢

手機上突然收到了某銀行的短信提示&#xff0c;看了一下手機的位數&#xff0c;正好是11位。我一想&#xff0c;這不就是標準的手機號碼嗎&#xff1f;于是一個想法涌上心頭——用python的庫實現查詢手機號碼歸屬地查詢自由。 那實現的效果如下&#xff1a; 注&#xff1a;電…

達夢數據庫基礎操作(一):用戶操作

達夢數據庫基礎操作(一)&#xff1a;用戶操作 1 達夢運行狀態 SELECT banner as 版本信息 FROM v$version;1.2 達夢版本號 SELECT banner as 版本信息 FROM v$version;1.3 用戶相關操作 默認用戶名密碼&#xff1a;SYSDBA/SYSDBA 注意&#xff1a;在哪個數據庫下創建的用戶…

2.3_3 進程互斥的硬件實現方法

文章目錄 2.3_3 進程互斥的硬件實現方法&#xff08;一&#xff09;中斷屏蔽方法&#xff08;二&#xff09;TestAndSet指令&#xff08;三&#xff09;Swap指令 總結&#xff08;四&#xff09;互斥鎖 2.3_3 進程互斥的硬件實現方法 學習提示&#xff1a; 1.理解各方法的原理 …

寶塔Linux面板遷移網站數據的詳細步驟是什么?

寶塔Linux面板遷移網站數據的詳細步驟是什么&#xff1f; 準備工作&#xff1a;確保寶塔面板處于最新版本并與服務器環境一致。如果需要遷移到其他機器&#xff0c;需要將遷入服務器的寶塔面板信息和API秘鑰填寫好。秘鑰的有效期為7天&#xff0c;建議在使用后手動關閉接口以保…

Python從0到100(二):Python語言介紹及第一個Pyhon程序

前言&#xff1a; 零基礎學Python&#xff1a;Python從0到100最新最全教程。 想做這件事情很久了&#xff0c;這次我更新了自己所寫過的所有博客&#xff0c;匯集成了Python從0到100&#xff0c;共一百節課&#xff0c;幫助大家一個月時間里從零基礎到學習Python基礎語法、Pyth…

springcloud:3.3測試重試機制

服務提供者【test-provider8001】 Openfeign遠程調用服務提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相關接口 測試遠程調用&#xff1a;http://localhost:8001/payment/index 服務消費者【test-consumer-resilience4j8004】 Openfeign遠程調用消費者搭建 文章地址http:/…

Vue 3 中如何使用全局 API?

Vue 3 中的全局 API 使用詳解 Vue 3 相較于 Vue 2 在全局 API 的使用上有了較大的變化。Vue 3 引入了新的全局 API 創建方式&#xff0c;并通過 createApp 方法替代了 Vue 2 中的 new Vue()。這種變化使得 Vue 3 在全局 API 的使用上更加靈活&#xff0c;也更好地支持了 tree-…