- 博客(22)
- 收藏
- 关注
原创 《Shiro是什么?》
本文介绍了Apache Shiro这一轻量级Java安全框架在权限管理中的应用。文章首先阐述了权限管理的核心逻辑,包括认证(确认用户身份)和授权(控制资源访问)两大流程,并详细说明了相关概念如Subject、Principal、Credential等。随后分析了Shiro框架的特点:易用性、灵活性、全场景支持和轻量级架构,并解析了其七大核心组件(Subject、SecurityManager等)的协作机制。
2025-10-07 17:15:46
951
原创 《什么是Redis?》
本文介绍了Redis作为高性能键值数据库的核心特性与应用场景。首先分析了传统关系型数据库在高并发场景下的性能瓶颈,引出NoSQL数据库的优势。重点讲解了Redis的5种数据类型(String、Hash、List、Set、Sorted_Set)及其适用场景,详细解析了RDB和AOF两种持久化机制的特点与选择策略。针对内存管理问题,阐述了基于过期时间和内存淘汰的删除策略。最后提供了企业级解决方案,包括缓存预热、雪崩/击穿/穿透问题的应对措施。文章强调理解Redis底层原理对实际应用的重要性,适合初学者系统学习。
2025-10-07 16:32:12
873
原创 简单理解 AQS 原理
AQS (AbstractQueuedSynchronizer) 是Java并发编程的核心框架,为ReentrantLock、Semaphore等同步工具提供底层支持。其核心原理包括:1) volatile state变量维护同步状态;2) CLH双向队列管理等待线程;3) CAS操作保证原子性修改。ReentrantLock通过继承AQS实现公平/非公平锁,公平锁严格按队列顺序获取,非公平锁允许"插队"。AQS采用模板方法模式,由子类实现tryAcquire等核心方法,支持构建多种同步
2025-09-16 10:37:06
736
原创 深入理解 CAS:并发编程的原子操作基石
CAS(比较并交换)是一种乐观锁技术,通过硬件原语实现多线程环境下的原子操作。它包含内存地址、预期值和新值三个核心参数,通过"读取-计算-比较并交换"的原子操作流程实现线程安全。在Java中通过Unsafe类实现,AtomicInteger是其典型应用。优点是无锁高效,但存在自旋开销大、仅支持单变量原子操作和ABA问题等缺点。ABA问题可通过AtomicStampedReference解决。CAS是Java并发编程的重要基石,需根据场景合理使用。
2025-09-15 11:21:40
414
原创 深入理解 ReentrantLock 可重入锁
本文深入探讨Java并发编程中的ReentrantLock机制。作为synchronized的升级替代方案,ReentrantLock基于AQS实现可重入特性,支持公平/非公平锁选择、中断获取、超时控制等高级功能。文章详细解析其核心特性(如条件变量、锁状态检测)、底层实现原理(Sync、NonfairSync、FairSync三个内部类),并通过代码示例展示中断获取、超时控制等应用场景。最后对比了ReentrantLock与synchronized的关键差异,指出ReentrantLock在复杂并发场景下的
2025-09-14 18:43:47
1055
原创 深入理解Java动态代理:JDK代理与CGLIB代理全面解析
本文深入解析Java动态代理技术,包括JDK动态代理和CGLIB动态代理。代理模式通过中介对象控制访问,在不修改原代码的情况下添加额外功能。JDK动态代理基于接口,使用Proxy和InvocationHandler实现;CGLIB通过继承生成子类代理,适用于无接口类且性能更优。文章对比了两种代理的优缺点、适用场景和实现步骤,帮助开发者理解核心技术原理,为学习Spring框架奠定基础。动态代理是框架设计的核心,能有效提升代码复用性和灵活性。
2025-09-10 21:32:35
944
原创 《UDP协议详解》
UDP协议以其简洁、高效、低延迟的特性,在实时性要求高的应用场景中发挥着不可替代的作用。尽管它不提供可靠性保证,但通过应用层协议的设计,可以在必要时弥补这一缺陷。理解UDP的工作原理和适用场景,有助于我们在实际开发中做出更合理的协议选择,优化网络通信性能。
2025-09-09 12:06:40
1032
原创 TCP协议核心机制详解:握手、挥手、可靠传输与拥塞控制
本文系统解析了TCP协议的核心机制,包括连接管理、可靠传输、流量控制和拥塞控制等关键环节。TCP作为面向连接的可靠传输层协议,通过三次握手建立连接、四次挥手释放连接,并采用确认应答、重传机制、滑动窗口等技术确保数据传输的可靠性。文章详细介绍了TCP报文格式、控制位功能,以及超时重传、快速重传等重传策略,并深入分析了慢启动、拥塞避免等拥塞控制算法。理解这些机制对网络编程、性能优化和故障排查具有重要意义,是构建稳定高效系统的理论基础。
2025-09-08 21:03:21
959
原创 HTTP 协议:从原理到应用的深度剖析
HTTP协议是互联网通信的基础应用层协议,采用请求-响应模式实现超文本数据传输。文章详细解析了HTTP的通信过程、报文结构(请求/响应)、请求方法(GET/POST等)、状态码分类(2XX-5XX)以及连接管理机制(长/短连接)。重点对比了HTTP与HTTPS的区别,阐明HTTPS通过SSL/TLS加密解决了HTTP明文传输的安全隐患,并介绍了对称/非对称加密原理。全文系统梳理了HTTP协议的核心技术要点,为理解Web通信机制提供了全面参考。
2025-09-07 17:53:52
1525
原创 Java多线程编程全面解析:从基础概念到高级应用
Java多线程编程是一个复杂但强大的领域,掌握线程的基本概念、状态管理、常用方法以及现代线程技术,对于开发高性能、高并发的应用程序至关重要。在实际开发中,应根据具体需求选择合适的线程实现方式和同步机制,并遵循最佳实践以确保程序的稳定性和性能。希望本文能帮助你建立完整的Java多线程知识体系,为今后的开发工作打下坚实基础。
2025-09-04 19:24:27
874
原创 从基础到进阶:synchronized 关键字全方位解析(线程安全 + 锁升级 + 原理)
当多个线程同时读写同一个共享变量时,若出现 “数据不一致” 的情况,就说明存在线程安全问题。synchronized 是Java中实现线程同步的基础机制,通过锁机制保证代码块的原子性。了解其底层实现(如锁升级、对象头、Monitor)有助于更好地使用和优化多线程程序。在实际开发中,应根据具体场景选择合适的同步策略,避免过度同步带来的性能问题。希望本文能帮助你更好地理解 synchronized 及其在多线程环境中的应用。如果有任何问题或建议,欢迎在评论区留言!
2025-09-03 22:00:51
757
原创 深入理解JVM垃圾收集器:从算法到实战
本文系统介绍了JVM垃圾收集机制的核心原理。首先阐述了判断对象存活的可达性分析算法,以及Java中的四种引用类型(强、软、弱、虚引用)。然后详细分析了三种垃圾收集算法:标记-清除、复制和标记-整理算法,比较了它们的优缺点。最后重点讲解了Serial、ParNew、CMS、G1等主流垃圾收集器的特点及适用场景,其中G1收集器因其可预测停顿时间成为大内存环境的首选。理解这些知识对优化Java程序性能、解决内存问题具有重要意义。
2025-09-02 22:34:26
933
原创 深入理解JAVA内存模型(JMM)
Java内存模型(JMM)是理解JVM运行机制的关键,主要包括线程共享区(堆、元空间)、线程私有区(程序计数器、虚拟机栈、本地方法栈)和字符串常量池。JDK1.8后,永久代被元空间取代,堆内存采用分代管理(新生代Eden/Survivor区,老年代)。线程私有区负责方法执行跟踪,字符串常量池优化字符串存储。掌握JMM有助于优化性能、排查内存问题,是Java开发的重要基础。
2025-08-30 11:59:25
961
2
原创 Java线程池全方位解析:从核心概念到实战应用
本文全面解析Java线程池的核心知识,包括其概念、作用及实现原理。线程池通过复用线程降低资源消耗,提高响应速度,并提供拒绝机制防止系统过载。文章详细介绍了线程池的核心接口(Executor、ExecutorService等)、实现类(ThreadPoolExecutor、ScheduledThreadPoolExecutor等)及工具类Executors,对比了它们的区别与适用场景。重点讲解了ThreadPoolExecutor的配置参数、任务队列类型、拒绝策略和执行流程,并提供了参数设置建议。最后总结了线
2025-08-25 08:30:00
1256
2
原创 《Spring中Bean的生命周期》
Spring Bean的生命周期可以划分为四个主要阶段:1.实例化阶段:Bean的创建过程2.初始化阶段:Bean的依赖注入和初始化3.使用阶段:Bean的成熟期4.销毁阶段:Bean的销毁过程核心载体是 Bean 的 “蓝图”,控制实例化、初始化逻辑。扩展点(修改 BD)、(增强 Bean)是 Spring 扩展的核心。AOP 时机:AOP 代理在阶段生成,因此拦截的方法不包括 Bean 自身的初始化方法(初始化方法在代理前执行)。循环依赖。
2025-07-30 10:42:46
1080
原创 《MyBatis的运行原理》
MyBatis作为一款优秀的持久层框架,其设计精巧、扩展性强,理解其运行原理对于高效使用和问题排查至关重要。希望本文能够帮助读者更好地理解和使用MyBatis框架。
2025-07-21 14:30:00
913
5
原创 《StringBuilder类的数据结构和扩容方式解读》
在java中,String是不可变的,频繁的字符串拼接操作如果使用String类,会导致大量的内存开销和性能问题,为了解决这一问题,Java提供了StringBuilder类,它是可变的字符序列,显著提高了字符串操作的效率。
2025-03-21 22:42:04
1081
原创 String类的equals()的作用和源代码解读
在Object父类当中,可以看到equals()方法,是用“==”在进行比较,而对于字符串这种常见的数据类型,开发者通常需要比较的是字符串的内容是否相等,而不是引用是否相同,因此我们会在String类中重写equals方法。
2025-03-06 12:00:00
365
原创 String为什么是不可变的?
在Java中String类是一个不可变类,至于不可变的原因,我们可以看一下String类的一段源码,可以看到一组用“final”关键字修饰的字符数组value[]。"关键字,我们知道用final修饰的基本数据类型,那就不能再对这个基本类型的变量重新赋值,也就是我们常说的“常量”,常量不可以更改;用final关键字修饰的引用类型,则这个引用指向的地址就不能发生改变,但这个对象是可以发生改变的。这表示,在字符串截取时,并不是在原来的内容上进行修改,而是截取给定长度的字符串,分配新的空间,去存储截取的字符串。
2025-03-05 14:49:10
752
原创 Java有哪些优势?
在淘宝,美团,拼多多,蚂蚁金服等互联网应用中,面对秒杀,大促,优惠券,支付等用户量和数据量比较大的特殊业务场景,),这些开源技术组件,可以在应用程序,架构设计,稳定性,性能以及开发效率等方面,起到很好的技术支撑作用,提高开发效率和性能;除了自身拥有网络,线程,数据结构,图形图像,加密等丰富核心类库外,技术社区同时也非常繁荣,具备良好的技术生态圈。语言在编写应用程序时,不需要程序员去手工完成内存的分配与回收,避免由于编程不当产生内存泄漏等问题,提高程序的稳定性。源代码在进行一次编译后,形成的。
2025-02-11 18:09:03
656
原创 浮点数为什么会出现精度丢失?
在计算机中,计算机使用二进制进行运算,程序中的十进制数字,会先转换成二进制,再进行运算。在转换成二进制时,可能会出现无限循环的情况,然而内存空间是有限的,这时,计算机会强行取一个近似值,通常都是取无限接近于原值的近似值,导致出现精度丢失的情况。
2025-02-11 17:29:09
513
原创 java中基本数据类型和引用数据类型有哪些,它们有什么区别?
byte(字节型,占1个字节)、short(短整型,占2个字节)、int(整型,占4 个字节)、long(长整型,占8个字节)float(单精度浮点型,占4个字节)、double(双精度浮点型,占8个字节):char(字符型,占2个字节)、boolean(布尔型,占4个字节)(VM Stack)中分配空间;(Heap)中分配空间。直接访问;通过引用访问
2025-02-11 16:16:56
495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