- 博客(19)
- 收藏
- 关注
原创 Java 锁的终极奥义:7 大场景 + 4 大陷阱 + 面试必死 10 问,一篇封神!
🔥 全网疯传的Java锁圣经!用快递驿站、图书馆、电影院等 10+生活场景 彻底搞懂锁机制对比分析 6大类锁(隐式锁/显式锁/读写锁/CAS/分段锁/分布式锁)附 可直接套用的代码模板 + 高并发场景避坑指南包含Java 8+最新锁优化策略(桶锁、红黑树、CAS升级)文末赠送 锁选择决策树 和 死锁预防Checklist
2025-03-21 17:28:51
1894
原创 Java基础-HashMap
HashMap是Java基于哈希表实现的键值对集合,采用数组+链表+红黑树结构,线程不安全。核心机制包括:默认初始容量16,负载因子0.75;当链表长度超过8且数组容量≥64时转为红黑树;put操作通过哈希计算桶位置,处理碰撞时采用尾插法;扩容时容量翻倍并重新分配元素。与Hashtable相比性能更好但非线程安全,可通过ConcurrentHashMap实现线程安全。使用时应初始化合适容量,避免频繁扩容影响性能。Java8优化了Java7的头插法问题,引入红黑树提升查询效率。
2025-12-29 16:38:38
159
原创 Java基础-HashMap扩容机制(Java8源码)
摘要:HashMap扩容机制通过倍增容量(2的幂)和优化数据迁移提升性能。初始化阶段确定新容量和阈值,分为三种情况:正常扩容、指定容量初始化和默认初始化。数据迁移时利用位运算(e.hash & oldCap)判断节点位置,避免重新hash计算,保持链表顺序以提高效率。扩容过程对单个节点、链表和红黑树分别处理,采用延迟初始化策略。虽然优化了性能,但HashMap非线程安全,多线程环境可能引发问题。该设计有效减少哈希冲突,提升查询效率。
2025-12-29 13:58:54
177
原创 JVM-方法内联
方法内联是JVM优化技术,将频繁调用的小方法直接嵌入调用处,消除方法调用开销。JIT编译器会智能分析热点代码,优先内联简单方法(如getter/setter)、私有/静态/final方法。开发者应编写小而清晰的方法帮助JVM优化,但需避免代码膨胀。现代JVM能自动决策内联,通过参数可查看内联情况。本质是以空间换时间,提升执行效率。
2025-12-27 10:00:00
388
原创 JVM-堆内存诊断工具jcmd
本文详细介绍了Java内存诊断工具jcmd与jmap的对比及使用指南。jcmd作为新一代全能工具,可执行堆转储、GC、线程分析等操作,比传统jmap更安全全面。重点讲解了jcmd的核心命令:GC.heap_info快速查看内存使用、GC.heap_dump生成堆转储、GC.class_histogram分析内存占用类。文章还提供了线上内存泄漏排查流程,建议优先使用jcmd配合Eclipse MAT进行深度分析,并强调在生产环境配置HeapDumpOnOutOfMemoryError参数的重要性。
2025-12-26 14:28:25
835
原创 JVM-逃逸分析
逃逸分析实战建议: 当编写高频创建小对象的代码(如循环体内)时,应确保对象不逃逸出方法作用域。通过限制对象作用域(局部变量优于成员变量)、避免将对象暴露给外部(如返回或存入集合),可触发JVM的栈上分配或标量替换优化,显著提升性能。典型场景包括临时计算对象、工具类实例等。注意:逃逸分析是JVM自动优化,开发者只需遵循"对象最小作用域"原则编写代码即可。
2025-12-25 15:18:36
221
原创 Java基础-面向对象五大基本原则(SOLID原则)
本文介绍了四种面向对象设计原则(SOLID)及其Java实现: 单一职责原则(SRP):每个类应只负责一项功能。示例展示了将用户管理拆分为User、UserRepository和EmailService三个独立类。 开放封闭原则(OCP):通过扩展而非修改现有代码来添加新功能。使用策略模式实现不同折扣计算,新增折扣类型无需修改原有代码。 里氏替换原则(LSP):子类应能完全替代父类而不改变程序行为。通过重构Rectangle和Square继承关系,确保子类不改变父类计算逻辑。 接口隔离原则(ISP):避免庞
2025-12-24 16:08:25
396
原创 Java基础-静态方法隐藏(Method Hiding)
摘要:方法隐藏指子类定义与父类签名相同的静态方法,不同于实例方法的重写。静态方法在编译时绑定,基于引用类型调用,而实例方法在运行时绑定,基于实际对象类型。代码示例展示了静态方法隐藏与实例方法重写的区别。建议避免使用隐藏,可通过不同方法名、实例方法或设计模式替代。隐藏静态方法需遵循访问修饰符、返回类型和异常声明等规则,但容易引起混淆,实际开发中应谨慎使用。(150字)
2025-12-24 10:00:00
384
原创 Java基础-方法重载(Overloading)与重写(Overriding)
方法重载与重写的核心区别 重载(Overloading) 发生在同一类中 方法名相同但参数列表不同 编译时确定调用哪个方法 返回类型、访问修饰符可不同 重写(Overriding) 发生在继承关系中 方法签名必须完全相同 运行时动态绑定 返回类型需兼容,访问权限不能更严格 关键区别:重载是编译时多态(静态绑定),重写是运行时多态(动态绑定)。重载关注方法参数差异,重写关注方法行为改变。
2025-12-23 13:18:59
269
原创 Java基础-多态
本文通过"万能遥控器"的比喻形象解释了Java多态的核心概念。多态通过父类引用指向子类对象实现,需要满足继承、重写和向上转型三个条件。其主要价值在于提高代码的通用性和扩展性,具体表现为:1)编写通用代码应对变化,2)统一管理不同类型的对象,3)提高接口通用性。多态的关键在于区分编译时(看引用类型)和运行时(看实际对象类型)的行为差异,最终实现代码解耦、扩展和维护的便利性。这就像电源插座适配各种电器,为程序设计提供了灵活性和扩展空间。
2025-12-22 14:38:21
521
原创 今日八股:Java中如何交换Integer对象的值?
这篇文章探讨了Java中交换两个Integer对象值的挑战。首先分析了常规方法失败的原因:Java的值传递机制和Integer的不可变性使直接交换无法实现。随后提出了使用反射修改私有字段的解决方案,但指出这会破坏封装性并可能因Integer缓存机制导致意外行为。最后推荐了更安全的替代方案,如使用数组或自定义包装类。文章强调应避免反射滥用,优先考虑类型安全和代码清晰度,这对面试技术点和实际开发都有重要指导意义。
2025-08-31 10:15:00
321
原创 今日八股:LinkedList和ArrayList的区别,ArrayList下标访问为什么快?
ArrayList和LinkedList的核心区别在于底层数据结构:ArrayList基于动态数组,内存连续,支持O(1)随机访问;LinkedList基于双向链表,内存不连续,随机访问需O(n)遍历。ArrayList在插入删除时需要移动元素,而LinkedList只需修改指针引用。实际应用中,频繁查询选ArrayList,频繁增删选LinkedList。理解这些差异对Java集合框架的使用和性能优化至关重要。
2025-08-30 10:00:00
1604
原创 今日八股:过滤器 vs 拦截器——详解两者的本质区别
过滤器和拦截器是Java Web开发中的两种处理机制,主要区别在于:1)规范不同,过滤器基于Servlet规范,拦截器是Spring框架提供;2)执行时机不同,过滤器在Servlet前后执行,拦截器在Controller方法前后工作;3)拦截范围不同,过滤器可拦截所有请求(包括静态资源),拦截器仅针对Controller请求;4)控制方式不同,过滤器通过回调函数控制流程,拦截器通过返回值控制;5)依赖注入支持不同,拦截器支持Spring依赖注入而过滤器不支持。实际开发中应根据需求选择:基础功能如字符处理用过
2025-08-28 10:18:54
533
原创 今日八股:Java参数传递机制详解——为什么String不变而实体对象会变?
Java参数传递机制解析摘要(150字): 本文通过String和实体对象示例,剖析了Java值传递机制。String因不可变性,方法内赋值会创建新对象而不影响原引用;而实体对象参数传递引用副本,修改属性会改变同一对象状态。关键区别在于:不可变对象操作创建新对象,普通对象操作修改原对象。Java严格采用值传递(传递引用副本),理解此机制对编写健壮代码至关重要。文末思考题指出,通过返回值重新赋值可改变原引用指向。掌握该原理能避免开发中的常见误区。
2025-08-27 16:18:11
358
原创 今日八股:String为什么被设计为不可变(Immutable)?
摘要: Java的String设计为不可变对象,主要基于四大核心优势: 安全性:防止敏感数据(如密码、文件路径)被篡改,保障系统安全; 性能优化:通过字符串常量池复用对象,减少内存开销,并缓存哈希码提升集合操作效率; 线程安全:天然支持多线程共享,无需同步机制; 可靠性:作为集合键时哈希值恒定,避免数据丢失。不可变性虽牺牲局部修改性能,但换取了全局的稳定性与高效,是Java设计哲学的经典体现。
2025-08-21 10:28:06
695
原创 C盘爆红别重装!3招释放50GB,电脑秒变新机
【实用技巧】C盘爆满不用愁!三步释放50GB空间当C盘飘红警告出现,别急着重装系统。首先用磁盘清理工具(Win+R输入cleanmgr)删除更新残留和缓存,可释放5-15GB;接着清理%temp%临时文件夹(Win+R输入%temp%),能腾出2-20GB;最后卸载不常用大型软件(如Adobe套件、虚拟机),轻松回收10-30GB。进阶用户还可调整休眠文件、迁移虚拟内存,或使用DISM++深度清理。建立存储感知自动清理机制,从此告别C盘空间焦虑。三步基础操作+定期维护,让老旧电脑重获新生!
2025-05-31 18:08:13
2067
原创 Spring MVC参数绑定注解全解析:从入门到精通
注解参数来源适用场景URL查询参数获取单个简单类型参数URL路径中的变量RESTful资源定位请求体(JSON/XML)接收复杂对象(如POST请求体)无注解(POJO)URL查询参数自动匹配多条件查询、表单对象请求参数或模型数据绑定对象并添加到模型HTTP请求头获取浏览器信息、认证TokenCookie值读取会话ID、用户偏好HTTP会话中的属性获取登录用户信息multipart/form-data 请求文件上传和表单混合提交。
2025-05-26 09:40:05
1396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