前端高频面试题2024/9/22(偏项目问题--通用后台管理系统)

文章目录

    • 一.前端项目概述
      • 1.系统登录注册模块
        • 1.对注册的密码进行加密 (使用加密中间件bcrypt.js)
        • 2.登录成功后返回token
        • 3.前端登录页面有用到弹性布局,ref和reactive
        • 4.登录头像:文件上传
      • 2.系统设置模块
      • 2.系统首页模块(轮播图+栅格布局+dialog弹窗)
        • 1.弹窗+富文本编辑器wangeditor
      • 3.系统概览模块(echart组件可视化信息,快速点击入口)
        • 1.用了哪些echart图?
      • 4.用户管理模块
        • 1.前端完成分页功能(实现一个算法)
        • 2.用户赋权问题
    • 二.针对项目可能问的问题
      • 1.用ts吗?说一下你常用的知识点。
      • 2.vue3和vue2的区别。
      • 3.说一下你项目中的难点,是怎样解决的?
      • 4.我看你项目中用过node.js,说一下你对前端用node.js的看法
      • 5.你为什么选择用express框架,express和koa的区别
      • 6.说一下computed和watch的区别,及实现原理
      • 7.你工作中有没有自己写过组件,你觉得写组件的原则是什么?
      • 8.用过哪些设计模式?什么场景下会遇到
      • 9.你对高内聚,低耦合怎么理解?
      • 10.做过哪些性能优化?
      • 11.用过哪些加密方式,都怎么用的?
      • 12.ref和reactive的区别?(组件间传值会用上)
      • 13.Dialog对话框是什么?
      • 14.解构赋值是什么?
      • 15.你这里的文件上传是怎么做的?
      • 16.项目中有遇到哪些错误吗?
      • 17.项目中前端你是如何发送请求的?(写一下原生ajax发送请求)
      • 18.基于promise怎么封装这个axios请求?
      • 19.说一下事件循环?
      • 20.多端适配怎么做?
      • 21.echart了解到什么程度,底层是用canvas和re-render
      • 22.路由传参query和params区别
      • 23.

一.前端项目概述

在这里插入图片描述

1.系统登录注册模块

前端通过ts限制数据类型,后端通过joi限制数据类型
这里的这个joi是对输入数据进行限制的中间件
!!

1.对注册的密码进行加密 (使用加密中间件bcrypt.js)
对密码进行加密bcrypt.js
reginfo.password = bcrypt.hashSync(reginfo.password,10)//10是指加密后的长度

这里后端解密(compareSync),其实也不是真正的解密,这种密码一般都是不可逆的

const compareResult = bcrypt.compareSync(loginfo.password,result[0].password)
2.登录成功后返回token

生成返回给前端的token

res.send({
results:results[0]
status:0
message:"登录成功"
token:'Bearer'+tokenStr
})
3.前端登录页面有用到弹性布局,ref和reactive

弹性布局:flex

display:flex
justify-content:space-between

ref:通常用来定义基本数据类型
reactive:如果使用的是数组和对象,就要使用reactive

const activeName = ref('first')
const loginData = reactive({
account:'',
password:'',
})
4.登录头像:文件上传

Multer是一个node.js中间件
用于处理multipart/form-data类型的表单数据
它主要用于上传文件
!!!
通常情况下,上传图片后,这个图片会和上传该图片的用户绑定
我之前做这个部分的时候,用的是image_url绑定的,事实上,用image_url绑定容易出错,可能会出现相同的url地址。
后来的解决方案是使用onlyid去分别绑定图片的地址,然后用这个onlyid去绑定用户
onlyid是使用node.js的crypto库随机生成的。

2.系统设置模块

pinia:因为我们当前的数据是多组件共用的一个数据
pinia是vue的专属状态管理库
它允许你跨组件或页面共享状态

封装了一个面包屑组件

2.系统首页模块(轮播图+栅格布局+dialog弹窗)

首页基本布局:
在这里插入图片描述

1.弹窗+富文本编辑器wangeditor

