微信小程序前端面经

 一、技术栈与编码能力(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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 项目的自动化部…