NodeJS全栈开发面试题讲解——P5前端能力(React/Vue + API调用)
✅ 5.1 如何使用 React/Vue 发起后端请求?用什么库?
面试官您好,在实际项目中我们通常使用
axios
、fetch
或框架提供的封装库发起后端请求。
🔧 常用库对比:
库 | 框架适配 | 优点 |
---|---|---|
axios | 通用 | 默认支持拦截器、取消请求、请求体转换 |
fetch | 通用 | 原生支持但较原始,无拦截器 |
useSWR | React | 适合缓存和自动请求更新(推荐) |
Vue Resource | Vue 2 已弃用 | 已被淘汰 |
@vueuse/core | Vue 3 | 配合 Composition API 很方便 |
🧩 示例:React 中使用 axios(Hooks + 拦截器)
import axios from 'axios';
import { useEffect, useState } from 'react';const api = axios.create({baseURL: '/api',timeout: 5000,
});export function useUserData() {const [data, setData] = useState(null);useEffect(() => {api.get('/user/info').then(res => setData(res.data));}, []);return data;
}
✅ 5.2 状态管理你用什么?Redux、Pinia、Zustand 等对比
状态管理选择要结合项目复杂度和框架生态,React 我常用 Zustand 或 Redux Toolkit,Vue 我用 Pinia。
🔍 状态管理库对比:
名称 | 所属框架 | 特点 | 使用建议 |
---|---|---|---|
Redux Toolkit | React | 官方推荐,类型安全,支持异步 | 大型项目推荐 |
Zustand | React | 极简、无模板代码、Hook 风格 | 中小型项目非常适合 |
Recoil | React | 原子化状态,更适合组件隔离场景 | 组件粒度状态管理 |
Vuex | Vue 2 | 老牌方案,API 繁琐 | 不推荐新项目使用 |
Pinia | Vue 3 | 轻量、支持模块拆分、Composition API | Vue 3 项目首选 |
示例:Zustand 创建用户状态(React)
import create from 'zustand';export const useUserStore = create(set => ({user: null,setUser: (data) => set({ user: data })
}));
示例:Pinia 创建用户状态(Vue)
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({ user: null }),actions: {setUser(data) {this.user = data;}}
});
✅ 5.3 如果一个接口很慢,你如何在 UI 上做友好的处理?
面试官我会从「用户感知」和「界面提示」两个维度入手优化体验:
⏳ 接口慢时的 UI 优化手段:
-
骨架屏:如加载用户卡片、文章列表的占位框架;
-
loading Spinner:展示加载中状态,防止用户误操作;
-
请求超时提示:超过 X 秒提示“网络可能异常”;
-
请求缓存 / 懒加载:结合 SWR / React Query / keep-alive 优化重复加载;
-
预请求策略:页面还未进入前发起关键数据请求,提升首屏速度。
示例(React + Skeleton):
return isLoading ? <Skeleton count={5} /> : <UserList data={users} />;
✅ 5.4 如何处理请求节流、防抖?封装方式?
防抖与节流是优化高频请求的重要手段,尤其在搜索框、滚动加载等场景非常常见。
🔄 原理区别:
名称 | 原理 | 应用场景 |
---|---|---|
防抖 | 延迟执行,用户停止操作后触发 | 搜索、输入提示 |
节流 | 固定时间间隔执行一次 | 滚动加载、按钮点击防重复 |
✅ Lodash 工具函数(实战推荐):
import { debounce, throttle } from 'lodash';const onSearch = debounce((val) => {fetchData(val);
}, 500);const onScroll = throttle(() => {loadMore();
}, 1000);
✅ 自定义封装 Hook(React)
function useDebounce(fn, delay) {const timer = useRef(null);return (...args) => {clearTimeout(timer.current);timer.current = setTimeout(() => fn(...args), delay);};
}
✅ 5.5 如何将分页、筛选、排序的参数传给后端?
这是常规表格 / 列表 API 设计问题,建议采用统一参数命名规范。
📌 传参结构建议:
GET /api/users?page=1&pageSize=10&sortBy=name&order=asc&status=active
参数 | 描述 |
---|---|
page | 当前页码 |
pageSize | 每页条数 |
sortBy | 排序字段 |
order | 排序方向(asc/desc) |
filters | 状态、关键词等条件 |
✅ React 示例:
const [params, setParams] = useState({page: 1,pageSize: 10,sortBy: 'createdAt',order: 'desc',status: 'active'
});useEffect(() => {axios.get('/api/posts', { params });
}, [params]);
✅ Vue 示例(配合分页组件):
const params = reactive({page: 1,pageSize: 10,sortBy: 'createdAt',order: 'desc'
});watch(() => [params.page, params.pageSize], () => {fetchData(params);
});
✅ 总结
编号 | 技术点 | 核心亮点 |
---|---|---|
5.1 | 请求库选择 | axios 最通用、SWR 自动缓存、NestJS 中也支持 axios |
5.2 | 状态管理 | Vue 用 Pinia,React 建议 Zustand 或 Redux Toolkit |
5.3 | UI 慢接口处理 | 骨架屏、loading、预加载 |
5.4 | 节流防抖封装 | lodash、React Hook、自定义封装 |
5.5 | 分页筛选排序参数传递 | page、pageSize、sortBy、filters 一致性封装 |
相关文章:
NodeJS全栈开发面试题讲解——P5前端能力(React/Vue + API调用)
✅ 5.1 如何使用 React/Vue 发起后端请求?用什么库? 面试官您好,在实际项目中我们通常使用 axios、fetch 或框架提供的封装库发起后端请求。 🔧 常用库对比: 库框架适配优点axios通用默认支持拦截器、取消请求、请求体…...
[001]从操作系统层面看锁的逻辑
从操作系统层面,锁 (Lock) 是一种同步机制,用于控制多个线程或线程对共享资源的访问,防止竞态条件(race condition).常见的锁包括互斥锁(mutex)、读写锁(read-write lock)、自旋锁(spinlock)等。…...
初识 Pytest:测试世界的智能助手
概述 在编写程序的过程中,我们常常需要确认代码是否按照预期工作。为了提高效率并减少人为错误,我们可以借助工具来帮助我们完成这一过程。Pytest 就是这样一个用于编写和运行测试的 Python 工具。 什么是 Pytest? Pytest 是一个用于 Pyth…...

