- 博客(67)
- 收藏
- 关注
原创 jwt详解
JWT是由三部分组成的字符串,格式为:Header.Payload.Signature(头部负载签名) ,这三部分通过"."连接在一起。
2024-12-08 20:26:14
531
原创 判断闭包是否被垃圾回收机制回收
首先,闭包在 JavaScript 中是函数与其外部作用域的组合。为了判断一个闭包是否可以被垃圾回收,必须了解其引用情况。当闭包没有任何外部引用时,它就可以被垃圾回收了。中的键是弱引用,这意味着如果没有其他强引用指向某个对象,垃圾回收机制会回收这个对象。来存储闭包的引用和检查情况。
2024-12-04 22:22:42
289
原创 js判断空对象
最常用且推荐的方法是使用,因为它简洁且句意明确。和也很常见,适用于不同场景。for...in循环适合需要检查可枚举属性的情况。使用原生的和方法更为全面。
2024-11-28 21:55:31
595
原创 js中判断数组和判断对象的方法
判断数组最常用且推荐的方法是,其次是instanceof和。判断对象通常使用typeof结合 null 的判断,或者使用方法来精确判断类型。
2024-11-28 21:44:23
446
原创 内存缓存和硬盘缓存
硬盘缓存是长期存储静态资源和 API 响应,可以在关闭浏览器后仍然保留,管理方式依赖于空间及使用情况。内存缓存是短期存储,通常仅在当前会话中存在,主要用于提高对动态资源和先前加载内容的访问速度,在浏览器关闭或页面刷新时会被清除。
2024-10-05 22:14:12
663
原创 前端工程化之vite
用于支持 Vue.js 单文件组件(.vue 文件):用于支持 React 和 JSX 语法用于打包分析文件修改时自动重启vite组件按需自动导入将 SVG 图标批量导入并转化为 Vue 组件。
2024-09-25 23:11:55
929
原创 聊一下cookie,session,token的区别
cookie是存放在的,主要用于cookie通过http报文的部分发送给服务器,服务器根据cookie就可以获取到里面携带的session id(用于获取服务器中对应的session数据),因为http是无状态协议,我们通常就是通过cookie去维护状态的cookie是在客户端第一次访问到服务器时,并返回给客户端的cookie也分为会话cookie和持久cookie,优点:简单易用。
2024-09-24 21:24:32
302
原创 vue响应式原理
Observer负责将对象变为响应式。Dep负责管理依赖关系。Watcher负责响应数据变化并更新视图。当首次访问数据或者使用ref,reactive创建响应式对象时,会创建Watcher,与此同时Observer会将对象变为响应式(如果是创建对象时),当访问数据时会触发getter事件,Observer检测到getter事件后会通知Dep去收集依赖(将对应的Watcher收集),当检测到setter事件时,通知Dep去执行Watcher的回调。
2024-09-08 11:26:57
578
原创 ts如何编译成js
生成 JavaScript 代码(Code Generation)词法分析(Lexical Analysis)语法分析(Syntax Analysis)类型检查(Type Checking)源映射(Source Mapping)
2024-08-08 16:35:17
549
原创 computed实现原理
只有在依赖属性发生变化时,才会重新计算并更新缓存。属性是 Vue.js 中一种非常强大的功能,它允许我们定义基于其他响应式属性的计算属性。通过对依赖属性的依赖收集和缓存,可以实现高效的计算属性更新。函数中,会触发依赖属性的访问,从而完成对这些依赖属性的依赖收集。这样当依赖属性发生变化时,就可以通知计算属性的。计算属性的结果会作为响应式属性暴露给模板和其他方法使用。当计算属性的值发生变化时,会触发视图更新。函数,更新缓存的计算结果,并通知依赖于该计算属性的其他。当依赖属性发生变化时,会触发计算属性的。
2024-07-25 12:05:22
325
原创 js什么情况下使用同步,什么时候异步加载
总的来说,合理地使用同步和异步操作是前端开发的关键技能之一,它可以确保页面的性能和用户体验。开发者需要根据具体的需求和场景来选择合适的执行模式。JavaScript 中的同步和异步操作主要取决于代码的执行过程。
2024-07-20 11:23:47
354
原创 哪些事件会导致浏览器窗口宽高变化
window.orientationchange事件 - 屏幕从竖屏切换到横屏或反之时触发。- window.resize事件 - 用户手动拉伸或缩小浏览器窗口大小时触发。- 布局引擎布局发生变化 - 如Flex布局项目长度变化可能触发。- 设备激活全屏模式时 - 页面进入全屏模式时触发resize。- 样式/布局变化引起 - 如导航栏隐藏后页头部高度变化会触发。- DOM元素显示/隐藏 - 比如展开收起侧边菜单时可能会触发。- 浏览器功能键触发 - 如全屏/迷你全屏切换等。
2024-07-14 11:54:09
429
原创 页面滚动到哪了有那些方式去获取
在大多数浏览器中,window.pageYOffset property 用于获取垂直方向滚动的像素值。可以通过 scrollIntoView() 滚动元素进入视图。
2024-07-14 11:18:54
576
原创 Redis事务,管道,发布订阅
redis事务本质上是一组命令的集合,按照顺序串行化执行命令而不被其他命令打断redis事务开启后将要执行的命令放到事务队列中,提交事务后地执行所有命令关键词:单线程,无隔离级别,,排他性,顺序性要注意和mysql的acid进行区分。
2024-05-04 23:08:25
505
原创 异或问题总结
异或简单来说就是相同的得0,相异得1,异或有一些性质例如满足交换律,结合律,自反性等等,这些性质实际上在题目中考察不多,题目更多的是考察你的思维01的异或固然容易,但是当数据扩大到数万级别的时候就涉及到了数的拆分,把十进制转换为二进制是解决异或问题常见的一种手段,面对异或相关的问题都需要有进行位运算的思想。
2024-03-23 20:22:56
2128
2
原创 打家劫舍总结
近期刷了几道打家劫舍的题,趁还没忘赶紧把复盘写一下这个是我们的原型题,其他的题目都是在这个题目的基础上延展开来的题目就是说有一堆房屋,每个房屋都有一定的金钱数,我们不能偷相邻的房屋,求能获得的最大金额首先第一个坑就是分清楚问题是贪心还是动规,有些同学做着做着很容易就把他当成了贪心,实际上并不是这样的,我们可以从一号房间出发(下标0)也可以从二号房间(下标1)出发,两种情况选出最大者而不是单纯的局部最优,就像上图的示例一一样,局部最优(2)不一定得到的是全局最优的结果明确了问题类型是dp之后就好办了,使用我们
2023-12-15 16:12:55
1631
原创 动态规划背包问题总结
我们可以问问gpt,gpt给出这样的解释:背包问题的描述是:给定一系列物品的重量和价值,以及一个背包的容量,如何选择物品,使得装入背包的物品总价值最大,且背包内物品总重量不能超过背包容量。给定n个物品,每个物品i有一个重量w和一个价值v给定一个背包的容量S目标是选择某些物品,使得这些物品的总重量不超过S,且这些物品的总价值最大解决这个问题需要考虑每个物品是否选择的所有可能组合,然后计算每个组合的总价值。由于组合数目太多,直接枚举是不可行的。
2023-11-27 11:56:06
1621
原创 leetcode 每日一题复盘(线性dp)
实际上dp代表的是到达某一层的最低花费,而i则是层数,上面就是对i的代表不明确导致的,正确的推导公式应该是dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]),选择从i-1层和i-2层到达i层两者的最小值。一开始写的递推公式是dp[i]=dp[i-1]+min(cost[i-2],cost[i-1]),写出了一个类似贪心算法的东西,归根结底还是对dp状态的认识不过,不清楚i代表什么,dp代表什么。
2023-11-21 10:06:15
260
原创 leetcode每日一题复盘(动态规划)
小的排在前面,用其他区间的开始下标和结束下标进行比较,如果开始下标小于结束下标,说明两个区间重叠,当开始下标大于等于结束下标时说明有新的非重叠区间,数量+1。本题和射气球最小箭数大同小异,但是这一题没做出来,难就难在题目如何理解:移除区间最小数量,使剩下的区间不重叠。,结束下标小的排在前面,用结束下标和开始下标进行比较,如果结束下标大于开始下标说明区间重叠,那么本质上就是求最少有多少个重叠区间,把重叠区间去掉剩下的区间即不重叠。两种方法大同小异,比较的方法都相同,不同在于排序的方法和统计的目标。
2023-11-13 18:01:31
468
2
原创 leetcode每日一题复盘(回溯,贪心)
回溯算法的最后一种问题:棋盘问题,前面的N皇后也是棋盘问题,只不过N皇后只需要一层放一个数据,数独需要多次放入数据且保证数据不冲突。方法是通过bool返回值进行多次递归,每次递归放入一个数据,将该层数据填满后换下一层。
2023-11-06 11:57:51
237
原创 leetcode每日一题复盘(回溯)
这里我们讲一下抽象的概念方便理解,工作指针i可以看作我们划的那条线,i前面的可以看作这一次需要判断的数据,如果符合要求则继续递归,不符合要求则进行横向遍历,以此保证每一段ip地址都是合法的,i后面的则是我们下一次需要遍历的数据,即startindex=i+1;感觉理清楚了思路还是比较好写的,难就难在你判断函数代码怎么写好,能不能想到先处理前三段再处理第四段,能不能想到直接在原数据上面操作,这些就是需要我们思考的地方,做题量和思考缺一不可。
2023-10-30 17:23:34
271
原创 leetcode每日一题复盘(二叉搜索树,回溯)
这种情况需要把右子树的第一个节点的位置顶上到原来节点root的位置,而左子树应该接在右子树的最左边,返回右子树的第一个节点。这种情况把要删除节点直接赋值成他的右子树即可,相当于删除了root节点,也可以直接返回右子树。如果递归是有返回值的(非bool型),那么在递归的时候必然是有变量来承接递归的返回值的。如果是返回bool型的递归,可以用if条件来判断,这种情况一般是查找一条符合条件的路径。这种情况直接返回nullptr就可以了,因为删除节点相当于把节点变为空。2.左子树空右子树不为空。
2023-10-23 16:50:48
358
原创 leetcode每日一题复盘(二叉搜索树)
对二叉搜索树的性质还不是很熟悉,不懂得利用其性质,做题没有方法论,这是暴露出来的问题,明天重做一下98,530,501这三个题,再进行总结。
2023-10-17 17:22:14
214
原创 leetcode 每日一题复盘(二叉树)
正确的解法是用类似层序遍历但不是层序遍历的思想,将左子树的左孩子和右子树的右孩子比较(外侧),将左子树的右孩子和右子树的左孩子比较(内侧),每一层(除第一层)都比较内外侧,如果不同就false,每次出队两个元素。修改后入队条件不再是看入队元素是否为空,而是看队列中的元素是否为空,这样就可以将空指针也入队同时解决操作空指针的问题,如果指针为空,那么用-101标志他(子树的值范围是-100~100)这样修改过后运行效率还可以,但是并没有完成理解这道题。树可以分成3种情况,都无孩子,一个孩子,和两个孩子。
2023-10-09 12:00:30
346
原创 补码编码及其转换计算
计算机整数表示有两种方式:无符号编码和补码编码无符号编码只能表示非负数,且Java语言不支持无符号编码补码编码既能表示非负数又能表示负数,是机器默认的编码方式为了表示符号,补码编码将二进制数的最高位设为符号位,符号位为0表示正数,符号位为1表示负数。
2023-09-29 16:47:48
444
2
原创 Linux文件管理常用命令
halt:关闭系统clear:清空当前终端所有信息ip addr:显示当前所有网络接口和相关ip地址date:显示当前时间ctrl+c(快捷键):中断进程pwd:显示当前工作目录cd:切换到其他目录,可以是相对路径也可以是绝对路径(完整的文件路径)cd/tmp:切换到tmp目录cd/:切换到根目录cd..:回到上一级目录ls:显示当前目录的文件列表rm:删除一个文件或者目录(rm 文件名/目录名)操作目录时需要在两者之间加-r,表示操作目录 rm -r name。
2023-09-24 21:42:22
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人