自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 <一文超全!!> -- MySQL

MySQL数据库核心知识摘要 本文系统介绍了MySQL数据库的核心概念与技术要点: 数据库演进:从早期卡片机、纸质账簿到现代数据库系统,重点对比了Access、SQL Server等小型数据库,指出MySQL因开源免费且经受阿里双11高流量考验而被广泛采用。 存储引擎:详细解析MyISAM与InnoDB的区别,包括事务支持、锁机制(表锁vs行锁)、崩溃恢复等特性,强调5.5版本后InnoDB成为默认引擎。 索引机制:深入讲解B+树索引结构、聚簇/非聚簇索引差异,覆盖索引原理及避免回表的方法,列举10种导致索

2025-07-21 21:00:42 1029 2

原创 MySQL中explain关键字你知道多少?

会知道,先是从SC表中取出一行数据,然后再S表查找匹配的数据,我们观察,SC中取出cid和S表中的id比较,毫无疑问因为id是S表中的主键(不重复),所以只能出现一个id与cid的值相同。所以是满足条件 S 表的。表示当SQL中有一个地方需要对一些数据进行排序的时候,优化器找不到能够使用的索引,所以只能使用外部的索引排序,外部排序就不断的在磁盘和内存中交换数据,这样就摆脱不了很多次磁盘IO,以至于SQL执行的效率很低。但是,由于索引的底层是B+Tree实现的,他的叶子节点本来就是有序的,这样的查询效率高。

2025-07-20 14:18:18 1011

原创 <一文超详细>消息队列以及RabbitMQ

消息队列技术解析与实践应用 本文系统介绍了消息队列的核心概念、技术实现及实践应用。主要内容包括: 消息队列基础 本质:异步通信的中间件容器 三大优势:异步提升性能、流量削峰、系统解耦 典型问题:系统可用性降低、复杂性增加、一致性问题 JMS与AMQP对比 JMS:Java专属API规范,支持点对点和发布订阅模型 AMQP:跨语言协议标准,提供五种路由机制 核心差异:协议层设计vs API规范,二进制传输vs复杂消息类型 RabbitMQ深度实践 核心组件:生产者/消费者、交换机(4种类型)、消息队列 可靠性

2025-07-19 21:00:57 944

原创 一文带你理解ThreadLocal的原理结构

ThreadLocal是Java实现线程局部变量的核心类,通过为每个线程提供独立变量副本来实现线程隔离。其底层原理依赖Thread内部的ThreadLocalMap结构,以ThreadLocal对象为键存储变量副本。使用时需注意内存泄漏风险:当ThreadLocal对象被回收后,其对应的值仍可能被线程强引用而无法释放,尤其在复用线程的场景下。为避免泄漏,应在使用后及时调用remove()方法清理ThreadLocalMap中的键值对。文中通过代码示例展示了ThreadLocal的基本用法和清理机制。

2025-07-14 21:58:15 1000

原创 并发编程核心概念详解:进程、线程与协程的本质与差异

进程、线程与协程是计算机中的三种任务执行机制。进程是资源分配的最小单位,拥有独立内存空间;线程是任务调度的最小单位,共享进程资源但有自己的栈;协程是更轻量级的用户态线程,由程序自身控制切换,适合高并发场景。进程间通信需借助IPC机制,线程间可直接共享资源但需处理竞争问题,协程通过协作式调度实现高效执行。三者各有特点:进程隔离性强但开销大,线程轻量但会相互影响,协程高效但需主动让出控制权。开发者应根据场景选择合适的并发模型。

2025-07-14 15:19:56 1158

原创 一文了解Java四种常见的设计模式:单例、工厂、适配器、代理

本文介绍了四种常见的设计模式:1. 单例模式:包括懒汉式(双重检查锁优化)和饿汉式(静态内部类优化),确保类只有一个实例。2. 工厂模式:封装对象创建过程,提高代码可维护性和扩展性,包括简单工厂的实现与优缺点分析。3. 适配器模式:通过中间件转换不兼容接口,以媒体播放器为例展示了如何实现格式兼容。4. 代理模式:通过中介控制对象访问,以房产中介为例演示了如何在访问前后添加额外处理。这些模式分别解决了对象创建、接口适配和访问控制等问题,是提高代码质量的重要工具。

2025-07-13 19:35:30 1070

原创 Java21虚拟线程深度解析:被称为 “并发革命” 的轻量级线程到底强在哪?

Java 21引入的虚拟线程(Virtual Threads)带来并发编程革命性突破。通过餐厅经营类比,单线程模式效率低下,传统线程池存在切换开销,而虚拟线程采用"共享厨师+灵活排班"机制,仅需少量核心线程即可高效处理海量IO任务。测试显示,在16核CPU上处理1万个IO任务时:单线程耗时154秒,传统线程池1.6秒,虚拟线程仅65毫秒,性能提升2383倍。虚拟线程通过轻量级调度和IO等待时释放CPU的特性,完美解决了传统线程模型的内存开销大、切换成本高和并发能力受限等问题。

