- 博客(40)
- 收藏
- 关注
原创 Spring事务操作全解析
当一个带有事务的方法,调用另一个也带有事务的方法时,事务该怎么传递、怎么合并、怎么新建,这就是事务传播行为。比如有两个方法A,B都被 @Transactional 修饰, A方法调用B方法 A方法运行时,会开启⼀个事务.当A调用B时,B方法本身也有事务,此时B方法运行时,是加入A的事务,还是创建⼀个新的事务呢?这个就涉及到了事务的传播机制.
2026-04-05 15:18:58
463
31
原创 Spring AOP
AOP是⼀种思想, 它的实现方法法有很多, 有Spring AOP,也有AspectJ、CGLIB等.Spring AOP是其中的⼀种实现方式.前面我们不是学会了Spring 统一功能处理,那我们就是学会了Spring AOP吗?---当然不是拦截器的请求维度是一次URL(也就是一次请求和响应),@ControllerAdvice 应用场景主要是全局异常处理, 数据绑定, 数据预处理 ,但是AOP作用维度更加细致,全面,可以根据包、类、方法名、参数等进行拦截), 能够实现更加复杂的业务逻辑.
2026-03-31 09:15:00
747
45
原创 Spring统一功能处理
拦截器是在请求 / 数据抵达目标处理逻辑前、后自动拦截并执行通用处理(如登录校验、日志记录)的非侵入式代码组件,像业务流程中的统一关卡。拦截器是Spring框架提供的核心功能之⼀,主要用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码无拦截器:请求---> controller---> service ......请求 → 拦截器前置 → Controller → Service → 拦截器后置 → 拦截器完成 → 响应。
2026-03-25 09:15:00
636
49
原创 MyBatis-Plus高效开发全攻略
在实际的开发中, MyBatis-Plus提供的操作不能满足我们的实际需求, MyBatis-Plus 也提供了自定义 SQL的功能, 我们可以利用Wrapper构造查询条件,再结合Mapper编写SQL注意事项:• 参数命名:在自定义SQL时,传递Wrapper对象作为参数时,参数名必须为ew ,或者使用注解 @Param(Constants.WRAPPER) 明确指定参数为 Wrapper 对象.
2026-03-22 11:51:44
533
45
原创 MyBatis进阶:动态SQL与MyBatis Generator插件使用
动态 SQL 是Mybatis的强大特性之⼀,能够完成不同条件下不同的 sql 拼接。
2026-03-20 09:15:00
656
38
原创 MyBatis入门:快速掌握数据库操作技巧
MyBatis是⼀款优秀的 持久层框架,用于简化JDBC的开发。MyBatis本是 Apache的⼀个开源项目iBatis,2010年这个项目由apache迁移到了google code,并 且改名为MyBatis。2013年11月迁移到Github.更多介绍,可查看 MyBatis 中文官网 (注意:我们下面所讲的MyBatis不是原生的MyBatis,而是MyBatis 官方专门给 SpringBoot 做的整合包: mybatis-spring-boot-starter。
2026-03-17 09:00:00
481
19
原创 SpringBoot日志全解析:从调试到持久化
我们发现 debug 和 trace 级别的日志没有被打印---这与⽇志级别的配置有关,⽇志的输出级别默认是 info级别(下面的内容中会讲到如何配置), 所以只会打印⼤于等于此级别的⽇志,也就 是 info , warn 和 error.我们刷新后就可以发现在logger这个目录下出现了 Spring.log (日志文件的默认名称)这个日志文件 (注意: logging.file.path: 只能设置日志文件的路径,不能设置文件名称)(每个类都可以获取属于自己的独立日志对象)
2026-03-14 09:00:00
559
24
原创 SpringBoot配置文件
计算机上有数以千计的配置⽂件,我们使用的绝大多数软件,比如浏览器,微信,Idea,甚⾄电脑,手机,都离不开配置文件.我们可能永远不会直接与其中的大部分文件打交道,但它们确实以不同的形式散落在 我们的计算机上,比如C:\Users,C:\Windows文件夹,以及各种*.config,*.xml文件配置文件主要是为了解决硬编码带来的问题,把可能会发⽣改变的信息,放在⼀个集中的地方,当我们启 动某个程序时,应用程序从配置⽂件中读取数据,并加载运行.
2026-03-11 09:30:00
504
18
原创 Spring核心:IoC与DI全解析
IoC: Inversion of Control (控制反转),也就是说 Spring 是⼀个"控制反转"的容器.什么是控制反转呢?也就是控制权反转.什么的控制权发⽣了反转?
2026-03-04 15:20:27
481
21
原创 SpringMVC注解全攻略:从请求到响应
咱们学习Spring MVC,就是学习Spring MVC的各种注解。使用重点也就是学习如何通过浏览器和用户程序进行交互. 主要分以下三个方面:1. 建立连接:将用户(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring程序。2. 请求:用户请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数 的功能。3. 响应:执行了业务逻辑之后,要把程序执行的结果返回给用户,也就是响应.
2026-03-02 09:00:00
744
14
原创 深入解析JVM内存管理与垃圾回收机制
JVM是Java Virtual Machine的简称,意为Java虚拟机。各组件核心作用- JVM(Java虚拟机):最核心底层,仅负责运行Java字节码,无编译、无类库,单独无法运行程序。- JRE(Java运行环境):= JVM + 核心类库(java.lang/java.util等) + 运行时支撑工具,满足仅运行Java程序的全部需求(普通用户/服务器仅需JRE)。。
2026-03-01 09:06:07
813
9
原创 HTTP/HTTPS
HTTP是一种应用非常广泛的应用层协议HTTP全称“超文本传输协议”(文本:字符串;超文本:能传输的不仅是文本,还可以传输二进制数据,图片,视频,音频)HTTP诞⽣与1991年.⽬前已经发展为最主流使⽤的⼀种应⽤层协议.HTTP协议在传输层主要是依赖TCP协议(从HTTP/3.0版本开始就就切换到UDP了),但是目前互联网主流的还是HTTP/1.1版本。为什么在HTTP/3.0版本之前的HTTP版本主要依赖于TCP协议,而HTTP/3.0就切换成UDP呢了?
2026-02-28 08:45:00
911
14
原创 网络层与数据链路层
每一个路由器都会知道一些“线索”(周围的一些情况)---即每一个路由器都会维护一个“路由表”, 这个“路由表”记录了目的IP网络号(上面说过的第一个特殊IP地址),下一跳,网络出接口(数据是从LAN出去还是从WAN出去),度量值(衡量这条路径优劣的数值)(路由表一般是网关手动配置或有路由表的自动生成算法)从上图我们还可以看到一个默认网关---网关IP是该设备所属局域网对应的路由器LANIP地址,它是内网设备访问外部网络的必经“出入口”(注意:局域网本身没有独立的IP地址,它是一个网络范围的概念)
2026-02-27 09:00:00
799
2
原创 TCP与UDP:传输层协议深度解析
目录一. UDP 协议1.1 UDP协议端格式1.2 UDP的特点1.3 基于UDP的应用层协议二. TCP协议2.1 TCP协议端格式2.2 TCP核心机制2.2.1 核心机制1:确认应答2.2.2 核心机制2:超时重传2.2.3 核心机制3:连接管理2.2.4 核心机制4:滑动窗口2.2.5 核心机制5:流量控制2.2.6 核心机制6:拥塞控制2.2.7 核心机制7:延时应答2.2.8 核心机制8:捎带应答2.2.9 核心机制9:面向字节流2.2.10 核心机制10:异常处理 总结:适用场景UDP和TC
2026-02-25 14:31:10
907
15
原创 网络原理-初识
⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵 从的⼀组约定、规则。:在键盘上输入“hello”,按下发送键--->QQ程序读取到输入框的内容(hello),把“hello”构造成一个“应用层数据包”--->调用传输层的接口,把上述数据包交给传输层(应用层数据包的内容格式、字段含义、组织方式等,都由对应的。
2025-10-23 21:41:54
1069
14
原创 Java网络编程套接字
数据的发送⽅进程,称为发送端。发送端主机即⽹络通信中的源主机。:数据的接收⽅进程,称为接收端。接收端主机即⽹络通信中的⽬的主机。:发送端和接收端两端,也简称为收发端。注意:发送端和接收端只是相对的,只是⼀次⽹络数据传输产⽣数据流向后的概念。
2025-10-22 23:26:28
923
4
原创 文件 IO
我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时, 往往不是保存成⼀个整体,而是独立成⼀个个的单位进行保存立的单位就被抽象成文件的概 念,就类似办公桌上的⼀份份真实的文件⼀般。
2025-10-18 19:59:49
1024
1
原创 深入理解Java锁策略与CAS机制
目录一. 常见锁策略1.1 乐观锁 VS 悲观锁1.2 重量级锁 VS 轻量级锁1.3 自旋锁 VS 挂起等待锁1.4 公平锁 VS 非公平锁1.5 可重入锁 VS 不可重入锁1.6 普通互斥锁 VS 读写锁二. 对于synchronized的锁情况2.1 锁升级2.2 锁消除2.3 锁粗化三. CAS3.1 什么是CAS3.2 CAS中的ABA问题四. 原子类五. 自旋锁六. JUC中常见的类/接口6.1 Callable 接口6.2 ReentrantLock 类6.3 原子类6.4 线程池6.5 信号
2025-10-13 08:00:00
872
1
原创 Java多线程案例(超详细)
在Java中,设计模式是指在软件开发过程中,针对反复出现的问题总结归纳出的通用解决方案,就像是一套经过验证的“最佳实践”。它就好比建筑领域的经典建筑设计图纸,遇到相似的建筑需求时,可参考这些图纸高效完成设计。
2025-10-09 08:00:00
924
原创 Java线程安全:synchronized锁机制详解
死锁指多个进程(或线程)在执行过程中,因争夺资源 ,导致各进程(或线程)都在等待其他进程(或线程)释放已占用的资源,从而相互等待,无法继续推进的一种僵持局面。线程B持有资源2,等待资源1,双方都不释放已持有的资源,就形成了死锁。synchronized(Object obj){ } 中加锁的对象(obj)是谁,对加锁中的内容是没有影响的,只要是对同一个对象加锁即可。总之:无论那种写法,synchronized()针对什么对象加锁不重要,最重要的是,两个线程是否针对一个对象加锁。任意打破一点即可避免死锁。
2025-09-24 19:11:42
960
原创 深入理解Java线程:从启动到中断
下面是中断线程的一种方式,但是在我们在日常开发中一般不会使用这种方法,在后面会提出中断线程更科学的方法while(!try {});t.start();System.out.println("是否中断线程,中断请输入0");if(n==0){下面是中断线程要用到的方法注意:Thread.currentThread()是一个静态方法,它能返回一个引用,这个引用指向当前正在执行的线程while(!这两行代码可以改为,效果是一样的。
2025-09-13 19:56:04
1109
3
原创 深入理解Java线程:从创建到观察
() -> {... } 是 Lambda 表达式, () 表示 run 方法没有参数, {... } 内是 run 方法的具体实现逻辑,这里通过循环打印信息模拟线程任务。调用Thread类的start()方法,该方法执行时会调用操作系统API在系统内部建立一个线程,当线程建立好后,就会自动执行上面重写的run方法。- 调用 thread.start() 启动线程,线程进入就绪状态,等待 CPU 调度执行,同时主线程继续执行自己的逻辑,实现多线程并发。
2025-09-10 23:31:26
835
原创 【Java 数据结构】List,ArrayList与顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储,ArrayList就是顺序表的一种实现形式2.2 实现自己的顺序表在学习ArrayList之前,我们可以先试着写一个自己实现的顺序表,能帮助我们在使用ArrayList的方法以及了解它时更加得心应手在集合框架中,ArrayList是一个普通的类,实现了List接口。具体框架如下:注意:ArrayList是以泛型的形式实现的,使用时必须要先实例化。
2025-04-26 23:23:10
1277
原创 【Java 数据结构】泛型
泛型是一种在编程语言中允许代码在定义时使用参数化类型的特性,它使得代码可以处理不同类型的数据,同时保持类型安全,提高代码的复用性和可维护性,比如在Java中可以通过泛型定义一个能存储任意类型数据的集合类。
2025-04-24 23:22:17
788
原创 【JavaSE】对象的克隆,内部类与object类
被static修饰的内部类就是静态内部类局部内部类可以定义在外部类的方法体内或者{ }中,一般使用的较少int a=10;}.func();匿名内部类中Students这个位置可以是类,抽象类,也可以是接口匿名内部类当中可以定义和正常类一样的成员变量执行语句时,可以执行类以外的变量,但是这个变量不能被修改(在任何位置被修改都不行)在执行语句时,对于匿名内部类里面的成员变量,如果是在方法的外部被定义的变量,那么在方法内部可以修改,在方法外部不能被修改。
2025-04-10 17:47:55
744
原创 【javaSE】继承与多态
当需要对共同的属性或方法进行修改时,只需在父类中进行修改,所有子类都会继承这些修改,保证了代码的一致性,降低了维护成本。同时,通过继承可以方便地扩展新的功能,新的子类可以在继承父类的基础上添加自己特有的属性和方法,而不会影响到其他已有的类。
2025-03-26 22:20:11
1012
原创 【javaSE】类和对象(上)
面向对象是一种基于对象概念的编程思想与方法学,旨在以更贴近现实世界的方式进行软件开发。它将现实中的事物及其关系抽象为程序中的对象,把数据和操作数据的方法封装在对象内部,通过类来创建对象,利用继承实现代码复用与扩展,借助多态让不同对象对相同消息做出不同响应,以此构建出结构清晰、易于维护和扩展的软件系统,有效提升软件开发的效率与质量。在Java中,类是一种抽象的数据类型,用于创建对象,其定义包括类名、成员变量、构造方法和成员方法等部分。class为定义类的关键字, 定义一个新类必须用到 class。
2025-03-16 00:27:57
802
1
原创 【JavaSE】数组的打印,拷贝以及元素的查找
数组当中存储的是基本类型数据时,不论怎么拷贝基本都不会出现什么问题,但如果存储的是 引用数据类型,拷贝时需要考虑深浅拷贝的问题,关于深浅拷贝在后续详细给大家介绍。能够更方便的完成对数组的遍历。在编程中,数组的拷贝是指创建一个与原数组内容相同的新数组。给定一个数组,再给定一个元素,找打给元素再数组中的坐标。在使用for循环时,我们需要获得数组元素的个数---• 如果相等,即找到了返回该元素在数组中的下标。• 如果小于,以类似方式到数组左半侧查找。• 如果大于,以类似方式到数组右半侧查找。
2025-03-05 17:47:15
1083
1
原创 【javaSE】方法的使用
方法就是一个代码片段,类似于c语言中的“函数”1. 是能够模块化的组织代码(当代码规模比较复杂的时候).2. 做到代码被重复使用,⼀份代码可以在多个位置使用.3. 让代码更好理解更简单.4. 直接调用现有方法开发,不必重复造轮子.方法语法格式书写方法的示例实现一个两个整数相加的方法注意修饰符:现阶段直接用public static 固定搭配返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回类型,必须写成viod方法名字:采用小驼峰。
2025-02-28 14:06:25
745
原创 【javaSE】java输入输出与生成随机数字
具体来说,当你使用 Scanner 类读取年龄(例如 nextInt() 方法)后, nextInt() 方法会读取输入的整数,但会把输入整数后面的换行符( \n )留在输入缓冲区中。接着当你使用 nextLine() 方法读取姓名时, nextLine() 方法会读取输入缓冲区中残留的换行符,认为这是一个空行,从而直接结束读取,导致没有机会让你输入姓名,看起来就好像姓名读不到了。:额外调用一次 nextLine() 方法来清空输入缓冲区中的换行符,再去读取字符串类型的数据。
2025-02-28 12:25:33
634
原创 【javaSE】程序逻辑与控制
表达式1、表达式2、表达式4、表达式3-》表达式2、表达式4、表达式3-》表达式2、表达式4、表达式3-》...执行到continue语句的时候,就回来立刻进入下次循环(判断循环条件),从而不会执行到下方的打印语句。如果布尔表达式结果为true,执行if中的语句,否则执行else中的语句。表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。先执行循环语句,再循环判断条件,循环条件成立则继续执行,否者循环结束。如果布尔表达式结果为true,执行if中的语句,否则不执行。
2025-02-26 13:31:55
873
原创 【JavaSE】初识Java
1.main方法示例通过上述代码,我们可以看到一个完整的java程序结构,Java程序得结构有如下三个部分组成:源文件注意:1.类的内容要包含字画在花括号里面。2.在一个源文件里面只能一个publik修饰的类,且源文件的名字必须与publik所修饰类的名字相同。类:类中带有一个或多个方法。方法必须在类的内部声明。方法在方法的花括号中编写方法应要执行的语句。
2025-02-23 14:18:45
909
1
原创 【javaSE】前言
学习的过程并非一帆风顺,那些复杂的语法、抽象的概念,像一道道关卡横在面前。为了让自己的学习更有条理,也为了和同样热爱编程的伙伴们交流分享,我决定开启这个博客。最初接触Java,是因为听闻它强大的功能和广泛的应用,从Web开发到安卓应用,从大数据处理到人工智能,Java无处不在。在这里,我会如实记录学习中的每一个知识点、每一次踩坑与填坑,希望能和大家携手共进,在Java的世界里收获成长,一起成为更优秀的开发者。初来乍到,先做个自我介绍,我是一个正在Java学习之路上奋力奔跑的学生。
2025-02-23 12:39:13
189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