- 博客(37)
- 收藏
- 关注
原创 Redis的String详解
Redis String是Redis最基本的数据类型,支持存储字符串、整数和二进制数据(最大512MB)。它采用三种编码方式(int、embstr、raw)自动优化存储,底层使用SDS结构实现O(1)长度获取和二进制安全。String类型提供丰富的原子操作命令,包括基本CRUD、批量操作、数值计算、字符串处理和位操作。其高效率和原子性特性使其广泛应用于缓存、计数器、分布式锁等场景。通过多种编码转换和内存优化策略,Redis String在性能和内存使用上达到良好平衡。
2025-10-10 23:51:54
845
原创 Redis的Hash解析
Redis Hash是一种高效的键值对集合,适合存储对象属性。其底层采用ziplist(小数据量)和hashtable(大数据量)两种编码方式,根据元素数量和值大小自动切换。Redis提供丰富的Hash操作命令,包括基本读写(HSET/HGET)、批量操作(HMSET/HMGET)、数字运算(HINCRBY)等。与存储多个String键相比,Hash具有更高内存效率、原子性操作和更好的数据局部性,特别适合用户信息、商品数据等结构化数据的存储场景。
2025-10-10 23:39:26
1133
原创 依赖倒置原则(DIP)
摘要:依赖倒置原则(DIP)是面向对象设计的重要原则,强调高层模块不应依赖低层模块,二者都应依赖抽象。文章通过Java代码示例展示了违反DIP(直接依赖具体实现类)和遵循DIP(通过接口解耦)的对比,并演示了依赖注入在订单处理系统中的应用。遵循DIP能提高代码的可扩展性、可维护性和可测试性,使系统更灵活应对需求变化。
2025-10-01 00:02:05
245
原创 开闭原则详解(OCP)
开闭原则(OCP)要求软件实体对扩展开放而对修改关闭。通过抽象和多态实现这一目标,可以减少修改代码带来的风险。文中以图形计算器为例,展示了违反OCP的实现(需要频繁修改代码)和符合OCP的重构方案(通过Shape接口实现扩展)。重构后,新增图形类型只需实现接口而无需修改现有代码,有效降低了维护成本。该原则强调通过抽象设计保持系统稳定性的同时支持功能扩展。
2025-09-30 22:41:43
396
原创 Java Executors 框架源码深度分析(下)
本文介绍了 Java 中的 Callable 适配器机制,主要包括两方面内容:一是 Runnable 到 Callable 的适配模式,通过适配器设计思想将不同接口统一;二是特权安全调用机制,通过捕获访问控制上下文和类加载器实现安全调用。关键技术点包括适配器模式、泛型类型安全、异常处理、访问控制上下文捕获和类加载器管理。该设计体现了接口转换、类型安全、防御性编程和资源管理等软件工程原则。
2025-09-22 21:49:46
383
原创 Java Executors 框架源码深度分析(上)
Executors 是 Java 并发编程的核心工厂类,提供多种线程池创建方法。它采用工厂方法模式简化线程池创建,如 newFixedThreadPool 和 newCachedThreadPool;通过装饰器模式限制不安全操作。主要线程池类型包括固定大小线程池(可能引发OOM)、缓存线程池(适合短期任务)、单线程执行器等。每种线程池有特定应用场景和潜在风险,如固定线程池使用无界队列可能导致内存问题,而缓存线程池适合处理大量短任务。这些设计体现了Java并发框架的灵活性和复杂性。
2025-09-22 20:46:11
1133
原创 从字节码探究synchronized
Java synchronized机制解析 synchronized是Java实现线程同步的关键字,提供互斥访问共享资源的机制。它通过Monitor和对象头实现同步,支持实例方法、静态方法和代码块三种使用方式。作为非公平锁,synchronized自动管理锁的获取和释放,适合简单同步场景。其底层原理涉及JVM的Monitor机制和对象头中的Mark Word,通过ACC_SYNCHRONIZED标志或monitorenter/monitorexit指令实现同步。对象头在不同锁状态下会存储不同的信息,确保线程
2025-09-16 11:31:52
681
原创 Docker desktop安装Redis Cluster集群
本文详细介绍了在Windows系统的Docker Desktop环境中搭建6节点(3主3从)Redis集群的完整流程。主要内容包括:环境清理、创建Docker网络、配置目录结构、生成Redis配置文件、启动容器、初始化集群以及功能验证等步骤。文章还提供了简化版3节点集群搭建方法,并针对常见问题给出解决方案。此外,还介绍了高级功能如密码认证配置和持久化优化选项。通过清晰的PowerShell命令和验证截图,帮助开发者在Windows环境下快速部署Redis集群,满足不同场景下的使用需求。
2025-09-14 10:46:36
423
1
原创 JVM 四大晋升机制
机制触发时机核心目的关键参数/影响因素年龄阈值Minor GC 后,对象年龄达标常规晋升,保证对象经过充分熬炼Survivor 不足Minor GC 后,存活对象太多保护机制,防止 Survivor 区溢出Survivor 区大小、GC 后存活对象大小动态年龄判定Minor GC 后,某年龄段对象总大小超限优化机制,减少复制,及时清理、对象年龄分布空间分配担保Minor GC前,检查老年代空间风险控制机制,避免晋升失败(OOM)老年代剩余空间、历次晋升平均大小。
2025-09-13 23:04:09
961
原创 Java 类加载与对象内存分配机制详解
Java虚拟机把描述类的数据从Class文件(或其它来源)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被JVM直接使用的Java类型。这个过程被称为类加载。类型(Class)的其中有五个阶段统称为。
2025-09-13 20:13:20
1153
原创 G1 垃圾收集器深入解析
G1垃圾收集器概述 G1(Garbage-First)是面向大内存多核处理器的服务端垃圾收集器,它在满足GC停顿时间要求的同时保持高吞吐量。G1采用分区(Region)机制,将堆划分为2048个大小相等的独立区域,每个Region可以是年轻代、老年代或专存大对象的Humongous区。G1保留了逻辑分代但取消物理隔离,Region功能动态变化。核心数据结构包括收集集合(CSet)、已记忆集合(RSet)和基于SATB的快照标记算法。 G1收集过程分为四种操作:新生代GC(Young GC)
2025-09-11 23:24:49
1219
原创 从源码和设计模式深挖AQS(AbstractQueuedSynchronizer)
AQS 核心概念与架构: AbstractQueuedSynchronizer(AQS)是Java并发包的核心框架,采用CLH变体的FIFO双向队列和volatile状态变量实现同步机制。核心结构包含:1)volatile int state表示资源状态;2)Node节点队列管理等待线程,节点保存线程引用、前后指针及等待状态(CANCELLED/SIGNAL等);3)支持SHARED和EXCLUSIVE两种模式。AQS通过CAS操作state和队列节点实现高效同步
2025-09-11 21:45:50
1718
原创 K8S-控制器
在 Kubernetes 中,控制器是实现自动化运维和状态管理的核心组件。它们通过控制回路(Control Loop)机制持续监控系统状态,并确保当前状态与期望状态保持一致。这种设计模式借鉴了传统的自动化控制系统控制回路是一个非终止循环,用于持续调节系统状态。Job 控制器示例:Job 控制器是 Kubernetes 内置控制器的典型代表,它负责管理批处理任务:当创建新 Job 时:控制器不直接运行容器,而是通过 API 服务器协调资源,体现了 Kubernetes 的声明式API设计理念。某些控制器需要
2025-09-10 20:55:40
781
原创 K8S-Pod(下)
Kubernetes中的Pod是集群最小部署单元,具有不可变特性,核心定义不可修改。Pod创建流程包含请求提交、调度绑定、容器启动等步骤,由多个组件协同完成。Pod更新实质是替换操作,通常通过Deployment控制器实现滚动更新。部分元数据字段可动态修改,而容器定义等核心配置不可变。Init容器用于前置初始化任务,边车容器则与主容器并行运行提供辅助功能。文档特别指出官方示例中边车容器误用initContainers的正确配置方式。
2025-09-07 21:02:02
1085
原创 K8S-Pod(上)
Kubernetes中的Pod是最小的可部署单元,包含一个或多个共享存储、网络和运行规范的容器。Pod的核心特性包括共享上下文(如Linux命名空间和CGroup)、逻辑主机模型以及依赖容器运行时。主要有两种用法:单容器Pod(最常见)和多容器Pod(适用于紧密耦合的应用)。Pod通过工作负载资源(如Deployment、StatefulSet等)
2025-09-05 21:17:47
667
3
原创 InnoDB如何保证 Buffer Pool 与磁盘数据的一致性
WAL 机制确保了事务的持久性和故障恢复能力防止了部分页写入导致的数据损坏Checkpoint优化了恢复效率和日志空间利用率这三者共同构成了 InnoDB 可靠性的基石,使得 MySQL 能够在保证数据安全的前提下,提供高性能的数据服务。
2025-08-31 17:54:34
1245
原创 SQL优化定位
方法适用场景优点缺点慢查询日志长期监控,找出所有慢SQL全面事后分析,不能实时EXPLAIN分析单条SQL执行计划快速,简单只是预估,非实际执行分析SQL执行各阶段耗时详细的时间消耗分析需要会话级别开启Trace分析优化器选择过程深入了解优化器决策输出复杂,需要解析SQL优化是一个持续的过程,需要结合业务特点和数据变化不断调整优化策略。
2025-08-31 17:31:54
1201
原创 从源码深究CopyOnWriteArrayList
CopyOnWriteArrayList采用写时复制技术实现等效不可变特性,其核心特点是容器结构不可变而元素内容可变。通过源码分析可见,写操作加锁复制新数组修改后替换引用,读操作无锁直接访问数组,实现了读写分离。这种设计带来读写不阻塞的优势,但也存在写入开销大、内存占用高和数据弱一致性问题。适用场景需避开高频写、大数据量和对强一致性要求高的场合。优化建议包括控制集合规模、批量更新和使用替代方案如ConcurrentHashMap等。该容器适合读多写少场景,但需权衡性能与一致性需求。
2025-07-04 21:00:53
297
原创 MySQL索引失效原因及方案
索引失效常见原因及优化方案:主要包括隐式类型转换、OR条件、模糊查询、不满足最左匹配原则、使用内置函数、列运算、不等值查询、NULL值查询、字符集不一致以及优化器误判等。这些情况会导致MySQL无法有效利用索引,转而进行全表扫描。通过EXPLAIN分析可识别具体失效原因,并采取相应优化措施,如拆分UNION查询、调整查询条件、使用覆盖索引或重建合适索引等来提升查询性能。
2025-05-25 18:20:57
353
原创 MySQL深分页和重复分页问题方案
本文总结了MySQL深分页问题的几种优化方案: 子查询优化:通过覆盖索引定位主键ID再关联查询,减少回表操作 游标分页:记录上一页最后位置,适合连续分页但不支持跳页 书签分页:类似游标,适用于非唯一排序字段 范围分页:在已知ID范围时使用BETWEEN替代LIMIT 缓存优化:预生成分页结果或使用Redis缓存 针对重复分页问题,提出了静态分页(创建快照)、游标稳定性(事务隔离)和版本控制分页三种解决方案。此外还建议为排序字段创建复合索引并限制最大分页深度,避免大数据量查询。
2025-05-25 18:04:58
493
原创 Windows安装Canal报错解决方案
GitHub的canal地址: GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件阿里巴巴 MySQL binlog 增量订阅&消费组件 . Contribute to alibaba/canal development by creating an account on GitHub.https://github.com/alibaba/canalGitHub的canal下载地址: Releases · alibaba/canal · GitHub阿里巴
2025-05-14 23:13:41
1094
原创 LangChain4j的AiService
AiServer是一种高级AI服务,通过声明式接口简化与大型语言模型(LLM)的交互,隐藏底层复杂性。它提供低代码复杂度、快速开发、内置标准化规则和高扩展性。开发者只需定义接口,LangChain4j会自动生成实现对象。AiServer支持注解如@SystemMessage和@UserMessage,用于动态定义系统提示和用户消息。此外,AiServer通过Result<T>包装返回数据,包含内容、Token消耗、数据来源、终止原因和工具执行记录等信息,适用于多种应用场景。
2025-05-14 17:52:19
1241
1
原创 LangChain4j的Tools
LangChain4j 提供了工具(Tools)的概念,用于弥补大语言模型(LLM)在复杂任务和数学计算上的不足。工具可以是网络搜索、调用外部 API 或执行特定代码片段。LLM 在接收到请求后,会判断是否需要使用工具,并生成工具调用请求,开发者负责执行工具并将结果返回给 LLM,LLM 最终生成结果。工具的实现分为低级和高级两种方式,低级实现需要手动处理工具调用和结果返回,而高级实现则自动完成这些步骤。工具方法通过 @Tool 注解声明,支持多种参数类型和返回类型,并可以处理异常。
2025-05-14 01:58:27
1183
原创 Docker安装Pulsar4.0.3踩坑笔记
首先保证VM虚拟机可以联网保证已经安装Docker设置为如果需要修改端口映射可以在安装时候:(将8080端口映射为8090)解释一下:java虚拟机无法分配足够内存,言外之意就是虚拟机内存太少了,要去启动页面的编辑虚拟机选项里去将内存调大我调到了5g,终于安装成功了。
2025-04-25 18:32:04
1123
原创 从源码探究MybatisPlus的@TableId生成时机问题
MybatisPlus的@TableId生成时机问题,为什么创建实体后id为null
2025-04-17 17:40:56
635
原创 关于SPringMVC整合Postman传参数时报错的问题
在每个参数前面加入@RequestParam(value = "xxxx"),设置好对应的属性名。新旧版本webmvc问题,旧版本可以使用新版本报错。
2024-11-18 19:42:59
568
原创 Redis缓存一致性方案
在Redis中在java中调用expire方法设置过期时间通过设置key的过期时间控制key在缓存的存活时间,既可以避免缓存数据溢出,也可以定期检查数据库和缓存的数据是否一致。
2024-11-16 20:21:28
950
原创 elasticsearch中ik_smart无法启动的问题
根据报错提示,检查ik分词器的资源文件,发现在ik的config目录中缺少stopword.dic。重新下载ik并且解压覆盖即可。
2024-11-10 18:08:39
808
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