2025-07-13 17:08:50 591

原创 深入理解JVM的垃圾收集(GC)机制

本文介绍了垃圾收集(GC)的基本概念和实现原理。主要内容包括:1.垃圾判定方法:引用计数法(存在循环引用问题)和可达性分析(通过GC Roots判断对象是否存活);2.分代收集理论:将堆内存分为新生代(存活时间短)和老年代(存活时间长),采用不同回收策略;3.三种垃圾回收算法:标记-清除(简单但有碎片)、标记-复制(适合新生代)、标记-整理(适合老年代);4.Stop The World现象:垃圾回收时必须暂停用户线程,这对系统性能有重要影响。文章阐述了垃圾收集的关键问题和解决方案,为理解JVM内存管理机制

2025-07-11 18:08:35 965

原创 源码角度解析 --- HashMap 的 get 和 put 流程

本文深入分析了Java HashMap的get和put操作实现原理。HashMap采用数组+链表+红黑树结构,JDK8后引入红黑树优化性能。get操作通过hash计算索引,在桶中查找元素,涉及链表遍历或红黑树查询。put操作包含hash计算、冲突处理(链表/红黑树插入)和扩容机制。其中,当链表长度超过8且数组长度≥64时会转换为红黑树。文章从源码角度详细解析了key定位、冲突解决、树化条件等核心机制,揭示了HashMap高效实现键值存储的技术细节。

2025-07-09 21:00:37 787

原创 源码角度构建学习‘128陷阱‘

Java自动装箱机制中,Integer.valueOf()方法会缓存-128到127之间的整数对象。当数值在这个范围内时,直接返回缓存对象,超出范围则创建新对象。示例代码比较127和128时,前者因缓存返回同一对象(==比较为true),后者创建新对象(==比较为false)。建议使用equals()方法比较数值,该方法会实际比较int值而非对象引用。可通过JVM参数调整缓存上限,但默认范围是-128到127。

2025-07-09 16:13:45 292

原创 MybatisPlus(SpringBoot版)学习第八讲:多数据源 & MybatisX插件

适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等两个库:也可能是两个不同的库(一个MySQL,一个ORACAL库)目前我们就来模拟一个纯粹多库的一个场景,其他场景类似场景说明:我们创建两个库,分别为: mybatis_plus(以前的库不动)与mybatis_plus_1 (新建),将mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表,通过一个测试用例 分别获取用户数据与商品数据,如果获取到说明多库模拟成功。

2025-03-31 09:38:47 459

原创 逆向工程(Mybatis形式 & MybatisPlus形式)

把pom.xml 有关于Mybatis整合逆向工程的,mybatisSpringBoot依赖全部注释掉。正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。默认为false,就是把jdbc里面的基本数据类型是否进行成长。然后这个工具类会报错,因为没有那个依赖了。这个类就是MyBatis逆向工程的类,这个类需要一个集合.因为他的父工程里没有这个依赖,所以我们需要加个版本号。只是生成了最简单的,最后逻辑的实现就是反向拿取。加载所有的配置,也就是那个文件。包的后缀,false就行。

2025-03-31 09:10:05 1691

原创 MybatisPlus(SpringBoot版)学习第七讲:通用枚举

一、通用枚举表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举 来实现。

2025-03-30 17:28:14 257

原创 MybatisPlus(SpringBoot版)学习第六讲:插件(分页插件&乐观锁)

*** 根据年龄查询用户列表,分页显示* @param page 分页对象 ,xml中可以从里面进行取值 ,传递参数 Page 即自动分页 ,必须放在第一位* @param age 年龄注意!!分页的插件不要删掉,他是分页功能的前提。

2025-03-27 18:57:02 351

原创 MybatisPlus(SpringBoot版)学习第五讲:条件构造器和常用接口

Wrapper: 条件构造抽象类,最顶端父类: 用于查询条件封装,生成 sql 的 where 条件: 查询条件封装: Update 条件封装: 使用Lambda 语法:用于Lambda语法使用的查询Wrapper: Lambda 更新封装Wrapperctrl+h。

2025-03-27 18:50:15 645

原创 MybatisPlus(SpringBoot版)学习第四讲:常用注解

①同样以用户 ID 为例,假如我们一开始就规划了 10 个数据库表,可以简单地用 user_id % 10 的值来表示数据所属的数据库表编号, ID 为 985 的用户放到编号为 5 的子表中, ID 为 10086 的用户放到编号为 6 的子表中。因为是自动递增的,所以删除一条数据在增加,ID是后面的,会导致一个表里数据多,一个表少。首先是一个符号位, 1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负 数是1,所以id一般是正数,最高位是0。

