- 博客(98)
- 收藏
- 关注
原创 MySQL数据库基础——用户和权限管理&JDBC
之前学的都是操作数据库的技术——SQL,那实际的业务是由Java程序来处理的,所以该怎么使用程序来操作数据库呢?JDBC (Java Data Base Connectivity——Java数据库连接)是Java程序和数据库之间的桥梁,包含了一套Java定义的用于执行SQL语句的接口,使开发者能够编写数据库的程序。JDBC的主要作用是:与数据库建立连接、发送SQL语句、处理数据库执行结果。正常来说访问数据库需要经过5和步骤:确定数据库服务器的地址、端口号——确定数据源。
2026-10-16 15:48:18
185
1
原创 MySQL数据库基础——事务
事务把一组SQL语句打包成为一个整体,在这组SQL的执行过程中,执行结果只有两种:要么全部成功,要么全部失败。这组SQL语句可以是一条也可以是多条。来看一个转账的例子,如图:这个过程包含两个步骤(两个SQL语句),张三的余额减100、李四的余额加100,两个SQL语句执行完之后不能出现张三扣了100,但李四+100的SQL语句却执行失败了这样的情况,所以我们把这两个SQL语句打包为一个事务,使业务保持数据的完整性和安全性。
2026-10-13 22:38:00
146
原创 MySQL数据库基础——索引的使用&alter、explain关键字
explain 放在 select 查询语句前面,用来查看一条查询语句的执行计划,看 MySQL 有没有用上索引。创建语法与创建普通索引相同,只不过指定多个列,列与列之间用逗号隔开。常见: simple :简单查询,没有子查询、没有 union。modify 不能用来新增主键、唯一、外键,也不能新增索引。索引占用字节长度,可以判断复合索引用到了前面几列。change 既可以改列名,也可以顺带改类型。如果这里是 null :没有使用任何索引。可以看到改表中有一个索引,索引名。查询的编号,代表执行顺序。
2026-10-12 11:18:38
127
原创 MySQL数据库基础——索引
MySQL的索引是一种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。MySQL索引类似于书籍的目录,通过指向数据行的位置,可以快速定位和访问表中的数据。比如汉语字典的目录页,索引就相当于这个目录页:记录关键词在哪一页。不用逐页翻书,查询 where 语句时直接跳到目标磁盘区域,跳过大量无关数据。为什么要使用索引?MySQL所追寻的的两个关键目标:安全、效率。
2026-10-12 08:06:32
138
原创 MySQL数据库基础——视图
视图就是一条select查询语句封装起来的虚拟表(所以理解视图时不要仅仅想着它的原理是执行内部的SQL语句,它本身也可以当成一个表来用,不过确实没有真实储存数据),本身不存真实数据,数据仍然来自原来的基表。那这个时候视图执行完SQL代码返回的临时表表头的列名就都是class_id,会报错,视图不允许列名重复(不过普通select执行完得到临时结果集,列名重复是允许的,可以正常查询,只是不友好)这样一来,复杂的SQL查询代码就不用每次都要写一遍了,直接调用对应视图,就能执行它包含的SQL代码。
2026-10-08 08:31:09
215
原创 MySQL数据库基础——联合查询(下篇)
而外连接会保留一张或两张表(full join)的全部记录,再去匹配另一张表里满足连接条件的数据,也就是会固定直接先在一张表(如左表)里取一条数据,依旧会去右表里进行匹配,但是即使匹配不到也会把左表的该条记录保留下来。思路:把这张表“拆成两张表”用:一张当做“员工表”,一张当做“领导表”,用 leader_id 去匹配领导的 id ,就能拼出名字。select(语法要求必须把内层查询括起来),括号里的就叫子查询(内层查询),外面的叫主查询(外层查询)上面的例子就是,没有领导的人(最高领导)会被过滤掉。
2026-09-28 08:13:42
145
原创 MySQL数据库基础——聚合函数&分组查询&联合查询
之前讲过为了满足三大范式,在设计表时会对一些关系复杂的表进行拆分,从而消除了表中的字段的不合理的依赖关系(比如部分函数依赖,传递依赖),这时会导致在一个表中查询出的数据对于业务需求来说是不完整的,完整的数据需要多表的数据进行结合,这时我们就可以使用联合查询把多个表的数据结合起来得到完整的业务信息。我们知道两表是通过主、外键进行关联的,上面学生表的外键:id 就指向了班级表的主键:id,所以可以看到上面的笛卡尔积中有些记录的主、外键都不匹配,比如第二条:一个id=1,一个id=2,它就是一个无效的记录。
2026-09-28 08:12:55
187
原创 MySQL数据库基础——表设计
不要反了,外键一定建在“多”方,“一”方表里面不要存任何多方的数据,不能这样:班级表里面写一个字段保存多个学生id: student_id:101,102。外键作用:数据库强制校验,stu_id必须在student表里面存在,course_id必须在course表里面存在,不存在的数据不让插入,杜绝脏数据。分别为两个实体建立表,并同时建立表与表之间的关系,核心设计铁则:把“一”那边的主键,放到“多”的那张表里,当作外键。一对一关系:A表里面的一条记录,最多只对应B表里面的一条记录;
2026-09-24 17:31:25
230
原创 MySQL数据库基础——数据库的约束
索引就是个目录,保存了该主键字段的每列数据在哪一行存着的信息,是额外存的结构,占磁盘空间,不是表本身的数据,它可以加快 where 、排序 order by 、分组 group by 的查询速度。auto increment 的作用:每次添加一条新记录时,当我们并没有给这行记录中的auto increment主键字段赋值时,数据库都会自动找到表中该字段的最大值,然后+1为该主键(字段)赋值。作用:它是 NOT NULL 和 UNIQUE 的结合,所以主键约束的列既是非空的也是唯一的。
2026-09-22 22:36:15
197
原创 MySQL数据库基础——CRUD(一)
CRUD - 增删改查C - Create 新增R- Retrieve 检索,查询U - Update 更新D - Delete 删除老师分享的工作建议:“在公司的前一两年基本上都是在做CRUD工作,这也是最基础的工作,通过基础的工作,才可以慢慢的去。沉淀这样一段时间过后,领导才会给你分配一些复杂的任务,慢慢的接触到公司的核心”
2026-09-22 22:14:34
139
原创 MySQL数据库基础——CRUD(二)
==>是NULL安全的,比如在查询一个英语成绩为NULL的学生时,如果使用english= =NULL,那查询结果就是NULL,也就是查询不到,使用<= =>才可以。_ :单个任意字符,相当于一个占位符,只能占1位。% :任意数量任意字符(可以0个字符)LIKE 模糊查询(配合通配符。
2026-09-22 09:04:14
228
原创 MySQL数据库基础——客户端工具&建库
关系型的数据库是指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型关系型数据库就是由二维表及表与表之间的联系所形成的一个数据组织。
2026-09-08 14:13:49
156
原创 贪心算法专题(二)
复习解题思路复习解题思路和代码注释复习解题思路复习解题思路复习解题思路和代码注释List包装类中toArray()方法的使用::返回的是Object[],拿出来后也不方便使用,不推荐List<Integer>转化为Integer[],注意List的泛型类型是什么就只能转化为什么样类型的数组,所以此时无法转化为int[]数组(可以先转Integer,再遍历转化为int),且数组长度应写为0,其他写法可能会出错那么本题的是。
2026-08-29 16:54:54
218
原创 贪心算法专题(一)
复习解题思路复习解题思路复习解题思路和代码注释画图真的很重要!复习解题思路复习解题思路,可以看一下指针移动逻辑的代码实现复习解题思路和代码实现复习解题思路。
2026-08-27 11:22:01
246
原创 【动态规划算法】专题八——背包问题
复习解题思路复习解题思路Leetcode链接有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。
2026-08-02 16:54:07
173
原创 【动态规划算法】专题五——子序列问题
复习解题思路,看代码中的两个循环和注释,其他的【子序列问题】都是以其为基础的复习解题思路和代码注释,注释中有不少dp题目常见的细节问题复习解题思路和代码注释扩展类似题目:【最长等差数列】Leetcode链接给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] ,且 0 <= i1 < i2 < … < ik。
2026-07-04 15:15:05
210
原创 【动态规划算法】专题四——子数组问题
复习解题思路解决子数组问题时滑动窗口算法不好用的话,不要忘记动态规划算法里的也有【子数组】专题``复习解题思路复习解题思路对于这种子串拆分类问题,遇到“一个字符串—>要求分析它可拆分为的众多子串是否可以在另一字符串中存在/匹配”这样的问题时记住使用dp算法。
2026-06-04 14:44:09
262
原创 【动态规划算法】专题二——路径问题
复习解题思路复习解题思路在使用这两个方法去寻找状态表示的时候,其中一个方法无法由此推导出正确的状态转移方程时,不用怀疑,就是这个状态表示压根就不对,换另一个方法。
2026-05-19 19:53:19
1320
原创 【动态规划算法】专题一——斐波那契数列模型
复习解题思路复习解题思路这两个“反着来”的解题思路非常具有代表性,在上一专题中【不同路径】这个题目中“机器人从起点到终点”问题所使用的核心思想是非常相似的,该题也可以像本题一样使用两种反着来的方法,所以其实该题也完全可以使用dp算法来解决,并且【不同路径】这道题我虽然没有用dp写,但它却是下一专题“路径问题”很重要的一个模板。
2026-05-16 17:58:13
438
原创 【递归、搜索与回溯算法】专题六——记忆化搜索
复习这两种方法的解题思路和代码注释思路优化的过程:先想到最基础的一步一步地去深搜来找到结果计数(超时)—>寻找不同坐标作为参数时所得结果之间的关系,然后由此得出递归解法(超时)—>普通递归解法改为记忆化搜索(AC)—>还可以进行dp的尝试(因为这种简单dp解法和记忆化搜索可以说是非常相似的)复习这两个方法的解题思路和代码注释复习解题思路和代码实现及解析主要是本题“左、右子树选较大值”,“不同策略选最小值”这样的细节不同的处理还有本题dfs的设计就是采用了“找子问题”的方法,要重视一下这样的设计思想。
2026-05-14 20:27:01
450
原创 【递归、搜索与回溯算法】专题四——综合练习
复习解题思路和代码注释复习解题思路和代码注释复习解题思路和后面两个代码注释复习解题思路这种单变量path(本题是做为记录表达式加和的变量)确实也适合使用参数进行传递并记录,方便恢复现场,不用再使用全局变量了,可以去代码里看一下这个操作可以先复习方法二的解题思路和代码注释,再复习方法一的解题思路和代码注释这种带矩阵的题目可能第一反应是使用bfs算法,但是要记住本题是符合“多次选择,每次都有多种选项”的特征的,所以使用dfs算法,接下来有几题也是这样的复习解题思路和代码注释复习解题思路和代码注释。
2026-04-17 20:02:48
431
原创 【递归、搜索与回溯算法】专题三——穷举vs暴搜vs深搜vs回溯vs剪枝
复习解题思路和代码实现及解析可以看到在本题中,ret.add()操作添加的是path的副本,千万不可以将path直接添加进去,不然ret中储存的就都是同一个引用,path在后续还会不断进行更改,会造成严重的错误,这是多路径问题非常常见的一个易错点,不要不在乎。而且就算是没有像本题一样使用全局变量,而是进行了传参,但如果参数是引用类型,依然可能会存在上述所指出的问题,所以在多路径问题、使用全局变量这样的场景中必须重视这个问题复习解题思路和代码注释来回忆代码实现框架。
2026-04-08 21:02:10
390
原创 【递归、搜索与回溯算法】专题二——二叉树的dfs
做二叉树题目一般都可以想到使用dfs来解题,也就是使用了递归算法,但仍要主动地将自己的思路往“大问题—>相同子问题”上去引导,这样更好地展开递归的思路。因为解二叉树问题惯性地上来就使用dfs,反而忽略了递归子问题的算法思路。复习解题思路和代码实现及解析以前一般是只往下递归,在回溯的过程才进行结果的整合。而本题在递归的过程中就在一层一层地整合信息并往下传递了,在回溯的过程中再一层一层地处理信息,这种递归算法要熟记全局变量的优势: 不定义为全局变量,就要对这个变量进行传参,那就涉及到对这个变量的各种维护。
2026-03-27 11:09:18
330
原创 【递归、搜索与回溯算法】专题一——递归
我们都知道所谓递归就是函数自己调用自己,但是做题是又不是无脑照搬递归,我们都是通过分析题目的特征而得出应该使用递归算法的。Java算法题分享(一)这篇文章中的解法还加入了具体操作的打印等复习解题思路我们可以看到寻找题目“大问题—>子问题”这样的特性不是想当然地将一大块数据切割为一小部分数据,就这样得到了所谓的子问题,在有些题目中“子问题”可能也会这样简单地呈现,但也有些问题是需要我们对普通解题思路进行模拟,在其中发掘出解题过程中题目所呈现的“大问题—>子问题”特性循环(迭代) VS 递归。
2026-03-25 22:13:43
476
1
原创 【优选算法】专题十八——BFS解决拓扑排序问题
什么是有向无环图?像上面这样由若干节点组成的图,且节点的走向是有方向性的(节点间的指向),但是节点的走向又不能成环,这样的图就成为有向无环图。对于每个节点指向该节点的箭头的数量称为该节点的入度(重要),从该节点出发指向其他节点的箭头的数量称为该节点的出度复习解题思路和代码实现及解析复习解题思路和代码实现及解析。
2026-03-20 17:00:50
469
原创 【优选算法】专题十七——多源BFS(最短路径问题)
上一篇内容的单源最短路径问题的解法:把起点加入到队列 —>一层一层地往外扩展多源最短路径问题,顾名思义,就是在单源最短路径问题的一个起点的基础上变为了有多个起点,寻找其中到终点路程最短的那个路径。如何解决?把多源最短路问题转化成若干个单源最短路问题,找出针对于每个起点的最短路径,最后对比一下找出这些路径中最短的那个。时间复杂度太高,大概率会超时多源BFS算法把所有的起点合并为一个起点,这样就变为了单源最短路径问题。
2026-03-19 21:31:06
619
原创 【优选算法】专题十六——BFS解决最短路径问题
复习解题思路和代码实现及解析复习解题思路本题与上一题同为最短路径问题,在代码实现中看看这种实际问题转化为最短路径问题之后是怎么与BFS算法结合的、细节是怎么处理的(尤其注意基因变化那一步)
2026-03-19 20:06:39
659
原创 【优选算法】专题十五——BFS解决FloodFill算法
FloodFill(泛洪填充/漫水填充)算法,简单说就是从一个“种子点”出发,像洪水蔓延一样,查找到周围所有符合条件的位置,共同形成这样的一个区块。它最直观的应用就是画图软件里的“油漆桶”工具。核心原理:扩散与连通算法基于图遍历(DFS或BFS)实现,核心逻辑如下:起点:选择一个起始像素点(种子点)。扩散:检查该点的上下左右(四邻域)或有些时候也要求包括对角线(八邻域)的邻居。条件:如果邻居的颜色与起点颜色相同,且未被访问过,就将其“感染”成新颜色,并继续以该邻居为起点重复扩散。
2026-03-17 19:34:00
517
原创 【优选算法】专题十四——优先级队列
本题使用PriorityQueue的方法与以往不同:如果heap大小超过了k,就立即将堆顶元素弹出,最后堆中剩下的就是前k大元素,这个方法的代码实现比较方便,以后可以使用这个哈希表的应用+TopK问题可以注意一下第2点Lambda表达式中的方法主体实现,分别构建了大根堆和小根堆,已经注释中解释的为什么要分别构建了大根堆和小根堆复习解题思路和代码实现及解析。
2026-03-16 22:07:57
514
原创 【优选算法】专题十二——栈
栈的性质的应用,复习解题思路复习解题思路解题思路复习代码自己再琢磨一遍要找到由括号界定的数据处理规则、分情况讨论,比如本题:未解析的字符串要单独入栈,下次需要解析了直接pop。而解析过的字符串要追加( append() )到字符串栈的栈顶字符串的后面,因为解析过的本来就要追加到结果的后面,而假如整体还需要被解析,那么也正好是要追加到后面再解析的。入栈和出栈序列匹配问题。
2026-03-13 21:06:07
420
1
原创 【优选算法】专题十一——字符串
复习解题思路注意该题的做法:每次去更新较长合格子串的开头begin、长度maxLen(不是较长的子串就不会更新这两个信息),循环结束再使用这两个信息来截取最终的子串,而不是每次都要不断更新目标子串复习解题思路及代码实现及解析认真复习两个方法的解题思路和代码实现及解析,尤其是方法二,相较于方法一很优秀。
2026-03-12 20:42:35
555
原创 【优选算法】专题九——链表
画图—>更加直观、清晰的展现链表结构的变化,从而更容易构建起解题思路引入虚拟头结点(哨兵位)—>便于处理很多边界情况,题目给了特殊数据也不用怕空指针访问。而且方便我们对链表进行操作(因为头节点的存在,比如我们不用再分情况进行讨论,而是一直在头节点后进行头插就行)定义一个新的指针,指向某个节点,得以提前保存该节点,当原本链表中指向它的指针断开后仍可找到它快慢双指针—>判断带环链表、找环的入口、找链表中倒数第n个节点、链表中间节点复习解题思路。
2026-03-10 21:42:23
722
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