Vue/React 前端高频面试
说一说vue钩子函数
钩子函数是Vue实例创建和销毁过程中自动执行的函数。按照组件生命周期的过程分为:挂载阶段 -> 更新阶段 -> 销毁阶段。
每个阶段对应的钩子函数分别为:挂载阶段(beforeCreate,created,beforeMounted,mounted)、更新阶段(beforeUpdate,updated)、销毁阶段(beforeDestroy,destroyed)
完整的父子组件生命周期执行顺序是:
加载渲染过程:父beforeCreate —> 父created —> 父beforeMount —> 子beforeCreate —> 子created —> 子beforeMount —> 子mounted —> 父mounted
组件更新过程:父beforeUpdate —> 子beforeUpdate —> 子updated —> 父updated
销毁过程:父beforeDestroy —> 子beforeDestroy —> 子destroyed —> 父destroyed
组件通信的方式
父子通讯:props,$emit,$refs
兄弟通讯:事件总线eventBus的$emit、$on
祖孙通讯:provide + inject,或者 $attr + $listener
复杂通讯:vuex
Vuex是什么,每个属性是干嘛的,如何使用
Vuex是全局状态管理仓库,相当于window对象挂载了一个全局变量。
属性:
1. state:数据存储
2. getter:类似于计算属性
3. mutations:存放同步方法
4. actions:存放异步方法
5. modules:模块划分
computed和watch的区别
computed是计算属性,依赖其他属性值,并且有缓存。只有当依赖的属性值发生变化后才会重新计算。不支持异步操作。
watch更多的是监听观察作用。当监听的值发生变化,会立即执行对应的回调。支持异步操作。
说一说v-if和v-show区别
v-if和v-show都可用于控制元素显示隐藏。区别是v-if是直接操作dom元素的添加与删除,而v-show通过设置元素css属性disply:none来控制是否显示。v-if性能不及v-show。
v-if和v-for可以用于一个标签吗
v-if 和 v-for 一起使用时,v-for 优先于 v-if 执行,就意味着需要遍历一整个数组,影响速度。所以不建议一起使用。
说一说vue的keep-alive
1. keep-alive是vue的内置组件,能在组件切换过程中保留组件状态,防止DOM重复渲染。
2. keep-alive有三个属性,include-匹配的组件缓存,exclude-排除匹配的组件其他都缓存,max-最多能缓存的组件数。
3. 可以配合路由使用,在相应组件mate下设置keep-alive: true。
vue中$nextTick的作用和原理
vue更新dom节点是异步操作,数据更新之后视图不是马上更新的。所以修改数据后获取到的dom节点不是最新的。nextTick是在当前渲染完成后执行的,所以在nextTick中能获取到更新后的dom。
说一说vue列表为什么要加key
vue列表加key的目的是为diff算法添加标识。diff算法判断新旧VDOM是否相同的依据是节点的tag和key。如果tag和key相同则会进一步进行比较,使得尽可能多的节点进行复用。
key绑定的值一般是一个唯一的值,比如id。例如绑定数组的索引index,一旦数组内元素进行增删,后续节点的绑定的key也会发生变化,导致diff进行多余的更新操作。
说一说vue-router实现懒加载的方法
懒加载的核心思想是按需加载。不用到时不加载。有利于性能优化。
实现懒加载有两种方式:
1. es6的import方式。const Home = ()=>import("./home.vue")
2. vue中异步组件进行懒加载。const Home = resolve => require(['./home.vue'], resolve)
说一说HashRouter和HistoryRouter的区别和原理
区别:
1. HashRouter和HistoryRouter是前端路由的两种模式。history利用浏览历史记录栈的api实现,hash是监听location对象hash值变化事件实现。
2. history的url没有#号,hash有#号。需要url更优雅时,可以使用history模式
3. 相同的url,history会触发添加到浏览器历史记录栈中,hash不会触发,history需要后端配合,如果后端不配合刷新新页面会出现404,hash不需要。
原理:
HashRouter原理:通过window.onhashchange方法获取新URL中hash值,再做进一步处理
HistoryRouter原理:通过history.pushState 使用它做页面跳转不会触发页面刷新,使用window.onpopstate 监听浏览器的前进和后退,再做其他处理
说一说Vue2.0双向绑定的原理和缺陷
原理:vue2通过数据劫持结合发布者-订阅者模式来实现数据双向绑定。通过Object.defineProperty来劫持数据的setter、getter,在数据变动时发布消息给订阅者,订阅者收到消息后进行相应的处理。
缺陷:只能监听初始化实例中的data数据,动态添加值不能响应。
Vue3.0如何实现数据双向绑定
采用proxy来劫持整个对象,相比于vue2的Object.defineProperty,能够动态监听添加的属性,可以监听数组长度和index变化问题。
vue2和vue3的区别
1. 双向绑定的原理不同。vue2是通过数据劫持,结合发布订阅模式实现。vue3是使用proxy对数据进行代理。
2. 根结点:vue2只能有一个根结点,vue3支持多个结根节。
3. 写法不同:vue3写法相对灵活,vue2结构相对固定,mothods,computed,data,watch这些都是固定的,vue3可以通过方法来分模块。(这一点也容易让代码结构看上去比较混乱)
4. 生命周期不同。vue2: beforeCreate,created, beforeMount, mounted, beforeUpdate, update。 vue3: setUp-开始创建组件,onBeforeMount, onMounted, onBeforeUpdate, onUpdate(vue3生命周期在使用之前需要先引入)
vue3为什么要用proxy代理数据响应
vue2使用的Object.defineProperty只能遍历对象属性进行劫持。
缺点:
1. 无法检测对象属性的添加和移除。
2. 当直接通过数组的下标给数组设置值或者改变数组长度时,不能实时响应。
3. 当data中数据比较多且层级很深的时候,遍历会导致性能下降。
vue3的Proxy直接可以劫持整个对象,并返回一个新对象,操作新的对象达到响应式目的。解决之前vue2的无法监听新增属性的问题,性能更好。
vue中用了哪些设计模式
1. MVVM模式:全称为model-view-viewModel,各部分通信都是双向的。采用双向数据绑定。
2. 观察者模式:观察者模式也称为 发布-订阅模式 。当数据变化时,发布者会通知所有订阅者执行回调函数,从而实现对数据变化的监听。
3. 工厂模式:工厂模式主要用于 对象的创建和实例化。在Vue中,组件是一种特殊类型的对象,通过工厂模式来创建和实例化组件。Vue组件库中的每一个组件都可以看作是一个工厂。
4. 原型模式:将方法挂载到构造函数的原型对象上,从而使得通过构造函数创建的所有对象都能够共享这个方法。
MVVM框架和MVC框架区别是什么
定义:
MVVM:全称为model-view-viewModel,各部分通信都是双向的。采用双向数据绑定,View的变动,自动反映在 ViewModel,反之亦然。
MVC:全称为model-view-controller。各部分之间的通信都是单向的。View 传送指令到 Controller,Controller 完成业务逻辑后,要求 Model 改变状态,将新的数据发送到 View,用户得到反馈。
区别:
1. MVC数据是单向的,MVVM是双向的。
2. 在MVC里,View是可以直接访问Model的。MVVM的页面与数据逻辑是分离模式。
vue和react有什么区别
1. 核心思想不同。Vue核心思想是尽可能的降低前端开发门槛,使用MVVM框架。React核心思想是声明式渲染和组件化。react既不属于MVC也不属于MVVM架构。
2. 数据流不同。Vue使用双向绑定,React是单向数据流。
3. 语法不同。Vue使用模版语法来处理数据绑定和渲染。React使用的是jsx语法,将HTML和JavaScript结合在一起。
4. 组件通讯不。Vue提供了props和$emit来进行父子通讯。React通过props和回调函数来实现组件通讯。
说一说路由
路由的本质就是一种对应关系。比如说在 url 地址中输入要访问的url后,浏览器要去请求这个 url 地址对应的资源。
路由分为前端路由和后端路由。
后端路由:根据不同的url请求分发不同的资源。
前端路由:前端应用大多都是 SPA(单页应用程序)。为了有效的使用单个页面来管理多页面的功能,就有了前端路由。通过不同的用户事件显示不同页面内容。
在vue中使用的是vue-router,reacr中使用react-router-dom。
vue-router两种模式:HashRouter和HistoryRouter;
reacr-router两种模式:HashRouter 和 BrowserRouter。(HashRouter带#号,BrowserRouter 是使用 React-Router 的应用推荐的 history方案。)
react组件设计模式:
1. 高阶组件:参数为组件,返回值为新组件的函数。高阶组件本质就是一个函数。
2. Render Props:将 props 传入的函数,用来渲染界面。
3. 剥离有状态组件与无状态组件:把一个功能分配到两个组件中,形成父子关系,外层的父组件负责管理数据状态,内层的子组件只负责展示。做到责任分离,让一个模块专注于一个功能。
React生命周期各个阶段是什么
React生命周期主要说的是类组件的生命周期,函数式组件没有生命周期(可用hooks来模拟一些生命周期的回调)
生命周期是组件从创建到销毁的这个过程,主要分为三个阶段:
挂载阶段:组件第一次在DOM树中被渲染的过程;
更新阶段:组件状态发生变化,重新更新渲染的过程;
卸载阶段:组件从DOM树中被移除的过程;
常见的生命周期函数有:
1. Constructor:组件中第一个调用的生命周期函数。constructor中通常只做两件事情:1. 通过给this.state 赋值对象来初始化内部state。2. 为事件绑定this。
2. render:render() 方法是 类组件中唯一必须实现的方法。
3. componentDidMount:组件挂载后立即调用。 依赖DOM的操作可在此处进行。 官方建议发送网络请求最好的地方。
4. componentDidUpdate
5. componentWillUnmount
React组件间传值的方法有哪些
1. props
2. context
3. refs
setState是同步还是异步
同步代码异步表现。setState本身并不是异步的,但由于react的性能优化机制体现为异步。只有在原生和定时器中为同步。
React事件绑定原理
react中事件绑定都不是绑定在对应的DOM上的,而是统一绑定在document上,采用事件冒泡形式向上传递。
采用合成事件的原因:
1. 兼容所有浏览器,实现跨平台开发。
2. 统一挂载在document上,减少内存消耗。方便组件 挂载/销毁 时统一 订阅/移除 事件。
3. 方便统一管理。
React类组件和函数组件
函数组件是以函数形式存在的组件,更加轻便灵活,便于逻辑拆分。类组件有生命周期,可以获取实例化的this,函数组件不行。在hooks出现之前函数组件和类组件最大区别是状态的有无。
React有哪些hooks,hooks的优缺点是什么
常用hooks:
useState:设置和使用状态属性。
useEffect:副作用钩子,可以用来模拟部分生命周期。
useCallBack:记忆函数,防止组件重新渲染,起到缓存作用。
useRef:保存引用值。
useContext:共享状态。(组件传值)
hooks优点
1. 让函数组件拥有自己的状态和生命周期。
2. 解决业务逻辑难以拆分问题。
3. 使状态逻辑复用变得简单可行。
hooks缺点:
hooks的useEffect只包括了三个生命周期(compoentsDidMount、componentDidUpdate、componentWillUnmount),并没有涵盖所有生命周期。
react中useState和useRef有什么区别
useState:
1. 值发生改变,会render,视图发生更新。
2. setState是异步的,同一个函数里面设置,拿到的是更新之前的值。
3. 当状态改变需要重新渲染视图的时候,用useState。
useRef:
1. 值发生改变,不会render,视图不会更新。
2. 设置值是同步的,在同一函数内设置,能拿到最新设置的值。
3. 当只想更新状态,不想影响视图,使用useRef。
相关文章:
Vue/React 前端高频面试
说一说vue钩子函数 钩子函数是Vue实例创建和销毁过程中自动执行的函数。按照组件生命周期的过程分为:挂载阶段 -> 更新阶段 -> 销毁阶段。 每个阶段对应的钩子函数分别为:挂载阶段(beforeCreate,created,befor…...
[技巧]Arcgis之图斑四至范围批量计算
ArcGIS图层(点、线、面三类图形)四至范围计算 例外一篇介绍:[技巧]Arcgis之图斑四至点批量计算 说明:如下图画出来的框(范围标记不是很准) ,图斑的x最大和x最小,y最大,…...
C/C++工程师面试题(STL篇)
STL 中有哪些常见的容器 STL 中容器分为顺序容器、关联式容器、容器适配器三种类型,三种类型容器特性分别如下: 1. 顺序容器 容器并非排序的,元素的插入位置同元素的值无关,包含 vector、deque、list vector:动态数组…...
Effective Programming 学习笔记
1 基本语句 1.1 断言 在南溪看来,断言可以用来有效地确定编程中当前代码运行的前置条件,尤其是以下情况: 第三方工具库对输入数据的依赖,例如:minitouch库对Android版本的要求...
【MGR】MySQL Group Replication 背景
目录 17.1 Group Replication Background 17.1.1 Replication Technologies 17.1.1.1 Primary-Secondary Replication 17.1.1.2 Group Replication 17.1.2 Group Replication Use Cases 17.1.2.1 Examples of Use Case Scenarios 17.1.3 Group Replication Details 17.1…...
300分钟吃透分布式缓存-17讲:如何理解、选择并使用Redis的核心数据类型?
Redis 数据类型 首先,来看一下 Redis 的核心数据类型。Redis 有 8 种核心数据类型,分别是 : & string 字符串类型; & list 列表类型; & set 集合类型; & sorted set 有序集合类型&…...
思科网络设备监控
思科是 IT 行业的先驱之一,提供从交换机到刀片服务器的各种设备,以满足中小企业和企业的各种 IT 管理需求。管理充满思科的 IT 车间涉及许多管理挑战,例如监控可用性和性能、管理配置更改、存档防火墙日志、排除带宽问题等等,这需…...
深入剖析k8s-控制器思想
引言 本文是《深入剖析Kubernetes》学习笔记——《深入剖析Kubernetes》 正文 控制器都遵循K8s的项目中一个通用的编排模式——控制循环 for {实际状态 : 获取集群中对象X的实际状态期望状态 : 获取集群中对象X的期望状态if 实际状态 期望状态 {// do nothing} else {执行…...
go并发模式之----使用时顺序模式
常见模式之二:使用时顺序模式 定义 顾名思义,起初goroutine不管是怎么个先后顺序,等到要使用的时候,需要按照一定的顺序来,也被称为未来使用模式 使用场景 每个goroutine函数都比较独立,不可通过参数循环…...
[动态规划]---part1
前言 作者:小蜗牛向前冲 专栏:小蜗牛算法之路 专栏介绍:"蜗牛之道,攀登大厂高峰,让我们携手学习算法。在这个专栏中,将涵盖动态规划、贪心算法、回溯等高阶技巧,不定期为你奉上基础数据结构…...
java 关于 Object 类中的 wait 和 notify 方法。(生产者和消费者模式!)
4、关于 Object 类中的 wait 和 notify 方法。(生产者和消费者模式!) 第一:wait 和 notify 方法不是线程对象的方法,是 java 中任何一个 java 对象都有的方法,因为这两个方法是 Object 类中自带的。 wait 方…...
YOLOv8姿态估计实战:训练自己的数据集
课程链接:https://edu.csdn.net/course/detail/39355 YOLOv8 基于先前 YOLO 版本的成功,引入了新功能和改进,进一步提升性能和灵活性。YOLOv8 同时支持目标检测和姿态估计任务。 本课程以熊猫姿态估计为例,将手把手地教大家使用C…...
【海贼王的数据航海:利用数据结构成为数据海洋的霸主】链表—双向链表
目录 往期 1 -> 带头双向循环链表(双链表) 1.1 -> 接口声明 1.2 -> 接口实现 1.2.1 -> 双向链表初始化 1.2.2 -> 动态申请一个结点 1.2.3 -> 双向链表销毁 1.2.4 -> 双向链表打印 1.2.5 -> 双向链表判空 1.2.6 -> 双向链表尾插 1.2.7 -&…...
做测试还是测试开发,选职业要慎重!
【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试) 突然发现好像挺多人想投测开和测试的,很多人面试的时候也会被问到这几个职位的区别,然后有测…...
Java面试题总结200道(二)
26、简述Spring中Bean的生命周期? 在原生的java环境中,一个新的对象的产生是我们用new()的方式产生出来的。在Spring的IOC容器中,将这一部分的工作帮我们完成了(Bean对象的管理)。既然是对象,就存在生命周期,也就是作用…...
面试数据库篇(mysql)- 03MYSQL支持的存储引擎有哪些, 有什么区别
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。 MySQL体系结构 连接层服务层引擎层存储层 存储引擎特点 InnoDB MYSQL支持的存储引擎有哪些, 有什么区别 ? my…...
MySQL深入——25
Join语句如何优化? Join语句的两种算法,分别为Index Nested-Loop Join和Block Nested-Loop Join NLJ在大表Join当中还不错,但BNL在大表join时性能就差很多,很耗CPU资源。 如何优化这两个算法 创建t1,t2算法,在t1中…...
Docker运行时安全之道: 保障容器环境的安全性
引言 Docker作为容器化技术的领军者,为应用部署提供了灵活性和便捷性。然而,在享受这些优势的同时,必须重视Docker运行时的安全性。本文将深入研究一些关键的Docker运行时安全策略,以确保你的容器环境在生产中得到有效的保护。 1. 使用最小特权原则 保持容器以最小权限运…...
前后端分离项目Docker部署指南(上)
目录 前言 一.搭建局域网 1.搭建net-ry局域网,用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 编辑 测试是否安装成功 编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…...
ARM 架构下国密算法库
目录 前言GmSSL编译环境准备下载 GmSSL 源码编译 GmSSL 源码SM4 对称加密算法SM2 非对称加密算法小结前言 在当前的国际形式下,国替势不可挡。操作系统上,银河麒麟、统信 UOS、鸿蒙 OS 等国产系统开始发力,而 CPU 市场,也是百花齐放,有 龙芯(LoongArch架构)、兆芯(X86…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
