自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JS手写代码篇---手写call函数

今天主要手写了call方法:改变函数的 this 指向并立即执行该函数大概思路就是:通过将函数作为对象的方法调用来改变 this 指向手写代码最麻烦的就是有很多的边界需要考虑:- 检查调用者是否为函数- 处理 null/undefined 上下文的情况- 确保不污染传入的对象

2025-06-03 17:13:54 64

原创 React---day8

今天主要学习了不可变数据、全局事件传递和受控组件。在不可变数据部分,强调不能直接修改state,推荐使用新数组替代原数组来维护数据不可变性。通过EventEmitter实现跨组件事件通信,也直接敲了事件监听与触发的完整流程。最后学习了受控组件的实现方式,即表单元素值由React state控制。

2025-06-03 17:10:17 118

原创 JS手写代码篇---手写类型判断函数

先使用typeof判断输入对象的类型,如果是值类型就直接返回typeof识别到的类型,如果不是就要使用Object.prototype.toString.call()返回表示对象类型的字符串。

2025-06-02 21:36:01 150

原创 React---day6、7

这两天学习了组件通信、slot插槽、setState的源码、React的更新流程以及优化。

2025-06-02 17:50:24 678

原创 JS手写代码篇---手写节流函数

节流函数是一种性能优化技术,它控制函数在指定时间间隔内只能执行一次。与防抖函数延迟执行不同,节流函数直接限制执行频率。示例代码通过记录上一次执行时间,确保在等待时间内不再重复执行。适用于滚动事件等高频触发的场景。防抖则更适合如搜索输入框等需要等待用户停止输入的场景。

2025-05-30 22:51:39 594

原创 React---day5

React组件分为函数组件和类组件,依据状态可分为无状态和有状态组件,按职责分为展示型和容器型组件。React生命周期包括挂载(Mount)、更新(Update)和卸载(Unmount)阶段,关键方法如componentDidMount、componentDidUpdate和componentWillUnmount分别处理初始加载、更新和清理逻辑。组件间数据传递主要通过props实现父传子通信。

2025-05-30 22:49:45 1144

原创 JS手写代码篇---手写防抖函数

今天手写了防抖函数,很喜欢上电梯这个例子,会让整个代码变得通俗易懂

2025-05-29 11:29:09 165

原创 React---day4

今天学习了一下react的脚手架,有了脚手架还是会轻松很多噢,但是我发现我的react版本太新了何老师的很多都不一样,看来之后需要ai加文档学习了。

2025-05-29 11:26:03 739

原创 JS手写代码篇---Pomise.race

今天学习了手写promise.race,和promise.all嘴不停的就是他是只要有应该promise结束就要返回了,所以和all也有很大的不一样。哦哦哦~学到了一个小tips,Promise.resolve可以将每个元素转换为Promise,以处理非Promise的情况。

2025-05-28 15:47:49 618

原创 React---day3

今天学习了jsx的本质,之前我一直阶段学习本质没有什么必要,但是我发现学习完底层原理之后写代码会清晰很多。然后今天还进行了应该阶段小练习,也是写了很久,也深深明白了setState里面是不允许改变原有的数据的,还有就是调用函数哪一个地方,真的是深有感悟,一辈子都记得了哈哈哈哈哈

2025-05-28 15:44:38 563

原创 JS手写代码篇---手写promise.all

promise.all方法主要是处理多个异步的调用问题,传入一个数组,返回的是新的promise对象,它是静态方式。所以传入数组后我们循环遍历了这个数组,如果它是普通值,如果是就要直接添加到结果数组里卖弄,如果不是,then等待结果,只要有一个错误,那么就直接reject,最后当结果数组的长度和传入数组的长度相同的时候就要resolve啦~~

2025-05-27 23:01:13 317

原创 React---day2

嗨嗨嗨!!!从南京gap回来啦,南京真的是很美很有历史底蕴的城市呢,好想再去一次哈哈。今天主要学了一些jsx的核心语法,和vue有一些相似也有很多不同。主要讲了嵌入、绑定以及渲染三个方面,具体在下方,明天也要继续加油!!!

