- 博客(210)
- 问答 (2)
- 收藏
- 关注
原创 前端:利用生成器和迭代器实现分离逻辑
title: 前端:利用生成器和迭代器实现分离逻辑categories: 前端工作半年了常没时间、没动力学习新东西,每天就在忙着写业务逻辑,非常的枯燥。即使考虑到可以用新东西来实现某个需求,但为了保证业务的快速迭代,只能选择更稳妥的方式。
2024-03-25 22:39:51
916
原创 笔记:《Vue.js设计与实现》第二章阅读笔记
很有难度,比如 obj.foo,看似没有函数执行,但是如果 obj.foo 属性通过 Object.defineProperty 加入了 get 操作捕获或通过 Proxy 代理,就可能在这个捕获操作中发生了副作用,所以 foo 函数会加入到构建产物。在前端的发展历史中,Tree-Shaking 是由 Rollup.js 普及的,Tree-Shaking 的作用是去除运行时未使用或永远不会执行的代码以减少最终构建产物的体积。tips: 在开发的过程中,如果能以纯函数的形式实现,则以纯函数的形式实现。
2023-05-20 16:07:13
749
1
原创 前端:记录一次 unocss + eslint 的使用
title: 前端:记录一次 unocss + eslint 的使用categories: 前端。
2023-05-19 13:28:26
1164
原创 前端:记录一次 Vite 引入 Vant 的过程,生产环境不渲染 Vant 组件
我不知道我的做法正不正确,但是这着实解决了我目前的问题。希望有同学可以回答。的官方文档中,我并未找到有关于系统的配置,文档只是简写了。),在开发环境下使用是正常的,但是当我在。环境打包时,又出现了一个新的问题,经过前一个步骤引入 Vant 后(实现全局注册组件,通过自定义。是将所有的组件导出为一个。的形式按需引入组件。
2023-05-05 21:46:22
943
原创 Bugfix: unplugin-vue-component 找不到 Vant 组件的问题
title: “Bugfix: unplugin-vue-component 找不到 Vant 组件的问题”
2023-05-03 18:34:19
1780
1
原创 前端:记录一次monorepo的改造过程
f. 将 lint-staged 集成到 husky,这一部分是检查 git staged 缓存区代码的规范,配置 lint-staged,更新根目录的 package.json ,可根据自己的需求,增加写入以下内容。更改原有项目的 package.json,这一部分的功能是将原有的 git 提交策略删除,最后通过配置 monorepo 仓库的提交策略检查代码规范。更新根目录 package.json,加入快捷启动命令,便能在根目录下直接启动某一个项目,–filter | -F 表示对某一个项目生效。
2023-04-30 15:02:25
1251
原创 记录一次 DTO,Pipe,class-validator 结合使用过程中 class-validator 不生效的原因 | class-validator 不生效
记录一次 DTO,Pipe,class-validator 结合使用过程中 class-validator 不生效的原因 | class-validator 不生效
2023-03-20 08:40:58
541
原创 TypeScript类型体操:获取数组中元素对象属性的值作为新类型
遇到一个比较麻烦的问题,个人在项目中使用的技术栈,当前的需求是给一个Action定义类型以获得类型提示,而这个Action内部有一个key属性,key是一个字符串但是我希望仅限于某几个字符串。...},},很明显,当我们直接使用string作为key的类型,我们只能具体看代码有哪些操作符,如果直接在中重新写一遍字符串类型势必麻烦且不好维护,所以如何获取actions数组中元素对象的属性的值作为新类型就是我们要解决的问题。对于一个对象,我们可以使用keyof。
2023-03-03 21:40:15
2720
原创 解决 TypeError: opts.node.rangeBy is not a function
今天遇到的问题,网上寻找一番后发现这个解决方案,但是并不适合,因为我的版本已经高于问题版本。
2023-03-01 20:33:53
3687
原创 2022-11-28 Volta | yarn global 安装失败 | Usage Error: No project found
并且几乎所有的配置如 pnpm,yarn 等都放在 NodeJS 目录下,所以想通过 NodeJS 的版本控制工具来实现版本切换。,但是当他查找到我本地已有 NodeJS 程序时,询问是否需要管理本地的程序时我选择了是,然后非常难受的发现我的结构目录都被复制到。是通过链接来实现不同版本控制的,原有数据还有保留,通过重新配置目录与环境变量PATH恢复了,后来在使用过程中发现了。是比较适合我的,我个人偏向于 “有问题能找到答案,不需要踩坑” 的工具,了,也就是说全局安装需要使用。完成了初步安装后,我发现。
2022-11-28 17:40:52
721
原创 25. K 个一组翻转链表 | 链表 | 递归 | 子问题分解
直接实现反转K个一组翻转链表可能非常困难,但是可以分成长度为K的子串,每一个字串分别反转并拼接,最后返回即可。这里采用的是判断 递归 + 是否为null为basecase 实现。分析可以发现,整体的过程就可以分解成长度为。的部分字串,所以明显可以使用递归来实现。反转链表很容易实现,可以通过。
2022-09-29 20:57:09
189
原创 92. 反转链表 II | 反转链表 | 反转链表的前N个 | 反转部分链表
如果需要用递归来做这一道题目,需要理解反转链表和反转链表的前N个元素这两个题目。
2022-09-19 20:04:59
220
原创 206. 反转链表 | 递归 | 定义递归
定义一个递归函数前,必须要分清楚每一个小过程所做的动作,在此基础上分析最底部也就是理解basecase需要做的动作。递归函数的难点在于如何理清楚程序执行。
2022-09-08 22:20:09
162
原创 104. 二叉树的最大深度 | 层序遍历 | 遍历 | 子问题 | TypeScript
利用递归,遍历二叉树,最深的深度应当是一个叶子节点的深度,也就是说没有左右孩子的节点的深度。二叉树几乎所有的问题都可以通过前中后来解决,所以需要较大程度上理解并掌握前中后序的遍历。思路非常的简单,使用队列存储每一层的节点,遍历节点,将节点存入队列,直至所有层被遍历完。遍历二叉树和使用分解二叉树不要搞混了,遍历时就遍历,不要搞拆分分解。这两类思路分别对应着 回溯算法核心框架 和 动态规划核心框架。使用分解子问题的形式统计二叉树的最深深度。二叉树题目的递归解法可以分两类思路。二叉树的数据结构和算法的关键。
2022-09-06 22:24:56
289
原创 167. 两数之和 II - 输入有序数组 | 双指针 | nSum问题 | 有序数组 | TypeScript
双指针技巧能解决nSum问题,(有序数组)
2022-09-05 07:36:43
101
原创 26. 删除有序数组中的重复项 | 快慢指针 | TypeScript
对于动态语言来说这是非常容易实现的一道题目,但是作为算法题不应该使用动态语言的优势,如直接生成对象等等。或者觉得上面难以理解的话,可以参考另外一个思路。
2022-09-04 00:23:32
335
原创 167. 两数之和 II - 输入有序数组 | Map解构 | TypeScript
思路还是比较简单的,target - numbers[i] = num,等式左边便是遍历,等式右边就是需要判断的数据。
2022-09-03 20:23:00
257
原创 160. 相交链表 | 循环交替 | 双指针
在交替的时候就有: 3 + 4 === 4 + 3,如果在这个过程中出现了相等节点就返回,如果没有出现相等,那么最终n1=以最简单的例子来说:一个链表包含相交的长度的为3,另外一个链表包含相交的长度为4。通过循环交替来判断是否相交,最多只需要交替两次就可以结束判断。=null,这是一个巧妙之处。
2022-09-03 00:39:02
155
原创 力扣打卡:142. 环形链表 II | 快慢指针 | 双指针
链表中与位置有关的计算都可以考虑使用快慢指针,左右指针,如倒数第N个节点,删除倒数第N个节点,中间节点等。
2022-09-02 23:03:14
195
原创 力扣打卡:19. 删除链表的倒数第 N 个结点 | 双指针
思路很简单:用两个指针来确定位置,与位置有关的链表大部分都是和双指针有关。倒数第k个节点,链表的中点,删除倒数第k个节点等等。
2022-09-02 00:07:26
129
原创 力扣打卡:23. 合并K个升序链表 | 链表 | 合并链表
注意:如果需要原有的数组,那么需要注意数组长度的使用应该是新长度;如果是构建新数组使用则无此问题。遍历数组链表元素,合并其中的两个,不再是单独合并一个。遍历链表数组,合并每一条链表。
2022-09-01 23:15:33
123
原创 力扣打卡:86. 分隔链表 | 分隔排列
值得注意的是:需要去除每一个节点的next,否则可能会出现环。顺序遍历原链表,检查每一个节点并添加即可。
2022-09-01 12:22:10
112
原创 2022-08-17 记录一次排除Bug的过程 vue3 / uniapp 具名插槽不显示问题
错误点还是挺难找的,没有bug的提示。对vue3的文档用的不够熟练,虽然实现过一遍Mini-Vue,但是一些细节方面并没有照顾到,所以还是得熟悉文档。
2022-08-17 11:37:16
1624
原创 wet-英语困难户的好选择-控制台翻译
着实能提高我的效率的工具,也是第一个自己开发的比较满意的工具。GitHub地址🔗wet --》 we-translateVSCode的翻译插件还是挺好用的,但是只能翻译方向只能是英文到中文(也许我没发现)。想不出变量的英文名称就难受,得重新打开有道或浏览器进行翻译,而控制台/命令行是非常棒的、能提升效率的平台,所以呢就有了wet。配置因百度翻译标准版调用有限制(一秒),所以为了良好的体验最好申请个人的appid。百度翻译开放平台 (baidu.com)项目总结http/https模块qs.st.
2022-07-10 21:37:42
335
原创 JS-知识盲区 | async & await的认识
解析注意:async修饰的函数是一个同步执行的函数,但是当遇到了await,await后的所有代码块变为了微任务,如果再遇到了await,此时是上一个await的then中的任务,也就是微任务,此时能够从生成器和Promise结合中进行解释。最主要的还是async和await的同步的异步(微任务,比Promise优先级更高)。.........
2022-06-16 00:14:45
222
1
原创 前端Promise实现(二) | 初级版本的实现
/* =====================版本二========================== *//** * 版本二 * 可以发现,版本一中的ES5的回调写法在业务复杂之后会形成回调地狱,难以维护的。 * 版本二来初步探讨Promise的实现功能, * 为什么Promise能够解决或者是说极大的减轻了这种回调地狱 *//** * 先来看Promise利用的原理:利用new操作符,自动执行constructor函数 * * 毫无疑问的,Person的construct
2022-05-04 22:23:30
332
原创 前端Promise实现(一) | 传统的ES5的回调写法
传统的ES5的回调写法function foo(url) { let res = null setTimeout(() => { // 模拟网络请求 if(url === 'hello') res = "成功!" else res = '失败!' }, 2000) return res}let res = foo('hello')console.log(res) // null这样是拿不到结果的,只能拿到null,因为JS
2022-05-04 22:17:39
511
原创 蓝桥杯 | 国赛 | 2021 | LocalDate | Java时间类
问题描述如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。例如:2021 20212021 年 6 66 月 5 55 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 5 = 16 2 + 0 + 2 + 1 + 6 + 5 = 162+0+2+1+6+5=16,而 16 1616 是一个完全平方数,它是 4 44 的平方。所以 2021 20212021 年 6 66 月 5 55 日是一个完全日期。例如:2021 20212021 年 6 66 月 23 2323
2022-04-08 22:36:32
583
原创 子串分值和 | 递归 | 动态规划 | 递推
题目描述对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中出现的不同的字符个数。例如 f(“aba”) = 2,f(“abc”) = 3, f(“aaa”) = 1f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1。现在给定一个字符串 S [0…n − 1]S[0…n−1](长度为 nn),请你计算对于所有 SS 的非空子串 S [i…j](0 ≤ i ≤ j < n)Si…j,f(S [i…j])f(S[i…j]) 的和是多少。递推思路正常的思
2022-04-07 23:55:46
814
原创 力扣打卡:101. 对称二叉树 - 递归 明确一个递归函数的定义
力扣打卡:101. 对称二叉树解题思路从顶开始,检查左右两个节点是否相同,然后检查左节点的左孩子和右节点的右孩子 以及 左节点的右孩子和右节点的左孩子,就能很大程度上避免写条件的麻烦,因为每次检测都是在对比上层是否堆成对于一个节点(二叉树),只需要判断其值和左右孩子是否对称,如果不对称,那么无需继续判断。如果对称,则判断另外三个父子节点了。写递归函数,一定要明确这个函数的意义是什么,即使刚开始不知道怎么如何开始,只需要按照定义去写,大的方向就不会错流程明确check函数是检查两个子
2022-03-01 21:50:21
256
原创 Redis笔记(一)
互联网技术中,终极解决方案:加一层一. Java开发中技术分析从开发角度的技术选型来说,只需要功能性的技术即可完成业务的开发,但是仅仅只有功能性的技术不足以满足快速开发或者可维护的需求,所以需要引入扩展性的技术和解决性能类型的技术。二. 为什么添加NOSQL数据库(1). 负载均衡时,session对象的共享问题做负载均衡时,如果session不能共享,那么会导致在一台服务器上有数据,另外一台服务器上没有数据,显然这是不允许的。(2). session共享引发的不安全、大量IO操作问题.
2022-01-16 10:43:12
297
原创 MyBatis中resultType和resultMap的区别
MyBatis中resultType和resultMap的区别在使用MyBatis时,需要使用的时mapper.xml映射文件,结果集的返回大致是两种 resultType 和 resultMap, 那么这两者有什么区别和联系呢?resultType用来处理非常简单的结果集,就是列名能够与实体类属性匹配的的结果集(mybatis使用驼峰命名(student_id ⇒ studentId)也可以,但是字段必须要匹配)resultMap更擅长来处理复杂映射的结果集。比如一对一、一对多的复杂关系。最简
2021-12-27 23:56:22
1114
原创 55. 跳跃游戏 | 暴力递归 | 暴力求解 | 自顶向下 | 自底向上 | 动态规划
力扣打卡:55. 跳跃游戏解题思路分析状态分析题目给定的要求 0 号位置是否可以到达最后一个节点,那么需要求在跳跃范围内的每一个节点是否可以到达最后一个节点对于每一个元素的跳跃范围内的各个元素,只需要一个可以到达最后一个节点,那么当前的这个节点就可以到达最后一个节点暴力递归对于当前的元素,只要跳跃范围内的元素有一个可以到达最后一个节点,那么当前节点就可以到达最后一个节点对于当前的元素的跳跃范围内的元素,只要其自身的跳跃范围内内的元素有可以到达最后一个节点的,那么可以到达最后一个节点依次类
2021-12-18 12:59:51
1867
原创 198. 打家劫舍 | 动态规划 | 暴力递归 | 自顶向下分析
力扣打卡:198. 打家劫舍解题思路理解题目给定一组数组,找到数组中,一组和最大的序列对于数组中的每一个元素对于其和其后的元素,都有一个最大的序列注意题目中的寻找所有可能的过程中:就是回溯的过程,这个也就是动态规划和回溯的重要区别,动态规划能够消除重复的子问题具体来看看 planA() 纯暴力递归public int planA(int p, int[] nums){ if(p>nums.length-1) return Integer.MIN_VALUE; // 将整数的
2021-12-17 16:10:53
301
原创 494. 目标和 | 回溯 | 暴力求解 | 暴力递归
力扣打卡:494. 目标和解题思路理解题意:需要找到每一个可能,那么可以想到回溯法,也可以想到动态规划(关键是有没有重叠子问题)回溯做回溯前,先要弄清除对象是什么,所有的可能是什么,然后按照框架将对象遍历,定义的递归函数将可能遍历。最后统计结果对于需要遍历的对象,根据题目所给,每个数组元素都可以有正负两种状态那么也就是说需要遍历的对象是每个数组元素,这个递归好做,控制一个指针,从头到尾即可每个元素都可以有正负两种状态,也就是说:两种可能,一个是正,一个是负,for循环遍历框架,直接写成
2021-12-17 12:06:49
401
1
原创 343. 整数拆分 | 暴力求解 | 暴力递归 | 动态规划 | 自顶向下分析
力扣打卡:343. 整数拆分解题思路可能思路不是很好想到大于1的每一个数至少分成 1 + n-1 | 2 + n-2 | ...根据上面的分解,每一个大于1的数都可以分解成至少两个整数,那么这两个分解生成的两个整数如果同样属于大于1的这个范围那么可以继续分解,此时每一个数都可以分解成 2个 或者 n个 的数字的和如果从两个开始分,2,3,4,5,6 …分解下去,总是能找到乘积最大的时候流程函数先分解成两个数 for(int i=1; i<n; i++) ,1+n-1 | 2+n-
2021-12-16 23:24:51
142
空空如也
rust mod 三种拆分方式的顺序
2022-07-11
Java代理类为什么也要实现同一个接口?
2021-07-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人