2024前端开发面试题

本文探讨了Vue.js的SPA架构、组件挂载过程,强调了v-for和v-if的优先级,以及数据污染问题的解决。同时,对比了Vue和React的生命周期、状态管理、组件间通信方式,包括ReactHooks的应用实例。此外,还涉及了React的虚拟DOM工作原理和diffing算法对性能的影响。
摘要由CSDN通过智能技术生成

vue

1. spa 理解

单页面应用(SPA)多页面应用(MPA)
组成一个主页面和多个页面片多个主页面
刷新方式局部刷新整页刷新
url模式哈希模式历史模式
SEO难实现,可使用SSR方式改善容易实现
数据传递容易通过url、cookie、localStorage等传递
页面切换速度快,用户体验良好切换加载资源,速度慢,用户体验差
维护成本相对容易相对复杂

2. Vue实例挂载的过程

1. new Vue的时候调用会调用_init方法
	定义 $set、$get 、$delete、$watch 等方法
	定义 $on、$off、$emit、$off等事件
	定义 _update、$forceUpdate、$destroy生命周期
	调用$mount进行页面的挂载	

2. 挂载的时候主要是通过mountComponent方法

3. 定义updateComponent更新函数

4. 执行render生成虚拟DOM

5. _update将虚拟DOM生成真实DOM结构,并且渲染到页面中

3. v-for优先级大于v-if

4. data属性是一个函数而不是一个对象

会造成数据污染。创建vue实例会调用data函数 并将返回值作为该实例的数据对象。
如果是一个对象,引用地址(浅拷贝)一致就会造成数据污染;函数则可以避免

5. 动态给vue的data添加一个新的属性时会发生什么

1. 如果为对象添加少量的新属性,可以直接采用Vue.set()
2. 如果需要为新对象添加大量的新属性,则通过Object.assign()创建新对象
3. 如果你实在不知道怎么操作时,可采取$forceUpdate()进行强制刷新 (不建议)
vue3 则是通过 set \ reactive refs toRefs toRaw

6. Vue中组件和插件

组件 (Component) 是用来构成你的 App 的业务模块,它的目标是 App.vue

插件 (Plugin) 是用来增强你的技术栈的功能模块,它的目标是 Vue 本身

react

生命周期

挂载阶段
	constrouctor
	getDeriveSatetFromprops
	render
	componentDidMount
更新阶段
	getDerviceStateFromProps
	render
	getSnaptshortbeforeUpdate
	componentDidUpdate
卸载
	componentDidUnmount

hooks

[age, setAge] = useState(42);
useEffect(()=>{ return ()=>{unmounted} }, []/null/基础数据类型/object 使用useRef)	
useContext() 1. createContext  2.注入 .provide包裹传递数据value 3.子组件接收
也可直接使用use读context
ref = useRef(refs) res.current 如果要用在自定义组件需要先用forwardRef 包裹组件
useMemo 每次重新渲染都能缓存计算结果 缓存值
usecallback 减少子组件的渲染次数 缓存函数
useReducer 类似于redux的reducer const [state, dispatch] = useReducer(reducer. init)
dispatch({type: '', key: 1})

纯组件和应该如何实现它

纯组件是一个没有副作用只依赖props的组件,如果props一致则返回最近一次缓存的结果,都是浅比较
1. class组件继承React.PureComponent
2. class组件使用shouldcompontupdate
3. hooks使用react.memo

解释一下React的props和state的区别

props不可修改
state this.setstate(()=>{},cb) 异步修改…
在组件生命周期或React合成事件中,setState是异步
在setTimeout或者原生dom事件中,setState是同步

如何在组件之间传递数据

props refs
回调
context.provide
eventbus
redux

描述一下React的虚拟DOM是如何工作的,以及它与真实DOM有什么不同?

你如何理解React的diffing算法?它如何帮助提高性能?

描述一个你使用React Hooks改进现有组件或功能的经历。

react Router进行路由管理,并处理路由之间的数据传递

  1. 动态路由 props.match.param
  2. search传递参数 props.location.search
  3. to传入对象 props.location

eventbus 发布订阅者模式

hoc

传入一个组件传出一个组件
日常用的比如 redux的connect 自己封装的 权限组件 主要是复用逻辑

React Fiber

采用增量式渲染和异步任务优先级的策略,将任务划分成小块并分散在多个帧中执行,以提高应用性能。通过双缓冲和任务调度,Fiber能够更灵活地处理更新,并支持虚拟DOM的渐进式渲染和复杂应用的性能优化。

super

子类没有this对象,只能通过super继承父类 相当于
sup.prototype.constructor.call(this,name)
React 会在类组件构造函数生成实例后再给 this.props 赋值,在 super() 的情况下,调用 this.props 为 undefined

react 合成事件

React 所有事件都挂载在 document 对象上
所以会先执行原生事件冒泡,然后处理 React 事件
最后执行 document 上挂载的事件

js

var、let、const

变量提升
暂时性死区
块级作用域
重复声明
修改变量

object.assign()方法用于对象的合并 浅拷贝

数据类型

基本数据类型存储在栈中

引用类型的对象存储于堆中

new操作符具体干了什么

创建一个新的对象obj

将对象与构建函数通过原型链连接起来

将构建函数中的this绑定到新建的对象obj上

根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理

apply call bind 区别

apply(this, []) 直接执行
call(this, ag1, ag2) 直接执行
bind(this, ag1, ag2)() 需要再次执行

事件循环机制

宏 -> 微 -> 宏
宏: settimeout
微:nexttick then

响应式布局

meta生命viewport
媒体查询
百分比
vw/vh
rem

伪数组 数组

伪数组:长度不可变、不具有数组的方法具有对象的方法、索引是字符串
数组:内置的下标和length、
区分: instanceof 、Array.isArray
伪数组变为数组:解构、Array.from

变量提升?函数变量提升?

变量提升:在作用域定义一个变量的时候,该变量会被提升到作用域的顶端;
函数变量提升类似,只不过函数提升要先于变量提升;

作用域链?如何延长

当前查找变量,在当前作用域找不到便会向上一层作用域查找,一直到作用域的顶部,形成的一条链为作用域链
闭包可以延长作用域链

阻止冒泡

1.event.stopPropogation()
2. addeventListen(click, ()=>(), false)

获取元素位置

dom.getbundingclientRect()

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值