自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用 Jasypt 加密数据库名和密码

Jasypt (Java Simplified Encryption) 是一个 Java 库,提供了简单易用的加密功能,可以安全地加密配置文件中的敏感信息,如数据库凭据。Gradle2. 生成加密后的密码方法一:使用命令行工具方法二:使用 Java 代码3. 配置 Spring Boot 应用application.propertiesapplication.yml4. 生产环境密钥管理方法一:通过环境变量方法二:通过系统属性

2025-10-19 22:10:42 246

原创 使用线程池更新阅读次数

这段代码通过线程池异步处理和Redis 缓存的结合,高效解决了高并发场景下文章浏览量更新的性能问题,同时通过初始化逻辑保证了数据一致性,是典型的 “异步 + 缓存” 优化方案,广泛应用于博客、电商等需要统计访问量的系统。

2025-10-16 21:36:54 349

原创 ThreadLocal 内存泄漏

ThreadLocalMap 中 Value 的强引用无法被切断,且线程长期存活。解决的核心是 “使用完必清理”—— 通过finally块强制调用remove(),确保 Value 能被 GC 回收。只要遵循这个原则,ThreadLocal 就是安全的线程私有数据存储工具,广泛应用于 “线程隔离” 场景(如 Spring 事务管理、用户上下文传递等)。

2025-10-16 21:26:53 273

原创 统一异常处理

这段代码是 Spring 项目中实现全局异常处理的基础框架,通过和实现了异常的统一捕获和响应,确保了系统异常处理的规范性、安全性和可维护性。实际开发中可根据业务需求扩展,实现更精细的异常分类处理。

2025-10-16 19:57:50 320

原创 BeanUtils

无论哪个库的BeanUtils,核心能力都围绕JavaBean 的属性操作属性拷贝:将一个对象的属性值复制到另一个对象(同名属性)。属性访问:通过属性名动态获取或设置对象的属性值。类型转换:在属性拷贝或设置时自动处理不同类型之间的转换(如 String 转 Integer)。对象比较:比较两个对象的属性值是否相等。BeanUtils是对象属性操作的实用工具,Spring 版本轻量高效,适合简单拷贝场景;Apache 版本功能丰富但性能较差,适合需要复杂类型转换的场景。

2025-10-16 19:42:55 471

原创 优雅的缓存?

AOP 自定义缓存的核心思想是:通过切面(Aspect)拦截被特定注解标记的方法,在方法执行前先查询缓存,若缓存存在则直接返回;若缓存不存在,则执行原方法,再将结果存入缓存。整个过程对业务代码完全透明。自定义缓存注解:标记需要缓存的方法,可配置缓存过期时间、缓存名称等参数。切面类(Aspect):通过 AOP 环绕通知(@Around)拦截方法调用,实现缓存的读取、写入逻辑。缓存容器:通常使用 Redis、Caffeine 等作为底层缓存存储(本文以 Redis 为例)。

2025-10-16 19:03:34 660

原创 优雅的日志?

创建自定义日志注解定义 AOP 切面类,编写日志记录逻辑在需要记录日志的方法上使用自定义注解配置 AOP 使其生效/*** 自定义日志注解*/@Target({ElementType.METHOD}) // 注解只能用于方法上@Retention(RetentionPolicy.RUNTIME) // 注解在运行时有效@Documented // 生成文档/*** 操作模块*//*** 操作描述*/

2025-10-16 16:11:24 348

原创 DO、VO、DTO

在 Java 开发(尤其是分层架构)中,DOVODTO是用于区分数据载体的,它们的核心作用是,避免数据混乱和耦合。

2025-10-16 15:20:56 235

原创 用户密码加密(MD5 哈希计算)

在 Apache Commons Codec 中,md5Hex// 处理字符串(默认使用UTF-8编码转换为字节数组)// 处理字节数组// 处理输入流(如文件流)

2025-10-16 15:07:03 370

原创 MP如何分页?

当需要复杂 SQL(如多表联查、自定义 WHERE 语句)时,可通过 Mapper 接口自定义方法,配合IPage实现分页。步骤示例Mapper 接口:定义方法,参数为IPage<实体类>和条件参数// 方式 1:通过注解写自定义 SQL(简单联查)"${ew.customSqlSegment}") // ${ew.customSqlSegment} 自动拼接条件(来自 QueryWrapper)

2025-10-15 18:48:44 524

原创 JWT和token

【代码】JWT和token。

2025-10-15 15:42:44 220

原创 Mybatis动态语句

经常遇到很多按照很多查询条件进行查询的情况,比如智联招聘的职位搜索等。其中经常出现很多条件不取值的情况,在后台应该如何完成最终的SQL语句呢?动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