2025-05-27 14:18:35 764

原创 React---day1

啦啦,今天对react有了一点点新的认识捏,从react的基本框架到绑定数据最后再到编写函数改变数据的值,让我一步一步揭开react的面纱,它的语法确实要灵活很多,组件化也体现了出来,很期待接下来的学习内容。

2025-05-21 20:52:26 699

原创 JS手写代码篇---手写Promise

手写 Promise 的核心在于实现状态管理、异步回调和链式调用。首先,Promise 有三种状态(pending/fulfilled/rejected),通过构造函数接收执行器函数,并用 `resolve` 和 `reject` 更新状态。

2025-05-21 20:50:09 735

原创 力扣算法---哈希表总结篇

一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用。哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。

2025-05-21 20:47:41 236

原创 Vue.js---立即执行的watch与回调执行时机

Vue.js中watch有两个关键特性:立即执行的回调函数和回调函数的执行时机。首先,当immediate选项为true时,watch会在创建时立即执行一次回调函数。通过封装scheduler调度函数,可以在初始化和数据变更时执行回调。其次,flush选项用于指定调度函数的执行时机,当flush为'post'时,回调函数会被放入微任务队列,等待DOM更新后执行;否则,回调函数会同步执行。

2025-05-19 16:22:15 267

原创 力扣算法ing(73 / 100)

四数相加就体现了map的好处,受到之前两数相加的启发,我选择了先计算前面两个数进入map,后遍历后两个数求和看看是否存在与map当中,如果存在我直接ans++,但是第一次提交的时候答案错误了,ans++代表的是map里面只有一个sum,但是有的时候可能会有多个,所以正确方法一个是将次数也要存起来,直接用ans加次数就可以了。

2025-05-17 17:47:59 919

原创 Vue.js---watch 的实现原理

这一次接触到了平时使用的watch属性,它的底层实现其实就是effect以及options.scheduler,为了更加通用watch 使用 traverse 函数递归遍历对象的所有属性。然后我们也实现了传入getter函数,主要是对source进行判断,函数就赋值给getter直接执行,参数就traverse 递归遍历,最后我们通过懒加载 effect 实现了新旧值的对比,确保回调函数能够获取到变化前后的值。

2025-05-17 17:46:28 352

原创 JS手写代码篇---手写 new 操作符

new的手写主要通过它实现的四个步骤进行一一实现,创建一个原型被设置为构造函数的 prototype 属性的对象,改变this的指向,判断新对象的类型最后进行对应的处理。

2025-05-17 17:41:27 339

原创 力扣算法ing(72 / 100)

本文介绍了两个与哈希表相关的算法问题:两个数组的交集和快乐数。对于两个数组的交集问题,通过使用Set数据结构来去重,并利用Set的has方法判断元素是否存在于另一个数组中,最终返回交集。优化后的代码通过减少遍历次数和直接使用Set的特性,提升了效率。对于快乐数问题,通过不断计算数字各位的平方和,并使用Set记录中间结果,判断是否进入循环或最终得到1,从而确定是否为快乐数。两个问题都充分利用了Set的去重和查找特性,展示了哈希表在解决此类问题中的优势。

2025-05-16 21:36:25 682

原创 Vue.js---计算属性computed和lazy

computed属性的实现我们首先用到了懒加载effect,需要使用的时候才使用。因为我们前面返回了effectFn作为effect函数的返回值,那我们就可以手动调用该副作用函数了。接着我们实现了computed属性,我们是传入一个getter函数和懒加载属性,为了解决多次访问会导致effectFn多次计算,我们需要缓存value。但是我们如果修改obj.foo的值,我们发现并没有响应的修改最后的sumRes,那是因为dirty并没有在修改值之后被修改为true,所以我们就要使用scheduler选项,在

2025-05-16 21:33:28 663

原创 JS手写代码篇---手写 instanceof 方法

