- 博客(51)
- 收藏
- 关注
原创 分治算法-快排
本文介绍了快速排序算法及其应用。快速排序是一种基于分治思想的排序算法,通过选择基准元素将数组分为三部分进行递归排序。文章详细分析了算法的时间复杂度(最优O(logN),最差O(n^2))和空间复杂度(最优O(logN),最差O(N)),并提出了三数取中法和直接插入法等优化策略。随后通过四个典型题目展示了快速排序的应用:颜色分类(三指针法)、数组排序(归并排序实现)、寻找第K大元素(快速选择)和最小K个数(快速选择)。每种解法都给出了详细的算法原理和Java代码实现,展示了快速排序在解决实际问题中的灵活运用。
2025-12-20 22:21:09
298
原创 算法--模拟算法
本文介绍了五种常见的字符串模拟算法题解:1.替换字符串中的问号字符,确保不出现连续重复字符;2.计算提莫攻击的中毒总时长;3.实现字符串的Z字形变换;4.生成外观数列的第n项描述;5.判断青蛙鸣叫字符串的有效性并计算最少青蛙数量。每个问题都分析了算法原理和实现要点,通过模拟字符串处理流程和边界条件处理,将问题转化为代码实现。这些题目考察了字符串遍历、双指针、状态模拟等基础算法能力。
2025-12-18 19:59:57
443
原创 多线程进阶
本文总结了常见的锁策略及其应用场景。主要内容包括:1.悲观锁与乐观锁的区别;2.重量级锁与轻量级锁的特性;3.挂起等待锁与自旋锁的实现方式;4.读写锁在多线程环境下的优势;5.可重入锁与不可重入锁的区别;6.公平锁与非公平锁的调度机制。文章还详细介绍了synchronized的优化策略(锁升级、锁消除、锁粗化)和CAS操作的原理及应用,包括原子类和自旋锁的实现。最后对比了synchronized与ReentrantLock的差异,并介绍了信号量、CountDownLatch等并发工具类,以及多线程环境下Ar
2025-12-18 14:26:40
848
原创 初始网络原理
本文概述了计算机网络的基础知识和发展历程。从网络发展的四个阶段(单机、局域网、广域网、移动互联网)出发,介绍了组建网络的核心设备(路由器和交换机)。重点阐述了网络通信的五元组要素(源/目的IP、端口号、协议类型)和协议分层的必要性,对比了OSI七层模型与TCP/IP五层模型。详细说明了数据在网络各层的封装传输过程(应用层→传输层→网络层→数据链路层→物理层)及接收时的反向解析流程。最后指出了不同网络设备(主机、交换机、路由器等)在各层的工作范围,以及数据在各层间的转换机制。
2025-12-11 21:27:42
711
原创 多线程(三)
本文介绍了三种重要的Java并发编程组件:单例模式、阻塞队列和线程池。单例模式通过饿汉式和懒汉式实现线程安全,重点分析了懒汉式的双重检查锁定和volatile优化。阻塞队列实现了生产者消费者模型,解决了线程安全与阻塞问题,并演示了自定义实现。线程池通过预创建线程提高效率,详细解析了ThreadPoolExecutor的核心参数及拒绝策略,并给出了简化实现。文章还简要介绍了定时器的原理与实现。这些组件通过解耦、削峰填谷等机制,有效提升了多线程程序的性能和可靠性。
2025-12-06 16:54:42
709
原创 算法--位运算
本文总结了常见的位运算原理及其应用。基础位运算包括左移、右移、按位取反、与或非等操作。重点介绍了位图思想在哈希表优化中的应用,以及提取/删除最右侧1的方法。通过5道LeetCode题目展示了位运算的实际应用:判断字符唯一性(位图优化)、寻找缺失数字(异或运算)、两数之和(无进位相加)、只出现一次数字(位统计)和消失的两个数(分类异或)。这些题目展示了位运算在节省空间、提高效率方面的优势,为解决算法问题提供了新的思路。
2025-11-30 20:35:27
821
原创 多线程(二)
本文摘要:文章主要探讨了Java线程状态及其安全问题。首先介绍了线程的6种状态(NEW、RUNNABLE、BLOCKED等)及其转换关系,指出理解线程状态有助于排查BUG。然后分析了线程安全问题的根源:操作系统随机调度、多线程共享变量、非原子操作等。重点讲解了synchronized锁机制及其特性(互斥、可重入),并详细说明了死锁产生的4个必要条件及预防方法。最后讨论了内存可见性问题及volatile解决方案,以及wait/notify的线程协作机制。全文系统性地阐述了Java多线程编程中的核心概念和常见问
2025-11-23 21:33:25
545
原创 存储过程和触发器
本文系统介绍了MySQL中的存储过程、变量、SQL编程和触发器四大核心概念。存储过程部分详细讲解了其定义、优缺点、创建调用语法;变量部分区分了系统变量、用户自定义变量和局部变量;SQL编程部分涵盖了条件判断、参数传递、循环控制等编程结构;触发器部分阐述了其工作原理和语法规范。全文通过大量示例代码,全面展示了MySQL数据库编程的核心技术,为开发高效、安全的数据库应用提供了实用指导。
2025-11-22 20:01:14
871
原创 算法--前缀和
本文系统介绍了前缀和算法及其应用。前缀和通过预处理辅助数组将区间求和操作优化至O(1)时间复杂度,适用于一维和二维数组。文章详细解析了8个典型题目,包括一维/二维前缀和模板、中心下标查找、除自身乘积、和为k的子数组、可被k整除子数组、二进制连续数组及矩阵区域和问题。每个题目提供暴力解法和前缀和优化解法,重点阐述了算法原理和实现细节,如哈希表优化、同余定理应用等。通过预处理+查询分离的思想,前缀和算法能高效解决多种区间统计问题,是算法竞赛和面试中的重要技巧。
2025-11-20 21:00:55
626
原创 多线程(一)
本文介绍了线程的基本概念及其在Java中的使用方法。首先阐述了线程与进程的关系,强调线程是轻量级进程,是CPU调度的基本单位。随后详细讲解了5种创建线程的方式:继承Thread类、实现Runnable接口、使用匿名内部类、结合匿名内部类和Runnable、以及使用lambda函数推荐的最佳实践。文章还深入探讨了Thread类的关键属性和方法,包括ID获取、线程状态、优先级设置、守护线程判断等。重点讲解了线程中断的两种方式:自定义标志位和使用isInterrupted()方法,以及线程等待的join()方法。
2025-11-08 21:50:10
662
原创 算法--二分查找(二)
本文探讨了二分查找算法的原理与应用。二分查找虽细节复杂但理解本质后十分有效,重点讲解了三种模板:朴素二分、查找左边界和右边界。通过四个LeetCode例题(山脉数组峰顶、寻找峰值、旋转数组最小值和缺失数字)展示具体应用,并比较了暴力枚举、位运算、高斯公式等多种解法,重点分析了利用数组二段性进行二分优化的方法。每种题型均附有代码实现,展示了二分查找在不同场景下的灵活应用。
2025-11-04 20:54:54
676
原创 算法--二分查找
1.二分算法的特点:与其他算法相比,在未了解本质的情况下是最恶心、细节最多、最容易写出死循环的算法,但当我们了解了二分算法的本质后,他将变得十分轻松2.学习的侧重点 1.算法原理(***很重要) 2.模版 1.朴素的二分模版 十分简单,我们之前就有接触过,有限制 2.查找左边界的二分模版 2,3细节多,适用范围广 3.查找右边界的二分模版https://leetcode.cn/probl
2025-11-03 21:18:02
704
原创 事务&&视图的知识总结
摘要 事务是数据库中将一组SQL操作打包执行的机制,具有ACID特性(原子性、隔离性、一致性、持久性),确保数据完整性和安全性。MySQL通过START TRANSACTION开始事务,COMMIT提交或ROLLBACK回滚。事务隔离级别包括读未提交、读已提交、可重复读和串行化,解决脏读、不可重复读和幻读问题。视图是基于基础表的虚拟表,可通过CREATE VIEW创建,支持查询但部分视图不可更新。事务和视图共同保障了数据库操作的安全性和灵活性。
2025-11-02 20:07:32
663
原创 索引的知识总结
MySQL索引是一种优化查询性能的数据结构,主要包括B+树索引结构。索引类型分为主键索引、唯一索引、普通索引等,通过减少磁盘IO提高查询效率。B+树因其平衡性和支持范围查询的特性成为MySQL主要索引结构。索引存储在16KB的页中,是内存与磁盘交互的最小单元。创建索引可通过建表时指定或后期修改,但需注意索引会占用额外空间。通过执行计划(EXPLAIN)可以分析SQL是否使用索引。索引覆盖能避免回表查询,进一步提升性能。
2025-11-01 20:44:44
889
原创 算法--滑动窗口(二)
本文介绍了滑动窗口算法及其在LeetCode题目中的应用。主要内容包括:1)算法原理:通过维护左右指针的窗口结构,避免重复计算,实现O(n)时间复杂度;2)四个典型应用:水果成篮问题(寻找包含两种元素的最长子数组)、字母异位词查找、串联所有单词的子串、最小覆盖子串;3)每种问题的解题思路和优化方法,包括哈希表的使用和count变量的引入;4)对应的Java代码实现,展示如何将算法思想转化为具体代码。这些案例展示了滑动窗口在处理子串/子数组问题中的高效性和通用性。
2025-10-28 20:45:10
1047
原创 计算机是如何工作的
计算机主要由CPU、主板、内存、硬盘等核心部件构成。CPU作为中央处理器,其性能和核心数直接影响计算能力。操作系统通过进程管理实现资源分配,采用并发和并行方式调度多个进程。进程运行涉及指令执行、内存管理和文件操作等关键环节,操作系统通过进程控制块(PCB)记录进程状态、优先级和上下文信息,确保系统高效稳定运行。
2025-10-26 16:04:25
866
原创 算法--滑动窗口(一)
本文介绍了滑动窗口算法及其在四类问题中的应用。该算法通过维护动态窗口[left,right]来优化时间复杂度至O(N),避免重复计算。具体应用包括:1)寻找和≥target的最短子数组;2)求无重复字符的最长子串;3)计算最多翻转k个0后的最长连续1序列;4)将x减到0的最小操作数问题。每个问题均给出暴力解法和滑动窗口优化方案,并附Java代码实现,展示了如何通过同向移动双指针来高效解决问题。
2025-10-26 14:33:11
583
原创 算法--双指针二
本文介绍了双指针算法在多个LeetCode题目中的应用。双指针主要包括对撞指针和快慢指针两种形式,适用于有序数组和链表结构。文章详细解析了四道经典题目:有效三角形个数、和为s的两个数、三数之和、四数之和,分别展示了如何利用双指针优化解法。通过排序预处理和双指针配合,时间复杂度从O(n³)或O(n⁴)降低到O(n²)或O(n³)。重点强调了去重处理和边界条件控制,并提供了完整的Java代码实现。这些算法技巧能有效解决多数字组合问题。
2025-10-16 22:13:23
1000
原创 算法---双指针一
双指针算法应用 双指针算法包括对撞指针和快慢指针两种形式: 移动零问题:使用双指针保持非零元素相对位置,将零移到数组末尾 复写零问题:先找到最后一个需要复写的数,再从右向左完成复写操作 快乐数问题:通过快慢指针判断是否存在循环 盛水容器问题:利用对撞指针计算最大盛水量,每次移动较矮的指针 这些算法展示了双指针在数组处理、循环检测和最优解求取中的高效应用,时间复杂度通常为O(n)。
2025-10-14 20:56:53
956
原创 红黑树(RBTree)知识总结
红黑树是一种自平衡二叉搜索树,通过着色规则确保近似平衡。其特性包括:根节点为黑色、无连续红节点、所有路径黑节点数相同。插入时默认新增红节点并通过旋转和变色调整,保持O(logN)时间复杂度。相比AVL树,红黑树不追求绝对平衡,插入和旋转次数更少。应用广泛,如Java的TreeSet/TreeMap和C++的STL库。验证时需检查根节点颜色、无连续红节点和各路径黑节点数一致性。
2025-09-15 21:43:27
341
原创 AVL树知识总结
AVL树是一种高度平衡的二叉搜索树,其特点是左右子树高度差不超过1,保证O(logN)的查找效率。本文介绍了AVL树的实现,包括节点结构定义、插入操作时的平衡调整(四种旋转方式:左旋、右旋、LR旋转、RL旋转)以及平衡因子更新机制。还提供了验证树是否平衡的方法,通过递归检查各子树高度差和平衡因子。AVL树通过旋转操作维持平衡,适合查找密集型场景,但插入删除操作较复杂,更适合静态数据集。
2025-09-14 21:24:43
302
原创 位图&&布隆过滤器&&海量数据
摘要:位图是一种高效处理海量无符号整数查询的数据结构,通过位数组实现快速查找、去重和集合运算。布隆过滤器则结合哈希与位图,适用于概率型数据检测,但存在误判可能。文章讨论了位图的实现原理(如MyBitSet类)及其应用场景(排序、查重、集合运算),并介绍了布隆过滤器的实现方式(MyBloomFilter类)。最后针对海量数据处理问题,提出了哈希切割与位图结合的解决方案,如统计IP出现频率和查找只出现一次的整数。这些方法在内存受限情况下高效处理大数据问题。
2025-09-10 19:40:55
428
原创 聚合查询&&联合查询&&子查询
文章摘要:聚合查询是针对数据表行间运算的查询方式,主要包括count()、sum()、avg()、min()/max()等函数。分组查询使用GROUP BY子句,配合HAVING对分组结果过滤。联合查询通过多表连接(内连接/外连接)获取完整业务数据,需经过笛卡尔积、连接条件过滤等步骤。自连接可实现行转列功能,子查询则通过嵌套SQL语句实现复杂查询条件,包括单行子查询、多行子查询和EXISTS子查询等形式。
2025-09-09 20:54:30
958
原创 数据库约束&&表的设计
文章摘要:数据库约束是保证数据完整性的重要机制,主要包括NOT NULL(非空)、UNIQUE(唯一)、DEFAULT(默认)、PRIMARY KEY(主键)、FOREIGN KEY(外键)和CHECK(检查)六种类型。数据库设计需遵循三大范式:1NF要求字段不可再拆分;2NF消除非关键字段对候选键的部分依赖;3NF消除传递依赖。实体间关系分为一对一、一对多和多对多三种,需根据关系类型设计表结构,确保数据的一致性和正确性。
2025-09-08 21:58:09
956
原创 MYSQL表的增删改查
本文介绍了SQL数据库的基本操作,包括数据新增、查询、修改和删除。新增数据时,单条和多条插入的效率对比;查询操作涵盖全列查询、指定列查询、表达式计算、别名、去重、排序和条件查询等技巧;修改和删除数据时强调了不加条件的危险性。文章特别指出生产环境中全列查询和大批量删除的风险,建议使用标记删除替代物理删除。同时详细说明了NULL值的特殊处理、模糊匹配和分页查询等实用功能,为数据库操作提供了全面的指导。
2025-08-31 14:55:05
807
原创 数据库的操作
本文介绍了MySQL数据库的基本操作,包括查看、创建、选择和删除数据库的方法。详细说明了创建数据库时的字符集设置(推荐8.0版本使用utf8mb4字符集)和注意事项,如关键字命名需使用反引号。文章还列举了常见的数据类型,包括数值类型(如INT、DECIMAL)、字符串类型(VARCHAR、TEXT)和日期类型(TIMESTAMP、DATETIME)。最后讲解了表的创建、查看和删除操作,强调删除操作需谨慎。文中多次提醒数据库操作的风险,建议定期备份数据。
2025-08-30 21:31:27
710
原创 数据库基本知识
MySQL是一种关系型数据库管理系统,用于组织和持久化存储数据。数据库通过特定数据结构管理数据,与内存存储不同,它能将数据保存在磁盘中实现持久化。常见关系型数据库包括MySQL(最常用)、SQLite、Oracle等;非关系型数据库有Redis、MongoDB等。操作数据库需使用SQL语言,分为DDL(定义数据结构)、DML(操作数据)和DCL(权限管理)三类。客户端可通过终端或图形化工具(如Navicat)与数据库服务交互,采用CS架构通过网络通信。
2025-08-30 11:39:11
448
原创 哈希表知识总结
本文介绍了哈希函数的基本概念及其实现方法。哈希函数通过建立关键码与存储位置的映射关系,实现高效查找。文章分析了哈希冲突的必然性,并提出了两种解决方案:负载因子调节和冲突处理(闭散列和开散列)。重点讲解了链地址法(开散列)的实现原理,包括哈希桶的模拟实现和扩容机制。最后指出哈希表的时间复杂度为O(1),并介绍了Java中HashMap和HashSet的实现方式,强调必须重写hashCode和equals方法。
2025-08-21 19:27:59
806
原创 TreeMap和TreeSet知识总结
摘要:本文介绍了二叉搜索树的基本概念及其实现方法。二叉搜索树的特点是左子树节点值小于根节点,右子树节点值大于根节点。重点讲解了插入和删除操作的实现逻辑,包括时间复杂度分析(最优O(logN),最坏O(N))。同时介绍了Java中基于搜索树的TreeMap和TreeSet实现,对比了它们的特性差异,包括底层结构、时间复杂度、有序性等。在集合类部分,详细说明了Map和Set接口的使用方法、注意事项及适用场景,特别强调了TreeMap/HashMap和TreeSet/HashSet在实现和应用上的关键区别。
2025-08-15 12:04:52
872
原创 PriorityQueue和Java对象的比较
本文介绍了优先级队列和堆的基本概念。优先级队列支持返回最高优先级对象和添加新对象操作,底层使用堆结构实现。堆分为大根堆和小根堆,采用数组顺序存储。详细讲解了堆的创建、插入、删除等操作的核心代码实现,包括shiftDown和shiftUp调整方法。文章还探讨了堆的三个主要应用:优先级队列模拟、堆排序(时间复杂度O(NlogN))和Top-K问题解法。最后介绍了Java中PriorityQueue的特性,包括默认小根堆、线程不安全、插入删除O(logN)复杂度等特点,以及通过比较器实现大小根堆转换的方法。
2025-08-06 09:18:19
414
原创 二叉树的基础知识
摘要:树形结构是一种非线性数据结构,具有递归特性,包含根节点、子节点等概念。二叉树是重要特例,分为满二叉树和完全二叉树,具有结点数、叶子数等性质。存储方式包括顺序和链式,遍历方法有前序、中序、后序和层序四种。文章详细介绍了计算结点数、叶子数、高度等常见操作的实现方法,以及判断树相同、构建二叉树等高级操作,涵盖了二叉树核心知识点和算法实现。
2025-08-05 16:41:32
624
原创 顺序表和链表
摘要:本文介绍了顺序表和链表的基本概念与实现。顺序表是基于数组的线性结构,实现包括增删查改等操作,支持动态扩容。链表分为单向/双向等类型,重点实现了无头单向非循环链表的基本操作。文章还对比了ArrayList和LinkedList的特点:ArrayList查询快但增删慢,基于数组;LinkedList增删快但查询慢,基于双向链表。最后介绍了两种数据结构在Java中的实际应用,包括构造方法、遍历方式等。
2025-08-02 13:31:21
444
原创 栈和队列相关知识
本文介绍了栈和队列的基本概念及实现方法。栈是一种先进后出的数据结构,可用数组或链表实现,主要操作包括push、pop和peek。队列是先进先出的线性表,支持offer、poll和peek操作,可通过单链表、双向链表或循环数组实现。文章还探讨了循环队列空满判断方法,以及如何使用队列实现栈和用栈实现队列的相互转换技巧。提供了Java代码示例,包括MyStack、MyQueue、MyCircularQueue等类的实现,展示了数据结构的基本操作和特殊情况的处理方式。
2025-08-02 12:08:30
404
原创 数据结构基础知识
本文介绍了Java集合框架和数据结构的基础概念。主要内容包括:1)集合框架是Java实现的数据结构类;2)数据结构与数据库的区别;3)时间和空间复杂度分析,重点讲解大O表示法;4)包装类的装箱拆箱机制及自动装箱陷阱;5)泛型的基本概念、语法和使用方式,包括类型擦除和泛型上界。文章通过代码示例说明了包装类在-128到127范围内的特殊处理机制,并解释了泛型在编译期的类型检查机制。
2025-07-29 16:51:58
343
原创 Java基础之异常
本文介绍了Java异常处理机制,主要包括异常的概念、常见异常类型(算数异常、数组越界、空指针异常等)以及两种异常处理方式(防御式编程和事后认错型)。重点讲解了异常处理的五个关键词(throw、try、catch、finally、throws)的使用方法,并通过示例说明了如何自定义异常类来满足实际开发需求。文章还特别强调了异常处理流程中的注意事项,如try-catch块的执行顺序、finally块的作用等,最后通过一个登录验证的案例展示了自定义异常的具体应用。
2025-06-30 18:46:49
427
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