- 博客(13)
- 收藏
- 关注
原创 #2 制造篇:类的加载和实例化
本文系统解析了Java类加载与对象实例化的完整流程。类加载机制包含加载、链接、初始化三个阶段,其中加载阶段将.class文件转化为方法区元数据和堆中的Class对象;链接阶段完成验证、准备和解析;初始化阶段执行静态代码。对象实例化则经历内存分配、零值初始化、对象头设置和构造方法调用四个步骤,涉及指针碰撞、TLAB等内存分配策略。文章还深入探讨了双亲委派机制及其打破场景,以及对象头MarkWord的结构与锁状态转换。这些机制共同构成了Java程序运行的底层基础,为后续的垃圾回收机制奠定了基础。
2026-02-13 23:28:49
523
原创 #3 回收篇:GC机制与垃圾回收器
本文系统阐述了Java垃圾回收(GC)机制的核心原理与技术演进。首先解析了GC的基本概念,包括内存分区(栈/堆)、对象回收判定(可达性分析)和GC触发时机(安全点/安全区)。其次详细介绍了堆内存的分代模型(年轻代/老年代)及其回收策略,对比了标记-清除、复制和标记-整理三种基础算法的优缺点。重点分析了现代GC技术的关键突破:CMS通过并发标记减少STW,G1引入Region化实现局部回收,ZGC采用染色指针达到毫秒级停顿。最后指出GC发展始终在吞吐量与延迟之间寻求平衡,理解底层原理才能在实际调优中做出合理选
2026-02-07 00:31:04
538
1
原创 #1 内存篇:Runtime Data Area 与 JMM
摘要:JVM作为Java程序运行的黑盒,管理着代码加载、内存分配、执行和回收全过程。它是运行在操作系统上的独立进程,支持多程序并行运行且相互隔离。JVM内存分为线程私有区(程序计数器、虚拟机栈)和共享区(堆、方法区),而JMM规范则解决多线程环境下的可见性、原子性和有序性问题。JMM通过主内存与工作内存的交互机制(如8种原子操作)确保数据一致性,其设计映射了CPU的缓存层级结构。理解JVM内存模型和JMM规范是Java性能调优和故障排查的基础。
2026-02-05 20:18:41
651
原创 HOT100刷题#1 哈希
摘要:哈希表适用于需要快速查找元素存在性或归类特征的问题。选择数据结构时,Collection接口用于处理元素本身(如List/Set),而Map接口用于处理元素特征(键值对)。例如,两数之和用Map存储元素下标特征,字母异位词分组用Map存储排序后的字母组合作为键,最长连续序列则用Collection检查元素存在性。设计Map键时应提取唯一特征确保匹配性。
2026-01-29 23:29:54
127
1
原创 Docker 学习记录 #1
本文总结了Docker学习中的关键知识点:1. 数据卷(Volume)解决了容器数据持久化问题,通过分离数据与容器实现数据独立生命周期;2. 对比了数据卷与本地目录挂载的差异,分析各自适用场景;3. 解释了镜像概念及其与JAR包的关系,说明Dockerfile在镜像构建中的作用;4. 探讨前后端分离部署方案,分析Nginx与JAR镜像各自职责;5. 详细说明Nginx镜像资源挂载策略,强调只挂载必要自定义资源的优势。全文系统梳理了Docker核心概念和最佳实践。
2025-12-03 17:48:55
758
原创 MybatisPlus 学习记录 #2
本文对比了MyBatis-Plus中三种数据库查询方式的差异:1)静态Db查询(Hutool工具类)适合快速开发但缺乏事务支持;2)依赖注入Mapper规范易维护,适合中大型项目;3)Wrapper条件构造器作为Mapper的补充,用于动态拼接复杂查询条件。核心建议:小型项目可选用静态Db查询快速验证;企业项目优先采用依赖注入Mapper,简单查询直接定义方法,复杂查询结合Wrapper。三种方式在业务逻辑处理上完全一致,差异仅在于数据库访问层的实现方式。
2025-11-22 14:51:51
25
原创 MyBatisPlus 学习记录 #1
MyBatis-Plus框架采用标准四层架构(Entity/Mapper/Service/实现类),通过继承BaseMapper和IService自动获得CRUD功能。LambdaWrapper 是 MyBatis-Plus(MP)中基于 Lambda 表达式 的条件构造器核心类,操作选择原则:简单查询推荐使用类型安全的LambdaQueryWrapper,复杂查询通过Service构建条件+Mapper自定义SQL实现,其核心优势在于自动CRUD与手动SQL的灵活结合,同时保持类型安全和架构清晰。
2025-11-20 16:21:00
144
原创 Nginx实战日志 #1
本文记录了作者两天内配置Nginx反向代理的曲折历程。Day1,作者试图用虚拟机Nginx1.24代理主机Nginx1.18和本地服务,但由于概念混淆和配置问题遭遇502错误。Day2,在解决工具链问题后,作者发现根本问题在于主机Nginx未开放局域网访问。最终意识到"代理转发"的本质要求被代理服务必须运行且可访问,放弃了过度设计的虚拟机方案,转而采用主机Nginx直接处理动静分离和反向代理的简洁方案,10分钟即解决问题。整个过程让作者深刻理解了代理的本质、简单方案的价值以及工具链稳定的重要性。
2025-11-12 23:03:21
993
原创 学习记录#3——递归搜索解决排列组合问题
递归,我们可以理解为自下而上解决问题的手段,往往体现在,我们需要由“零状态”(可以抽象理解为什么还没选、没发生的状态)出发,去遍历搜索每一种可能发生的情况,在这个过程中大概率需要对某些不可能的情况进行删减,以实现降复杂度增速的效果。而递推往往从结果出发,在已知某个结果或某种情况的前提下,反向推论出可能出现的“前因”。本文重点解释递归。
2024-10-29 00:24:09
883
1
原创 学习记录#2——区间的维护:一维差分和树状数组
一维差分是算法,树状数组是数据结构,两者都可以用于对区间段的维护。一维差分将区间问题变成了端点问题,属于从O(n)到O(1)的优化,但是一维差分有着较大的局限性,在面对随机且大量的数据修改和查询时,一维差分由于其查找的不便性显得有些不够用,此时便可以使用树状数组来解决问题。树状数组将数据以分治的思想处理,将维护的过程变成了近乎二分查找,属于从O(n)到O() 的优化。其原始功能是处理原数组,给出 a[ ] 求它的区间和,为“单点修改 + 区间查询”。
2024-08-08 11:33:31
840
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