instancecof用于检测一个对象是否是某个构造函数的实例。它通常用于检查对象的类型,尤其是在处理继承关系时。这种原型链机制是 JavaScript 继承和原型继承的基础。通过原型链,JavaScript 实现了对象的属性和方法的继承。这就让我想到本道题木的解题思路:在函数当中我们输入目标和待测类型,进行循环,如果原型链上有待测类型的原型返回true,没有也就是当了原型链的终点null,返回false

2025-05-16 21:16:35 207

原创 JS手写代码篇---手写 Object.create

在手写代码时,理解代码的作用和实现效果是关键。以手写 Object.create 为例,其核心思路是创建一个新对象,并将传入的对象作为其原型。通过定义一个构造函数 F,将其原型设置为传入的对象 obj,然后返回 F 的实例,即可实现类似 Object.create 的功能。测试结果表明,手写的 create 函数与原生 Object.create 方法效果一致,成功创建了以 person 为原型的新对象 child1。

2025-05-15 18:07:51 220

原创 Vue.js---避免无限递归循环&& 调度执行

今天一下子看了两小节的内容,首先是避免无限循环:在执行无限循环的时候track何trgger的副作用函数都是activeEffect,那么解决方法就是在trigger当中判断activeEffect和effect函数是否是相同的。然后我看了调度,其实vue当中控制调度是添加一个调度函数来实现的,传入一个调度函数,在track当中处理这个调度函数,trigger就执行调度方法。

2025-05-15 17:45:41 454

原创 力扣算法ing(71 / 100)

本道题考的是对set的敏感度,我们知道set最大的优点就是不含重复的值,这对于本道题目有大大滴好处,先初始化一个对比set,后nums2是否在set中,在处理nums2进答案数组的时候,也是为了去重,我们事先将答案数组转化为set,后转化为数组的。

2025-05-15 14:56:31 189

原创 Vue.js---嵌套的effect与effect栈

在响应式编程中,effect函数用于注册副作用函数,当依赖的响应式数据发生变化时,副作用函数会自动执行。然而,当effect函数发生嵌套时,可能会出现副作用函数覆盖的问题。具体表现为,内层effect函数的执行会覆盖全局变量activeEffect,导致外层effect函数的依赖关系被错误地收集。 为了解决这个问题,引入了effect栈的概念。在副作用函数执行时,将其压入栈中,执行完毕后弹出,并始终让activeEffect指向栈顶的副作用函数。这样,每个响应式数据只会收集直接读取其值的副作用函数,避免了嵌

2025-05-14 23:22:20 399

原创 力扣算法ing(70 / 100 )

这道题考的是对map的敏感度以及map的方法的使用,利用map记录下s字符以及出现的次数,遍历t字符,如果s字符里面有t的其中一个字符,值就要对应减一,当减到值为0的时候,就要消除键。如果最后map的长度等于0就是相等,不等于就是不相同哈希表,我来啦!!!

2025-05-14 16:00:42 980

原创 Vue.js---分支切换与cleanup

解决分支问题,主要是clearUp函数在副作用函数执行前清除旧的依赖关系,确保只有当前实际使用的属性变化时才触发更新,值得注意的是我们遍历effects集合,当副作用函数执行的时候会调用clearUp函数清除,实际上就是从effects集合中将当前执行的副作用函数剔除,但是副作用函数的执行又会导致其重新被收集到集合中,陷入死循环,我们要构造一个集合并遍历他

2025-05-13 23:21:35 387

原创 力扣算法---总结篇

数组是存储在连续内存空间中的相同类型数据集合,支持通过下标索引快速访问元素。由于内存地址的连续性,数组在删除或添加元素时通常需要移动其他元素,且元素只能被覆盖而非真正删除。常见的数组操作包括二分查找、双指针法和滑动窗口。二分查找强调循环不变量原则,确保区间定义的清晰性;双指针法通过快慢指针在一个循环中完成两个循环的工作,常用于移除元素;滑动窗口则通过动态调整窗口起始位置,将时间复杂度从O(n^2)降低到O(n)。此外,贪心算法在处理数组问题时也常被使用,如通过大饼干满足大胃口的策略。数组操作在算法面试中占据

