自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 黑马SpringBoot+Elasticsearch作业2实战:商品搜索与竞价排名功能实现

本文介绍了基于Elasticsearch实现商品搜索功能的关键技术点。主要内容包括:1)过滤条件聚合的实现,针对不同字段类型(text/keyword/price)采用matchQuery/termQuery/rangeQuery等查询方式;2)竞价排名功能,通过function_score查询结合filter+weight机制,对广告商品(isAD=true)进行加权排序;3)完整查询流程包含条件查询、排序(默认按price升序)和分页处理。文章提供了详细的Java代码实现,使用RestHighLevel

2025-08-10 11:14:23 539

原创 微服务消息队列之RabbitMQ,深入了解

消息队列可靠性保障方案 摘要:消息队列(MQ)在网络传输过程中存在消息丢失风险,主要发生在三个环节:生产者发送阶段、MQ存储阶段和消费者处理阶段。针对生产者发送阶段,可通过重试机制解决网络连接失败问题,并利用生产者确认机制(Publisher Confirm和Publisher Return)保障消息成功抵达MQ。具体实现包括:配置重试参数、开启异步回调确认、定义ReturnCallback统一处理路由失败消息,以及为每次发送设置ConfirmCallback。这些措施共同构建了消息可靠传递的第一道防线,后

2025-08-01 22:16:34 1428

原创 微服务消息队列之——RabbitMQ

本文介绍了RabbitMQ消息队列的基本概念及其在微服务异步通信中的应用。首先分析了同步调用的问题(拓展性差、性能下降、级联失败),对比了常见消息队列的特性,重点讲解了RabbitMQ的核心概念(生产者、交换机、队列等)和四种交换机类型(Direct、Fanout、Topic、Headers)。随后详细说明了Docker部署RabbitMQ的步骤,包括创建用户、虚拟主机和队列绑定的管理界面操作。最后通过SpringAMQP实现了一个广播交换机案例,展示了RabbitMQ在微服务中的实践应用。文章强调Rabb

2025-07-30 13:26:52 1032

原创 基于黑马教程——微服务架构解析(二):雪崩防护+分布式事务

本文深入探讨了微服务架构中的两个核心保障机制:服务保护与分布式事务。在服务保护方面,详细介绍了Sentinel组件的三大功能:请求限流、线程隔离和服务熔断,通过对比分析其应用场景与实现方式。在分布式事务部分,重点解析了Seata框架的XA与AT两种事务模型,从一致性、性能、锁范围等维度进行对比,并阐述了TC、TM、RM三大核心组件的协作机制。文章为微服务架构设计提供了关键的技术解决方案和实践指导,帮助开发者构建高可用的分布式系统。

2025-07-28 22:58:55 1113

原创 基于黑马教程——微服务架构解析(二)

本文介绍了微服务架构中网关的核心功能与实现方式。主要内容包括: 网关路由功能:网关作为统一入口,通过Nacos实现服务发现和负载均衡,解决了前端调用多个微服务的地址维护问题。 网关配置实现:详细讲解了Spring Cloud Gateway的配置方式,包括路由规则定义、断言类型和过滤器使用。 登录校验方案:基于全局过滤器实现JWT校验,通过白名单机制和用户信息传递,解决了微服务架构下的统一认证问题。 配置管理:介绍了Nacos配置中心的使用,实现配置的统一管理和热更新。 文章通过具体代码示例,展示了如何快速

2025-07-28 17:07:35 1052

原创 基于黑马教程——微服务架构解析(一)

在中创建接口ItemClient,用于远程调用@FeignClient("item-service") // 指定服务名:指定目标服务的服务名;:请求方式和路径;:请求参数;:返回值类型。无需写实现类,Feign 会基于接口定义自动生成远程调用逻辑。

2025-07-27 23:16:18 1371

原创 一文快速了解Docker和命令详解

Docker简介与基础使用 Docker是一个开源的容器化平台,可将应用及其依赖打包成独立容器,实现跨环境一致运行。核心组件包括Docker引擎(Daemon+CLI)、镜像(不可变模板)、容器(镜像实例)、Docker Hub(公共镜像库)和Dockerfile(构建指令文件)。常用命令如docker pull拉取镜像、docker run启动容器、docker ps查看容器状态等。数据卷机制可实现容器与宿主机的文件映射,解决数据持久化问题。示例展示了Nginx容器的完整操作流程,包括镜像拉取、容器启停及

2025-07-27 21:51:22 1162

原创 Spring Boot 3.x 整合 Swagger(springdoc-openapi)实现接口文档

本文介绍了在Spring Boot 3.x中使用springdoc-openapi实现Swagger接口文档的方法。主要内容包括:版本兼容性对照表(3.0-3.2推荐2.5.x,3.3/3.4需等待2.6.x)、Maven依赖配置示例、最小化项目结构说明、访问路径说明以及常见错误解决方案。特别提醒Spring Boot 3.3+与springdoc 2.5.x存在兼容性问题,生产环境应选用稳定版本组合。文章提供了完整的配置示例和问题排查指南,帮助开发者快速集成Swagger文档功能。

2025-07-06 16:29:54 1110

