自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring 事务和事务传播机制

本文介绍了Spring事务的基本概念和实现方式。主要内容包括:1) 事务的定义和MySQL事务操作语法;2) Spring事务的两种实现方式:编程式事务和声明式事务;3) 重点讲解了声明式事务@Transactional注解的使用方法、作用范围和注意事项;4) 详细解析了@Transactional的三个重要属性:rollbackFor异常回滚规则、Isolation隔离级别和propagation传播机制。文章通过代码示例展示了事务的正确使用方式,并特别强调了异常处理对事务回滚的影响,提供了手动回滚事务的

2025-09-11 21:20:26 973 4

原创 Spring AOP

Aspect Oriented Programming(面向切面编程)什么是面向切面编程呢?切面就是指某一类特定问题,所以AOP也可以理解为面向特定方法编程什么是面向特定方法编程呢?比如上个章节学习的"登录校验",就是一类特定问题。登录校验拦截器,就是对"登录校验"这类问题的统一处理。所以,拦截器也是AOP的一种应用。AOP是一种思想,拦截器是AOP思想的一种实现。Spring框架实现了这种思想,提供了拦截器技术的相关接口同样的,统一数据返回格式和统一异常处理,也是AOP思想的一种实现。

2025-09-11 10:22:24 761 2

原创 Spring 统一功能处理

本文介绍了Spring框架中的统一功能处理,主要包括拦截器和统一数据返回格式两部分内容。在拦截器部分,详细讲解了拦截器的定义、使用方法、路径配置和执行流程,通过实现HandlerInterceptor接口可以实现在请求前后执行自定义逻辑。在统一数据返回格式部分,介绍了如何通过ResponseBodyAdvice接口和@ControllerAdvice注解实现后端数据的统一封装。文章还简要介绍了适配器模式及其在SLF4J中的应用,展示了如何通过适配器模式使不兼容的接口协同工作。这些技术为Spring应用开发提

2025-09-10 13:02:41 859 2

原创 MyBatis操作数据库——进阶

本文介绍了MyBatis中动态SQL的使用方法,包括if、trim、where、set、foreach和include标签。if标签用于条件判断;trim标签可灵活处理SQL前缀后缀;where标签智能处理WHERE条件;set标签动态更新字段;foreach标签遍历集合;include标签实现SQL片段复用。这些标签能有效简化复杂SQL的编写,提高开发效率。

2025-09-09 20:18:09 974 3

原创 MyBatis操作数据库——入门

摘要 本文介绍了MyBatis持久层框架的基础知识及入门操作。MyBatis是简化JDBC开发的优秀框架,支持通过注解或XML编写SQL语句。文章详细讲解了环境搭建步骤,包括创建SpringBoot项目、配置数据库连接信息、设置日志输出等。重点阐述了查询和增加操作,涉及动态参数传递、结果映射方式和主键返回功能。针对数据库字段与Java对象属性名不一致的问题,提供了起别名、结果映射和开启驼峰命名三种解决方案。最后介绍了@Param注解的使用和获取自增主键的方法。

2025-09-09 15:31:20 1116 4

原创 SpringMVC 程序开发

SpringMVC开发简介 SpringMVC是基于Servlet API构建的Web框架,实现了MVC架构模式。它通过将系统分为模型(Model)、视图(View)和控制器(Controller)三部分来组织代码结构。SpringMVC的学习重点包括:连接功能(通过@RequestMapping实现URL映射)、参数获取功能和数据输出功能。 核心注解@RequestMapping用于将Web请求映射到处理方法,可修饰类和方法,支持GET/POST请求方式。参数获取支持单个参数、对象、表单参数等多种形式,并

2025-09-08 20:48:29 824 6

原创 Spring 日志文件