stm32 + ads1292心率检测报警设置上下限
这个项目是在做心率检测的时候一个小伙伴提出来的,今年五一的时候提出来的想法,五一假期的时候没时间,也没心情做这个,就把这个事情搁置了,在月中做工作计划的时候,就把这个小项目排进来了,五一…...

项目练习:element ui 的icon放在button的右侧
文章目录 一、需求描述二、左侧实现三、右侧实现 一、需求描述 我们知道,element ui的button一般都会配置一个icon 这个icon默认是放在左侧的。 如何让它放在右侧了? 二、左侧实现 <el-buttontype"primary"plainicon"el-icon-d-arr…...

性能诊断工具AWR配置策略与报告内容解析
AWR(Automatic Workload Repository)是 Oracle 数据库中的一个重要性能诊断工具。AWR 会按照固定的时间间隔自动收集数据库系统的性能统计信息。这些信息涵盖了数据库运行状态的方方面面,像SQL 执行情况、系统资源利用率、等待事件等。AWR抓取…...

Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换
基于前两篇的内容,为页面添加主题切换功能,实现网站页面的暗黑模式: Tailwind css实战,基于Kooboo构建AI对话框页面(一)-CSDN博客 Tailwind css实战,基于Kooboo构建AI对话框页面(…...
OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比
OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比 您提到的两种赋值操作属于不同场景,它们的性能和稳定性取决于具体使用方式。下面从几个维度进行分析: 1. 操作本质对比 (1)OleDbParameter.Value 用途…...
Unity3D ET框架游戏脚本系统解析
前言 ET框架在Unity3D中实现的GamePlay脚本系统是一种革命性的、基于ECS(实体-组件-系统)架构的设计,它彻底改变了传统的基于MonoBehaviour的游戏逻辑编写方式。其核心思想是追求高性能、高解耦、易热更新,特别适合大型复杂的网络…...
函数的定义、调用、值传递、声明、非安全函数
函数 函数(英文“function”)把一些经常用到的代码封装起来,这样可以减少一些冗余代码、重复的代码。一个大的程序,它是由很多很多程序块组成的,每个模块实现一个特定的功能。 函数的定义 格式 英文版 return_typ…...

MySQL 8.0 OCP 英文题库解析(十一)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题91~100 试题91…...
机器学习算法-k-means
今天我们用 「超市顾客分组」 的例子来讲解K-means算法,从原理到实现一步步拆解,保证零基础也能懂! 🛒 例子背景 假设你是超市经理,手上有顾客的以下数据: 顾客ID每月消费金额(元)…...

ADQ36-2通道2.5G,4通道5G采样PXIE
ADQ36是一款高端12位四通道灵活数据采集板,针对高通道数科学应用进行了优化。ADQ36具有以下特性: 4 / 2模拟输入通道每通道2.5 / 5 GSPS7gb/秒的持续数据传输速率两个外部触发器通用输入/输出(GPIO)ADQ36数字化仪包括固件FWDAQ ADQ36简介 特…...
LLM:decoder-only 思考
文章目录 前言一、KV-cache1、为什么使用KV-cache2、KV-cache的运作原理 二、Decoder-only VS Encoder-Decoder1、Decoder-only2、Encoder-Decoder 三、Causal LM VS PrefixLM总结 前言 decoder-only模型是目前大模型的主流架构,由于OpenAI勇于挖坑踩坑,…...

数字创新智慧园区建设及运维方案
该文档是 “数字创新智慧园区” 建设及运维方案,指出传统产业园区存在管理粗放等问题,“数字创新园区” 通过大数据、AI、物联网、云计算等数字化技术,旨在提升园区产业服务、运营管理水平,增强竞争力,实现绿色节能、高效管理等目标。建设内容包括智能设施、核心支撑平台、…...

【科研绘图系列】R语言绘制森林图(forest plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息介绍 本文介绍使用R语言绘制森林图(forest plot)的方法。首先加载必要的R包(grid、forestploter、openxlsx、stringr),导入并预处…...
Springcloud Alibaba自定义负载均衡详解
主要说一下springcloud alibaba 在使用nacos注册中心过程中,请求服务负载均衡的配置方法 引入依赖包 这个依赖包是springcloud在新版本的负载均衡实现,2020版本以上 <dependency><groupId>org.springframework.cloud</groupId><ar…...
深度学习---负样本训练
一、负样本的本质与核心作用 1. 定义与范畴 负样本(Negative Sample)是与目标样本(正样本)在语义、特征或任务目标上存在显著差异的样本。其核心价值在于通过对比学习引导模型学习样本间的判别性特征,而非仅记忆正样本…...

SpringAI+DeepSeek大模型应用开发实战
内容来自黑马程序员 这里写目录标题 认识AI和大模型大模型应用开发模型部署方案对比模型部署-云服务模型部署-本地部署调用大模型什么是大模型应用传统应用和大模型应用大模型应用 大模型应用开发技术架构 SpringAI对话机器人快速入门会话日志会话记忆 认识AI和大模型 AI的发…...
【Python Cookbook】文件与 IO(一)
文件与 IO(一) 1.读写文本数据2.打印输出至文件中3.使用其他分隔符或行终止符打印4.读写字节数据5.文件不存在才能写入 1.读写文本数据 你需要读写各种不同编码的文本数据,比如 ASCII,UTF-8 或 UTF-16 编码等。 使用带有 rt 模式…...
STM32 HAL库函数学习 GPIO篇
1、void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *pGPIO_Init) GPIO外设属于是任何芯片的最基础功能 ,STM32各个系列的GPIO初始化都是一致的,有不同的是部分系列在IO复用使用了单独一个成员属性Alternate 来表明这个IO的具体复用功…...

如何以 9 种方式将照片从 iPhone 传输到笔记本电脑
您的 iPhone 可能充满了以照片和视频形式捕捉的珍贵回忆。无论您是想备份它们、在更大的屏幕上编辑它们,还是只是释放设备上的空间,您都需要将照片从 iPhone 传输到笔记本电脑。幸运的是,有 9 种方便的方法可供使用,同时满足 Wind…...

根据jvm源码剖析类加载机制
根据jvm源码剖析类加载机制 java Test.class之后的大致流程 java Test.class ----> 对于windows操作系统 ----> java.exe调用jvm.dll文件创建JVM, ----> 在创建JVM中先由C的代码创建Boostarp(引导)类加载器, ----&g…...
Mixly1.0/2.0/3.0 (windows系统) 安装教程及使用常见问题解决
大家好!长期以来,不少用户在使用 Mixly 软件过程中遇到了各类问题。为了帮助大家更顺畅地使用该软件,齐护机器人工程师结合自身丰富经验,精心总结并推出了本期教程。在本教程中,我们将从 Mixly 图形化编程软件的安装步…...

DDS通信中间件——DDS-TSN规范
DDS通信中间件——DDS-TSN规范 做了十年DDS通信中间件产品的程序员和大家分享一下对DDS这套规范的个人理解。预期本系列文章将包括以下内容陆续更新: DDS规范概述DCPS规范解读 & QoS策略XTypes规范解读RTPS规范解读DDS安全规范解读DDS-RPC规范解读(…...

JWT安全:弱签名测试.【实现越权绕过.】
JWT安全:假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上,它们可以包含任何类型的数据,但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…...
MATLAB实现井字棋
一、智能决策系统与博弈游戏概述 (一)智能决策系统核心概念 智能决策系统(Intelligent Decision System, IDS)是通过数据驱动和算法模型模拟人类决策过程的计算机系统,核心目标是在复杂环境中自动生成最优策略&#…...

Baklib知识中台加速企业服务智能化实践
知识中台架构体系构建 Baklib 通过构建多层级架构体系实现知识中台的底层支撑,其核心包含数据采集层、知识加工层、服务输出层及智能应用层。在数据采集端,系统支持对接CRM、ERP等业务系统,结合NLP技术实现非结构化数据的自动抽取࿱…...
在AIX环境下修改oracle 11g rac的IP地址
0、当前环境 由于机房网络变更,客户要修改现在RAC的网络地址,这里记录一下。 主机操作系统:AIX 7.2 数据库版本:11.2.0.4 rac 数据库实例名:orcl1/orcl2 当前hosts文件配置 192.168.56.10 rac1 192.168.56.11 …...

VMware Tools 手动编译安装版
OWASPBWA安装VMware tools 安装时,显示如下提示 官方安装手册参考:https://knowledge.broadcom.com/external/article?legacyId1014294 按照提示,下载linux.iso文件,并连接到虚拟机的CDROM里,状态勾选已连接&#x…...