微信小程序前端面經

?一、技術棧與編碼能力(10min)

1. Vue 3 & Composition API

Q1:請解釋一下?ref?和?reactive?的區別?你在項目中是如何使用的?

答:ref是包裝一個原始值或對象,通過.value訪問,reactive是對對象的深度響應式處理,不能用于原始值。 在模板中使用,ref會自動解包,不需要寫.value,而reactive直接訪問屬性即可。

加分點:toRefs的作用及如何在組合函數中使用它。提到<script setup>中自動解包機制。

toRefs是Vue3組合式API中的一個工具函數。當解構reactive創建的響應式對象時,直接解構會失去響應式,toRefs可解決這個問題。toRefs用于將響應式對象的每個屬性轉換為獨立的ref,保持屬性的響應式并避免解構時丟失響應式。toRefs轉換后的屬性是ref。需通過.value訪問值,toRefs只能處理reactive創建的對象。

組合函數返回的狀態:return toRefs(reactiveObj)

Q2:<script setup>?和傳統?<script>?有什么不同?它的優勢和局限是什么?

答:<script setup>是vue3的語法糖,簡化了組合式API的使用,優勢是不需要顯式的setup()函數,默認導出變量為組件的公開API ,自動引入defineProps、defineEmits等編譯器宏。不利于代碼復用(可結合自定義的Hook解決)

Q3:Vue 3 中的響應式原理和 Vue 2 有何不同?

答:vue2使用Object.defineProperty實現響應式,只能攔截對象已有屬性的變化,無法檢測新增、刪除屬性。通過data()函數返回對象,無法單獨暴露響應式對象,必須依賴組件實例,通過this訪問。不支持Map、Set等ES6集合類型 vue2中的map不是響應式的

