自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day 20、21| 二叉搜索树的最近公共祖先、二叉搜索树中的插入操作、删除二叉搜索树中的节点、修剪二叉搜索树、将有序数组转换为二叉搜索树、把二叉搜索树转换为累加树

相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。题目链接/文章讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html视频讲解:https://www.bilibili.com/video/BV1Zt4y1F7ww。

2025-02-06 20:20:31 278

原创 day18 | 二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先

530.二叉搜索树的最小绝对差需要领悟一下二叉树遍历上双指针操作,优先掌握递归题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html视频讲解:https://www.bilibili.com/video/BV1DD4y11779501.二叉搜索树中的众数。

2025-02-06 19:52:30 244

原创 day 11 | 逆波兰表达式求值、滑动窗口最大值、前 K 个高频元素

波兰表达式(前缀表达式)是运算符在操作数之前的一种写法,而逆波兰表达式(后缀表达式)是操作数在运算符之后的一种写法。通过栈来模拟逆波兰表达式的求值非常高效,利用栈的后进先出特性来处理运算符和操作数。

2025-02-06 19:45:43 911

原创 day 10 | 用栈实现队列、用队列实现栈、有效的括号、删除字符串中的所有相邻重复项

这种通过两个栈实现队列的方式,虽然pop和peek操作在最坏情况下的时间复杂度是 O(n),但在平均情况下,它们的时间复杂度是 O(1)。每个元素在stackIn和stackOut中最多移动一次,因此这种方法是高效的。这段代码通过使用栈(模拟为和top变量)来逐步处理字符串中的相邻重复字符,实现了一个高效的字符去重方法。每当遇到重复字符时,弹出栈顶元素;否则将当前字符入栈,最终返回去除重复字符后的结果字符串。如果你有任何疑问或需要进一步的解释,随时告诉我!

2025-02-06 18:17:47 944

原创 day9 | 翻转字符串里的单词、右旋转字符串、实现 strStr()、重复的子字符串

用来将字符串转换为字符数组。toString()直接打印字符数组时会输出数组的内存地址,不会直接输出字符内容。为了输出字符数组内容,可以将其转换为字符串。异或法用于反转字符数组是一个巧妙的技巧,但实际开发中,可能更常用的是通过交换字符来反转数组。字符数组(char[])是一个由多个字符组成的数组。在 Java 中,char是一种基本数据类型,用于表示单个字符,例如字母、数字、符号等。字符数组是一个存储char类型元素的数组,可以包含多个字符。每个字符会占用两个字节,因为在 Java 中,char。

2025-02-06 16:21:28 595

原创 代码随想录算法训练营day16 | 找树左下角的值,路径总和,从中序与后序遍历序列构造二叉树

设为-1是为了简化逻辑,确保任何节点都能正常被判断为“比初始深度更深”。0和也可以作为初始值,但-1是更清晰和直观的选择,因为它符合深度值的范围定义,并且无需额外处理特殊情况。LinkedList和ArrayList的打印输出是一样的,都会使用List接口的toString()方法,格式为[元素1, 元素2, 元素3, ...]。LinkedList和ArrayList在性能上的差异体现在它们的实现结构(动态数组 vs 链表),而这些差异不会影响打印输出。从截图中的错误信息来看,报错原因是。

2025-02-03 22:20:20 544

原创 代码随想录算法训练营 day7 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和

通过将问题转化为两个部分:先计算的所有组合,再计算的所有组合。接着,判断这两个和是否相加为0。我们使用来记录nums1和nums2中所有可能的和以及它们出现的次数。通过使用来查找是否存在与相加为 0 的情况。map存储的是的和以及它们出现的次数。统计的是和sum出现的次数,确保每个和的频率被正确记录。用来查找是否存在与当前的和相加为 0 的组合,并根据出现的次数累加结果res。这种方法的时间复杂度是O(n^2),其中n是数组的长度,因为每对(i, j)和(k, l)都要遍历一次,优化通过。

2025-02-03 21:58:19 864

原创 代码随想录算法训练营 day6 | ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和

你说的“每一轮算两次”,其实是指每一轮中,计算平方和时对每个数字的每一位进行两次操作:一次是取出位数,另一次是对该位数进行平方并累加。每一轮实际上是将当前数字的每一位的平方和计算出来,并作为下一个数字继续参与下一轮计算。通过不断重复这一过程,直到得到1或发现循环,从而判断数字是否是快乐数。好的!我们来详细解释一下如何把代码中的每一步对应到第四轮的计算过程。在方法中,每次对n进行循环时,n % 10是用来获取当前数字的个位数,然后计算该个位数的平方并累加到res中。之后通过n = n / 10。

