- 博客(117)
- 收藏
- 关注
原创 每日八股——运行时常量池
内存复用:多个类可以共享常量池中的常量,避免了相同常量的多次存储,提高了内存使用效率。性能优化:常量池使得符号引用在运行时能够快速解析,提高了程序执行效率。静态性:常量池在类加载时就被确定,之后无法修改,因此不适合存储动态生成的内容。内存消耗:过多的常量可能导致内存压力,尤其在没有合理优化的情况下。运行时常量池是 Java 类加载过程中非常重要的组成部分,它不仅能存储字符串常量、数字常量,还能存储符号引用等。
2025-01-14 13:42:25
457
原创 每日力扣刷题
dp[i]=dp[i-1]+dp[i-2] //两个字符表述的数字大小在区间内。简单来说,我们需要先保留n=1时的格雷码【0,1】,再将其逆转为【1,0】,同时为逆转后的列表中的元素加上前缀,即2^(n-1)次方。每次递归时,都要尝试使用不同的数字作为根节点,构建子树。然后确定动态转移方程,dp[i]=dp[i-1] //当两个字符表示的数字大小会超出26的限制,或者有0。所以 n=2 的格雷码即为 【0,1】+【1+2^1,0+2^1],也就是【0,1,3,2】我们已知 n=1 时,格雷码为【0,1】
2025-01-09 20:55:24
316
原创 每日一些题
题解开始之前,给大家安利一个上班偷偷学习的好搭档,idea中的插件有一个叫 LeetCode with labuladong,可以在idea中直接刷力扣的题目。朋友们上班没事的时候,可以偷偷摸几题。看八股的话,可以用面试鸭,也是idae插件,比较隐蔽。
2025-01-02 16:21:15
551
原创 Jackson中@JsonProperty在groovy和java中的差异
由于没有特别配置 PropertyNamingStrategy,Jackson 使用了默认的大小写转换策略,将 Excess 转为小写的 excess,将 NCD 转为小写的 ncd。这个问题的根本原因在于 Groovy 和 Java 对于类属性的处理存在一些差异,尤其是在处理 字段命名策略 和 注解 的时候。{"ncd":1,"excess":"1","Excess":"1","NCD%":1} //实际执行结果。依然会出现在 JSON 中。执行结果是:{"Excess":"1","NCD%":1}
2024-12-20 13:37:53
459
原创 Liquibase结合SpringBoot使用实现数据库管理
Liquibase 是一个强大的数据库管理工具,它帮助你通过自动化管理数据库的变更、版本控制、和回滚,简化了开发中的数据库迁移工作。通过在 Spring Boot 中集成 Liquibase,可以更高效地管理数据库结构和版本,确保开发团队的协作更加流畅。在项目中,Liquibase 可以和 Git 等版本控制工具配合使用,确保数据库结构变更的透明性和可追溯性。
2024-12-17 11:10:29
1224
原创 力扣——寻找峰值
按照题目当中的条件,数组当中总有一个峰值,传统二分查找依赖数组的全局有序性,而这里利用的是峰值的局部性。然后就想到用二分,但是数组又不一定是有序的。仔细一思考,好像也可以用,关键在于这个峰值的性质。第一想法就是直接遍历,时间复杂度为O(n),肯定超时了。
2024-11-22 14:54:39
403
原创 ShardingSphere——介绍
Apache ShardingSphere 是一个开源的分布式数据库中间件生态圈,可以看作是一个或,它在应用程序和数据库之间,帮助开发者实现一些复杂的分布式数据库管理功能,为用户提供数据分片、分布式事务、数据库治理等功能。它支持通过分片(Sharding)、读写分离、影子库(Shadow Database)等多种方式,帮助开发者优化分布式数据库的操作体验。具体来说,ShardingSphere 是为分布式数据库场景设计的,可以认为它是。
2024-11-21 18:25:01
900
原创 力扣——动态规划
为了避免重复计算路径长度,我们可以使用一个数组,将已经计算过的路径长度保存起来。当我们再次访问到同一个位置时,直接使用之前计算好的结果,而不是重新计算。这将大大降低时间复杂度。使用记忆化搜索将时间复杂度降为 O(m×n),其中 m 和n 是矩阵的行数和列数。仔细思考了一下,主要是做了很多重复计算,那就可以用记忆化搜索来优化。刚开始的思路是直接dfs暴力搜,然后时间超限了。
2024-11-19 14:33:02
549
原创 每日八股——JVM组成
JVM作为Java程序运行的平台,其结构和功能对于深入理解Java程序的运行机制非常重要。通过了解JVM的组成,可以更好地优化程序性能,解决内存问题等。
2024-11-15 18:06:35
914
原创 力扣随机题
每次遍历获取nums[i]的第一个数字,nums[j]的最后一个数字。递归计算每层的和,然后排序获得第k个最大和。判断是否互质,互质则sum++模拟,首先是双重遍历数组。
2024-10-16 23:21:12
529
原创 启动报错:Error running ‘Main‘ Error running Main. Command line is too long.
启动项目时出现下面的报错。
2024-10-15 15:14:03
715
原创 力扣随机题
否则返回 false。如果 input[i-1] == article[j-1] 或者 input[i-1] == '.',表示当前字符匹配,那么 dp[i][j] = dp[i-1][j-1]。我们需要处理 '*' 能否匹配零次的情况。dp[i][j] 表示 input 的前 i 个字符是否可以匹配 article 的前 j 个字符。dp[0][0] 表示空字符串和空字符串是匹配的,因此 dp[0][0] = true。dp[i][j]代表s串的前i个字符里有多少个t子串的前j个字符的子串。
2024-10-14 23:05:05
553
原创 HashSet、LinkedHashSet 和 TreeSet
HashSet、LinkedHashSet 和 TreeSet 都是 Java 中实现 Set 接口的集合类,它们的主要功能是存储不重复的元素。然而,它们在存储元素的顺序、性能及底层实现上存在显著的不同。下面分别详细讲解每种 Set。
2024-10-11 16:53:52
732
原创 力扣随机题
这里正好讲一下HashSet,LinkedHashSet和TreeSet。看了别人的题解之后我发现,我简直思路太狭隘了,往往最朴素的方法最好用。我的思路是直接遍历,找出所有的三位相同数字,然后找出其中最大的。遍历set集合判断是否失败过,或者失败次数为1,添加进对应的集合。set集合记录所有人,用哈希表记录所有的败者以及失败次数。直接模拟会时间超限,根据公式进行优化。
2024-10-10 23:37:15
502
1
原创 力扣随机题
这就是一道排序题,直接根据公式排序,然后返回对应范围的数组就行了。首先用三个变量模拟斐波那契数列,当数列最大值大于k时终止模拟。遍历集合,从最大值开始,就可以找到最少的数目。
2024-10-08 22:51:14
404
原创 JWT+双token实现无感刷新
通过 JWT + 双 Token 实现无感刷新,可以提高系统的安全性,并且提升用户体验,减少频繁登录的麻烦。用于快速鉴权,有效期短;用于刷新,有效期长,使用频率低;前端通过拦截响应中的 401 错误,实现无感刷新;
2024-09-25 17:28:12
818
原创 强制类型转换
后续并没有对ent对象进行操作,在 if 块结束后,它的作用域就结束了。因此,从表面上看,这个变量会被销毁,后续代码无法直接访问这个局部变量。那么这段代码有什么作用呢?查阅资料之后我发现了一个被遗忘的知识点。
2024-09-24 11:25:28
435
原创 AOP实现自动化日志记录,并将日志记录到es中
日志记录: 使用 SLF4J 和 Logback 进行日志记录。AOP: 使用 AOP 记录方法执行时间及相关信息,并将日志发送到 Elasticsearch。Elasticsearch: 使用 Elasticsearch 存储和查询日志,配合 Kibana 实现可视化。优化: 通过引入 AOP,可以实现统一的日志记录逻辑,减少代码重复,方便管理。
2024-09-23 14:40:48
567
原创 java反射学习总结
反射(Reflection)是 Java 提供的一种机制,它允许程序在运行时动态地检查和操作类的属性、方法以及构造函数等信息。反射使得我们可以在编译时不确定类型的情况下操作对象,比如动态地调用方法、访问属性和创建对象实例。反射机制是 Java 强大的动态编程功能之一,它允许我们在运行时检查和操作类的结构信息,这在构建灵活的框架和库时非常有用。然而,反射的使用会带来一定的性能和安全性问题,因此在使用时应尽量避免过度使用。
2024-09-23 11:05:41
947
原创 力扣150题——位运算
位运算(Bitwise Operation)是计算机底层操作中的一种,用来直接对整数的二进制位进行操作。位运算通常速度很快,且消耗的内存较少,在处理一些特定问题(如加密算法、图像处理、低级硬件编程等)时非常有用。
2024-09-18 15:32:53
855
原创 力扣150题——多维动态规划
只需要在上一题的基础上讲k的值化为动态的,并且最后遍历所有的K,找出能达到最大利益的K,并返回最大值。用dp[i][j]代表s1的前i个字母和s2的前s2个字母能否交错组成s3的前i+j-1的子串。
2024-09-18 13:35:08
505
原创 力扣100题——杂题
是 Java 中一个实现了Map接口的类,它结合了HashMap和链表的特性,提供了一个有序的映射。至此,也赶在中秋节放假之前完成了力扣100题,撒花撒花。
2024-09-14 15:16:35
1474
原创 力扣100题——二维动态规划
用dp[i][j]代表text1前i个字符和text2前j个字符的最长公共子序列长度。思路和上一题差不多,只不过状态转移方程略有不同。
2024-09-14 14:01:46
737
原创 力扣100题——动态规划(二)
但是提交上去错误了,问题在于没有考虑到负数这个因素,如果数组中有负数那么此时最大值和最小值会进行反转。确定状态转移方程,当j<i时,d[i] = d[j]&&wordDict.contains(s.substring(j, i))使用dp数组记录当前下标对应的字符串长度能否被正确划分。这题目更适合用栈来写,思路和代码都会清晰一点。按照常规的动态规划思路来做这题的话。
2024-09-13 14:03:37
1255
原创 力扣sql50题——聚合函数
主要是要了解ifnull,round,between and这几个函数的用法。这道题很简单,只需要满足两个条件,最后对结果按rating进行降序。重点在于掌握函数,然后理清思路,按照题目要求限制条件即可。只要指导where和order by的用法,就可以解决。
2024-09-12 21:34:54
291
原创 力扣100题——动态规划
因为不能偷相邻的房子,所以dp[i] = max( dp[i-1] ,dp[i-2]+nums[i])根据题目找出状态转移方程,使用dp数组保存记录,dp[i]即为当前偷的最大值。动态规划关键在于写出状态转移方程,根据题目的意思每次能上一个台阶或两个台阶。根据题目给出的状态转移方程直接模拟实现,优化思路在于。
2024-09-12 15:40:27
1186
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人