- 博客(188)
- 收藏
- 关注
原创 MySQL 全详解:从入门到精通的实战指南
最原始的计算器只是卡片输入,卡片输出,计算机只有计算能力,根本就没有数据库;后来随着发展,人人都能支付起一台电脑,想在计算机上衍生出来一些娱乐,那么此时存储就成了计算机的一大难题。像记事本,world等原始存储数据的软件,慢,乱且不方便不安全;于是一些小型的数据库软件应运而生。数据库研究出来就是为了管理数据而生,具备增删改查能力,并且能够保障断电后仍存储(也就是数据本质存储在硬盘中)但是在国内,PostgreSQL的应用流行度并比不过MySQL(尤其是阿里)
2025-07-27 20:56:06
466
原创 Spring Cloud 详解与搭建全攻略
💡如果排查了上面所有提到的可能出错的问题,并且项目成功启动了,但是端口号显示的并不是自己设置的,那么只能是因为nacos中yaml中的格式缩进写错了。Eureka(Spring Cloud 原生)、Nacos(注册 + 配置双中心)、Consul(强一致性)、Zookeeper(Dubbo 常用)Spring Cloud Gateway(异步高性能)、Zuul(老牌同步网关)、Kong(多语言支持)异步:RabbitMQ(可靠消息)、Kafka(高吞吐)、RocketMQ(电商常用)
2025-07-27 18:46:33
955
原创 使用Netty搭建一个网络聊天室
功能复杂:要处理 “用户访问网页→返回 HTML”“解析 HTTP 参数”“WebSocket 握手”“消息广播” 等多环节,需分层解耦(MVC 将 “接收请求”“处理逻辑”“返回页面” 分开),否则代码会混乱。功能单一:主要是 “连接服务器 + 收发消息 + 显示 UI”,逻辑线性(用户操作→调用 Netty 发送→接收消息→更新 UI),无需处理 HTTP 请求、路由、页面跳转等复杂逻辑。- 需划分控制层(接收请求)、服务层(处理业务)、视图层(返回页面)(如客户端随时发消息,服务端随时推送广播)。
2025-07-26 21:14:30
887
原创 深度解析 I/O:BIO、NIO、AIO 大揭秘
read()由系统完成,但由应用触发从上面这个简单的例子中也可以看出:整个过程中,I/O(数据从磁盘到内存的传输)是 “”,它本身”,必须。I/O(输入 / 输出)的核心是“数据在不同设备 / 空间之间的传输”(比如内存与磁盘、内存与网卡、内存与键盘等)。但这种传输不会 “自动发生”,必须由某个主体(几乎都是应用程序)触发 —— 就像 “水不会自己从水箱流到杯子里”,必须有人打开水龙头(应用程序发起请求),水管(操作系统)才会把水(数据)送过来。
2025-07-26 20:54:01
769
原创 SQL 调优第一步:EXPLAIN 关键字全解析
查询块 = 语句树中每个独立 SELECT 的小节点。EXPLAIN 的 id 就是给这些节点按出现的先后顺序编号。场景示例包含几个查询块12(外层 1,子查询 1)2(每个 UNION 分支 1)2(派生表 1,外层 1)
2025-07-20 16:55:09
804
原创 RabbitMQ:解锁高效消息传递的密码[特殊字符]
1.路由键(Routing Key)--消息的固有属性是消息自带的一个字段,在创建/发布消息时由生产者指定,是消息本身的属性之一。相当于写在信封上的“收件人线索”,消息一出生就带着它。2.绑定键(Binding Key)--交换机侧的路由规则不是消息的一部分,而是队列在绑定到交换机时设立的匹配规则。相当于“邮局分拣员”手里的“收件条件表”,用来决定哪些信封(消息)可以放进哪个投递箱(队列)。DLX,全称为,死信交换器,死信邮箱。当消息在一个队列中变成死信 (
2025-07-20 16:14:25
1412
原创 消息队列:数字化通信的高效纽带
JMS 即Java 消息服务规范,它定义了一套标准 API,让不同应用组件可以把消息发送到“消息中间件”,再由中间件异步地递送给接收方。核心作用:解耦、可靠、异步。
2025-07-19 20:47:56
960
原创 线程池--高效并发编程的“秘密武器”
可以发现上面几种线程池都具备面临OOM的缺点,所以某种意义上,上面三种线程池都不是很推荐,最好还是根据不同的业务场景自己编写合适的线程池,还可以添加业务逻辑。
2025-07-18 13:57:58
1266
2
原创 ThreadLocal内部结构深度解析
ThreadLocal是Java中一个非常重要且常用的线程局部变量工具类,它,而不是,解决了多线程环境下变量共享的线程安全问题。下面我将从多个维度深入分析ThreadLocal的内部结构和工作原理。
2025-07-14 23:41:15
310
原创 进程、线程与协程:现代并发编程的核心概念
操作系统里同时存在多个正在运行的进程,它们有各自独立的内存、文件句柄、CPU 时间片。形象比喻像同时打开 Word、Photoshop、网易云音乐——三个软件互不干扰,哪怕其中一个崩溃,另两个还能正常工作。单核一次只能跑一条指令,但操作系统通过快速切换进程,让用户感觉“同时”开了浏览器、音乐、QQ。【注】多进程和计算机多核的发展并非是一个概念,多进程的概念远远早于多核,多核的发展对于多进程只是锦上添花。特性进程线程协程隔离性完全隔离共享内存共享内存创建开销大中等极小切换开销。
2025-07-14 21:54:14
835
原创 深入虚拟线程测试--代码为证
在上一篇文章中,详细介绍了有关虚拟线程的介绍,创建以及和传统多线程之间的简单对比;在本篇文章中在实际代码角度逐一测试虚拟线程和传统多线程之间的各种性能差别:深入分析---虚拟线程VS传统多线程-CSDN博客把“线程”变成和对象一样轻,可以随手开几十万甚至上百万条并发任务,而不用担心内存被栈吃光、CPU 被调度拖垮。虚拟线程引进本来就是为了解决。
2025-07-14 16:33:06
837
原创 设计模式深度解析:单例、工厂、适配器与代理模式
设计模式是软件开发中解决常见问题的可复用方案。本文将深入探讨四种常用的设计模式:单例模式、工厂模式、适配器模式和代理模式,分析它们的原理、使用场景、优缺点,并提供实现代码示例。
2025-07-13 21:33:49
811
原创 深入分析---虚拟线程VS传统多线程
把“线程”变成和对象一样轻,可以随手开几十万甚至上百万条并发任务,而不用担心内存被栈吃光、CPU 被调度拖垮。虚拟线程引进本来就是为了解决。
2025-07-13 21:04:02
930
原创 HashMap的get与put流程源码深度解析
计算哈希值:通过hash()方法计算key的哈希值初始化检查:如果table为空,则调用resize()初始化定位桶位置:通过(n-1) & hash计算数组下标(等价于hash % n,但效率更高--位运算比取模快处理冲突如果该位置为空,直接插入新节点如果key已存在,则覆盖value如果是树节点,调用红黑树的插入方法如果是链表,遍历链表并在尾部插入树化检查:链表长度≥8时可能转为红黑树扩容检查:size超过threshold则扩容计算哈希值:与put相同的hash()方法定位桶位置:同样的。
2025-07-09 23:05:09
536
原创 深入解析Java中的“128陷阱“:Integer缓存机制源码分析
128陷阱”是Java中的一道经典面试题,其中涉及Integer中的缓存机制知识,下面从源码角度解析一下这个问题。
2025-07-08 22:10:12
417
原创 逆向工程(mybatis版本&mybatis-plus版本)
逆向工程(Reverse Engineering)是一种通过对产品、系统或软件的成品进行分析,从而推导出其设计原理、实现方法、技术细节等过程的方法。其核心思想是从现有的成果出发,反向探索其开发过程中的关键要素。
2025-03-31 11:12:33
2140
原创 MyBatis-Plus(Ⅵ)插件
小王 也在操作,取出的商品价格也是100元。小李将价格加了50元,并将100+50=150元存入了数据 库;小王将商品减了30元,并将100-30=70元存入了数据库。一件商品,成本价是80元,售价是100元。,小王保存价格前,会检查下价格是否被人修改过了。如果被修改过了,则重新取出的被修改后的价格,150元,这样他会将120元存入数据库。几分钟后,这个商品很快出售了1千多件商品,老板亏1 万多。,小李取出数据后,小王只能等小李操作完之后,才能对价格进行操作,也会保证最终的价格是120元。
2025-03-27 19:07:13
1283
原创 MyBatis-Plus(Ⅴ)条件构造器和常用接口
语法结构描述示例基本语法定义 Lambda 表达式的基本形式或无参数无参数的 Lambda 表达式");单参数单个参数的 Lambda 表达式或x -> x * x(类型推断)多参数多个参数的 Lambda 表达式有返回值Lambda 表达式有返回值无返回值Lambda 表达式无返回值");带大括号多条语句时使用大括号。
2025-03-27 17:16:19
1035
原创 项目测试注解一览
专门用于测试 Web 层(通常是 Controller),当你只想测试 Controller 而不加载 Service 和 Repository 层时使用。:适用于进行集成测试,当需要启动完整的 Spring Boot 应用上下文来测试多个组件之间的交互时使用。:当你需要在测试时模拟某个 Bean 的行为,替换掉真实的 Bean 实现时使用。:在测试数据库操作时,希望每次测试结束后自动回滚数据,保持数据库状态时使用。:为不同环境提供不同的测试配置,指定要加载的配置文件时使用。
2025-03-24 22:32:05
580
原创 MyBatis-Plus(Ⅲ)IService详解
在前面两篇文章中已经对MyBatis-Plus有关Dao层的封装文件BaseMapper,这篇文章就它封装的service层IService进行解读和使用演示。
2025-03-24 20:40:03
1764
原创 MyBatis-Plus(Ⅱ)基本CRUD
如果需要添加自定义的通用Service方法,建议创建自己的接口,并让它继承MyBatis-Plus提供的基类,这样做可以保持代码的扩展性和灵活性。IServiceMyBatisPlus中有一个接口IService和其实现类,封装了常见的业务层逻辑,所以现在我们想创建service层的数据,只用将接口的实现类分别继承这两个封装类即可。
2025-03-23 11:32:53
1244
原创 MyBatis-Plus详解(Ⅰ)
在(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatis-Plus提供了通用的Mapper和Service,可以在不编写任何SQL语句的前提下,快速的实现单表的增删改查(CURD),批量,逻辑删除,分页等操作。只要把MyBatis-Plus的特性到优秀插件,以及多数据源的配置进行详细讲解。
2025-03-23 10:53:10
1383
原创 SpringBoot 第三课(Ⅰ) 数据层开发
首先搭建一个SpringBoot框架,参见:SpringBoot(一)--搭建架构5种方法_springboot框架搭建-CSDN博客Spring Boot 是基于 Spring 框架,以约定优于配置、自动配置为核心,可快速构建独立运行的应用,为微服务等开发提供便利的开发框架。前面已经对SSM(Spring,SpringMVC,MyBatis)每个框架做了讲解,SpringBoot就是基于这个框架一个更简单、更有利于开发。_springboot框架搭建。
2025-03-21 13:08:23
836
原创 SpringBoot配置文件加载优先级
在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。: 命令行参数具有最高的优先级。SpringBoot项目被启动时,可以通过命令行传递参数,这些参数将覆盖其他所有配置源中的相同属性。: 环境变量的优先级高于配置文件。在操作系统中设置的环境变量可以被Spring Boot应用读取,并用于覆盖配置文件中的属性。: 通过Java的-D参数设置的系统属性也具有较高的优先级,可以覆盖配置文件中的属性。如果在配置类上使用了。
2025-03-20 23:35:24
514
原创 为什么在外置容器时要保证打包方式是war包?
在传统的Java Web应用开发中,当使用外置容器(如Tomcat、Jetty等)部署应用时,通常需要将应用打包为文件。
2025-03-20 18:13:14
967
原创 SpringBoot 第二课(Ⅰ) 整合springmvc(详解)
Spring Boot对Spring MVC进行了自动配置,简化了Spring MVC的使用。它通过自动配置类(如)和注解扫描,使得开发者无需手动配置大量的Spring MVC相关组件,如、视图解析器、消息转换器等。同时,Spring Boot还提供了扩展机制,允许开发者根据业务需求进行自定义配置。
2025-03-19 18:59:46
1300
原创 整合Thymeleaf
在传统的 Web 开发模式下,服务器端负责生成完整的 HTML 页面并返回给客户端。而Thymeleaf 可以方便地将 Java 对象中的数据动态填充到 HTML 模板中,实现页面的实现下面从SpringBoot项目整合引入thymeleaf和Thymeleaf的常用标签进行讲解。
2025-03-17 17:06:11
967
原创 SpringBoot 第一课(Ⅱ)配置文件注入
需要为每个属性单独指定,适用于简单的配置或单个属性的注入。属性上,Spring Boot 会处理这种命名风格的差异。使用@ConfigurationProperties注入。),而松散绑定支持这三种名字互通,就比如配置文件里的。允许一次性注入整个对象,适用于复杂的配置结构。Java中常见命名规则有驼峰命名法(实现上面操作后,就可以通过访问“使用注解时,在处理复杂情况时,
2025-03-16 09:45:50
1144
原创 SpringBoot 第一课(Ⅰ)--框架结构
在前两篇文章中已经对SpringBoot的配置和一些基础概念做了详细讲解,在这篇文章中将正式开始对SpringBoot的学习。
2025-03-15 17:56:10
1487
原创 如何用终端运行一个SpringBoot项目
在项目开发阶段,为了能够快速测试一个SpringBoot项目的执行结果,就可以采用终端(黑窗)运行查看,因为我们不能要求每一个客户都安装idea并且适配我们的项目版本。
2025-03-13 23:43:26
783
原创 SpringBoot 入门基础
简化Spring应用开发的框架:Spring Boot是一个用于简化Spring应用开发的框架,它提供了快速构建、开箱即用的特性,使得开发人员可以更快速地搭建和部署应用程序。整个Spring技术栈的一个大整合:Spring Boot整合了Spring各项功能,提供了默认配置,使得开发者无需定义样板化的配置,简化了Spring应用的初始搭建以及开发过程。J2EE开发的一站式解决方案。
2025-03-13 23:09:54
1146
原创 SpringBoot(一)--搭建架构5种方法
Spring Boot 是基于 Spring 框架,以约定优于配置、自动配置为核心,可快速构建独立运行的应用,为微服务等开发提供便利的开发框架。前面已经对SSM(Spring,SpringMVC,MyBatis)每个框架做了讲解,SpringBoot就是基于这个框架一个更简单、更有利于开发。
2025-03-09 23:22:54
3787
2
原创 SSM项目的基本目录结构
一个完整的SSM(Spring+SpringMVC+MyBatis)项目理应包含以下几个目录结构:上面是一个普通的maven项目。
2025-03-03 10:54:25
975
原创 session&cookie 2.0(示例篇)
本质上就是记录本次的访问请求时间并且创建一个具有一定寿命的cookie;然后遍历网站中所有的cookies,然后筛选出在寿命范围内(就是尚且存活)且距离本次访问时间最近的一次请求,如果没有,就会显示第一次访问。
2025-02-28 19:22:11
325
原创 请求对象和响应对象
Web服务器收到客户端的HTTP请求后,会为每次请求创建一个request对象和一个response对象。request对象用于获取客户端提交的数据,response对象用于向客户端输出数据。
2025-02-28 19:00:26
888
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人