2025-10-11 15:32:01 592

原创 MyBatis多表映射

setting属性属性含义可选值默认值指定 MyBatis 应如何自动映射列到字段或属性。NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。FULL 会自动映射任何复杂的结果集(无论是否嵌套)。PARTIAL我们可以将autoMappingBehavior设置为full,进行多表resultMap映射的时候,可以省略符合列和属性命名映射规则(列名=属性名,或者开启驼峰映射也可以自定映射)的result标签!--开启resultMap自动映射 -->

2025-10-11 15:21:22 613

原创 MyBatis基本使用

数据输出总体上有两种形式:- 增删改操作返回的受影响行数:直接使用 int 或 long 类型接收即可- 查询操作的查询结果我们需要做的是,指定查询的输出数据类型即可!并且插入场景下,实现主键数据回显示!

2025-10-11 13:25:42 864

原创 springboot与spring MVC中的控制器

注解作用示例通用映射,可指定路径、HTTP 方法等专门处理 GET 请求(的简化)专门处理 POST 请求专门处理 PUT 请求(通常用于更新资源)专门处理 DELETE 请求(通常用于删除资源)核心作用:控制器是处理 HTTP 请求的入口,负责接收请求、调用业务逻辑、返回响应。Spring MVC:以为核心,可返回视图(传统 MVC)或数据(需),需手动配置 Web 组件。:以为核心(默认返回 JSON),通过自动配置简化开发,更适合前后端分离场景。

2025-10-10 21:39:13 871

原创 Spring Boot中Spring MVC各个组件的工作机制

通过自动配置简化基础组件(如映射器、适配器、转换器)的注册,通过注解驱动(如)快速绑定请求与处理逻辑,通过拦截器和全局异常处理器实现横切关注点。整个流程围绕 “请求→映射→解析→处理→响应” 的生命周期,各组件分工明确,既保留了 Spring MVC 的灵活性,又通过自动配置降低了使用门槛。

2025-10-10 21:15:15 713

原创 TCP与UDP

TCP 是 “可靠的连接主义者”:牺牲速度和灵活性,换取数据的绝对可靠,适合 “数据不能错” 的场景。UDP 是 “高效的无政府主义者”:牺牲可靠性,换取速度和低开销,适合 “延迟不能高” 的场景。实际应用中,二者并非对立关系,很多系统会结合使用(如 HTTP/3 基于 UDP 实现,但通过 QUIC 协议叠加了 TCP 的可靠性特性,兼顾实时性和可靠性)。

2025-10-10 20:41:31 649

原创 跨域请求CORS

浏览器的 “同源” 指的是两个 URL 的协议、域名、端口三者完全一致。与:不同源(协议不同,http vs https)。与:不同源(域名不同,主域 vs 子域)。与:不同源(端口不同)。当一个请求的发起源(如浏览器中当前页面的 URL)与目标资源的 URL不同源时,该请求即为跨域请求。页面(前端)向(后端 API)发起 AJAX 请求,因端口不同,属于跨域。跨域请求的本质是浏览器同源策略的限制,核心解决方案围绕 “绕开限制”(如 JSONP、代理)或 “告知浏览器允许跨域”(如 CORS)展开。

2025-10-10 20:02:11 345

原创 Tomcat优化

Tomcat 优化的核心是 “匹配业务场景低并发应用:重点优化 JVM 内存和基础配置。高并发 API 服务:启用 NIO2/APR 协议、优化线程池、结合 Nginx 负载均衡。静态资源多的应用:通过 Nginx 分离静态资源,启用 HTTP/2 和缓存。结合监控工具持续调优,才能实现 Tomcat 性能最大化。

2025-10-10 19:58:58 865

原创 TCP三次握手四次挥手

三次握手:通过三次交互确认双方收发能力正常,协商初始序列号,建立可靠连接,核心解决 “失效连接请求” 问题。四次挥手:因全双工特性,双方需分别关闭发送通道,通过四次交互确保数据传输完成,核心解决 “双向关闭” 的可靠性问题。这两个过程是 TCP “可靠性” 和 “连接导向” 特性的直接体现,也是理解 TCP 协议的基础。

2025-10-10 19:50:17 533

原创 Netty与Tomcat

Netty 是 “网络通信的工具包”:专注于底层网络通信的高效处理,适合需要自定义协议、追求极致性能的场景(如中间件、RPC、游戏服务器)。Tomcat 是 “Web 应用的运行容器”:专注于 HTTP/Servlet 规范的实现,适合部署常规 Web 应用,无需开发者关心网络细节,但受限于 Web 规范。