在这里插入图片描述

3.系统概览模块(echart组件可视化信息,快速点击入口)

在这里插入图片描述

1.用了哪些echart图?

饼状图,柱状图,环形图,折线图

4.用户管理模块

在这里插入图片描述

1.前端完成分页功能(实现一个算法)

在这里插入图片描述

2.用户赋权问题

本系统做的是一个企业管理系统,在企业中不同的岗位有不同的权限,因此我们需要做一个用户赋权的判断。
其实就是一个dialog弹窗,里面有一个单选
在这里插入图片描述

二.针对项目可能问的问题

1.用ts吗?说一下你常用的知识点。

2.vue3和vue2的区别。

1.vue3中引入组合式api,在setup()中可以更加灵活的组合和复用逻辑,vue2中逻辑分布在data,computed,methods中,有局限性。
2.vue3更好的支持ts
3.生命周期不同,vue3生命周期是setup(),onbeforeMount,onMounted,onbeforeUpdate,onUpated,onbeforeUnMount,onUnmounted
4.vue2使用vuex,vue3使用pinia

3.说一下你项目中的难点,是怎样解决的?

图片上传部分,不能直接根据图片url进行绑定用户,因为它这个图片地址可能是一样的,我们需要为头像创建一个唯一id,通过这个唯一id去绑定用户

4.我看你项目中用过node.js,说一下你对前端用node.js的看法

node.js是一个基于chorme V8引擎的JavaScript运行环境。

5.你为什么选择用express框架,express和koa的区别

6.说一下computed和watch的区别,及实现原理

7.你工作中有没有自己写过组件,你觉得写组件的原则是什么?

写过一些小组件,比如面包屑组件,就是一个导航列表,显示你现在正在哪个功能目录下,比如:用户管理模块–>产品管理员这种
还有头组件,页面底部组件这些
原则是可复用性高,能够是代码更简洁,减少代码量比较好

8.用过哪些设计模式?什么场景下会遇到

发布订阅模式
像数据双向绑定,事件总线都是用的发布订阅模式

9.你对高内聚,低耦合怎么理解?

10.做过哪些性能优化?

数据缓存机制,将用户信息缓存在本地,因为很多组件都要用到这个信息
上传大文件是用的异步上传,几个切片并行上传,节省了时间,提高了性能

11.用过哪些加密方式,都怎么用的?

1.有用过一个加密中间件,是一个密码哈希函数,叫bcrypt.hashSync()
用在系统登录注册模块,前端将用户密码传到数据库的时候,传的其实是加密后的密码,下次再判断用户密码是否正确时,就把用户输入的密码加密,将加密后的内容与数据库中存放的加密密码比较,如果相同,就表示用户输入的密码是正确的。

12.ref和reactive的区别?(组件间传值会用上)

ref和reactive都可以用来创建响应式数据
1.ref一般用来定义基本数据类型的响应式数据,而reactive通常用来定义对象数组这种复杂的数据类型。
2.当你给ref赋值时,vue会自动将值包装到一个带有.value属性的对象中,因此,后面访问,可以通过ref.value来修改这个值

import {ref} from 'vue'
const count = ref(0)
console.log(count.value)
count++
console.log(count.value)

3.当你用reactive创建一个响应式数据时,赋值给他的对象不会被包装,你可以直接访问他的属性

import {reactive} from 'vue'
const state = reactive({
count:0;
})
console.log(state.count)
state.count++
console.log(state.count)

13.Dialog对话框是什么?

就是一个弹窗,这个对话框的内容可以是任何东西,甚至可以是一个表格或表单。

//控制弹窗,默认关闭
const state = reactive({
forgetpasswordDialog:false
})
//打开弹窗
const open=()=>{
state.forgetpasswordDialog=true}

14.解构赋值是什么?

15.你这里的文件上传是怎么做的?

上传头像部分,是使用node.js里面的multer来实现的。

16.项目中有遇到哪些错误吗?