Spring 日志使用指南 日志是程序开发中必不可少的组成部分,主要用于排查问题、记录操作和优化性能。Spring Boot默认使用SLF4J+Logback日志框架组合,开发者可以通过LoggerFactory获取日志对象并输出不同级别的日志(trace/debug/info/warn/error)。 日志持久化可通过配置logging.file.path或logging.file.name实现,将日志保存到指定文件。使用Lombok的@Slf4j注解可以简化日志对象的获取。合理的日志级别设置和持久化存储

2025-09-07 13:18:57 918 3

原创 SpringBoot配置文件

Spring Boot支持.properties和.yml两种配置文件格式。.properties采用键值对格式,优先级更高但可读性较差;.yml采用树形缩进结构,可读性更好且支持跨语言。两者各有特点,实际开发中建议统一使用一种格式。读取配置可通过@Value注解或@ConfigurationProperties批量绑定。yml更适合管理复杂配置,而.properties更适合简单场景。

2025-09-06 17:10:04 922 4

原创 Bean作用域和生命周期

本文介绍了Spring框架中Bean的作用域和生命周期。Bean的作用域包括6种:singleton(默认单例)、prototype(每次请求新实例)、request、session、application和websocket(后四种基于Spring MVC)。通过案例展示了单例作用域下修改Bean导致的问题,说明了作用域选择的重要性。 Bean生命周期分为5个阶段:1)实例化分配内存;2)设置属性依赖注入;3)初始化(Aware接口、@PostConstruct、init-method等);4)使用Bea

2025-09-05 21:02:58 1023 3

原创 Spring简单的读取和存储对象

本文介绍了Spring框架中通过注解存储和读取对象的方法。主要讲解了两类注解:类注解(@Controller、@Service、@Repository、@Component、@Configuration)和方法注解(@Bean)。类注解用于标识不同层次的组件,方法注解则需搭配类注解使用才能生效。文章还演示了如何通过@Bean的name属性给Bean重命名,并说明了类注解之间的继承关系。这些注解简化了Spring中对象的存储和获取过程,使开发更加高效。

2025-09-04 21:25:20 992 4

原创 Spring的创建和使用