2025-10-10 19:44:20 780

原创 Netty 高性能与线程模型

主从 Reactor 模型实现高效并发处理;自定义 ByteBuf 与零拷贝机制减少内存开销;事件驱动与责任链模式提升事件处理效率;底层优化规避 NIO 缺陷,最大化利用操作系统资源。这些特性使得 Netty 能够在高并发场景下(如每秒数万连接、百万级消息吞吐量)保持低延迟和高吞吐量,成为 Java 网络编程的事实标准。

2025-10-10 19:40:25 915

原创 BIO、NIO、AIO

BIO(Blocking IO)是最传统的 I/O 模型,所有 I/O 操作都是阻塞的:当线程执行read()或write()等 I/O 操作时,会被挂起(阻塞),直到数据准备完成(读操作)或数据写入完成(写操作)后才继续执行。NIO(Non-blocking IO,Java 1.4 引入,也称为 New IO)是同步非阻塞 I/O 模型:线程发起 I/O 操作后无需阻塞等待,可继续执行其他任务;当数据就绪时,线程再回来处理 I/O 操作。

2025-10-10 19:26:09 631

原创 HTTP与 HTTPS

HTTP:基于 TCP 的明文传输协议,用于在客户端和服务器之间传输超文本(如 HTML、图片等),不提供数据加密和身份验证,数据在传输过程中可能被窃听、篡改或伪造。HTTPS:并非独立协议,而是 “HTTP + SSL/TLS” 的组合,通过 SSL(Secure Sockets Layer)或其继任者 TLS(Transport Layer Security)协议对 HTTP 传输的数据进行加密、身份验证和完整性校验,确保传输过程的安全性。

2025-10-10 18:36:45 499

原创 计算机网络原理

(理论模型):物理层 → 数据链路层 → 网络层 → 运输层 → 会话层 → 表示层 → 应用层。:GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。(实际应用):网络接口层(物理 + 数据链路) → 网络层 → 运输层 → 应用层。:无状态(每次请求独立)、基于 TCP 的应用层协议。

2025-10-10 18:21:57 510

原创 Git使用

确实会 “改写提交历史”:它将当前分支的提交 “嫁接” 到目标分支的最新提交之后,形成线性历史(而非 merge 的分叉历史)。:不会生成新提交,而是将当前分支的提交 “重播” 到目标分支上,形成线性历史(看起来像所有开发都在一条线上进行)。(包括工作区和暂存区),仅建议在确定本地修改无用时使用(如 “完全放弃本地,强制同步远程”)。:会生成一个新的 “合并提交”,保留原分支的分叉历史(清晰展示分支并行开发过程)。分出(当开发完成,准备发布时),仅修复发布前的小 Bug,不开发新功能。

2025-10-09 15:56:53 366

原创 Git基操

将仓库创建后的生成的url进行粘贴。这时候就可以看见我们提交的代码了。这里把代码选上,我刚忘记选了。注意:提起建好新文件夹。

2025-10-09 13:29:42 196

原创 JVM的内存分区

线程私有区域(程序计数器、虚拟机栈、本地方法栈):随线程创建 / 销毁,内存管理简单,无需 GC;线程共享区域(Java 堆、方法区):存放共享数据(对象、类信息等),是 GC 的主要管理对象,内存管理复杂。

2025-10-08 21:27:12 663

原创 Redis分片集群哈希槽

哈希槽是 Redis Cluster 实现分布式存储的核心机制,通过 “16384 个固定槽位 + 键的哈希映射”,解决了数据分片、节点扩缩容、负载均衡等关键问题。其设计既保证了分布式系统的灵活性,又简化了客户端和集群的交互逻辑,是 Redis 集群高可用、高扩展能力的基础。

2025-10-08 20:51:53 506

原创 Java异常体系

