- 博客(42)
- 收藏
- 关注
原创 Claude Code完整安装与配置指南
Claude Code是Anthropic推出的强大AI编程助手,能够帮助开发者编写代码、调试问题、重构项目并解释复杂的技术概念。本文将详细介绍在国内环境下完整安装和配置Claude Code的全过程,解决常见的网络连接和登录验证问题。
2026-05-24 16:52:32
432
原创 Spring 声明式事务:删除操作的事务管理全解与最佳实践
在实际业务开发中,删除操作(尤其是核心业务的删除逻辑)从来都不是单条 SQL 就能完成的简单动作,而是一组关联数据操作的集合。这一组操作必须满足:要么全部执行成功,要么任意一步失败时,前面已执行的操作全部回滚。如果没有事务保障,极易出现 “订单记录已删除,但库存未恢复”“明细数据残留”“日志缺失” 等数据不一致问题,给业务带来不可逆的资损和故障。
2026-03-21 16:12:07
430
原创 SpringBoot两大核心数据库连接池:HikariCP与Druid深度实践
SpringBoot可选的连接池多达六款,但真正在生产环境中高频使用的其实只有两款。
2026-02-12 17:18:01
1223
原创 如何将SSM项目通过tomcat部署到Linux云服务器上?
SSM项目分为单体项目和聚合项目,单体项目的部署方式通常是一种,而聚合项目的部署可有两种方式选择,下面将仔细介绍将SSM项目部署到阿里云Linux服务器的三种方式的完整步骤。同时需要有连接服务器的工具,下面我以mobaxterm工具为例。
2026-02-01 02:39:26
882
原创 Java项目架构从单体架构到微服务架构的发展演变
结论:从单体到微服务的演变,本质上是从一个追求简单和集中控制的模型,向一个追求敏捷、弹性和规模化的模型的转变。Java项目架构从单体架构到微服务架构的详细发展演变史,并不是简单的技术替代,而是业务、技术、团队和运维能力共同驱动的必然演进。核心思想:将所有功能模块(用户认证、订单管理、库存管理、支付、日志等)打包在一个单一的、庞大的应用程序中。2. 围绕业务能力组织:按“订单”、“支付”、“推荐”等业务领域划分,而非按“Web层”、“DAO层”等技术层次划分。ESB成为一个中心化的、重量级的智能管道。
2026-01-18 15:51:04
617
原创 一篇文章带你深入理解SpringBoot的自动装配
在这个文件中,有一个特定的键:`org.springframework.boot.autoconfigure.EnableAutoConfiguration`,它的值是一长串的自动配置类全限定名,用逗号分隔。你添加了`spring-boot-starter-data-jpa`,类路径就有了JPA相关的类,相应的自动配置就生效。如果加载成功,说明这个类存在。当你理解了自动装配,你不仅掌握了一个技术特性,更理解了一种软件开发哲学:通过合理的默认值和智能的推断,减少开发者的认知负担,让开发者专注于创造业务价值。
2026-01-18 15:50:32
547
原创 创建SpringBoot项目的五种方式
以下五种创建SpringBoot项目的方式,包括借助IDEA工具、不借助IDEA工具及手动创建场景,可根据网络环境、需求场景选择使用。
2026-01-09 21:37:54
709
原创 parameterType和@Param注解的区别
在分析parameterType和@Param注解有何区别之前,我们先来分别介绍一下parameterType和@Param注解。
2025-09-14 16:55:52
906
原创 有序二叉树的删除
有序二叉树的删除需要考虑多种情况,其核心在于下面,我们用如下这棵树作为例子,分析关于有序二叉树所要删除的目标节点的几种可能情况。当目标节点分别是这三种情况时,有序二叉树的删除该如何实现?1、找到要删除的目标节点target;2、判断目标节点是否有父节点parent;3、如果没有父节点,即整棵树就只有一个节点,则root=null;4、如果有父节点,判断父节点和目标节点的关系(1)目标节点是父节点的左孩子,则parent.left=null。
2025-08-20 19:49:42
649
原创 Spring框架--AOP框架
什么是 AOP 的技术? 在软件业,AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程 AOP:面向切面编程.(思想.---解决 OOP 遇到一些问题)AOP 采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存) 为什么要学习 AOP--可以在不修改源代码的前提下,对程序进行增强。运行期间,不修改源代码的情况下对已有的方法进行增强 优势(1)JDK 的动态代理技术 (2)cglib 代理技术 Joinpoint(连接点) 所谓连
2025-05-24 23:07:44
812
原创 Spring框架--IOC技术
是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。纯注解的方式是微服务架构开发的主要方式,所以也是非常的重要。的目录下又多创建了一个配置文件,现在是两个核心的配置文件,那么加载这两个配置文件的方式有两种。每次进行单元测试的时候,都需要编写创建工厂,加载配置文件等代码,比较繁琐。),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。的配置文件,名称是可以任意的,但是一般都会使用默认名称。单元测试的技术,可以简化测试开发。
2025-05-24 23:07:17
1048
1
原创 数据库连接池
现在:有一些连接池,已经创建好了一些连接,现在可以从连接池中获取到,这样就节省创建连接时间,直接使。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。提供了一个高效、功能强大、可扩展性好的数据库连接池。公司提供的接口,任何的连接池(开源的,自定义的)必须要实现该接口。原来:需要自己创建连接和销毁连接,这样是比较消耗时间,资源等。是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其。连接池,阿里巴巴提供开源连接池对象。个参数:任何的开源的连接池,连接池,开源的连接池对象。
2025-05-24 21:45:32
650
原创 Maven:在原了解基础上对pom.xml文件进行详细解读
就像项目管理软件 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是 pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。类似的软件还有Gradle。
2025-05-24 21:33:37
1248
原创 配置tomcat时,无法部署工件该怎么办?
当我们第一次在IDEA中创建Java项目时,配置tomcat可能会出现无法部署工件的情况,如图:而正常情况应该是:那么该如何解决呢?
2025-05-24 21:32:50
898
原创 SpringMVC:拦截器
一、什么是拦截器SpringMVC提供了Intercepter拦截器机制,类似于Servlet当中的Filter过滤器,用于拦截用户的请求并作出相应的处理,比如通过拦截器来进行用户权限验证或者用来判断用户是否登录。SpringMVC拦截器是可插拔式的设计,需要某一功能拦截器,就需要在配置文件中应用拦截器即可;如果不需要这个功能拦截器,只需要在配置文件中取消该拦截器即可。
2025-03-27 21:19:30
630
原创 SpringMVC配置和基本原理
Model I的开发模式是:JSP+JavaBean的模式,它的核心是JSP页面,在这个页面中,JSP页面负责整合页面和JavaBean(业务逻辑),而且渲染页面,它的基本流程如下:这样的设计模式到这一个jsp页面负责了视图的展示和业务流程的控制高度耦合的结果是Jsp代码十分复杂,后期维护困难!
2025-03-25 13:35:49
710
原创 Spring:IOC
控制反转(Inversion of Control,缩写为IOC),将对象的创建权力反转给Spring框架,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。在java中,一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况:比如A类当中创建B对象,B类当中有C对象,C类当中有A对象,这样如果一个类出了问题,那么可能会导致这个框架出现问题。
2025-03-23 09:35:47
703
原创 Spring:AOP
在软件业中,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构。AOP最早由AOP联盟的组织提出,并制定了一套规范。Spring将AOP思想引入到框架中,就必须遵守AOP联盟的规范。Spring中的AOP技术是通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
2025-03-22 22:21:08
1033
1
原创 数据库-事务
比如转账业务:现在张三和李四都各有200元,张三要给李四转账100元,那么转账成功后,张三的金额为100元,李四的金额为300元,该事务在数据库中的操作需要执行两条SQL命令,这两条SQL命令必须同时成功或失败。比如第二条SQL语句中的id出现错误,即使第一条SQL语句可以正常执行,但由于我们添加了事务的回滚,所以会回到最初的状态,即转账失败。依旧是上述示例,张三向李四成功转账100元后,虽然张三和李四的金额变了,但相加起来的总金额是不变的,仍是400元。本质上是通过MySQL底层的日志来实现的。
2025-03-20 21:36:14
371
原创 手写Tomcat:实现基本功能
首先,Tomcat是一个软件,所有的项目都能在Tomcat上加载运行,Tomcat最核心的就是Servlet集合,本身就是HashMap。Tomcat需要支持Servlet,所以有servlet底层的资源:HttpServlet抽象类、HttpRequest和HttpResponse,否则我们无法新建Servlet。
2025-03-09 11:14:02
1106
1
原创 HTTP协议与HTTPS协议
无论是一台手机还是一台电脑,如果想要上网,必不可少的步骤是需要连接路由器。而路由器及其下面绑定的设备就组成了一个小型局域网。路由器能够划分子网的IP地址。同一个路由器下所连接的设备可以互相联系,如果两个小型局域网之间想要互发信息,就需要一个更大的路由器来连接,而这个更大的路由器又会对其子网进行划分,以此类推。以国家地理行政划分为例,下面是路由器的层级结构图:而搭建起整个国家体系的互联网是三家国企:联通、移动和电信。
2025-03-04 21:33:50
2031
原创 Java基础:IO流
IO(Input/Output):输入和输出,指的是某个设备或环境进行数据的输入或者输出。例如:键盘的输入,再比如显示器就是输出设备,输出图像。对于Java来说,输入输出问题,Java将它抽象成流对象来解决。以游戏程序为中心读取文件就是输入,写入文件是输出。
2025-02-21 00:30:22
818
原创 Java基础:代理
代理本身是一种模式,它给目标对象提供一个代理对象,并且由代理对象控制着对目标对象的引用。为了更好地理解什么是代理,我们举一个简单的日常生活中的例子:现在,我们设计一个转账业务,当用户直接访问转账业务时,容易出现各种问题。为了减少问题出现,我们在用户直接访问转账业务之前新增一个验证用户信息功能,去实现拦截。在上述例子中,转账业务就是定义中的目标对象,验证用户信息就是定义中的代理对象,从转账业务功能的宏观角度去看,代理对象在此的作用是控制访问和功能增强。
2025-02-20 02:10:12
919
原创 Java基础:异常
在Java语言中,异常对象都是派生于Throwable类的一个实例。下图是Java异常层次结构的一个简化示意图:所有的异常都是由Throwable继承而来的,其分解为两个分支:Error(错误)和Exception(异常)。(1)Error是程序无法处理的错误, 它是由JVM产生和抛出的。(2)Exception是程序本身可以处理的异常,这种异常分两大类:运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。
2025-02-13 00:50:54
1114
原创 关于Java中的包装类和自动拆装箱
在介绍包装类之前,我们先了解Java语言中的数据类型的相关知识点。Java语言中的数据类型包括基本数据类型和引用数据类型。(1)整型:byte、short、int、long(2)浮点型:float、double(3)布尔型:boolean(4)字符型:char。而对象是类的实例化,对象是堆当中的一块内存空间,类是构建对象的模板。但我们知道基本数据类型只进入到栈内存当中,而不进入堆内存中,因此基本数据类型不能创建对象,这就和“万物皆对象”的思想产生了冲突。为解决此冲突,于是就有了包装类。
2025-02-12 01:17:09
1144
原创 Java基础:Object基类
Object类是,即所有类都是Object类的子类。我们都知道继承的本质是代码的复用,那么所有类都可以使用Object类中的方法。
2025-02-11 23:05:30
661
原创 Java基础:多态
我们在说明“什么是多态”之前先引入一个例子:现在有Animal类和Cat类,Cat类继承Animal类。用内存存储形式简单表示:因为Cat类继承了Animal类,所以在生产子类对象之前,会先生成父类对象,并且Animal类和Cat类的方法和变量,cat都可以调用。用内存存储形式简单表示:因为catAnimal的数据类型是Animal,所以catAnimal只能调用Animal类中的方法和变量。这就是我们上述所说的多态:父类的引用指向子类的对象。
2025-02-11 00:32:40
1127
原创 Java基础:继承
继承的本质是代码的复用,即重复使用已经定义好的方法和域(全局变量)。现在有两个类,分别名为AAA和BBB,其中AAA类代码如下:假如此时BBB类想使用AAA类中的testA()方法,那么有两种方式可以实现:1、创建AAA的对象如果此时testA()方法拒绝访问呢?我们增加一个测试类Test,并在main()方法中想要调用AAA类中的testA()方法,如果通过创建AAA的对象的方式,当testA()方法拒绝访问时,此时是不能实现的,但如果通过继承的方式,让BBB类继承AAA类,即使testA()
2025-02-10 01:35:34
436
原创 八大排序--选择排序
2.找到待排序数组当中真正的最小值,真正最小值和默认最小值进行交换;4.重复步骤123,直到所有的真正最小值到达正确的位置。1.默认待排序数组当中的第一个为最小值;3.真正最小值到达正确的位置;
2025-02-07 17:39:05
139
原创 关于HTML的常用标签
基本语法格式:<img src="图像URL" />,其中src属性用来指定图像的路径,是<img />标签的必备属性。若想改变其文本的对齐方式,可使用属性值align="对齐方式"(对齐方式:left/right/center),但是HTML不赞成使用标题标签的align属性,可使用CSS样式设置。<hr />是单标签,在网页中输入一个<hr />标签,就添加了一条默认样式的水平线。<div>标签可以替代块级元素(如:<h>标签、<p>标签等),但在语义上有一定区别。
2024-12-07 00:04:44
279
原创 关于删除数组中的数据
2、如果遍历完仍未发现目标数据,则说明数组中无目标数据;如果找到了目标数据,则令目标数据之后的数据依次往前覆盖。上图为包含这个方法的函数代码,下图中调用此函数,在数组中删除“44”这个数据。3、覆盖完成之后,令有效数据长度减一,即完成删除。1、在数组中查找目标数据target。删除第一个符合条件的数据。
2024-11-16 16:27:24
239
原创 关于数组的扩容—ArrayList
我们知道,数组的初始容量在定义时就已经确定无法更改,那么,在进行这些操作时,如果遇到数组容量不够的情况,我们该如何处理?这就需要对数组进行扩容,而ArrayList在添加元素时,会根据需要自动进行扩容,以容纳更多的元素。2、默认情况下,ArrayList的容量会以1.5倍增长,即每次扩容后的容量是当前容量的1.5倍。3、扩容时,ArrayList会创建一个新的更大的数组,并将原始数组中的元素复制到新数组中。1、当ArrayList的当前容量不足以容纳新元素时,会触发扩容操作。
2024-11-05 20:00:28
160
原创 关于二叉树的遍历
二叉树遍历分为广度优先遍历和深度优先遍历两种。从上到下依次遍历,同一层从左到右遍历每个节点。分为先序遍历、中序遍历和后序遍历三种。一、广度优先遍历(BFS)二、深度优先遍历(DFS)
2024-11-05 19:29:21
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