自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣 922. 按奇偶排序数组 II :双指针原地交换

通过双指针一次遍历,原地交换元素,该算法高效且优雅地解决了奇偶排序问题。理解双指针移动的条件和交换的动机是掌握此算法的关键。

2025-04-10 11:42:13 112

原创 力扣1338 === 贪心算法解决数组减半问题

要解决这个问题,我们需要找到最少需要删除的不同整数集合,使得剩余的元素个数不超过原数组的一半。:假设存在更优的策略,那么该策略必须包含一个比当前选择的频率更低的元素,但这会导致需要更多的删除次数,与假设矛盾。通过贪心算法,优先删除高频元素,我们能够以最小的删除次数将数组大小减半。删除频率为3和2的元素,sum=3+2=5 ≥3,count=2。:每次选择频率最高的元素,可以确保每一步删除操作是最优的。的统计结果为:3→4次,5→3次,2→2次,7→1次。,需删除两个元素(例如频率为2和1的元素)。

2025-04-07 16:55:30 467

原创 使用哈希表(Map)解决“只出现一次的数字 II”问题

本文使用哈希表法直观解决了问题,该方法具有通用性,可扩展至其他出现次数不同的场景(如找出出现两次的元素)。若追求空间效率优化,可采用位运算方法,但实现较为复杂。哈希表法在时间与代码可读性之间取得了良好平衡,是解决此类问题的经典思路。

2025-04-07 09:47:57 342

原创 LeetCode 2442:统计反转后的不同整数数量

逐位处理:每次只操作一位数字。数学重组:通过res*10 + 末位直接构建反转后的数字。无需字符串转换:效率高,且适用于大数字(但需注意JavaScript的数值范围限制)。通过这种“拆解-重组”的数学方法,可以高效地完成整数反转。题目描述给定一个整数数组nums,要求将每个元素反转后添加到原数组中,最终统计所有不同整数的数量。示例4解释:原数组为[123, 456],反转后得到[321, 654],合并后的数组为,共有4个不同整数。解题思路核心目标对每个元素执行反转操作,生成新数字。

2025-04-05 22:25:03 888

原创 LeetCode - 739.每日温度问题单调栈解法

单调栈通过维护温度递减的索引序列,将问题的复杂度优化至线性时间。算法核心在于利用栈的单调性快速找到下一个更高温度的日期,避免了重复遍历。这种方法在处理“寻找下一个更大元素”类问题时非常高效。

2025-04-05 12:56:50 932

原创 解决LeetCode“使括号有效的最少添加”问题

通过贪心策略,优先匹配最近的左括号,确保每一步都最优,最终得到最少添加次数。此方法高效且简洁,适合处理类似括号匹配问题。

2025-04-04 23:44:56 252

原创 JavaScript 中那些不常见的 for 循环命名与高阶用法

JavaScript 的for循环提供了极高的灵活性,但非常规用法往往伴随着可读性和维护性风险。建议:在团队协作中优先选择清晰明了的写法。在性能关键路径或特殊算法中,可谨慎使用高阶技巧。结合 ESLint 等工具限制危险模式(如空语句循环)。通过理解这些“隐藏”特性,开发者可以更深入地掌握 JavaScript 的底层逻辑,从而在特定场景下写出更高效、简洁的代码。

2025-04-04 23:23:49 869

原创 LeetCode 接雨水问题详解 - 动态规划解法

动态规划解法通过预处理左右最高墙,高效计算每个位置的积水量。该方法思路清晰,时间复杂度低,是解决此类问题的经典方法。

2025-04-03 12:10:08 1147

原创 Mac 设置静态IP的方法 和 Mac 设置静态IP后 无法联网

IPv4 地址是设备在网络中的唯一标识符,用于在网络中定位设备。告诉网络设备“你是谁”,以便其他设备可以找到你。用于设备之间的通信。IPv4 地址由 4 个字节(32 位)组成,每个字节用十进制表示,范围是 0 到 255,中间用点分隔。。前三个部分(如192.168.0)通常表示网络部分,最后一个部分(如166)表示主机部分。如果是自动获取(DHCP),IP 地址由路由器或网络服务提供商分配。如果是手动配置,需要选择一个未被使用的 IP 地址,通常在路由器的 IP 地址范围内。

