自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曦煜墨白的博客

曦煜墨白的博客

  • 博客(115)
  • 收藏
  • 关注

原创 测试执行和启动速度很慢?警惕@SpringBootTest

@SpringBootTest 注解是 Spring Boot 框架中一个非常核心的测试注解,主要用于集成测试。理解它的工作机制和如何优化测试速度,对开发效率很有帮助。

2025-11-13 19:23:36 746

原创 详解@SpringBootApplication (懂作用和原理,收藏就对了)

本文深入解析了SpringBoot核心注解@SpringBootApplication的源码实现。该注解由三个核心注解组成:@SpringBootConfiguration标识配置类、@ComponentScan实现组件扫描、@EnableAutoConfiguration通过@Import导入AutoConfigurationImportSelector类,该类的selectImports方法从META-INF/spring配置文件中读取自动配置类列表。这些配置类会根据@Conditional条件注解动态

2025-11-06 20:48:18 808

原创 用户在浏览器输入一次前端页面的请求,和服务器交互的整体流程是怎样的?

用户访问网页时,浏览器先从前端服务器获取静态资源(HTML/CSS/JS)。加载前端框架后,若需动态数据则向后端发送API请求。后端返回JSON数据,浏览器将其与静态资源结合完成页面渲染。这种前后端分离的架构提高了开发效率和性能。

2025-10-30 21:16:49 358

原创 删除文件被‘TrustedInstaller’拦截?点击查看解决方法(建议收藏)

系统文件被TrustedInstaller权限拦截的解决方法:1)通过文件属性-安全-高级设置,更改所有者为Administrators并赋予完全控制权限;2)更简单的方法是使用腾讯电脑管家强制删除;3)进阶方案是通过管理员命令提示符执行takeown夺取所有权、icacls授予权限后删除。这些方法都能有效解决管理员权限不足的问题,但操作前需谨慎确认删除必要性以避免影响系统稳定性。

2025-10-30 18:31:57 231

原创 程序员入职必知:Git拉取提交解决冲突完整流程(建议收藏)

本文详细介绍了程序员入职后使用Git进行协作开发的完整流程。从克隆项目、创建功能分支、提交代码,到处理合并冲突的两种方法(GitHub在线解决和本地解决),再到创建Pull Request、代码审查和最终合并。重点讲解了当多人开发同一功能产生冲突时,如何通过协商融合代码解决方案,并提供了完整的命令行操作指南。文章还强调了PR在代码审查、测试和团队协作中的重要性,最后给出了分支清理的最佳实践。这套流程特别适合GitHub团队协作开发场景,能有效解决代码冲突问题。

2025-10-28 22:16:56 355

原创 Mysql:双主双从情况下,一主库挂了会发生什么,其对应从库会发生什么

MySQL双主双从集群中,M1和M2互为主从,各带一个从库S1、S2。MyCAT配置将写操作默认路由到M1,当M1故障时自动切换至M2。初始阶段,若M1宕机但无新DML/DDL操作,查询会随机分配到S1、S2和M2(数据一致)。一旦执行新写操作,MyCAT通过心跳检测发现S1因主库宕机产生复制延迟,会将其标记为不可用,此后查询仅路由至M2和S2,确保数据一致性。该架构通过自动故障转移和延迟检测机制保障高可用。

2025-10-24 10:01:47 243

原创 Java集合框架整体分类(完整的集合框架关系及对应常用方法)

Java集合框架整体分类清晰明了,分为单列集合Collection和双列集合Map两大类。Collection包含有序可重复的List(ArrayList、LinkedList、Vector)、无序不可重复的Set(HashSet、LinkedHashSet、TreeSet)以及队列Queue(LinkedList、PriorityQueue、Deque)。Map接口存储键值对,包括HashMap、LinkedHashMap、TreeMap和Hashtable。栈和队列可通过Deque接口实现,推荐使用Ar

2025-10-22 15:52:38 452

原创 元数据锁:执行DQL后执行DDL能成功吗?

MySQL元数据锁(MDL)中,共享读/写锁兼容,但与排它锁互斥。同一个事务内允许从共享读锁升级到排它锁,不会自我阻塞。不同事务间的锁才会互斥或兼容。例如事务先执行DQL(共享读锁)再执行DDL(排它锁)时,MySQL会自动升级锁而不阻塞,因为同一事务内的锁升级是被允许的。MDL锁的兼容规则仅适用于不同事务之间,同一事务内部不存在自我阻塞问题。

2025-10-21 15:33:21 256

原创 HTTP首部字段(速查-全47种)

