- 博客(49)
- 收藏
- 关注
原创 JavaScript 事件循环机制详解及项目中的应用
JavaScript事件循环机制解析:单线程通过调用栈、任务队列和事件循环处理异步操作。同步代码直接执行,异步任务分为宏任务(setTimeout等)和微任务(Promise.then等)。执行顺序遵循"同步>微任务>宏任务"原则,每个宏任务执行后都会清空微任务队列。async/await本质是Promise语法糖,await后的代码作为微任务处理。典型示例展示了"1 4 3 2"的输出顺序,体现了事件循环的优先级规则。理解这种机制对掌握JavaScrip
2025-12-14 02:35:22
105
原创 我对防抖(Debounce)的一点理解与实践:从基础到立即执行
本文总结了防抖(Debounce)的概念、应用场景及实现方式。防抖通过控制函数执行频率,解决高频触发问题,常见于按钮点击、表单提交等场景。文章介绍了基础版和立即执行版防抖的实现逻辑,分析了普通函数与箭头函数在this绑定上的差异,并解读了Underscore.js源码的核心思路。防抖本质依靠定时器和状态控制,关键在于理解冷却期机制和this绑定规则。作者分享了项目实践经验,欢迎读者交流讨论。
2025-12-13 22:20:45
430
原创 Vue3 + Keep-Alive:实习中遇到的 window 滚动问题与实践
实习项目中遇到Vue3+Keep-Alive下window滚动位置共享问题:由于window.scrollY是全局状态,导致不同页面切换时滚动位置错误保留。解决方案包括两种:1) 开发滚动位置管理工具,通过Map保存各路由滚动位置,在组件生命周期中恢复;2) 简单项目中直接在路由切换后重置到顶部。两种方案根据项目复杂度选择,既保证用户体验又易于维护。
2025-12-06 15:22:41
275
原创 Vue 3 Keep-Alive 深度实践:从原理到最佳实践
本文深入探讨了Vue 3中Keep-Alive组件的使用原理与最佳实践。Keep-Alive通过缓存组件实例来优化用户体验,避免重复创建销毁组件,保留状态和滚动位置。文章从基础使用、Vue Router集成到常见问题解决方案展开,重点分析了include/exclude属性基于组件name的匹配机制及其潜在问题。针对命名冲突和缓存控制难题,提出了基于路由meta的解决方案,通过动态判断路由元信息来决定是否启用缓存。同时介绍了生命周期钩子(activated/deactivated)在状态管理中的应用,为开发
2025-12-06 15:19:07
1255
原创 页面栈溢出问题修复总结
本文总结了uni-app中页面栈溢出问题的修复方案。问题源于频繁使用navigateTo导致页面栈超过10个上限,表现为ai-write与template页面循环跳转时持续压栈。解决方案通过区分页面来源:从ai-write进入时用navigateBack返回,从外部进入时用redirectTo跳转。实现采用URL参数传递来源标记+本地存储跨生命周期保存状态,并添加错误处理机制。关键点在于合理选择跳转API(navigateTo/redirectTo/navigateBack)和正确管理页面状态,最终形成闭环
2025-12-05 18:33:41
840
原创 Vue 3:我在真实项目中如何用事件委托
摘要: 作者在Vue3开发动态Todo列表时,最初为每个删除按钮绑定@click事件,但随着列表增长,面临事件监听器过多、动态列表维护困难、模板臃肿等问题。通过重构为事件委托(仅在父元素<ul>绑定事件,利用事件冒泡统一处理子元素交互),显著优化了性能与代码可维护性。文章对比了传统绑定与事件委托的差异,强调其在动态列表、多操作场景下的优势,并解析了Vue事件修饰符(如.stop、.prevent)的实际应用。最终结论:事件委托在Vue3中仍具价值,能简化模板、提升性能,适合复杂交互场景。
2025-12-03 11:15:55
1096
原创 前端事件冒泡详解:从概念到我在项目中的真实踩坑
本文分享了前端开发中事件冒泡机制的经验总结。作者通过可乐气泡的比喻解释了事件冒泡原理:从目标元素逐级向上传递至document/window。文章指出事件冒泡的优势(事件委托、性能优化)和潜在问题(意外触发父级逻辑),并重点介绍了在UniApp/Vue项目中通过@click.stop和event.stopPropagation()阻止冒泡的方法。作者结合上传图片功能的实际案例,展示了未阻止冒泡导致同时触发父子逻辑的问题,强调在嵌套点击场景中合理使用.stop的重要性。最后建议开发者理解并善用事件冒泡机制,避
2025-12-03 10:09:56
546
原创 前端和运维的哪些爱
本文总结了Nginx转发配置的关键知识点和404问题排查经验。主要内容包括:1) 通过实际案例说明前端接口404问题的排查过程,发现是后端新增路径前缀未同步导致;2) 详细解析Nginx路径匹配规则,重点对比proxy_pass加斜杠与不加斜杠的区别;3) 提供配置建议,推荐在API转发时使用location+proxy_pass带斜杠的写法;4) 总结路径不一致导致404的根本原因及解决方案。文章通过具体示例和对比表格,清晰展示了Nginx转发的核心机制,对前后端联调具有实用指导价值。
2025-11-27 22:51:32
621
原创 微信小程序录音功能
文章摘要:本文分享了开发微信小程序录音功能时遇到的问题及解决方案。作者发现同事代码无法上传录音后,自己实现了一个纯净的hooks,支持录音、暂停、播放和上传功能。该hooks封装了录音状态管理、错误处理和音频播放等功能,并提供了响应式变量供页面使用。文章详细介绍了hooks的实现细节,包括录音计时、错误回调等,并给出了使用示例。作者最终通过自主实现验证了功能可行性,为后续排查同事代码问题奠定了基础。(150字)
2025-11-27 00:45:05
225
原创 案例6-1.4 地下迷宫探索分数 30
问题分析迷宫节点和边:节点表示灯和开关。边表示通道,节点之间的直接连通关系。目标:从指定起点出发,遍历所有节点(点亮灯)。如果无法遍历所有节点,输出部分遍历路径并以 0 结束。路径唯一性:采用深度优先搜索(DFS),并在访问时优先选择编号最小的邻居节点。解题步骤输入数据:读取节点数 NNN、边数 MMM、起始节点 SSS。使用邻接表存储边的关系,并对每个节点的邻居列表排序。DFS 遍历:从起始节点 SSS 开始,访问所有能访问的节点。记录路径,同时注意在回退时也记录路径(形成回
2024-12-09 14:26:58
443
1
原创 基础实验6-2.6 最短工期(拓扑排序)
建图与拓扑排序:项目中的任务可以看作一个有向图,其中每个任务的开始和结束里程碑就是图中的节点,任务的工作时长则是有向边的权重。如果任务从节点 u 到节点 v,工作时长为 w,则我们在图中添加一条从 u 到 v 的有向边,并记录权重为 w。拓扑排序:为了找到最早完工时间,首先需要对任务依赖关系进行拓扑排序。这可以帮助我们在考虑每个任务时,确保其所有前置任务都已完成。计算最早完成时间:在进行拓扑排序的同时,我们可以计算每个节点的最早完成时间。假设我们在拓扑排序过程中访问到节点 u,则节点 u
2024-12-06 00:46:34
813
原创 基础实验4-2.7 修理牧场
通过贪心算法和优先队列,我们能够高效地解决这个最小锯木花费问题。使用最小堆来确保每次总是选择最短的两段木头进行拼接,最终得到最小的切割成本这种手动实现的方式不依赖 C++ 的,而是通过数组和堆操作函数实现了最小堆的核心功能。
2024-10-17 20:09:18
934
原创 基础实验4-2.2 列出叶结点
定义了一个 tree 数组,用来存储每个节点的左右孩子。每个元素是一个 pair 类型的对,存放左右孩子的编号,使用 "-" 表示没有孩子。定义了一个 isChild 数组,用来标记哪些节点是其他节点的孩子。
2024-10-17 19:55:41
991
原创 基础实验5-2.2 电话聊天狂人
基础实验5-2.2 电话聊天狂人分数 25全屏浏览切换布局作者 DS课程组单位 浙江大学给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。
2024-10-17 19:43:15
249
原创 案例5-1.3 整型关键字的散列映射
散列函数和线性探测法仍然用于处理关键字的插入。处理重复关键字:使用一个哈希表(或字典)来记录每个关键字的第一次插入位置。如果关键字已经存在于该记录中,直接输出其记录的插入位置,而不再进行新的插入和探测。输出格式控制:输出每个关键字(包括重复的)的散列表位置。
2024-10-17 16:47:42
1087
1
原创 习题2.4 递增的整数序列链表的插入
L是给定的带头结点的单链表,其结点存储的数据是递增有序的;本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。所以为了方便, 我们可以直接看这个结点的下一个结点对应的Data值即p->Next->Data。这里插入的时候 房子指向的下一个结点消失,我们就先将p->Next 赋值给q->Next。在移动一次后p是指向1的结点,而p->Next 是指向下一个结点,就是2 的结点。链表插入的时候,我们找到的比它大的,我们插入的时候是需要前面一个的结点的。
2024-05-01 20:11:33
621
原创 习题1.9 有序数组的插入(思路讲解+代码)
思路这题根据题目来就是,先给出一个有序的降序数组,然后在给出一个数字,插入在里面有几个要求1、这个数字在数组里面有的 不插入2、加入和会超出最大限制的不要3、插入后要求一样保持是一个递减的数组这个时候就思路就清晰了我们只需要做到,在1和2 的时候返回false然后就是满足的时候插入这个是一个递减的序列,我们需要从第一个开始,找到小于它的那么这个时候必定是插在这个数的前面我们的方法就是将这个数字及其以后的全面后移一位后然后把这个位置给放入当前插入的数
2024-05-01 19:22:05
823
原创 通过先序和中序求后序(通过后序和中序求先序)
然后下一步就是在左子树后序中的位置,然后在在左子树里面在根节点,在找里面的左子树和右子树。然后在中序中查找相同的元素,在这个元素左边的为左子树,右边的右子树。如图,先给了一个后序和中序,后序的最后一个为根节点。这个时候第一步用二叉树的慢慢来画就是如下的样子。1、利用后序和中序的特点来求出二叉树。一、通过先序和中序求后序。二、通过后序和中序求后序。
2024-05-01 19:02:38
611
原创 习题1.8 二分查找
假如有一个递增的数列如下图为 4 5 6 8 13 17在里面找到 5用二分查找就是中间mid = (i(头) + j(尾)) / 2 这里的/2 是对2 取整这里是(1 + 6) / 2 等于 3, i = 1, j = 6, mid = 3然后第3位的 6 > 5 说明是在6 之前,所有6不要了,要6 前面的这个时候 i 还是等于1, j = 吗mid - 1; 原因是第3位都不满足所有向前移动一位在计算出mid = (i + j) / 2 等于 1第一位
2024-05-01 18:40:36
283
原创 P1443 马的遍历
有一个 𝑛×𝑚n×m 的棋盘,在某个点 (𝑥,𝑦)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。首先马所在的位置是不需要走的,所有为0;而从零开始走,能到地方肯定为0 + 1;而从0 + 1 地方走的 肯定是 在它的基础上在加一, 即 0 + 1 + 1;很容易发现,这个是先看第一步 ,第一步完了才是第二步…………这个是深度优先搜索(bfs)
2024-04-29 16:44:28
360
原创 P1002 [NOIP2002 普及组] 过河卒(c++ dp)
首先这题卒只有向下和向右两个方向走,遇到马能到的位置,不能走我们会发现如下图,当我们到达(1,1)这个点的时候可以是(0,0)右走在下 也可以是(0,0)下走向右在通过(2,1)一样会发现路线条数为(到达上面个点的条数加上到达左边个点的条数)因此状态转移方程为graph[i][j] = max(graph[i][j],graph[i - 1][j] +graph[i][j - 1[]);这是我一开始的代码#include#include
2024-04-29 14:24:08
835
原创 L2-051 满树的遍历(C++思路简单,递归的办法)
先序遍历我们口语用递归的方式去找首先是根节点找到它从左到了的结点,如果结点下面没有结点,就按顺序到旁边的结点输出如果有结点我们找到这些规律就是,需要通过父节点,把字结点存在一起,然后排个序,结点下面有节点的,继续往下面找,没有结点了,返回根节点下面的下一个结点,直接用一个递归就可以解决
2024-04-25 22:15:31
1696
1
原创 L2-050 懂蛇语(c++语言超简单用自带库函数)
这题的思路就是,帮刚开始存入的字符串提取出每一个单词的第一个字母然后在组成一个字符串,用来当作mapsnake中的string中的map键值而本身的字符串就存入string类型的vector容器中,作为map的值然后把后面有一样的以开头组成的字符串 也存入string类型的vector容器中这个时候里面就有2个及其以上的字符串然后在查询的时候,相同操作,提取单词第一个字符组成的字符串在map键值里面找,如果没有就输出这个查找的字符串
2024-04-25 00:19:28
1861
2
原创 L2-049 鱼与熊掌(C++简单易懂)
思路:先将物品清单存起来然后在输入查找哪里,一边输入一边查找统计个数因为 每一行物品清单的物品不同,我又想着难得去记录所以直接记录一个最大得件数这样在遍历得时候,每一个都可以被遍历完,虽然有的超出了,但是不影响答案这题很简单,不用想得太复杂,简单化,加油!!!
2024-04-24 19:36:58
1014
1
原创 二叉树的先序、后序、中序、层序遍历(递归的方法)
就是先根节点的左子树,然后根节点 然后是右子树。我的理解就是 先根节点,然后在左子树,右子树。就是先左子树,然后右子树,最后根节点。
2024-04-23 20:19:11
195
原创 PTA 天梯赛 L2-006 树的遍历(c++代码简单易懂,有详解)
1、层序遍历先用一个队列来存结点 输出元素然后看这个结点有没有左右结点都有的话先存左节点,因为队列先进先出首先后序的根节点是在后面的,这个时候我们在中序里面找到与之匹配的元素 这个位置为index在index的左边便是左子树,在它的右边便是右子树然后后序遍历的规则是左孩子 右孩子 根节点我们可以通过index减去中序遍历的第一个的位置,得到当前这个根节点一共多少个左子树元素后面的就是右子树的元素个数
2024-04-23 17:23:24
1200
原创 PTA L1-101 别再来这么多猫娘了!(c++ 超时的错误的来,超简单)
分析:首先,题目会给出几个违禁词,需要存起来然后给出一个字符串,你去想违禁词给替换掉(值得注意的是,有一点可能就是,违禁词也可以是被替换的那个单词 )意思是,一开始找到违禁词过后,先不要急着换,先替换成一个其他的,最后统一换还有查找的查找到一个违禁词过后,还需往后面继续查找有没有这个违禁词,直到没有 才开始查下一个违禁词 就可以用到find(查找的东西,位置);总结:1、需要存违禁词2、一开始不要直接替换,先替换为其他特殊字符,最后统一换3、查到一个违禁词后,要继续看看,后面还有没有
2024-04-21 22:31:33
1038
6
原创 PTA L1-059 敲笨钟(字符串,简单容易理解 C++)
我们需要在输入的字符串中判断逗号前面有没有ong 和 点前面有没有ong换种方式理解就是看看里面有没有 子字符串",ong" 和 ".ong"if (s.find(c1) != -1 && s.find(c2) != -1)有的话,就开始把最后3个单词换掉没有就输出"Skipped"判断我们从后面开始数,遇到3个空格就停下来,标记这个位置,然后把这个空格前面的全部输出,包括自己这个空格,最后在后面输出"qiao ben zhong."if (s.find(c1) != -1
2024-04-17 13:48:25
925
1
原创 集美大学2024年团体程序设计天梯赛模拟赛( H 创造花田的魔法) 思路清晰简单明了,有代码有思路
第一点题目分析完后我们得到:地图是n * m 的有湖泊L(当且只有它的周围8个方向都是湖泊L的时候种荷花S)山脉M (不种任何东西)青草块G 1.周围没有房屋H,有湖泊L,种水仙N 2.周围没有房屋H,没有湖泊L,种苍月草N房屋H (不种任何东西,且周围不能种花)第二点那么我们可以定义四个变量 L,M,G,H 来统计当前这个点周围有哪些这个点自己是湖泊,且周围湖泊L== 8 的话,种荷花S这个点是青草块 1、周围房屋H == 0 且有
2024-04-12 11:05:14
834
原创 基础实验7-2.3 德才论分数 25(简单易理解c ++ 数据结构)
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
2024-03-29 10:01:25
457
1
原创 L2-026 小字辈 PTA (简单好理解 一看就懂 思路清晰)
这个题理解以后我的想法是先放入一个数组里面存上他们的辈分 然后用一个数组记录这个人有没有被调查过辈分。所以就是用dt数组记录当前这个人的辈分。找到辈分最大的,然后一个数组存下来。t数组来确定这个人是已知辈分的。然后用一个函数来递归。
2024-03-27 00:20:35
376
原创 L2-048 寻宝图 PTA
用我们自己的想法思路来就是,直到这个岛屿的周围全是0的时候,这个就是一个单独的岛屿。我们遇到一个不为0的点,去找上下左右,如果上下左右中有一个点不为0。那就在找这个点的上下左右 以此类推,你会发现,这有一个递归。其中dx和dy不懂得可以看一下注释,还不懂的可以评论一下。而宝藏的话,只要这个岛屿上面有一个就是有。而终止点就是该点位0 或者到了边界。这一题的思路是用深度遍历。因此dfs就可以这样写。其他的就是按照思路来写。
2024-03-23 11:06:53
840
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