- 博客(25)
- 收藏
- 关注
原创 SSM实战搭建
可以把业务的控制、数据源、bean都写在这里,但是对于业务比较复杂的情况就不适合,会导致代码的可读性变得很差、这里就将里面的内容拆分区块。这是applicationContext.xml , 就是其他的文件配置都要进入这里。就是一个大型的servlet控制器,用来管控其他的控制器,去进行引用实现。创建好service 包, 实现对应的方法(findAll)点击文件(profile) ,新建(new) ,项目。这里就是业务层面的管控,实现接口方法注入。数据配置文件,用来对mysql进行连接。
2025-12-05 14:26:18
400
原创 垃圾回收底层原理【深入了解】
理论基础:可达性分析(判断垃圾)+ 四大回收算法(处理垃圾);代码实现模拟层面:用 Java 实现标记、清除、复制的核心流程,理解逻辑;工业级:用 C/C++ 操作底层内存,支持并发、内存池、写屏障等优化;语言差异:Java(分代收集)、Go(三色标记)、Python(引用计数),本质都是 “自动识别 + 释放垃圾”;价值(利润):技术上提升效率、降低故障,商业上节约成本、带动生态。
2025-12-01 23:47:20
965
原创 Java双亲委派机制【类加载的核心内容】
双亲委派机制是Java类加载器的核心规则,其核心思想是:类加载器在加载类时先委派给父类加载器处理,只有当父类无法加载时才自己尝试。这种机制通过三层类加载器(启动类、扩展类、应用类)的层级委派,保证了类的唯一性和核心库的安全性。启动类加载器(Bootstrap)由C++实现,负责加载JDK核心类;扩展类加载器(Extension)加载扩展库;应用类加载器(Application)加载用户类。自定义类加载器通过重写findClass()方法实现特定加载逻辑。该机制可防止核心类被篡改,但也可被打破(如Tomcat
2025-12-01 23:20:20
1664
原创 如何使用Java 反射的理解去实现MyBatis底层框架核心原理? 看完这篇文档让你不再迷茫【细致讲解】
本文通过实现迷你版MyBatis,深入解析反射在MyBatis中的核心作用。首先构建基础组件(注解、实体类、Mapper接口),然后实现6个核心组件:Configuration存储配置、SqlSession提供API入口、MapperProxy处理代理逻辑、ParameterHandler处理参数、ResultSetHandler封装结果集、Executor执行SQL。整个过程展示了反射在动态解析映射配置、生成Mapper代理、处理参数与结果集等关键环节的不可替代性。真实MyBatis通过缓存反射元数据、减
2025-11-28 17:20:41
753
原创 Java设计模式 【理论+代码实现】 让你从小白到大佬的蜕变
本文介绍了Java设计模式的8种核心模式,分为创建型、结构型和行为型三大类。创建型模式包括单例模式(确保唯一实例)、工厂方法(解耦对象创建)和建造者模式(分步构建复杂对象);结构型模式包含代理模式(访问控制)和装饰器模式(动态增强);行为型模式涵盖观察者模式(一对多通知)和策略模式(算法替换)。所有模式都遵循SOLID原则,核心价值在于解耦、复用和扩展性。使用时需注意避免过度设计,优先组合而非继承,重点理解模式要解决的问题而非死记代码模板。
2025-11-28 00:11:28
707
原创 Java反射机制底层原理【理论加示例讲解】让你从0到1有个全新的突破,对Java反射机制有个全新的认知
反射的核心是“运行时访问方法区的类元数据”类加载后,JVM 将类的结构信息(字段、方法等)存储在方法区,并用Class对象作为这些元数据的 “访问入口”;反射 API(FieldMethod等)是 JVM 提供的 “工具”,允许程序通过Class对象,动态查询元数据、绕过访问权限、执行方法 / 修改字段;本质是打破了 Java 的 “静态绑定”(编译期确定调用关系),实现 “动态绑定”(运行时确定调用关系)。
2025-11-28 00:06:07
1056
原创 MyBatis框架讲解,工作原理、核心内容、如何实现【从浅入深】让你看完这篇文档对于MyBatis的理解更加深入
MyBatis 的核心价值是「灵活与简化的平衡简化:自动处理参数注入、结果映射、资源管理,减少重复代码;灵活:SQL 完全由开发者控制,支持复杂查询、动态 SQL,适配各类业务场景。
2025-11-26 17:22:26
1343
原创 synchronized 和 ReentrantLock 底层理解【深入讲解】
本文对比分析了Java中两种核心锁机制:synchronized和ReentrantLock的实现原理。synchronized是JVM内置锁,基于对象头和监视器实现,采用自动锁升级机制(无锁→偏向锁→轻量级锁→重量级锁)优化性能。ReentrantLock是JUC显式锁,基于AQS框架实现,支持公平/非公平锁、可中断和条件锁等特性。主要区别在于:synchronized自动管理锁释放,仅支持非公平锁;ReentrantLock需手动释放,提供更灵活的并发控制。开发中建议简单场景用synchronized,
2025-11-24 23:53:18
1805
原创 Spring 中Ioc的理解
Spring框架的IOC(控制反转)是其核心特性,通过将对象创建和依赖管理的控制权从业务代码反转给容器,实现代码解耦和简化开发。IOC容器负责加载配置、创建Bean、管理依赖关系和生命周期。依赖注入(DI)是IOC的具体实现方式,包括Setter注入、构造器注入和字段注入三种方式。Bean的生命周期包含加载定义、实例化、属性注入、初始化、就绪和销毁六个阶段。底层通过反射、BeanDefinition和三级缓存等机制实现,能解决单例Bean的循环依赖问题。IOC的优势在于解耦、简化开发、便于测试和统一管理,是
2025-11-24 00:17:20
764
原创 Java 锁的机制 【入门讲解】
分类维度具体类型核心特点典型例子是否互斥互斥锁(Exclusive Lock)同一时间只允许一个线程持有锁(写操作需互斥)共享锁(Shared Lock)允许多个线程同时持有锁(读操作可共享)的读锁是否公平公平锁(Fair Lock)线程获取锁的顺序与请求顺序一致(先到先得)非公平锁(Unfair Lock)线程获取锁时可 “插队”(可能导致某些线程饥饿,但性能更高)是否可重入可重入锁(Reentrant)同一线程可多次获取同一把锁(避免自己锁死自己)
2025-11-19 23:47:07
949
原创 Java 单例模式讲解
单例模式是Java中确保类只有一个实例的创建型设计模式。其核心是通过私有构造器、静态私有实例和静态公有访问方法实现全局唯一访问点。主要实现方式包括:饿汉式(类加载时实例化)、懒汉式(延迟加载)、双重检查锁(兼顾线程安全与性能)、静态内部类(懒加载且线程安全)以及枚举(天然防反射和反序列化)。应用场景包括工具类、全局配置和资源管理等。需注意防御反射和反序列化攻击,不同场景应选择合适的实现方式以平衡性能与安全性。
2025-11-18 23:02:08
600
原创 HashMap为什么多线程不安全,是什么问题?【细致讲解】
摘要:本文深入分析了HashMap在多线程环境下的线程安全问题。JDK7中头插法扩容会导致链表成环,引发死循环;JDK8虽改用尾插法避免了环问题,但仍存在数据覆盖、状态不一致和size计数错误等问题。根源在于破坏了并发三大特性:原子性、可见性和有序性。文章详细解析了各种问题的产生机制,并指出快速失败机制仅能检测问题而非解决。最后建议在多线程环境下使用ConcurrentHashMap或同步包装的HashMap替代。理解这些特性有助于规避并发编程中的潜在风险。
2025-11-17 09:44:07
1099
原创 哈希表的深层结构+当我们遇到哈希冲突该如何解决
摘要 本文深入剖析哈希表的底层实现原理,从内存结构、哈希函数设计到冲突解决机制展开分析。哈希表通过"数组+离散存储"的内存布局实现高效索引,其中桶数组提供连续内存的快速访问,而键值节点则采用离散存储。哈希函数设计着重解决键到索引的映射问题,通过高位混合优化降低冲突率。冲突处理以链地址法为主,结合红黑树优化性能,同时探讨开放地址法的实现困境。文章还分析了扩容优化和线程安全等工程问题,揭示了哈希表"空间换时间,概率平衡性能"的设计哲学。通过Java HashMap等实例,
2025-11-14 09:55:38
1903
原创 什么是HashCode?
摘要: Java中的hashCode()方法用于生成对象的哈希值,核心作用是配合哈希表(如HashMap)实现高效存储和查询。规范要求:若两对象equals()为true,其hashCode()必须相同,反之则未必。默认Object.hashCode()基于内存地址,而String等类会重写该方法(如按字符计算)。自定义类重写equals()时须同步重写hashCode(),确保逻辑一致(如基于相同属性),否则会导致哈希集合(如HashSet)存储异常,破坏去重特性。
2025-11-12 19:59:55
730
原创 哈希(Hash)机制
哈希机制通过哈希函数将任意键映射为固定哈希值,实现高效数据存储与查询。其核心包括哈希函数、哈希表和冲突处理三部分:哈希函数需具备确定性、高效性和均匀性;哈希表通过哈希值快速定位数据;冲突处理采用开放地址法或链地址法解决键碰撞问题。负载因子和动态扩容机制直接影响性能,如Java的HashMap通过优化哈希计算、链表转红黑树等策略提升效率。该技术广泛应用于哈希表、数据校验、分布式存储和密码学等领域,是现代计算机系统的关键基础之一。
2025-11-10 22:51:25
687
原创 ArrayList 扩容机制【底层原理】
ArrayList采用1.5倍扩容机制实现动态数组功能。当数组容量不足时,会创建1.5倍大小的新数组并复制元素。这种设计既避免了2倍扩容的内存浪费,又比1.2倍扩容减少了操作频率。在极端情况下,若计算容量仍不足,则直接采用所需最小容量。通过位运算(oldCapacity+(oldCapacity>>1))高效计算新容量,兼顾了性能与空间利用率。
2025-11-10 11:11:17
1133
原创 List、Set、Map的区别【由浅入深】
Java集合框架核心接口比较:List、Set、Map 摘要: Java集合框架包含三大核心接口:List(有序可重复)、Set(无序不可重复)和Map(键值对映射)。List基于线性表结构,ArrayList使用动态数组实现随机访问快,LinkedList采用双向链表适合频繁增删。Set通过HashSet(哈希表)、LinkedHashSet(双向链表)和TreeSet(红黑树)实现去重功能。Map包括HashMap(哈希表+红黑树)、LinkedHashMap(维护顺序)和ConcurrentHashM
2025-11-07 23:41:29
722
原创 Mybatis一级缓存和二级缓存 [简单明了]
本文介绍了MyBatis的两级缓存机制。一级缓存默认开启,作用范围在SqlSession会话级别,基于HashMap实现,会因增删改操作或会话关闭而失效。二级缓存需要手动配置,作用域为namespace级别,可跨SqlSession共享数据,支持设置回收策略和过期时间。查询时按二级缓存→一级缓存→数据库的顺序执行。合理使用这两级缓存能有效减少数据库访问,但需注意不同场景下的数据一致性维护。开发者应根据业务需求选择适当的缓存策略。
2025-11-06 00:03:42
972
原创 Mybatis ResultMap 中 accociation、collection 元素
大家在学习Mybatis中可能对ResultMap 的时候对一个使用方法可能还不够清晰,我给大家通俗的去讲解一下这个使用方法,希望对大家的理解有所帮助。
2025-11-04 23:39:38
673
原创 阻塞 I/O、非阻塞 I/O、I/O 复用 详解。【傻瓜式理解】
本文对比分析三种I/O模型的核心特点:阻塞I/O采用"傻等"方式,进程在I/O未就绪时完全阻塞;非阻塞I/O通过轮询检查状态,进程不被阻塞但消耗CPU资源;I/O复用通过复用器监控多个I/O,仅在就绪时通知处理。三者主要差异在于进程状态管理、多连接处理能力和适用场景:阻塞I/O简单但效率低,适合低并发场景;非阻塞I/O可处理多任务但轮询开销大;I/O复用能高效管理大量连接,适合高并发服务。选择模型需权衡实现复杂度、资源消耗和性能需求。
2025-11-04 08:59:00
645
原创 在Java中,形参(形式参数)和实参(实际参数)
维度形参(形式参数)实参(实际参数)定义位置方法声明时的参数列表中,用于 “接收” 调用时传入的值。中的ab方法调用时传入的具体值,用于 “传递” 给形参。中的3x + 2作用域仅在当前方法内部有效,方法执行结束后即被销毁。作用域由自身的声明位置决定(如全局变量在类中有效,局部变量在方法内有效)。生命周期随方法调用而创建(压入栈帧),方法执行完毕后随栈帧销毁。独立于方法存在,其生命周期不受方法调用的影响(除非实参是方法内的局部变量)。是否需要初始化。
2025-11-03 08:46:49
331
原创 在Java中什么是自动装箱和自动拆箱?
自动装箱 (Autoboxing):将基本数据类型自动转换为对应的包装类对象的过程。自动拆箱 (Unboxing):将包装类对象自动转换为对应的基本数据类型的过程。装箱的实现:编// 自动装箱// 编译后变为:译器调用包装类的静态valueOf()方法装箱过程 (基本类型→包装类) 的内存变化堆内存 → 栈内存[包装类对象] [基本类型值]
2025-10-31 00:19:20
298
原创 boolean为什么没有默认字节
这种映射在 Java 编译和运行时是透明的,我们编写的 boolean 逻辑最终都会被转换为 int 运算。如需深入理解,建议使用。,在字节码层面会被映射为 int 类型处理(取值 0 代表 false,1 代表 true)。布尔数组在 JVM 中被映射为字节数组,每个元素占用 1 个字节(8 位)命令反编译 class 文件,观察实际生成的字节码指令。Java 的 boolean 类型。Java 的 boolean 类型。
2025-10-31 00:10:56
183
原创 JDK详解
JDK 是 Java 开发工具包的缩写,是 Oracle(或 OpenJDK 社区)提供的一站式 Java 开发解决方案。它是 Java 语言的 “基础设施”,包含了编译、运行、调试、打包 Java 程序所需的所有组件,没有 JDK 就无法进行 Java 开发,也无法运行 Java 应用(依赖其内置的运行时环境)。
2025-10-29 13:41:49
956
原创 Java入门基础知识到底层逻辑[由浅入深]
JVM(Java虚拟机)是执行字节码的虚拟计算机,负责将.class文件转换为系统底层机器码,实现跨平台运行。JVM包含类加载子系统、栈、堆、方法区和直接内存等结构。堆用于存储对象实例,栈处理线程执行,方法区存放编译后的数据。垃圾回收机制采用分代收集,包括新生代的复制算法和老年代的标记-清除/整理算法。JRE(Java运行环境)=JVM+基础类库,支持程序运行;JDK(开发工具包)=JRE+开发工具(如javac),支持开发与运行。三者关系为JDK⊃JRE⊃JVM,开发者需要JDK,用户只需JRE即可运行程
2025-10-29 11:34:15
891
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