- 博客(41)
- 收藏
- 关注

原创 Js实现二叉树
Js实现二叉树实现二叉树需要先知道二叉树的特征特征:1:若它的左子树不为空,那么左子树上所有结点的值都小于它的根结点2:如它的右子树不为空,那么右子树上的所有结点都大于跟结点的值上代码实现一个结点class Node { constructor(value) { this.value = value this.right = null this.left = null }}创建一个二叉树class Bina
2022-03-21 17:44:46
2208
原创 一文搞懂迪米特原则
迪米特原则,又称最少知识原则(Least Knowledge Principle, LKP),是面向对象设计和编程中的一项重要原则,其目标是降低类之间的耦合度,提高代码的可读性和可维护性。总之,迪米特原则是一种指导设计思路的原则,帮助开发者组织代码结构,促进良好的封装性,并努力减少因类间过度耦合而导致的问题。一个对象应当对其它对象有尽可能少的了解,即一个对象不应该直接访问非直接相关对象的方法或属性,而应通过其“朋友”或者代理进行间接交互。因此,通过这样的设计,各层之间的耦合度得以降低,实现了迪米特原则。
2024-04-20 12:00:56
912
原创 一文搞懂开放封闭原则
软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。这意味着当需求发生变化时,我们应该能够在不修改原有代码的基础上,通过新增代码的方式来满足新的需求。
2024-04-07 17:50:43
922
原创 一文搞懂里氏替换原则
如果一个类型T是一个父类型,那么对于任何类型的T的对象o1,都有一个类型SS是T的子类型)的对象o2,并且在所有T可以出现的地方,o2都可以替换o1并且程序的行为保持不变(正确性不受影响)。如果一个类型T是一个父类型,那么对于任何类型的T的对象o1,都有一个类型SS是T的子类型)的对象o2,并且在所有T可以出现的地方,o2都可以替换o1并且程序的行为保持不变(正确性不受影响)。
2024-04-07 13:38:41
1216
原创 Vite源码学习--调试源码
当我们开始构建越来越大型的应用时,需要处理的 JavaScript 代码量也呈指数级增长。包含数千个模块的大型项目相当普遍。基于 JavaScript 开发的工具就会开始遇到性能瓶颈:通常需要很长时间(甚至是几分钟!)才能启动开发服务器,即使使用模块热替换(HMR),文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率和幸福感。
2024-04-07 11:33:59
1544
原创 什么是依赖倒置原则
依赖倒置原则(Dependency Inversion Principle,DIP)是指高层模块不应该依赖于低层模块,它们都应该依赖于抽象。换句话说,具体类之间的依赖关系应该尽可能减少,而抽象类或接口之间的依赖关系应该尽可能增加。这个原则的核心思想是将依赖关系从具体的实现类转移到抽象类或接口上。通过这种方式,高层模块和低层模块都可以依赖于抽象,而不是依赖于具体的实现类。降低耦合性:具体类之间的依赖关系减少,可以降低代码之间的耦合性,使得代码更加灵活和可维护。
2023-11-27 19:56:05
1430
原创 umi3配置qiankun文档
组件模式消费微应用,那么数据传递的方式就跟普通的 react 组件通信是一样的,直接通过 props 传递即可:在子应用的挂载组件页面。默认情况下沙箱可以确保单实例场景子应用之间的样式隔离,但是无法确保主应用跟子应用、或者多实例场景的子应用样式隔离。插件会自动为你创建好 qiankun 子应用需要的生命周期钩子,但是如果你想在生命周期期间加一些自定义逻辑,可以在子应用的。1、微应用中会自动生成一个全局 model,可以在任意组件中获取主应用透传的 props 的值。消费微应用,那么你需要在。
2023-11-05 09:37:54
1127
原创 100行代码实现的React的useState
useState是react里面最重要的hook之一,本文我们主要是基于react原理,实现一个在改变state后能将最新的状态React渲染到页面这样一个功能。
2023-10-29 13:44:03
545
原创 npm install的详细过程
而当 foo 依赖 lodash@^2.0.0,bar 依赖 lodash@^1.1.0,则依据 semver 的规则,二者不存在兼容版本。会将一个版本放在 node_modules 中,另一个仍保留在依赖树里。比如 node-modules 下 foo 模块依赖 lodash@^1.0.0,bar 模块依赖 lodash@^1.1.0,则。获取到的是一棵完整的依赖树,其中可能包含大量重复模块。每个 semver 都对应一段版本允许范围,如果两个模块的版本允许范围存在交集,那么就可以得到一个。
2023-10-10 14:10:50
2569
原创 npm 常用命令
npm 常用命令npm install:根据项目中的package.json文件自动下载项目所需的全部依赖。npm install 包名 --save:安装的包需要发布到生产环境的,会出现在package.json文件中的dependencies属性中。npm list:查看当前目录下已安装的node包。npm list -g:查看全局已经安装过的node包。npm uninstall 包名:卸载指定包。npm config list:查看配置信息。npm init:初始化项目。npm p
2023-10-10 14:07:27
462
原创 git入门
git push --set-upstream origin newBranch(分支名)(newBranch需要自定义,就是当前分支在远程分支对应的名称)git branch --set-upstream-to origin/新分支名称。git branch --set-upstream-to origin/新分支名称。git commit -m “备注信息” --no-verify。git push --delete origin 旧分支名称。git branch -m 旧分支名称 新分支名称。
2023-08-21 14:36:11
257
原创 搞懂mobx只需要这一篇文章
(1) Mobx是一个功能强大,上手非常容易的状态管理工具。(2) Mobx背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。(3) Mobx利用getter和setter来收集组件的数据依赖关系,从而在数据发生变化的时 候精确知道哪些组件需要重绘,在界面的规模变大的时候,往往会有很多细粒度更新。(4)Mobx写法上更偏向于OOP 对一份数据直接进行修改操作,不需要始终返回一个新的数据 并非单一store,可以多store。
2023-08-20 22:04:09
929
原创 ts中的key!(非空断言)写法是什么意思
在 TypeScript 中,编译器有时会检查代码中的类型不匹配,例如将一个 null 值赋值给一个非空类型变量,此时编译器会发出错误提示。使用非空断言可以告诉编译器该变量的值不会是 null,从而避免编译错误。这种写法通常表示一个非空断言(non-null assertion),它用来告诉编译器该变量的值不会为 null。是否为 null,而会将其视为非空字符串。表示断言该值不会是 null,因此编译器不会检查。在 TypeScript 中,,因此编译器不会检查它的类型。,则整个表达式将返回。
2023-07-27 21:59:51
929
原创 从0开始搭建自己的脚手架
说白了,脚手架和一些脚本差不多,自己把命令写好了,到时候输入某个命令,就挨着执行。但是不是完全自动的,需要用户手动选择部分不同的命令。
2023-04-17 21:57:44
443
原创 前端单元测试入门
单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证1。它是一种软件测试方法,用于确保每个独立的软件模块(某个函数或者某个组件)都按照预期运行。
2023-04-03 20:33:56
1135
原创 精通闭包原理和作用域原理
什么是闭包呢?我们先看一段代码仔细研究一下内部函数 innerFunction 中的代码,看看我们能否预测会发生什么。● 第一个断言肯定会通过,因为外部变量 outerValue 在全局作用域内,并且在任何地方都可见。但是第二个断言呢?● 外部函数执行后,我们通过将内部函数的引用赋值给全局变量 later,再通过 later执行该函数调用内部函数。● 当内部函数执行时,外部函数的作用域已经不存在了,并且在通过 later 调用内部函数时,外部函数的作用域已不可见了。
2023-03-18 11:26:55
493
原创 React源码分析-手动实现React库
这篇文章主要实现一个简单的React。主要争对下面8个点来实现。需要先使用npx create-react-app my-app来创建一个运行的环境Step I: 实现createElement函数Step II: 实现render函数Step III: 并发模式Step IV: Fibers (虚拟dom)Step V: Render and Commit 阶段(渲染和提交阶段)Step VI: Reconciliation 阶段(dom diff)Step VIIStep VIII。
2023-02-14 10:54:39
680
原创 antd Table 源码分析
antd的部分组件是基于封装而来的,今天我们要讲的antd table也是基于/**table**封装而来的,这次antd的源码解析,大部分也是基于rc-table,这次源码分析主要是讲一些特殊的知识点。如果想了解更多,可以评论一下,我看到评论后会添加。
2022-11-08 11:33:59
2374
原创 dependencies devDependencies的区别
我们引入的npm包dependencies里面引入的依赖会安装到node_modules里面该包目录下的node_modules里面,devDependencies里面引入的依赖不会安装到node_modules里面该包目录下的node_modules里面。我自己的项目也引入了loadsh,antd,那么看看我项目的node_modules里面是有lodash文件的,然后也有antd,并且antd目录的node_modules里面也是存在loadsh。这是一个访问量很高的博客给出的答案。
2022-10-21 12:41:34
553
原创 前端策略模式
前端策略模式文章目录前端策略模式一、策略模式有什么用二、策略模式的定义二、策略模式有什么用1.引入库2.读入数据总结一、策略模式有什么用策略模式主要是为了实现开闭原则,减少面条代码里面大量的写if…else二、策略模式的定义定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。二、策略模式有什么用1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport
2022-04-25 21:19:18
1649
1
原创 如何写出优雅的代码
如何写出优雅的代码文章目录如何写出优雅的代码前言一、写出优雅代码的原则1.引入库2.读入数据总结前言优雅的代码有几个特征:1、可读性:代码是否容易看得懂2、可维护性:改bug是否容易3、可拓展性:是否容易添加新功能4、灵活性:添加新功能是否容易,老方法和接口是否容易复用5、简洁性:代码是否简单清晰6、可复用性:相同的代码不要写两遍7、可测试性:是否方便写单元测试和集成测试一、写出优雅代码的原则1.引入库代码如下(示例):import numpy as npimport p
2022-04-21 17:50:13
2340
原创 红黑树实现原理
Js实现红黑树前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、红黑树是什么?红黑树是一种平衡二叉树1.红黑树的特征1、包含二叉搜索树的基本规则2、结点是黑色或者红色3、根节点是黑色4、每个叶子结点都是黑色的空结点5、每个红色结点的两个子节点都是黑色的(就是说不存在连续挨着的两个红色结点)6、从任意结点到它的叶子结点
2022-04-01 18:03:10
1183
原创 MySQL基础命令
MySQL基础命令SQL的基本语法规范1、sql不区分大小写,但是习惯上关键字、系统保留字、函数名称大写,表名和列名小写;2、sql使用空格或者回车来分隔每个单词都一样,习惯上每个子句换行,WHERE子句中的每个条件占一行,子查询单独占一行;3、复杂的语句最好加上注释进行说明;4、sql语句中使用分号作为分隔符,系统读取到分号才会执行语句。数据定义语言(DDL) DDL是用于描述数据库中要存储的现实世界实体的语言,主要是用在定义或改变结构,数据类型,表之间的链接和约束等初始化工作上,大多在建
2022-03-30 14:48:35
3788
原创 Js实现哈希表
Js实现哈希表文章目录Js实现哈希表前言一、hashTable?二、Js代码实现hashTable1.核心代码2.测试代码总结前言提示:这里可以添加本文要记录的大概内容:哈希表的原理:https://zhuanlan.zhihu.com/p/95156642提示:以下是本篇文章正文内容,下面案例可供参考一、hashTable?“散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表
2022-03-30 14:41:52
2232
原创 Js实现栈
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Js实现栈数据结构一、栈的特征栈是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。二、代码实现1.使用Es6的class和Array来简单实现一下:class Stack{ .
2022-03-25 17:05:19
914
原创 Js实现链表
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Js实现链表前言链表是一直非常基础的数据结构,想学习数据结构知识,我们必须要了解的提示:以下是本篇文章正文内容,下面案例可供参考一、使用步骤1.链表是什么?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表主要是便于管理长度或数量不确定的数据,相对于数组,链表处理这种数据时比较节省内存。动态语言通常不大需要链表,因为动态语言的解释器帮你管理内存,但当你对空间效率或插入.
2022-03-24 17:58:25
2306
原创 git 关联远程仓库
本地git绑定到github仓库1、添加本地分支git checkout –b ‘’ 新分支名称‘2, 将本地分支关联到远端git push --set-upstream origin 新分支名称
2021-04-21 17:20:28
790
原创 webpack
WebPack打包过程1、读取配置文件和shell命令,对参数进行合并,得到最终的参数2、根据上一布得到的参数,来初始化compiler,得到配置项中的所有插件,运行run(),开始执行编译3、根据配置文件的entry,找到入口文件4、调用loader,对入口的模块进行编译,依次遍历,找到所有的依赖文件,调用loader进行编译5、得到loader编译后的模块,将入口文件和它相关的依赖模块生成一个个chunk文件,再把每个chunk转换成一个单独的chunk加入到输出列表6、在确定好输出内容后,
2021-04-20 21:42:25
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人