自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(253)
  • 收藏
  • 关注

原创 史上最全,最详细SQL基础

视图是一个虚拟的表,不同于直接操作数据表,视图是依据SELECT语句来创建的(后续会具体介绍),所以操作视图时会根据创建视图的SELECT语句生成一张虚拟表,然后在这张虚拟表上做SQL操作注册嘎下一步是指一个查询语句嵌套在另一个查询语句内部的查询,在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。

2023-10-12 11:18:13 2871

原创 数据建模设计

数据库的设计不仅需要处理规则的理解,更重要的是数据需求的理解与表达。表达计算机世界的模型称为,而表达信息世界的模型称为。抽象是具有层次的,将现实世界的问题抽象成概念模型,就是的过程,而将概念模型抽象成数据模型的过程,就是的过程。

2023-10-11 12:49:28 375

原创 数据库系统工程师------流水线

完成同一批任务,不使用流水线所用时间与使用流水线所用时间之比。:第一条指令计算时间 + (指令条数 - 1)*流水线周期。:指单位时间内流水线完成的任务数量或输出的结果数量。

2023-10-10 23:45:00 230

原创 数据库系统工程师------时间周期

一个总线周期通常由n个时钟周期组成;而一个指令周期中可能包含一个或几个总线周期,也可能一个总线周期都没有,这取决于该指令的功能。(如取指、读存储器、写存储器等)所需要的时间。通常用内存中读取一个指令字的最短时间来规定CPU周期。:CPU完成一次内存访问(读写)或接口操作所需要的时间。:也称振荡周期,定义为时钟频率的倒数。个总线周期都没有,这取决于该指令的功能。:也称CPU周期,指完成。

2023-10-10 18:56:52 136

原创 JavaWeb面试

