- 博客(96)
- 收藏
- 关注
原创 Java后端序列化工具 Jackson 和 FastJSON
FastJSON 2.x 提供了。,但如果数据格式错误,会抛出。FastJSON 也可以解析。Jackson 还可以解析。Jackson 会抛出。
2025-03-12 15:33:03
423
原创 MySQL 性能优化
生产环境的数据库通常承载着高并发、大数据量的业务请求,因此在定位慢 SQL 时需要特别注意对系统性能的影响,避免因监控和分析操作导致数据库性能进一步下降。
2025-02-27 23:46:38
807
原创 Java多线程
你可以通过自定义各种参数来精确控制线程池的行为,如核心线程数、最大线程数、线程空闲超时时间、任务队列的类型等。当线程池的任务队列已满且最大线程数已经达到上限时,线程池需要一种策略来处理新提交的任务。是 Java 并发包(JUC)中提供的一种更强大的线程管理方式,特别适用于需要获取线程执行结果的场景。是用于管理和调度线程的一种机制,能够有效地控制并发任务的执行。是 Java 线程池框架的核心接口,提供了常用的线程池管理方法。方法用于关闭线程池,调用此方法后线程池不再接受新的任务,但会等待已提交任务执行完成。
2025-02-25 18:01:48
747
原创 动态规划算法
状态定义是动态规划的基础,它决定了我们如何将一个问题分解为子问题,并通过子问题的解来推导出原问题的解。在动态规划中,状态通常通过一个数组(如。
2025-02-21 14:00:36
376
原创 Java中的分布式(概念说明)
分布式系统(Distributed System):由多台服务器(或节点)协同工作,对外提供一个整体服务。不同节点之间通过网络通信来协同处理请求或共享数据,相对于「单体应用」而言,可以带来更高的吞吐量可用性和灵活扩展能力。
2025-02-14 15:35:37
1886
原创 数据库索引使用 B+树和Java TreeMap 使用红黑树的原因
数据库索引主要存储在磁盘上,而磁盘 I/O 是数据库查询的主要性能瓶颈。,通常一个节点可存储 100~1000 个索引(具体取决于磁盘页大小),这样可以让树的高度降低,提高查询效率。如果一个节点存储的 Key 超过上限,它会分裂为两个节点,但其影响局限于相邻节点。面向磁盘访问优化的特性,在这类场景里用不上,反而会增加实现与维护的复杂度。,查询路径的节点较多,导致磁盘 I/O 频繁,查询性能下降。,因此一次 I/O 能读取更多索引数据,减少磁盘访问次数。,它们的作用是指向相应的子节点,帮助快速查找数据。
2025-02-14 15:04:07
933
原创 Spring 事务管理
有以下限制(同类内部调用失效、private 方法不生效、跨线程无效等)故在这些场景下需要手动控制事务。AOP(Aspect-Oriented Programming)本质是。Spring 提供了 7 种事务传播级别,默认是。记录不会插入数据库(因为事务回滚)。注解来管理事务,这种方式更简单易用。,在指定的连接点(方法调用)执行。Spring Boot 提供了。(开启事务、提交、回滚)。
2025-02-10 16:26:34
623
原创 Spring Boot 项目中使用腾讯云对象存储(COS)
在使用腾讯云对象存储(COS)之前,我们需要在 Spring Boot 项目中完成一些必要的环境准备工作,包括引入依赖、在腾讯云控制台创建访问密钥以及进行一些基础的配置。腾讯云官方提供了多种 SDK,Java 版本的 SDK 可以通过 Maven 或者 Gradle 引入。以下以 Maven 为例展示如何引入依赖,版本号可以在 官方文档 或 Maven中央仓库 查看并更新。1.3 Spring Boot 中的配置在 Spring Boot 项目中,我们可以通过 或者 来配置 COS 的相关
2025-02-07 23:24:29
1255
原创 ThreadLocal
在多线程环境中,如果多条线程都要访问(读写)同一个全局变量,就会遇到并发、安全、数据一致性等问题。我们可能需要加锁、加 volatile 等,或者想办法把这个变量变成方法参数层层传递,十分繁琐。但有些场景,数据其实不需要被线程之间共享,而是“线程私有”的。当前线程处理的是“请求A”,里面存了“用户ID=1001”;另一个线程处理“请求B”,里面存了“用户ID=2002”;这两条线程对 “用户ID” 的值并没有交互或共享的必要,每个线程只关心“自己的用户ID”即可。如果我们希望快速地在。
2025-02-05 23:38:21
694
原创 NIO 和 Netty 在 Spring Boot 中的集成与使用
Netty 是一个基于 Java NIO 的异步事件驱动网络应用框架,专注于高性能和可扩展的网络通信应用开发。它封装了底层 NIO 的复杂性,使开发者无需直接处理。
2025-01-22 01:18:11
1236
原创 Spring boot框架下的RocketMQ消息中间件
Producer 是负责发送消息到 RocketMQ 的组件。它可以将消息发送到指定的 Topic。
2025-01-16 15:36:20
850
1
原创 数据库主键生成策略
方法原理与特性优点缺点适用场景自增列依赖数据库自增特性简单、插入性能高、占用空间小不适合分布式、易预测、依赖单点单机或中小型系统UUID基于随机数/时间等生成 128 位标识分布式友好、无需中心化协调、难预测存储占用大、索引性能差、无序分布式环境、需要跨系统或难以预测的主键场景雪花算法分布式高效生成 64 位长整型 ID,含时间戳、节点 ID 等高并发、有序、全局唯一依赖时间、实现复杂、时钟回拨问题大规模分布式系统、高并发业务(如电商订单、日志追踪 ID 等)
2025-01-08 13:59:12
1172
原创 WebClient
WebClient是 Spring 5 引入的一个基于响应式编程模型的 HTTP 客户端。与传统的相比,WebClient 采用了Reactor库,支持非阻塞式(异步)调用,可充分利用多核 CPU 资源,提升高并发场景的吞吐量。它能够非常灵活地构造并发送 HTTP 请求(支持 GET、POST、PUT、DELETE、PATCH 等所有常见方法),并以流MonoFlux)的方式处理响应结果。默认情况下,在遇到 4xx/5xx 状态码时会抛出。
2025-01-06 22:14:01
1585
原创 Spring Boot 框架下的过滤器
destroy()通过@Component注解将过滤器注册为 Spring Bean,Spring Boot 会自动加载并将其添加到过滤器链中。@Component/*doFilter通过手动注册过滤器,可以指定 URL 匹配规则和执行顺序。/api/*setOrderSpring 提供了一个扩展类,它是对标准过滤器的增强,用于确保在一次请求中只执行一次过滤逻辑(防止重复过滤)。可以通过@Component或注册,方式与标准过滤器一致。
2025-01-06 20:02:21
1508
1
原创 RedissonClient
Redisson 是基于 Redis 的 Java 客户端,扩展了 Redis 的基础功能,提供了分布式锁、分布式集合、队列、信号量、限流器等高级功能。它不仅可以作为一个 Redis 客户端进行普通的 Redis 数据操作,还特别适用于分布式系统中需要高可用性、高并发控制和多线程支持的场景。
2024-12-23 17:24:53
1376
原创 Redis四种模式在Spring Boot框架下的配置
通过这些配置,Spring Boot 可以配置连接到 Redis 哨兵,并通过哨兵节点动态管理 Redis 的主从切换,确保高可用性。Spring Boot 会根据配置自动连接到 Redis 哨兵,并使用动态的主从切换来实现高可用性。Spring Boot 会根据配置自动连接到 Redis 集群,并提供分片和高可用性支持。Redisson 会使用主从模式连接到 Redis,自动处理主从切换,并提供高可用性。Redisson 使用 Redis 哨兵模式来提供高可用性,支持自动的故障切换和重新连接。
2024-12-22 16:06:21
1702
原创 IntelliJ IDEA中的语言级别版本与目标字节码版本配置(附上Java LTS JDK版本区别)
Java 版本的命名历史:1.x 与 xJava 1.8Java 8这并不是两个不同的版本,而是同一个版本的不同写法。官方名称里 JDK 8 的内部版本号是1.8.0_xxx,但对外统一称作 “Java 8”。Java 1.7Java 7,依此类推。之后 Oracle 为了简化版本号,从Java 9开始统一使用整数版本没有再继续使用“1.9”、“1.10”的叫法。所以1.8 与 18 并非同一个版本!1.8” 代表Java 8。18” 代表Java 18。
2024-12-17 15:27:27
2473
原创 有/无状态会话 与 Session 与 Spring Security
尽管默认情况下 Spring Security 使用 Session 来维持认证状态,但在某些场景下(如 RESTful API 或微服务架构),可能更倾向于无状态认证方式(例如基于 JWT)。在这种情况下,可以配置 Spring Security 使其不依赖于 HTTP Session,而是通过每个请求携带的 Token 来进行认证。这意味着一旦用户通过认证(例如通过表单登录),其认证状态会被保存到 Session 中,从而在后续的请求中无需重新认证。,但也可以自定义实现,比如无状态认证(详见后文)。
2024-12-12 15:03:58
1001
原创 调试模式下启用 Java 异常断点
是 Spring Boot 提供的一组开发工具,用于提升开发效率。它通常只在开发环境中使用。功能,用于在程序抛出特定异常类型时,自动暂停程序运行并定位异常抛出的代码位置。是 Spring Boot DevTools 提供的一个内部异常,用于实现。在调试模式下,IntelliJ IDEA 提供了。
2024-12-12 15:02:27
868
原创 结合Spring Security的两种用户登陆认证以及授权方案
确保项目的 (Maven)或 (Gradle)中包含以下必要的依赖。这些依赖提供了 Spring Boot 的 Web、Security、模板引擎(如 Thymeleaf)、数据访问(如 JPA)等功能。Maven 示例:说明:创建一个配置类 ,配置 Spring Security 的过滤器链和认证管理器。通过在 中使用 方法,自动启用默认的 ,并配置 所需的 和 。关键配置说明:禁用 CSRF:授权规则: 表单登录配置: 登出配置: 会话管理: 3. 实现
2024-12-08 19:53:39
908
原创 HttpServletRequest
是包下的一个接口,用于表示客户端发出的 HTTP 请求。在 Web 应用中,它提供了大量的方法来访问 HTTP 请求的各个组成部分,包括请求行、请求头、请求参数、请求体等。在 Spring MVC 中,被封装在中,并通过控制器方法参数注入(例如,)自动处理请求。但你也可以显式地注入以获取更多请求的详细信息。是一个接口,它代表了 HTTP 请求的各个部分,包括请求行、请求头、请求参数、请求体等信息。Spring MVC 简化了许多操作,通过注解如等,自动将请求参数映射到方法参数中,你不需要显式地访问。
2024-12-05 22:26:03
886
原创 Spring Security集成JWT
JWT(JSON Web Token)是一种用于在不同系统之间安全地传递信息的无状态令牌。它通常用于 身份验证 和 授权,尤其在现代Web应用和API中非常常见。JWT是通过对传输的数据进行编码和签名来确保其完整性和安全性。JWT的特点:JWT由三个部分组成,每一部分都是用Base64Url编码的,并通过"."(点)连接起来,格式如下:(1) Header(头部)Header包含两部分内容:示例:这里,"alg" 表示签名算法(HMAC SHA256),"typ" 表示JWT的类型。Pa
2024-12-04 21:54:03
1279
原创 Spring Security常用接口与类
接口在Spring Security中用于表示用户的权限或角色。它通常与认证和授权过程密切相关,用来存储并传递用户的角色和权限信息。的主要作用是表示用户的权限或角色,它是Spring Security中用于角色管理的标准接口。一个用户可以被赋予多个角色或权限,每个角色或权限都是的实例。主要实现类::是的常用实现类。它通常用于表示单一的角色或权限,通常以字符串的形式存储权限名称。:返回权限的名称(通常是一个字符串)。这个方法用于获取该权限的名称,通常是角色的名字或者具体的权限标识。接口实现类。
2024-12-04 21:18:51
857
原创 函数式接口的定义与使用(作为参数)
函数式接口是指只包含一个抽象方法的接口,这样的接口可以用 lambda 表达式或者方法引用来创建其实例。Java 8 引入了函数式接口的概念,它通常用于传递行为(即函数),使代码更加简洁和灵活。定义一个函数式接口的基本语法: 注解不是强制的,但它有助于确保该接口符合函数式接口的规范(即只有一个抽象方法)。 是唯一的抽象方法,它接受一个参数并返回一个值。2. 使用 Lambda 表达式作为函数式接口的参数当一个函数式接口的实例作为方法的参数传递时,我们通常使用 lambda 表达式 来传递该实
2024-12-04 16:11:27
1004
原创 Java枚举类
根据名字返回对应的枚举常量。如果名字不存在,会抛出。是 Java 中用来定义一组固定常量的特殊类型。以下是一个商品的枚举类,每个商品具有。返回所有枚举常量的数组。返回枚举常量的序号(从。
2024-12-01 21:41:29
274
原创 Spring WebFlux与Spring MVC
部分的一种替代选择,主要是为了解决现代 Web 应用在高并发和低延迟场景下的性能瓶颈。是对 Spring Boot 项目中传统。
2024-11-30 20:48:36
1482
4
原创 IDEA中Maven相关使用
在配置文件中通过节点指定,例如:<settings>这里需要说明的一点是,你如果只在全局配置文件中配置了本地仓库的位置,而在用户配置文件中没有进行设置,那对于本地仓库的使用还是默认为C:\Users\<用户名>\.m2\repository(因为用户配置的级别高于全局配置,如果真的要去更改本地仓库地址,建议在两个配置文件中都做出指定)二、在 IntelliJ IDEA 中使用 Maven1.在 IntelliJ IDEA中配置Maven。
2024-11-30 20:03:53
1392
原创 WebSocket
是一种网络通信协议,它在单个 TCP 连接上提供全双工通信(Full-Duplex Communication)的能力,允许服务器和客户端之间实时传输数据。
2024-11-25 17:59:41
1150
原创 Hutool工具类
用途工具类作用示例代码字符串操作判断是否为空、去空格、分割/拼接字符串集合操作判断集合是否为空、检查是否包含元素对象操作判断对象是否为空、安全比较两个对象参数校验Assert校验参数是否为空或符合要求,避免非法输入资源加载Resource加载配置文件、模板文件或静态资源数据摘要生成 MD5 等摘要,用于密码加密或文件校验属性拷贝BeanUtils拷贝对象属性,简化 DTO 转换。
2024-11-24 17:01:18
601
原创 Javadoc的注释方式
***/@标签描述方法的参数。描述方法的返回值。描述方法可能抛出的异常。提供相关链接,用于引用类、方法或文档。标记方法或类已废弃,建议开发者避免使用。表示从哪个版本开始引入。@since 版本号嵌入式链接,用于引用类或方法。标注类或接口的作者。标注类的版本号。用于嵌入代码片段,常用于描述参数或示例。
2024-11-24 16:06:28
1294
原创 跨域资源共享 (CORS)
跨域是指浏览器发起的请求,其目标服务器与当前页面的来源(域名、协议、端口)不一致。跨域问题的根源在于(Same-Origin Policy),这是一种安全机制,防止恶意站点通过 JavaScript 等方式访问用户敏感数据。限制:浏览器的同源策略只允许当前网页(前端)的域名、端口、和协议与后端一致。如果前后端运行在不同的端口、协议或域名下(如前端在,后端在),这就是跨域,浏览器会阻止请求。
2024-11-22 17:15:40
1006
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人