2025-04-01 10:40:04 819

原创 216. 组合总和 III 回溯

该问题通过回溯算法枚举所有可能的组合,结合剪枝策略(剩余数字不足、和超过目标值)显著提高效率。递增选择数字:避免重复组合。剪枝优化:减少不必要的递归调用。回溯机制:撤销选择以尝试其他可能。这种模式适用于许多组合问题,如子集、排列、组合总和等。

2025-03-31 23:17:43 807

原创 LeetCode 56. 合并区间 | 排序+贪心解法详解

本题通过排序将问题转化为线性遍历合并,是典型的贪心策略。关键在于理解排序如何简化重叠判断,以及如何通过一次遍历合并所有可能的重叠区间。类似问题如插入区间(LeetCode 57)也可用类似思路解决。

2025-03-29 22:17:37 576

原创 每日一题 == 674. 最长连续递增序列

通过遍历数组并动态维护当前递增序列的长度,能够高效地找到最长连续递增子序列的长度。该方法简洁且时间复杂度为线性,适用于大规模数据。注意处理遍历结束后的最后一次比较,确保结果的正确性。

2025-03-29 20:30:03 180

原创 Vue.js 3 的设计思路:从声明式UI到高效渲染机制

Vue.js 3 通过声明式UI、虚拟DOM、高效渲染器及组件化设计,构建了一个兼顾性能与开发效率的框架。声明式描述与命令式优化的结合:通过虚拟DOM和编译器优化,减少性能损失模块化架构:编译时与运行时分离,支持Tree-Shaking和静态优化灵活的组件模型:支持函数和对象形式,适应不同场景需求这些设计思路不仅提升了开发体验,也为大型应用的高效渲染奠定了基础。如需进一步了解实现细节,可参考《Vue.js设计与实现》及相关源码分析<script>// 定义虚拟DOM节点props: {},

2025-03-10 23:06:06 934

原创 Vue.js框架设计核心要素解析

框架设计的核心在于平衡功能丰富性与性能、体积、开发体验之间的关系。Vue.js 通过环境区分、Tree-Shaking、模块化构建和类型系统等策略,实现了高效、灵活且易用的框架设计。这些原则不仅适用于 Vue.js,也为其他前端框架的设计提供了重要参考如需进一步探讨具体技术实现(如虚拟 DOM 的编译优化或响应式系统设计),可参考《Vue.js设计与实现》后续章节及相关源码分析。

2025-03-08 16:18:04 827

原创 Vue.js框架设计中的权衡艺术:解析性能、可维护性与范式选择

范式选择:以声明式提升可维护性,通过虚拟DOM逼近命令式性能。性能优化:利用编译时预分析减少运行时开销,同时保留动态能力。架构扩展:混合模式平衡灵活性与效率,适应不同场景需求。正如作者所述:“框架设计是权衡的艺术”,Vue的成功在于在复杂的技术选项中,找到用户体验、维护成本与执行效率的最优解通过这一系列设计,Vue.js不仅降低了开发者的心智负担,还确保了大规模应用的高效运行,成为现代前端开发的标杆框架。

2025-03-08 15:23:49 1086

原创 MySQL进阶篇 === 索引分类

主键索引特点:每个表只能有一个,且会自动创建。通常用于唯一标识表中的每一行记录。用途:确保数据的唯一性,并且可以快速地定位特定数据行。唯一索引特点:可以有多个,用于确保某列或多列中的数据的唯一性。用途:避免数据重复,常用于需要保证唯一性的字段,如邮箱、手机号等。常规索引特点:可以有多个,用于加速数据的查询速度。用途:在需要频繁查询的字段上创建,以提高查询效率。全文索引特点:可以有多个,专门用于在文本数据中进行关键词搜索。用途:适用于需要对大量文本数据进行关键词查找的场景,如文章搜索、内容检索等。

2025-02-27 11:34:08 633

原创 使用el-checkbox-group时,el-checkbox后面的文本或者div不显示

