- 博客(43)
- 问答 (1)
- 收藏
- 关注
原创 JDBC编程
本文详细介绍了JDBC连接MySQL数据库的完整流程及优化方案:1) 基础流程包含驱动加载、建立连接、创建Statement、执行SQL、处理结果和资源关闭;2) 通过Maven配置国内镜像源提升依赖加载效率;3) 使用DataSource和连接池技术优化性能;4) 采用PreparedStatement防止SQL注入;5) 封装DBUtil工具类实现代码复用。文章以学生信息查询为例,演示了从基础实现到安全优化的完整演进过程,包括异常处理和资源释放的最佳实践。
2025-11-16 10:05:53
703
原创 MySQL中的“事务”
事务是数据库中将一组SQL操作打包执行的机制,确保要么全部成功,要么全部失败。它具有ACID四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。通过转账示例演示了事务的实际应用,包括开启事务(BEGIN/START TRANSACTION)、提交(COMMIT)和回滚(ROLLBACK)操作,并介绍了保存点(SAVEPOINT)的使用。此外,还探讨了MySQL的自动提交设置和四种事务隔离级别(读未提交、读已提交、可重复读、串
2025-10-14 20:42:08
678
原创 MySQL 中使用索引
MySQL索引创建与优化指南 索引会生成索引树,占用磁盘空间并影响增删改效率。MySQL自动为主键、外键和唯一约束创建索引,未指定约束时则自动为每列生成ROW_ID索引。手动创建索引包括主键索引、唯一索引和普通索引,可通过建表时指定、修改表结构或单独创建等方式实现。复合索引可指定多列组合。 使用SHOW INDEX或EXPLAIN可查看索引和执行计划,判断SQL是否走索引。优化建议:优先高频查询列建索引,避免过多索引影响性能,注意复合索引的最左前缀原则。索引覆盖(Extra列显示Using index)……
2025-09-24 21:32:13
1149
原创 MySQL中的“索引”
MySQL索引通过B+树实现高效查询,相比哈希和二叉搜索树,B+树支持范围查找且IO次数更少。InnoDB以16KB页为最小交互单元,利用局部性原理减少磁盘IO。B+树非叶节点存索引,叶节点存数据并形成链表,三层树高可支撑千万级数据。索引类型包括主键(聚集)、普通、唯一、全文索引等。主键索引推荐使用自增列,普通索引需选重复度低的列。组合索引遵循最左前缀原则,索引覆盖可避免回表查询提升性能。通过页目录实现页内二分查找,确保高效检索。
2025-09-23 20:52:47
909
原创 数据库——视图
视图是基于基本表的虚拟表,通过SELECT查询动态生成数据,不占用物理存储空间。创建视图使用CREATE VIEW语句,可简化复杂查询(如多表连接)。视图支持查询、更新等操作,修改视图数据会影响底层基表数据,但使用聚合函数、DISTINCT等的视图不可更新。视图优点包括简化查询逻辑、提高数据安全性(隐藏敏感字段)、增强数据独立性(表结构变更不影响应用层)以及支持列重命名。通过视图封装复杂SQL,可显著提升开发效率,但需注意部分视图类型不可更新的限制。
2025-09-08 21:47:41
1257
原创 数据库基础——联合查询
联合查询(表连接)用于从多个表中获取完整数据。MySQL通过笛卡尔积计算生成临时结果集,再通过连接条件过滤无效数据。主要类型包括内连接(返回匹配记录)、外连接(左/右连接返回一侧所有记录)和自连接(行转列比较)。此外还有子查询(嵌套查询)、合并查询(UNION去重)等操作。联合查询弥补了数据库范式设计导致的数据分散问题,是获取完整信息的必要手段。
2025-09-08 16:31:40
863
原创 数据库表设计
本文系统介绍了数据库范式和E-R图设计方法。首先详细讲解了数据库三大范式:第一范式要求字段原子性;第二范式消除部分依赖;第三范式消除传递依赖。接着阐述了数据库设计过程:从概念类到E-R图,再到SQL实现。最后重点分析了三种实体关系类型:一对一关系可合并表或外键关联;一对多关系通过外键实现;多对多关系需借助中间表。文章强调在实际应用中通常只需满足第三范式,并提供了各类关系的具体建表示例。
2025-09-07 15:09:02
806
原创 数据库基础知识——聚合函数、分组查询
本文介绍了SQL中常用的聚合函数和分组查询方法。主要内容包括:1)常用聚合函数count、sum、avg、max、min的使用场景和注意事项,如count(*)统计记录数、sum/avg仅适用于数值类型等;2)分组查询GROUP BY的语法和使用示例,包括按图书类型统计数量、计算平均价格等;3)HAVING子句与WHERE的区别,HAVING用于对分组结果进行过滤,如筛选平均价格在50-55之间的图书类型。文章通过实际数据库操作演示了这些功能的用法,帮助读者掌握数据统计和分析的基本SQL技巧。
2025-09-05 22:51:53
595
原创 数据库约束
数据库约束是确保数据准确性和可靠性的规则,包括非空约束(NOT NULL)、默认值(DEFAULT)、唯一约束(UNIQUE)、主键约束(PRIMARY KEY)和外键约束(FOREIGN KEY)。非空约束强制列不能为空,默认约束为列提供预设值,唯一约束确保列值不重复,主键约束(唯一且非空)用于标识记录,外键约束维护表间关联关系。主键可设为自增,外键要求从表数据须在主表中存在。删除主表记录前需先删除从表相关记录。这些约束共同保障了数据的完整性和一致性。
2025-09-02 17:05:33
628
原创 SQL语言增删改查CRUD
本文介绍了SQL四大基本操作(Create、Retrieve、Update、Delete)的详细使用方法。主要内容包括:1. 新增数据(INSERT)的三种方式;2. 查询数据(SELECT)的各种用法,包括条件查询、排序、分页等;3. 更新数据(UPDATE)的注意事项;4. 删除数据(DELETE)的风险提示。特别强调了在生产环境中使用全表查询和批量更新/删除时需谨慎,并提供了伪删除的替代方案。文章采用游戏闯关的形式,通过丰富的示例和锦囊提示,帮助读者掌握SQL基本操作的要领和注意事项。
2025-08-30 17:18:00
670
原创 SQL语言基础知识(2)
本文介绍了SQL数据库中的数据类型和表操作指令。数据类型包括整型、浮点型、字符串、二进制、日期以及枚举和集合类型,详细说明了各类型的大小、取值范围及对应Java类型。表操作指令包含创建表(CREATE TABLE)、查看表结构(DESC)、删除表(DROP TABLE)以及修改表(ALTER TABLE)的各种操作,如新增列、修改列属性、重命名列和表等。文章还建议复杂SQL操作使用可视化工具MySQL Workbench,并提供了建表示例和修改表的具体语法说明。
2025-08-28 16:00:56
966
原创 SQL语言基础知识(1)
本文介绍了MySQL的基础配置与操作知识。主要内容包括:1)MySQL配置文件my.ini的关键参数解析,如端口号、数据目录、存储引擎和字符集设置;2)客户端与服务器的C/S架构通信原理;3)关系型数据库概念;4)SQL语言分类(DDL、DML、DCL);5)数据库基本操作命令,包括查看、创建(含字符集设定)、选择和删除数据库等。特别强调了实际工作中的注意事项,如使用if not exists参数防止错误中断批量执行,以及数据库删除的安全规范。文章还提供了字符集查看、系统默认字符集查询等实用命令。
2025-08-27 13:39:54
790
原创 分析 HashMap 源码
HashMap核心实现分析:1)成员变量包含初始容量16、最大容量2³⁰、默认负载因子0.75、树化阈值(链表长度>8且数组长度>64)等;2)构造方法仅初始化参数,实际内存分配由put操作触发;3)putVal实现核心逻辑,处理哈希冲突、扩容及链表转红黑树;4)get方法通过哈希计算快速定位节点。重点提示:HashMap的懒加载机制和树化策略是面试高频考点,需掌握put/get的完整执行流程及扩容原理。
2025-08-23 20:18:58
365
原创 Java哈希表(HashTable,又称散列表)
哈希表是一种高效的数据结构,通过哈希函数将关键码映射到存储位置,实现O(1)时间复杂度的查找。文章详细介绍了哈希表的核心概念:哈希函数、哈希冲突(不同关键码映射到同一位置)、负载因子(元素个数/表长度,Java限制为0.75)及其调节方法。重点分析了两种解决冲突的方案:开放定址法(线性探测和二次探测)和链地址法(数组+链表)。文章还提供了哈希表的Java实现代码,包括插入、扩容、查找等操作,并讨论了性能分析和与Java集合类的关系。最后通过多个实际案例(如统计词频、找单身狗、复制链表等)展示了哈希表的应用。
2025-08-22 11:23:11
937
原创 Map 和 Set
本文介绍了Java集合框架中Map和Set的核心内容。重点讲解了二叉搜索树的概念、基本操作(搜索、插入、删除)及其性能分析,阐述了TreeMap/TreeSet基于红黑树的实现原理。详细对比了TreeMap与HashMap、TreeSet与HashSet在底层结构、时间复杂度、有序性等方面的区别。同时说明了Map和Set在键值对存储、去重等方面的特性差异,并提供了实际使用示例。文章强调掌握哈希表原理的重要性,为后续学习HashMap和HashSet的实现打下基础。
2025-08-20 16:36:45
698
原创 Java算法之排序
本文系统介绍了七大基于比较的排序算法,包括插入排序(直接插入和希尔排序)、选择排序(直接选择和堆排序)、交换排序(冒泡和快速排序)以及归并排序。重点分析了快速排序和堆排序的实现原理,详细讲解了快速排序的三种分割方法(Hoare法、挖坑法和前后指针法)及其优化策略(三数取中法和减少递归深度)。文章还探讨了归并排序的递归和非递归实现,并对各种算法从稳定性、时间复杂度和空间复杂度三个维度进行了性能比较。最后简要介绍了非基于比较的计数排序及其适用场景。排序算法的选择需根据具体数据特征和应用场景。
2025-08-19 10:09:07
622
原创 Java集合中的优先级队列(堆)
本文介绍了优先级队列(PriorityQueue)的实现原理及其应用。优先级队列基于堆数据结构实现,堆是一种特殊的完全二叉树,分为大根堆和小根堆。文章详细讲解了堆的存储方式、模拟实现过程(包括建堆、插入和删除操作),分析了时间复杂度。在Java中,PriorityQueue默认实现小根堆,可通过Comparator实现大根堆。最后探讨了Top-K问题的解决方案,比较了不同方法的时间复杂度。文章还包含PriorityQueue的源码分析,包括成员变量、构造方法和扩容机制等核心内容。
2025-08-16 09:30:16
827
原创 Java集合中的栈 Stack 和队列 Queue
本文介绍了栈和队列的基本概念、实现方式及应用场景。栈是一种先进后出的线性结构,可通过数组或链表实现;队列是先进先出结构,可通过链表或循环数组实现。文章详细阐述了栈的数组模拟实现(包含判空、判满、入栈出栈等操作),并展示了栈在括号匹配、逆波兰表达式等场景的应用。同时讲解了循环队列的实现逻辑,以及如何使用双队列模拟栈和双栈模拟队列的面试题解法。最后区分了栈数据结构与JVM中虚拟机栈的概念差异。
2025-08-11 14:33:56
669
原创 Java集合中的 LinkedList
本文探讨了双向不带头链表(LinkedList)的实现与应用。与单向链表相比,双向链表通过prev引用可回溯前驱节点,提高了操作效率。文章详细介绍了LinkedList的模拟实现方法,包括节点定义、增删改查等核心操作,特别强调了删除节点时的边界处理。并将 LinkedList 与 ArrayList在不同的情况下进行比较。
2025-08-10 15:31:29
511
原创 Java集合中的链表
本文详细介绍了Java中LinkedList的实现原理及其应用。首先分析了ArrayList在插入删除操作上的效率问题,引出链表结构的必要性。文章详细讲解了单向链表的基本概念、8种链表结构分类,以及不带头单向链表的具体实现,包括节点定义、接口设计和基本操作方法(增删改查)。重点说明了头插法、尾插法和任意位置插入的实现细节与注意事项。最后提供了9个链表相关的经典面试题及其解决方案,包括链表反转、中间节点查找、回文判断、环检测等。
2025-08-08 22:01:10
1106
原创 List、ArrayList 与顺序表
本文详细介绍了Java中List接口及其实现类ArrayList的相关知识。主要内容包括:1. List接口的定义与继承关系,以及ArrayList和LinkedList的实现特点;2. 线性表的数据结构特性及存储方式;3. 通过自定义MyArrayList类实现顺序表的基本操作(增删查改等);4. 深入分析ArrayList的源码实现,包括成员变量、构造方法、常用方法和遍历方式;5. 实际应用案例(字符串处理、杨辉三角、扑克牌游戏)展示了ArrayList的使用场景;6. 探讨了ArrayList的优缺点
2025-08-06 22:57:18
771
原创 Java实现的数据结构基础
本文介绍了Java数据结构学习的预备知识,主要包括集合框架、算法效率分析和泛型等内容。集合框架是Java对数据结构的封装,包含List、Set、Map等接口及其实现类。算法效率分析重点讲解了时间复杂度和空间复杂度的大O表示法。泛型部分阐述了泛型类的定义和使用,包括类型擦除机制和泛型上界的概念。此外还介绍了包装类的装箱拆箱操作及其底层实现原理。这些知识为后续数据结构学习奠定了重要基础,帮助理解Java集合类的实现原理和使用方式。
2025-08-05 07:31:54
942
原创 Java中的字符串 - String 类
本文详细介绍了Java中String类的使用方法和特性。主要内容包括:1. String的三种构造方式及其内部存储结构;2. 常用字符串操作方法,如拼接、比较、查找、转化、替换、拆分等;3. String的不可变性设计及其优势;4. StringBuilder和StringBuffer的使用场景及区别;5. 字符串处理的高效方法,推荐使用StringBuilder替代直接拼接;6. 常见面试题和练习题解析,包括字符串反转、回文判断、单词统计等。
2025-08-02 16:52:03
616
原创 Java基础——实现图书管理系统交互功能
本文介绍了一个基于JavaSE的图书管理系统实现方案。系统采用面向对象编程思想,分为图书类(Book)、书架类(BookList)、用户类(User)三个核心模块。用户分为管理员和普通用户,通过继承User抽象类实现不同权限管理。系统功能包括查找、新增、删除、借阅、归还图书等操作,通过接口(IOperation)实现多态调用。文章详细阐述了类的设计思路、继承关系、接口实现以及具体的业务逻辑。该系统充分运用了封装、继承、多态等面向对象特性,是Java基础知识的综合应用案例。
2025-08-02 08:35:40
752
原创 Java接口、Object类、内部类
本文主要讲解Java中的接口概念以及如何实现并列举了几个常用的接口示例,如 Comparable 和 Comparator 用来比较大小,而 Cloneable 接口用来拷贝对象,拷贝又分浅拷贝和深拷贝的重要知识点。本文还注重讲解接口的特性与注意事项;此外还讲到了所有类的父类 Object 类下的一些方法,如 toString、equals、hashcode方法;并提及到内部类的定义与使用,其中匿名内部类的理解需要接口的知识。
2025-07-30 14:33:00
1279
原创 Java语言中的数组
本文系统介绍了Java数组的核心概念和使用方法。主要内容包括:1)数组的定义和内存结构,强调数组是引用类型;2)数组的创建与初始化方式(动态/静态);3)数组元素访问与遍历方法;4)引用类型特性及null值处理;5)数组作为方法参数和返回值的应用;6)常见数组操作(查找、排序、拷贝等);7)二维数组的定义和使用。文章通过代码示例详细演示了数组的各种操作,并强调了使用时的注意事项,如下标越界的问题。
2025-07-30 10:13:45
786
原创 Java中的抽象类& abstract 关键字
本文介绍了抽象类的概念与应用。抽象类通过abstract关键字修饰,不能实例化但可包含抽象方法和普通方法。抽象类必须被继承,子类需重写所有抽象方法。本文以图形类为例,说明抽象类的作用是提供继承基础和多态支持,同时通过编译器强制检查抽象方法实现。还讨论了多层继承中抽象类的使用规则,以及匿名对象在抽象类应用中的特点与局限。抽象类在面向对象编程中扮演着重要角色,既规范了类的设计,又实现了代码复用和多态特性。
2025-07-24 20:04:13
1065
原创 面向对象三大特征之一,多态
本文系统介绍了Java多态的核心概念与实现方式。主要内容包括:1.多态的定义:不同对象执行同一行为产生不同状态;2.实现条件:继承体系、方法重写、父类引用调用重写方法;3.向上转型的三种方式(直接赋值、方法传参、返回值);4.方法重写的规则与动态绑定机制;5.多态的优势:降低圈复杂度(替代大量if-else)、增强可扩展性;6.关键概念区分:重写与重载、静态与动态绑定、向上与向下转型。通过形状绘制的典型案例,展示了多态如何使代码更简洁灵活,并详解了方法调用时的绑定机制和转型注意事项。
2025-07-24 09:41:45
779
原创 面向对象三大特征之一,继承
本文主要通过讲解子类继承父类的使用方法,深入讲解了 super 和 this 两个关键字以及代码块执行顺序、访问修饰符的权限等知识,以下是提取的一些重点知识:1、继承是为了实现代码的复用;2、子类继承父类使用 extends 关键字;3、子类访问遵循就近原则;4、子类继承了父类之后,Java各自为子类和父类提供了默认的构造方法;一旦父类定义了构造方法,子类就必须也创建类似的构造方法;5、根据先有父再有子的原则,实例化子类时,先加载父类构造方法,再加载子类的构造方法……
2025-07-20 09:01:51
798
原创 Java访问修饰符、静态成员变量与静态方法、代码块
本文总结了Java中四种访问修饰符(public、protected、default、private)的使用规则,重点讲解了封装特性及其实现方式。详细分析了static关键字修饰成员变量和方法的特点,包括静态成员的访问方式和初始化方式。通过实例代码演示了静态代码块、实例代码块和构造方法的执行顺序:静态代码块在类加载时执行且只执行一次,实例代码块在每次实例化对象时都会执行,构造方法最后执行。
2025-07-16 15:34:31
978
原创 Java中的类和对象
本文介绍了面向对象编程的核心概念,主要包含以下内容:1. 类与对象的定义与实例化,通过类模板创建具体对象;2. 类成员变量和方法的访问方式;3. this关键字的用法,解决变量命名冲突并代表当前对象;4. 构造方法的特点与使用,包括无参构造、带参构造和方法重载;5. 通过this()调用其他构造方法的方式。文章通过冰淇淋类等实例,演示了如何定义类、创建对象并进行交互,同时对比了面向过程与面向对象编程的区别。
2025-07-15 17:37:31
502
原创 C语言自定义函数与Java方法
C语言函数和Java语言方法在语法形式、形参与实参、return 返回值等形同与相似的讲解。嵌套使用的对象只能是C语言中的函数,Java是不支持嵌套使用的。C语言在调用函数时,要先声明再调用,多个文件中则要包含头文件;Java没有声明方法这一说,也不关心方法的顺序。Java有特殊的方法重载和方法签名概念。
2025-07-15 15:58:16
1069
原创 C语言转Java,相同与相异之处
本文对比了C语言和Java在基础语法上的主要差异。主要包括主程序入口、注释、数据类型、变量、常量、类型转换、输入输出等内容。
2025-07-15 09:32:01
1206
原创 自定义类型——结构体
文章系统介绍了C语言中结构体的关键知识点,包括结构体的创建与初始化、自引用、内存对齐规则、传参方式和位段实现。重点讲解了结构体内存对齐的原理(通过偏移量计算和平台性能考虑)以及位段的内存分配特性。
2025-06-10 15:44:06
1735
原创 整数、浮点数在内存中的存储方式
保姆级解释整型和浮点型数据在内存中的存储方式,还涉及到进制转换、整型提升、占位符、有无符号字符类型取值范围等一些知识。
2025-06-04 16:27:12
1596
原创 C语言内存函数
本文详细讲解了C语言中四种内存操作函数:memcpy、memmove、memset和memcmp。memcpy用于内存块拷贝,不处理重叠区域;memmove功能类似但可处理重叠内存;memset以字节为单位设置内存内容;memcmp比较两块内存内容。文章从语法形式、使用示例到模拟实现三个层次展开……
2025-06-01 10:29:37
2071
原创 C语言中操作字符串的函数
文章详细介绍了C语言中常用的字符串处理函数(strlen/strcpy/strcat/strcmp等),重点解析了各函数的功能、参数、返回值及使用注意事项。通过代码示例演示了标准库函数的正确用法,并提供了strlen、strcpy、strcat、strcmp等函数的模拟实现方案。特别强调了字符串处理中的关键点:必须以'\0'结尾、目标空间足够大且可修改、无符号返回值可能导致的比较陷阱……
2025-05-31 22:54:44
928
原创 C语言指针pointer基础知识
简单来说,一个指针是计算机内存这家酒店中某一间房间的门牌号,使用"*"解引用符号这把钥匙就能打开那个房间,找到储存在那个房间里面的数据。指针变量包括指针变量名及其类型,不同类型的指针变量大小都相同,只是对其进行+-运算时跳过的字节数不一样。对于数组,指针的重点其实是数组名表示的意思,通常是指首元素的地址(即 arr == &arr[0];),但有两个特例是表示整个数组:&arr 和 sizeof(arr)。
2025-05-25 20:12:56
883
原创 C语言中sizeof、strlen介绍
区分 sizeof() 和 strlen() 使用对象和场景。sizeof 主要用于计算数据类型长度,strlen 主要用于计算字符串长度。
2025-05-04 17:28:52
956
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