自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 说说你对 Object.definePropety()的理解?

Object.defineProperty方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。descriptor:要定义或修改的属性描述符。Property : 属性(对象的key)提供getter和setter控制属性访问。prop: 要定义或修改的属性的名称。obj:要定义属性的对象。Object : 对象。define : 定义。精细控制对象属性的特性。要被传递给函数的对象。

2023-08-23 07:26:37 120

原创 Js 数据类型判断都有哪几种方式? 至少说出5 种? 它们的区别是什么?

Object.prototype.toString.call() 方法:可以使用 Object.prototype.toString.call() 方法来获取一个值的内部 [[Class]] 属性,从而判断其类型。typeof 和 instanceof 的结合使用:有时候可以结合使用 typeof 和 instanceof 运算符来进行更精确的类型判断。例如,typeof str === "string" 可以判断一个变量是否为字符串类型,instanceof Array 可以判断一个变量是否为数组类型。

2023-08-23 07:19:23 166

原创 TS中命名空间的理解?

除了使用命名空间,也可以使用模块化的方式来组织代码。总而言之,命名空间是 TypeScript 提供的一种将相关代码组织起来的机制,用于避免命名冲突,并提供一种可选的方式来与现有的 JavaScript 代码进行交互。在 TypeScript 中,命名空间(Namespace)是一种将代码封装为一个独立的命名空间的机制,用于避免全局名称冲突,并将相关的类、函数、接口等组织在一起。注意,在使用命名空间之前,需要确保正确地设置 TypeScript 的编译选项中的。要使用命名空间中的成员,可以使用限定符。

2023-08-22 08:08:59 272

原创 TS 中抽象类的理解?

抽象类是 TypeScript 中一种特殊的类,它不能被直接实例化,只能作为其他类的基类来提供通用的属性和方法的定义。抽象类主要用于定义一组相关的类的共同结构和行为,以及强制子类实现特定的方法。抽象类用abstract关键字修饰抽象类其实就是将通用性的东西抽离出来,变成一个抽象类抽象类可以定义属性、方法和抽象方法抽象类只能被继承,不能被实例化抽象类可以有构造器在TypeScript中,抽象类是一种特殊的类,它不能直接实例化,而是被用作其他类的基础类或模板。

2023-08-22 07:40:43 337

原创 React render方法的原理,在什么时候会触发

状态变化:如果组件的状态(state)发生变化,React 会触发组件的 render 方法进行重新渲染。属性变化:如果组件的属性(props)发生变化,React 会调用组件的 render 方法进行重新渲染。这意味着父组件传递给子组件的属性发生变化时,子组件的 render 方法会被调用。在 React 中,当组件的状态或属性发生变化时,会触发组件的重新渲染过程。首次渲染:当组件被实例化并添加到 DOM 中时,React 会首次调用 render 方法,将返回的元素渲染到指定的位置上。

2023-08-19 10:25:03 424

原创 说说你对@reduxjs/toolkit的理解?和react-redux有什么区别

而 react-redux 是一个专为 React 应用开发而设计的基于 Redux 的库,提供了一些特定于 React 的功能和组件。而 react-redux 提供了一些特定于 React 的功能,如 connect 函数和 Provider 组件,用于连接 Redux 的 store,并将状态传递给 React 组件。它提供了一组开发 Redux 应用常用功能的抽象和封装,包括 Redux 中的状态管理、中间件集成、异步操作和开发者工具等,以减少样板代码和提高开发效率。

2023-08-19 10:24:52 154

原创 说说React jsx转换成真实DOM的过程

总结起来,React JSX 转换成真实 DOM 的过程主要包括 JSX 解析、创建元素对象、Virtual DOM 构建、Diff 算法比较、更新真实 DOM 和更新生命周期。更新生命周期:在更新真实 DOM 的过程中,React 还会触发组件的生命周期方法,例如 componentDidUpdate,让开发者可以在特定时刻执行额外的逻辑操作。Diff 算法比较:当虚拟 DOM 发生变化时,React 使用 Diff 算法对比新旧虚拟 DOM 树的差异,找出需要更新的部分。

2023-08-19 10:24:30 130

原创 前端面试题(持续更新中······)

