自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 排序知识总结

本文主要讲解了几种常见的排序算法并用代码实现了算法

2025-08-08 12:54:17 897

原创 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

原创 Java中String类

本文主要是对常见的String类方法进行总结并使用

2025-06-27 12:13:25 982

原创 Java实现简单的图书管理系统

本文利用已经学到的javase语法搭建了一个简单的图书管理系统

2025-06-25 12:53:35 1257

原创 用接口实现克隆

通过画图,代码等多种形式解释了用接口实现克隆的原理,以及克隆是如何实现浅拷贝和

2025-06-23 21:24:39 464

原创 抽象类和接口

本文主要总结了javase中抽象类和接口的相关基础知识点

2025-06-23 20:39:50 748

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除