Vue3用Proxy代理整個對象,動態攔截所有操作(包括新增、刪除屬性,數組索引修改),支持深層響應式。使用ref和reactive創建獨立響應式變量,可將響應式狀態和邏輯提取到組合函數中。map是響應式的,需用ref和reactive包裹進行顯示轉換(const map = reactive(new Map())

功能Vue 2Vue 3
創建響應式對象data()?+?Vue.observable()reactive()?/?ref()
新增響應式屬性Vue.set()直接賦值(Proxy 自動支持)
刪除響應式屬性Vue.delete()直接?delete
數組響應式重寫方法(如?push原生支持索引修改
響應式工具toRefstoRefisReactive

2. TypeScript

Q4:你是如何組織?/types/?下的類型的?有使用過?type?還是?interface?為什么?

答:通常將接口模型放在/types下,按模塊分目錄結構

使用interface定義對象結構,方便擴展和繼承,使用type定義聯合類型,交叉類型、泛型等復雜結構

泛型:用類型變量(如<T>)表示動態類型,T由調用時決定。

聯合類型:允許一個變量或參數同時支持多種類型,通過 | 符號連接,擴展類型的靈活性。

交叉類型:用 & 符號將多個類型合并為一個包含所有成員的新類型,“與”的關系,一個值滿足多個類型的約束。

  • 3. 組件通信與復用

Q5:舉個例子說明你使用過?provide/inject?或?Pinia/Vuex?的場景。

provide/inject:用于跨層級傳遞主題配置、語言設置等上下文信息。

// 父組件
provide('theme', 'dark');// 子組件
inject('theme');

Pinia:用于全局狀態管理,如用戶登錄狀態、收藏學校列表。

const userStore = useUserStore();
userStore.login();

二、項目架構與工程實踐(10min)

4. 模塊劃分與組織結構

Q7:請介紹一下項目的整體結構(如?/pages,?/components,?/stores,?/types?等目錄的作用)。

答:

  • /pages:頁面級組件,對應路由。
  • /components:通用組件庫,如按鈕、標簽、導航欄等。
  • /stores:狀態管理模塊,使用 Pinia。
  • /types:類型定義文件,按模塊劃分。
  • /common:公共工具類和網絡請求封裝。

5. 接口調用與網絡層設計

Q8:你是如何封裝網絡請求模塊的?是否統一處理了錯誤、攔截器、Token 刷新?
  • 使用 Axios 或 UniApp 原生?uni.request?封裝了一個統一的?http.ts
  • 添加了請求攔截器(添加 Token)、響應攔截器(統一錯誤提示)。
  • 錯誤碼集中處理(如 401 登錄失效跳轉登錄頁)。
  • Token 刷新機制(如使用 refresh token)。

6. 狀態管理

Q9:項目中使用的是 Pinia 嗎?為什么選擇它而不是 Vuex?
  • 優點:
    • 更簡潔的 API,無需?mutations
    • 支持模塊化、命名空間。
    • 更好的 TypeScript 支持。
    • 性能更優,體積更小。

Vuex需要定義mutation/actions/getters,基于Vue2的響應式系統

Pinia直接使用Composition API風格,無需mutations,直接通過actions修改狀態,基于Vue3的響應式系統(Proxy實現),按需加載store ,僅支持Vue3

三、性能與調試(5min)

7. 性能優化

Q10:你是如何做頁面加載優化的?比如懶加載、骨架屏、分包等。
  • 使用 Vue 的異步組件實現懶加載。
  • 頁面首屏采用骨架屏減少白屏時間。
  • 使用 uni.preloadPages 實現頁面預加載。
  • 對大型功能模塊進行分包(subpackages)。
  • 圖片懶加載、CDN 加速。

四、協作與測試(5min)

8. Git 協作流程

Q11:團隊中是如何進行 Git 分支管理的?有使用 PR 流程嗎?

答:有一個主分支develop ,再每個人建立自己的功能分支,開發完成后提交pr,合并,處理沖突

Q12:有沒有使用過自定義 Hook 來封裝邏輯復用?

答:有,在多個組件中復用篩選、排序、搜索等功能,使用自定義的Hook.

function useFilter(list) {const filteredList = computed(() => filterLogic(list.value));return { filteredList };
}

Hook(鉤子)是編程中的一種攔截或擴展程序執行的流程技術,允許開發者在特定階段插入自定義的代碼,不同場景Hook的實現和用途不同

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

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

相關文章

rknn toolkit2搭建和推理

安裝Miniconda Miniconda - Anaconda Miniconda 選擇一個 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh進行安裝 下面配置一下載源 # 清華大學源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…

WordPress插件:AI多語言寫作與智能配圖、免費AI模型、SEO文章生成

厭倦手動寫WordPress文章&#xff1f;AI自動生成&#xff0c;效率提升10倍&#xff01; 支持多語言、自動配圖、定時發布&#xff0c;讓內容創作更輕松&#xff01; AI內容生成 → 不想每天寫文章&#xff1f;AI一鍵生成高質量內容&#xff01;多語言支持 → 跨境電商必備&am…

Houdini POP入門學習07 - 分組

使用PopGroup可對粒子進行分組操作&#xff0c;并通過表達式從而更靈活的處理粒子行為。 1.創建box作為發射器&#xff0c;連接popnet節點。 2.雙擊進入popnet&#xff0c;添加popwind添加向上風力。現在播放粒子可見粒子向上方移動。 3.添加popgroup進行分組&#xff0c;開啟…

機器學習復習3--模型評估

誤差與過擬合 我們將學習器對樣本的實際預測結果與樣本的真實值之間的差異稱為&#xff1a;誤差&#xff08;error&#xff09;。 誤差定義&#xff1a; ①在訓練集上的誤差稱為訓練誤差&#xff08;training error&#xff09;或經驗誤差&#xff08;empirical error&#x…

Docker 鏡像上傳到 AWS ECR:從構建到推送的全流程

一、在 EC2 實例中安裝 Docker&#xff08;適用于 Amazon Linux 2&#xff09; 步驟 1&#xff1a;連接到 EC2 實例 ssh -i your-key.pem ec2-useryour-ec2-public-ip步驟 2&#xff1a;安裝 Docker sudo yum update -y sudo amazon-linux-extras enable docker sudo yum in…

MobileNet 改進:基于MobileNetV2和SSPP的圖像分類

1.創新點分析 在計算機視覺領域,高效的圖像分類模型一直是研究熱點。 本文將詳細解析一個結合了MobileNetV2和空間金字塔池化(SSPP)的深度學習模型實現。 模型概述 這個代碼實現了一個輕量級但功能強大的圖像分類器,主要包含兩個核心組件: MobileNetV2作為特征提取器 自定…

Java中List的forEach用法詳解

在 Java 中&#xff0c;List.forEach() 是 Java 8 引入的一種簡潔的遍歷集合元素的方法。它基于函數式編程思想&#xff0c;接受一個 Consumer 函數式接口作為參數&#xff0c;用于對集合中的每個元素執行操作。 基本語法 java 復制 下載 list.forEach(consumer); 使用示…

涂鴉T5AI手搓語音、emoji、otto機器人從入門到實戰

“&#x1f916;手搓TuyaAI語音指令 &#x1f60d;秒變表情包大師&#xff0c;讓萌系Otto機器人&#x1f525;玩出智能新花樣&#xff01;開整&#xff01;” &#x1f916; Otto機器人 → 直接點明主體 手搓TuyaAI語音 → 強調 自主編程/自定義 語音控制&#xff08;TuyaAI…

計算機視覺與深度學習 | 基于MATLAB的相機標定

基于MATLAB的相機標定:原理、步驟與代碼實現 相機標定 基于MATLAB的相機標定:原理、步驟與代碼實現MATLAB相機標定完整流程1. 準備工作2. 采集標定圖像3. 導入圖像并檢測角點4. 生成世界坐標5. 執行相機標定6. 分析標定結果7. 應用標定結果校正圖像相機標定關鍵概念相機參數類…

物聯網專業核心課程以及就業方向

物聯網專業作為信息技術與產業應用深度融合的交叉學科&#xff0c;其課程體系覆蓋硬件、軟件、網絡、數據等全鏈條技術&#xff0c;就業方向則隨智能技術普及呈現多元化趨勢。以下是基于最新行業動態與教育實踐的系統分析&#xff1a; &#x1f4da; 一、物聯網專業核心課程體系…

mac 安裝homebrew (nvm 及git)

mac 安裝nvm 及git 萬惡之源 mac 安裝這些東西離不開Xcode。及homebrew 一、先說安裝git步驟 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安裝 Git&#xff08;推薦&#xff09; 步驟如下&#xff1a;打開終端&#xff08;Terminal.app&#xff09; 1.安裝 Homebrew…

vue3 定時器-定義全局方法 vue+ts

1.創建ts文件 路徑&#xff1a;src/utils/timer.ts 完整代碼&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 創建定時器con…

線性代數證明:把行列式的某一行(列)的k倍加到另一行(列),行列式的值不變

線性代數證明 把行列式的某一行&#xff08;列&#xff09;的k倍加到另一行&#xff08;列&#xff09;&#xff0c;行列式的值不變&#xff1a; 注意五角星的位置要用到另一條性質&#xff1a;若行列式的某一行&#xff08;列&#xff09;的元素都是兩數之和&#xff0c;則可以…

webrtc 在線測試, 如何在線拉流測試

1. 如下所示&#xff0c;使用騰訊提供的網頁即可&#xff0c;非常贊&#xff0c;測試直播拉流 webrtc協議 WebRTC Player Demo 2.截圖&#xff1a;

基于Flask前后端分離智慧安防小區系統

基于Flask前后端分離智慧安防小區系統 本項目是一個基于前后端分離架構的智慧安防小區管理系統&#xff0c;采用現代化的技術棧和完善的功能設計&#xff0c;旨在提供一個高效、安全的小區管理解決方案。 技術架構 前端技術棧 基于Vue 3框架開發參考Geeker-Admin項目的基礎…

深入解析 Linux 死鎖:原理、原因及解決方案

深入解析 Linux 死鎖&#xff1a;原理、原因及解決方案 目錄 **深入解析 Linux 死鎖&#xff1a;原理、原因及解決方案**前言&#xff1a;一次凌晨 3 點的 “服務器崩潰”&#xff0c;揭開死鎖的致命性一、死鎖的基礎&#xff1a;資源與競爭的 “導火索”1.1 資源&#xff1a;死…

C學習--內存管理

#靈感# 當計算機執行一個程序時&#xff0c;必須有一種方法來存儲程序本身和運算所得的數據。 總的來講&#xff0c;計算機硬件中任何能夠存儲和檢索信息的部分都是存儲設備。當前運行的程序存放的存儲器稱為主存儲器&#xff08;primary storage&#xff09;&#xff0c;常常…

使用 Docker Compose 安裝 PostgreSQL 16

前面是指南&#xff0c;后面是實際工作日志。 1. 創建 docker-compose.yml 文件 yaml 復制 下載 version: 3.9 services:postgres:image: postgres:16container_name: postgres-16environment:POSTGRES_USER: your_username # 替換為你的用戶名POSTGRES_PASSWORD: your…

從數據報表到決策大腦:AI重構電商決策鏈條

在傳統電商運營中&#xff0c;決策鏈條往往止步于“數據報表層”&#xff1a;BI工具整合歷史數據&#xff0c;生成滯后一周甚至更久的銷售分析&#xff0c;運營團隊憑經驗預判需求。當爆款突然斷貨、促銷庫存積壓時&#xff0c;企業才驚覺標準化BI的決策時差正成為增長瓶頸。 一…

SpringBoot 自動化部署實戰:CI/CD 整合方案與避坑指南

引言 在微服務架構盛行的今天&#xff0c;SpringBoot 憑借其開箱即用的特性成為 Java 后端開發的主流框架。然而&#xff0c;隨著項目規模擴大&#xff0c;手動部署的效率瓶頸逐漸顯現。本文將結合 GitLab CI/CD、Jenkins 等工具&#xff0c;深入探討 SpringBoot 項目的自動化部…