XSS攻击即跨站脚本攻击,它是Web程序中常见的漏洞。原理是攻击者往Web页面里插入恶意的脚本代码(css代码、Javascript代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户cookie、破坏页面结构、重定向到其他网站等。预防XSS的核心是必须对输入的数据做过滤处理。CSRFCross-SiteRequestForgery(中文跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如。...

2022-07-20 00:01:45 233 2

原创 java网络

301永久重定向302暂时重定向它们的区别是301对搜索引擎优化更有利,302有被提示未网络拦截的风险。

2022-07-18 00:27:13 182

原创 java对象拷贝

克隆的对象可能已经包含了一些已经修改过的属性,而new出来的对象还都是初始化时候的值。所以当需要一个新的对象来保存当前对象的“状态”就只能使用克隆了。

2022-07-16 23:59:10 753

原创 java反射

Java序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态读取出来以下情况可以使用Java序列化想把内存中的对象状态保存在文件或数据库中的时候想用套接字在网络上传送对象的时候想通过远程方法调用传输对象的时候。...

2022-07-16 13:14:23 208

原创 java多线程

当线程A占有独锁a,并尝试获取独锁b的同时,线程B占有独锁b,并尝试获取独锁a的情况下,就会发生AB两个线程互相持有对方所需要的锁,而发生的阻塞现象,称为死锁。

2022-07-15 22:35:54 131

原创 java容器

Collection集合List 有序集合,允许重复的元素ArrayList:底层用Object数组实现,特点是查询效率高,增删效率低,线程不安全LinkedList:底层使用双向循环链表实现,特点是查询效率低,增删效率高,线程不安全,因为线程不同步Vector:底层用长度可以动态增长的对象数组实现,它的相关方法用 Synchronized 进行了线程同步,所以线程安全,效率低Stack:栈。特点是:先进后出。继承于VectorSet 无序集合,不允许重复的元素HashSet:底层用HashMap实现,本质

2022-07-14 00:06:36 2738

原创 java基础

JDK>JRE>JVMJDK:Java开发工具包,包含了Java开发的开发环境与运行环境JRE:Java运行环境,为Java的运行提供了所需环境JVM:Java虚拟机,Java最核心的部分对于基本类型和引用类型 == 的作用效果是不同的,如下所示:代码示例:代码解读:String类型为引用类型,由于x,y指向的是同一引用,因此 == 也是true,而 new String( )方法则是重写开辟了新的内存空间,所以 == 结果为true,equals 本质上就是 == ,只不过 String 和 Integ

2022-07-12 22:29:59 142

原创 马踏棋盘算法

马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格1、创建棋盘 chessBoard , 是一个二维数组2、将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(ArrayList), 最多有8个位置, 每走一步,就使用step+13、遍历ArrayList中存放的所有位置,看看哪个可以走通 , 如果走通,就继续,走不通,就回溯.

2022-06-10 13:06:32 329 1

原创 佛洛依德算法

佛洛伊德

2022-06-09 13:57:46 112

原创 迪杰斯特拉算法

用这个例子[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eufQMmlG-1654683682055)(//upload-images.jianshu.io/upload_images/20256871-b3be34681e75f578.png?imageMogr2/auto-orient/strip|imageView2/2/w/939/format/webp)]给定的图图的实现此实现方法没有节点类采用邻接矩阵,并用顶点索引代表顶点邻接矩阵表示从索引的节点指向

2022-06-08 18:21:53 134

原创 克鲁斯卡尔算法

在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4dkzuWEz-1654601547803)(https://www.freesion.com/images/71/76c4684274c94942b4da597307416637.JPEG)]例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。[外链图片转存失败,源站可能有防盗

2022-06-07 21:37:42 508

原创 普里姆算法

普里姆算法(Prim’s algorithm)是图中的一种算法,可在加权连通图中搜索最小生成树。该算法的作用就是根据图中权值找到连接所有顶点的最短路径,也就是连接所有顶点的最小权值之和,也是这个加权图中的最小生成树。1.选取权值最小边的其中一个顶点作为起始点。2.找到离当前顶点权值最小的边,并记录该顶点为已选择。3.重复第二步,直到找到所有顶点,就找到了图的最小生成树。假如我们有 V 表示图中的顶点个数,E 表示图中的边个数。通过邻接矩阵图表示的简易实现中,找到所有最小权边共需 [外链图片转存失败,源

2022-06-02 22:25:01 14185

原创 算法之贪心算法

在分析和求解某个问题时,在每一步的计算选择上都是最优的或者最好的,通过这种方式期望最终的计算的结果也是最优的。也就是说,算法通过先追求局部的最优解,从而寻求整体的最优解。贪心算法的基本步骤:1、首先定义问题,确定问题模型是不是适合使用贪心算法,即求解最值问题;2、将求极值的问题进行拆解,然后对拆解后的每一个子问题进行求解,试图获得当前子问题的局部最优解;3、所有子问题的局部最优解求解完成后,把这些局部最优解进行汇总合并,得到最终全局的最优解,那么这个最优解就是整个问题的最优解。概念性的算法描述可能大家都不太

2022-06-01 21:56:37 1528

原创 KMP算法

java 实现KMP算法简介KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) 。说的简单的一点,就是一个用于在主串中,查找子串的算法。暴力解法(BF)在讲解KMP算法之前,我们得

2022-05-31 16:31:06 150

原创 动态规划算法

动态规划算法一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。由于动态规划解

2022-05-30 22:41:49 117

原创 数据结构之图的原理与实现

Java数据结构之图的原理与实现首先介绍了图的入门概念,然后介绍了图的邻接矩阵和邻接表两种存储结构、以及深度优先遍历和广度优先遍历的两种遍历方式,最后提供了Java代码的实现。图,算作一种比较复杂的数据结构,因此建议有一定数据结构基础的人再来学习!1. 图的定义和相关概念定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图在数据结构中是中多对多的关系,而树则是1对多的关系,树就是一种特别的没有闭

2022-05-29 12:40:54 745

原创 数据结构之平衡二叉树、B树、B+树、B树

平衡二叉树、B树、B+树、B*树 理解其中一种你就都明白了1、从二分法到二叉树二分法是我们常用的一种查找算法,可以有效的提升数据找找的效率,其实现思路是:1、首先对数据集进行排序。2、找到数据集中间位置的节点。3、用查找的条件和间节点进行比较,等于则直接返回,中间节点数据小于查找条件则说明数据在排序列表的左边,大于则说明数据在排序列表的右边。比如我们要从[9,2,6,5,7,8,4,3,1] 快速查找到 7的数据那么我们做以下操作从二分法查找的过程来看,如果能保证数据的有序性,并且预先把数据

2022-05-28 11:06:16 316

原创 数据结构之二叉排序树

数据结构之二叉排序树1、二叉排序树定义二叉排序树也叫二叉搜索树、二叉查找树。二叉排序树树是一颗它的左子树上的节点都小于根节点,右子树上的节点都大于根节点的二叉树,且其左右子树也是二叉排序树。实例二叉树实例2、二叉排序树的创建当要向二叉排序树中插入元素的时候,从根节点开始查找,先将根节点作为当前节点,如果要插入的值比当前节点的值小,则判断当前节点的左孩子是不是空,如果是空则将要插入的值作为当前节点的左孩子,不是空则将当前节点的左孩子作为当前节点继续查找;当要插入的值比当前节点的值大时,判断当前节

2022-05-27 15:40:13 1777

原创 java实现赫夫曼编码实现文件的压缩与解压缩

java实现赫夫曼编码实现文件的压缩与解压缩一、基本概念哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。  赫夫曼码的码字(各符号的代码)是异前置码字,即任一码字不会是另一码字的前面部分,这使各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收

2022-05-26 20:45:00 408

原创 数据结构之赫曼夫树(哈曼夫树)

Java实现赫夫曼树(哈夫曼树)的创建目录一、赫夫曼树是什么?1.路径和路径长度2.节点的权和带权路径长度3.树的带权路径长度二、创建赫夫曼树1.图文创建过程2.代码实现一、赫夫曼树是什么?给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。图1 一棵赫夫曼树1.路径和路径长度在一棵树中,从一

2022-05-26 13:19:52 812

原创 数据结构之线索化二叉树

理解线索二叉树线索二叉树原理遍历二叉树的其实就是以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列或后序序列。这些线性序列中的每一个元素都有且仅有一个前驱结点和后继结点。但是当我们希望得到二叉树中某一个结点的前驱或者后继结点时,普通的二叉树是无法直接得到的,只能通过遍历一次二叉树得到。每当涉及到求解前驱或者后继就需要将二叉树遍历一次,非常不方便。于是是否能够改变原有的结构,将结点的前驱和后继的信息存储进来。二叉树结构观察二叉树的结构,我们发现指针域并没有充分的利

2022-05-25 23:29:11 185

原创 数据结构之顺序存储二叉树

顺序存储二叉树顺序存储二叉树的概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即 数组可以转换成树, 树也可以转换成数组要求:1) 右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]2) 要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历顺序存储二叉树的特点:1) 顺序二叉树通常只考虑完全二叉树2) 第 n 个元素的左子节点为 2 * n + 13) 第 n 个元素的右子节点为 2 * n

