自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java有三种创建线程的方式?并发编程中的惊天骗局!

《Java线程创建的10种方式》一文揭示了Java并发编程中的常见认知误区。文章从初级到高级分五个层次逐步展开:普通程序员认为3种(继承Thread、实现Runnable/Callable);Pro版4种(增加线程池);Plus版5种(增加CompletableFuture);ProMax版7种(增加ThreadGroup/FutureTask);最终超级至尊版10种(包含Lambda/Timer/ForkJoin等)。每种方式都配有完整代码示例,涵盖从基础Thread类到JDK8的CompletableF

2025-11-06 10:18:31 686

原创 JDK/CGLIB动态代理

JDK动态代理是Java标准库(JDK)提供的一种基于接口的代理机制,允许在运行时动态生成代理类,实现对目标对象的方法增强(如日志记录、事务管理、权限控制等),而无需手动编写代理类代码。其核心依赖类和接口。核心组件目标接口(Target Interface)被代理类必须实现的接口,JDK动态代理只能基于接口生成代理类(这是其与CGLIB代理的主要区别)。目标对象(Target Object)实现了目标接口的具体类,是代理的实际操作对象。InvocationHandler(调用处理器)

2025-10-22 14:46:29 983

原创 Spring Boot 的⾃动配置是如何实现的?

2.AutoConfigurationImportSelector 加载 META-INF/spring.factories 中的所有自动配置类;1.启动类通过 @SpringBootApplication 触发 @EnableAutoConfiguration开启自动装配;4.想要其生效必须引入spring-boot-starter-xxx包实现起步依赖。3.基于 @Conditional 注解家族筛选出符合当前环境的自动配置类;

2025-10-20 11:15:35 102

原创 数据库优化:如何实现数据库“读写分离“?

系统需要一个“路由中间件”来判断 SQL 是“读操作”还是“写操作”,并将请求转发到对应的主库或从库。,记录所有写操作的逻辑或物理变化。从库通过“IO 线程”拉取主库的 binlog,再通过“SQL 线程”重放这些操作,从而实现。简单来说:主库写数据 → 记录到 binlog → 从库复制 binlog 并执行相同操作 → 从库数据与主库一致。读写分离通过“分工协作”,让主库专注处理写操作,从库专注处理读操作,从而。在数据库高并发场景下,若所有读写操作都集中在单个数据库,会导致。在主库的配置文件(如。

2025-10-17 16:22:58 902

原创 缓存优化:如何解决Redis缓存“数据一致性“问题?

用“”方案解决数据一致性问题。

2025-10-16 19:22:47 486

原创 延时任务之Redis 过期事件监听原理与缺陷

因此,过期事件的触发可能存在延迟(极端情况下甚至长时间不触发),导致任务执行时间不准。Redis 的 pub/sub 模式目前只有广播模式,这意味着当生产者向特定频道发布一条消息时,所有订阅相关频道的消费者都能够收到该消息。且 Redis 本身不存储消息,若订阅者处理能力不足,也可能漏处理事件。Redis过期事件监听实现延时任务功能主要基于其发布/订阅(pub/sub)机制和键空间通知功能。这个时候,我们需要注意多个服务实例重复处理消息的问题,这会增加代码开发量和维护难度。Redis 删除过期键采用。

2025-10-01 23:04:09 551

原创 MySQL 当前读&快照读深度解析

依赖于MVCC(多版本并发控制)机制,InnoDB会为每行数据保存多个历史版本(通过undo日志实现),并通过事务的Read View(读视图)来决定当前事务能看到哪个版本的数据。使用快照读可减少读写冲突,提高页面加载速度。依赖于锁机制,读取时会对记录加锁(共享锁或排他锁),阻止其他事务的并发修改,确保读取到的是最新数据。不加锁,不会阻塞其他事务的读写操作,并发性能更高,但读取的可能不是最新版本(取决于隔离级别)。会加锁,可能导致事务间的阻塞(例如读写冲突),降低并发性能,但能保证数据的实时一致性。

2025-09-23 17:09:11 734

原创 Linux的常用命令

作用: vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本语法:说明:1). vim是从vi发展来的一个功能更加强大的文本编辑工具,编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,所以实际工作中vim更加常用。2). 要使用vim命令,需要我们自己完成安装。可以使用下面的命令来完成安装:yum install vim。

