自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 进程与权限全面解析

本文系统梳理了 Linux 中的进程与权限管理。首先介绍了 man、find、grep、wc、cat、head、tail 等常用命令,并通过表格对比了不同文件查看工具的特点。随后总结了 ps、top、kill 等进程管理命令及常用参数,帮助用户快速定位和控制进程。接着讲解了用户分类、权限模型及 chmod 权限设置方法,并提供 rwx 权限与数值对应表,直观展示权限组合。最后介绍了输入输出重定向与文件描述符的用法。通过这些知识点,读者能够全面掌握 Linux 系统管理的核心技能。

2025-09-12 16:19:08 416

原创 Linux 入门指南:起源、目录结构与常用命令

Linux 是基于 Unix 内核的开源操作系统,广泛应用于服务器、移动终端、大数据和云计算等领域。本文介绍了 Linux 的起源、常见发行版及应用场景,讲解了终端与 Shell 的作用,并解析了目录结构。通过实例演示了 pwd、ls、cd、uname 等系统命令,以及 touch、mkdir、cp、rm、mv 等文件管理操作,还详细展示了 tar 的打包与压缩用法,帮助初学者快速掌握 Linux 基础操作。

2025-09-12 10:33:49 733

原创 微服务事务管理实践与 Seata 框架解析

本文介绍了分布式事务的理论基础(CAP定理和BASE理论)及Seata分布式事务解决方案。Seata提供XA、TCC、AT、SAGA四种模式,其中重点分析了XA模式(强一致性,两阶段提交)和AT模式(最终一致性,性能更优)的实现原理与适用场景。建议根据业务需求选择合适模式:普通业务优先采用AT模式,金融等强一致场景可选用XA或TCC模式。Seata通过不同事务模式帮助开发者在分布式系统中平衡一致性与性能。

2025-09-11 16:24:36 1199 2

原创 微服务保护全攻略:从雪崩到 Sentinel 实战

在微服务架构中,单点故障可能引发级联雪崩,常见防护措施包括超时处理、线程隔离、断路器和限流。Sentinel 作为阿里开源流量防护组件,支持多维度限流、熔断降级和实时监控,并能与 Spring Cloud、Dubbo 等无缝整合。它提供直接、关联、链路三种流控模式,以及快速失败、预热、排队等待三种效果,支持热点参数限流,适用于秒杀场景。结合 Feign 可实现调用降级与线程隔离,从而保障系统高并发下的稳定性与容错能力。

2025-09-11 13:59:14 1103

原创 微服务网关全解析:从入门到实践

Spring Cloud Gateway 是微服务统一入口,提供路由转发、权限控制与限流保护,基于 WebFlux,性能优于 Zuul。其核心机制包括断言工厂用于灵活匹配请求,过滤器工厂支持请求头修改、权限校验及自定义全局逻辑,过滤器链按优先级执行。文中还介绍了同源策略与跨域问题,并给出 CORS 配置方案,助力系统安全与高效。

2025-09-10 17:23:26 948

原创 微服务通信实战篇:基于 Feign 的远程调用与性能优化

本文介绍了SpringCloud中的声明式HTTP客户端Feign的基本使用和优化方法。Feign通过注解方式简化了微服务间的远程调用,支持负载均衡和多种配置选项。文章详细讲解了Feign的引入方式、接口定义、日志级别设置等基本用法,并提供了性能优化建议,如使用HttpClient连接池替代默认实现。Feign能显著提升开发效率,使远程调用像本地方法一样简单,同时支持灵活的定制和扩展,是微服务架构中的重要组件。

2025-09-10 14:03:54 1043

原创 微服务核心组件实战:Nacos 与 Ribbon 的应用

本文系统介绍了Nacos和Ribbon在微服务架构中的核心应用。Nacos作为注册中心实现服务注册与发现,同时兼具配置中心功能;Ribbon则提供客户端负载均衡能力。文章详细讲解了Nacos环境搭建、服务注册、Ribbon服务调用方法,以及轮询、随机等负载均衡策略。重点阐述了Nacos配置管理的优势,包括配置热更新、多环境配置和共享配置等特性。通过Nacos+Ribbon的组合方案,可有效提升微服务系统的开发效率和运行稳定性。

2025-09-09 17:59:39 1095

原创 RocketMQ 实战进阶篇:顺序消费、堆积治理与死信队列