2025-01-24 21:45:35 492

原创 代码随想录算法训练营 day17 | 654.最大二叉树、 617.合并二叉树、 700.二叉搜索树中的搜索、 98.验证二叉搜索树

通过将maxIndex初始化为leftIndex,你确保了程序能正确地从区间内的第一个元素开始找最大值。然后,通过遍历更新它,最终找到该区间内的最大元素及其位置。在这段代码中,结束索引rightIndex的值传递给了函数,它表示当前递归过程中考虑的数组的右边界。在代码中,rightIndex作为右边界表示区间的“开区间”部分,即右边界是不包含在内的。leftIndex表示“闭区间”的左边界,即左边界是包含的。因此,整个区间采用了左闭右开的方式,确保递归能够覆盖从leftIndex到。

2025-01-14 16:02:26 619

原创 代码随想录八股训练营总结

通过系统学习了 Spring、Spring Boot、Redis 等相关技术栈,我不仅加深了对这些框架的理解,也提升了实际项目开发的能力。每天的任务让我逐步掌握了 Java 编程中的设计模式、Spring 的核心机制和常用注解,尤其是在 Spring IoC 容器、AOP、Bean 生命周期等方面,有了更深刻的认识。训练营的实战环节非常有帮助,通过实际编写代码解决问题,我对如何优化代码和提升性能有了更具体的思路。此外,教练的讲解和队友的讨论也让我更加注重团队协作和技术交流,帮助我更好地理解复杂的概念。

2024-12-31 18:41:51 132

原创 Spring Boot 常用注解详解与代码示例

这些注解提供了许多功能,帮助我们简化开发、减少配置并提高应用的可维护性。在 Spring Boot 中,掌握这些常用注解非常重要,它们是开发高效、可扩展应用的基础。Spring Boot 提供了许多注解,帮助开发者快速构建应用程序,提升开发效率。以下是一些常用注解的详细解释和示例代码。

2024-12-31 18:29:59 927

原创 Spring 中使用的设计模式 | Spring MVC 的执行流程 | Spring Boot Starter

通过引入 Starter,Spring Boot 自动为你配置相关组件和 Bean,无需手动设置和管理依赖项。在 Spring 框架中,有很多设计模式的应用,这些模式帮助 Spring 提供灵活、可扩展和解耦的架构。,Spring Boot 会自动配置相关的组件,例如嵌入式的 Tomcat 服务器、Spring MVC、Jackson 等,开发者无需手动进行配置。Spring Boot Starter 使得开发者只需引入相关的 Starter,即可快速集成相应的功能,而无需过多关注细节配置。

2024-12-31 18:07:34 561

原创 Bean 是什么 | Bean 的作用域 | Bean 的生命周期 | Spring 循环依赖问题及解决方案

当 Bean 的属性需要注入其他 Bean 时,Spring 会检查二级缓存,若该 Bean 还未准备好,则创建并放入三级缓存。并不是所有对象都可以是 Spring 的 Bean。通常,这些 Bean 是由 Spring 容器根据配置类、XML 配置文件等自动创建的对象,而不是我们手动创建的普通对象。例如,Bean A 依赖 Bean B,而 Bean B 又依赖 Bean A,这就构成了一个循环依赖。通常情况下,Bean 是指应用程序中的对象,它们是由 Spring 容器在启动时自动创建并管理的。

2024-12-31 18:06:28 663

原创 Spring的循环依赖

【代码】Spring的循环依赖。

2024-12-31 17:03:51 160

原创 Bean的生命周期

【代码】Bean的生命周期。

2024-12-31 17:03:37 129

原创 Bean的不同作用域

【代码】Bean的不同作用域。

2024-12-31 17:03:14 106

原创 Spring IOC是啥

【代码】Spring IOC是啥。

2024-12-31 17:02:59 125

原创 Spring AOP是什么

【代码】Spring AOP是什么。

2024-12-31 17:02:45 171

原创 双亲委派机制

【代码】双亲委派机制。

2024-12-31 17:02:29 174

原创 类加载机制

【代码】类加载机制。

2024-12-31 17:02:07 188

原创 几种java垃圾回收器

【代码】几种java垃圾回收器。

2024-12-31 17:01:45 158

原创 各种垃圾回收算法

【代码】各种垃圾回收算法。

2024-12-30 17:19:07 225

原创 介绍一下什么是强引用、软引用、弱引用、虚引用

【代码】介绍一下什么是强引用、软引用、弱引用、虚引用。

2024-12-30 17:14:54 116

原创 Java内存区域