2025-09-13 12:51:29 1127

原创 Spring中@Component与@Bean的深度对比

都是用于定义Bean的核心注解,但它们在使用场景、作用机制和功能特点上存在显著差异。类中,但不推荐),否则无法保证Bean的生命周期管理(如AOP增强)和依赖注入的正确性。类中,通过方法返回值定义Bean。Spring会调用该方法,将返回的对象注册到容器中。,用于标记一个类为"组件",告诉Spring自动扫描并将其注册为Bean。方法参数可直接引用容器中已存在的Bean,Spring会自动注入所需依赖。的派生,用于明确类的角色,便于Spring进行更精细的处理(如。)的类,自动创建实例并注册到容器中。

2025-09-02 18:44:41 776 1

原创 Spring : 事务管理

事务(Transaction)是一组不可分割的操作单元,这些操作要么全部成功执行,要么全部失败回滚,不存在部分成功的情况。实际开发中需注意事务的传播行为、隔离级别及失效场景,确保数据一致性的同时兼顾性能。通过注解或XML配置声明事务规则,无需手动编写事务控制代码,侵入性低,是实际开发的首选。Spring事务管理简化了传统JDBC事务的复杂性,声明式事务(定义了多个事务方法嵌套调用时,事务如何传播。可标注在类或方法上,用于声明该类/方法需要事务管理。),事务会失效,因为未通过代理对象调用。

2025-08-30 19:30:23 1298

原创 Spring : IOC / DI (控制反转 / 依赖注入)

本文介绍了Spring框架中的IOC(控制反转)和DI(依赖注入)核心概念。IOC通过将对象创建权交给容器实现松耦合,DI则为程序运行时提供所需资源。文章详细讲解了Bean的声明方式(@Component及其衍生注解)和组件扫描机制,以及三种依赖注入方式(属性注入、构造器注入、setter注入)。针对多个同类型Bean的冲突问题,提出了@Primary、@Qualifier和@Resource三种解决方案,并比较了@Autowired与@Resource的区别。这些机制共同构成了Spring框架管理对象依赖

2025-08-27 16:51:28 1138

原创 面试:Spring

【代码】面试:Spring。

2025-08-26 20:28:47 973

原创 面试:计算机网络

(辅助理解,对比记忆):物理层→数据链路层→网络层→传输层→会话层→表示层→应用层(重点记前四层与TCP/IP的对应)。

2025-08-25 16:38:46 889

原创 程序启动8080端口被占用问题解决

应用程序启动失败,因为8080端口已被占用,Web服务器无法绑定到该端口。

2025-08-22 11:29:07 597

原创 Spring Cache 整合 Redis 实现高效缓存

Spring Cache 是 Spring 框架提供的缓存抽象层,它简化了在应用中添加缓存功能的过程,允许开发者通过注解方式轻松实现缓存逻辑,而无需关注具体的缓存实现细节。

2025-08-19 22:54:09 1039 2

原创 Java基础面试题

Java能支持跨平台,主要依赖于JVM关系比较大。JVM也是一个软件,不同的平台有不同的版本。我们编写的J。ava源码,编译后会生成一种.class文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一"中间层",就能在不同平台上运行,真正实现了"一次编译,到处运行"的目的。

2025-08-11 16:42:32 809

原创 JavaSE:入门

Java能支持跨平台,主要依赖于JVM关系比较大。JVM也是一个软件,不同的平台有不同的版本。我们编写的J。ava源码,编译后会生成一种.class文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一"中间层",就能在不同平台上运行,真正实现了"一次编译,到处运行"的目的。

2025-08-10 23:27:06 698

原创 白马外卖:员工密码加密+swagger生成接口文档

使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。Swagger 在开发阶段使用的框架,帮助后端开发人员做后端的接口测试。

2025-08-05 16:06:17 443

原创 Web前端实战:Vue工程化+ElementPlus

npm:Node Package Manager,是NodeJS的软件包管理器。在开发前端项目的过程中,我们需要相关的依赖,就可以直接通过命令,直接从远程仓库中将依赖直接下载到本地了。Element:是饿了么公司前端开发团队提供的一套基于 Vue3 的网站组件库,用于快速构建网页。Element 提供了很多组件(组成网页的部件)供我们使用。例如 超链接、按钮、图片、表格等等。

2025-07-30 19:09:10 1024 1

