- 博客(11)
- 收藏
- 关注
原创 # MYDB 2. 引用计数缓存框架和共享内存数组学习笔记
本文分析了MYDB数据库底层模块Data Manager的两个关键技术:引用计数缓存框架和共享内存数组的实现。针对缓存管理,文章指出传统LRU策略的不足,详细阐述了基于引用计数的缓存实现方案,包括其核心抽象类设计、三个关键Map的协同工作,以及获取/释放资源的完整流程。在内存管理方面,提出了SubArray类来解决Java数组无法共享内存的问题。这些技术通过精细化内存控制和资源管理,有效提升了数据库系统的性能和可靠性。文章对理解数据库底层缓存和内存管理机制具有重要参考价值。
2025-06-22 15:51:02
738
原创 【MYDB 学习笔记:从最简单的 TM 开始】
本文介绍了MYDB数据库系统中事务管理器(TM)的实现原理。TM通过XID文件管理事务状态,XID文件包含文件头(记录事务数量)和事务状态字段(1字节/事务)。详细解析了事务的三种状态(active/committed/aborted)、XID分配规则(从1开始递增,0为特殊超级事务)以及核心接口功能(begin/commit/abort等)。实现上采用NIO的FileChannel进行文件操作,使用force()确保数据持久化,并包含文件校验、状态更新等关键方法。该模块为数据库系统提供了基础的事务状态管理
2025-06-21 21:21:22
288
原创 电脑今天用完明天还要用,是关机好还是睡眠(休眠)好
关机还是睡眠?关键看你的需求优先级 睡眠适合追求效率的用户:恢复工作仅需几秒,适合频繁使用,但需持续供电以防数据丢失,长期不重启可能积累系统问题。关机更稳定:零耗电、彻底释放资源,适合注重硬件寿命或需要系统更新时,缺点是启动耗时较长。 建议:日常使用优先睡眠(确保供电),定期关机重启;无法保证供电或需系统维护时选择关机。养成随时保存的习惯,笔记本用户注意插电睡眠。
2025-06-21 21:12:32
1490
原创 【HashMap和HashSet的区别】
摘要:HashMap和HashSet是Java中基于哈希表实现的两种集合类,主要区别在于用途和存储方式。HashSet用于存储唯一元素,实现Set接口,底层通过HashMap实现;HashMap则存储键值对,实现Map接口。前者适合数据去重和集合运算,后者适用于键值存储和快速查找。虽然它们的操作时间复杂度均为O(1),但HashMap因存储键值对会占用更多内存。选择依据取决于需求:仅需元素唯一性时用HashSet,需要键值映射关系时用HashMap。
2025-06-20 02:02:48
947
原创 jvm基础篇04-垃圾回收
本文介绍了JVM垃圾回收机制的核心概念和实现方式。主要内容包括:1. 垃圾回收基础:解释了内存泄漏、自动/手动回收的优缺点,以及方法区类卸载的三个条件;2. 堆回收机制:详细阐述了引用计数法和可达性分析算法,重点分析了四种GC Root对象和五种引用类型(强引用、软引用、弱引用、虚引用和终结器引用);3. 垃圾回收算法:对比了标记-清除、复制、标记-整理算法的优缺点,并介绍了现代JVM采用的分代回收策略;4. 主流垃圾回收器:分析了Serial、ParNew、CMS、Parallel和G1等回收器的特点、适
2025-06-20 01:58:00
567
原创 常见疑惑:两阶段提交是什么?undo log为什么不参与,修改数据时,redo log、undo log 和 binlog这三个log的具体执行顺序是什么
两阶段提交(2PC)通过协调redolog与binlog保证分布式事务一致性,将提交过程分为准备(redo标记prepare)和提交(binlog刷盘后redo标记commit)两阶段。undolog用于事务回滚和MVCC,不参与2PC,其修改由redolog保护。数据修改时,先记录undolog旧值,再修改内存页并生成redo,提交时redo先prepare,binlog刷盘后redo标记commit。三者各司其职:redolog确保持久性,binlog实现复制,undolog保障原子性和MVCC,共同构
2025-06-19 14:58:12
875
原创 LeetCode Hot100----07-链表篇上,包含多种方法,详细思路与代码,让你一篇文章看懂所有!
本文总结了链表数据结构的核心特性与常见操作技巧。首先介绍了链表的基本类型(单链表、双向链表、循环链表)及其与数组的性能对比(插入/删除效率更高,但随机访问更慢)。随后详细讲解了链表的基本操作实现(遍历、插入、删除)以及反转、快慢指针等高级算法。重点解析了三个经典问题:160.相交链表(双指针路径互补法)、206.反转链表(迭代/递归两种解法)、234.回文链表(快慢指针+反转后半部分)。这些方法均能在O(n)时间复杂度下高效解决问题,部分算法还可达到O(1)空间复杂度。掌握这些核心算法思想可有效应对链表相关
2025-06-19 01:52:22
1238
原创 LeetCode Hot100----06-矩阵篇,包含多种方法,详细思路与代码,让你一篇文章看懂所有!
本文摘要: 矩阵算法专题: 矩阵置零问题:提出了两种解决方案,一种是O(m+n)空间的集合标记法,另一种是更优的O(1)空间的原地标记法,利用矩阵第一行和第一列作为标记数组。 螺旋矩阵遍历:详细介绍了按层遍历法和模拟路径法两种解决方案,重点分析了边界处理和方向控制的核心逻辑。 图像旋转算法:提供了三种方法,包括推荐的两次翻转法(水平翻转+主对角线翻转),以及辅助数组法和分圈旋转法。 搜索二维矩阵:对比了直接查找、二分查找和Z字形搜索三种方法,重点阐述了从右上角出发的Z字形搜索策略,其时间复杂度为O(m+n)
2025-06-18 17:22:35
1246
原创 LeetCode Hot100----05-普通数组篇,包含多种方法,详细思路与代码,让你一篇文章看懂所有!
本文介绍了5个数组相关算法题的解题方法: 最大子数组和:暴力解法(O(n²))和动态规划(O(n),若当前和为正则累加,否则重新开始)。 合并区间:先按起始位置排序,通过比较相邻区间进行合并(贪心策略)。 轮转数组:三次反转法(O(n),O(1)空间),先整体反转,再分别反转前k个和后n-k个元素。 除自身以外数组乘积:利用前缀积和后缀积(O(n)),优化后仅需一次遍历和常数空间。 缺失的第一个正数:通过原地哈希或标记法(O(n),O(1)空间),将数字放到正确位置或利用符号标记存在性。 核心技巧包括:双指
2025-06-18 00:00:00
796
原创 jvm基础03 java内存区域
摘要:本文详解Java虚拟机运行时数据区的核心组件及内存管理机制。主要内容包括:1)程序计数器的线程私有特性及防溢出设计;2)Java虚拟机栈的栈帧结构(局部变量表、操作数栈、帧数据)及StackOverflowError的产生;3)堆区的对象存储机制、内存溢出条件及-Xmx/-Xms参数设置;4)方法区在不同JDK版本的演变(永久代→元空间)及其三类数据存储(类元信息、运行时常量池、字符串常量池);5)直接内存的IO优化作用及ByteBuffer应用。特别解析了字符串常量池在JDK6-8的位置迁移及int
2025-06-17 00:00:00
967
原创 jvm基础篇01-02
本文探讨了JVM主版本号不兼容问题的两种解决方案:升级JDK版本或降低依赖版本,并分析了字节码文件中常量池的空间优化作用。通过实例解析了i++与++i的字节码执行差异,比较了三种自增操作的性能优劣(k+=1最优)。介绍了包括javap、jclasslib插件和Arthas在内的字节码分析工具,详细阐述了类的生命周期各阶段特点。重点剖析了双亲委派机制原理及其三种打破方式:重写loadClass方法(Tomcat应用)、线程上下文类加载器(JDBC驱动加载)和OSGi模块化框架的网状加载结构,强调打破机制需谨慎
2025-06-15 18:00:25
1028
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人