2022-05-23 21:00:00 1514 1

原创 数据结构之树----二叉树

数据结构——树首先什么是树结构?树是一种描述非线性层次关系的数据结构,树是n个数据结点的集合,这些集结点包含一个根节点,根节点下有着互相不交叉的子集合,这些子集合便是根节点的子树。树的特点在一个树结构中,有且仅有一个结点没有直接前驱,它就是根节点。除了根节点,其他结点有且只有一个直接前驱每个结点可以有任意多个直接后继树的名词解释结点的度:一个结点包含子树的数量。树的度:该树所有结点中最大的度。兄弟结点:具有同一父结点的结点称为兄弟结点。树的深度(高度):叶子结点的深度(高度)为1

2022-05-23 15:23:51 120

原创 哈希表详解和操作代码详解

Java中的哈希表一、什么是哈希表?数组更利于元素的查找;链表更利于元素的插入和删除;那么有没有一种数据结构可以同时具有数组和链表的优点呢?即能快速地查找又能高效地插入删除元素?很明显,本文的主角“哈希表”就能很好的满足这个要求。那么哈希表是怎么做到两者的优点兼具的呢?这主要归功于它独特的数据结构。哈希表是由一块地址连续的数组空间构成的,其中每个数组都是一个链表,数组的作用在于快速寻址查找,链表的作用在于快速插入和删除元素,因此,哈希表可以被认为就是链表的数组,下图是一个哈希表的简单示意图:

2022-05-22 18:38:57 396

转载 递归之汉诺塔算法

汉诺塔问题详解如果你有耐心翻到这里看到这个回答,相信大部分前面的回答并没有让你完全明白汉诺塔的递归算法应该怎么理解,那么我希望这个答案会是你浏览的最后一个(不知道怎么打删除线…)。ps:篇幅稍微有点长,请耐心阅读,相信我,会有价值的。(毕竟是个人理解,若其中有不正确的地方望大家多多指正哈)要用程序来解决这个问题,我们先定义一个移动函数:**move(移动数,开始柱,中转柱,目标柱),**例如 move(2,A,B,C) 表示将2个盘子从A柱(开始柱)借助B柱(中转柱)移动到C柱(目标柱)。关于开始柱,

2022-05-20 15:56:09 12491 4

原创 查找算法之斐波那契查找算法

