- 博客(63)
- 收藏
- 关注
原创 【Redis】底层原理解析(SDS / 跳表 / IO多路复用 / 单线程模型)
Redis的高性能源于其精妙设计:核心采用单线程事件驱动模型,通过I/O多路复用(如epoll)高效处理海量连接,避免了锁竞争和上下文切换。其自研的高效数据结构是关键——SDS实现O(1)长度获取与安全扩容,跳表以近似平衡树的性能支持ZSet排序,QuickList则结合了链表与压缩列表的优势。内存管理上,采用惰性删除+定期删除处理过期键,并通过LRU等策略进行内存淘汰。这种将内存操作、优化数据结构与高效网络模型深度融合的架构,是Redis快如闪电的根本原因。
2026-03-21 16:38:04
628
原创 【Redis】缓存问题及解决方案
本文总结了Redis在高并发场景下的核心问题及解决方案。主要内容包括:1)缓存三大问题(穿透、击穿、雪崩)及其应对策略;2)分布式锁的正确实现方式(SET NX EX原子操作+Lua脚本解锁);3)热点Key和Big Key问题的处理方案。文章提供了面试标准回答模板和项目实践建议,强调Redis不是万能药,错误使用反而会导致系统崩溃。核心观点是:合理使用缓存空值、布隆过滤器、互斥锁、随机过期时间等技术,才能确保Redis在高并发环境下稳定运行。
2026-03-21 16:35:29
510
原创 【Redis】高可用核心讲解
本文系统介绍了Redis高可用架构的核心技术,包括持久化机制(RDB快照和AOF日志)、主从复制原理、哨兵(Sentinel)的故障转移流程,以及Redis Cluster的分片实现。重点解析了生产环境推荐配置、各种模式的优缺点对比,并总结了面试高频问题及标准答案。文章强调Redis通过持久化+主从+哨兵+集群的组合方案,实现数据安全、高可用和大规模扩展能力,是构建可靠Redis系统的完整解决方案。
2026-03-20 16:50:34
461
原创 【Redis】数据结构讲解
Redis是一款基于内存的高性能Key-Value数据库,具有超高性能(10万+ QPS)、支持持久化和丰富数据结构等特点。其高性能源于内存存储、单线程模型、IO多路复用等设计。Redis提供5大核心数据结构:String(缓存/计数器)、Hash(对象存储)、List(消息队列)、Set(去重集合)和ZSet(排行榜)。底层采用SDS、跳表等高效结构。常见应用场景包括缓存、分布式锁、排行榜和计数器等。Spring Boot可通过StringRedisTemplate轻松集成Redis,实现高效数据存取。
2026-03-20 16:46:35
565
原创 【java IO】BIO、NIO、AIO 全面对比
本文全面对比了Java的三种IO模型:BIO、NIO和AIO。BIO采用阻塞式IO,一连接一线程,简单但性能低;NIO通过多路复用实现非阻塞IO,单线程处理多连接,适合高并发场景;AIO是真正的异步IO,基于回调机制,性能最高但实现复杂。文章详细分析了三种模型的工作原理、优缺点、核心组件及适用场景,特别强调了NIO在多路复用方面的优势,并介绍了Netty框架对NIO的优化。最后总结了面试高频问题,建议将NIO和Netty作为学习重点。
2026-03-18 23:38:16
410
原创 【java IO】转换流 + 对象流 + 序列化详解
本文深入讲解了Java IO中的转换流和对象流两大核心内容。转换流(InputStreamReader/OutputStreamWriter)解决了字符编码控制问题,实现了字节流与字符流的转换。对象流(ObjectInputStream/ObjectOutputStream)则用于对象的序列化与反序列化,重点介绍了Serializable接口、transient关键字和serialVersionUID的作用。文章还总结了常见易错点和面试高频问题,包括序列化原理、使用场景及原生序列化的局限性。
2026-03-18 23:36:34
353
原创 【java IO】缓冲流详解
本文详细介绍了Java IO中的缓冲流(Buffered Stream)及其性能优化原理。主要内容包括:缓冲流通过减少IO次数提升性能,分为字节缓冲流(BufferedInputStream/OutputStream)和字符缓冲流(BufferedReader/Writer);底层采用8KB缓冲区,工作流程是"磁盘→buffer→程序";提供了各类缓冲流的使用示例和最佳实践;对比了普通流与缓冲流的性能差异;列举了常见易错点和高频面试问题。
2026-03-18 23:34:49
501
原创 【java IO】字符流详解
本文深入讲解Java字符流Reader/Writer的使用和字符编码问题。主要内容包括:字符流与字节流的区别、Reader/Writer体系结构、FileReader/FileWriter使用方法、字符编码问题的本质及解决方案。重点分析了乱码产生原因(编码解码不一致)和解决方法(推荐使用InputStreamReader/OutputStreamWriter指定编码)。文章还总结了常见易错点、面试高频问题和最佳实践,强调统一使用UTF-8编码避免乱码,并推荐使用带缓冲的字符流以提高性能。
2026-03-17 23:54:58
539
原创 【java IO】字节流详解
本文深入讲解了Java IO中的字节流(InputStream/OutputStream)体系。主要内容包括:字节流的概念与适用场景、InputStream/OutputStream的类结构、常用方法(read/write)的使用示例、文件读取与写入的代码实现、文件复制的经典案例,以及现代Java推荐的try-with-resources写法。特别强调了字节流适用于处理图片、视频等二进制文件,并详细解析了批量读取的高效实现方式。文章还总结了字节流在文件复制、上传下载等场景的应用,是掌握Java IO字节流操
2026-03-17 23:53:40
538
原创 【java IO】IO体系结构 + File类详解
本文系统介绍了Java IO的基础知识,重点讲解了IO体系结构和File类的使用。首先阐述了IO的核心概念是程序与外部资源间的数据传输,数据以"流"的形式传输。Java IO分为四大类:File类、字节流、字符流和缓冲流/处理流。其中File类用于表示文件路径和管理文件操作,但不涉及文件内容读写。文章详细讲解了File类的创建文件/目录、判断文件信息、获取文件属性、删除文件等常用方法,并指出了常见易错点。
2026-03-17 23:50:28
587
原创 【MySQL】分表分库设计详解
MySQL分库分表详解:应对大数据与高并发的关键策略 摘要 随着业务规模增长,单库单表面临查询变慢、索引维护成本高、数据库压力过大等问题。分库分表通过将数据拆分到多个库表来提升系统性能,主要分为水平拆分(按数据维度)和垂直拆分(按业务)。常见策略包括按ID取模、范围分表、时间分表和Hash分片,各有利弊。实际应用中通常借助中间件实现,但会带来跨库JOIN、分页查询、全局ID和扩容等挑战。电商订单、日志和社交平台等大数据量场景尤其需要分库分表方案。
2026-03-15 13:25:53
620
原创 【java】System类详解
摘要:本文详细解析了Java核心类System的常见用法与特性。System类提供与JVM、操作系统交互的核心功能,包括标准输入输出流(out/in/err)、时间获取(currentTimeMillis/nanoTime)、数组复制(arraycopy)、程序终止(exit)等。文章从基础用法到实际场景应用,重点介绍了各方法的特点与区别,并总结了面试常见问题,如System.out类型、时间方法差异等。最后指出使用中的常见易错点,帮助开发者正确理解和使用System类。
2026-03-15 12:16:14
518
原创 【MySQL】查询优化技巧
MySQL查询优化核心摘要 数据库性能直接影响系统响应速度,MySQL查询优化通过调整SQL、索引、表结构等减少资源消耗。核心原则包括:避免SELECT*、合理使用索引(注意最左前缀)、避免索引失效(如函数处理列)、使用EXPLAIN分析执行计划、优化分页(避免大偏移)。常见误区包括盲目增加索引、LIKE滥用通配符等。实战步骤:定位慢SQL→分析执行计划→优化索引→重写SQL。面试重点涵盖索引原理(B+树)、最左前缀、索引失效场景及回表查询。
2026-03-15 11:48:38
732
原创 【MySQL】锁机制详解
本文系统讲解了MySQL锁机制,从概念、分类到实现原理,重点分析了行锁与表锁的区别及应用场景。详细介绍了InnoDB的行锁实现方式(记录锁、间隙锁、临键锁)和死锁处理策略,并提供了高并发优化方案,包括使用MVCC、创建索引、缩短事务等。最后总结了面试常见考点,帮助开发者深入理解锁机制,优化数据库并发性能,解决死锁问题。
2026-03-14 22:43:37
535
原创 【MySQL】事务隔离与MVCC详解
本文深入解析MySQL事务、隔离级别与MVCC机制,涵盖核心原理和实战应用。首先介绍事务基础概念和ACID特性(原子性、一致性、隔离性、持久性),详细分析四种隔离级别及其解决的并发问题(脏读、不可重复读、幻读)。重点阐述MVCC实现原理,包括隐藏字段和版本控制机制,说明其如何实现读写不阻塞。通过实际SQL示例演示事务操作和MVCC效果,指出常见误区(如REPEATABLE READ与幻读的关系),并总结面试高频考点。掌握这些知识可确保数据一致性,优化高并发系统性能。
2026-03-14 13:15:50
665
原创 【MySQL】索引原理详解
本文详细介绍了MySQL索引原理及优化实践。主要内容包括:索引基础概念(提高查询速度但占用存储空间)、不同类型索引(主键、唯一、普通、全文、复合索引)、B+Tree数据结构特点(适合范围查询)、聚簇索引与非聚簇索引区别(是否回表)、联合索引的最左前缀原则,以及索引优化技巧(避免全表扫描、使用覆盖索引、防止索引失效)。文章还总结了常见易错点和面试高频考点,强调合理设计索引和EXPLAIN验证的重要性。掌握这些知识可显著提升SQL查询性能。
2026-03-13 22:55:33
643
原创 【java】Queue(队列)接口详解
Java Queue接口详解:FIFO队列的核心方法与使用技巧 本文深入解析Java中的Queue接口,涵盖其FIFO特性、核心方法对比(add/offer、remove/poll、element/peek)以及实际应用场景。Queue作为Collection的子接口,既保留了集合的基本操作,又提供了两套API设计:异常处理版本和返回值处理版本。文章特别强调常见易错点,如LinkedList作为实现类的使用、null值限制等,并解答面试常见问题。
2026-03-12 09:11:25
512
原创 【java】Deque(双端队列)接口详解
本文详细讲解了Java中的Deque(双端队列)接口。主要内容包括:Deque的概念及其与Queue的区别,在集合框架中的位置,核心方法分类(插入、删除、查看元素),与Queue的关系,实现Stack的用法,以及常见使用场景如滑动窗口算法。文章还指出了常见易错点,如避免使用Stack类、ArrayDeque不允许null值等,并总结了面试常见问题。Deque因其双端操作特性,在实际开发中比Queue使用频率更高,是Java集合框架中重要的数据结构。
2026-03-11 21:41:44
370
原创 【Spring】深度剖析IoC
摘要:Spring IoC(控制反转)是Spring框架的核心基础,它将对象的创建和管理权从开发者转移给Spring容器,实现解耦和依赖管理。DI(依赖注入)是IoC的具体实现方式,通过@Autowired等注解自动注入依赖。Spring容器(如ApplicationContext)负责Bean的创建、管理和生命周期维护,核心技术是反射机制。IoC带来降低耦合、易于测试、统一管理等优势,并为AOP提供基础支持。常见问题包括@Autowired失效、static字段无法注入等。
2026-03-11 17:39:51
364
原创 【Spring】深度剖析AOP
Spring AOP通过动态代理实现方法增强,核心概念包括切面(Aspect)、连接点(JoinPoint)、切入点(Pointcut)、通知(Advice)和目标对象(Target)。提供5种通知类型:@Before/@After/@Around/@AfterReturning/@AfterThrowing。底层采用JDK动态代理(需接口)和CGLIB(无接口)两种方式。常用execution表达式定义切入点,如"execution(* com.service..(..))"。典型应用场景包括事务管理
2026-03-11 17:38:36
507
原创 【Spring】Bean的生命周期详解
本文系统介绍了Spring Bean的核心知识体系,包括: Bean概念:Spring容器管理的对象,通过IoC实现控制反转 创建方式:注解方式(@Component等)、@Bean配置、XML配置 作用域:单例(singleton)、多例(prototype)等不同作用域特点 生命周期:从实例化到销毁的完整流程,包含10个关键阶段 依赖注入:@Autowired、@Qualifier等常用注入方式 循环依赖:三级缓存机制解决单例Bean循环依赖问题
2026-03-11 17:36:38
505
原创 【Spring】AOP核心之原始对象与代理对象
本文深入解析了Spring框架中原始对象与代理对象的核心原理。原始对象是开发者编写的业务对象,而代理对象是Spring运行时生成的对象,用于在不修改业务代码的情况下实现AOP功能(如事务、日志等)。文章详细介绍了代理对象的执行流程、两种实现方式(JDK动态代理和CGLIB代理)及其区别,并分析了Spring如何选择代理方式。此外,还指出了常见的问题场景(如事务失效原因)和面试高频问题。通过理解原始对象与代理对象的关系,可以更好地掌握Spring AOP的工作原理。
2026-03-11 17:33:24
397
原创 【Spring】Mapper层常用注解详解
本文系统讲解了Spring Boot与MyBatis整合开发中Mapper层的核心注解及使用。主要内容包括:@Mapper注解标识MyBatis接口并自动生成实现;BaseMapper提供基础CRUD操作;@Repository用于持久层组件标识;@Select等注解实现SQL编写;@TableName等MyBatis-Plus实体映射注解。文章分析了各注解的使用方法、适用场景和常见错误,并给出了最佳实践建议。最后总结了Mapper层开发的核心注解体系,帮助开发者高效实现数据库操作和事务管理。
2026-03-09 09:54:59
579
原创 【Spring】控制层常见注解详解
Spring Boot控制层核心注解包括:@RestController用于标识REST API并返回JSON;请求映射通过@RequestMapping及其简化注解(@GetMapping等)定义路径;参数处理涉及@PathVariable(路径参数)、@RequestParam(查询参数)和@RequestBody(JSON请求体);@Validated用于启动参数校验。其他常用注解有@RequestHeader(获取请求头)、@CrossOrigin(跨域处理)及@ExceptionHandler等
2026-03-08 22:13:20
445
原创 【Spring】Service层常用注解详解
本文系统讲解了Spring Boot Service层核心注解的使用方法和注意事项。主要内容包括:1) @Service注解标识业务组件;2) @Transactional实现事务管理及其常见属性和易错点;3) @Autowired和@Resource依赖注入的区别;4) @Qualifier解决多实现类问题;5) MyBatis-Plus的ServiceImpl简化CRUD操作。文章还总结了Service层最佳实践和常见面试问题,帮助开发者正确使用这些注解构建健壮的Service层。
2026-03-08 22:12:04
524
原创 【Java】JDK、JRE、JVM三者最通俗的讲解
本文系统讲解了Java运行环境的三大核心组件:JDK(开发工具包)、JRE(运行环境)和JVM(虚拟机)。JVM是执行字节码的核心引擎,JRE包含JVM和核心类库用于运行程序,JDK则包含JRE及开发工具用于编写和编译代码。三者关系为JDK包含JRE,JRE包含JVM。文章还详细说明了Java程序从编写到运行的完整流程:源代码→编译→字节码→JVM执行→程序运行,并总结了面试常见考点,如跨平台原理和JVM内部组件等。理解这些概念有助于掌握Java程序的底层运行机制。
2026-03-08 12:32:28
624
原创 【java】浅拷贝与深拷贝详解
Java浅拷贝与深拷贝核心解析 本文系统讲解了Java中对象拷贝的关键概念: 浅拷贝仅复制对象本身,共享引用对象(通过默认clone()实现) 深拷贝会递归复制所有引用对象(需重写clone()或使用序列化) 两种实现方式对比:clone()方法适合简单对象,序列化适合复杂对象 面试重点:Cloneable接口作用、修改引用对象的影响差异、集合拷贝特性 典型区别: 浅拷贝修改引用对象会影响原对象 深拷贝新旧对象完全独立 掌握这些知识点对编写线程安全代码和应对技术面试都至关重要。
2026-03-08 12:22:52
502
原创 【java】基本数据类型与包装类:拆箱装箱机制
本文系统讲解Java基本数据类型与包装类的核心知识点,包括8种基本类型及其特点、对应的包装类、装箱拆箱机制及原理。重点分析了包装类的缓存机制(-128~127范围)及其性能优化作用,并总结了面试常见问题,如自动转换原理、null拆箱异常和==与equals的区别。最后对比了基本类型(栈存储、高效)和包装类(对象特性、集合适用)的差异,帮助开发者正确选择使用场景并避免常见陷阱。
2026-03-08 12:21:42
462
原创 【java】并发编程之synchronized详解
本文全面解析 Java 中的 synchronized 同步机制。首先通过计数器案例展示多线程并发问题,引出 synchronized 的必要性。详细讲解其三种使用方式:同步方法(锁当前实例对象)、同步代码块(推荐使用专用锁对象提升性能)和静态同步方法(锁 Class 对象)。重点分析了锁对象选择的业务场景,强调专用锁对象优于 synchronized(this) 的原因:避免意外竞争、减小锁粒度、提高代码清晰度。文章从实际应用到底层原理,帮助开发者正确使用 synchronized 保证线程安全。
2026-03-07 22:47:01
391
1
原创 【java】并发编程之锁
本文全面解析Java中的锁机制,涵盖基础概念、实现原理和实际应用。主要内容包括:1)锁的作用是解决多线程并发访问共享资源时的线程安全问题;2)Java提供synchronized内置锁和Lock接口两种实现方式;3)详细对比synchronized和Lock的特性差异;4)介绍可重入锁、读写锁等高级锁类型;5)分析悲观锁与乐观锁的不同思想;6)列举常见使用场景和典型错误;7)解释JVM的锁优化机制(偏向锁、轻量级锁、重量级锁);8)总结面试高频问题。帮助开发者深入理解Java并发编程中的核心锁机制。
2026-03-07 22:41:25
438
原创 【java】注解详解:从原理到使用
Java注解(Annotation)是现代Java开发的核心机制,广泛用于Spring、MyBatis等框架。本文全面解析了注解的概念、原理和使用方法:1)注解本质是特殊接口,通过反射机制解析;2)内置注解如@Override、@Deprecated;3)自定义注解步骤包括定义、作用范围和生命周期设置;4)常见应用场景包括依赖注入、事务管理等;5)对比了注解与XML配置的优劣。重点指出注解必须被框架或反射解析才能生效,并总结了面试常见问题,帮助开发者深入理解这一重要特性。
2026-03-07 22:39:46
435
原创 【java】缓存机制详解
本文深入解析Java缓存机制,从基础概念到实际应用全面覆盖。主要内容包括:缓存的定义与核心价值(提升访问速度、减轻数据库压力、提高并发能力);Java中三种缓存实现方式(本地缓存、分布式缓存、多级缓存)及各自优缺点;典型缓存工作流程Cache Aside Pattern;重点剖析缓存三大问题(穿透、击穿、雪崩),特别是缓存击穿的解决方案(互斥锁、热点数据永不过期、逻辑过期);最后推荐高性能缓存工具Caffeine并总结面试高频问题。全文系统性地讲解了缓存技术的原理、实现和最佳实践。
2026-03-07 11:49:00
600
原创 【java】JVM内存结构之方法区详解
本文详细讲解了Java方法区(Method Area)的概念及其在JVM内存结构中的作用。方法区存储类元数据(类信息、运行时常量池、静态变量等),与堆(存储对象实例)和栈(方法调用)构成JVM核心内存结构。JDK8后方法区从永久代(PermGen)改为元空间(Metaspace),使用本地内存且可扩展。文章还分析了方法区GC、OOM原因及面试常见问题,最终总结JVM内存模型的核心关系:方法区存类信息、堆存对象实例、栈处理方法调用,三者共同构成JVM运行时内存的基础架构。
2026-03-07 11:48:08
628
原创 【java】深入理解 Java 垃圾回收器(GC)
本文系统解析了Java垃圾回收机制(GC),从基础概念到实践应用。主要内容包括: GC原理:通过可达性分析判断对象死亡 JVM内存结构:堆分为新生代(Eden/Survivor)和老年代 四大垃圾回收算法:标记清除、复制、标记整理、分代收集 主流垃圾回收器:Serial/Parallel/CMS/G1的特点及适用场景 GC触发条件和常见面试问题 GC通过自动内存管理提高开发效率,但不同场景需选择合适的回收器和调优策略。理解GC机制对优化Java应用性能和解决内存问题至关重要。
2026-03-06 10:27:24
795
原创 【Spring】事务(Transaction)详解
本文详细介绍了Java和Spring中的事务机制。事务是保证数据一致性的核心,具备ACID四大特性(原子性、一致性、隔离性、持久性)。Spring通过@Transactional注解提供声明式事务管理,底层采用AOP+动态代理实现。文章还分析了事务传播行为、隔离级别、常见失效场景(如内部调用、private方法等)以及实际应用场景(如转账、订单创建)。理解事务原理和正确使用方式对保证系统数据完整性至关重要。
2026-03-06 10:03:48
607
原创 【java】从原理到使用深度解析反射机制
Java反射机制是程序运行时动态获取类信息并操作对象的能力,广泛应用于Spring、MyBatis等框架中。文章详细介绍了反射的核心类(Class、Method、Field等)、基本操作(创建对象、调用方法、修改字段)以及底层原理(类加载机制和invoke执行过程)。虽然反射存在性能损耗和破坏封装性的缺点,但在现代JVM优化和缓存机制下,其性能影响可忽略不计。文章还总结了反射的典型应用场景(框架设计、动态代理、注解解析)和面试常见问题,并指出MethodHandle作为Java7引入的更优替代方案。
2026-03-05 09:17:27
495
原创 【java】小白也能看懂的堆栈讲解
本文深入解析Java内存模型中的堆和栈。栈是线程私有的,采用先进后出结构存储方法调用和局部变量,方法结束自动释放;堆是线程共享的,存储对象实例,由GC管理。文章通过代码示例说明变量和对象的存储位置,解释StackOverflowError和OOM的成因,并剖析JVM内存结构设计哲学。同时指出常见误区,如对象不一定全在堆、成员变量的基本类型存储在堆中等。最后提供面试回答技巧,强调理解堆栈对性能优化、内存管理和并发问题的重要性。全文从基础概念到JVM实现原理,系统性地阐述了堆和栈的本质区别及设计意义。
2026-03-05 09:16:16
529
原创 【java】String类详解(含易错点)
Java String 类深度解析:从基础到高级特性。String 是 Java 中最核心的类,涉及字符串常量池、不可变性、性能优化等关键概念。文章详细介绍了 String 的创建方式、常用方法、底层实现原理,并对比了 StringBuilder 和 StringBuffer 的区别。特别强调了字符串拼接的性能问题、equals 与 == 的区别、正则表达式使用注意事项等常见陷阱。最后还介绍了 JDK 8 后 String 底层实现的优化改进,帮助开发者全面掌握 String 类的正确使用方式。
2026-03-04 09:11:59
629
原创 【java】Lambda表达式详解
Java Lambda 表达式是 Java 8 引入的函数式编程特性,用于简化函数式接口的实现。文章系统介绍了 Lambda 的基本语法、使用前提(仅适用于单抽象方法的函数式接口)以及典型应用场景(集合操作、线程创建等)。同时对比了 Lambda 与匿名内部类的区别,指出其底层通过 invokedynamic 指令实现,性能更优但调试较困难。文章还总结了方法引用、常见易错点(如变量需有效final)和使用建议,强调 Lambda 不仅使代码更简洁,更推动了 Java 向函数式编程发展。
2026-03-04 09:11:37
497
原创 【java】Math类详解
摘要:Java的Math类提供了丰富的数学计算方法,包括绝对值、最大/最小值、平方根、幂运算、随机数生成等基础功能,以及舍入规则、三角函数、指数对数等高级计算。Math类所有方法均为静态,无需实例化即可使用。开发中需注意精度问题、整数溢出风险、随机数生成质量等易错点,特别在金融计算等场景应使用BigDecimal替代。JDK8+新增的Exact方法可防止数值溢出,而Math与StrictMath的主要区别在于性能和跨平台精度保证。正确使用Math类能有效处理各种数值计算需求,但需警惕边界条件和精度误差。
2026-03-03 18:20:46
593
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