2025-05-13 22:07:05 973

原创 《Vue.js》阅读之响应式数据与副作用函数

《Vue.js设计与实现》一书深入探讨了Vue3的响应式系统,重点介绍了如何通过Proxy实现数据的响应式更新。书中详细讲解了副作用函数和响应式数据的概念,并通过代码示例展示了如何拦截数据的读取和设置操作,以实现自动更新。具体实现包括使用Proxy拦截对象的读取和设置操作,并通过WeakMap和Set来管理副作用函数。书中还提供了封装函数的方法,如track和trigger,以简化代码结构。通过这些技术,开发者可以更好地理解Vue3的响应式原理,并应用于实际开发中。

2025-05-12 20:34:36 378

原创 力扣算法ing(69 / 100)

这道题目可以说在面试中出现频率较高的题目,本题并不涉及到什么算法,就是模拟过程,但却十分考察对代码的掌控能力。看到题解使用的边界方法,我突然领悟了

2025-05-12 17:14:32 225

原创 力扣算法ing(68 / 100)

双指针:因为要求是递增嘛,我们设两个指针指向原数组的首尾端,设置一个新的数组,从最后开始插入数字。暴力解法:遍历平方之后使用sort。组成的新数组,要求也按。

2025-05-08 16:08:40 111

原创 力扣算法ing(67 / 100)

左闭右开区间:while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]

2025-04-30 15:55:40 315

原创 TS类型体操练习

这是我ts体操练习的第一题,其实还不是很熟练,我也是看了答案写的,我感觉有一点像是根据文字写代码了,也用到了泛型、映射的知识,继续加油!!!

2025-04-30 15:22:59 213

原创 力扣算法ing(66 / 100)

这一道题就是典型的贪心算法问题,大饼干肯定满足大胃口和小胃口,所以从最大的饼干开始遍历,依次遍历大胃口到小胃口。注意判断条件,因为sIndex是饼干,它要大于0才能进行比较和移动指针。

2025-04-25 11:09:49 183

原创 力扣算法ing(65 / 100)

总结:这道题目在上到题目地基础上要进行去重,因为不能排序加判断重复所以这里我才用了set判断,注意是要在添加到path之前使用判断逻辑。

2025-04-24 14:21:24 178

原创 力扣算法ing(64 / 100)

总结:这一道题目和其他的有很大的不同,它是排列,使用过的还会继续使用,这时候最好维护一个舒勇数组,使用过的数字要进行标记,然后回溯就会好很多。和我们想要的是不一样的,分析其实是 backingTraking(i );从0开始搜索,如果path里面有就跳过,遍历剩下的,如果没有才添加。返回其 所有可能的全排列。你可以 按任意顺序 返回答案。if判断条件长度===nums长度。这个就是111,112,113…我们需要一个表示是否使用过的函数。给定一个不含重复数字的数组。全排列的话就是允许重复了。

2025-04-23 11:02:05 172

原创 力扣算法ing(63 / 100)

这道题的难点是去重和判断升序,去重也不是之前的排序+判断相等,因为它不能排序,所以这里使用了set方法。判断升序,就是在添加到res之前进行判断,我直接就是暴力算法了

2025-04-22 08:31:19 161

原创 力扣算法ing(62 / 100)

总结:这一道题在78题的基础上多了“重复元素”的条件,那么这一道题的主要目的就是去重,回溯去重两个步骤,排序加跳过。

2025-04-21 09:35:27 178

原创 力扣算法ing(61 / 100)

这一道题目在经过前两题的熏陶之后,已经有了思路了,但是不能够照搬回溯的公式在这题目也得到了验证。我最开始就是按照回溯的公式写的,执行错误,这个不是直接截取子集了,应该是没遍历一个就添加到path中,把path添加到res中。

2025-04-20 11:09:41 216

空空如也

空空如也

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

TA关注的人

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