面试题大全htmlcssreactvuejstshtml链接: linkcss如何使用css_实现一个三角形,写出两种以上方案react说说 React 生命周期有哪些不同的阶段? 每个阶段对应的方法说说你对react的理解?有哪些特性说说Real DOM和Virtual DOM的区别?优缺点说说React中setState执行机制说说react的事件机制React组件之间如何通信说说你对受控组件和非受控组件的理解?应用场景说说你对fiber架构的理解?解决了什么问题

2023-08-19 10:23:58 26

原创 什么是强缓存和协商缓存

强缓存和协商缓存可以有效减少网络请求,减轻服务器负载,并提升页面加载速度和用户体验。在实际应用中,通常会同时使用强缓存和协商缓存来优化资源的缓存机制。强缓存(Cache-Control 和 Expires)和协商缓存(Last-Modified 和 ETag)是浏览器使用的两种缓存机制。

2023-08-18 15:09:11 125 1

原创 说说你对redux中间件的理解?常用的中间件有哪些?实现原理

这样,在派发 action 时,action 会从中间件链式结构的起点开始流经每个中间件,每个中间件可以对 action 进行处理、修改或终止。中间件的实现原理是基于函数的柯里化特性,通过将中间件按顺序组合成一个链式结构,并拦截派发的 action 实现额外的操作。在 Redux 中,中间件是一种拦截 Redux 的派发过程,并对派发的 action 进行一系列处理的机制。Redux 中间件的作用:中间件提供了一种机制,让我们可以在 Redux 的派发过程中进行额外的操作。

2023-08-18 15:07:38 101 1

原创 说说react diff的原理是什么

总体来说,React Diff 算法通过逐层比较旧的 Virtual DOM 和新的 Virtual DOM,找到它们之间的差异,并仅更新有变化的部分。比较子元素:如果元素类型和属性都相同,则 React 会递归比较元素的子元素。如果旧的 Virtual DOM 和新的 Virtual DOM 的元素类型不同,那么 React 将完全替换旧的元素,并且不再进一步比较旧子树和新子树。通过 key,React 可以确定哪些元素是新添加的、删除的或者移动的,从而避免不必要的 DOM 更新操作。

2023-08-18 15:06:15 413 2

原创 说说你对fiber架构的理解?解决了什么问题

它可以在用户输入或动画等需要即时响应的场景下,先暂停低优先级任务的执行,优先处理高优先级任务,提高用户界面的响应性能和流畅度。总体来说,Fiber 架构通过引入协调机制和任务优先级调度,解决了传统同步渲染方式下的长时间阻塞问题,提高了用户界面的响应性能和流畅度。Fiber 架构是 React 16 中引入的一种新的协调机制,用于解决 React 在渲染过程中可能出现的阻塞问题,提高用户界面的响应性能。支持优先级调度:Fiber 架构引入了任务优先级的概念,可以根据任务的优先级来安排任务的执行顺序。

2023-08-18 15:03:29 84 1

原创 说说你对受控组件和非受控组件的理解?应用场景

受控组件: 受控组件是指其值(如输入框的值)由 React 的状态(state)来控制并更新的组件。非受控组件: 非受控组件是指其值不受 React 状态控制的组件。在非受控组件中,表单元素的值通常由 DOM 自身维护,并通过对 DOM 进行引用来获取表单元素的值。需要注意的是,在使用非受控组件时,要确保正确地更新表单元素的值,并且在需要获取表单数据时,通过 DOM 引用来获取相应的值。同时,为了遵循 React 的单向数据流原则,不建议在组件内部直接修改非受控组件的值。

2023-08-18 15:00:40 232 1

原创 React组件之间如何通信

跨层级通讯: Context 设计⽬的是为了共享那些对于⼀个 组件树⽽⾔是“全局”的数据, 使用context提供了组件之间通讯的一种方式,可以共享数据,其他数据都能读取对应的数据 例如当前认证的⽤户、主题或⾸选语⾔,对于跨越多层的全局数据通过 Context 通信再适合不过。子组件向父组件通讯: props+回调的方式,父组件向子组件传递props进行通讯,此props为作用域为父组件自身的函数,子组件调用该函数,将子组件想要传递的信息,作为参数,传递到⽗组件的作⽤域中。

2023-08-18 14:54:59 309 1

原创 说说react的事件机制

