- 博客(30)
- 收藏
- 关注
原创 并发下的微观战争:解构Spring Boot线程分配、JVM内存博弈与GC回收战场
我们将以一个典型的场景为例:一个基于 Spring Boot 3 和 JDK 17 开发的电商网站后台,有一个查询商品信息的 Controller 接口。现在,有三个用户(User A, User B, User C)在完全相同的时间点击查询按钮。
2025-06-14 08:22:45
647
原创 为什么你的@Controller能工作?深度剖析Spring MVC底层执行链
在开始之前,要明白 Spring MVC 的核心是前端控制器模式 (Front Controller Pattern) 的一次经典实现。想象一下,如果没有统一的入口,你的 Web 应用可能会有很多个 Servlet,每个 Servlet 负责一部分 URL。这样会导致配置繁琐、代码重复(比如权限校验、日志记录等)。而前端控制器模式,就是设立一个唯一的、中央处理的 Servlet。所有进来的请求都先经过它,然后由它根据请求信息,决定将请求分发给谁去处理。在 Spring MVC 中,这个核心角色就是
2025-06-11 17:22:41
1767
原创 抽丝剥茧!一文搞清Spring Boot自动配置原理!
当我们启动一个 Spring Boot 应用时,一切都从主类上的 @SpringBootApplication 注解开始。这个注解看起来简单,但它其实是一个复合注解,是三个核心注解的集合体:@SpringBootConfiguration:这其实就是 @Configuration 的一个变体。它将当前类标记为一个配置类,意味着 Spring 容器会从这个类开始扫描和加载 Bean。@ComponentScan:这个注解告诉 Spring 去哪里扫描用户自定义的组件(如 @Component, @
2025-06-11 16:55:25
1978
原创 Minio上传读取图片文件的整体流程全解析
前端交互: 用户在客户端(例如网页或 App)选择图片。请求发送: 前端将图片文件以 HTTP multipart/form-data 形式发送到后端 Spring Boot 应用的指定接口。后端接收: Spring Boot Controller接收到图片文件。业务处理:Service 层调用 MinIO 客户端,将图片文件上传到 MinIO 服务器的指定 Bucket。(可选)将图片的元数据(如文件名、URL、上传者信息等)保存到 MySQL 数据库,可以使用 MyBatis-Plu
2025-06-10 20:51:07
2425
原创 一个HTTP请求的完整生命周期:Nginx如何协同Vue与Spring Boot
从用户按下回车键开始讲起,到Nginx服务器,再到后端Spring Boot处理并返回,超级详细!
2025-06-10 20:39:35
1039
原创 Spring AOP梳理一些你疑惑的点
AOP 是 Spring 框架中用于解决横切关注点的重要技术。通过理解其代理机制、AspectJ 与 Spring AOP 的关系,并掌握 `@EnableAspectJAutoProxy`, `@Aspect`, `@Pointcut`, `@Before`, `@After`, `@AfterReturning`, `@AfterThrowing` 等核心注解的使用,以及 `JoinPoint` 参数的应用,你可以有效地将日志、事务、安全等非核心业务逻辑从核心业务代码中剥离,使代码更加清晰、模块化、易于
2025-06-10 20:17:26
955
原创 一文搞懂Spring Bean的生命周期和AOP的关系
AOP 代理与 Bean 生命周期的关系可以概括为:创建时机: AOP 代理是在 Bean 初始化阶段的后期,具体是在 BeanPostProcessor 的 postProcessAfterInitialization 方法中被创建的。对象替换: 一旦代理对象被创建,它就会取代原始的 Bean 实例在 Spring 容器中被引用和管理。对初始化回调的影响: 标准的初始化回调(@PostConstruct, afterPropertiesSet, init-method)通常在原始 Bean 上
2025-06-10 20:12:08
900
原创 一文搞懂:Node.js、Vite、Vue、npm、JS之间的关系!!
本文梳理了JavaScript从前端到全栈发展的技术生态链:1)JavaScript最初作为浏览器脚本语言,依赖浏览器API实现交互功能;2)Node.js扩展了JS运行环境,使其具备服务器端开发能力;3)npm作为包管理器,构建了庞大的模块共享生态;4)Vite等构建工具解决前端工程化问题,提升开发效率;5)Vue等UI框架专注于视图层开发。整个过程展现了现代Web开发的技术栈协作关系:Node.js提供基础运行环境,npm管理依赖,构建工具处理代码编译,框架实现业务逻辑,最终形成完整的开发体系。
2025-06-06 17:17:08
1869
1
原创 基于Redis+JWT+EasyCaptcha验证码的登录全流程
基于JWT+EasyCaptcha的登录流程实现了一套安全高效的身份认证系统:前端首先请求验证码接口获取Base64编码的验证码图片和唯一UUID(验证码文本存入Redis,5分钟有效期);用户提交登录时,服务端校验验证码(UUID匹配且删除防复用)后,通过BCryptPasswordEncoder验证数据库中的加密密码;验证通过后使用JJWT生成含用户名的Token(HS256算法签名,1小时有效期);后续请求通过Authorization头的Bearer Token由Spring Security过滤器
2025-06-06 13:44:35
704
原创 5.C语言期末速成之——数组
当你需要存储多个相同类型的数据时,C语言的数组是非常有用的数据结构。数组可以看作是一个有序的集合,它使得处理大量数据变得更加简便。通过一维数组、二维数组和字符数组,你可以轻松地处理大量数据,使代码更加有组织、高效。对于更复杂的应用,数组为数据的组织和访问提供了有力的工具。二维数组是数组的数组,它可以看作是一个表格,有行和列。一维数组是一组按顺序排列的相同类型的元素,可以通过索引访问每个元素。数组的索引从0开始,逐次递增。字符数组是一维数组的特殊形式,通常用于存储文本数据(字符串)。字符串实际上是以空字符。
2023-08-13 18:10:54
202
原创 4.C语言期末速成之——循环结构程序设计
当编写程序时,我们常常需要重复执行某些操作,例如处理一系列数据、创建重复的模式等。循环适合于已知循环次数的情况。它包含一个初始化步骤、一个条件判断以及每次循环后执行的步进操作。循环是基于条件判断的,只有当条件为真时,循环体内的代码才会执行。循环在开始之前会检查条件。在选择使用循环结构时,要根据具体情况选择适合的循环类型,并根据循环内部的逻辑需求使用。循环首先执行循环体内的代码,然后检查条件是否为真。在循环内部使用,可以在满足特定条件时提前终止循环。在循环内部使用,可以跳过当前迭代,继续下一次迭代。
2023-08-13 18:06:14
163
1
原创 3.C语言期末速成之——选择结构程序设计
在C语言中,你可以使用条件运算符,就像是在做抉择。比如,你想知道你的年龄和朋友的年龄是否相同。想象你在写程序,需要根据某个条件来判断是否执行某些操作。当您在C语言中需要根据不同的条件执行不同的操作时,可以使用选择结构来进行条件判断。想象你在玩游戏,不仅要看你的分数高不高,还要看你是否在前三名。在C语言中,你可以在。条件运算符用于在一个表达式中进行条件判断,根据条件的真假返回不同的值。语句,就像是在不同的选项之间切换,根据不同的情况执行不同的操作。语句用于执行条件判断操作,如果条件为真,则执行指定的代码块。
2023-08-13 18:00:05
192
1
原创 2.C语言期末速成之——顺序程序设计
当介绍C语言的数据类型时,可以将其分为基本数据类型和派生数据类型两大类。基本数据类型是构建程序的基础,而派生数据类型是基于基本数据类型创建的,用于更复杂的数据结构和数据表示。以下是对C语言常见的数据类型的详细介绍:
2023-08-13 17:39:26
300
1
原创 1.C语言期末速成之——认识C语言(C语言大体介绍)
编程的代码就像是写一封电脑能够理解的信,我们使用一些特殊的字词和规则来编写代码。但是计算机并不能直接读懂我们写的代码,所以我们需要一个“翻译官”,这个翻译官就是编译器。编译器会把我们写的代码翻译成计算机能够执行的指令。C语言是一个强大且广泛使用的编程语言,通过理解它的基础概念和语法,你将能够进入编程的世界,并逐步掌握更高级的技术。这只是C语言的冰山一角,还有很多内容需要学习,比如更复杂的数据类型、条件语句、循环结构等。你可以阅读一些入门的C语言教程,参考一些示例代码,逐步扩展你的知识。
2023-08-13 17:32:25
229
1
原创 15.C++期末速成之——STL(完结)
C++的STL(标准模板库)是C++标准库中的一个重要组成部分,它提供了一组通用的数据结构和算法,用于处理常见的数据操作。STL的设计使用了模板,因此它是泛型的,可以适用于不同类型的数据。STL主要包括以下三个组件:容器(Containers)、算法(Algorithms)和迭代器(Iterators)。
2023-08-10 17:28:32
310
1
原创 14.C++期末速成之——命名空间和异常处理
当我们编写复杂的C++程序时,可能会遇到名称冲突的问题,也可能需要处理程序中可能出现的异常情况。C++的命名空间和异常处理是两个非常重要的特性,它们分别用于解决这些问题。
2023-08-10 17:27:04
113
1
原创 13.C++期末速成之——泛型和模板
通过泛型和模板,我们可以编写适用于多种数据类型和数据结构的通用代码,提高了代码的效率和可维护性。同时,C++标准模板库(STL)也提供了大量现成的泛型容器和算法,使得编写高效、健壮的程序变得更加容易。C++的标准模板库是一个重要的泛型库,提供了许多通用的数据结构(如向量、列表、映射等)和算法(如排序、查找等)。模板是C++中用于实现泛型编程的一种机制。它允许我们编写通用的代码模板,在使用时根据具体的数据类型生成对应的具体代码。函数模板允许我们定义通用的函数,其中的某些类型或参数可以被替换为泛型类型或参数。
2023-07-31 20:41:05
107
1
原创 12.C++期末速成之——文件操作
C++的文件操作允许我们读取和写入文件,这对于保存数据、读取配置文件或进行持久化存储非常有用。文件操作主要涉及到(输入文件流)和(输出文件流),它们分别用于从文件中读取数据和向文件中写入数据。
2023-07-31 20:37:45
97
1
原创 11.C++期末速成之——IO流
C++的IO流是用于输入和输出操作的机制。IO流可以与控制台、文件、网络等交互,是C++中处理输入输出的重要工具。(输入流)和(输出流)。这两个类分别对应输入和输出操作,而且它们都是通过和运算符来进行操作的。C++的IO流库包含在头文件中。
2023-07-31 20:35:26
103
1
原创 10.C++期末速成之——面向对象
C++是一种面向对象的编程语言,面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,通过将数据和操作封装在对象中,以模拟现实世界的实体和交互,从而更加有效地组织和管理代码。
2023-07-31 20:33:08
181
1
原创 9.C++期末速成之——字符串
C++的字符串是用于存储和操作字符序列的数据类型。字符串在C++中是一种常用的数据类型,用于处理文本数据。C++标准库提供了类来支持字符串操作,提供了许多成员函数和运算符重载,使得字符串的处理更加方便和高效。
2023-07-31 20:28:33
118
2
原创 8.C++期末速成之——函数
函数的定义包括函数的返回类型、函数名称、参数列表和函数体。// 函数定义返回类型 函数名(参数列表) {// 函数体,执行特定的任务。
2023-07-31 20:24:12
100
1
原创 7.C++期末速成之——Vector容器
std::vector是C++中最常用的容器之一,它提供了一个动态大小的数组,能够自动调整大小,并提供了许多便利的成员函数,使数据的插入、删除和访问变得非常方便。
2023-07-31 20:19:57
122
2
原创 6.C++期末速成之——二维数组
C++的二维数组是一种包含多行和多列的数据结构,可以看作是数组的数组。二维数组在C++中被广泛用于表示矩阵、表格和图像等具有二维结构的数据。二维数组的声明和访问有些类似于一维数组,但需要指定两个维度:行和列。
2023-07-31 20:14:48
126
1
原创 5.C++期末速成之——数组
C++中的数组是一种存储固定大小元素集合的数据结构。数组中的每个元素都必须是相同的数据类型,并且可以通过索引访问。数组的大小在创建时指定,并且无法更改。要创建一个数组,需要指定数组的数据类型和大小。这将创建一个名为myArray的整数数组,它可以存储5个整数。要访问数组中的元素,可以使用索引。在C++中,数组的索引从0开始,因此第一个元素的索引为0,第二个元素的索引为1,以此类推。在这个例子中,我们将值10、20和30分配给数组中的前三个元素。然后,我们将第二个元素的值(20)赋值给变量x。
2023-07-31 20:12:13
119
2
原创 4.C++期末速成之——语法结构
在main函数中或其他函数中,可以声明和定义变量。声明告诉编译器变量的名称和数据类型,定义还为变量分配内存。int num;// 声明一个整型变量num// 声明并初始化一个整型变量countC++程序可以定义函数,将代码块封装在函数中,以便重复使用。
2023-07-31 20:09:30
154
1
原创 3.C++期末速成之——变量
C++的变量提供了在程序中存储和操作数据的一种有效方式。了解变量的声明、初始化、作用域和数据类型等基本概念对于编写C++程序至关重要。变量必须指定其数据类型以定义存储数据的类型。在使用变量之前,必须先声明它。声明变量告诉编译器变量的名称和数据类型,以便在编译时分配适当大小的内存。变量的作用域是指变量在程序中可见和可访问的范围。C++中变量的作用域由其声明的位置决定。变量的初始化是在声明时为变量赋予一个初始值。未初始化的变量将包含一个随机值。关键字可以定义常量变量,一旦赋值,常量的值不能被修改。
2023-07-23 19:52:22
145
1
软件设计体系结构+设计模式 全课件PPT,所有设计模式PPT和设计风格PPT及设计原则PPT
2024-01-31
web课程设计:HTML+css+js,轮播图,三个精心设计的界面,一个简洁优美的主页 主题是AI的一个导航网站
2024-01-31
飞机大战 - Java FX入门级小游戏 - 帮你快速熟悉Java FX
2023-08-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