摘要 本文介绍了Spring项目的创建与Bean对象的使用方法。创建Spring项目分为三步:创建Maven项目、添加Spring框架支持(spring-context、spring-beans)和添加启动类。存储Bean对象可通过三种方式:1)基于注解(@Component等),2)基于XML配置文件(<bean>标签),3)基于Java配置类(@Configuration+@Bean)。使用Bean时,可通过ApplicationContext直接获取(getBean()方法)或依赖注入(@

2025-09-04 09:07:25 1074 3

原创 Spring 基础概念

Spring核心概念摘要 Spring是一个开源的IoC(控制反转)容器框架,通过将对象的创建、依赖管理控制权从开发者转移到容器,实现解耦。传统开发中开发者需主动创建对象(如new操作),而Spring通过配置声明依赖关系,由容器自动注入(如@Autowired)。这种控制反转带来了代码低耦合、高扩展性、易测试等优势。Spring同时具备存储和获取对象的能力,其DI(依赖注入)是IoC的具体实现方式,两者本质相同但视角不同。简言之,Spring作为IoC容器,通过DI机制管理对象生命周期,使Java企业级开

2025-09-03 15:14:47 523 2

原创 JVM——Java虚拟机学习

JVM核心知识点摘要 内存区域划分 方法区/元数据区:存储类对象 堆:存储new创建的对象(最大区域) 栈:存储方法调用关系(每个线程私有) 程序计数器:存储下条指令地址 类加载过程 加载:查找.class文件 验证:检查文件格式 准备:分配内存空间 解析:处理字符串常量 初始化:设置静态成员 双亲委派模型 类加载器层级:BootStrap → Extension → Application 确保标准库优先加载 可被自定义类加载器打破 垃圾回收 主要回收堆内存对象 引用计数法(Java不采用) 可达性分析法

2025-09-03 09:38:32 874

原创 网络原理——HTTP/HTTPS

摘要: HTTP/HTTPS是应用层协议,采用“一问一答”模型。HTTP请求包含URL(协议、地址、路径等)、方法(GET/POST等)和头部信息(如Host、Content-Type)。GET与POST在数据传递方式、安全性(需加密)及幂等性上存在差异。HTTP响应包含状态码(如200成功、404未找到)和响应头(如Content-Type),正文格式由Content-Type决定(如HTML/JSON)。HTTPS通过加密提升安全性。Cookie用于本地存储数据,随请求自动发送至服务器。

2025-09-02 11:06:51 2794 9

原创 网络原理——TCP/UDP/IP

摘要: 本文详细介绍了TCP/IP协议栈的核心概念,重点讲解了传输层的TCP和UDP协议。内容涵盖:端口号的作用与分类、UDP协议格式及其校验机制(CRC和MD5算法)、基于UDP的常见应用层协议。对TCP协议的解析更为深入,包括报文格式、确认应答机制、数据重传策略,以及连接管理中的三次握手和四次挥手过程。特别分析了TCP可靠传输的实现原理,如序号机制、超时重传等,并探讨了连接建立与断开时的状态变化和网络异常处理。最后通过示意图直观展示了TCP连接的生命周期。

2025-09-01 07:58:57 2156 4

原创 网络编程套接字

网络编程基础与套接字应用 本文系统介绍了网络编程的核心概念和技术实现,重点讲解了Socket套接字在Java中的应用。主要内容包括: 网络编程基础:解释了网络编程的必要性,即通过网络传输获取丰富资源,并明确了网络编程的本质是不同主机进程间的通信。 关键概念:详细阐述了发送端/接收端、请求/响应、客户端/服务端等基本概念及其相互关系,通过图示展示了典型的数据传输流程。 Socket套接字:将其分为基于TCP协议的流套接字和基于UDP协议的数据报套接字,对比了两者在连接方式、可靠性、传输特性等方面的差异。 Ja

2025-08-29 19:55:59 1111 1

原创 网络原理——初识

网络原理基础摘要 本文介绍了计算机网络的基本概念与发展历程。从独立模式到网络互连,详细阐述了局域网(LAN)和广域网(WAN)的区别与联系。核心内容包括: 网络通信基础:五元组标识网络通信,IP地址定位主机,端口号标识进程 协议的核心作用:规定数据传输格式,确保不同厂商设备兼容通信 网络分层模型: OSI七层模型(理论框架) 实际应用的TCP/IP五层模型(应用层、传输层、网络层、数据链路层、物理层) 文章还解释了数据在传输过程中的封装与分用机制,以及不同网络设备(主机、路由器、交换机)在各协议层中的实现差

2025-08-29 08:56:45 813 3

原创 文件操作和IO

本文介绍了文件系统的基本概念和Java中的文件操作。主要内容包括:文件与目录的定义、树型组织结构、绝对路径与相对路径的区别。在Java部分,重点讲解了File类的属性和方法,展示了如何创建、删除文件以及获取文件信息。通过代码示例演示了get系列方法的特点差异,以及普通文件的创建删除过程。文章还补充了文件类型、权限、快捷方式等操作系统相关知识。

2025-08-28 15:03:52 833 3

原创 多线程——进阶

多线程锁策略与CAS机制 本文系统介绍了多线程编程中的常见锁策略及CAS机制。首先分析了乐观锁与悲观锁的区别,指出synchronized会根据冲突频率在两者间转换。接着比较了重量级锁和轻量级锁的实现原理,以及自旋锁与挂起等待锁的特点。文章还探讨了公平锁、可重入锁、读写锁等不同锁策略的适用场景和实现方式。 CAS(Compare and Swap)部分详细讲解了这一无锁编程核心机制,包括其伪代码实现、硬件支持原理、优缺点分析。特别介绍了CAS在原子类和自旋锁中的典型应用,并通过示例代码说明实现细节。最后指出

2025-08-27 23:02:59 731 2

原创 多线程——初阶

本文介绍了Java多线程编程的基础概念和方法。主要内容包括:线程的基本概念及其与进程的区别;Java线程与操作系统线程的关系;五种创建线程的方式(继承Thread类、实现Runnable接口、匿名内部类和Lambda表达式);Thread类的常用构造方法和属性;线程启动(start)、中断(isInterrupted/interrupted)等核心方法。重点讲解了如何通过标志位和内置方法实现线程中断控制,并比较了不同创建线程方式的优缺点。文章为Java多线程编程提供了清晰的入门指导。

2025-08-26 12:36:21 333 1

原创 数据库基础——索引事务和JDBC编程

JDBC是 Java 语言用于连接和操作数据库的标准 API,它为 Java 程序提供了一套统一的接口,用于与各种关系型数据库进行交互,这个API由java.sql和javax.sql包中的一些类和接口组成。JDBC为多种关系型的数据库提供了统一的访问方式,作为特定的厂商数据库访问API的一种高级抽象,主要包含一些通用的接口类。最大的作用就是对查询进行优化,可以用于快速定位和检索数据,对提高数据库的性能有很大帮助。反之,如果非条件查询,或者经常需要插入和修改操作,以及磁盘空间不足时,不考虑创建索引。

2025-08-13 09:00:32 898 2

原创 MySQl基础——增删改查进阶

运算符逻辑适用场景IN字段值在子查询结果集中筛选 “属于某类” 的数据NOT IN字段值不在子查询结果集中筛选 “不属于某类” 的数据。

2025-08-12 13:10:29 936 1

原创 数据库基础——库和表的操作

想要操作数据库中的表,需要先使用该数据库。8 -1) -1 到 2^(类型字节数。desc + 表名;

2025-08-11 16:07:50 1125

原创 反射、枚举以及lambda表达式

在Java中,反射(Reflection)是指程序在运行时可以访问、检测和修改自身结构及行为的能力。简单来说,就是程序能够“看透”自己的类结构,知道类中有哪些方法、字段、构造器等,并能动态调用它们,而不需要在编译期就确定这些信息枚举的背景在早期Java版本中,开发者通常使用常量类(如类型不安全:常量本质是整数,可能传入无效值(如用5表示不存在的季节)可读性差:调试时看到的是数字(如1),而非直观的含义(如“春天”)缺乏约束:无法限制传入值的范围,需手动校验为解决这些问题,JDK 1.5引入了。

2025-08-10 19:27:24 861 1

原创 Map和Set

二叉搜索树的查找操作利用其 “左小右大” 的有序性,通过不断缩小查找范围实现高效搜索。

2025-08-06 12:45:25 770

原创 常见排序的学习

插入排序是一种简单直观的比较排序算法,其基本思想类似于我们在整理扑克牌时,将新拿到的牌插入到手中已有牌的合适位置,使手中的牌始终保持有序。以下是关于插入排序的详细介绍:算法原理插入排序将待排序的数组分为已排序区间和未排序区间两部分。初始时,已排序区间只有数组的第一个元素,其余元素都在未排序区间。算法从第二个元素开始,依次将未排序区间的元素插入到已排序区间的合适位置,使得已排序区间不断扩大,直到未排序区间为空,此时整个数组就完成了排序。具体步骤从数组的第二个元素(索引为1)开始,将其视为待插入元素。

2025-08-05 15:09:30 1020 1

原创 java对象的比较

中插入对象时,需要确保对象所属的类能够进行比较,这样才能确定对象在优先队列中的优先级顺序。,即优先级相同的元素,其出队顺序不保证与入队顺序一致(底层基于堆结构实现,优先级相同的元素位置由堆的调整逻辑决定)。(定制排序时)实现,每次插入/删除元素时会通过比较器调整堆结构,确保队首元素始终是优先级最高的。实际使用时,需根据元素是否有默认排序逻辑、是否需要灵活调整排序规则,选择合适的比较方式。比较的是对象的引用(即内存地址),而不是对象的内容。在 Java 中,对象的比较需要通过特定的方式来实现,因为直接使用。

2025-08-04 14:54:09 789

原创 优先级队列(堆)

是 Java 集合框架中基于优先级堆实现的特殊队列,其核心特性与普通队列(如LinkedList优先级驱动的元素顺序非 FIFO 规则:普通队列遵循“先进先出(FIFO)”,而中元素的出队顺序由优先级决定,每次出队的是当前队列中优先级最高的元素。默认排序:默认按元素的自然顺序(从小到大)排序(即最小元素优先),本质是一个最小堆。自定义排序:可通过Comparator接口指定排序规则(如最大元素优先),灵活适配不同优先级需求。底层数据结构基于堆实现:底层使用动态数组模拟完全二叉树结构的堆。

2025-08-02 14:57:13 1083

原创 二叉树的学习

根目录是树的根节点,子目录和文件是其子孙节点,通过这种层级结构,用户可以方便地管理和访问文件,如路径。AST以树的形式表示代码的语法结构,每个节点代表代码中的一个语法单元(如表达式、语句、函数等)。树形结构是一种重要的非线性数据结构,它由节点(元素)和节点之间的关联关系(边)组成,整体呈现“分支”和“层次”特性,类似自然界中的树。这种结构既保留了树的层级特性,又因严格的子节点数量限制,便于实现高效的遍历和操作算法。是根节点,其他类作为其子节点或更深层的节点,这种结构体现了类之间的层级和继承关系。

2025-07-30 15:24:38 925 1

原创 栈和队列的学习

双端队列(Deque,全称 Double-Ended Queue)是一种允许在队列的两端(头部和尾部)都进行插入和删除操作的线性数据结构。循环队列是一种优化的数组实现队列,它解决了普通数组队列的"假溢出"问题(即队列尾部已满但头部仍有空余空间的情况)。下面分别提供基于数组和链表的两种栈实现方式,包含栈的核心操作(入栈、出栈、查看栈顶元素等)的线性数据结构,它只允许在一端进行插入操作,在另一端进行删除操作,就像日常生活中排队等待服务的场景(如银行排队、超市结账)。的原则,即最后放入的元素最先被取出。

2025-07-28 15:08:29 733

原创 LinkedList与链表

LinkedList 是 Java 集合框架中一个重要的实现类,基于双向链表数据结构实现,继承自 AbstractSequentialList 并实现了 List、Deque 等接口。它不仅可以作为普通链表使用,还能当作队列(Queue)、双端队列(Deque)或栈(Stack)使用,功能十分灵活注意⚠️:1.LinkedList实现了List接口2.LinkedList底层使用了双向链表3.LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问。

2025-07-25 21:24:06 1145

原创 ArrayList与顺序表

在 Java 中,List 是集合框架(java.util 包)中的一个接口,它继承自 Collection 接口,用于存储有序、可重复的元素集合List 的核心特点:1.有序性:元素有明确的位置(索引),可以通过索引访问(类似数组)2.可重复性:允许存储重复的元素(可以有多个相同的值)3.动态大小:与数组不同,List 的大小可以动态增长或收缩站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型的元素的有限序列,在该序列上可以执行增删改查以及变量操作方法声明功能描述示例。

2025-07-22 11:49:19 1121

原创 包装类&简单了解泛型

泛型(Generics)是 Java 中一种参数化类型的机制,它允许在定义类、接口和方法时使用类型参数,而不是具体的数据类型。这些类型参数可以在使用时被具体的类型(如String、Integer等)替换,从而实现 “一套代码适配多种数据类型” 的效果。

2025-07-21 16:04:45 599

原创 时间和空间复杂度

时间复杂度关注的是算法执行基本操作次数与输入规模(通常用n表示)之间的关系,而非实际运行时间(实际时间受硬件、编程语言等因素影响)。它的本质是:当输入规模n趋近于无穷大时,算法执行步骤的增长趋势。空间复杂度是衡量算法在执行过程中所需额外存储空间与输入规模n之间关系的指标,同样使用大 O 符号(O(f(n)))表示。时间复杂度通常用大 O 符号表示,形式为O(f(n)),其中f(n)是输入规模n的函数,用于描述增长趋势。3.若最高项系数不是1,则去除与这个参数相乘的常数(对应的系数变为1)

2025-07-21 15:09:50 353

原创 异常的学习

在 Java 中,自定义异常类可以帮助我们更精确地描述业务场景中的错误,使异常信息更具可读性和针对性。自定义异常通常继承自Exception(受检异常)或RuntimeException(非受检异常)// 1. 自定义受检异常(继承Exception)// 构造方法,接收异常信息// 可以添加自定义方法System.out.println("资金不足异常: " + getMessage());// 2. 自定义非受检异常(继承RuntimeException)// 带异常信息的构造方法。

2025-07-20 09:25:57 752 1

原创 String类

它是连接各种功能模块的 “纽带”从上述例子可以看出:String 和 StringBuilder 最大的区别在于 String 的内容无法修改,而 StringBuilder 的内容可以修改,频繁修改字符串的情况考虑使用 StringBuilder。由于 Java 中String是不可变的(内容创建后无法修改),所谓的 “字符串修改” 实际上是通过创建新字符串对象或使用可变字符串类来实现的。常量池中的字符串复用可能导致==“看似正确”(如s1 == s2),但这是内存优化的结果,并非比较内容的正确方式。

2025-07-19 11:06:03 2177 1

原创 抽象类和接口

在 Java 中,接口(Interface) 是一种完全抽象的类型,它定义了一组方法的规范(只有方法声明,无具体实现),用于约束类必须实现的行为,是实现多态和代码解耦的重要工具。在 Java 中,一个类可以通过implements关键字同时实现多个接口,这种 “多接口实现” 机制弥补了 Java 单继承的局限性,让类能够拥有多种不同的功能特性。在 Java 中,接口之间可以通过extends关键字实现继承,而且一个接口可以同时继承多个接口,这与类的单继承机制不同,是接口灵活性的重要体现。

2025-07-18 09:36:11 737 1

原创 继承与多态

在 Java 中,方法的重写(Override) 是指子类定义一个与父类方法名、参数列表、返回值类型完全相同的方法,用以覆盖父类方法的实现,体现子类的特有逻辑。如果父类也没有,则编译报错。在 Java 中,super关键字用于访问父类的成员(变量或方法) 或调用父类的构造方法,主要解决子类与父类成员同名时的访问冲突,以及初始化父类数据的问题。在 Java 中,子类的构造方法有一些特殊规则,主要与父类构造方法的调用相关,核心原则是:子类构造方法必须先调用父类的构造方法,以确保父类成员被正确初始化。

2025-07-17 08:34:53 839 1

原创 认识类与对象

Java是一门纯面向对象的语言,在面向对象的世界里,一切皆为对象,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情,用面向对象的思想来设计程序,更加符合人们对事物的认知,对于大型程序的设计和扩展以及维护都非常的友好类是用来对一个实体对象进行描述的,主要描述该对象具有哪些属性和哪些功能[访问修饰符] [修饰符] class 类名{field;//字段或者成员变量method;//行为或者成员方法类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。

2025-07-16 09:43:38 689 2

原创 数组的定义与使用

数组(Array)是一种线性数据结构,它通过连续的内存空间存储相同类型的多个元素,并允许通过索引(Index,又称下标) 快速访问单个元素。

2025-07-14 10:13:27 703

空空如也

空空如也

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

TA关注的人

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