通常情况下,上传图片后,这个图片会和上传该图片的用户绑定
我之前做这个部分的时候,用的是image_url绑定的,事实上,用image_url绑定容易出错,可能会出现相同的url地址。
后来的解决方案是使用onlyid去分别绑定图片的地址,然后用这个onlyid去绑定用户
onlyid是使用node.js的crypto库随机生成的。

17.项目中前端你是如何发送请求的?(写一下原生ajax发送请求)

我的项目是基于vue做的,我用的是axios方法

axios.get("https://api.example.com/data")
.then(response=>{
console.log(response.data)})
.catch(error=>{
console.error('Error fetching data: ', error)
}

18.基于promise怎么封装这个axios请求?

定义一个函数将axios封装起来

function fetchData(url){
return new promise(resolve,reject)=>{
axios.get(url)
.then(response=>{
resolve(response.data)})
.catch(error=>{
reject("error",error)})
}
}
//调用封装好的函数
fetchData("https://api.com/data")
.then(data=>{
console.log(data)
}
.catch(error=>{
console.error('Error fetching data: ', error)})
)

19.说一下事件循环?

20.多端适配怎么做?

21.echart了解到什么程度,底层是用canvas和re-render

22.路由传参query和params区别

query类似于get,参数会拼接到地址栏中显示,数据不会丢失
params类似于post,参数不会显示在地址栏,相对于query传参比较安全,但是传参过去后,参数保存在内存中,再次刷新页面或跳转到其他页面时数据会丢失。

23.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447895.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用electron+vue开发桌面应用

electron是什么 electron由Node.jsChromiumNative APIs构成。你可以理解成,它是一个得到了Node.js和基于不同平台的Native APIs加强的Chromium浏览器,可以用来开发跨平台的桌面级应用。 它的开发主要涉及到两个进程的协作——Main(主&#x…

Java通过RAG构建专属知识问答机器人_超详细

RAG:融合检索与生成的文本精准生成技术 检索增强生成(RAG)是一种技术,它通过结合检索模型和生成模型来提高文本生成的准确性。具体来说,RAG首先利用检索模型从私有或专有的数据源中搜索相关信息,然后将这些…

编程练习7 5G网络建设

需要用到并查集的相关知识&#xff1a;可以参考如下链接 并查集详解&#xff08;原理代码实现应用优化&#xff09;-CSDN博客 #include<iostream> #include<algorithm> #include<vector>using namespace std;vector<int> split(string params_str) {…

ICT产业新征程:深度融合与高质量发展

在信息时代的浪潮中&#xff0c;每一场关于技术革新与产业融合的盛会都闪耀着智慧的光芒&#xff0c;引领着未来的方向。9月25日&#xff0c;北京国家会议中心内&#xff0c;一场聚焦全球信息通信业的顶级盛事——第32届“国际信息通信展”&#xff08;PT展&#xff09;隆重拉开…

【LwIP源码学习3】TCP协议栈分析——数据接收流程

前言 本文介绍代码在lwip的tcp_in.c文件中&#xff0c;主要介绍TCP协议栈中数据的接收流程。 正文 1、一个正常的TCP数据&#xff0c;首先会传入到 tcp_input(struct pbuf *p, struct netif *inp)函数&#xff0c;其中指针p指向传入的数据流。 2、从数据流中获取TCP头部 …

通过Express + Vue3从零构建一个用户认证与授权系统(二)数据库与后端项目搭建与实现

前言 上一篇完成了系统的相关设计文档的编写&#xff0c;本文将详细介绍如何一步步使用 TypeScript 和 Express 搭建一个模块化、类型安全的用户认证与授权系统&#xff0c;包括数据库设计、后端项目搭建、用户认证、角色与权限管理、错误处理以及 Swagger 文档集成。 项目准…

【ubuntu】ubuntu20.04安装cuda12.6与显卡驱动

目录 1.安装cuda12.6 2.安装显卡驱动 1.安装cuda12.6 https://developer.nvidia.com/cuda-toolkit-archive https://developer.nvidia.com/cuda-12-6-0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&target_version20.04&target_…

DART: Implicit Doppler Tomography for Radar Novel View Synthesis 笔记

Link&#xff1a;https://wiselabcmu.github.io/dart/ Publish&#xff1a; 2024CVPR Abstract DART主要任务就是用来合成雷达距离多普勒图像range-droppler&#xff0c;可用于生成高质量的断层扫描图像。 Related Work 1 Radar Simulation 基于模型的方法 任务&#xff…

XGBoost回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出

回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出 目录 回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、…

医学和生信web APP 平台- Appmatrix

医学&#xff08;和生信&#xff09;web APP 平台- Appmatrix 最近使用shinyproxy将平时所构建的shiny和streamlit医学类应用汇集在一起&#xff0c;实现一站式访问&#xff0c;另外&#xff0c;使用了自己电脑内网穿透&#xff0c;一定程度上缓解了数据分析类APP消耗计算资源…

关闭线程池的API介绍

线程池关闭主要涉及以下几个API: shutdown:关闭线程池&#xff0c;此方法执行后&#xff0c;线程池不会立即关闭&#xff0c;1、等待正在执行的线程任务执行完毕 2、等待任务队列中的任务执行完毕&#xff0c;步骤1和2执行后&#xff0c;线程池才完全中止isShutdown:判断线程池…

PostgreSQL学习笔记六:模式SCHEMA

模式&#xff08;Schema&#xff09; PostgreSQL中的模式&#xff08;Schema&#xff09;是一个命名的数据库对象集合&#xff0c;包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象&#xff0c;使得同一个数据库中可以包含…

C/C++语言基础--C++异常看这一篇就够了

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 通过前面几节课&#xff0c;我们学习了抽象、封装、继承、多态等相关的概念&#xff0c;接下来我们将讲解异常&#xff0c;异常是专门处理错误的&#xff1b;这一次加了不少图标&#xff0c;希望大家喜欢;C语…

牛客周赛 Round 63(构造、组合数、线性基)

文章目录 牛客周赛 Round 63(构造、组合数、线性基)A. 小红的好数B. 小红的好数组C. 小红的矩阵行走(简单思维题)D. 小红的行列式构造(构造、数学题)E. 小红的 red 计数(组合数)F. 小红开灯(线性基) 牛客周赛 Round 63(构造、组合数、线性基) A. 小红的好数 按照题意判断即可…

QT事件与网络通信

闹钟 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTimer> #include <QTextToSpeech> // 添加此行以引入QTextToSpeech类QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWin…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言&#xff0c;在程序中对某些代码进行标注说明&#xff0c;这就是注释的作用&#xff0c;能够大大增强程序的可读性。 注释的分类及语法 注释分为两类&#xff1a;单行注释 和 多行注释。 单行注释 只能注释一行内容&#xff0c;语法如下…

基于springboot管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

B3622 枚举子集

1. 注意dfs内&#xff0c;for循环的遍历&#xff0c;想清楚把什么赋值给a[x] 2.本题只需要把0或1赋值给a[x]所以 #include<bits/stdc.h> using namespace std; int n; int a[20]; int vis[20]; void pr() {for (int i 1; i < n; i) {if (a[i] 0)cout << N;els…

Flink On kubernetes

Apache Flink 是一个分布式流处理引擎&#xff0c;它提供了丰富且易用的API来处理有状态的流处理应用&#xff0c;并且在支持容错的前提下&#xff0c;高效、大规模的运行此类应用。通过支持事件时间&#xff08;event-time&#xff09;、计算状态&#xff08;state&#xff09…

网络分析仪——提升网络性能的关键工具

目录 什么是网络分析仪&#xff1f; 1. 实时流量监控 2. 历史数据回溯分析 3. 网络性能关键指标监测 4. 可视化界面与报告生成 总结 在当今的数字化世界&#xff0c;网络的稳定性和性能直接影响企业的运营效率。网络拥堵、延迟和丢包等问题会导致用户体验的下降&#xff…