- 博客(33)
- 收藏
- 关注
原创 Spring--循环依赖以及三级缓存详解
Spring通过三级缓存机制解决单例Bean的循环依赖问题,核心流程包括:一级缓存存储完整初始化的Bean,二级缓存保存早期对象,三级缓存处理AOP代理。该机制能在属性注入时提供临时引用,打破"鸡生蛋"的死循环。但无法解决构造器注入、原型模式等场景的循环依赖。通过分析源码可见,三级缓存的关键在于ObjectFactory的延迟处理能力,确保AOP代理的正确创建。开发中应合理设计依赖关系,避免构造器循环等无法处理的情况。
2025-07-05 22:27:18
1404
1
原创 Spring--IOC容器的启动流程图解版
Spring IOC(Inversion of Control,控制反转)容器是Spring框架的核心组件,它负责管理对象的创建、配置和生命周期。IOC容器通过依赖注入(DI)来实现控制反转。
2025-06-26 17:00:41
1523
原创 JAVA集合篇--深入理解ConcurrentHashMap图解版
在Java并发编程中,线程安全的Map实现一直是一个重要话题。虽然我们可以使用或者HashTable来获得线程安全的Map,但它们的性能在高并发场景下往往不尽人意。ConcurrentHashMap作为Java并发包中的重要组件,以其优雅的设计和出色的性能成为了并发编程的首选。
2025-06-22 23:16:35
1331
原创 Redis--哨兵机制详解
Redis Sentinel(哨兵)是Redis的高可用性解决方案,它提供了监控、通知、自动故障转移和配置提供者等功能。Sentinel系统可以监控多个Redis主服务器及其从服务器,并在主服务器失效时自动进行故障转移,确保Redis服务的可用性。Redis Sentinel最初在Redis 2.8版本中引入,并在后续版本中不断优化和完善。它是Redis官方推荐的高可用性解决方案,适用于生产环境中对Redis服务可靠性要求较高的场景。
2025-07-24 22:58:14
873
1
原创 Spring--BeanFactory详解
是 Spring 框架中最核心、最基础的接口,它是 Spring IoC 容器的顶级接口。定义了 IoC 容器的基本功能规范,负责实例化、配置和管理 Bean。可以把它理解成一个管理 Bean 的工厂。功能:增加了父子容器的概念,允许拥有一个父。核心方法作用:当在子容器中找不到某个 Bean 时,它会委托父容器进行查找,从而实现了容器的分层管理。功能:提供了批量操作和按条件获取 Bean 的能力。核心方法: 返回容器中所有 Bean 的名称。: 返回指定类型的所有 Bean 实例。> type)
2025-07-15 09:56:43
793
原创 JAVA并发--深入了解CAS机制
CAS(Compare-And-Swap,比较并交换)是一种无锁的原子操作,它是现代处理器提供的一种基础同步原语。CAS操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)。CAS的语义:如果内存位置V的值等于预期原值A,则将该位置更新为新值B,否则不进行任何操作。无论哪种情况,都会返回内存位置V的原始值。CAS是实现无锁数据结构和算法的基础,它避免了传统锁机制可能导致的线程阻塞、上下文切换等开销。
2025-07-14 23:46:12
617
原创 JAVA--双亲委派机制
双亲委派机制(Parents Delegation Model)是JVM中类加载器的一种工作机制。当一个类加载器收到类加载请求时,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。只有当父类加载器无法完成加载请求时,子类加载器才会尝试自己去加载。这种机制确保了Java核心API的类不会被随意替换,维护了Java运行环境的安全性和稳定性。作用:用户根据需要自定义的类加载器父类加载器:通常是应用程序类加载器// 查看类加载器层级结构的示例代码// 获取当前类的类加载器。
2025-07-12 23:12:30
1998
原创 LeetCode 560: 和为K的子数组
使用哈希表记录每个前缀和出现的次数,当我们遍历到位置 j 时,就可以直接查询有多少个位置 i 满足条件,从而在O(1)时间内知道有多少个和为k的子数组以位置 j 结尾。最直观的方法是枚举所有可能的子数组,计算它们的和,并统计和为k的子数组个数。但这种方法的时间复杂度是O(n²),对于较大规模的数组会超时。前缀和是指从数组起始位置到当前位置的元素和。如果我们有两个位置 i 和 j,且它们的前缀和之差等于 k,即。这道题要求找出和为k的连续子数组的个数。,那么从位置 i+1 到位置 j 的子数组和就是 k。
2025-07-09 15:20:31
543
1
原创 JAVA并发--锁的类型
在Java并发编程中,锁是一种同步机制,用于控制多个线程对共享资源的访问。合理使用锁可以避免线程安全问题,但不当使用可能导致死锁、性能下降等问题。本文将全面介绍Java中各种锁的分类、实现及应用场景。
2025-07-08 00:21:28
819
原创 Redis--主从复制详解
Redis主从复制(Master-Slave Replication)是Redis提供的一种数据冗余技术,允许多个Redis服务器(从节点)拥有主节点数据的精确副本。通过主从复制,Redis实现了数据的备份、负载均衡和高可用性,是构建Redis高可用架构的基础。主从复制的基本原理是将一台Redis服务器作为主节点(Master),其余的作为从节点(Slave/Replica)。主节点负责处理写操作,从节点通过复制主节点的数据来保持数据的一致性,并可以处理读操作,从而分担主节点的负载。优点。
2025-07-06 23:28:38
1233
2
原创 JVM基础--JVM的组成
本文系统介绍了Java虚拟机(JVM)的核心架构与工作原理。JVM主要由类装载器子系统、运行时数据区域和执行引擎三大模块组成。类装载器负责加载、链接和初始化类文件;运行时数据区包括线程共享的方法区、堆和线程私有的程序计数器、虚拟机栈等;执行引擎包含解释器、JIT编译器和垃圾收集器。文章还提供了JVM调优的实际建议,包括堆内存设置、垃圾收集器选择和JIT优化等。理解JVM架构有助于开发者编写高效代码、进行性能调优和问题排查。
2025-06-29 22:29:07
883
1
原创 SpringIOC容器篇--什么是控制反转
控制反转(Inversion of Control,简称IOC)是Spring框架的核心特性之一,它彻底改变了传统的对象创建和依赖管理方式。在传统的编程模式中,对象的创建和依赖关系的维护都由程序代码直接控制,而IOC则将这种控制权交给了外部容器,从而实现了代码的解耦和更好的可测试性。传统方式示例// 传统方式:对象自己管理依赖// 硬编码依赖,紧耦合// 每个对象都要管理自己的依赖传统方式的问题紧耦合:UserService直接依赖具体的实现类难以测试。
2025-06-25 23:11:12
794
原创 JAVA并发篇--深入理解线程池原理
Java线程池是并发编程的核心组件,通过复用线程资源降低系统开销。本文深入分析了ThreadPoolExecutor的设计原理,包括7大核心参数、execute方法实现机制及工作队列选择策略。最佳实践部分提出了配置原则:CPU密集型任务按核心数+1设置,I/O密集型按核心数×2配置,并对比了不同拒绝策略的适用场景。特别指出Executors工厂方法的风险,建议手动创建线程池。文章还提供了线程池监控方案和常见问题解决方案,如死锁问题可通过分层线程池避免。总结强调线程池体现了生产者-消费者模式、对象池化等设计思
2025-06-23 23:06:06
863
原创 Spring--spring事务在什么情况下会失效,以及对应的解决方案
环境问题:数据库不支持事务、Spring配置错误代理问题:自调用、非public方法异常处理问题:异常被捕获、异常类型不匹配事务属性问题:传播行为设置错误并发问题:多线程环境下的事务隔离理解Spring AOP的原理和限制正确配置事务管理器合理处理异常注意方法的访问级别和调用方式在多线程环境下特别小心。
2025-06-21 12:20:37
908
原创 前端部署Nginx服务器刷新页面为404问题解决
文章分析了一个Vue路由的404错误问题,当直接访问二级路由时服务器因找不到文件返回404。正确的流程应该是返回index.html让Vue接管路由。解决方案是在Nginx配置中添加try_files $uri $uri/ /index.html指令,使所有路径最终返回index.html。配置通常位于Nginx的vhost目录中。该方法确保前端路由正常工作,避免了404错误。
2025-06-21 11:08:45
531
原创 JAVA并发--深入了解AQS
AbstractQueuedSynchronizer(AQS)是 Java 并发包(JUC)的核心基础组件,位于包下。Doug Lea 大神设计的这个框架为锁和同步器提供了统一的实现模板,像 ReentrantLock、CountDownLatch、Semaphore 等常用同步工具都是基于 AQS 实现的。AQS 的强大之处在于它提供了一个统一的框架,通过状态变量和队列管理,简化了各种同步器的实现。
2025-06-19 09:45:40
1106
原创 JAVA并发--深入了解ReentrantLock
是包中的一个类,它实现了Lock接口,提供了可重入的互斥锁功能。"可重入"意味着已经获取锁的线程可以再次获取同一把锁,而不会导致死锁。// 1. 基本的加锁和解锁 lock . lock();try {// 临界区代码 System . out . println("执行临界区代码");// 必须在finally中释放锁 } } public void tryLockUsage() {// 2. 尝试获取锁(非阻塞) if(lock . tryLock()) {try {
2025-06-17 23:04:10
712
原创 Java基础篇:HashCode和Equals详解和其联系
Java中的equals()和hashCode()方法密切相关,正确理解它们的关系对编写健壮代码至关重要。equals()用于比较对象相等性,默认比较对象引用;而hashCode()返回对象的哈希值,主要用于哈希集合。核心原则是:如果obj1.equals(obj2)返回true,则它们的hashCode()必须相同,否则会导致哈希集合工作异常。常见错误包括只重写equals()而不重写hashCode()、使用可变字段计算哈希值等。最佳实践是使用IDE自动生成、Objects工具类或Lombok注解来确保
2025-06-16 14:28:50
1381
原创 JAVA集合--为什么JDK1.7下的HashMap并发扩容时容易出现环形链表?
采用结构。没有红黑树(树化逻辑是 JDK1.8 才加入的)。Entry节点包含next指针,构成链表。
2025-06-16 00:37:11
590
原创 JAVA集合篇--深入理解HashMap
本文深入解析Java中的HashMap实现原理,从数据结构、核心方法到性能优化多角度剖析。HashMap采用数组+链表+红黑树结构(JDK1.8),通过哈希算法实现高效查找。文章详细解读了put/get/resize等核心方法源码,对比了JDK1.7和1.8的改进,包括链表转红黑树、尾插法等优化。同时探讨了线程安全问题及其解决方案,并给出初始容量设置、哈希冲突避免等实用优化建议。最后通过缓存实现、词频统计等示例展示HashMap的实际应用,并解答了常见面试问题。掌握HashMap原理对提升Java编程能力和
2025-06-15 21:41:15
955
原创 如何设计一款高并发,高可用,高性能的评论点赞系统
在如今的互联网应用中,虽然看似简单,却往往承载着的要求,尤其在短视频、直播、电商、评论等平台场景下,挑战极大。完整技术路径,学会后任何项目都可以直接移植使用。
2025-06-12 23:32:29
980
原创 JVM基础--类加载过程
在Java中,类的加载是JVM(Java虚拟机)执行程序的重要环节。理解类加载机制有助于我们更好地掌握Java程序的运行原理,优化性能,并排查类加载相关的问题二、类加载的时机JVM 不会一次性加载所有类,而是在首次使用时才进行加载。创建类的实例访问类的静态变量或静态方法System.out反射调用初始化子类时,父类会被加载三、 类加载的过程。
2025-06-12 17:20:39
404
原创 JAVA基础篇--反射机制详解
在 Java 开发中,反射(Reflection)是一项强大的技术,可以在运行时动态地访问类的信息、创建对象、调用方法或访问字段。它在框架设计、注解处理、动态代理等方面扮演着重要角色。本文将从基础概念、常见用法、实际应用和注意事项等方面系统地介绍 Java 的反射机制。
2025-06-11 22:03:19
795
原创 JAVA并发--Monitor工作原理带图解
功能描述互斥访问确保同一时间内只有一个线程访问共享资源可重入性同一线程可重复进入临界区线程协作(条件变量)支持机制阻塞调度管理 Entry Queue 和 Wait Set 的线程阻塞与唤醒性能优化依据锁升级的核心控制结构。
2025-06-11 00:36:58
918
原创 JAVA并发--可重入锁
可重入锁(Reentrant Lock),顾名思义,就是同一个线程在获取锁之后,如果再次尝试获取这把锁时仍然可以成功,不会被自己阻塞。也就是说,同一线程可以多次进入锁定的代码块而不会死锁。(内置锁,隐式可重入)(JDK 1.5 引入,显示可重入)
2025-06-10 18:35:22
704
原创 JAVA并发--深入理解synchronized
会在方法的访问标志中添加一个ACC_SYNCHRONIZED标志,每当一个线程访问该方法时,JVM会检查方法的访问标志位.如果包含ACC_SYNCHRONIZED标志,线程必须拿到锁才能执行该方法,从而保证方法的同步性.:线程第一次访问对象后,会在 Mark Word 中记录线程 ID,后续访问无需加锁,当有另一个线程也尝试获取锁时,就会升级为轻量级锁。:多个线程尝试访问对象时,采用 CAS 自旋方式尝试获取锁,如果CAS失败,则升级为重量级锁。是一种内置的互斥锁机制,可用于修饰代码块或方法。
2025-06-10 17:31:34
437
原创 JAVA基础篇--常见的几种设计模式及其应用
设计模式(Design Pattern)是软件开发中总结出的可复用、可扩展、易维护的代码结构方案,能有效提高系统的可读性和可维护性。
2025-06-09 13:44:43
645
原创 JAVA并发--线程同步
在现代多线程编程中,线程同步是保障数据一致性和程序正确性的关键技术手段。Java 提供了一套强大而灵活的并发控制机制,支持开发者应对共享资源访问冲突、死锁等常见问题
2025-06-09 13:19:50
462
原创 解决 Kibana 无法访问 localhost:5601 的问题&Spring Boot 连接 Elasticsearch 报 “找不到主机” 的解决方案实录
开发日常问题记录
2025-06-07 10:49:30
1516
原创 JAVA 基础篇--final 关键字
修饰对象含义应用场景变量只能赋值一次常量、防止误操作方法不可被重写框架/工具类方法类不可被继承安全类、工具类。
2025-06-06 11:54:09
336
原创 深入解析静态内部类
静态内部类是Java中一种特殊的类设计方式,它具有不持有外部类引用的核心特性,能有效防止内存泄漏并支持独立使用。与普通内部类不同,静态内部类可直接创建且只能访问外部类的静态成员。其经典应用场景包括Builder模式实现、工具类封装以及线程安全的单例模式,如Holder模式实现延迟初始化。这些特性使静态内部类成为编写优雅高效代码的重要工具,特别适合需要内存安全和代码组织优化的场景。
2025-06-04 13:43:13
358
原创 JAVA基础篇--static关键字
一、概念:static关键字主要用于修饰类的,当我们将一个成员声明为static时,它就属于类本身,而不是类的某个具体实例。
2025-06-04 12:44:06
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