React 的事件机制是基于合成事件(SyntheticEvent)的,它是对原生 DOM 事件的跨浏览器封装。合成事件的属性和方法与原生 DOM 事件对象类似,但有一些区别。事件处理函数:React 的事件处理函数接收一个合成事件对象作为参数,可以通过访问事件对象的属性和方法来获取和操作事件的相关信息。事件委托:React 的事件机制使用了事件委托的方式,将事件绑定到组件树的根节点上,并在冒泡阶段处理。事件冒泡:React 的事件机制也支持事件冒泡,当事件触发后,它会沿着组件树从子组件向父组件逐级冒泡。

2023-08-18 14:51:55 221 1

原创 说说React中setState执行机制

当需要修改里面的值的状态需要通过调用setState来改变,从而达到更新组件内部数据的作用,可以通过点击按钮触发onclick事件,执行this.setState方法更新state状态,然后重新执行render函数,从而导致页面的视图更新。11 .当上一次更新机制执行完毕,以生命周期为例,所有组件,最顶层组件的didmount之后将isBranchUpdate设置为false,执行之前累积的setState。2 .判断当前React是否处于批量更新状态,如果是,将当前组件加入待更新的组件队列中去。

2023-08-18 14:49:13 445 1

原创 说说Real DOM和Virtual DOM的区别?优缺点

虚拟dom是react内部中内存中维护的一个轻量级dom树副本,它与真实dom非常的相似,用于描述ui页面,当状态发生变化时, react会先更新虚拟dom,然后通过比较虚拟dom和真实dom的差异,只更新需要更改的部分,不重新渲染整个页面。真实dom是浏览器中真实存在的dom树结构,每当页面状态发生变化的时候,真实dom 就会被完全重新渲染,包括删除,更新,和插入节点。通过构建虚拟 DOM 并批量计算差异,可以减少对 Real DOM 的操作次数,提高性能。

2023-08-18 14:47:05 78 1

原创 说说你对react的理解?有哪些特性

状态管理:React 的状态管理通常使用 useState 和 useReducer 这样的钩子函数来管理组件的状态。受控组件和非受控组件:React 中的表单元素可以是受控组件或非受控组件。它的核心思想是将应用程序拆分成可复用的组件,并使用声明式的方式描述界面的状态和渲染逻辑。生命周期钩子:React 提供了一系列的生命周期钩子函数,允许开发者在组件不同阶段执行特定的代码,例如组件的创建、更新和销毁等。组件化:React 将用户界面抽象为独立且可复用的组件,每个组件有自己的状态和渲染逻辑。

2023-08-18 14:45:47 73 1

原创 实现一个 myMap.方法,可以跟数组 map 方法一样,可以进行数组循环并且,可以返回新的数组?

使用这个方法时,你需要传入一个数组和一个回调函数作为参数。回调函数接收当前迭代的元素值、元素索引和原始数组作为参数,并返回一个新的值。`myMap` 方法将遍历数组,并通过回调函数对每个元素进行处理,将处理后的结果存储在一个新的数组中,并返回该数组。在上面的示例中,我们分别使用 `myMap` 方法将数组中的每个元素翻倍和平方,并将结果存储在新的数组中。

2023-08-17 08:41:33 62 1

原创 TypeScript中都有哪些修饰符,说明他们的作用?

抽象修饰符,用于定义抽象类和抽象方法。抽象方法在抽象类中只有声明而没有实现,需要在子类中实现具体的逻辑。:静态修饰符,用于定义类的静态成员(属性和方法)。静态成员属于类本身而不是类的实例,可以通过类名直接访问,无需创建类的实例。:只读修饰符,用于将属性设置为只读,只能在声明时或构造函数中初始化,并且不能再被修改。:公共修饰符,默认情况下,类成员(属性和方法)都是公共的,可以在类内部和外部访问。:私有修饰符,只能在类的内部访问。:受保护修饰符,可以在类的内部和派生类中访问,但在类的外部不可访问。

2023-08-16 20:59:06 69 1

原创 interface和type的区别

2.都可以实现继承:type 和 interface 并不互斥。与 type 不同,interface 仅限于描述对象类型。接口的声明语法也不同于类型别名的声明语法。用来给一个类型起新名字,使用 type 创建类型别名。类型别名不仅可以用来表示基本类型,还可以用来表示对象类型、联合类型、元组和交集。如果是 type 的话,就会报重复定义的警告,因此是无法实现声明合并的。1. type侧重于直接定义类型。3.type可以声明基本类型。4.type可以声明元组类型。6.type可以声明联合类型。

