自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AOP实战:自定义注解实现日志与耗时统计

本文系统讲解SpringBoot中AOP的应用,涵盖其核心概念、五种通知类型及切入点表达式。通过自定义注解实现日志记录与方法耗时统计两大实战案例,展示AOP如何优雅解决横切关注点问题。强调CGLIB代理机制、通知执行顺序及@Around必须调用proceed()等关键要点,推荐使用自定义注解提升逻辑控制粒度,实现代码解耦与可维护性提升。

2026-10-02 18:52:32 394 10

原创 Spring事务陷阱:@Transactional用错竟导致数据不一致?

事务的 ACID 特性是理解一切事务行为的基础。声明式事务借助 AOP 帮我们自动完成事务的开启、提交与回滚,是日常开发的首选。传播行为中,REQUIRED(默认,加入已有事务)和(独立新事务)最常用,二者在"一个方法调用另一个带事务的方法"时行为差异很大,务必分清。回滚规则默认只对 RuntimeException 和 Error 生效,受检异常需要显式配置才会回滚。事务失效。

2026-10-02 18:51:59 190 8

原创 Spring统一功能处理

统一返回结果Result:统一结构;统一异常处理,业务异常、参数校验异常、兜底异常分级处理;统一响应体包装自动包装返回值(注意 String 类型需手动转 JSON);请求日志拦截器统一记录路径与耗时。这套组合拳一旦搭好,团队里所有人的接口风格天然一致,前端对接成本大幅下降。下一篇我们将介绍 Spring AOP,用更优雅的方式实现日志、耗时统计等横切逻辑。

2026-09-28 15:13:14 265 6

原创 Mybatis-Plus:让CRUD快如闪电

本文介绍了Mybatis-Plus在SpringBoot中的快速上手应用,强调其作为Mybatis增强框架的核心优势:通过BaseMapper实现零SQL的通用CRUD,利用QueryWrapper与LambdaQueryWrapper链式拼接条件,结合分页插件简化复杂查询。文章从依赖引入、配置、实体映射到实战演示,完整展示了如何高效完成单表操作,显著提升开发效率,让开发者聚焦业务逻辑而非重复写SQL。

2026-09-28 15:12:20 425 1

原创 手把手打造SpringBoot图书管理系统

SpringBoot提供自动配置和内嵌服务器,一个就能跑起来;SpringMVC负责接收 HTTP 请求、解析参数、返回 JSON;IoC & DI通过@Service@Autowired让容器替我们管理对象和依赖;yml统一管理数据源和 Mybatis 配置;Mybatis用 Mapper 接口 + XML 完成持久化,#{}防注入、resultType自动映射;前端用单个index.html放在static/下,同源免跨域,fetch直接调后端完成增删改查。到这里,这个系列就全部写完了。

2026-09-25 17:19:42 181 12

原创 MyBatis进阶:动态SQL与高级映射全解析

本文系统讲解MyBatis进阶核心功能:通过动态SQL(if、where、foreach等标签)实现灵活条件拼接与批量操作;利用resultMap解决列名映射及一对一、一对多关联查询问题;结合注解开发提升简单CRUD效率;掌握一级(SqlSession级)与二级(SqlSessionFactory级)缓存机制,优化性能。内容由浅入深,助力开发者从“会用”迈向“用好”,为实战项目打下坚实基础。

2026-09-24 22:28:56 259 9

原创 MyBatis入门:从JDBC到自动映射

本文介绍了MyBatis如何解决JDBC开发中冗长繁琐的问题,通过SQL映射实现Java对象与数据库的自动转换。从环境搭建、全局配置、Mapper接口与XML映射文件的编写,到CRUD操作及#{}与${}的区别,系统演示了MyBatis的快速入门流程。强调其核心优势:减少样板代码、提升开发效率,并提醒事务需手动提交、优先使用#{}防注入。为后续深入学习动态SQL和ResultMap奠定基础。

2026-09-23 12:28:37 327 10

原创 YAML配置详解:SpringBoot实战指南

本文系统讲解SpringBoot配置文件,重点解析YAML语法:缩进表示层级、冒号后需空格,支持字面量、对象、数组等结构。对比properties与yml优劣,明确配置加载优先级,介绍@Value、@ConfigurationProperties和Environment三种读取方式,并详解多环境配置(Profile)实战用法。掌握后可灵活管理开发、测试、生产环境,为后续Mybatis学习奠定基础。核心:YML靠缩进,批量注入用@ConfigurationProperties,多环境通过profile切换。