每个区域就像房子里的不同房间,都有其特定的用途和特点。

2024-12-30 17:14:00 216

原创 BIO、NIO 和 AIO 的区别

它们就像不同的服务模式,适用于不同的场景。

2024-12-30 17:08:28 205

原创 线程池的常用参数

通过这些类比,你能更好地理解线程池的参数了吗?这些参数就像是餐厅运营的各种规则,帮助我们更好地管理系统资源和处理任务。

2024-12-30 17:07:30 262

原创 为什么需要线程池

线程池就像一个优秀的团队管理系统,既保证了工作效率,又避免了资源浪费。

2024-12-30 17:04:16 222

原创 JDK8 的新特性

这些特性让Java编程变得更加现代化和高效。每个特性都像是一个新工具,帮助我们写出更好的代码。

2024-12-30 16:54:29 149

原创 对比 volatile 和 synchronized

【代码】对比 volatile 和 synchronized。

2024-12-30 16:52:45 151

原创 volatile 的作用

通过这些例子,能更好地理解 volatile 的作用,它就像是在变量上贴了一个"立即生效"的标签,确保所有线程都能看到最新的值,但不能保证复杂操作的原子性。

2024-12-30 16:47:50 282

原创 synchronized 和 ReentrantLock 的区别

总之,ReentrantLock 就像是 synchronized 的高级版本,提供了更多的功能和灵活性,但使用时也需要更多的注意事项。

2024-12-30 16:46:46 178

原创 synchronized 和 Lock 的区别

【代码】synchronized 和 Lock 的区别。

2024-12-30 16:45:12 221

原创 Java常见的异常类有哪些

RuntimeException(运行时异常)

2024-12-30 16:18:34 147

原创 接口和抽象类的区别

所以抽象类是一种"是什么"的关系(is-a),而接口是一种"能做什么"的关系(can-do)。

2024-12-30 16:17:21 170

原创 String、StringBuffer、StringBuilder的区别

【代码】String、StringBuffer、StringBuilder的区别。

2024-12-30 16:16:12 186

原创 Redis缓存雪崩和缓存穿透 如何保证数据库和缓存的一致性

缓存雪崩缓存击穿缓存穿透是常见的缓存问题,解决这些问题需要合理的缓存策略,如设置随机过期时间、使用分布式锁、布隆过滤器等。保证缓存和数据库一致性是另一个重要问题,可以采用不同的缓存策略(如Cache Aside、Read/Write Through、Write Behind等)来减少一致性问题,确保数据可靠性。

2024-12-30 00:28:00 915

原创 Redis的数据类型,线程,持久化机制

Redis单线程的设计让它可以避免复杂的多线程同步问题,同时大多数操作在内存中,能够高效执行。Redis的持久化机制包括AOF日志、RDB快照以及混合持久化方式。Redis支持多种数据类型,包括基本的字符串、哈希、列表、集合、有序集合等,还支持BitMap、HyperLogLog、GEO和Stream等扩展数据类型。

2024-12-29 20:04:49 683

原创 代码随想录算法训练营day15 | 0110平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

1用作一个错误标志,标志某个子树不平衡。返回0则会失去对不平衡树的即时检测和终止功能。通过返回-1,你能够更高效地判断并终止不平衡树的检测,因此return -1是合理的选择。return -1能终止递归,而return 0不能终止,是因为-1被用作一个标志值,表示树或子树不平衡,而0被用作树的高度值。我们可以通过递归传播的机制,理解它们的区别。:方法接受一个树节点作为参数(root),然后递归计算该节点及其子树的高度。= -1:这里的root是整个树的根节点,

2024-12-29 19:40:10 803

原创 day8 | 反转字符串、翻转字符串2

【代码】翻转字符串2。

2024-12-23 11:38:43 123

原创 Java中的锁机制 与 synchronized的理解

公平锁:公平锁的特点是多个线程按照请求锁的顺序来获取锁,即遵循 FIFO(先进先出)顺序。公平锁会避免“饥饿”现象,即后申请锁的线程不会比先申请的线程更早获取锁。Java中的 可以通过构造函数指定是否公平锁。如果传入 ,则创建公平锁。非公平锁:非公平锁则没有严格按照顺序分配锁,后申请的线程有可能比先申请的线程更早获得锁。这种锁的好处是性能较高,因为它减少了等待时间,避免了严格排队的开销。 的默认锁是非公平的。 也属于非公平锁。举例:可重入锁的意思是同一个线程可以多次获取同一把锁,而不会发生死锁。一个线程获

2024-12-21 19:31:20 873

空空如也

空空如也

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

TA关注的人

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