前端高频面试题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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 从零开始的框架搭建1-2 事件的发布-订阅-取消的小优化及调用对象方法总结[半干货]

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激 Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】-CSDN博客 原来 其实就是对上一节的事件发布订阅类的小优化,原来是这样子的 p…

【SEO】什么是SEO?

什么是SEO(搜索引擎优化)?为什么SEO对于⼀个⽹站⾄关重要? SEO 全称是搜索引擎优化(Search Engine Optimization) 因为我们目前开发的网址,需要人看到,除了通过宣传营销的方式展现…

计算机毕业设计 校内跑腿业务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

【环境搭建】MAC M1安装ElasticSearch

STEP1 官网下载ES Download Elasticsearch | Elastic&#xff0c;下载mac m1对应版本的es STEP2 进入bin文件夹&#xff0c;执行./elasticSearch 浏览器输入 127.0.0.1:9200 STEP 3 下载对应Kibana版本&#xff0c;Download Kibana Free | Get Started Now | Elastic 出现报错…

Linux驱动开发(速记版)--单总线

第124章 单总线简介 124.1 单总线概述 单总线是一种串行通信协议&#xff0c;由Dallas Semiconductor开发&#xff0c;特点是用一根信号线实现双向数据传输和时钟同步&#xff0c;节省IO口且结构简单。 它广泛应用于传感器、存储器等。 硬件包括信号线、上拉电阻、设备和处理器…

高亚科技助力优巨新材,打造高效数字化研发项目管理平台

近日&#xff0c;中国企业管理软件资深服务商高亚科技与广东优巨先进新材料股份有限公司&#xff08;以下简称“优巨新材”&#xff09;正式签署合作协议&#xff0c;共同推进产品研发管理数字化升级。此次合作的主要目标是通过8Manage PM项目管理系统&#xff0c;提升优巨新材…

现货黄金价格走势图策略分析 先看“势”

在现货黄金投资市场&#xff0c;对金价走势图的趋势进行分析&#xff0c;是投资者做出明智决策的关键步骤。通过有效的趋势分析&#xff0c;投资者可以更好地预测市场的走向&#xff0c;从而制定相应的交易策略。本文将详细介绍如何分析金价的趋势&#xff0c;并探讨这种分析方…

QStandardItemModel的role

QStandardItemModel定义了一些标准的角色&#xff0c;而QAbstractItemModel允许自定义角色。以下是一些常见的数据角色&#xff1a;1. **Qt::DisplayRole**&#xff1a;这是最基本的角色&#xff0c;用于显示在视图中的文本。当一个单元格被绘制时&#xff0c;通常会查询这个角…

鸿蒙next开发者第一课02.DevEcoStudio的使用-习题

【习题】DevEco Studio的使用 通过/及格分80/ 满分100 判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发&#xff0c;均可使用预览器进行预览。F 正确(True)错误(False) 预览器不能进行传感器等特殊功能的开发,需要使用真机开发 2. module.json5文件中的…

【大模型理论篇】精简循环序列模型(minGRU/minLSTM)性能堪比Transformer以及对循环神经网络的回顾

1. 语言模型之精简RNN结构 近期关注到&#xff0c;Yoshua Bengio发布了一篇论文《Were RNNs All We Needed?》&#xff0c;提出简化版RNN&#xff08;minLSTM和minGRU&#xff09;。该工作的初始缘由&#xff1a;Transformer 在序列长度方面的扩展性限制重新引发了对可在训练期…

消费者Rebalance机制

优质博文&#xff1a;IT-BLOG-CN 一、消费者Rebalance机制 在Apache Kafka中&#xff0c;消费者组 Consumer Group会在以下几种情况下发生重新平衡Rebalance&#xff1a; 【1】消费者加入或离开消费者组&#xff1a; 当一个新的消费者加入消费者组或一个现有的消费者离开消费…

若依项目搭建(黑马经验)

欢迎你搜索和了解到若依&#xff0c;这个项目是从黑马课程的一个实践&#xff0c;更多的项目经历和平台搭建期待着我们的共同学习&#xff01; 关于若依 若依是一套全部开源的快速开发平台&#xff0c;毫无保留给个人及企业免费使用。 前端采用Vue、Element UI。后端采用Sprin…

使用Pytorch+Numpy+Matplotlib实现手写字体分类和图像显示

文章目录 1.引用2.内置图片数据集加载3.处理为batch类型4.设置运行设备5.查看数据6.绘图查看数据图片(1)不显示图片标签(2)打印图片标签(3)图片显示标签 7.定义卷积函数8.卷积实例化、损失函数、优化器9.训练和测试损失、正确率(1)训练(2)测试(3)循环(4)损失和正确率曲线(5)输出…

Spark_累加器

分布式共享只写变量 实现原理&#xff1a;  累加器用来把Executor端变量信息聚合到Driver端&#xff0c;在Driver程序中定义的变量&#xff0c;在Executor端的每个Task都会得到这个变量的一份新的副本&#xff0c;每个task更新这些副本的值后&#xff0c;传回Driver端进行mer…

执行node.js获取本机Ip命令,报:Error: Cannot find module ‘ip‘错误

Error: Cannot find module ip是由于没有改模块的依赖包&#xff0c;需要进行安装&#xff0c;以管理员的身份打开命令行&#xff0c;执行npm install ip 获取当前电脑的ip地址 方法一&#xff1a; const ip require("ip")/*** 1:获取当前电脑的ip地址*/ console.…

PPT技巧:保护PPT文件的方法有哪些?

PPT文件制作好之后保证文件不出错应该是很重要的&#xff0c;毕竟是要拿出去展示的&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 打开密码 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;我们可以给PPT文件设置打…

Github优质项目推荐 - 第六期

文章目录 Github优质项目推荐 - 第六期一、【WiFiAnalyzer】&#xff0c;3.4k stars - WiFi 网络分析工具二、【penpot】&#xff0c;33k stars - UI 设计与原型制作平台三、【Inpaint-Anything】&#xff0c;6.4k stars - 修复图像、视频和3D 场景中的任何内容四、【Malware-P…

gitee开源商城diygw-mall

DIYGW可视化开源商城系统。所的界面布局显示都通过低代码可视化开发工具生成源码实现。支持集成微信小程序支付。 DIYGW可视化开源商城系统是一款基于thinkphp8 framework、 element plus admin、uniapp开发而成的前后端分离系统。 开源商城项目源码地址&#xff1a;diygw商城…

stm32定时器中断和外部中断

一&#xff0c;中断系统的介绍 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中…