HTTP/1.1 规范定义了 47 种首部字段,本文提供全字段的字段名和对应的类型说明以供速查。

2025-09-28 20:03:27 397

原创 Java:为什么子类方法访问权限必须大于或等于父类方法的权限?

Java方法重写遵循两条核心规则:1)子类方法访问权限必须≥父类方法,确保里氏替换原则(子类可替换父类而不破坏程序);2)返回值类型必须相同或是更具体的子类,保证类型安全。这两条规则共同维护了多态性的安全性,避免了运行时错误,使Java程序更健壮可靠。典型的例子是父类返回Number类型时,子类可返回Integer等子类型,但访问权限只能扩大不能缩小。这些机制体现了Java面向对象设计的严谨性。

2025-09-27 11:00:44 233

原创 HTTP状态码(常见14种)

HTTP状态码分类总结:2XX表示请求成功处理(200正常完成,204无返回内容,206部分内容);3XX是重定向(301永久重定向,302临时重定向,303明确要求GET方法,304条件请求未满足);4XX为客户端错误(400请求语法错误,401需要认证,404资源不存在);5XX为服务器错误(500服务器内部错误,503服务不可用)。状态码帮助客户端理解请求处理结果。

2025-09-24 20:43:08 913

原创 快速学习Python(有其他语言基础)

Python快速入门指南(有编程基础版) 本文为有编程基础的读者提供Python快速入门教程,涵盖基础语法和核心概念: 基础语法:print输出、变量声明、注释方式 数据类型:int/str/float转换及操作 字符串处理:三种定义方式、格式化(f-string和%格式化)、拼接 流程控制:if-elif-else条件判断、while/for循环 函数基础:定义、参数传递、返回值、global关键字 重点提示: Python通过缩进定义代码块 变量无类型,值有类型 字符串格式化推荐f-string ran

2025-09-21 19:04:48 1323 1

原创 HTTP协议中,报文主体和实体主体的区别是什么

HTTP协议中报文主体与实体主体的核心区别在于编码处理:未编码时两者内容相同,编码后报文主体承载编码数据(如压缩、分块传输),实体主体仍指原始数据。实体主体是资源的真实负载,而报文主体是其在传输中的表现形式。关键差异体现在编码操作会改变报文主体但不影响实体主体定义,接收端需解码还原原始数据。实体包含描述性首部(Content-Type等)和实体主体,报文主体则是HTTP报文传输的实际数据部分。

2025-09-19 18:54:14 362

原创 URL和URI的区别?