2025-03-27 17:31:18 1148

原创 MyBatisPlus(SpringBoot版)学习第三讲:通用Service

说明:通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,泛型 T 为任意实体对象建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承Mybatis-Plus 提供的基类(如果父类的方法满足不了实际,就创建自己的service)官网地址:A3。

2025-03-23 21:05:54 1355

原创 整理使用Spring、SpringBoot测试的四种注解方式

目录1. JUnit纯单元测试代码解释2. Spring测试框架和JUnit结合(XMl配置)代码解释3. Spring测试框架与JUnit结合(注解配置)代码解释4. Spring Boot集成测试代码解释 JUnit 是 Java 开发中常用的单元测试框架。当对普通 Java 类进行单元测试且不依赖 Spring 容器时,可直接使用 JUnit 的 注解。单元测试重点在于验证单个类或方法的功能,要尽量减少对外部依赖的使用。代码解释 注解标记了 方法,表明这是一个测试方法。

2025-03-23 09:52:46 995

原创 MyBatisPlus(SpringBoot版)学习第二讲:基本CRUD

这是因为MyBatis-Plus在实现插入数据时,会默认基于。这里的foreach是lamda表达式的遍历语句。接口的一个方法,用于获取分页查询结果中的数据记录集合。中都已得到了实现,我们可以直接使用,接口如。是一个参数,表示集合中的每个元素。最终执行的结果,所获取的id为。

2025-03-23 09:08:34 875

原创 MyBatis-Plus(SpringBoot版)学习第一讲:简介&入门案例

(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatis-Plus提供了通用的Mapper和Service,可以在不编写任何SQL语句的前提下,快速的实现单表的增删改查(CURD),批量,逻辑删除,分页等操作。只要把MyBatis-Plus的特性到优秀插件,以及多数据源的配置进行详细讲解。愿景我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。

2025-03-22 22:04:16 1606

原创 SpringBoot第四站(2):整合MyBatis注解版 & 整合MyBatis配置文件

这个 MybatisConfig 配置类的主要作用是对 MyBatis 进行定制化配置,具体来说,它开启了 MyBatis 的下划线命名到驼峰命名的自动映射功能。<configuration> 元素里通常会包含数据库连接环境配置,映射器配置信息。MyBatis 获取到数据库自动生成的主键值后,会把这个值赋给 Java 对象的。的大部分配置,但对于一些复杂的配置,如自定义插件、拦截器等,还是需要使用。我们同样可以在mybatis的接口上不加@Mapper注解,通过。或者通过 Java 代码来配置。

2025-03-20 16:19:00 852

原创 SpringBoot第四站(1):数据层开发: 配置数据源,整合jdbcTemplate

statViewServlet方法的主要作用是配置并注册 Druid 监控页面的 Servlet,为访问 Druid 监控页面设置登录用户名、密码、允许访问的 IP 地址和拒绝访问的 IP 地址等参数。传统的方式是在对象内部创建依赖对象,而依赖注入则是将依赖对象的创建和管理交给外部容器,由容器将依赖对象注入到需要的对象中。常用的依赖注入的方式有构造函数的方法和通过setter方法注入,这里明显使用的是构造函数的方法注入依赖。是 Spring 提供的一个类,用于在 Spring 应用中注册 Servlet。

2025-03-20 16:00:07 1060

原创 springboot第三站(1) web开发引入

使用SpringBoot;1)、创建SpringBoot应用,选中我们需要的模块;2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3)、自己编写业务代码;自动配置原理?这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?xxx。

2025-03-18 20:43:28 1069

原创 SpringBoot第三站(4):配置嵌入式服务器&使用外置的Servlet容器

Servlet 监听器有多种类型,常见的有 ServletContextListener(用于监听 ServletContext 的创建和销毁)、HttpSessionListener(用于监听 HttpSession 的创建和销毁)、ServletRequestListener(用于监听 ServletRequest 的创建和销毁)等。由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。这样,当应用启动和关闭时,

2025-03-17 09:14:24 1159

原创 SpringBoot第三站(3):整合SpringMVC

学习springmvc和springboot的自动配置我们必须对springmvc的组件足够了解,起码知道怎么用。Springmvc的组件基本都被springboot来做了自动的配置。

2025-03-17 08:58:34 906

原创 Springboot第三站(2):thymeleaf

th:id替换idth:text文本替换th:utext支持html的文本替换th:object替换对象th:value属性赋值th:onclick点击事件th:each属性赋值th:if判断条件th:unless和th:if判断相反th:href链接地址th:switch多路选择 配合th:case 使用th:caseth:switch的一个分支布局标签,定义一个代码片段,方便其它地方引用th:include布局标签,替换内容到引入的文件。

2025-03-17 08:36:36 945