2026-09-21 22:43:19 442 8

原创 Spring核心揭秘:IoC与DI如何让对象“自动出现”

IoC,全称,中文叫「控制反转」。「反转」反转的是什么呢?传统方式:对象自己new依赖对象,创建权在自己手里。IoC 方式:对象不再自己new,而是把创建权交给一个第三方容器,容器来负责创建、装配和管理对象。要用的时候,从容器里「拿」就行。用一个生活化的类比:以前你去餐厅吃饭,要自己买菜、洗菜、炒菜(自己 new 对象)。IoC 之后,你只需要点菜,由餐厅(容器)负责做菜并端给你,你只管「吃」(使用对象)。所以,IoC 的本质就是:把「创建对象的控制权」从程序员手里反转给了 Spring 容器。

2026-09-20 22:52:25 99 4

原创 SpringMVC核心流程与实战入门

SpringMVC 是 Spring 家族的一员,全称,是一个基于MVC 设计模式的 Web 框架。层全称职责MModel(模型)承载业务数据VView(视图)负责页面展示CController(控制器)接收请求、调用业务、返回结果请求 → Controller(控制器)处理 → 组装 Model 数据 → 交给 View 渲染 → 响应返回给用户。在前后端分离流行的今天,Controller 通常不再返回 View 页面,而是直接返回 JSON 数据(

2026-09-20 13:28:55 261 4

原创 SpringBoot入门:一键搞定HelloWorld!!

本文系统介绍SpringBoot的核心理念与入门实践:作为基于Spring的“脚手架”框架,它通过起步依赖、自动配置和内嵌服务器,实现“开箱即用”。文章以HelloWorld项目为例,演示如何快速创建SpringBoot应用,解析@SpringBootApplication注解机制,揭示自动配置原理,并展示可执行Jar包的部署优势。全篇聚焦“是什么、为什么、怎么用”,为后续学习奠定坚实基础。

2026-09-18 22:57:36 211 7

原创 前端三件套基础之JS!!!!

第一期也给大家提过JS相当于前端的行为,动作灵魂,是一个脚本语言,, 解释型或即时编译型的编程语⾔,我个人认为JS和Java这些还是很像的都要变量,方法这些东西虽然是作为开发web界面的脚本语言而出名但是也被用于许多非浏览器环境里面。JS是网景公司发布的最开始不叫JS但因为当时Java太火了所以为了蹭热度就命名为了为 JavaScript,但这两个之间区别还是很大。三、JS的引入方式那么在讲JS的基础语法之前先来说一下引入方式和CSS一样都有三种引入方式,分别是行内样式,内部样式,外部样式。

2026-09-06 22:47:45 746 15

原创 前端三件套之CSS!!!!

行内样式

2026-09-05 23:01:49 334 4

原创 必看前端三件套基础之HTTP!!!!

这期博客简单带大家入门了网页开发的核心基础——HTML超文本标记语言,也结合我自身后端学习的视角,梳理了网页开发三件套的核心逻辑与区别。我们先用通俗的比喻理清了HTML、CSS、JS三者的关系,HTML作为网页的骨架,搭建起整个页面的基础结构,是网页展示与功能实现的核心根基,这也是我们前端学习的第一步。在本次学习中,我们系统认识了HTML的基础架构,掌握了html、head、body、title等核心根标签的层级关系,也学会了VS Code快速生成HTML骨架的实用快捷键。

2026-08-30 21:54:27 256 7

原创 深入解析wait与notify及多线程实战案例

本文系统讲解了Java多线程进阶知识,包括:1. wait/notify线程通信机制原理及使用规则;2. 单例模式的饿汉式(线程安全)和懒汉式(DCL双重校验实现);3. 阻塞队列原理及生产者-消费者模型实现;4. 线程池的七大参数配置、四种拒绝策略和工厂模式应用,对比分析了Executors工具类的四种线程池及潜在风险;5. 定时器实现原理与模拟实现。通过底层原理剖析和手动编码实现,深入讲解了多线程协作、资源管理、任务调度等核心概念,强调生产环境中应使用ThreadPoolExecutor

2026-06-05 09:55:56 416 24

原创 多线程安全:从原子性到锁机制

本文探讨了多线程编程中的线程安全问题及其解决方案。通过一个count++的案例,分析了线程不安全的原因:非原子性操作、内存可见性和指令重排序。重点介绍了synchronized关键字,它能通过互斥锁机制保证代码原子性,并具有可重入特性,但需注意避免死锁问题。同时讲解了volatile关键字,它只能保证可见性和部分有序性,不能确保原子性操作。文章还列举了Java标准库中线程安全与不安全的类,建议根据实际需求选择合适的技术方案以确保线程安全。

2026-05-28 22:39:32 332 15

原创 Java线程——从创建第一个线程到休眠线程

本文介绍了Java线程的基础操作,包括四种创建线程的方式(继承Thread类、实现Runnable接口、匿名内部类、Lambda表达式),重点推荐使用Lambda表达式创建线程。详细讲解了线程中断机制(interrupt()、isInterrupted()、interrupted()方法),强调线程中断是发送信号而非强制终止。此外还介绍了线程等待(join方法)和线程休眠(sleep方法)的使用场景及注意事项。文章通过代码示例演示了各种线程操作的实际应用,帮助读者掌握Java多线程编程的基础知识。

2026-05-20 22:20:35 551 16

原创 带你明白进程与线程的基础

每个进程一被创建,操作系统就会自动给它生成一个专属的PCB,里面记录着这个进程的所有关键信息,比如进程的ID(相当于进程的身份证)、进程当前的状态(正在运行、等待中)、进程的优先级、用到的内存地址、打开的文件等等。第三,管理虚拟内存。而 PCB 作为进程控制块,相当于进程的身份证和档案,是操作系统识别和管理进程的核心依托。前面我们说过,进程之间是相互隔离的,每个进程都有自己独立的内存空间,默认情况下,谁也不能直接访问谁的数据——就像两个独立的房间,门是锁着的,里面的人不能互相串门。

2026-05-13 23:05:35 410 16

原创 MYSQL的视图

MySQL视图是一种虚拟表,它基于SQL查询语句创建,本身不存储数据,只保存查询逻辑。创建视图使用CREATE VIEW 视图名 AS 查询语句语法,可简化复杂查询、隐藏敏感字段。视图可像普通表一样查询,但修改数据有限制(仅适用于单表简单视图)。删除视图用DROP VIEW命令,不影响底层数据。视图的主要优点包括:简化重复查询、保护数据安全、统一查询逻辑和降低使用门槛。视图是MySQL开发中提高效率的重要工具,特别适合需要重复使用相同查询的场景。

2026-05-07 22:52:41 1069 10

原创 MYSQL的索引与事务

MySQL的索引是⼀种数据结构,它可以帮助数据库⾼效地查询、更新数据表中的数据。索引通过 ⼀定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。MySQL 索引类似于书籍的⽬录,通过指向数据⾏的位置,可以快速定位和访问表中的数据,⽐如 汉语字典的⽬录(索引)⻚,我们可以按笔画、偏旁部⾸、拼⾳等排序的⽬录(索引)快速查找到需要的字。聊完索引,再来说事务,事务其实就是“一组不可分割的数据库操作”,要么这组操作全部执行成功,要么全部执行失败,不会出现“一部分成功、一部分失败”的情况。

2026-05-07 22:51:44 689 24

原创 超高校级的CURD进阶版!

本文介绍了SQL进阶查询的核心内容,主要包括:1. 约束类型:NULL约束、唯一约束、主键约束、默认约束和外键约束,重点讲解了外键约束的实现原理和使用场景。2. 聚合查询:详细说明COUNT、SUM、AVG、MAX、MIN五个聚合函数,以及GROUP BY分组和HAVING过滤的用法。3. 联合查询:深入解析内连接、外连接(左/右连接)、自连接等多表查询方式,通过实例展示不同连接方式的区别。4. 子查询和合并查询:介绍嵌套查询的实现方法和UNION合并查询的使用技巧。全文通过具体语法示例和实际应用场景,系统

2026-04-26 15:51:39 369 18

原创 超高校级的CRUD基础!!!!

本文介绍了MySQL数据库中最基础的增删查改操作(CRUD)。主要内容包括:新增数据(INSERT)的单行和多行插入方式;查询数据(SELECT)的基本语法及其扩展功能(去重DISTINCT、排序ORDER BY、条件查询WHERE、分页LIMIT);修改数据(UPDATE)的单行和批量修改方法;删除数据(DELETE)的注意事项。文章强调查询操作是最重要且常用的功能,同时提醒修改和删除操作必须添加WHERE条件以避免误操作。这些基础操作是学习MySQL进阶内容的重要基础,通过实际练习即可快速掌握。

2026-04-23 00:01:47 429 14

原创 关于MySql安装与可视化工具推荐

MySQL安装与可视化工具使用指南 本文详细介绍了MySQL 8.0的完整安装流程,包括下载官方安装包、配置步骤及常见问题解决方法。针对新手用户,重点推荐了两款可视化工具:官方出品的MySQL Workbench 8.0 CE功能全面但启动较慢,适合系统学习;轻量级的Navicat Lite操作简单界面美观,适合快速上手。文章对比了两款工具在启动速度、界面操作和功能丰富度等方面的差异,建议初学者根据实际需求选择:需要系统学习选Workbench,追求效率选Navicat Lite。最后提供了数据库基础操作

2026-04-17 22:43:47 773 18

原创 超高校级讲解的Map and Set!

本文详细讲解了Java集合框架中的Map和Set数据结构。Map采用Key-Val模型存储键值对,实现类包括HashMap(哈希表+开散列)和TreeMap(红黑树);Set基于Map实现,只存储key,对应HashSet和TreeSet。重点解析了哈希冲突的解决方案:闭散列(开放定址法)和开散列(链地址法),后者是HashMap的实际实现方式,通过数组+链表/红黑树结构处理冲突。文章还包含负载因子、扩容机制等核心概念,并提供了TreeMap/HashMap的使用案例和简易实现代码。最后总结了Map和Set

2026-04-14 00:34:48 446 8

原创 七大排序一次满足

本文系统讲解了七大经典排序算法,包括冒泡排序、插入排序、希尔排序、选择排序、堆排序、快速排序和归并排序。每种算法都详细阐述了核心思想、实现逻辑和代码示例,并分析了时间复杂度、空间复杂度和稳定性等关键特性。文章特别强调了不同排序算法的适用场景:基础排序适合小数据量,希尔排序适合中等规模数据,而堆排序、快速排序和归并排序则在大数据量时效率更高。最后通过对比表格直观展示了各算法的性能差异,帮助读者根据实际需求选择合适的排序方法。掌握这些排序算法不仅能提升编程能力,也是理解算法设计思想的重要基础。

2026-04-10 00:52:23 771 13

原创 堆的两个应用 超级重要 必了解!!

本文讲解了堆的两个重要应用:Top-K问题和堆排序。Top-K问题通过维护大小固定为K的堆来高效筛选极值元素,找最大K个数用小根堆,找最小K个数用大根堆,避免全局排序的开销。堆排序则通过建堆和反复调整实现高效排序,升序用大根堆,降序用小根堆,时间复杂度稳定在O(nlogn)且空间复杂度为O(1)。这两种方法都充分利用了堆快速获取极值的特性,在推荐系统、海量数据处理等场景中非常实用。文章详细介绍了算法思路和代码实现,强调理解核心逻辑比死记硬背更重要。

2026-04-08 22:57:05 380 17

原创 优先级队列——堆

本文系统讲解了优先级队列与堆的实现原理及应用。优先级队列不同于普通队列的先进先出规则,而是根据元素优先级决定出队顺序,其底层通常用堆结构实现。堆作为完全二叉树,分为大根堆(根节点最大)和小根堆(根节点最小),通过向上调整(插入时)和向下调整(删除时)维护堆结构。文章详细剖析了堆的创建、插入删除操作的核心逻辑,并提供了Java中PriorityQueue的使用方法,包括自定义对象比较、大小根堆转换等实战技巧。最后强调堆结构在TopK问题、任务调度等场景的核心价值,指出深入理解原理才能灵活应用于实际开发。

2026-04-08 00:00:08 854 16

原创 二叉树的基本操作

本文介绍了二叉树的基本操作与遍历方法。首先通过孩子表示法创建二叉树节点类,然后详细讲解了四种遍历方式:递归实现的前序、中序、后序遍历,以及使用队列的层序遍历。接着实现了二叉树的六大基本操作:获取节点总数、叶子节点数、第k层节点数、树高度、查找指定值节点和判断完全二叉树。这些操作大多采用递归实现,其中判断完全二叉树延续了层序遍历的队列思路。文章从基础到进阶层层递进,涵盖了二叉树入门必须掌握的核心内容,为后续更复杂的二叉树运算打下基础。

2026-04-03 09:57:33 428 12

原创 二叉树入门必看二叉树基础

本文系统介绍了二叉树的基本概念与性质。首先定义二叉树作为特殊的树形结构,每个节点最多有两个子节点。重点阐述了核心术语(根节点、叶子节点等)和通用公式(如第i层最多2^(i-1)个节点)。详细区分了完全二叉树和满二叉树的特征与专用公式,并总结了三类二叉树的性质差异。最后对比了孩子表示法和孩子双亲表示法两种存储方式,通过代码示例展示实现方法。本文为学习更复杂的树形结构奠定了基础,后续将基于孩子表示法讲解二叉树的基本操作。

2026-04-01 22:50:30 462 8

原创 双指针入门必看!吃透力扣26/27题,从O(n²)优化到O(n)的核心技巧

一篇博客带你了解双指针!!!!

2026-03-30 22:19:20 409 11

原创 数据结构之队列(Queue)

总而言之栈和队列是十分相似的,我们在记忆的时候可以把两个放在一起记忆,但也千万不能忘记了,Queue是一个接口要用LikedList来实现,这也是新手常犯的错误。接口就是个“空架子”,自己不能直接new出来用,就像你不能拿着“手机”的概念直接打电话一样,得有具体的实现类才行。咱们写代码的时候,最常用的就是LinkedList,用LinkedList去实现Queue,才能正常用它的入队、出队功能,很多新手一上来就写new Queue(),直接报错,血的教训,一定要记牢!

2026-03-30 00:11:20 613 8

原创 数据结构之栈

一篇博客带你彻底解决栈的疑问以及题目解析

2026-03-27 22:09:26 402 6

原创 链表从入门到精通

一篇博客带你彻底搞懂什么是单向链表什么是双向链表以及和顺序表的区别是什么?

2026-03-24 23:27:59 390 7

原创 顺序表实现杨辉三角

本文介绍了使用Java中的ArrayList实现杨辉三角的方法。通过创建二维顺序表List<List<Integer>>存储结果,首先生成第一行[1],然后循环生成后续行:每行首尾元素为1,中间元素由上一行相邻两数相加得到。重点讲解了ArrayList的动态扩容和随机访问特性在实现中的优势,以及二维顺序表的嵌套使用方式。最终给出了完整的可运行代码,该方案能正确处理边界条件(如行数为0时返回空列表),并符合杨辉三角的数学规律。

2026-03-19 23:09:45 191 7

原创 数据结构之顺序表

一篇博客带你搞懂Array List的使用和模拟实现以及各种注意事项

2026-03-19 22:22:05 547 2

原创 时间复杂度和空间复杂度

一篇博客带你搞懂时间复杂度和空间复杂度

2026-03-17 23:52:22 432 3

原创 Java的异常

什么是Java的异常?异常要怎么处理?throw和throws有什么区别?一篇文章带你搞懂

2026-03-13 13:14:22 502 5

原创 Sring类的介绍

本文介绍了Java中的String类及其相关操作。首先讲解了String对象的三种创建方式,然后重点比较了equals()和compareTo()两种字符串比较方法。接着详细说明了字符串查找、替换、拆分等常见操作的方法使用及注意事项。针对String不可变特性,介绍了StringBuilder和StringBuffer这两个可变字符串类,特别说明了append()方法的高效性。最后对比了三者的区别:String是不可变类,线程安全但性能较低;StringBuilder非线程安全但性能最优

2026-03-13 00:10:46 422 2

原创 深拷贝与浅拷贝

浅拷贝和深拷贝是上面? 浅拷贝有什么用?深拷贝就一定更好吗?一篇文章给你讲清楚

2026-03-08 23:32:16 263 4

原创 Java之抽象类和接口

接口和抽象类一篇文章给你讲清楚他们的用法和区别

2026-03-06 22:21:35 412 1

空空如也

空空如也

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

TA关注的人

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