格式:scheme:[//authority][/path][?是更广泛的标识符,用于唯一标识一个资源(如网页、文件、服务等),不关心资源如何被访问。• urn:isbn:9780131103627是URI(仅标识书籍,不可直接访问)。• URL必须包含协议和主机名,而URI可能仅通过名称或编号标识资源(如ISBN)。是URI的子集,专门用于定位资源的位置,并包含访问该资源的协议和路径。• 所有URL都是URI,但URI不一定是URL(如URN)。• URL= 资源的“地址+门牌号”(定位并可访问)。

2025-09-18 19:16:59 390

原创 U盘文件或目录损坏且无法读取(解决办法)

等待命令的执行成功,U盘就能够成功修复。输入成功后电脑会开始检查并修复U盘。

2024-01-11 12:50:11 4163

原创 动态规划14:一和零

不少同学刷过这道题,可能没有总结这究竟是什么背包。此时我们讲解了0-1背包的多种应用,纯 0 - 1 背包是求 给定背包容量 装满背包 的最大价值是多少。416. 分割等和子集是求 给定背包容量,能不能装满这个背包。1049. 最后一块石头的重量 II是求 给定背包容量,尽可能装,最多能装多少494. 目标和是求 给定背包容量,装满背包有多少种方法。本题是求 给定背包容量,装满背包最多有多少个物品。这些都是 0-1背包不同维度上的应用,大家可以细心体会!

2023-10-30 16:16:18 277

原创 动态规划:13目标和

如何转化为01背包问题呢。假设加法的总和为x,那么减法对应的总和就是sum - x。所以我们要求的是 x - (sum - x) = targetx = (target + sum) / 2**此时问题就转化为,装满容量为x的背包,有几种方法**。这里的x,就是bagSize,也就是我们后面要求的背包容量。大家看到(target + sum) / 2 应该担心计算的过程中向下取整有没有影响。这么担心就对了,例如sum 是5,target是2的话其实就是无解的,所以

2023-10-20 15:25:24 1006

原创 动态规划:12最后一块石头的重量II

本题其实和动态规划:11分割等和子集几乎是一样的,只是最后对dp[target]的处理方式不同。动态规划:11分割等和子集相当于是求背包是否正好装满,而本题是求背包最多能装多少。

2023-10-20 15:22:42 828

原创 动态规划:11分割等和子集

这道题目就是一道01背包应用类的题目,需要我们拆解题目,然后套入01背包的场景。01背包相对于本题,主要要理解,题目中物品是nums[i],重量是nums[i],价值也是nums[i],背包体积是sum/2。看代码的话,就可以发现,基本就是按照01背包的写法来的。

2023-10-17 21:33:23 271 1

原创 动态规划:10 0-1背包理论基础II(滚动数组)

对于背包问题其实状态都是可以压缩的。在使用二维数组的时候,递推公式:dp[i]\[j] = max(dp[i - 1]\[j], dp[i - 1]\[j - weight[i]] + value[i]);**其实可以发现如果把dp[i - 1]那一层拷贝到dp[i]上,表达式完全可以是:dp[i]\[j] = max(dp[i]\[j], dp[i]\[j - weight[i]] + value[i]);****与其把dp[i - 1]这一层拷贝到dp[i]上,不如只用一个一维数组了**,只

2023-10-16 16:02:43 912 1

原创 动态规划:09 0-1背包理论基础I

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。**每件物品只能用一次**,求解将哪些物品装入背包里物品价值总和最大这是标准的背包问题,以至于很多同学看了这个自然就会想到背包,甚至都不知道暴力的解法应该怎么解了。这样其实是没有从底向上去思考,而是习惯性想到了背包,那么暴力的解法应该是怎么样的呢?每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是$o(2^n)$,这里的n表示物品数量。

2023-10-16 16:01:26 302

原创 动态规划:08不同的二叉搜索树

这道题目虽然在力扣上标记是中等难度,但可以算是困难了!首先这道题想到用动规的方法来解决,就不太好想,需要举例,画图,分析,才能找到递推的关系。然后难点就是确定递推公式了,如果把递推公式想清楚了,遍历顺序和初始化,就是自然而然的事情了。可以看出我依然还是用动规五部曲来进行分析,会把题目的方方面面都覆盖到!用动规五部曲解斐波那契的时候,感觉简答题复杂化了。但要知道,简单题是用来练习方法论的,并不能简单代码一甩,简单解释一下就完事了。可能当时不理解,现在大家应该感受方法论的重要性了,加油💪。

2023-10-13 11:22:45 148

原创 动态规划:07整数拆分

确定递归公式:dp[i] = max((j * (i - j)), j * dp[i - j])我们知道,要将一个数拆分的乘积最大,那么这几个数需要近似相等,那么就可以优化我们的代码。dp数组初始化:dp[0] = 0, dp[1] = 0, dp[2] = 1。确定dp数组含义:将i拆分,最大乘积是dp[i]对于思路来说,递推公式就先想到这里。debug:打印dp数组。

2023-10-13 11:21:49 214

原创 动态规划:06不同路径II

本题是动态规划:05不同路径的障碍版,整体思路大体一致。但就算是做过62.不同路径,在做本题也会有感觉遇到障碍无从下手。其实只要考虑到,遇到障碍dp[i][j]保持0就可以了。也有一些小细节,例如:初始化的部分,很容易忽略了障碍之后应该都是0的情况。

2023-10-12 13:27:16 810

原创 动态规划:05不同路径

本题还是使用动规五部曲,但这次我们就要考虑如何正确的初始化了,初始化和遍历顺序其实也很重要!

2023-10-12 13:22:26 176

原创 动态规划:04使用最小花费爬楼梯

本题相较于动态规划:03爬楼梯难了一点,但整体思路一致。

2023-10-11 20:04:52 338

原创 动态规划:03爬楼梯

所以到第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来,那么就可以想到动态规划了。有面试官指出:面试中能写出第一个就够了,清晰明了,如果要求进一步优化空间的话,再去优化。那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层。爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。我们发现:本题其实就是。

2023-10-11 20:01:58 296

原创 动态规划:02斐波那契数

这是一道简单的动规题,为什么简单呢,因为在五部曲中2、3步题目直接给有,第4步也是凭常识习惯就是正确的要按照五部曲认真想,难题也是这五步,要培养思想。

2023-10-11 19:59:38 133

原创 动态规划:01动态规划理论基础

这一篇是动态规划的整体概述,讲解了什么是动态规划,动态规划的解题步骤,以及如何debug。动态规划是一个很大的领域,今天这一篇讲解的内容是整个动态规划系列中都会使用到的一些理论基础。在后序讲解中针对某一具体问题,还会讲解其对应的理论基础,例如背包问题中的01背包,leetcode上的题目都是01背包的应用,而没有纯01背包的问题,那么就需要在把对应的理论知识讲解一下。这里理论基础篇已经是非常偏实用的了,每个知识点都是在解题实战中非常有用的内容,要重视起来。

2023-10-11 19:59:05 152

原创 17贪心:监控二叉树(Hard)

本题的难点首先是要想到贪心的思路,然后就是遍历和状态推导。在二叉树上进行状态推导,其实难度就上了一个台阶了,需要对二叉树的操作非常娴熟。

2023-10-10 11:44:22 128

原创 16贪心:单调递增的数字

本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。想到了贪心,还要考虑遍历顺序,只有从后向前遍历才能重复利用上次比较的结果。最后代码实现的时候,也需要一些技巧,例如用一个start来标记从哪里开始赋值9。

2023-10-10 11:42:51 117

原创 15贪心:合并区间

所以一样的套路,先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。这几道题都是判断区间重叠,区别就是判断区间重叠后的逻辑,本题是判断区间重贴后要进行区间合并。本题的本质其实还是判断重叠区间问题。

2023-10-09 16:37:53 133

原创 14贪心:划分字母区间

在遍历的过程中相当于是要找每一个字母的边界,**如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了**。此时前面出现过所有字母,最远也就到这个边界了。可以分为如下两步:- 统计每一个字符最后出现的位置- 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

2023-10-09 14:58:43 116

原创 13贪心:无重叠区间

和12贪心:用最少数量的箭引爆气球非常像,稍微一改便可AC,两者基本是相同的题,可以一起练习

2023-10-09 14:57:49 117

原创 12贪心:用最少数量的箭引爆气球

直觉上来看,貌似只射重叠最多的气球,用的弓箭一定最少,那么有没有当前重叠了三个气球,我射两个,留下一个和后面的一起射这样弓箭用的更少的情况呢?局部最优:当气球出现重叠,一起射,所用弓箭最少。就算思路都想好了,模拟射气球的过程,很多同学真的要去模拟了,实时把气球从数组中移走,这么写的话就复杂了。这道题目贪心的思路很简单也很直接,就是重复的一起射了,但本题我认为是有难度的。既然按照起始位置排序,那么就从前向后遍历气球数组,靠左尽可能让气球重复。而且寻找重复的气球,寻找重叠气球最小右边界,其实都有代码技巧。

2023-10-08 16:38:27 171

原创 11贪心:根据身高重建队列

如果按照k来从小到大排序,排完之后,会发现k的排列并不符合条件,身高也不符合条件,两个维度哪一个都没确定下来。本题有两个维度,h和k,看到这种题目一定要想如何确定一个维度,然后再按照另一个维度重新排列。那么按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。局部最优可推出全局最优,找不出反例,那就试试贪心。那么究竟先按h排序呢,还是先按照k排序呢?

2023-10-08 12:37:27 137

原创 10贪心:柠檬水找零

这道题目刚一看,可能会有点懵,这要怎么找零才能保证完成全部账单的找零呢?但仔细一琢磨就会发现,可供我们做判断的空间非常少!有如下三种情况:情况一:账单是5,直接收下。情况二:账单是10,消耗一个5,增加一个10情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5

2023-10-08 12:36:35 148

原创 09贪心:分发糖果

如果 ratings[i] > ratings[i + 1],此时candyVec[i](第i个小孩的糖果数量)就有两个选择了,一个是candyVec[i + 1] + 1(从右边这个加1得到的糖果数量),一个是candyVec[i](之前比较右孩子大于左孩子得到的糖果数量)。那么又要贪心了,局部最优:取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数量,保证第i个小孩的糖果数量既大于左边的也大于右边的。全局最优:相邻的孩子中,评分高的孩子获得更多的糖果。

2023-09-28 11:41:33 196

原创 08贪心:加油站

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。每个加油站的剩余量rest[i]为gas[i] - cost[i]。

2023-09-28 11:40:35 126

原创 07贪心:跳跃游戏II

如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。思路虽然是这样,但在写代码的时候还不能真的能跳多远就跳多远,那样就不知道下一步最远能跳到哪里了。移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时。本题要计算最少步数,那么就要想清楚什么时候步数才一定要加一呢?

2023-09-28 11:39:42 207

空空如也

空空如也

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

TA关注的人

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