原创 Springboot学习-第二站 自动配置原理

Spring Boot在启动的时候从类路径下的META- INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;到这里,我们发现一顿操作以后最终是加载的META-INF/spring.factories文件,那么这个文件应该去哪里找呢,我们如果使用idea的话,那么请找到project下的External Libraries中的。

2025-03-16 09:28:03 933

原创 Springboot第一站: java开发框架与微服务

把SSM进行整合,完成了很多自动的工作,不需要去做繁琐的配置整合工作。简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;优点快速创建独立运行的spring项目以及与主流框架集成使用嵌入式的Servlet容器,应用无需打成war包,内嵌Tomcat(启动类启动后端口号是8080)Starters自动依赖和版本控制(修理工,既可以修空调,又可以修电视、洗衣机,修不同设备螺丝刀用的不同,如果一个一个做,一个一个准备。

2025-03-12 10:46:59 1017

原创 IDEA创建Springboot的五种方式

所有的Springboot项目打包方式目前都是jar目前没有办法创建1.8版本,进去可以改17版本:下面将介绍IDEA21版本的创建方式(因为IDEA17版本的从阿里云官网创建有问题,所以IDEA17版本用的是三种方式<通过spring.io官网创建,从spring.io官网搭建下载压缩包,创建普通MavenJava项目后需要什么加什么>)

2025-03-09 20:27:01 5140

原创 SSM框架整合

2. 在项目启动的时候,就去加载applicationContext.xml的配置文件,在web.xml中配置ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配置文件)。3. 在controller中注入service对象,调用service对象的方法进行测试。1. 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式。1.目的:在controller中能成功的调用service对象中的方法。

2025-03-09 08:55:24 967

原创 JavaEE基础之- 过滤器和监听器Filter and Listener

Ø Filter的三个方法:ü void init(FilterConfig):在Tomcat启动时被调用;ü void destroy():在Tomcat关闭时被调用;ü void doFilter(ServletRequest,ServletResponse,FilterChain):每次有请求时都调用该方法;Ø FilterConfig类:与ServletConfig相似,用来获取Filter的初始化参数。

2025-03-02 23:14:08 1675

原创 EL表达式和JSTL标签

EL(Expression Language)是一门表达式语言,它对应。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。EL表达式的格式:${…},例如:${1+2}。在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式。(因为jsp的真身是Servlet,Servlet在java文件里)如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:\${1+2}。

2025-03-02 22:56:11 1140

原创 正则表达式

95|98|NT|2000)' 匹配"Windows 3.1"中的 "Windows",但不匹配"Windows 2000"中的"Windows"。=95|98|NT|2000)' 匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。序列"\\\\"匹配"\\","\\("匹配"("。3. 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

2025-03-02 22:34:04 8333

原创 ssm整合项目实现基础查询功能

1. 首先创建数据库创建表格(我使用的是mysql的可视化软件,可实现由鼠标操作)

2025-03-02 20:36:11 1040

原创 JavaEE基础之- ajax

要求为String类型的参数,预期服务器返回的数据类型。要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded","json"。同步 AJAX 是指在发起请求后,浏览器会暂停当前页面的其他操作,直到服务器返回响应结果,才会继续执行后续的 JavaScript 代码。

2025-03-02 17:34:39 1499

原创 JavaEE基础之-JSON

Ø JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)Ø JSON 是轻量级的文本数据交换格式Ø JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。ØJSON 具有自我描述性,更易理解。

2025-03-02 17:17:31 594

原创 JavaEE基础之-session&cookie

Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

2025-02-28 21:09:40 1200

原创 JavaEE基础之-请求对象request与响应对象response

response对象的功能分为以下四种:Ø 设置响应头信息;URL=xxxx”);Ø 发送状态码;Ø 设置响应正文;;;

2025-02-28 10:26:11 1101

原创 JavaWeb三大组件之一-Servlet

因为现在我们的请求都是基于HTTP协议的,所以我们应该专门为HTTP请求写一个Servlet做为通用父类。由上图我们可以看出,以后再写Servlet 可以直接继承HttpServletØ Servlet 一个标准Ø GenericServlet 是Servlet接口子类Ø HttpServlet 是GenericServlet子类,一个专门处理Http请求的Servlet。

2025-02-21 19:56:56 1134

原创 JavaEE基础之- jsp

Ø JavaWeb早期:applet + servletØ JavaWeb中期:servlet,在servlet中需要写大量的Ø JavaWeb后期:JSP,只需要在html中直接添加动态信息,即java代码片段就可以了。服务器会把所有的<html>语句转换成html + java代码 + JSP动态标签 = jsp在静态页面上添加动态信息就可以了,如果是Servlet还需要一行一行的输出。

2025-02-20 22:23:41 1019

空空如也

空空如也

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

TA关注的人

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