RocketMQ实战问题解析:顺序消费、消息堆积与失败处理 本文针对RocketMQ实际应用中的核心问题展开分析。首先介绍了顺序消费的两种实现方式:全局顺序和分区顺序,重点讲解了通过shardingkey保证同类消息顺序处理的方法。其次详细分析了消息堆积的常见原因及应对措施,包括扩容消费者、增加线程数、批量消费等解决方案。最后阐述了消息失败的重试机制和死信队列处理流程,强调业务侧实现幂等性的重要性。文章不仅覆盖了RocketMQ的实战技巧,还回顾了面试常见考点,为开发者提供了从理论到实践的完整指导。

2025-09-09 14:10:54 629

原创 RocketMQ 核心原理篇:组件、消费模型与长轮询机制

RocketMQ是一款分布式消息中间件,通过Topic、Queue、Group等核心概念实现系统解耦和异步处理。其架构包含NameServer(路由中心)、Broker(存储转发)、Producer(生产者)和Consumer(消费者)四个角色。消息消费支持集群和广播两种模式,底层采用长轮询Pull机制实现高效消息拉取。相比Zookeeper,NameServer采用轻量级设计,实现最终一致性路由。RocketMQ通过这种架构设计,有效解决了消息顺序、过滤、延迟等场景需求,为分布式系统提供可靠的消息服务。

2025-09-08 18:44:53 701

原创 Redis 过期数据删除策略与内存淘汰机制详解

Redis作为高性能内存数据库,其内存管理机制直接影响性能与稳定性。本文深入解析Redis的三种过期数据删除策略:定时删除(CPU开销大但内存释放及时)、惰性删除(内存占用高但CPU友好)和定期删除(折中方案)。同时详细介绍了内存淘汰机制,包括多种策略(LRU/LFU等)及适用场景:LRU适合访问局部性强的场景,而LFU能更好处理长期热点数据。通过合理配置maxmemory-policy策略,结合业务特点监控调整,可在内存利用率与性能间取得最佳平衡。

2025-09-05 17:05:27 577

原创 理解 Redis 常见数据结构:类型、应用场景与底层实现

Redis是一款高性能内存数据库,提供多种数据类型满足不同场景需求。核心五种类型包括String(缓存/计数)、List(队列)、Hash(对象存储)、Set(去重)和ZSet(排行榜),各有独特应用场景和底层实现机制。数据会根据元素数量和大小自动切换存储结构(如压缩列表/跳表),以平衡内存使用和操作效率。理解这些数据结构的实现原理能帮助开发者合理选型、优化性能并节省内存。此外,Redis还提供BitMap、GEO等扩展类型,使其成为多功能内存数据引擎。

2025-09-04 14:14:55 892

原创 Redis线程模型详解

Redis线程模型解析:核心单线程+辅助多线程。Redis6.0前采用单线程事件循环+I/O多路复用处理请求,后台线程处理耗时操作;6.0后引入I/O多线程提升网络处理能力,但命令执行仍保持单线程。其高性能源于内存操作、高效数据结构、无锁竞争及I/O多路复用机制。整体设计既保证简单性和可维护性,又兼顾现代硬件下的高性能需求。

2025-09-03 12:06:39 1000

原创 SpringBoot的启动过程

SpringBoot启动流程解析:1.初始化阶段推断应用类型,加载配置监听器;2.运行阶段包含环境准备、容器创建与刷新;3.通过事件驱动机制(6个关键事件)实现各阶段扩展;4.支持Runner接口实现启动后回调。核心涉及自动配置、条件装配和容器生命周期管理,理解该流程有助于问题定位和功能扩展。

2025-09-02 14:41:37 704

原创 SpringBoot中的自动配置

SpringBoot自动配置机制通过@EnableAutoConfiguration启动,扫描META-INF/spring.factories中的候选配置类,结合@Conditional条件注解进行筛选。该机制实现了“开箱即用”的便捷性,同时支持开发者通过排除配置、自定义Bean或编写自动配置类进行灵活干预。这种设计在减少手工配置的同时,保持了框架的扩展性和一致性体验。

2025-08-22 11:03:44 678

原创 Spring框架中Bean的生命周期

本文详细介绍了Spring框架中Bean的生命周期管理机制。从Bean定义加载开始,依次阐述了实例化、属性注入、Aware接口回调、初始化前后处理、Bean就绪以及销毁等关键阶段。重点讲解了开发者如何通过实现Aware接口、InitializingBean/DisposableBean接口、自定义init/destroy方法以及BeanPostProcessor等扩展点介入生命周期管理,实现资源初始化、释放和功能增强。理解这些机制有助于开发者更高效地管理Bean和优化应用性能。

