- 博客(301)
- 资源 (3)
- 收藏
- 关注
原创 ScheduledExecutorService详解
比如period为5,那5秒后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,则需要等上一个任务执行完毕后立即执行,如果你的任务执行时间超过5秒,那么任务时间间隔参数将无效,任务会不停地循环执行,,加上任务时间间隔作为下一次任务开始时间,由此可以得出,任务可以严格按照时间间隔执行。的子接口,提供了更强大的调度功能。是 Java 并发工具包 (是以上一个任务开始的时间计时。在指定的延迟后执行一次任务。) 中的一个接口,用于在。
2025-01-04 22:47:39
450
原创 基于mysql数据库实现分布式锁
我们组redis翻车了,给客户带来问题。虽然紧急出包得到了解决,但是大领导一句话,直接禁用了。主题思路就是,借助数据库的行锁,然后拿到锁则继续执行,拿到锁并启动ScheduledExecutorService (定时周期执行任务-每隔锁过期时间/3续期一次,类似看门狗机制),拿不到锁则自旋等待。废话不多说上代码-拿去即可使用:实现背景:springboot、mybatis、mybatis-plus1.新增锁锁表。
2025-01-04 19:06:52
560
原创 聊聊Spring中最常用的11个扩展点
我们一说到spring,可能第一个想到的是IOC(控制反转) 和AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。除此之外,我们在使用spring的过程中,有没有发现它的扩展能力非常强。由于这个优势的存在,让spring拥有强大的包容能力,让很多第三方应用能够轻松投入spring的怀抱。比如:rocketmq、mybatis、redis等。今天跟大家一起聊聊,在Spring中最常用的11个扩展点。
2024-12-31 21:44:53
1081
原创 25. K 个一组翻转链表
是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。这个题目代码写的有点冗余,但是都是自己写的,后面会优化。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。希望自己可以坚持下去。方法--天涯明月 共勉。
2024-12-05 22:35:42
229
原创 JVM学习《垃圾回收算法和垃圾回收器》
因此就出现了一种标记-整理算法(Mark-Compact)算法,与标记-整理算法不同的是,在标记可回收的对象后将所有存活的对象压缩到内存的一端,使他们紧凑的排列在一起,然后对端边界以外的内存进行回收。重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录(主要 是处理漏标问题),这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短。垃圾收集时,遍历当前使用的区域,把存活对象复制到另外一个区域中,最后将当前使用的区域的可回收的对象进行回收。
2024-12-05 20:20:33
1393
原创 Leetcode189. 轮转数组
向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]希望自己可以坚持下去。方法--天涯明月 共勉。,将数组中的元素向右轮转。
2024-10-29 16:49:42
294
原创 Leetcode 53. 最大子数组和
请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。希望自己可以坚持下去。的解法,尝试使用更为精妙的。方法--天涯明月 共勉。是数组中的一个连续部分。如果你已经实现复杂度为。
2024-10-28 11:22:48
266
原创 Leetcode76. 最小覆盖子串
最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。所有字符的子串,则返回空字符串。整个字符串 s 是最小覆盖子串。希望自己可以坚持下去。所有字符的最小子串。方法--天涯明月 共勉。
2024-10-25 14:30:38
410
原创 Leetcode239. 滑动窗口最大值
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。滑动窗口的位置 最大值。滑动窗口每次只向右移动一位。希望自己可以坚持下去。方法--天涯明月 共勉。
2024-10-25 13:35:23
461
原创 leetcode438. 找到字符串中所有字母异位词
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。希望自己可以坚持下去。方法--天涯明月 共勉。
2024-10-24 14:20:55
365
原创 Leetcode3. 无重复字符的最长子串
请你找出其中不含有重复字符的。请注意,你的答案必须是。希望自己可以坚持下去。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。方法--天涯明月 共勉。,所以其长度为 3。,所以其长度为 1。,所以其长度为 3。
2024-10-24 10:59:56
247
原创 Leetcode——863.二叉树中所有距离为 K 的结点
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K。返回到目标结点 target 距离为 K 的所有结点的值的列表。树上的每个结点都具有唯一的值 0
2024-10-24 10:07:38
209
原创 JVM学习《类加载运行-jvm内存模型》
如果某个类已经被父类加载器加载过,子类加载器就不会再加载它,从而保证 JVM 中每个类的唯一性,节省内存资源并提高加载效率。通过类加载器加载主类到JVM,加载过程可以分为五个主要阶段:加载、验证、准备、解析、初始化。应用程序类加载器(Application ClassLoader):加载ClassPath路径下的类。扩展类加载器(Extension ClassLoader):加载JRE扩展目录中的类包。通过先让父类加载器尝试加载类,可以确保应用程序无法加载并替换核心类库。加载到内存中的运行时数据区。
2024-08-31 23:14:11
766
原创 Leetcode11. 盛最多水的容器
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2024-08-29 11:12:18
301
原创 Leetcode5. 最长回文子串(背向指针)
在自己能学想学习的时候,一定要尽可能的多学习。不然其他时间就更没时间或是心思学习了。好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。"aba" 同样是符合题意的答案。
2024-08-29 10:02:41
253
原创 Leetcode9. 回文数(双指针-对撞)
从左向右读, 为 -121。从右向左读, 为 121-。因此它不是一个回文数。好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。是指正序(从左向右)和倒序(从右向左)读都是一样的整数。从右向左读, 为 01。因此它不是一个回文数。你能不将整数转为字符串来解决这个问题吗?是一个回文整数,返回。
2024-08-21 09:31:18
439
原创 Leetcode344. 反转字符串(双指针-对撞)
好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组。、使用 O(1) 的额外空间解决这一问题。不要给另外的数组分配额外的空间,你必须。
2024-08-21 09:09:29
381
原创 Leetcode26. 删除有序数组中的重复项(双指针)
/ 长度正确的期望答案。好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。如果所有断言都通过,那么您的题解将被。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。
2024-08-20 22:32:47
322
原创 Leetcode876. 链表的中间结点(双指针)
好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。如果有两个中间结点,则返回第二个中间结点。,请你找出并返回链表的中间结点。链表只有一个中间结点,值为 3。
2024-08-20 21:57:09
224
原创 Leetcode128. 最长连续序列(不得不会呀)
好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是 [1, 2, 3, 4]。请你设计并实现时间复杂度为。给定一个未排序的整数数组。
2024-08-19 22:19:23
202
原创 leetcode 49. 字母异位词分组(Java)
给你一个字符串数组,请你将组合在一起。可以按任意顺序返回结果列表。是由重新排列源单词的所有字母得到的一个新单词。
2024-08-18 22:51:28
197
转载 33道微服务高频面试题,两万字图文详解!速收藏!
微服务(Microservices)是一种软件架构风格,将一个大型应用程序划分为一组小型、自治且松耦合的服务。每个微服务负责执行特定的业务功能,并通过轻量级通信机制(如HTTP)相互协作。每个微服务可以独立开发、部署和扩展,使得应用程序更加灵活、可伸缩和可维护。在微服务的架构演进中,一般可能会存在这样的演进方向:单体式-->服务化-->微服务。
2024-08-18 21:19:34
1911
原创 Spring Boot 调用外部接口的四种方式
在Spring Boot项目中,调用外部接口是一种常见的需求,它允许你的应用与其他系统或服务进行交互。以下是四种常用的调用外部接口的方式,并附上相应的Java代码案例。
2024-08-12 09:26:23
2935
原创 Leetcode509. 斐波那契数(递归和常规两种写法)
好久好久没写算法了,最近开始写,先从最简单的开始。希望自己可以坚持下去。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。表示)形成的序列称为。
2024-07-21 16:57:53
408
原创 Leetcode2427. 公因子的数目和Leetcode.728. 自除数
给你两个正整数a和b,返回a和b的因子的数目。如果x可以同时整除a和b,则认为x是a和b的一个。412 和 6 的公因子是 1、2、3、6。225 和 30 的公因子是 1、5。是指可以被它包含的每一位数整除的数。128不允许包含 0。给定两个整数left和right,返回一个列表,列表的元素是范围内所有的。
2024-07-21 12:49:49
554
原创 Leetcode1688. 比赛中的配对次数
第 3 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。- 第 4 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。- 第 1 轮:队伍数 = 14 ,配对次数 = 7 ,7 支队伍晋级。- 第 2 轮:队伍数 = 7 ,配对次数 = 3 ,4 支队伍晋级。- 第 1 轮:队伍数 = 7 ,配对次数 = 3 ,4 支队伍晋级。- 第 2 轮:队伍数 = 4 ,配对次数 = 2 ,2 支队伍晋级。- 第 3 轮:队伍数 = 4 ,配对次数 = 2 ,2 支队伍晋级。
2024-07-21 11:56:41
333
原创 Leetcode 2520. 统计能整除数字的位数
121 可以被 1 整除,但无法被 2 整除。由于 1 出现两次,所以返回 2。好久好久没写算法了,今天开始写,先从最简单的开始。希望自己可以坚持下去。1248 可以被它每一位上的数字整除,因此答案是 4。7 被自己整除,因此答案是 1。
2024-07-20 23:08:39
217
原创 Leetcode2160. 拆分数位后四位数字的最小和:
比方说,给你 num = 2932 ,你拥有的数位包括:两个 2 ,一个 9 和一个 3。一些可能的 [new1, new2] 数对为 [22, 93],[23, 92],[223, 9] 和 [2, 329]。可行的 [new1, new2] 数对为 [29, 23] ,[223, 9] 等等。可行的 [new1, new2] 数对为 [0, 49] ,[490, 0] 等等。最小和为数对 [29, 23] 的和:29 + 23 = 52。最小和为数对 [4, 9] 的和:4 + 9 = 13。
2024-07-20 22:46:20
289
原创 Leetcode 2011. 执行操作后的变量值
-X:X 减 1 ,X = 0 - 1 = -1。X++:X 加 1 ,X = -1 + 1 = 0。X++:X 加 1 ,X = 0 + 1 = 1。,这是由操作组成的一个列表,返回执行所有操作后,++X:X 加 1 ,X = 0 + 1 = 1。++X:X 加 1 ,X = 1 + 1 = 2。X++:X 加 1 ,X = 0 + 1 = 1。++X:X 加 1 ,X = 1 + 1 = 2。--X:X 减 1 ,X = 2 - 1 = 1。X--:X 减 1 ,X = 1 - 1 = 0。
2024-07-18 22:14:06
236
原创 mysql的事务,你弄懂了吗?(Innodb)
当前事务的操作要么同时成功,要么同时失败。原子性由undo log 日志实现。:事务必须使数据库从一个一致性状态变换到另一个一致性状态。简言之:一个事务中的所有操作,要么一起改变数据库中的数据,要么都不改变,对于其他事务而言,数据的变化是一致的。:多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。:持久性就是指如果事务一旦被提交,数据库中数据的改变就是永久性的。
2024-07-12 21:53:37
1015
原创 为什么要使用多线程(并发编程)
学习操作系统的时候,都了解到:单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。
2024-06-29 12:29:31
685
原创 Dubbo运行原理
Dubbo 是一款高性能、轻量级的开源 RPC(远程过程调用)框架,主要用于构建分布式服务和微服务架构。要说 Dubbo 运行流程就不得不先来了解一下 Dubbo 的核心组件了,因为 Dubbo 的交互流程是和核心组件息息相关的。:暴露服务的应用,通过 Dubbo 框架将自身的服务接口及实现注册到注册中心。:调用远程服务的应用,从注册中心订阅所需的服务,然后通过远程调用消费服务。:集中管理服务的地址信息,服务提供者和服务消费者均在此注册或订阅服务信息。
2024-06-26 17:27:29
846
转载 @Async注解失效的 9 种场景
最近有粉丝问了我一个问题:他在项目某个方法使用@Async注解,但是该方法还是同步执行了,异步不起作用,到底是什么原因呢?@Slf4j@Service@Async这个问题还是比较有意思的,今天这篇文章总结了@Async注解失效的9种场景,希望对你会有所帮助。
2024-05-13 10:45:49
607
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人