自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RBAC用户角色权限管理模型设计(全网最全没有之一)

RBAC(Role-Based Access Control),即基于角色的访问控制,是一种广泛应用于信息安全领域的访问控制模型。RBAC的核心思想是将系统中的用户按照其角色进行分类,然后定义不同角色具有的权限,最后指定哪些用户属于哪些角色,从而实现权限管理。

2024-03-25 14:29:28 867 1

原创 React Native环境配置搭建(看这一篇就够了!)

打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 高级 -> 环境变量,选中Path变量,然后点击编辑。因为他这个链接在我们下载的时候会特别慢,从而导致下载失败,我们可以直接下载好,然后放入我们电脑中,用绝对路径去访问,这样就会解决这个问题。在这里呢,我们不要去下载最新版本,应该下载0.72版本的项目,因为最新版本的启动命令是用不了的,比如它提供的yarn android。然后我们切换到SDK Tools,下载相关的依赖,同上述方法一样,选择完后,点击Apply,来下载。

2024-01-07 20:30:54 1586 2

原创 实现无感刷新token(看这一篇就够了)

无感知刷新Token是指,在Token过期之前,系统自动使用Refresh Token获取新的Access Token,从而实现Token的无感知刷新,用户可以无缝继续使用应用。如何判断Token是否过期?如何在Token过期时自动使用Refresh Token获取新的Access Token?下面将介绍如何实现无感知刷新Token的具体步骤。无感刷新Token技术是一种在客户端应用中自动刷新访问令牌的机制,它通过提供用户无感知的刷新操作,改善了用户体验,提高了安全性,同时减轻了服务端的负担。

2023-11-09 14:42:08 2053 2

原创 Vue3中watch和watchEffect区别

会自动追踪回调函数中使用到的响应式数据的依赖,并在其发生变化时重新执行回调函数。因此,我们可以将操作直接放在回调函数中,而不需要指定要监测的数据源。但是,它的回调函数无法获得旧值和新值的参数。如果需要明确指定要监测的数据源,或需要访问新旧值的参数,则应该使用。则可以自动收集其使用的响应式数据,因此代码会更简洁,但是,它的回调函数无法获得旧值和新值的参数。会自动追踪响应式数据的依赖,并在赋值、方法调用等操作后重新执行回调函数。如果希望代码更简洁,并且不需要获得新旧值的参数,则应该使用。

2023-10-11 21:37:23 1350

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

协商缓存(Last-Modified 和 ETag): 协商缓存是在强缓存失效的情况下才会起作用的,它通过请求头中的 If-Modified-Since(对应 Last-Modified)和 If-None-Match(对应 ETag)字段来实现。Expires 是一个时间戳,表示资源的过期时间,而 Cache-Control 是一个指令集,可以指定资源的缓存策略。在使用缓存策略时,可以根据实际场景选择使用强缓存或协商缓存,或者同时使用两者,以达到更好的缓存效果。

2023-09-07 11:56:27 221

原创 说说生命周期中有哪些坑?为什么要移除will相关的生命周期?