2023-08-16 07:28:19 1253 1

原创 函数重载的理解?

函数重载或者方法重载适用于某种功能一样,但是细节有不一样,也就是当我们多次调用函数时传递不同参数数量或者类型,函数会做出不同处理。2.外部调用函数重载时,只能调用重载的前面(函数体前面的叫做签名),不能够调用使用的函数签名。4.只有一个函数体,只有实现签名配备课函数体,所有重载签名只有签名,没有配置函数体。比如说一个函数有多个参数,每一个参数代表不同意义,这个时候就可以使用函数重载。3.调用函数重载时会根据传递的参数来判定调用的那个函数。1.一个或多个签名组合叫做函数重载。

2023-08-16 07:26:59 29 1

原创 如何使用css_实现一个三角形,写出两种以上方案得满分?

需要调整角度,使三角形的顶边是从左上角开始,直到右侧的中间。给定一个宽度和高度都为 0 的元素,其 border 的任何值都会直接相交,我们可以利用这个交点来创建三角形。这其实已经是一个三角形了,但还不是我们想要的效果。linear-gradient 需要结合 background-image 来实现三角形,下面就来逐步使用渐变实现一个三角形。如果想要一个指向下面的三角形,可以让 border 的上边可见,其他边都设置为透明。看似距离三角形还很远,但是只需最后一步,只需调整两个三角形的位置即可,这里使用。

2023-08-14 20:53:22 95

原创 说说 React 生命周期有哪些不同的阶段? 每个阶段对应的方法是?

static getDerivedStateFromProps:在接收到新的 props 或 state 时调用,用于根据新的 props 更新组件的状态。static getDerivedStateFromProps:在组件实例化和重新渲染之前调用,用于根据 props 更新组件的状态。shouldComponentUpdate:在接收到新的 props 或 state 后,决定是否重新渲染组件,默认返回 true。render:根据更新后的 props 和 state,返回要渲染的元素结构。

2023-08-14 20:42:23 61

原创 说说javascript内存泄漏的几种情况?

未清理的事件监听器: 当我们在元素上注册了事件监听器(如点击事件),但是忘记在元素被移除之前将它们删除,这会导致监听器仍然存在于内存中,无法被垃圾回收。循环引用: 当两个或多个对象彼此引用,并且形成一个循环引用时,即使这些对象不再被使用,它们也无法被垃圾回收。未释放的 DOM 节点: 当我们创建了许多 DOM 节点,并且在不再需要它们时忘记将其从 DOM 树中移除,这些节点将会一直占用内存,无法被垃圾回收。使用全局变量: 如果变量被声明为全局变量,它们将在整个应用程序的生命周期中一直存在,无法被垃圾回收。

2023-08-13 21:05:12 146 1

原创 如何通过原生js 实现一个节流函数和防抖函数,写出核心代码,不是简单的思路?

当需要对频繁触发的事件进行节流(throttle)或防抖(debounce)处理时,可以使用原生 JavaScript 实现对应的函数。对于节流函数,它会保证 func 回调函数在指定的时间间隔内最多执行一次。请注意,实际应用中,往往需要将节流函数或防抖函数应用到具体的事件处理函数上面,以实现对相应事件的节流或防抖处理。这些函数的返回值是一个新的函数,被调用时会触发相应的节流或防抖逻辑,并执行传入的回调函数。在上述代码中,func 是要进行节流或防抖的回调函数,delay 是设置的时间间隔。

2023-08-13 21:04:09 52 1

原创 20道简易面试题

在state需要更改值的时候,就需要通过setstate来执行 ,从而达到内部更新的作用,第一个参数是一个对象,或者是一个函数,第二个参数是一个回调函数,用于实现获取到更新之后的数据,在使用setstate更新数据的时候,也分为同步和异步, 在生命周期和合成事件中,setstate是异步的,在原生dom或者settimeout中是同步的。在受控组件中,组件的值与状态之间保持同步。需要注意的是,在使用非受控组件时,要确保正确地更新表单元素的值,并且在需要获取表单数据时,通过 DOM 引用来获取相应的值。

2023-08-13 21:02:16 29 1

原创 面试题(持续更新中······)

面向对象 (行为化)面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。如果不是,它直接返回输入。深拷贝是一种拷贝对象或数组的方法,该方法不仅复制了对象的值,而且复制了对象本身。优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。

2023-08-08 15:52:32 67 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除