- 博客(372)
- 收藏
- 关注
原创 MySQL视图、存储过程与触发器详解
本章详细讲解了数据库中视图、存储过程和触发器的核心概念、创建方法、实际应用及局限性,并通过综合案例和ChatGPT辅助工具演示了如何高效使用三者。视图用于简化查询与保护数据,存储过程用于封装复杂逻辑,触发器用于自动响应表操作,三者结合可显著提升数据库操作的效率与安全性。
2025-08-30 16:01:49
563
原创 【Leetcode hot 100】21.合并两个有序链表
合并两个有序链表可以通过迭代或递归实现。迭代法使用哨兵节点简化边界处理,通过双指针比较节点值逐步构建新链表,时间复杂度O(m+n),空间复杂度O(1)。递归法直接比较头节点,将较小节点与剩余链表递归合并,代码更简洁但空间复杂度为O(m+n)的栈空间。两种方法均能高效解决问题,推荐优先使用迭代法以优化空间效率。
2025-08-30 11:34:51
613
原创 MySQL用户管理与安全实践
本文系统介绍了MySQL用户管理的关键操作:用户创建(支持本地/远程/IP段)、查询与删除;权限层级控制(全局/库/表/列),通过GRANT/REVOKE实现精细授权;角色管理机制提升权限分配效率;密码安全管理包括强度策略(validate_password插件)、错误锁定机制及随机密码生成。核心原则:最小权限分配、角色化权限管理、强制密码复杂度,确保数据库访问安全可控。实操示例涵盖用户全生命周期管理及安全防护配置。
2025-08-29 11:12:46
1187
原创 【Leetcode hot 100】142.环形链表Ⅱ
摘要 本文介绍了检测链表环入口的两种方法:哈希表法和双指针法(快慢指针)。哈希表法通过记录访问节点找到首次重复节点,时间复杂度O(n),空间复杂度O(n)。双指针法利用数学推导:快慢指针相遇后,将其中一指针重置到链表头,两指针同步移动必在环入口相遇,时间复杂度O(n),空间复杂度O(1)。双指针法在保持线性时间的同时实现了常数空间,是更优解法。两种方法均通过示例代码展示了实现细节,并分析了复杂度。
2025-08-29 09:01:03
464
原创 初级DBA必会的MySQL运算全解析
本章围绕MySQL的运算与函数展开,涵盖了算术、比较、逻辑、位运算符的用法,以及时间、字符串、数值、JSON等常用函数的实践。这些工具是初级DBA处理数据计算、条件过滤、格式转换的核心能力,需结合业务场景灵活运用。实际工作中,应注意运算符优先级对结果的影响,以及函数在性能优化中的合理使用(如避免在WHERE子句中对字段使用函数,以免索引失效)。通过案例练习可加深对知识点的理解,为复杂查询和数据处理打下基础。
2025-08-28 16:06:54
814
原创 【Leetcode hot 100】141.环形链表
本文介绍了使用双指针法(快慢指针)判断链表是否存在环的解决方案。快指针每次移动2步,慢指针每次移动1步。若存在环,快指针最终会追上慢指针;若无环,快指针会先到达链表尾部。该算法具有O(n)时间复杂度和O(1)空间复杂度,是判断环形链表的经典方法。代码实现中需注意循环条件以避免空指针异常,两指针相遇即为环存在的判定条件。
2025-08-28 09:47:36
424
原创 初级DBA必备:字段类型与字符集详解
本文围绕MySQL数据类型展开,解析了字符串(CHAR、VARCHAR等)、整数、浮点数与定点数、时间等核心类型的特性、应用场景及实践差异,如CHAR与VARCHAR的空格处理、ENUM与SET的取值限制等。同时阐述了字符集的影响、配置方法及使用建议,强调全局统一UTF8MB4以避免乱码和索引问题。结合商品表、学生表设计案例,总结出类型选择需平衡精度、性能与存储,时间类型依范围和时区选择等原则,为数据库表设计提供实用指导。
2025-08-27 14:58:23
1152
原创 【Leetcode hot 100】234.回文链表
摘要 本文介绍了两种判断链表是否为回文的方法。第一种方法利用辅助空间存储节点值,通过双指针比较判断回文,时间复杂度O(n),空间复杂度O(n)。第二种方法通过反转链表后半部分实现O(1)空间复杂度:先找中点,反转后半部分,再比较前后两部分,最后可选恢复原链表结构。两种方法各具优势,第一种直观易懂,第二种更高效且符合进阶要求。
2025-08-27 08:50:13
238
原创 DBA必备SQL语句大全:从基础到实战
本文涵盖了DBA日常工作中必备的SQL技能,从库表创建、字段操作到数据增删查改,再到高级查询(子查询、关联查询、分组聚合等),通过实例演示了各类场景的实现方式。掌握这些基础后,可进一步学习索引优化、事务管理等进阶内容,提升数据库操作效率与稳定性。
2025-08-26 17:34:44
954
原创 【Leetcode hot 100】206.反转链表
反转链表问题可通过迭代或递归两种方法解决。迭代法使用双指针遍历链表,逐步反转节点指向,时间复杂度O(n),空间复杂度O(1)。递归法则通过递归到链表尾部后回溯反转指针,时间复杂度O(n),但空间复杂度为O(n)(递归栈开销)。两种方法都能高效完成链表反转,迭代法更适合大数据量场景,而递归法代码更简洁但需注意栈溢出风险。
2025-08-26 10:06:02
335
原创 MySQL root 密码忘了怎么办?超详细重置步骤教程
摘要:本文介绍了MySQL root密码遗忘的解决方案。通过修改配置文件添加skip-grant-tables跳过权限验证,重启服务后无密码登录MySQL,清空root密码字段,再移除跳过验证参数并重启服务。最后用空密码登录重新设置新密码(如dup81Gcda2),验证新密码有效性。该流程完整解决了root密码丢失无法登录的问题,确保数据库访问恢复正常。
2025-08-25 17:10:23
533
原创 【Leetcode hot 100】160.相交链表
本文介绍了如何找出两个单链表的相交起始节点。最优解法采用双指针法,通过让两个指针分别遍历两个链表后交换遍历路径,最终在相交节点相遇(总路径相同)。该解法时间复杂度O(m+n),空间复杂度O(1)。此外还介绍了哈希表法作为备选方案,但空间复杂度较高。关键点在于理解通过交叉遍历消除长度差的思想,这是解决链表相交问题的经典技巧。
2025-08-25 10:07:40
736
原创 【Leetcode hot 100】240.搜索二维矩阵Ⅱ
该问题要求在具有特定排序特性的二维矩阵中高效搜索目标值。矩阵每行从左到右递增,每列从上到下递增。解决方案采用从右上角开始的搜索策略:若当前元素等于目标值则返回true;若大于目标值则左移一列;若小于目标值则下移一行。这种方法时间复杂度为O(m+n),其中m和n分别是矩阵的行数和列数。代码通过双指针实现,初始时指针位于矩阵右上角,通过比较当前元素与目标值动态调整指针位置,直至找到目标值或遍历完可能区域。
2025-08-24 10:01:21
473
原创 【Leetcode hot 100】48.旋转图像
本文介绍了如何原地旋转一个n×n矩阵90度的方法。通过分层处理和循环交换元素,将矩阵从外到内逐层旋转。具体步骤包括:分层循环确定边界,交换四个位置的元素(左上、右上、右下、左下),使用临时变量暂存值。该方法时间复杂度为O(n²),空间复杂度为O(1),满足题目要求的原地修改条件。代码示例展示了如何实现这一算法,并通过测试用例验证了其正确性。
2025-08-23 16:34:17
304
原创 从零开始搭 Linux 环境:VMware 下 CentOS 7 的安装与配置全流程(附图解)
本文详细介绍了在Windows系统上安装CentOS 7虚拟机的完整流程。首先需要下载VMware Workstation Pro并完成安装配置,注意修改默认安装路径和输入许可证密钥。安装完成后需检查网络适配器是否正常。接着从阿里云镜像站下载CentOS 7系统镜像文件,通过VMware创建新虚拟机,配置内存、磁盘空间等参数。最后详细说明了CentOS 7的安装步骤,包括时区设置、磁盘分区、网络配置等关键环节,并提示设置root用户密码。整个过程配有详细截图指引,适合初学者按步骤操作。
2025-08-22 10:35:21
1728
原创 【Leetcode hot 100】54.螺旋矩阵
本文介绍了如何解决螺旋矩阵问题,即按顺时针顺序遍历矩阵元素。通过定义四个边界(左、右、上、下)逐步缩小遍历范围,依次处理四个方向的元素:从左到右、从上到下、从右到左、从下到上。每次遍历后更新边界并检查是否越界,确保所有元素被访问且不重复。代码实现简洁高效,适用于各种矩阵形状。该方法时间复杂度为O(mn),空间复杂度为O(1)。
2025-08-22 08:34:26
587
原创 【Bug】CentOS 7 使用vim命令报错vim: command not found
本文解决了CentOS7系统中vim命令无法找到的问题。通过分析发现是由于未安装vim及YUM仓库配置错误导致。解决方法包括:检查网络连接、验证YUM仓库配置,建议使用阿里云等国内镜像源替换失效的官方源。具体步骤包括备份原配置、下载新镜像源、清理YUM缓存并重新安装vim工具。最终通过系统化的网络和软件源配置,成功解决了vim编辑器安装失败的问题。
2025-08-21 21:01:43
652
1
原创 【Leetcode hot 100】73.矩阵置零
这篇文章介绍了一种原地算法来解决矩阵置零问题。核心思路是利用矩阵的第一行和第一列作为标记位,记录需要置零的行和列。具体步骤如下: 首先检查第一行和第一列是否原本包含0,保存初始状态 遍历矩阵其他元素,使用第一行和第一列标记需置零的行列 根据标记将对应行列置零 最后处理第一行和第一列 这种方法避免了使用额外空间,空间复杂度为O(1)。关键点在于利用第一行和第一列保存标记信息,并在最后处理它们以保证正确性。
2025-08-21 14:59:51
311
原创 【Leetcode hot 100】41.缺失的第一个正数
本文介绍了如何高效解决“缺失的第一个正数”问题。通过原地哈希技术,利用数组自身作为哈希表,实现了O(n)时间复杂度和O(1)空间复杂度的解法。具体步骤包括:预处理数据,将无效值替换为n+1;通过负数标记存在的数;最后遍历查找第一个未标记的正数位置。该方法巧妙地将空间复杂度降为常数级,适用于大规模数据。
2025-08-20 10:12:10
336
原创 【Leetcode hot 100】238.除自身以外数组的乘积
摘要 该问题要求计算数组中每个元素除自身外所有其他元素的乘积,且不能使用除法,时间复杂度需为O(n)。解决方法采用两次遍历:第一次从左到右计算每个元素左侧所有元素的乘积(前缀乘积),存储在结果数组中;第二次从右到左计算每个元素右侧所有元素的乘积(后缀乘积),与之前的前缀乘积相乘得到最终结果。这样避免了额外的数组空间,时间复杂度为O(n),空间复杂度为O(1)(不包括结果数组)。
2025-08-19 09:16:28
242
原创 【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
394
原创 【Leetcode hot 100】56.合并区间
该问题要求合并所有重叠的区间,并返回不重叠的区间数组。解决思路是: 排序区间:按区间起始点升序排序,便于后续合并处理。 合并重叠区间:遍历排序后的区间,维护当前合并区间。若新区间与当前区间重叠,则更新当前区间的结束点;否则将当前区间加入结果集并更新当前区间为新区间。 处理最后一个区间:遍历结束后,将最后一个当前区间加入结果集。 代码首先处理空输入,排序后遍历合并区间,最后转换为二维数组返回。时间复杂度为O(n log n),主要由排序决定,能高效处理问题。
2025-08-16 10:09:02
433
原创 【Leetcode hot 100】53.最大子数组和
该问题要求找出数组中连续子数组的最大和。使用动态规划方法,通过维护两个变量:currentSum(以当前元素结尾的最大子数组和)和maxSum(全局最大值)。遍历数组时,对于每个元素,更新currentSum为当前元素或与前面子数组的和的较大值,并同步更新maxSum。最终返回maxSum即可。该方法时间复杂度为O(n),空间复杂度为O(1),高效且简洁。
2025-08-15 16:27:10
425
原创 【Leetcode hot 100】76.最小覆盖字串
文章摘要: 本文详细解析了LeetCode 76题“最小覆盖子串”的滑动窗口解法。通过哈希表(或数组)统计字符需求,用双指针动态维护窗口,当窗口包含目标串所有字符时缩小窗口寻找最短子串。关键点包括:用valid标记已满足的字符种类、数组优化哈希表访问、窗口缩小时机判断。Java代码实现了O(n)时间复杂度的解法,适用于英文字符串场景。练习建议尝试用HashMap对比性能差异,深入理解滑动窗口的优化逻辑。
2025-08-14 10:22:35
790
原创 【Leetcode】239.滑动窗口最大值
摘要:本文介绍了使用单调队列高效解决滑动窗口最大值问题的方法。通过维护一个单调递减的双端队列,确保队首始终是当前窗口的最大值。具体步骤包括移除过期元素、维护队列单调性,并在窗口形成时记录最大值。该方法时间复杂度O(n),空间复杂度O(k),适用于大规模数据。提供了Java实现代码及详细解释,确保读者能够理解并应用该算法解决类似问题。
2025-08-13 08:49:58
293
原创 【Leetcode hot 100】560.和为K的子数组
本文介绍了如何高效统计数组中所有和为 ( k ) 的连续子数组个数。使用前缀和 + 哈希表的方法,将时间复杂度优化至 ( O(n) )。核心思路是:遍历数组时维护当前前缀和,通过哈希表记录各前缀和的出现次数,并实时查询满足 currentSum - k 的前缀和数量。该方法避免了暴力枚举,适用于大规模数据。代码实现清晰,初始化时需注意 prefixMap.put(0,1) 处理边界情况。该算法在 LeetCode 560 题中表现出色,时间和空间复杂度均为线性。
2025-08-12 10:23:48
254
原创 【Leetcode hot 100】438.找到字符串中所有字母异位词
本文介绍了如何在一个字符串 s 中查找所有与字符串 p 构成字母异位词的子串,并返回这些子串的起始索引。字母异位词是指字符相同但顺序不同的字符串。 方法思路: 滑动窗口法:通过维护一个与 p 长度相同的滑动窗口,统计窗口内字符的频率。 字符频率比较:初始化时统计 p 的字符频率,并在 s 中滑动窗口,每次移动窗口时更新字符频率,检查是否与 p 的频率一致。 解决代码: 使用两个长度为26的数组分别统计 p 和当前窗口的字符频率。 初始窗口检查后,滑动窗口遍历字符串 s,动态更新窗口字符频率并比较。 辅助方法
2025-08-11 09:06:25
879
原创 【Leetcode hot 100】3. 无重复字符的最长子串
本文介绍了如何用滑动窗口技术解决"无重复字符的最长子串"问题。通过维护左右指针和哈希集合,算法在O(n)时间内找到最长无重复子串。具体实现中,右指针遍历字符串,左指针在遇到重复字符时收缩窗口,同时用集合记录当前窗口字符,并实时更新最大长度。该方法简洁高效,适用于各种输入规模。
2025-08-08 08:37:07
268
原创 【Leetcode hot 100】42.接雨水
本文介绍了如何使用动态规划解决接雨水问题。通过预处理每个位置的左边和右边最大高度,计算每个位置能接的雨水量,具体公式为当前点左右最大高度的较小值减去当前高度。算法通过两次遍历预处理左右最大高度数组,再遍历计算总雨水量,时间复杂度O(n),空间复杂度O(n)。代码以Java实现,并给出了示例验证其正确性。
2025-08-07 08:35:48
417
原创 【Leetcode hot 100】15.三数之和
本文介绍了LeetCode问题"三数之和"的高效解法。该问题要求在数组中找到所有不重复的三元组,使其元素之和为0。通过排序预处理(O(n log n))和双指针技巧(O(n²)),算法能够高效地解决问题。关键步骤包括:排序数组以方便去重,遍历固定第一个数后使用双指针寻找另外两个数,并在过程中跳过重复元素以保证结果唯一。最终的时间复杂度为O(n²),空间复杂度为O(1)(不考虑结果存储)。这种方法既避免了暴力枚举的高复杂度,又确保了结果的正确性和无重复性。
2025-08-06 08:34:16
688
原创 Linux 环境下 MySQL8.0 的三种安装与部署全面指南
本文详细介绍 Linux 环境下 MySQL8.0 的三种安装部署方案。手动安装涵盖卸载旧版本、下载解压安装包、创建用户与目录、配置文件初始化等完整流程;Shell 脚本方案通过自动化脚本实现一键部署,包含环境检测、解压配置、权限管理等功能;Docker 部署则介绍安装 Docker、拉取镜像、容器运行及相关操作命令。三种方案从基础到进阶,满足不同场景需求,提供清晰步骤与脚本代码,助力高效部署 MySQL8.0。
2025-08-05 15:18:50
1287
原创 【Leetcode hot 100】11.盛最多水的容器
摘要: 该问题要求在给定的整数数组中找到两条垂直线,使其与x轴构成的容器能容纳最多的水。采用双指针法,从数组两端开始向中间移动,每次计算当前容器的面积(由较矮的线高度和指针间距决定),并更新最大面积。移动较矮的一侧指针以寻找可能的更大高度。该方法时间复杂度为O(n),空间复杂度为O(1),适用于大规模数据。例如,输入[1,8,6,2,5,4,8,3,7]时,最大面积为49。
2025-08-05 08:32:46
287
原创 【Java源码阅读系列65】深度解读Java ClassLoader 源码
在Java的运行时体系中,ClassLoader(类加载器)是实现“动态类加载”的核心组件。它负责将类的字节码(.class文件)加载到JVM内存中,生成对应的Class对象,并确保类的唯一性与安全性。本文将基于JDK 8的ClassLoader源码,深入解析其设计逻辑与核心机制。
2025-08-04 09:10:54
665
原创 【Leetcode hot 100】283.移动零
题目要求将数组中的零元素移动到末尾,同时保持非零元素的相对顺序。采用双指针法:slow指针记录非零元素应放置的位置,fast指针遍历数组。遍历时,将非零元素依次前移,最后将剩余位置补零。时间复杂度O(n),空间复杂度O(1),满足原地操作要求。 示例: 输入[0,1,0,3,12],处理后为[1,3,12,0,0]。
2025-08-04 09:02:46
426
原创 【Leetcode hot 100】128.最长连续序列
本文介绍了如何高效求解未排序整数数组的最长连续序列问题,要求时间复杂度为O(n)。通过使用哈希集合存储元素,算法首先筛选出可能的序列起点(即前驱不存在的元素),然后向后扩展计算序列长度。每次遍历仅对序列起点处理,确保每个元素最多访问两次,从而满足线性时间复杂度要求。Java实现利用HashSet快速查询,逐步扩展连续序列并更新最大长度,最终返回结果。该方法避免了排序的高复杂度,适用于大规模数据。
2025-08-03 21:18:46
344
原创 【Java源码阅读系列64】深度解读Java PhantomReference 源码
在Java的引用体系中,PhantomReference(虚引用)是最特殊的一种引用类型。其核心特性是:无法通过虚引用获取目标对象,仅在对象被垃圾回收(GC)时触发队列通知。这种特性使其成为实现“对象销毁前最后一次资源清理”的关键工具(如释放本地内存、关闭文件句柄)。本文将基于JDK 8的PhantomReference源码,深入解析其设计逻辑与核心机制。
2025-08-03 14:46:15
1099
原创 【Leetcode hot 100】49.字母异位词分组
题目要求将字母异位词(字符相同但顺序不同的字符串)分组。提供两种解法: 排序法:将每个字符串排序后作为哈希表的键,时间复杂度O(n·k log k),代码简洁,推荐使用。 计数法:统计字符出现次数作为键,时间复杂度O(n·k),效率更高但实现稍复杂。 两种方法均通过哈希表实现分组,排序法更常用,计数法适合优化性能。示例代码展示了两种实现,适用于小写字母组成的字符串数组。
2025-08-02 23:02:10
766
原创 【Java源码阅读系列63】深度解读Java WeakReference 源码
在Java的引用体系中,WeakReference(弱引用)是一种“最弱”的显式引用类型。其核心特性是:当一个对象仅被弱引用指向时,垃圾回收器(GC)会立即回收该对象(无论内存是否充足)。这种特性使其成为避免内存泄漏、实现轻量级缓存的重要工具。本文将基于JDK 8的WeakReference源码,深入解析其设计逻辑与核心机制。
2025-08-02 15:59:54
723
原创 【Leetcode hot 100】1.两数之和
LeetCode两数之和问题要求在数组中找出和为目标的两个数的索引。推荐使用哈希表优化法(时间复杂度O(n)):遍历时计算互补数,利用哈希表快速查找是否存在互补数,避免重复计算。暴力枚举法(时间复杂度O(n²))虽直观但效率低,适合小数据量。哈希表法通过空间换时间,是更优解,尤其适合大数据量场景。两种方法均需注意避免元素重复使用,题目保证解唯一。
2025-08-01 16:02:22
376
原创 【Java源码阅读系列62】深度解读Java SoftReference 源码
在Java的引用体系中,SoftReference(软引用)是一种“内存敏感型”引用,其核心特性是:当内存不足时,垃圾回收器(GC)会主动回收被软引用指向的对象。这种特性使其成为实现缓存系统的重要工具(如图片缓存、临时数据存储)。本文将基于JDK 8的SoftReference源码,深入解析其设计逻辑与核心机制。
2025-08-01 10:49:39
763
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人