- 博客(53)
- 收藏
- 关注
原创 Spring Web MVC
Spring Web MVC是基于Servlet API构建的原始Web框架,实现了MVC架构模式,将系统分为模型、视图和控制器三部分。Spring Boot是创建Spring MVC项目的一种方式。文章介绍了@RequestMapping注解的使用,包括建立连接、请求参数传递(单个参数、多个参数、对象、数组/集合)以及JSON数据的处理。还讲解了如何获取URL中的数据、状态码分类以及文件上传的实现。重点强调了参数命名冲突的解决方案,建议使用包装类型接收参数以避免空值异常,并介绍了@RequestParam
2025-08-22 18:14:28
1199
2
原创 SpringBoot快速上手
本文介绍了SpringBoot快速上手的准备工作,包括IDEA版本选择、Maven项目管理工具的使用和配置。Maven通过pom.xml文件管理项目依赖,支持依赖传递和排除功能。文章详细讲解了Maven的坐标概念、仓库(中央仓库、本地仓库和私服)配置方法,以及如何设置国内镜像源加速下载。对于不同版本的IDEA(社区版和专业版)创建SpringBoot项目的具体步骤进行了说明,包括版本选择、依赖管理和常见问题解决方法。最后简要介绍了SpringBoot项目目录结构和启动日志信息,帮助开发者快速理解项目框架。
2025-08-22 17:20:21
846
原创 链表深拷贝[随机链表的复制]
本文介绍了链表深拷贝问题的两种解法:原地插入法和哈希表法。深拷贝要求完全复制链表结构,包括next和random指针关系,确保新旧链表独立。 原地插入法通过将拷贝节点插入原节点后,分三步完成:1)复制节点并插入原链表;2)设置random指针;3)拆分新旧链表。该方法空间复杂度O(1),思路巧妙。 哈希表法使用哈希表存储新旧节点映射关系,分两步:1)创建所有新节点并记录映射;2)根据映射设置指针。虽然空间复杂度O(n),但思路直观,是处理复杂指针关系的通用方法。
2025-08-15 08:58:48
974
原创 队列的使用以及泛型思考[二叉树的层序遍历]
这篇文章讨论了LeetCode 102题二叉树的层序遍历解法。文章首先指出层序遍历类似于广度优先搜索(BFS),需要使用队列实现"先进先出"的特性。然后详细讲解了Java实现:使用队列存储节点,记录每层元素数量,分层处理节点值并存入结果列表。文章特别强调了泛型的使用,因为输出要求是List<List<Integer>>格式。最后提出"三步法"解题思路:1)识别问题类型;2)匹配数据结构与算法;3)构造结果格式。通过关键词映射表帮助读者快速匹配问
2025-08-14 08:49:34
549
原创 深入解析JVM内存管理与垃圾回收
JVM内存区域分为堆、栈、方法区和程序计数器。垃圾回收主要针对堆内存,通过可达性分析判断对象是否存活。Java采用分代回收策略:新生代使用复制算法,老年代采用标记整理。相比引用计数,可达性分析避免了循环引用问题但耗时更长。Rust通过编译器检查实现内存管理,无需运行时GC但语法复杂。JVM分代回收基于对象生命周期特点,将对象分为新生代(频繁回收)和老年代(较少回收),并采用不同回收算法提高效率。
2025-08-13 09:14:32
417
原创 归并思想[合并两个有序链表]
本文介绍了归并排序思想在链表排序中的应用。归并排序时间复杂度为O(nlogn),特别适合无法随机访问的链表结构。核心步骤包括:1)使用快慢指针找到中点并断开链表;2)递归拆分链表至最小单元;3)通过merge方法有序合并子链表。文章详细解析了找中点的快慢指针算法和合并两个有序链表的具体实现,并以LeetCode 148题为例,阐述了递归拆分的本质是将链表分解为原子单元(单个节点),再通过逐步合并构建有序链表的过程。这种"化整为零,聚零为整"的方法确保了链表的高效排序。
2025-08-13 08:51:10
1098
原创 二叉搜索树中第K小个元素
摘要:本文探讨了二叉搜索树中查找第K小元素的两种解法。最优解利用二叉搜索树的中序遍历特性(LDR),直接按升序访问节点,时间复杂度为O(K)。通用解法使用最大堆(优先级队列)保存K个最小元素,适用于普通二叉树,时间复杂度为O(NlogK)。文章强调了二叉搜索树"左<根<右"的特性是中序遍历有序的关键,并提供Java代码实现两种解法。
2025-08-12 09:13:07
317
原创 验证二叉搜索树
我的理解是,要掌握递归,首先要掌握两个关键点。LeetCode98:验证二叉搜索树。那什么时候适合用递归呢?如何找到递归的终止条件?常见的适用于递归的场景。
2025-08-11 22:59:56
400
原创 CAS操作
在面对ABA问题,CAS的基本思路是正确的,但是主要是修改操作能够进行反复横跳,就容易让咱们CAS的判定失效.CAS判定的是"值相同",实际上期望的是"值没有变化过"如果约定,值只能单向变化,那不就可以判断了吗?CAS的关键要点是比较寄存器1和内存的值,通过这里的值是否相等来判定内存的值是否发生了变化,如果内存的值变了,那么就存在其他线程对其进行了修改,如果内存的值没有变,那么就说明没有其他线程进行修改,接下来进行的修改就是安全的.这个对于编写线程安全的代码是非常重要的.我们为什么会有线程安全问题?
2024-07-03 13:30:10
395
原创 Thread 类及常见的用法
Thread 就是在Java中,线程的代言人.系统中的一个线程,就对应到Java中的一个Thread对象,围绕线程的各种操作,都是通过 Thread来展开的
2023-11-23 21:18:25
979
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