通过移除这些方法,可以更好地适应新的异步渲染架构。不必要的重复渲染:有时候,在某些生命周期方法中进行的操作可能引发不必要的组件重渲染,导致性能下降。代码整洁性:移除这些方法可以减少生命周期方法的数量,使代码更简洁、易读和易于维护。在React生命周期中,可能会遇到一些常见的坑。),可能会导致状态更新的时机不符合预期,从而引发错误或不一致的UI渲染。异步操作造成的状态更新问题:在某些生命周期方法中进行异步操作(如。相关的方法,使得生命周期方法的命名更加一致和易懂。,可能会触发多次重渲染。

2023-09-04 09:40:26 82

原创 interface和type的区别

并不是完全互斥的,它们可以在一定程度上互补使用,具体使用哪个关键字取决于你的具体需求和项目团队的约定。是用来定义对象类型的关键字,它们有一些区别和不同的使用场景。在 TypeScript 中,

2023-08-22 14:05:28 119

原创 前端高频面试题总结(持续更新中ing...)

props和state相同点和不同点?render方法在哪些情况下会执行?props和state是React组件中两个重要的概念,它们具有相似之处,也有一些不同之处。下面是它们的共同点和区别:关于render方法的执行情况: render方法是React组件中唯一必须的方法,用于定义组件的UI。需要注意的是,虽然在组件更新时render方法会被调用,但React会进行一些优化,例如使用虚拟DOM来比较前后两次的渲染结果,以确定是否需要真正地更新DOM。

2023-08-20 19:41:03 68

原创 如何使用css实现一个三角形

这两种实现方法都能创建一个均等边长的等腰三角形。第一种方法使用了三个边框,并通过设置其中两个边框为透明来形成一个三角形的形状。第二种方法则是利用伪元素。创建一个旋转后的矩形,从而形成一个三角形的外观。

2023-08-19 08:44:00 102

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

当派发的 action 是一个函数时,redux-thunk 中间件会将该 action 函数的派发权交给自身处理。其他中间件的实现原理也类似,都是通过拦截 action 并进行相应的处理,然后将最终的 action(或多个 action)传递给下一个中间件或 reducer。中间件的存在让 Redux 的数据流更加灵活,可以处理复杂的异步逻辑并提供更好的代码组织和可测试性。这样可以在返回的函数中进行异步操作,最终派发一个或多个真正的 action 对象到 reducer。

2023-08-14 09:54:17 358

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

值得注意的是,React diff 算法基于两个假设:相同组件产生类似的树结构,不同组件产生不同的树结构。因此,在编写 React 组件时,应尽可能为每个组件定义稳定的 key,避免出现不必要的 DOM 更新。React 的 diff 算法是用来比较虚拟 DOM 树的算法,它通过比较新旧两颗虚拟 DOM 树的差异,找出最少的 DOM 操作来更新实际 DOM,以提高性能。通过递归地比较并生成差异树,React diff 算法可以找到最少的变更操作,然后通过更新实际 DOM,从而以最高效的方式更新页面。

2023-08-14 09:52:58 347

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

Fiber 架构为错误处理提供了更好的机制。Fiber 架构是 React 16 版本引入的一种新的调度和协调机制,旨在解决 React 在处理大型应用程序时可能出现的性能问题以及用户交互响应的延迟问题。:Fiber 架构引入了任务优先级的概念,可以根据任务的紧急程度和重要性对任务进行优先级排序,确保优先级较高的任务能够尽早得到处理,提高用户交互的流畅度。:Fiber 架构支持任务的中断和恢复,即在渲染过程中,如果有更高优先级的任务需要处理,当前任务可以被暂停并稍后恢复,以确保更及时地响应用户操作。

2023-08-14 09:51:36 261

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

在受控组件中,表单元素的值由 React 组件的状态(state)管理,并通过事件监听和回调函数来更新状态。每当用户输入内容或选择选项时,都会触发相应的事件处理函数,从而更新组件的状态和表单元素的值。相比受控组件,非受控组件更加简单直接,不需要维护额外的状态和事件处理函数。而对于需要进行复杂验证和处理的表单,使用受控组件可以提供更好的控制和可维护性。受控组件(Controlled Components)和非受控组件(Uncontrolled Components)是 React 中两种处理表单元素的方式。

2023-08-14 09:49:57 145

原创 React组件之间如何通信?

通过创建 Context 对象,并将数据传递给 Provider 组件,可以使得所有位于 Provider 之下的组件都可以访问该数据。组件可以从共享状态中读取数据,并通过派发动作的方式来修改状态。:当多个组件共享相同的数据,并且需要对该数据进行修改时,可以将该数据提升到它们的共同父组件中,并通过 props 传递给子组件。当数据发生变化时,父组件的状态会更新,从而触发子组件的重新渲染,实现了组件之间的通信。子组件可以在特定操作发生时调用该回调函数,将数据作为参数传递给父组件,实现组件之间的通信。

2023-08-14 09:48:42 216

原创 说说react的事件机制?

事件处理函数接收一个合成事件对象作为参数,可以通过该对象访问事件相关的信息,如事件类型、目标元素等。合成事件是对原生事件的封装,提供了一致的 API 和属性,使得事件处理在不同浏览器中表现一致。React 的事件机制是建立在原生 DOM 事件机制之上的,通过使用合成事件(SyntheticEvent)来处理和管理组件内部的事件。需要注意的是,由于 React 使用了合成事件来封装浏览器原生事件,所以在使用事件属性时,命名需要遵循驼峰式命名规则,如。可以停止事件的传播,避免事件冒泡到父级元素。

2023-08-14 09:47:26 89

原创 说说React中setState执行机制?

React 会将更新操作合并成一次批量处理,创建新的状态对象,触发更新过程,最终更新实际 DOM,并触发相应的生命周期方法。:React 会将新的虚拟 DOM 树与旧的虚拟 DOM 树进行比较,找出差异并更新实际 DOM,只对有变化的部分进行更新。:React 会将新的状态对象传递给虚拟 DOM 进行比较,确定哪些组件需要进行重新渲染。:React 会根据新的状态值、旧的状态值以及可能的异步回调函数,创建一个新的状态对象。:如果更新过程中有组件状态的改变,React 会依次触发相应的生命周期方法,如。

2023-08-14 09:45:52 137

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

在 React 中,组件的生命周期包括以下不同的阶段。

2023-08-14 09:44:09 30

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

总结而言,Real DOM 适用于简单的页面,它可靠且功能丰富;而 Virtual DOM 适用于大规模、高性能的应用程序,通过减少对实际 DOM 的直接操作,提高了性能和效率。Virtual DOM 是 React 提供的一种中间层抽象,它是一个轻量级的 JavaScript 对象,和 Real DOM 结构相似。在数据更新时,React 会先对 Virtual DOM 进行操作和计算,然后再将变化应用到 Real DOM 上。Real DOM 是浏览器原生提供的,它表示当前页面的实际 HTML 结构。

2023-08-14 09:41:37 141

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

它会在内存中创建并操作一个轻量级的虚拟 DOM 树,并通过与实际 DOM 进行比较来确定需要更新的部分,最后只更新实际 DOM 中的变化部分,以减少不必要的 DOM 操作,提高性能。React 通过使用高效的 Diff 算法来比较虚拟 DOM 树的差异,并最小化需要进行的 DOM 更新操作。React 的核心思想是将用户界面拆分成独立的组件,每个组件具有自己的状态(state)和属性(props)。在组件更新后调用等。React 组件具有一系列的生命周期方法,用于在组件不同阶段执行特定的操作。

2023-08-14 09:39:18 199

原创 如何通过原生js 实现一个节流函数和防抖函数

当你需要控制某个函数在一段时间内被频繁调用时,可以使用节流(throttle)函数和防抖(debounce)函数。

2023-08-13 20:57:22 42

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

JavaScript 内存泄漏是指无用的内存对象仍然被占用而无法释放,导致内存使用量不断增加。

2023-08-13 20:53:06 127

原创 对自定义hook的理解,模拟简易版的useState

实现,它没有考虑到状态的批量更新、回调函数等更复杂的功能。通过自定义Hook,你可以将状态逻辑,副作用和其他功能封装为一个独立的函数,然后在多个组件之间共享使用。是一个自定义的 Hook,它接受一个初始值作为参数,返回一个长度为 2 的数组,包含状态值。2、在该函数内部定义逻辑和状态,可以使用react自带的Hook和其他自定义的Hook。自定义Hook是react中的一种特殊函数,它允许你从函数组件中提取可复用的逻辑。3、将需要共享逻辑的组件调用自定义Hook函数,获取返回的逻辑和状态。

2023-08-09 09:32:25 39

原创 用JavaScript封装一个使用递归方式的深拷贝方法deepClone

在某些特殊场景下,可能需要根据实际情况进行适当的调整。方法通过递归来实现深拷贝。,并对原始数组进行遍历。对于每个元素,使用递归调用。判断确保只处理对象自身的属性,然后使用递归调用。如果传入的对象是普通对象类型,则创建一个空对象。或者不是对象类型,如果是,则直接返回该对象。循环遍历原始对象的属性。来进行深拷贝,并将拷贝得到的元素添加到。来进行深拷贝,并将拷贝得到的属性值赋给。下面是一个使用递归方式的深拷贝方法。如果传入的对象是数组类型(使用。:这个示例假设目标环境支持。最后,返回拷贝后的对象。

2023-08-07 21:59:24 92

原创 面向对象编程的方式的理解

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,通过将数据和对数据的操作封装在对象中,以模拟现实世界的概念和关系。

2023-08-07 21:54:08 26

原创 js类型检验的方式

使用 typeof 运算符可以检测一个值的类型,它返回一个表示该值的数据类型的字符串。常用的类型有:"undefined"、"boolean"、"number"、"string"、"function"、"object" 和 "symbol"。但需要注意的是,typeof 对于数组、空对象和 null 的结果都是 "object",无法区分它们。通过检查对象的 constructor 属性,可以得到对象的构造函数以及对应的类型。除了以上内置的方式外,还可以根据自己的需求编写自定义的类型检测函数。

2023-08-06 19:23:16 132

原创 对事件循环(event loop)的理解,以及应用理解

事件循环(Event Loop)是一种用于处理异步事件的执行模型。它是基于事件驱动的编程范式,通过不断地循环检查事件队列,执行对应的回调函数来处理事件。

2023-08-06 19:15:16 110 1

原创 闭包的理解,优点缺点,应用场景

闭包由函数和其相关的引用环境组成,在函数定义的同时捕获了闭包的上下文信息,形成了一个封装了状态的可执行实体。闭包可以访问并操作该封闭环境中的变量,即使在创建闭包的上下文已经执行完毕。

2023-08-06 18:43:17 355 1

空空如也

空空如也

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

TA关注的人

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