维度及其子类(非受检)其他受检异常(如编译时检查不强制处理(无需try-catch或throws强制处理(必须try-catch或throws本质程序逻辑错误(可通过编码避免)外部环境异常(代码正确也可能发生)典型示例处理原则优先通过逻辑避免,而非try-catch必须处理,确保异常场景下程序可控写出更健壮的代码—— 对于逻辑错误,通过规范编码消灭;对于外部风险,通过强制处理规避。

2025-10-08 20:29:13 444

原创 Redis持久化

Redis 持久化是指将内存中的数据持久化到磁盘,防止因 Redis 服务重启、崩溃等情况导致数据丢失的机制。和,此外还支持两者结合的。

2025-10-08 11:42:58 406

原创 动态SQL

简化 SQL 拼接:无需手动处理条件为空时的语法错误(如多余的AND提高灵活性:根据参数动态生成不同 SQL,适应多场景查询 / 更新需求。增强安全性:结合#{}可防止 SQL 注入,比直接字符串拼接更安全。动态 SQL 是 MyBatis 应对复杂查询场景的核心能力,熟练使用可大幅提升数据库操作代码的质量。

2025-10-07 16:49:41 292

原创 SqlSession

SqlSession是 MyBatis 中连接应用与数据库的 “桥梁”,封装了 SQL 执行、事务管理和一级缓存等核心功能。其生命周期短暂且线程不安全,使用时需遵循 “创建 → 使用 → 关闭” 的流程,优先通过 Mapper 接口方式执行 SQL,以保证代码的可读性和可维护性。理解SqlSession的工作机制,有助于深入掌握 MyBatis 的底层原理和最佳实践。

2025-10-07 16:41:25 833

原创 MyBatis如何获取自动生成的(主)键值

自增主键(MySQL 等):数据库在插入时自动生成主键,MyBatis 通过通知 JDBC 驱动获取生成的主键,并通过回填到实体类。序列主键(Oracle 等):需手动先查询序列值(或@SelectKey),将其作为主键插入,同时回填到实体类,本质是 “先获取、再插入、后回填”。关键要求:实体类中对应主键的属性必须有setter 方法(MyBatis 通过反射回填值),否则无法获取主键。数据库类型配置方式核心配置适用场景XML / 注解自增主键(AUTO_INCREMENT)Oracle。

2025-10-07 16:22:09 662

原创 MyBatis中 #{}和${}

特性#{}${}处理方式预编译,替换为?直接字符串拼接SQL 注入风险无(安全)有(危险)类型处理自动添加引号和类型转换不处理,需手动添加引号适用场景大多数参数传递(条件、值等)动态 SQL 结构(表名、排序等)

2025-10-07 15:41:50 884

原创 Spring中常用的设计模式

工厂模式与单例模式支撑了 IOC 容器的 Bean 管理;代理模式是 AOP 实现的基础;模板方法模式简化了重复操作(如数据库访问);观察者模式支撑了事件驱动模型;适配器、装饰器、策略模式则增强了框架的兼容性和扩展性。

2025-10-07 15:16:48 650

原创 Spring

Spring 的本质是通过 IoC 实现对象解耦,通过 AOP 实现横切逻辑复用,并在此基础上提供了数据访问、Web 开发、事务管理等核心功能。其生态系统(如 Spring Boot、Spring Cloud)进一步降低了开发门槛,使其成为 Java 开发的事实标准。理解 Spring 的关键不在于记住 API,而在于掌握 “控制反转” 和 “面向切面” 的设计思想 —— 这些思想不仅适用于 Spring,也贯穿于整个软件工程的 “高内聚、低耦合” 原则中。

2025-10-07 15:02:38 665

原创 SpringMVC或SpringBoot中如何返回JSON数据

实际开发中常需自定义 JSON 格式(如日期格式化、忽略 null 值等),可通过 Jackson 注解或全局配置实现。通过或指定返回响应体;依赖消息转换器(默认 Jackson)将返回值序列化为 JSON;可通过注解或全局配置自定义 JSON 格式;推荐使用统一响应体和全局异常处理,规范接口格式。

2025-10-07 14:39:31 928

原创 Spring MVC 与 Spring Boot

Spring MVC 是 "工具":解决 Web 层的请求处理问题,是 Spring 生态的 Web 核心。Spring Boot 是 "加速器":基于 Spring MVC 等 Spring 组件,简化开发流程,让开发者更专注于业务逻辑而非配置。Spring Boot = Spring MVC + 自动配置 + 起步依赖 + 嵌入式服务器 + ...,它是使用 Spring MVC 的最佳实践方式。

2025-10-07 12:11:23 646

原创 Spring MVC 与 Spring Boot 详解

Spring MVC 是 "骨架":负责 Web 层的请求处理,是 Spring 生态处理 HTTP 的核心。Spring Boot 是 "自动化工具":基于 Spring MVC 等 Spring 组件,通过自动配置、起步依赖等特性简化开发,让开发者聚焦业务逻辑而非框架配置。是构建 Java Web 应用的主流方案。

2025-10-07 12:10:30 631

快速入门mq的demo工程

快速入门mq的demo工程

2025-09-12

需要导入的demo工程(新)

需要导入的demo工程(新)

2025-09-11

需要导入的demo工程

需要导入的demo工程

2025-09-10

部署前端的nginx服务器

部署前端的nginx服务器

2025-08-17

空空如也

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

TA关注的人

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