起初setScore类所在的div死活不显示,各种添加样式都不生效,强制渲染也没用,最后发现是font-size等于0,添加样式后ok了。内容因父元素的样式问题(如。

2025-02-26 22:23:19 373

原创 解决 Git 合并冲突:当本地修改与远程提交冲突时

Git 的合并冲突保护机制是为了避免数据丢失,理解其原理后可以通过多种方式灵活解决。关键是根据场景选择策略:需要保留修改 → 提交或储藏(commitstash无需保留修改 → 丢弃重置(手动处理冲突 → 选择性合并通过规范协作流程和善用分支管理,可以显著减少此类问题的发生。延伸学习Git 官方文档 - 合并冲突Git Stash 的进阶用法。

2025-02-25 17:53:36 1023

原创 MySQL进阶篇 === 索引结构

在原 B+Tree 的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的 B+Tree,提高区间访问的性能。B-Tree (多路平衡查找树) 以一棵最大度数(max-degree,指一个节点的子节点个数)为5(5阶)的 b-tree 为例(每个节点最多存储4个key,5个指针)在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。为了解决上述问题,可以使用 B-Tree 结构。

2025-02-25 15:46:38 584

原创 Git Pull 报错解决方案:fatal: Need to specify how to reconcile divergent branches

若需保留完整合并记录 → 使用。若需保持提交历史线性 → 使用。若本地提交可丢弃 → 强制同步远程分支。根据实际场景选择合适的策略,确保代码合并过程清晰可控!

2025-02-15 10:06:55 1589

原创 ESLint 规则解析:为什么应避免在 in 操作符左侧使用否定?

隐蔽的逻辑错误:确保in操作符的否定行为符合预期。代码健壮性:消除因运行环境差异导致的不确定性。可维护性提升:通过清晰代码结构降低团队协作成本。在编写条件判断时,始终优先使用括号明确操作符优先级,这是保障代码质量和可读性的最佳实践。延伸思考:如何通过其他 ESLint 规则(如)进一步避免逻辑错误?此类规则的组合使用能显著提升代码可靠性,值得开发者深入研究。

2025-02-13 17:57:09 485

原创 解决错误:Do not access Object.prototype method ‘hasOwnProperty‘ from target object no-prototype-builtins

优先使用现代项目(支持 ES2022+)应直接使用,它简洁且安全。旧项目使用显式原型调用通过确保兼容性。避免直接调用除非你完全控制对象结构且无原型链风险。遵循 ESLint 的规则,不仅能避免潜在错误,还能提升代码的健壮性和可维护性。

2025-02-12 20:42:35 643

原创 为什么你应该避免在 Promise 执行器中使用 async 函数?

规则名称规则类型:错误预防适用场景:当检测到 Promise 构造函数接收 async 函数作为参数时触发明确异步边界,保持执行上下文清晰。通过遵循该规则,开发者可以:避免隐蔽的错误处理漏洞提升代码可维护性和可调试性确保内存管理的正确性保持 Promise 标准行为的一致性。

2025-02-12 15:01:11 727 1

原创 01-DeepSeek诞生背景介绍

本文介绍了国产大模型DeepSeek的崛起及其在AI领域的影响,同时探讨了AI是否会取代程序员的问题。

2025-02-10 15:24:09 624

原创 【vue深入】项目打包之后,移除console.log和debugge

我们项目做得熟练了,Vue也用的熟悉了,我们就会想着扩展。性能优化就是一个不错的方向这次我们讨论下和debugger。

2025-02-08 13:04:32 742

原创 ESLint + VSCode:如何使用.eslintrc格式化你的代码

我已经非常习惯于在保存时让VSCode自动格式化我的文件。通常情况下,我使用Prettier。但我加入了一个使用ESLint来管理其代码风格的项目,我想与团队的格式化相匹配。我希望在保存时有那种甜蜜的自动格式化,但使用项目根目录下的文件,而不是Prettier。大多数博客文章都想把这个做成一个完整的教程......如何设置eslint,如何创建.eslintrc文件,等等......但我不需要这些。我有一个现有的项目,我只是想配置VSCode来使用ESLint而不是Prettier。

2025-02-07 21:18:15 1019

原创 lint-staged === Git提交前的自动化代码检查工具

目录什么是 lint-staged?为什么使用 lint-staged?核心功能1. 只对暂存区文件运行检查2. 与 husky 集成安装和配置1. 安装依赖2. 初始化 husky 配置3. 配置 lint-staged4. 配置 husky 钩子进阶配置1. 多个文件类型2. 运行自定义命令3. 对多个文件同时运行多个命令4. 缓存机制常见问题与解决方案1. 检查命令未生效2. 命令执行失败3. 如何禁用某些文件检查优势小贴士 是一个用于在 Git 暂存区的文件上运行代码检查(linting)工具的工具

2025-02-07 14:42:18 1443

原创 sourcetree === 使用 Git 工作

从远程存储库 (Git) 提取更改如果您的团队中的某个人对远程存储库进行了更改,您希望将这些更改提取到本地。在 SourceTree 中的存储库中,单击按钮出现一个弹出窗口,表明您正在将文件从 Bitbucket 合并到本地存储库。在弹出窗口中单击导航到本地系统上的存储库文件夹,您将看到刚刚添加的文件。SourceTree会使用视图 中的新文件进行更新。提交并推送更改 (Git)当您向存储库添加新文件或进行更改时,您需要暂存、提交并将更改推送到远程存储库。

2025-02-06 12:57:05 851

原创 前端开发之jsencrypt加密解密的使用方法和使用示例

1. 密钥位数512位: 最弱,仅用于测试1024位: 较弱,不推荐2048位 ✅: 推荐使用,安全性和性能均衡3072位: 更安全,但更慢4096位: 最安全,性能最差2. 密钥格式PKCS#1 ✅: 适合JSEncrypt使用,兼容性好PKCS#8: 更现代的格式 支持更多算法3. 输出格式PEM/Base64 ✅: 最常用 可直接复制使用Hex: 十六进制格式 特殊场景使用4. 证书密码可以为空 ✅设置密码会增加安全性,但使用时需要额外步骤密钥位数:2048位。

2025-01-30 17:43:41 2672

原创 axios如何利用promise无痛刷新token

/ 从localStorage中获取token// 给实例添加一个setToken方法,用于登录后将最新token动态添加到header,同时将token保存在localStorage中// instance是当前request.js中已创建的axios实例// 创建一个axios实例headers: {'X-Token': getLocalToken() // headers塞token})// 是否正在刷新的标记// 重试队列,每一项将是一个待执行的函数形式if (!

2025-01-29 11:04:03 1810 1

原创 如何使用jwt 完成注销(退出登录)功能

不信的的话可以自己尝试下。使用JWT应该是无状态的,这意味着你应该将所需的一切存储在payload中,并跳过对每个请求执行DB查询,但是如果你计划有一个严格的注销功能,无法等待Token自动过期,即使你已经从客户端清除了Token,然后你可能需要违背无状态规则并执行一些查询。是一个很好的选择,这将允许在内存中快速访问列表,然后,在某个中间件中,运行在每个授权请求上,你应该检查提供的令牌是否在名单中🕵️‍,如果不在的话就抛出一个未认证异常,如果有让它通过,JWT验证将处理它并确定它是否已过期或仍然有效。

2025-01-26 16:40:56 1079

原创 Vue3使用element-plus1.3.0版本的el-menu菜单组件引入动态渲染icon图标时,图标组件刚好是Menu时报错,

官方提供了组件导入的方式使用图标。而我的图标是全局导入的,默认使用官方的命名。在菜单栏使用图标,并且是动态渲染的,刚好用到图标组件名称是Menu时,点击带有这个图标名称的菜单,就出问题了,导致其他菜单不显示。最后使用排出法才确定是个图标组件的名称导致的bug,后面就换了一个图标组件。目前在升级前端框架,UI组件element-plus升级到了目前最新的1.3.0beta8版本,图标也换成了官方提供的Svg。最后,我只直接换了一个其他icon组件,然后我提交了issues,建议他们重新改下命名方式。

2025-01-25 17:16:37 304

原创 使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件,我们可以配置多个容器的启动参数、环境变量、网络和卷挂载等信息。这使得部署和管理复杂的多容器应用变得简单而高效。在本文中,我们将使用 Docker Compose 部署 Redis、MySQL 和 RabbitMQ,为微服务应用提供存储、消息队列和数据库支持。通过 Docker Compose,我们可以轻松地部署和管理 Redis、MySQL 和 RabbitMQ 这些关键的微服务基础设施组件。

2025-01-24 17:52:44 2615

原创 速通Docker === Docker 镜像分层存储机制

Docker 的分层存储机制是其高效性和灵活性的关键。通过分层存储,Docker 实现了镜像的轻量化、快速构建与部署以及高效的镜像共享。同时,容器层的临时性和数据持久化机制也为开发者提供了灵活的运行时管理能力。

2025-01-24 11:50:30 1166

原创 速通Docker === Dockerfile

在现代软件开发中,容器化技术正变得越来越流行。Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速部署和跨平台运行。

2025-01-24 11:45:22 1052

原创 速通Docker === Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过 YAML 文件配置应用程序的服务、网络和卷,从而可以轻松地启动、停止和管理多个容器。

2025-01-23 16:55:13 767

原创 速通Docker === 使用最佳实践总结

通过以上步骤和示例,我们可以看到 Docker 的使用主要包括命令操作、网络配置、存储管理、环境变量设置和端口映射。这些步骤确保了容器的可移植性、安全性和灵活性。Docker 的最佳实践还包括使用官方镜像、定期更新镜像、合理配置资源限制等,以确保容器的稳定运行和资源的高效利用。

2025-01-23 11:16:30 1093

原创 速通Docker === 快速部署Redis主从集群

Bitnami提供的Redis Docker镜像预配置了多种环境变量,使得部署和配置变得非常简单。此外,该镜像还包含了必要的安全补丁和性能优化,适合生产环境使用。Bitnami Redis镜像的Docker Hub地址为:你可以直接从这个地址拉取镜像,或者在Docker命令中指定该地址来部署Redis实例。持久化你的数据库如果删除容器,所有数据都将丢失,下次运行镜像时,数据库将重新初始化。为了避免数据丢失,您应该安装一个在删除容器后仍能保留的卷。为了持久化,您应该在路径上挂载一个目录。

2025-01-21 22:54:06 1449 2

原创 速通Docker === 网络

为了克服默认网络docker0在稳定性和灵活性方面的不足,Docker提供了自定义网络机制。通过创建自定义网络,我们可以更好地管理和控制容器之间的通信,实现更加稳定和高效的网络访问。执行该命令后,Docker会自动创建一个新的网络,并为其分配一个唯一的网络ID。在启动容器时,我们可以通过--network参数指定容器加入到某个自定义网络中。该命令会启动一个名为app1的Nginx容器,并将其加入到mynet自定义网络中。通过这种方式,我们可以将多个容器组织到同一个网络中,实现它们之间的稳定通信。

2025-01-20 11:04:52 761 2

原创 解决MAC安装软件时提示“xxx.app 显示已损坏”的方法

1、打开电脑【系统设置】,找到【隐私与安全性】,拉到最下面,在【允许从以下位置下载的应用程序】中,选择【任何来源】,如果提示输入密码,就输入密码回车即可,如下图:(注意:系统版本不同可能下图文字表述有不一样,但都是打开任何来源)然后输入电脑密码回车即可(密码输入是看不见的,无视继续输入),即可;上,将出现已损坏的软件拖入终端中(xattr -cr 的后面),再回车!:表示递归操作,即对指定目录及其所有子目录和文件中的扩展属性进行操作。:这是一个命令行工具,用于显示和操作文件或目录的扩展属性。

2025-01-20 10:29:29 1892

微信小程序请求拦截器 ,响应拦截器

微信小程序请求拦截器 ,响应拦截器,结合微信小程序二次封装request 一起使用

2024-02-27

微信小程序 - wx.request网络请求封装

微信小程序 --- wx.request网络请求封装

2024-02-22

空空如也

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

TA关注的人

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