- 博客(22)
- 收藏
- 关注
原创 《Elasticsearch全文检索核心技术解析》
Elasticsearch是一款基于Lucene的分布式搜索引擎,核心功能包括全文检索、数据分析和实时监控。其核心概念涵盖索引(类似数据库表)、文档(JSON格式数据单元)、字段、映射和分片。通过倒排索引实现高效全文检索,采用分布式架构处理海量数据。环境搭建包括安装Elasticsearch和IK中文分词器。基础操作涉及索引创建、文档增删改查及批量处理。查询DSL支持全文检索、精确查询、复合查询、聚合分析和地理查询。常见问题解决方案包括优化分词效果、管理内存使用和维护集群健康。
2025-09-15 19:19:39
373
原创 《Redis核心机制解析》
Redis是一款高性能键值存储系统,支持五种核心数据类型(String、List、Hash、Set、ZSet),相比Memcached具有更丰富的数据结构和持久化功能。Redis采用单线程模型(6.0后优化I/O多线程)避免锁竞争,通过RDB快照和AOF日志两种持久化方式保障数据安全。内存管理提供定时/惰性/定期三种过期键删除策略,以及LRU/LFU等8种内存淘汰机制。其设计通过内存存储、I/O多路复用等技术实现高性能,适用于缓存、消息队列等场景,在数据完整性和性能间提供灵活选择方案。
2025-09-12 17:59:31
786
原创 《RocketMQ核心架构与实战解析》
摘要:RocketMQ是一款分布式消息中间件,核心架构包含NameServer(路由注册中心)、Broker(消息服务器)、Producer(生产者)和Consumer(消费者)四大组件。支持同步、异步和单向三种消息发送方式,提供集群和广播两种消费模式。通过Topic、Queue、Tag等概念实现消息分类管理,采用Offset机制确保消息有序消费。针对分布式场景下的消息重复消费问题,建议通过消息ID、业务唯一键或分布式锁实现幂等性处理。相比ZooKeeper,RocketMQ自主研发的NameServer具
2025-09-11 19:22:48
813
原创 《深入解析数据库事务的ACID特性》
例如执行SELECT * FROM account WHERE id BETWEEN 1 AND 10 FOR UPDATE时,不仅会锁定 id=1~10 的行,还会锁定 “1~10 之间的间隙”(如 id=5 不存在,也会锁定该位置),防止其他事务插入 id 在 1~10 之间的数据。所以,InnoDB 实现MVCC,是通过Read View+ Undo Log 实现的,Undo Log 保存了历史快照,Read View可见性规则帮助判断当前版本的数据是否可见。
2025-09-10 19:29:18
711
原创 《揭秘SpringBoot启动流程核心机制》
在日常开发中,我们只需编写一个标注@SpringBootApplication的启动类,调用SpringApplication.run()方法就能启动一个 Spring Boot 应用。但这行简单代码背后,隐藏着复杂且完整的启动流程 —— 从初始化应用上下文,到自动配置生效,再到最终容器就绪。追踪 SpringApplication.run() 源码,会发现它先通过重载方法完成。三.SpringApplication.run()实例方法。实例初始化完成后,会调用run(args)方法。
2025-08-24 20:08:58
459
原创 《揭秘SpringBoot自动配置核心原理》
摘要:SpringBoot的@SpringBootApplication注解由三个核心注解组成:@SpringBootConfiguration(标记为配置类)、@ComponentScan(组件扫描)和@EnableAutoConfiguration(自动配置核心)。自动配置通过AutoConfigurationImportSelector实现,会扫描META-INF/spring.factories和AutoConfiguration.imports文件加载候选配置类,经条件筛选后注册生效配置。以Red
2025-08-24 17:08:23
971
原创 《事物的传播行为》
事务传播行为用于解决业务方法间调用时的事务处理问题,定义了7种传播方式:1)REQUIRED(默认)存在事务则加入,否则新建;2)REQUIRES_NEW新建事务并挂起当前事务;3)NESTED在当前事务中创建嵌套事务;4)MANDATORY必须存在事务否则抛异常;5)SUPPORTS存在事务则加入,否则非事务运行;6)NOT_SUPPORTED非事务运行并挂起当前事务;7)NEVER非事务运行,存在事务则抛异常。每种方式适用于不同场景,如REQUIRES_NEW适合日志记录等独立操作,MANDATORY确
2025-08-19 19:30:53
773
原创 《Spring Bean生命周期全解析》
Spring Bean的生命周期分为四个阶段:实例化、属性注入、初始化和销毁。实例化阶段通过反射创建Bean实例,并存储BeanDefinition;属性注入阶段通过setter方法或构造函数注入依赖;初始化阶段包括Aware接口回调、BeanPostProcessor前后置处理及InitializingBean接口执行;销毁阶段则通过DisposableBean接口和自定义销毁方法释放资源。整个过程中,Spring通过三级缓存解决循环依赖问题,并提供了多种扩展点(如BeanFactoryPostProce
2025-08-17 19:16:21
682
原创 《executor执行器》
不支持查询,doQuery直接抛出异常,因为 JDBC 批处理不支持 SELECT批量累积:doUpdate通过handler.batch(stmt)调用Statement.addBatch ,将 SQL 加入批处理队列doFlushStatements统一执行:实际执行在doFlushStatements,调用stmt.executeBatch()批量执行。
2025-08-10 21:44:30
540
原创 《MyBatis动态代理实现Mapper接口原理》
MyBatis通过动态代理实现Mapper接口的无实现类调用。核心流程为:1)初始化时,MyBatis为每个Mapper接口创建MapperProxyFactory代理工厂;2)调用getMapper()时,工厂生成包含SqlSession的代理对象;3)方法调用被MapperProxy拦截,通过接口名+方法名定位SQL语句;4)由MapperMethod执行具体SQL操作,通过Executor执行并返回结果。整个过程利用JDK动态代理和配置映射,实现了接口方法与SQL语句的自动绑定,开发者只需定义接口即可
2025-08-10 19:11:14
421
原创 《计算机网络传输层》
本文摘要:传输层负责端到端的数据可靠传输,主要协议包括TCP和UDP。TCP通过三次握手建立连接、四次挥手断开连接,采用确认应答、流量控制、拥塞控制等机制确保可靠性,适用于文件传输等场景;UDP无连接且不保证可靠传输,但效率高,适用于音视频直播等场景。此外还介绍了MTU/MSS、TCP粘包、滑动窗口等概念,以及TCP报文格式和重传机制等关键技术细节。
2025-08-07 19:19:20
858
原创 《计算机网络模型及应用层详述》
本文介绍了计算机网络的分层模型,重点概述了TCP/IP四层模型中的各层功能。应用层负责基于HTTP、DNS、SMTP等协议提供网络服务;传输层通过TCP/UDP协议确保端到端数据传输;网络层实现IP协议进行跨网络寻址和路由;网络接口层则处理物理网络的数据帧传输。文章详细阐述了HTTP协议的工作流程、请求/响应报文结构、状态码分类、长短连接机制,以及HTTPS的加密原理和握手过程。通过对比OSI七层模型,说明了TCP/IP四层模型在实际网络通信中的简化实现方式。
2025-07-30 18:28:45
651
原创 《JVM组成与具体解析》
JVM由类加载子系统、运行时数据区和执行引擎组成。类加载采用双亲委派机制,包含启动类加载器、扩展类加载器和应用类加载器。运行时数据区包括线程私有的程序计数器、虚拟机栈、本地方法栈,以及线程共享的堆区和方法区。堆区分新生代(Eden、Survivor区)和老年代,采用分代回收策略。垃圾回收算法包括标记-清除、复制和标记-整理,配合Serial、CMS、G1等多种收集器实现高效回收。执行引擎包含解释器和JIT即时编译器,通过热点代码检测提升执行效率。
2025-07-25 16:58:25
909
原创 《线程池的状态》
运行状态,线程池一旦被创建,就处于RUNNING状态,并且线程池中的任务数为 0.该状态的线程池会接收新任务,并处理工作队列中的任务。:停止状态,该状态的线程不会接收新任务,也不会处理阻塞队列中的任务,而且会中断在 运行 的任务;调用线程池的shutdownNow()方法,可以切换到STOP停止状态;:关闭状态,该状态的线程池不会接收新任务,但会处理工作队列中的任务;:整理状态,该状态表明所有的任务已经运行终止,记录的任务数量为0;
2025-07-23 17:34:06
193
原创 《线程池的核心配置参数和流程》
则将该线程任务放入工作队列进行等待。2. 如果线程池中不存在空闲线程,则线程池会判断当前“存活的线程数”是否小于核心线程数corePoolSize。:非核心线程线程存活时间,当一个可被回收的线程的空闲时间大于keepAliveTime,就会被回收。:拒绝策略,当线程池线程内的线程耗尽,并且工作队列达到已满时,新提交的任务,将使用拒绝策略进行处理。1.提交一个新线程任务,线程池会在线程池中分配一个空闲线程,用于执行线程任务;corePoolSize,线程池会创建一个新线程(核心线程)去处理新线程任务;
2025-07-22 19:30:19
421
原创 《谈谈CAS的理解》
可以通过JDK的Atomic包中的AtomicStampedReference类来解决ABA问题:使用compareAndSet方法的作用是首先检查当前引用是否等于预期引用,并且检查当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。:是一种无锁,非阻塞的线程同步解决方案,可以保证在多线程并发中保障共享资源的原子性操作,相对于synchronized或Lock来说,是一种轻量级的实现方案。若相等更新新值,若不相等更新失败。CAS高效的实现原子操作中包含的问题。
2025-07-21 19:30:45
314
原创 《Integer缓存池》
对象的数组,缓存了从 -128 到指定上限(代码中默认是127)的数 ,所以Integer在自动装箱的时候可以直接用这些数。对象时,直接从缓存池中获取,避免了频繁创建新对象,提高了程序的运行效率。类型的变量赋值 -52 时,会自动装箱。当传入的值不在这个范围内时,才会创建一个新的。方法用缓存池,当数值为-128 到 127 之间的。对象时,不管是几,都会在堆内存中创建新的对象。这是Integer代码类中的静态内部类,对象,它们在堆内存中有不同的空间。缓存池的范围时,该方法会直接从。引用的是缓存池中同一个。
2025-03-18 20:41:06
274
原创 《StringBuilder类的数据结构和扩容方式解读》
如下为StringBuilder中源码//获取传入字符串长度+16传入父类构造函数中设置StringBuilder容量。// 如下,StringBuilder使用append追加时,则会调用StringBuilder类中的append方法。//如果新容量小于最小容量,说明计算出的新容量不足以满足需求,此时将新容量设置为 minCapacity。//如果结果大于 0,说明所需的最小容量超过了当前的容量,需要进行扩容操作。//是将当前数组 value的长度左移一位加 2,得到一个初始的新容量。
2025-03-06 17:21:33
463
1
原创 《String类的equals()的作用和源代码解读》
在java中,每个类都是java.lang.Object的子类,equals()为java.lang.Object中的一个方法,//equals方法接收一个Object类型的参数并返回boolean类型。//equals方法接收一个Object类型的参数并返回boolean类型。//使用n自减,n为当前字符数组长度或anotherString长度。//如果anObject 的实例为String。//字符全部相同,结果返回true。//获取当前字符数组的长度存入n。//为同一个,则返回true。
2025-01-20 19:26:51
426
1
原创 《String为什么是不可变的?》
根据运行结果可知:在修改字符串时olds字符串不变。都会将新的修改内容保存到一个新的字符串对象中,来作为数据结构,保存字符串中的所有字符。该数组使用final关键字修饰,该数组。一旦创建就不能再重新分配内存空间。根据源码可知,每个修改字符串方法,(1)因为String内部使用。并不会修改原字符串内容。/产生一个新的字符对象。
2025-01-20 18:05:10
369
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人