原创 Maven高级 : Java分模块开发实战指南

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。依赖查找顺序:本地仓库私服仓库中央仓库注意事项:私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使用即可)。

2025-07-28 09:52:56 1094

原创 Lombok的@Data等注解不生效问题(终于解决!!!)

打开 Settings → Plugins,搜索 “Lombok Plugin” 并安装。重启 IntelliJ IDEA。

2025-07-27 13:03:02 1947

原创 Spring Boot 原理

第1步:创建自定义starter模块(进行依赖管理)把阿里云OSS所有的依赖统一管理起来第2步:创建autoconfigure模块在starter中引入autoconfigure (我们使用时只需要引入starter起步依赖即可)第3步:在autoconfigure模块中完成自动配置定义一个自动配置类,在自动配置类中将所要配置的bean都提前配置好定义配置文件,把自动配置类的全类名定义在配置文件()中。

2025-07-26 17:11:45 1421

原创 Spring : AOP(面向切面编程)

在原始的实现方式中,我们需要在业务层的也一个方法执行执行,获取方法运行的开始时间;然后运行原始的方法逻辑;最后在每一个方法运行结束时,获取方法运行结束时间,计算执行耗时。</</</2). 编写AOP程序:针对于特定方法根据业务需要进行编程。

2025-07-25 11:21:29 1325

原创 Web后端实战:登录认证(JWT令牌生成和Filter过滤器Interceptor拦截器)

,定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。简洁:是指jwt就是一个简单的字符串。可以在请求参数或者是请求头当中直接传递。自包含:指的是jwt令牌,看似是一个随机的字符串,但是我们是可以根据自身的需求在jwt令牌中存储自定义的数据内容。如:可以直接在jwt令牌中存储用户的相关信息。简单来讲,jwt就是将原始的json数据格式进行了安全的封装,这样就可以直接基于jwt在通信双方安全的进行信息传输了。

2025-07-23 12:00:03 867

原创 Web后端实战:(员工管理3)

在 com.itheima.pojo 包中定义实体类 JobOption。

2025-07-20 22:39:53 1148

原创 Gitee 提交信息的规范

遵循这些规范可以让你的提交历史更清晰,便于团队成员理解和维护代码。如果团队有特定的规范,建议优先遵循团队约定。命令将代码推送到 Gitee(或任何 Git 平台)时,引号中的信息通常指的是。提交信息是对本次代码修改的简要描述,规范的提交信息有助于团队协作和版本管理。

2025-07-19 21:21:46 432

原创 VSCode里借助Git将代码上传到Gitee

本文详细介绍如何在VSCode中使用Git将代码上传至Gitee。首先需注册Gitee账号、安装Git和VSCode,并配置用户信息。主要包括:新建远程仓库并在VSCode中初始化本地仓库、提交文件、关联远程仓库并推送代码;克隆已有仓库;日常开发流程(创建分支、提交修改、推送和拉取更新);冲突解决方法;以及常见问题和进阶操作(如.gitignore设置、SSH认证等)。通过图文结合的方式,帮助开发者快速掌握VSCode与Gitee的集成使用。

2025-07-17 10:55:28 2080

原创 实训笔记:day3(第二章 标识符、常量、变量、类型 转换)

方面详情定义存储的是对对象的引用(内存地址),而非对象本身的值。通过这个引用,程序可以访问和操作对象。常见类型类:自定义数据类型,如int age;;接口:定义一组方法签名,不包含方法实现,用于实现多态和规范行为,如;数组:用于存储相同类型的数据元素集合,如。内存分配引用本身存储在栈内存中,指向堆内存中的对象。创建对象时(如),在堆中分配内存空间存放对象的属性和方法相关数据。特点多态性:同一引用类型变量可指向不同子类对象,根据实际指向对象调用对应方法,如会调用Dog类中重写的eat方法;

2025-07-16 17:16:38 806

原创 实训课堂笔记:day2(第一章Java基础入门)

开源 简单性 api 安全性 健壮性强类型弱类型。Jdk下载 安装位置 环境变量java_home path 优点。主流版本:1.8.0 11 17(稳定)Java特点 面向对象 过程区别 单继承。三平台:j2 jme jee。JVM 字节码文件 跨平台。Javac运行字节码文件。

2025-07-15 11:41:51 411

原创 Web后端实战:(员工管理2)