原创 黑马JVM解析笔记(六):深入理解JVM类加载机制与运行时优化

开发者可以继承类并重写方法(强烈推荐只重写此方法,而不是覆盖破坏双亲委派的loadClass方法)来创建自定义的类加载器。自定义类加载器关键步骤继承。重写根据类名(name)定位并读取.class文件的二进制数据(byte[]可在此处进行解密、解压缩等处理。调用父类的方法(或)将字节数组转换为Class<?对象。如果找不到类,抛出。(可选) 在构造函数中指定父加载器(默认父加载器是系统类加载器)。尽量遵循双亲委派。只在findClass中实现自定义加载逻辑,让loadClass。

2025-06-29 13:39:35 972

原创 黑马JVM解析笔记(五):深入理解Java字节码执行机制

本文从字节码角度分析了Java中的i++操作、条件判断、循环控制和构造方法。通过字节码示例详解了i++和++i的区别,条件判断指令ifne的实现,while/do while/for三种循环的字节码结构及其等效性。特别指出x=x++导致结果为0的原因,并解释了构造方法中代码块和成员变量的合并逻辑,以及私有方法、实例方法和静态方法的不同调用指令invokespecial、invokevirtual和invokestatic。全文通过具体代码的字节码分析,揭示了Java语法背后的底层实现机制。

2025-06-27 21:28:23 929

原创 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制

本文通过一个Java代码示例详细图解了JVM字节码的执行流程。案例展示了从变量初始化、加法运算到结果输出的完整过程,通过javap反编译解析了每步对应的字节码指令。重点分析了操作数栈与局部变量表的交互、常量池引用以及方法调用机制。文章揭示了编译期优化(如常量计算)、JVM栈式架构的工作原理,并深入解析了getstatic和invokevirtual等关键指令的执行细节。该案例有助于开发者理解Java代码到字节码的转换过程以及JVM的运行时工作机制,为性能优化和问题排查提供理论基础。

2025-06-26 21:20:29 940

原创 黑马JVM解析笔记(三):类加载器结构与字节指令,深度剖析.class文件,简单明了

JVM类文件结构解析摘要: Java类文件(.class)由严格规范的二进制结构组成,包含魔数、版本号、常量池、访问标志、类索引、字段表、方法表等核心部分。以HelloWorld程序为例,类文件开头"CA FE BA BE"为魔数标识,后续34版本号对应Java 8。常量池包含35个条目,存储类名、方法签名等符号引用。方法表显示两个方法(含默认构造器),通过Code属性存储字节码指令(如2A B7等操作码)及对应的行号表。类文件通过这种结构化设计,确保JVM能准确解析和执行Java程序。

2025-06-25 20:04:07 690

原创 黑马JVM解析笔记(二):垃圾回收

本文介绍了JVM垃圾回收的核心知识,包括对象回收判断机制(引用计数和可达性分析)、五种引用类型(强/软/弱/虚/终结器)以及三种回收算法(标记清除、标记整理、复制算法)。重点阐述了分代回收策略,详细解析新生代和老年代的对象分配与回收流程,并说明相关VM参数设置。最后介绍了G1垃圾回收器的原理、回收流程及关键调优参数。全文从基础概念到高级调优,系统性地讲解了JVM内存管理的核心机制和优化方法。

2025-06-25 11:58:33 963

原创 黑马JVM解析笔记(一):内存结构

摘要:本文详细解析了Java对象在JVM中的执行流程与内存结构。首先,对象通过ClassLoader加载到内存,并分布在方法区(类信息)、堆(对象实例)、虚拟机栈(方法调用)等区域。执行过程涉及解释器、即时编译器(JIT)和垃圾回收机制。重点分析了内存结构的核心组件:程序计数器(线程私有)、虚拟机栈(栈帧)、本地方法栈、堆(线程共享)以及方法区(类元数据与常量池)。此外,探讨了内存溢出场景(如栈帧过多、堆对象未回收)及诊断工具(jmap、jstack等)。最后,通过代码示例说明方法区的存储结构,包括常量池、

2025-06-22 13:55:36 937

原创 Redis 分布式锁实现演进:从版本一到版本三的优化与实践

通过对 Redis 分布式锁的实现演进分析,我们可以看到,在高并发的秒杀系统中,如何合理设计和实现分布式锁机制,对于确保系统的正确性和稳定性至关重要。通过引入线程标识和使用 Lua 脚本,我们可以有效避免锁的误释放问题,实现“一人一单”的秒杀任务。在实际应用中,还需根据业务需求和系统架构,综合考虑锁的超时时间、重入性、公平性等因素,选择合适的锁实现方式,以确保系统的高可用性和高可靠性。

2025-06-19 15:37:54 935

原创 基于Redis实现高并发优惠券秒杀系统:全局ID、超卖控制与一人一单

本文介绍了如何利用Redis实现高并发环境下的优惠券秒杀系统。主要内容包括: 全局唯一ID生成方案:通过Redis自增特性配合时间戳,实现分布式系统的唯一ID生成,满足高并发需求。 优惠券管理实现: 区分平价券和特价券 特价券需记录库存、抢购时间等额外信息 将秒杀库存同步到Redis 秒杀下单流程: 校验秒杀时间有效性 检查库存充足性 扣减库存 创建订单 系统设计解决了高并发环境下的ID唯一性问题,并通过Redis预存库存提高秒杀性能。后续可进一步优化超卖问题和一人一单限制。该方案利用Redis的原子操作特

2025-06-18 13:20:49 822

原创 深入理解缓存:原理、缓存穿透、缓存击穿、缓存雪崩及解决方案(基于黑马点评Redis实战),超详细版本

本文系统介绍了缓存技术原理及基于Redis的实战应用。首先解析缓存的本质(数据交换缓冲区)、核心价值(空间换时间)和分类(本地/外部/CPU缓存),并提出多级缓存架构。通过商户查询案例展示Redis缓存实现,包括查询流程、代码实现及更新策略。重点讨论了数据一致性难题及解决方案,比较了三种更新模式。最后针对缓存三大问题(穿透、雪崩、击穿)提出具体应对措施:缓存空对象/布隆过滤器防穿透,随机TTL/集群化防雪崩,互斥锁防击穿。文章强调缓存虽提升性能但需权衡一致性维护成本。

2025-06-16 16:52:07 709

原创 黑马点评实战:基于Redis实现短信登录(源码级解析)

Redis实现短信登录功能方案总结 核心实现思路包括: 使用UserDTO隐藏用户敏感信息,通过对象转换避免数据泄露 Redis存储会话信息解决多服务器session共享问题,选择Hash结构存储用户数据 采用拦截器进行登录校验优化 具体实现: 短信验证码存入Redis并设置有效期 登录时将用户信息转为DTO后存入Redis Hash 生成随机token作为登录凭证 通过拦截器统一校验登录状态 该方案有效解决了传统session方案在多服务器环境下的共享问题,同时保障了用户数据安全。

2025-06-15 18:27:29 870

原创 黑马点评项目实战:解决前端 `Cannot set properties of undefined` 的拦截器路径陷阱

摘要: 前端报错Cannot set properties of undefined通常由后端接口返回非预期数据导致。经排查发现,Spring拦截器配置中排除路径"user/code"缺少开头斜杠,导致路径匹配失败(正确应为"/user/code")。Ant风格路径规则中,无斜杠前缀会视为相对路径,引发拦截器漏放行。解决方式:规范拦截器路径,确保排除路径以/开头。该案例提醒:前端未定义错误需优先检查后端全局配置(如拦截器),路径规范是常见易错点。

2025-06-15 13:45:33 363

原创 10分钟搞定!Maven关闭Nexus远程仓库,强制使用本地仓库的终极方案

摘要:本文详细介绍如何彻底关闭Maven远程仓库连接,实现纯离线开发。主要步骤包括:1)修改settings.xml文件中的本地仓库路径;2)注释Nexus账号和镜像配置;3)强制启用离线模式并禁用所有远程仓库。最终通过mvn -o -X命令验证配置,当出现"Using local repository"和"Skipping remote repository check"日志时,表明成功切换为离线模式。该方案适用于需要内网开发、提升构建速度或确保依赖安全的场景。(1

2025-06-12 22:38:33 425

原创 Spring Boot 3 快速实现 Spring Data Redis 集成与自定义序列化配置

本文介绍了Spring Data Redis的核心优势及其在Spring Boot 3中的集成方式,重点解决了Redis存储中的序列化问题。文章首先概述了Spring Data Redis的客户端整合、统一API等特性,然后详细讲解了如何配置和使用RedisTemplate。针对序列化乱码问题,提出了自定义JSON序列化方案,并通过对比展示了优化效果。最后探讨了类名冗余问题的解决方案,推荐使用StringRedisTemplate手动序列化以优化存储空间。全文提供了完整的代码示例,帮助开发者在实际项目中实现

2025-06-11 22:59:07 940

原创 Java中使用Redis:JedisPool入门指南(含源码)

本文介绍了Java中使用JedisPool高效管理Redis连接的方法。通过Maven配置Jedis和JUnit依赖,讲解了JedisPool连接池的作用及其性能优势。文章提供了JedisPool的配置示例和常见Redis数据类型操作代码,包括String、Hash、List、Set和Sorted Set的操作示范。最后强调了使用后释放资源的重要性,并总结了JedisPool在高并发场景下对性能提升和管理Redis连接的关键作用。

2025-06-11 21:25:07 971

原创 Java中使用Redis:Jedis入门指南

本文介绍了Java中使用Jedis操作Redis的基础指南。主要内容包括:Jedis作为Redis官方推荐的Java客户端,支持所有Redis数据类型;项目环境要求JDK8+和Redis服务器;通过JUnit5演示了String、Hash、List、Set、ZSet五种数据结构的操作方法;利用@BeforeEach和@AfterEach注解管理Redis连接生命周期;最后推荐了官方文档和进阶学习方向。文章提供了完整的Maven依赖和测试代码示例,适合Java开发者快速上手Jedis进行Redis开发。

2025-06-11 20:42:59 520 1

空空如也

空空如也

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

TA关注的人

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