斐波那契(黄金分割法)查找算法(一)算法简介(1)斐波那契数列在讲算法之前,我们先介绍一下斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1、1、2、3、5、8、13、21……。我们还知道,F(k-1)/f(K)随着K的递增,该数越来越接近黄金分割比例,所以该方法也叫黄金分割法。(2)查找算法对于一个数组来说,如果数组长度为斐波那契数列中的某一个数字,那么我们就可以用黄金分割比例来分割该数组。当然,如果数组长度没有达到要求,那么我们可以尝试它扩大来满足要求,所以这就是算

2022-05-20 11:58:32 1692

原创 查找算法之插值查找算法

图解查找算法之插值查找(带源码)在前面我们了解了二分查找,就是把一个集合的元素一分为二,用中间值和目标查找值相比较,直到要查找的值和中间值相等,则表示查找成功,反之表示不成功。为什么这里会再次提到二分查找呢?事实上,插值查找是二分查找的升级版。用一个很简单的例子就可以把插值查找解释的很清楚。在字典里面找”boy”这个单词时,我们肯定不会从第一页开始找,而是从首字母为b的位置开始查找,然后再找到第二个字母在字母表中的位置,找到对应的位置后,重复这个过程,这样就可以快速的找到目标单词。[外链图片转存失败,

2022-05-19 12:26:05 192

原创 查找算法之二分查找算法

图文并茂带你入门二分查找算法原理二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。为了方便理解,我们以数组1, 2, 4, 5, 6, 7, 9, 12, 15, 19, 23, 26, 29, 34, 39,在数组中查找26为例,制作了一张查找过程图,其中low标示左下标,high标示右下标,mid标示

2022-05-18 16:02:07 22166 5

原创 查找算法之线性查找算法

线性查找算法线性查找也叫顺序查找,这是最基本的一种查找方法,从给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。如果元素个数为 N,那么线性查找的平均次数为: N/2代码演示/** * 线性查找 * * @author Yuan-9826 */public class SequenceSearch { public static void main(String[] args) { int[] arr = {7, 8, 9, 1, 0, 2,

2022-05-17 22:49:40 308

原创 经典排序算法之归并排序

归并排序一、归并排序的介绍基本介绍归并排序(MERGE- SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治( divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案修补”在一起,即分而治之)。基本思想1.把数组从中间划分成两个子数组;2.一直递归地把子数组划分成更小的子数组,直到子数组里面只有一个元素3.依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排

2022-05-17 00:01:51 435

原创 经典排序算法之希尔排序

排序:希尔排序(算法)一、简介希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序。希尔排序是非稳定排序算法。希尔排序因DL.Shell于1959年提出而得名。(注:为方便记忆算法,我习惯将其记作“三层for循环+if” ------** for(for(for(if)))**)希尔排序是基于直接插入排序的以下两点性质而提出的改进方法:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.插入排序一般来说是

2022-05-16 09:47:28 2481

原创 经典排序算法之选择排序

通俗易懂讲解 选择排序选择排序介绍选择排序(Selection sort)是一种简单直观的排序算法。其基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。上面的说法可能还有点抽象,没关系,下面让我们用图来说明一切,相信大家肯定能看懂和理解的。图解选择排序以数列{20,40,30,10,60,50}为例,演示其选择排序过程(如下图)。排序流程如

2022-05-14 22:39:38 228

原创 经典排序算法之插入排序

插入排序一、概念及其介绍插入排序(InsertionSort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。二、适用说明插入排序的平均时间复杂度也是 O(n^2),空间复杂度为常数阶 O(1),具体时间复杂度和数组的有序性也是有关

2022-05-13 12:32:33 76

转载 经典排序算法之快速排序

经典排序算法之快速排序高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让***个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:3 1 2

2022-05-12 00:08:54 323

原创 经典排序算法之冒泡排序

Java算法之冒泡排序【超详细】1.1 冒泡排序分类 算法冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一

2022-05-10 23:25:26 86

原创 经典排序算法之基数排序

经典排序算法之基数排序1. 基数排序基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。2. LSD 基数排序动图演示3.排序思路想一下平时对比两个时间大小是如何进行比较的。一般都是先对比年份,如果年份大的肯定就大。接下来再对比月份,然后日。为什么这么比较呢,因为权重不一样权重顺序是:年>月>日而基数排序的思路跟这个有点类似。将每一个数分成一

2022-05-09 13:48:51 2466

空空如也

空空如也

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

TA关注的人

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