概念: 事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作 要么同时成功,要么同时失败。就拿添加员工的这个业务为例,在这个业务操作中,包含了两个操作,那这两个操作是一个不可分割的工作单位。这两个操作,要么同时失败,要么同时成功。默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。这个属性是用来配置事务的传播行为的。什么是事务的传播行为呢?

2025-07-13 21:20:12 852

原创 Web后端实战:(员工管理1)

- 部门管理id int unsigned primary key auto_increment comment 'ID, 主键',name varchar(10) not null unique comment '部门名称',create_time datetime comment '创建时间',update_time datetime comment '修改时间') comment '部门表';(1,'学工部',now(),now()),(2,'教研部',now(),now()),

2025-07-09 19:16:02 1195

原创 Web后端实战:(部门管理)

如果通过 System.out.println(…硬编码。所有的记录日志的代码,都是硬编码,没有办法做到灵活控制,要想不输出这个日志了,只能删除掉记录日志的代码。只能输出日志到控制台。不便于程序的扩展、维护。所以,在现在的项目开发中,我们一般都会使用专业的日志框架,来解决这些问题。

2025-07-08 18:08:55 1151

原创 Java操作数据库----MyBatis

1). 没有数据库连接池的情况客户端执行SQL语句:要先创建一个新的连接对象,然后执行SQL语句,SQL语句执行后又需要关闭连接对象从而释放资源,每次执行SQL时都需要创建连接、销毁链接,这种频繁的重复创建销毁的过程是比较耗费计算机的性能。2). 有数据库连接池的情况数据库连接池是个容器,负责分配、管理数据库连接(Connection)程序在启动时,会在数据库连接池(容器)中,创建一定数量的Connection对象允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。

2025-06-28 22:34:12 1052

原创 Web后端基础:Java操作数据库----JDBC

JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。sun公司官方定义的一套操作所有关系型数据库的规范,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。那有了JDBC之后,我们就可以直接在java代码中来操作数据库了,只需要编写这样一段java代码,就可以来操作数据库中的数据。

2025-06-25 20:27:44 1009

原创 MySQL数据库(基础篇)

掌握数据库基础是JavaWeb开发的核心技能,合理设计表结构、优化查询和管理事务是保证系统性能和数据安全的关键。

2025-06-15 20:20:46 1278

原创 JavaSE: 数组详解

数组是Java中最基本的数据结构,深入理解其特性和操作是编写高效代码的基础。,它在内存中占据连续的存储空间,通过索引快速访问元素。

2025-06-15 20:08:28 473

原创 JAVASE:方法

方法是Java编程的基本单元,合理设计和使用方法是提高代码质量的关键。,它将代码逻辑封装为可复用的单元,提高代码的模块化和可维护性。

2025-06-11 21:22:47 651

原创 创建Spring Boot入门案例+HTTP+分层架构

在没有正式的学习SpringBoot之前,我们要先来了解下什么是Spring。我们可以打开Spring的官网(https://spring.io),去看一下Spring的简介:Spring makes Java simple。Spring的官方提供很多开源的项目,我们可以点击上面的projects,看到spring家族旗下的项目,按照流行程度排序为:Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。

2025-06-11 21:07:36 1233

原创 Maven入门:从零掌握Java项目构建

Apache Maven是一个项目管理和构建工具,它基于项目对象模型(Project Object Model , 简称: POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。方便的依赖管理统一的项目结构标准的项目构建流程Maven的生命周期就是为了对所有的构建过程进行抽象和统一。描述了一次项目构建,经历哪些阶段。在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。

2025-06-10 16:52:01 964

原创 Web前端基础:Vue+Ajax

Vue(读音 /vjuː /, 类似于 view),是一款用于构建用户界面的渐进式的JavaScript框架(官方网站:https://cn.vuejs.org)。1). 构建用户界面构建用户界面是指,在Vue中,可以基于数据渲染出用户看到的界面。 那这句话什么意思呢?我们来举一个例子,比如将来服务器端返回给前端的原始数据呢,就是如下这个样子:而上面的这些原始数据,用户是看不懂的。 而我们开发人员呢,可以使用Vue中提供的操作,将原始数据遍历、解析出来,从而渲染呈现出用户所能看懂的界面,如下所示:

2025-06-08 14:56:11 1183

空空如也

空空如也

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

TA关注的人

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