2025-08-16 10:34:56 736

原创 MyBatis Mapper:使用与原理详解

本文介绍了MyBatis中的Mapper机制,它是通过接口定义数据访问方法,利用动态代理实现SQL绑定和执行的核心组件。文章详细讲解了Mapper的两种定义方式(XML映射和注解)、底层动态代理原理(通过namespace+方法名定位SQL)以及使用注意事项(接口与XML对应、namespace一致等)。Mapper机制简化了JDBC操作,使开发者只需关注SQL与方法的映射关系,提高了代码的可维护性和开发效率。理解Mapper工作原理有助于更好地使用MyBatis并快速解决问题。

2025-08-10 12:26:15 645

原创 MyBatis Executor 三种类型详解与使用场景

MyBatis提供三种Executor执行器:SimpleExecutor(默认)每次创建新Statement,适合低频SQL;ReuseExecutor通过缓存Statement提升重复SQL执行效率;BatchExecutor专为批量写入优化,减少数据库交互。选择方式可通过SqlSession创建时指定或全局配置,推荐根据场景选择:常规用Simple,重复SQL用Reuse,批量操作用Batch。合理选择Executor能显著提升性能,尤其在高并发场景下。

2025-08-09 14:51:16 589

原创 线程池的状态:保存与切换机制

摘要:Java线程池通过ctl字段(AtomicInteger)管理状态,高3位存储运行状态(RUNNING、SHUTDOWN等),低29位记录线程数。状态转换包括:RUNNING可接收任务,调用shutdown()转为SHUTDOWN(不接收新任务但处理队列),shutdownNow()转为STOP(中断任务);当任务队列为空时进入TIDYING,最终终止于TERMINATED状态。该机制通过原子操作保证线程安全。

2025-07-22 18:58:31 158

原创 线程池的核心配置参数和流程

线程池是管理和复用线程的高效机制,核心思想是通过线程复用降低资源消耗并提高响应速度。ThreadPoolExecutor的核心配置参数包括corePoolSize、maximumPoolSize、keepAliveTime等,配合不同的任务队列和拒绝策略,可灵活适应不同业务场景。执行流程遵循"核心线程优先-任务队列缓冲-非核心线程补充-拒绝策略兜底"的层级处理逻辑,实现资源的最优调配。合理配置线程池参数能有效提升系统性能,同时避免资源耗尽风险。

2025-07-21 19:13:11 676

原创 理解 Java 中的 CAS:特点、用途、执行流程、使用场景、问题

CAS(Compare and Swap)是一种无锁并发编程技术,通过比较内存值与预期值实现原子操作。Java中通过Unsafe类实现CAS,AtomicInteger等原子类基于此机制。相比传统锁,CAS避免了线程阻塞,适合低竞争场景,但存在循环开销大、仅支持单变量原子操作及ABA问题等缺陷。ABA问题可通过AtomicStampedReference引入版本号机制解决。

2025-07-20 16:14:42 599

原创 ArrayList核心代码阅读

ArrayList 是 Java 集合框架中最常用的数据结构之一,它基于动态数组实现,提供了高效的随机访问和动态扩容的能力。与传统的数组相比,ArrayList 可以根据需要自动调整容量,从而避免了手动管理数组大小的麻烦。

2025-02-12 17:21:27 219

原创 Integer缓存池

Integer缓存池通过缓存一定范围内的Integer对象,减少了内存的消耗和对象的创建。通过Integer.valueOf(int i)方法,可以充分利用缓存池,提升程序的性能。

2025-02-09 17:07:06 768

原创 StringBuilder类的数据结构和扩容方式解读

StringBuilder类的数据结构和扩容方式解读。

2025-02-08 21:29:19 303

原创 String类的equals()的作用和源代码解读

在Java中,equals()方法是Object类中定义的一个方法,所有的Java类都继承了Object类,因此都具备equals()方法。但是Object类中的equals()方法功能有限,其默认实现是比较两个对象的引用是否指向同一个内存地址。

2025-02-07 14:02:55 708

原创 String为什么是不可变的?

String 在 Java 中是不可变的,其内容一旦创建就不能修改。其不可变性源于内部使用 private final char[] 存储字符数据,使得任何修改操作(如replace()、substring())都会创建新的 String 对象,而不会改变原字符串。

2025-02-05 19:29:26 686 1

空空如也

空空如也

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

TA关注的人

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