- 博客(382)
- 收藏
- 关注
原创 MySQL 日志全解析:Binlog/Redo/Undo 等 5 类关键日志的配置、作用与最佳实践
本文围绕MySQL 5类关键日志展开,详解Binlog、Redo Log、Undo Log、General Log、Slow Log的配置(如Binlog开启/关闭、Redo Log容量设置)、核心作用(Binlog用于主从复制与数据备份,Redo Log保障事务持久性,Undo Log支持回滚与MVCC)、操作方法(如Binlog多方式解析、日志清除策略),对比各日志差异,给出最佳实践(如Slow Log设1秒阈值、避免长事务),助力保障MySQL稳定运行与性能优化。
2025-09-08 15:59:42
610
原创 【Leetcode hot 100】23.合并K个升序链表
合并K个升序链表可以通过两种高效方法实现:1)优先队列(最小堆)法,通过维护各链表当前头节点,每次取最小节点拼接,时间复杂度O(n log k);2)分治法,借鉴归并排序思想两两合并链表,时间复杂度同样为O(n log k)。前者空间复杂度O(k),后者为O(log k)。两种方法各有优势,优先队列直观易实现,分治法空间效率更高,可根据场景选择。
2025-09-08 10:19:42
554
原创 【Leetcode hot 100】148.排序链表
摘要: 题目要求在 O(n log n) 时间复杂度和常数空间(进阶要求)下对链表排序。推荐使用归并排序: 递归法:通过快慢指针拆分链表,递归排序后合并,时间复杂度 O(n log n),空间 O(log n)(递归栈)。 迭代法:自底向上合并,按步长(1→2→4...)切割并合并子链表,满足 O(1) 空间,适合进阶要求。两种方法均保持 O(n log n) 时间复杂度,迭代法更优。关键步骤包括链表拆分、合并有序链表及步长控制。 (字数:149)
2025-09-05 09:58:08
330
原创 【Leetcode hot 100】138.随机链表的复制
题目要求复制带随机指针的链表,确保新链表的节点与原链表完全独立。本文提供了两种解法: 哈希表法:通过哈希表存储原节点与复制节点的映射关系,两次遍历完成复制。时间复杂度O(n),空间复杂度O(n)。 链表拆分法:将复制节点插入原链表后,通过三次遍历完成复制和拆分。时间复杂度O(n),空间复杂度O(1)。 关键点在于正确处理随机指针的复制关系,哈希表法直观易实现,链表拆分法空间效率更高。两种方法均能有效解决该问题,选择取决于具体场景对空间的需求。
2025-09-04 17:23:59
797
原创 【Leetcode hot 100】25.K个一组翻转链表
本文介绍了LeetCode上"K个一组翻转链表"问题的解法。解题思路是使用虚拟头节点简化处理,通过分组迭代翻转链表。每次处理一组k个节点,先检查剩余节点是否足够,然后断开连接翻转当前组,最后重新连接前后部分。核心代码实现了分组翻转和链表连接逻辑,时间复杂度O(n),空间复杂度O(1)。关键在于虚拟头节点的使用、分组断开和翻转后的正确连接,确保处理边界条件的同时满足空间复杂度要求。
2025-09-03 09:02:12
267
原创 MySQL常用存储引擎深度解析
本文将系统梳理MySQL中6种常用存储引擎(InnoDB、MyISAM、TokuDB、ColumnStore、Memory、CSV)的特性、适用场景,并提供完整的实操示例,帮助开发者快速掌握存储引擎的选择与使用方法。
2025-09-02 14:17:28
1823
原创 【Leetcode hot 100】24.两两交换链表中的结点
本文介绍了两种方法解决「两两交换链表中的节点」问题。迭代法通过虚拟头节点和指针调整实现交换,时间复杂度O(n),空间复杂度O(1)。递归法将问题分解为交换前两个节点和处理剩余链表,时间复杂度O(n),空间复杂度O(n)。推荐使用迭代法,因其空间效率更优。两种方法都避免了修改节点值,仅通过调整指针完成交换。
2025-09-02 08:46:47
564
原创 MySQL 版本特性全梳理
本文深度解析MySQL 5.5至8.4版本的演进,梳理各版本核心特性与短板:5.5首将InnoDB设为默认引擎,新增半同步复制却存单线程复制瓶颈;5.6支持GTID与库级并行复制,但全局参数难动态调整;5.7添组复制、原生JSON,仍有大表加列成本高问题;8.0实现事务性数据字典、快速加列等突破;8.4优化系统变量默认值并禁用默认旧密码插件。文中含虚拟列、加列算法对比等实战实验,最后从兼容性、安全性等维度给出版本选型建议,为数据库管理提供参考。
2025-09-01 10:46:27
1186
原创 【Leetcode hot 100】19.删除链表的倒数第N个结点
摘要 本文介绍了如何删除链表中倒数第n个节点的算法。通过使用双指针(快慢指针)技术,配合虚拟头节点的技巧,可以在一次遍历中高效完成删除操作。快指针先移动n步,然后与慢指针同步移动,直到快指针到达链表末尾,此时慢指针指向待删除节点的前驱。该算法的时间复杂度为O(L),空间复杂度为O(1),适用于各种长度的链表。虚拟头节点的引入简化了删除头节点的特殊情况处理,确保算法逻辑的统一性。
2025-09-01 09:43:07
241
原创 【Leetcode hot 100】2.两数相加
该问题要求将两个逆序存储数字的链表相加,返回结果链表。解法使用哑节点简化头节点处理,维护进位变量逐位相加。遍历两链表直到所有节点处理完毕且无进位残留,计算当前位和及进位,生成新节点。时间复杂度为O(max(m,n)),空间复杂度为O(max(m,n)),高效处理了不同长度和进位问题。
2025-08-31 11:07:06
727
原创 MySQL视图、存储过程与触发器详解
本章详细讲解了数据库中视图、存储过程和触发器的核心概念、创建方法、实际应用及局限性,并通过综合案例和ChatGPT辅助工具演示了如何高效使用三者。视图用于简化查询与保护数据,存储过程用于封装复杂逻辑,触发器用于自动响应表操作,三者结合可显著提升数据库操作的效率与安全性。
2025-08-30 16:01:49
746
原创 【Leetcode hot 100】21.合并两个有序链表
合并两个有序链表可以通过迭代或递归实现。迭代法使用哨兵节点简化边界处理,通过双指针比较节点值逐步构建新链表,时间复杂度O(m+n),空间复杂度O(1)。递归法直接比较头节点,将较小节点与剩余链表递归合并,代码更简洁但空间复杂度为O(m+n)的栈空间。两种方法均能高效解决问题,推荐优先使用迭代法以优化空间效率。
2025-08-30 11:34:51
912
原创 MySQL用户管理与安全实践
本文系统介绍了MySQL用户管理的关键操作:用户创建(支持本地/远程/IP段)、查询与删除;权限层级控制(全局/库/表/列),通过GRANT/REVOKE实现精细授权;角色管理机制提升权限分配效率;密码安全管理包括强度策略(validate_password插件)、错误锁定机制及随机密码生成。核心原则:最小权限分配、角色化权限管理、强制密码复杂度,确保数据库访问安全可控。实操示例涵盖用户全生命周期管理及安全防护配置。
2025-08-29 11:12:46
1526
原创 【Leetcode hot 100】142.环形链表Ⅱ
摘要 本文介绍了检测链表环入口的两种方法:哈希表法和双指针法(快慢指针)。哈希表法通过记录访问节点找到首次重复节点,时间复杂度O(n),空间复杂度O(n)。双指针法利用数学推导:快慢指针相遇后,将其中一指针重置到链表头,两指针同步移动必在环入口相遇,时间复杂度O(n),空间复杂度O(1)。双指针法在保持线性时间的同时实现了常数空间,是更优解法。两种方法均通过示例代码展示了实现细节,并分析了复杂度。
2025-08-29 09:01:03
702
原创 初级DBA必会的MySQL运算全解析
本章围绕MySQL的运算与函数展开,涵盖了算术、比较、逻辑、位运算符的用法,以及时间、字符串、数值、JSON等常用函数的实践。这些工具是初级DBA处理数据计算、条件过滤、格式转换的核心能力,需结合业务场景灵活运用。实际工作中,应注意运算符优先级对结果的影响,以及函数在性能优化中的合理使用(如避免在WHERE子句中对字段使用函数,以免索引失效)。通过案例练习可加深对知识点的理解,为复杂查询和数据处理打下基础。
2025-08-28 16:06:54
896
原创 【Leetcode hot 100】141.环形链表
本文介绍了使用双指针法(快慢指针)判断链表是否存在环的解决方案。快指针每次移动2步,慢指针每次移动1步。若存在环,快指针最终会追上慢指针;若无环,快指针会先到达链表尾部。该算法具有O(n)时间复杂度和O(1)空间复杂度,是判断环形链表的经典方法。代码实现中需注意循环条件以避免空指针异常,两指针相遇即为环存在的判定条件。
2025-08-28 09:47:36
491
原创 初级DBA必备:字段类型与字符集详解
本文围绕MySQL数据类型展开,解析了字符串(CHAR、VARCHAR等)、整数、浮点数与定点数、时间等核心类型的特性、应用场景及实践差异,如CHAR与VARCHAR的空格处理、ENUM与SET的取值限制等。同时阐述了字符集的影响、配置方法及使用建议,强调全局统一UTF8MB4以避免乱码和索引问题。结合商品表、学生表设计案例,总结出类型选择需平衡精度、性能与存储,时间类型依范围和时区选择等原则,为数据库表设计提供实用指导。
2025-08-27 14:58:23
1167
原创 【Leetcode hot 100】234.回文链表
摘要 本文介绍了两种判断链表是否为回文的方法。第一种方法利用辅助空间存储节点值,通过双指针比较判断回文,时间复杂度O(n),空间复杂度O(n)。第二种方法通过反转链表后半部分实现O(1)空间复杂度:先找中点,反转后半部分,再比较前后两部分,最后可选恢复原链表结构。两种方法各具优势,第一种直观易懂,第二种更高效且符合进阶要求。
2025-08-27 08:50:13
249
原创 DBA必备SQL语句大全:从基础到实战
本文涵盖了DBA日常工作中必备的SQL技能,从库表创建、字段操作到数据增删查改,再到高级查询(子查询、关联查询、分组聚合等),通过实例演示了各类场景的实现方式。掌握这些基础后,可进一步学习索引优化、事务管理等进阶内容,提升数据库操作效率与稳定性。
2025-08-26 17:34:44
965
原创 【Leetcode hot 100】206.反转链表
反转链表问题可通过迭代或递归两种方法解决。迭代法使用双指针遍历链表,逐步反转节点指向,时间复杂度O(n),空间复杂度O(1)。递归法则通过递归到链表尾部后回溯反转指针,时间复杂度O(n),但空间复杂度为O(n)(递归栈开销)。两种方法都能高效完成链表反转,迭代法更适合大数据量场景,而递归法代码更简洁但需注意栈溢出风险。
2025-08-26 10:06:02
342
原创 MySQL root 密码忘了怎么办?超详细重置步骤教程
摘要:本文介绍了MySQL root密码遗忘的解决方案。通过修改配置文件添加skip-grant-tables跳过权限验证,重启服务后无密码登录MySQL,清空root密码字段,再移除跳过验证参数并重启服务。最后用空密码登录重新设置新密码(如dup81Gcda2),验证新密码有效性。该流程完整解决了root密码丢失无法登录的问题,确保数据库访问恢复正常。
2025-08-25 17:10:23
623
原创 【Leetcode hot 100】160.相交链表
本文介绍了如何找出两个单链表的相交起始节点。最优解法采用双指针法,通过让两个指针分别遍历两个链表后交换遍历路径,最终在相交节点相遇(总路径相同)。该解法时间复杂度O(m+n),空间复杂度O(1)。此外还介绍了哈希表法作为备选方案,但空间复杂度较高。关键点在于理解通过交叉遍历消除长度差的思想,这是解决链表相交问题的经典技巧。
2025-08-25 10:07:40
746
原创 【Leetcode hot 100】240.搜索二维矩阵Ⅱ
该问题要求在具有特定排序特性的二维矩阵中高效搜索目标值。矩阵每行从左到右递增,每列从上到下递增。解决方案采用从右上角开始的搜索策略:若当前元素等于目标值则返回true;若大于目标值则左移一列;若小于目标值则下移一行。这种方法时间复杂度为O(m+n),其中m和n分别是矩阵的行数和列数。代码通过双指针实现,初始时指针位于矩阵右上角,通过比较当前元素与目标值动态调整指针位置,直至找到目标值或遍历完可能区域。
2025-08-24 10:01:21
484
原创 【Leetcode hot 100】48.旋转图像
本文介绍了如何原地旋转一个n×n矩阵90度的方法。通过分层处理和循环交换元素,将矩阵从外到内逐层旋转。具体步骤包括:分层循环确定边界,交换四个位置的元素(左上、右上、右下、左下),使用临时变量暂存值。该方法时间复杂度为O(n²),空间复杂度为O(1),满足题目要求的原地修改条件。代码示例展示了如何实现这一算法,并通过测试用例验证了其正确性。
2025-08-23 16:34:17
316
原创 从零开始搭 Linux 环境:VMware 下 CentOS 7 的安装与配置全流程(附图解)
本文详细介绍了在Windows系统上安装CentOS 7虚拟机的完整流程。首先需要下载VMware Workstation Pro并完成安装配置,注意修改默认安装路径和输入许可证密钥。安装完成后需检查网络适配器是否正常。接着从阿里云镜像站下载CentOS 7系统镜像文件,通过VMware创建新虚拟机,配置内存、磁盘空间等参数。最后详细说明了CentOS 7的安装步骤,包括时区设置、磁盘分区、网络配置等关键环节,并提示设置root用户密码。整个过程配有详细截图指引,适合初学者按步骤操作。
2025-08-22 10:35:21
1751
原创 【Leetcode hot 100】54.螺旋矩阵
本文介绍了如何解决螺旋矩阵问题,即按顺时针顺序遍历矩阵元素。通过定义四个边界(左、右、上、下)逐步缩小遍历范围,依次处理四个方向的元素:从左到右、从上到下、从右到左、从下到上。每次遍历后更新边界并检查是否越界,确保所有元素被访问且不重复。代码实现简洁高效,适用于各种矩阵形状。该方法时间复杂度为O(mn),空间复杂度为O(1)。
2025-08-22 08:34:26
593
原创 【Bug】CentOS 7 使用vim命令报错vim: command not found
本文解决了CentOS7系统中vim命令无法找到的问题。通过分析发现是由于未安装vim及YUM仓库配置错误导致。解决方法包括:检查网络连接、验证YUM仓库配置,建议使用阿里云等国内镜像源替换失效的官方源。具体步骤包括备份原配置、下载新镜像源、清理YUM缓存并重新安装vim工具。最终通过系统化的网络和软件源配置,成功解决了vim编辑器安装失败的问题。
2025-08-21 21:01:43
666
1
原创 【Leetcode hot 100】73.矩阵置零
这篇文章介绍了一种原地算法来解决矩阵置零问题。核心思路是利用矩阵的第一行和第一列作为标记位,记录需要置零的行和列。具体步骤如下: 首先检查第一行和第一列是否原本包含0,保存初始状态 遍历矩阵其他元素,使用第一行和第一列标记需置零的行列 根据标记将对应行列置零 最后处理第一行和第一列 这种方法避免了使用额外空间,空间复杂度为O(1)。关键点在于利用第一行和第一列保存标记信息,并在最后处理它们以保证正确性。
2025-08-21 14:59:51
314
原创 【Leetcode hot 100】41.缺失的第一个正数
本文介绍了如何高效解决“缺失的第一个正数”问题。通过原地哈希技术,利用数组自身作为哈希表,实现了O(n)时间复杂度和O(1)空间复杂度的解法。具体步骤包括:预处理数据,将无效值替换为n+1;通过负数标记存在的数;最后遍历查找第一个未标记的正数位置。该方法巧妙地将空间复杂度降为常数级,适用于大规模数据。
2025-08-20 10:12:10
340
原创 【Leetcode hot 100】238.除自身以外数组的乘积
摘要 该问题要求计算数组中每个元素除自身外所有其他元素的乘积,且不能使用除法,时间复杂度需为O(n)。解决方法采用两次遍历:第一次从左到右计算每个元素左侧所有元素的乘积(前缀乘积),存储在结果数组中;第二次从右到左计算每个元素右侧所有元素的乘积(后缀乘积),与之前的前缀乘积相乘得到最终结果。这样避免了额外的数组空间,时间复杂度为O(n),空间复杂度为O(1)(不包括结果数组)。
2025-08-19 09:16:28
246
原创 【Leetcode hot 100】189.轮转数组
摘要: LeetCode 189题要求将数组元素向右轮转k个位置。采用三次反转法高效解决:先对k取模,然后整体反转数组,再分别反转前k个和剩余元素。时间复杂度O(n),空间复杂度O(1)。例如,输入[1,2,3,4,5,6,7]和k=3,反转后得到[5,6,7,1,2,3,4]。该方法通过局部反转避免大量元素交换,适合大规模数据。
2025-08-17 22:34:38
397
原创 【Leetcode hot 100】56.合并区间
该问题要求合并所有重叠的区间,并返回不重叠的区间数组。解决思路是: 排序区间:按区间起始点升序排序,便于后续合并处理。 合并重叠区间:遍历排序后的区间,维护当前合并区间。若新区间与当前区间重叠,则更新当前区间的结束点;否则将当前区间加入结果集并更新当前区间为新区间。 处理最后一个区间:遍历结束后,将最后一个当前区间加入结果集。 代码首先处理空输入,排序后遍历合并区间,最后转换为二维数组返回。时间复杂度为O(n log n),主要由排序决定,能高效处理问题。
2025-08-16 10:09:02
440
原创 【Leetcode hot 100】53.最大子数组和
该问题要求找出数组中连续子数组的最大和。使用动态规划方法,通过维护两个变量:currentSum(以当前元素结尾的最大子数组和)和maxSum(全局最大值)。遍历数组时,对于每个元素,更新currentSum为当前元素或与前面子数组的和的较大值,并同步更新maxSum。最终返回maxSum即可。该方法时间复杂度为O(n),空间复杂度为O(1),高效且简洁。
2025-08-15 16:27:10
428
原创 【Leetcode hot 100】76.最小覆盖字串
文章摘要: 本文详细解析了LeetCode 76题“最小覆盖子串”的滑动窗口解法。通过哈希表(或数组)统计字符需求,用双指针动态维护窗口,当窗口包含目标串所有字符时缩小窗口寻找最短子串。关键点包括:用valid标记已满足的字符种类、数组优化哈希表访问、窗口缩小时机判断。Java代码实现了O(n)时间复杂度的解法,适用于英文字符串场景。练习建议尝试用HashMap对比性能差异,深入理解滑动窗口的优化逻辑。
2025-08-14 10:22:35
801
原创 【Leetcode】239.滑动窗口最大值
摘要:本文介绍了使用单调队列高效解决滑动窗口最大值问题的方法。通过维护一个单调递减的双端队列,确保队首始终是当前窗口的最大值。具体步骤包括移除过期元素、维护队列单调性,并在窗口形成时记录最大值。该方法时间复杂度O(n),空间复杂度O(k),适用于大规模数据。提供了Java实现代码及详细解释,确保读者能够理解并应用该算法解决类似问题。
2025-08-13 08:49:58
297
原创 【Leetcode hot 100】560.和为K的子数组
本文介绍了如何高效统计数组中所有和为 ( k ) 的连续子数组个数。使用前缀和 + 哈希表的方法,将时间复杂度优化至 ( O(n) )。核心思路是:遍历数组时维护当前前缀和,通过哈希表记录各前缀和的出现次数,并实时查询满足 currentSum - k 的前缀和数量。该方法避免了暴力枚举,适用于大规模数据。代码实现清晰,初始化时需注意 prefixMap.put(0,1) 处理边界情况。该算法在 LeetCode 560 题中表现出色,时间和空间复杂度均为线性。
2025-08-12 10:23:48
258
原创 【Leetcode hot 100】438.找到字符串中所有字母异位词
本文介绍了如何在一个字符串 s 中查找所有与字符串 p 构成字母异位词的子串,并返回这些子串的起始索引。字母异位词是指字符相同但顺序不同的字符串。 方法思路: 滑动窗口法:通过维护一个与 p 长度相同的滑动窗口,统计窗口内字符的频率。 字符频率比较:初始化时统计 p 的字符频率,并在 s 中滑动窗口,每次移动窗口时更新字符频率,检查是否与 p 的频率一致。 解决代码: 使用两个长度为26的数组分别统计 p 和当前窗口的字符频率。 初始窗口检查后,滑动窗口遍历字符串 s,动态更新窗口字符频率并比较。 辅助方法
2025-08-11 09:06:25
884
原创 【Leetcode hot 100】3. 无重复字符的最长子串
本文介绍了如何用滑动窗口技术解决"无重复字符的最长子串"问题。通过维护左右指针和哈希集合,算法在O(n)时间内找到最长无重复子串。具体实现中,右指针遍历字符串,左指针在遇到重复字符时收缩窗口,同时用集合记录当前窗口字符,并实时更新最大长度。该方法简洁高效,适用于各种输入规模。
2025-08-08 08:37:07
273
原创 【Leetcode hot 100】42.接雨水
本文介绍了如何使用动态规划解决接雨水问题。通过预处理每个位置的左边和右边最大高度,计算每个位置能接的雨水量,具体公式为当前点左右最大高度的较小值减去当前高度。算法通过两次遍历预处理左右最大高度数组,再遍历计算总雨水量,时间复杂度O(n),空间复杂度O(n)。代码以Java实现,并给出了示例验证其正确性。
2025-08-07 08:35:48
425
原创 【Leetcode hot 100】15.三数之和
本文介绍了LeetCode问题"三数之和"的高效解法。该问题要求在数组中找到所有不重复的三元组,使其元素之和为0。通过排序预处理(O(n log n))和双指针技巧(O(n²)),算法能够高效地解决问题。关键步骤包括:排序数组以方便去重,遍历固定第一个数后使用双指针寻找另外两个数,并在过程中跳过重复元素以保证结果唯一。最终的时间复杂度为O(n²),空间复杂度为O(1)(不考虑结果存储)。这种方法既避免了暴力枚举的高复杂度,又确保了结果的正确性和无重复性。
2025-08-06 08:34:16
692
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人