- 博客(182)
- 收藏
- 关注
原创 记录一次服务器部署vue项目遇到的问题及其解决
本文详细记录了使用Docker部署Nginx并挂载Vue项目的完整过程。通过npm run build打包项目后,采用挂载外部配置的方式启动Nginx容器,重点解决了404和500错误问题。关键点包括:正确配置挂载路径和nginx.conf文件(保持root为默认路径),检查文件权限,分析日志定位重定向循环问题。最终通过修改server配置中的location规则,使用try_files实现兜底方案,成功完成部署。文章还总结了常用的Docker命令,为后端开发者提供了实用的容器化部署经验。整个调试过程耗时较
2025-07-30 01:44:53
708
原创 100-287 寻找重复数
在“寻找重复数”的问题中,通过使用快慢指针找到环的存在和环的入口,利用了快指针比慢指针移动更快的特性。由于数字范围是1到n,我们可以把数组的元素看作指向数组下标的指针,这样数组就可以看作一个链表,而重复的数字就相当于链表中的环。比如,如果 nums[fast] = k,那么数组中的第 fast 个元素指向数组的第 k 个元素。这个问题要求在一个长度为n+1的数组中,找出唯一的一个重复数,且数组中的数字范围是1到n。是“快慢指针”法中的关键一步,表示“快指针”每次移动两步。返回环的入口,即重复的数字。
2025-07-20 21:01:00
687
原创 099-031 下一个排列
在找到需要交换的两个元素并交换之后,i之后的部分仍然是从右向左的降序排列(因为在最初的扫描中,我们找到了第一个不满足降序的元素)。为了获得字典序中的最小下一个排列,我们必须将i之后的部分变成升序排列,这样才能保证这是紧接当前排列的下一个最小的排列。如果不进行反转,生成的排列可能并不是字典序中紧邻当前排列的下一个排列。这个算法的目标是找到给定排列的下一个字典序排列(即比当前排列大的下一个排列),如果不存在这样的排列,则返回排序后的最小排列(即字典序最小的排列)。,从数组的最后一个元素开始。
2025-07-20 21:00:27
720
原创 098-075 颜色分类
的解法(Dutch National Flag problem)来解决这个问题。这种方法使用三个指针来一次遍历解决s问题,时间复杂度为O(N),空间复杂度为O(1)。这个原地排序透露着一股奸诈味道。
2025-07-20 20:59:53
383
原创 097-169 多数元素
最后留下来的一定是target(因为它多,它除了和别人抵消的部分还有剩余)我们可以把所以的其他非target想象成和target对立。target的数量遇到自身增加,遇到其他消去。题目给出了target>n/2。
2025-07-20 20:59:22
209
原创 096-136 只出现一次的数字
对于这道题目,我们只要把所有数字进行异或,成对儿的数字就会变成 0,落单的数字和 0 做异或还是它本身,所以最后异或的结果就是只出现一次的元素。一个数和 0 做异或运算的结果为它本身,即。一个数和 0 做异或运算的结果为它本身,即。一个数和它本身做异或运算结果为 0,即。一个数和它本身做异或运算结果为 0,即。
2025-07-20 20:58:45
120
原创 【redis】redis:ERR AUTH <password> called without any password configured for the default user解决办法
【摘要】系统出现Redis连接失败错误,报错显示未配置默认用户密码。问题源于通过Docker安装的Redis使用临时内存方式设置密码(CONFIG SET requirepass),导致Redis重启后密码失效。两种解决方案:1) 每次重启后重新设置密码;2) 修改redis.conf配置文件实现持久化密码配置。当前应用配置的密码与Redis实际密码状态不匹配导致认证失败。
2025-07-20 20:44:54
1225
原创 Spring循环依赖
Spring循环依赖问题解析 摘要: Spring循环依赖指两个类相互依赖形成闭环。主要分三种情况:1)构造方法注入的单例模式(必报错);2)Setter注入的原型模式(必报错);3)Setter注入的单例模式(Spring5.3前可解决)。解决方案:1)改为Setter注入,利用Spring的二级缓存机制;2)构造器注入配合@Lazy延迟加载。Spring通过三级缓存(单例池、早期对象、Bean工厂)解决循环依赖,其中核心是二级缓存存储不完整的Bean实例。实际开发中推荐使用构造器+@Lazy方案,既解决
2025-07-19 21:39:46
785
原创 IOC:控制反转
而IOC则将这种依赖的管理权从对象本身“反转”到外部容器(例如Spring容器)中,通过依赖注入(DI,Dependency Injection)机制来提供所需的依赖对象。IOC通过依赖注入来实现解耦。在IOC中,依赖注入通常结合接口编程实现。类A依赖于类B的接口(而不是具体实现),容器可以在运行时根据配置注入不同的类B实现。,类A仅声明它需要类B,容器负责在运行时将类B的实例注入给类A。这使得类A和类B的实现解耦,类B的实现可以随时更换而不影响类A。例如,类A依赖于类B,类B的实例不再由类A创建,而是。
2025-07-19 21:24:01
1042
原创 093-005 最长回文子串
当然这个题我用for暴力肯定是不是最优解的。还是要好好学习一下字符串的多维动态规划。字符串的题我好像一直都做的不太好。更新最长回文子串的起始索引和长度。初始化,所有单个字符都是回文。从第二个字符开始(索引为。且首尾字符相同,则是回文。如果字符串长度小于等于。最长回文子串的起始索引。
2025-07-16 10:30:00
632
原创 094-1143 最长公共子序列 (字符串的多维动态规划还是不简单
数组做初始化操作,为了方便对第一个字符位置做初始化操作,所以下标从。dp[i][j] 代表字符串0-i和0-j的最长公共子序列。开始列出状态转移方程。
2025-07-16 08:00:00
410
原创 091-062 不同路径
题目我的思考+word题解题解题解思路classSolutionpublicintintmintn) {int[][]dpnewint[m][n];forinti0;i<m;0]=1;forintj0;j<n;j++) dp[0][j]=1;forinti1;i<m;i++){forintj1;j<n;j++){11returndp[m-1][n-1遇到的问题分析学习到的知识点。
2025-07-15 12:45:00
162
原创 090-032 最长有效括号 (明显用栈更好
这个过程通过栈来追踪每个未匹配的 '(' 的位置,并利用这些位置来计算当前找到的有效括号长度。希望这个详细过程能帮助你更好地理解栈方法的实现!这个问题可以通过动态规划或栈来解决。这里介绍使用栈的方法,因为它相对更容易理解。如果栈为空,将当前索引压入栈,栈顶元素始终是子串起始位置的。如果栈不为空,计算当前有效长度并更新最大长度。在每次找到一个有效括号时,更新最大长度。,检查是否可以形成更长的有效括号。当前索引和栈顶元素的索引差值。返回最长有效括号的长度。返回最长有效括号的长度。
2025-07-15 12:15:00
724
原创 089-416 分割等和子集 01背包
LeetCode中“分割等和子集”(Partition Equal Subset Sum)的问题要求判断一个非空数组是否可以分割成两个和相等的子集。这实际上是一个经典的。如果总和是奇数,不可能分割成两个和相等的子集。目标是找到一个子集,使得其和等于总和的一半。dp[i] 表示是否存在子集和为 i。的子集是存在的(空集),表示是否存在子集和为。表示是否存在子集和为。
2025-07-14 19:30:00
590
原创 088-152 乘积最大子数组⭐⭐⭐
我们需要同时跟踪最大乘积和最小乘积,以确保在遇到负数时能够正确更新最大乘积。更新最大乘积,当前值、当前值乘以上一个最大乘积和当前值乘以上一个最小乘积中的最大值。更新最小乘积,当前值、当前值乘以上一个最大乘积和当前值乘以上一个最小乘积中的最小值。更新最大乘积,当前值或当前值乘以上一个最大乘积或当前值乘以上一个最小乘积中的最大值。更新最小乘积,当前值或当前值乘以上一个最大乘积或当前值乘以上一个最小乘积中的最小值。在数组中存在负数时,最小乘积可以在遇到另一个负数时转换为最大乘积。初始化最大乘积、最小乘积和结果。
2025-07-14 19:00:00
682
原创 windows下批量修改文件前缀
写在txt中,但是默认是UTF-8,会出现中文乱码,这个时候我们需要将txt文件。[文件名.bat],同时将编码方式设置为。
2025-07-12 22:00:34
200
原创 087-300 最长递增子序列
/好好好,当时就没弄懂是吧 24/12/19更。数组中的最大值,即最长递增子序列的长度。24/12/19看到了+二分查找的优化。数组,每个位置的初始值为。双指针,还是很好理解的。
2025-07-12 16:30:00
1633
原创 086-139 单词拆分 3
HashSet 是 Java 集合框架中的一个重要类,用于存储。前 i 个字符是否可以被拆分成字典中的单词。一旦找到一个满足条件的拆分,停止内层循环。如果是遍历字符串会非常非常麻烦!它基于哈希表实现,具有高。本质考察的还有对字符串的处理。初始条件:空字符串可以被拆分。效的插入、删除和查找操作。
2025-07-12 10:15:00
599
原创 085-322 零钱兑换
dp数组存储的是每个金额对应需要的最少硬币个数。仍然是正无穷大,说明无法凑成该金额,返回。,每个元素初始化为正无穷大。,说明可以使用这个硬币。
2025-07-11 13:00:00
329
原创 084-279 完全平方数
将 dp 数组的每一个元素都设置为 Integer.MAX_VALUE,通常用于动态规划初始化,表示某个状态的初始值为无穷大(即不可达)。Integer.MAX_VALUE 是 java.lang.Integer 类中的一个常量,表示 Java 中 int 类型的最大值。这行代码的主要目的是将数组 dp 中的所有元素都设置为 Integer.MAX_VALUE,也就是 Java 中表示整数最大值的常量。fill 是 Arrays 类中的一个静态方法,用于将指定值填充到数组的每一个元素中。
2025-07-11 12:00:00
322
原创 083-198 打家劫舍
/ 进一步对滚动数组的空间优化 dp数组只存与计算相关的两次数据。DP数组中要保存的到当前房子时候所能打劫到的最多的钱。的值为偷当前房子和不偷当前房子两种情况中的较大值。格空间 只记录与当前计算相关的前两个结果。首先要考虑的是DP数组要保存的是什么?我还记得我写过呢,一点印象都没有啊。如果不偷当前房子,则金额为。如果偷当前房子,则金额为。个房子能偷到的最多金额。从第三个房子开始遍历。
2025-07-11 07:27:40
262
原创 082-118 杨辉三角
中间元素是前一行两个元素之和。还是蛮简单的,就是基本的方法。学习:加强对容器的熟练使用。从第二行开始构建杨辉三角。将当前行添加到三角形中。其实还好吧,有几个点。每行的最后一个元素是。
2025-07-11 07:27:01
411
原创 081-070 爬楼梯
题目我的思考+word题解classSolutionpublicintintn) {if(n<=2returnn;int[]dpnewint[n+1dp[1]=1;dp[2]=2;forinti3;i<=n;i++){1]+dp[i-2returndp[n];
2025-07-11 07:26:27
301
原创 080-763 划分字母区间
对于输入 s = "eccbbbbdec",字符串中只能划分为一个片段 "eccbbbbdec",它的长度为 10。这个流程显示了如何根据每个字符的最后出现位置来动态划分字符串,使得每个片段的字母不重复出现在其他片段中。找出字符串的划分方案,使得每个字母只出现在一个片段中,并返回每个片段的长度。我们开始第二次遍历字符串,并根据每个字符的最后出现位置来划分片段。我们首先遍历字符串 s,记录每个字符最后出现的位置。遍历字符串,把每个字母出现的首尾下标放入hash表。当遍历到片段的结束位置时,进行划分。
2025-07-10 07:35:31
630
原创 079-045 跳跃游戏Ⅱ 略微抽象
通过这个用例,你可以清楚地看到算法如何在遍历数组的过程中计算最远能到达的位置,并通过尽可能大的跳跃次数来减少总跳跃次数。核心思想是在遍历数组时,用两个变量 currentEnd 和 farthest 来记录当前跳跃范围的终点和最远能到达的位置。如果当前跳跃范围的终点已经到达或超过了最后一个位置,则直接跳出循环。到达了最远位置的下一跳也是最远距离内所有位置能到达的最远距离。每次跳跃的终点并不是指从当前位置跳跃的最远距离。找出从第一个位置到最后一个位置的最少跳跃次数。更新当前跳跃范围的终点为最远能到达的位置。
2025-07-10 07:35:01
580
原创 078-055 跳跃游戏 2
如果在某个位置上,你的最远到达距离没有办法继续推进(即你被卡住了),则返回 false。如果在某个位置上,最远能到达的距离已经超过了数组的最后一个位置,则返回 true。我们可以从左到右遍历数组,并在每个位置上计算你能到达的最远位置。如果当前索引超过了最远可达的位置,则不能到达最后一个位置。如果最远可达的位置已经超出了或达到了最后一个位置,返回。,表示不能到达最后一个位置。初始化最远可达的位置为。如果循环结束后没有返回。这道题的关键在于确定你。
2025-07-10 07:33:44
175
原创 077-121买卖股票的最佳时机
这个问题可以通过一次遍历解决。在遍历过程中,我们需要记录到目前为止的最低价格,同时计算每一天可能的最大利润。如果当前价格减去记录的最低价格大于当前的最大利润,则更新最大利润。初始化最低价格为最大整数,以便在比较时能轻松更新。如果当前价格比记录的最低价格还低,更新最低价格。如果当前利润大于已记录的最大利润,更新最大利润。计算当前的潜在利润,即如果在今天卖出股票。果然超时了哈哈哈哈哈哈哈。遍历价格数组中的每个价格。返回最终计算出的最大利润。,因为不买卖股票利润为。
2025-07-10 07:33:05
297
原创 076-295 数据流中的中位数 3 hard
如果最小堆的元素多于最大堆的元素,将最小堆的堆顶元素移回最大堆。如果最大堆和最小堆的大小相同,中位数是两个堆顶元素的平均值。我是懂了,它这个最大堆和最小堆的元素加到一起是总和。如果最大堆的元素更多,中位数是最大堆的堆顶元素。/** 向数据结构中添加一个数 *//** 返回当前数据流的中位数 */思路稍微复杂一丢丢,但是代码还是极其简单的。确保最大堆中的所有元素都小于最小堆中的元素。/** 初始化数据结构 */首先将新元素添加到最大堆。最大堆,保存较小的一半。最小堆,保存较大的一半。
2025-07-10 07:32:25
681
原创 075前K个高频元素 有一些不会用的方法(KV整体)
这句代码的作用是创建一个PriorityQueue,即一个最小堆,其元素类型是Map.Entry<Integer, Integer>,并且按照Map.Entry对象中的值(即频率)进行排序。因此,PriorityQueue<Map.Entry<Integer, Integer>>声明了一个优先队列,其中的每个元素都是一个Map.Entry对象,代表一个键值对。这在寻找前K个高频元素的问题中很有用,因为我们需要不断插入新的元素到堆中,并在必要时移除堆顶的元素来保持堆的大小不超过K。统计每个元素出现的频率。
2025-07-10 07:31:46
814
原创 074-215 数组中的第K个最大元素
这种方法在处理大数组时非常高效,因为我们只需维护一个大小为k的堆,而不是对整个数组进行排序。最小堆的堆顶元素就是数组中的第。这样我们就能确保堆中只保留前。创建一个最小堆,初始容量为。,之后是可以动态扩展的。遍历数组中的每个元素。将元素添加到最小堆中。
2025-07-10 07:31:10
326
原创 ⭐*5 073柱状图中最大的矩阵(以后再看吧)
这个例子通过详细的步骤解释了如何通过单调栈有效地找到每个柱子的左右边界,并计算出最大矩形面积。在这个测试用例中,最大的矩形面积是 10,对应的柱子高度为 5 和 6,宽度为 2。当当前柱子比栈顶柱子矮时,处理栈顶柱子。如果栈为空,说明当前柱子是最矮的。定义一个栈,存放柱子的索引。计算面积并更新最大面积。特殊情况处理:空数组。将当前柱子的索引入栈。
2025-07-10 07:30:35
285
原创 072-739 每日温度 单调栈
栈中存储的是温度的索引,栈顶的温度值总是比当前的温度值低。当找到一个更高的温度时,栈中的索引出栈,并计算两个索引的差值,记录在结果中。当栈不为空且当前温度大于栈顶索引对应的温度时,小于当前温度的栈中元素都弹出。创建一个栈,用来存储温度的索引。解决这个问题的最佳方法是使用。创建一个结果数组,初始值为。计算天数差,并存入结果数组。弹出栈顶元素,得到索引。,长度与温度数组相同。
2025-07-10 07:29:59
206
原创 071-394 字符串解码 3 不是很难,要理解双端队列这个数据结构
记录此 [ 前的倍数 multi 至栈,用于发现对应 ] 后,获取 multi × [...] 字符串。cur_multi是当前 [ 到 ] 内字符串的重复倍数,例如 "3[a2[c]]" 中的 2。last_res是上个 [ 到当前 [ 的字符串,例如 "3[a2[c]]" 中的 a;空间复杂度 O(N),辅助栈在极端情况下需要线性空间,例如 2[2[2[a]]]。当 c 为数字时,将数字字符转化为数字 multi,用于后续倍数计算;创建两个栈,一个用于存储数字,一个用于存储字符串。
2025-07-10 07:29:29
908
原创 070-155 最小栈
具体来说,对于 Deque 的实现类如 LinkedList 和 ArrayDeque,peek() 可以用来查看栈顶或队列头部的元素而不移除它。在 MinStack 实现中,peek() 方法用于检查栈的当前最小值或栈顶元素。使用两个栈,一个用于存储所有元素,一个用于存储当前最小值。将当前元素与最小值栈顶元素比较,将较小值压入最小值栈。返回最小值栈顶元素,即当前栈中的最小值。将元素压入存储所有元素的栈。移除存储所有元素的栈顶元素。返回存储所有元素的栈顶元素。同时移除最小值栈顶元素。用于存储所有元素的栈。
2025-07-10 07:28:58
796
原创 069-20 有效的括号
如果栈为空,说明所有括号都匹配,否则返回。如果字符串长度为奇数,不可能是有效的。检查当前右括号是否与栈顶的左括号匹配。如果栈为空,说明没有匹配的左括号。如果是左括号,压入栈中。
2025-07-10 07:28:28
268
原创 068-004 寻找两个正序数组中的中位数 hard不易理解(难死了)
划分点 i 和 j 共同作用,需要满足一定的大小关系,即 nums1[i - 1] <= nums2[j] 且 nums2[j - 1] <= nums1[i]。这意味着左半部分的所有元素都小于等于右半部分的所有元素。,它和在数组 nums1 上的划分点 i 共同作用,以实现将两个数组合并后的整体进行合理划分,使得划分后的左右两部分满足特定的数量和大小关系。如果总长度是偶数,中位数是左边部分的最大值和右边部分的最小值的平均值。为偶数,中位数就是左半部分的最大值和右半部分的最小值的平均值,即。
2025-07-10 07:27:57
763
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