- 博客(35)
- 收藏
- 关注
原创 JVM面试篇总结
JVM是Java程序运行的核心环境,主要包含类加载、内存管理和执行引擎三大功能模块。类加载采用双亲委派机制,通过启动、扩展和应用程序类加载器实现类的动态加载。内存管理基于分代模型,采用可达性分析算法判断对象存活,结合标记-清除、复制等回收算法实现自动垃圾回收。运行时数据区划分为线程共享的堆、方法区和线程私有的栈、程序计数器等区域。JVM通过HotSpot等不同实现版本,支持Java及多种JVM语言的跨平台运行,同时提供内存自动管理、即时编译等核心能力,是Java生态的技术基石。
2025-12-16 11:00:16
822
原创 JVM核心原理总结
本文深入解析了Java虚拟机内存结构与运行机制。首先分析了基本数据类型在栈上的存储方式,包括空间占用和类型转换规则。然后详细介绍了堆上对象的内存布局,包括对象头、指针压缩和内存对齐等关键技术。接着阐述了方法调用的五种字节码指令及其绑定机制,以及异常捕获的实现原理。最后重点讲解了JIT即时编译器的优化策略和G1、ZGC垃圾回收器的工作原理,包括三色标记、SATB等核心算法。全文系统性地揭示了JVM内部实现细节,为性能优化提供了理论基础。
2025-12-16 10:52:43
953
原创 JVM高级篇总结笔记
本文深入解析了GraalVM及其两种运行模式(JIT和AOT)的特点与性能表现,比较了社区版和企业版的差异。GraalVM具有启动快、资源占用低等优势,特别适合云函数等场景。同时详细介绍了新一代垃圾回收器(Shenandoah和ZGC)的技术演进、核心特性和性能对比,包括配置方法和优化建议。通过实战案例展示了内存分析和运行时监控技巧,为Java应用性能优化提供了实用指南。
2025-12-05 19:56:26
1118
原创 JVM实战总结笔记
总结了Java内存调优的关键知识点,重点分析了内存泄漏与内存溢出的区别及六大常见内存泄漏根源,包括equals/hashCode错误、内部类引用、ThreadLocal不当使用等。同时介绍了诊断工具如VisualVM、Arthas和MAT分析流程,并通过实际案例复盘典型OOM场景。最后概述了GC调优的三项核心指标(吞吐量、延迟、内存占用)及日志分析方法,为Java性能优化提供系统性指导。
2025-12-05 19:27:12
629
原创 深入浅出:手写 Java 哈希表 (HashTable)
本文详细介绍了哈希表的核心原理与实现,主要包括: 哈希表通过数组+链表结构实现快速查找,利用哈希函数将键映射为数组下标; 采用拉链法解决哈希冲突,冲突时通过链表串联数据; 关键操作包括put/get方法,其中put涉及哈希计算、冲突处理和扩容检查; 重点解析了高效的扩容机制,使用位运算将元素迁移到新数组,避免重新哈希; 分析了哈希冲突处理、位运算优化等核心概念。 文章通过Java代码示例,完整展示了哈希表从基础结构到高级扩容的实现过程。
2025-11-27 13:50:25
267
原创 Docker 容器化技术:从入门到微服务实战
Docker通过镜像、容器和仓库三大核心概念解决了环境一致性问题。镜像如同安装包,容器是运行实例,仓库则是镜像存储中心。使用前需配置国内镜像加速器提升下载速度。常用命令包括镜像管理(pull/rmi)、容器操作(run/stop/exec)及数据卷挂载(-v参数)。Dockerfile支持自定义镜像构建,通过分层设计优化存储。实战中需注意端口映射、环境变量配置及数据持久化方案选择(数据卷/目录挂载)。网络方面默认桥接需注意IP变化问题。
2025-11-27 13:19:48
763
原创 哈夫曼树 (Huffman Tree) 算法总结
哈夫曼树是一种用于数据压缩的最优二叉树算法,通过为高频字符分配短编码、低频字符分配长编码,实现高效无损压缩。其核心步骤包括:统计字符频率,构建最小堆优先队列,循环合并最小频率节点形成树结构,并通过DFS生成前缀编码。该算法生成的编码具有唯一可解码性,无需分隔符。示例展示了从频率统计到编码生成的全过程,相比原始ASCII编码可大幅减少存储空间。哈夫曼树广泛应用于ZIP、JPEG等压缩格式,是贪心算法的经典应用。
2025-11-26 19:52:54
396
原创 分数背包问题 (Fractional Knapsack Problem) 算法总结
本文提出了一种基于贪心算法的分数背包问题解决方案。该算法通过计算物品的单位价值(价值/重量),并按单位价值降序排序,优先装入高性价比物品。对于可分割物品,当背包容量不足时装入部分物品。代码实现包含Item数据模型和select贪心选择方法,示例演示了在10升背包容量下最优解8140的求解过程。算法时间复杂度为O(N log N),适用于物品可分割的场景,相比0-1背包问题能获得更高收益。
2025-11-26 19:44:52
541
原创 JVM基础总结
JVM是Java程序运行的核心环境,主要负责解释执行字节码、内存管理和即时编译优化。其架构包括运行时数据区(堆、方法区、虚拟机栈等)和垃圾回收机制。类加载遵循双亲委派模型,生命周期分为加载、连接、初始化等阶段。垃圾回收采用分代算法,年轻代使用复制算法,老年代采用标记-清除或标记-整理。JDK8默认使用Parallel Scavenge回收器,JDK9后改用G1回收器。JVM通过字节码解释和JIT编译实现跨平台运行,同时提供内存自动管理,解决了C++手动内存管理的痛点。
2025-11-21 19:08:34
1049
原创 快速选择算法 (QuickSelect) 详解笔记
快速选择算法是一种高效查找未排序数组第k小/大元素的算法,基于快速排序的分治思想优化而来。核心特点是通过分区操作将数组分为两部分后,只需递归处理包含目标元素的部分,平均时间复杂度为O(n)。算法实现包含随机基准选择优化避免最坏情况,代码分为主函数quick()、分区函数partition()和交换函数swap()三部分。相比完整排序,快速选择通过剪枝优化实现更高效率,适用于Top K问题、中位数查找等场景。
2025-11-19 14:03:13
887
原创 斐波那契数列 - 动态规划实现 详解笔记
通过对比递归(O(2ⁿ))和动态规划(O(n))的时间复杂度,重点分析了两种动态规划实现:使用数组存储(O(n)空间)和降维优化(O(1)空间)。文章详细解释了状态转移方程和变量滚动更新的核心思想,并提供了Java代码实现。此外,还列举了斐波那契数列的应用场景,如爬楼梯问题、黄金分割等。最后给出了复杂度对比和实现建议,指出降维方法在计算单个F(n)时是最优选择,而数组方法适合需要多次查询的场景。斐波那契数列是学习动态规划的经典案例,有助于理解最优子结构和重叠子问题等
2025-11-19 14:03:03
1254
原创 LeetCode 18 - 四数之和 详解笔记
首先对数组排序以便于去重和双指针处理,然后通过递归将问题逐步降维,将四数之和转化为两数之和问题,最后使用双指针法高效求解。算法通过栈结构维护已选元素,并采用严格的条件判断避免重复解。关键点包括:排序预处理、递归降维策略、双指针优化以及整数溢出处理。时间复杂度为O(n³),空间复杂度为O(logn)。该方案能正确处理大数运算,确保结果不重复且高效。
2025-11-17 21:09:46
1078
原创 LeetCode 51 - N皇后问题 详解笔记
采用回溯算法逐行放置皇后,使用三个布尔数组高效检测列和斜线冲突。时间复杂度为O(n!),空间复杂度由递归栈和冲突数组决定。算法核心是:尝试每列放置皇后,若无冲突则递归处理下一行,否则回溯撤销选择。该解法能高效找出所有合法布局,适用于n≤9的约束条件。
2025-11-17 21:05:42
937
原创 力扣征途:四轮进阶算法修炼工具
这是一款专为算法学习者设计的LeetCode刷题进度工具,采用四轮进阶体系(基础入门、进阶提升、算法理论、困难挑战)共476道题目。支持实时进度跟踪、多用户数据存储、备份导入导出及13种算法分类管理。纯前端实现,具备响应式设计和本地存储功能,紫色渐变主题界面美观实用。项目帮助用户系统化提升编程能力,避免盲目刷题,GitHub开源可访问。
2025-10-29 10:59:21
475
原创 延迟任务方案-DelayQueue
本文介绍了基于DelayQueue的延迟任务方案,适用于视频播放进度记忆等场景。文章对比了四种延迟队列方案(DelayQueue、Redisson、MQ、时间轮)的优缺点,重点分析了DelayQueue的原理和实现方式。DelayQueue通过优先级队列存储Delayed类型的任务,按剩余延迟时间排序执行。文中提供了DelayTask自定义类的代码示例,展示了如何创建延迟任务并交给队列处理。该方案不依赖第三方服务,适合短期延迟任务场景,但需注意JVM内存占用问题。
2025-08-03 15:49:09
1211
原创 线程池的异步任务(Spring @Async)
Spring @Async线程池在优惠券兑换码批量生成场景中的应用。通过自定义ThreadPoolTaskExecutor配置核心线程数、队列容量等参数,结合@Async注解实现异步任务处理。相比消息队列、独立服务等方式,线程池方案更适合单服务万级数据处理,具有中等资源占用和无系统依赖的优势。示例代码展示了线程池配置和业务层异步方法调用的完整实现,包括启动类@EnableAsync注解、事务边界划分等关键细节。该方案有效解决了大批量兑换码生成时的性能问题。
2025-07-01 20:58:00
333
原创 事务失效问题:当Spring @Transactional 不按预期工作时
当通过内部方法调用时事务不会按预期回滚。问题根源在于Spring AOP代理机制被绕过,导致事务管理未应用。解决方案是使用AspectJ框架,通过获取当前代理对象来调用事务方法,确保事务生效。
2025-06-30 15:27:09
625
原创 sa-token前后端分离集成redis与jwt基础案例
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
2024-11-12 15:34:33
1638
原创 ipv6服务器配置docker,network与MySQL
ipv6服务器相比ipv4服务器费用更低。docker作为一个实力强大的开源的应用容器引擎,深受广大开发者的喜爱。新手刚开始用ipv6服务器配置docker和装一些镜像时会遇到一些错误。
2024-09-03 19:46:39
1012
原创 SpringCache操作redis
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。EHCacheCaffeineRedis(常用)
2024-07-21 20:20:21
924
原创 redis基础入门及Java操作redis
Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。
2024-07-21 20:11:17
987
原创 HTML导入并使用Axios
Axios 是一个基于网络请求库,作用于node.js和浏览器中。它是的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.jshttp模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。axios中文网:https://www.axios-http.cn。
2024-06-07 16:07:04
4346
4
原创 Apache POI的介绍与入门案例
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。
2023-08-29 18:08:07
536
1
原创 WebSocket介绍与使用
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。
2023-08-26 21:20:37
234
原创 Spring Task的使用(注解方式)
Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。定时任务框架作用,定时自动执行某段Java代码。
2023-08-25 22:12:49
392
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