自定义博客皮肤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)
  • 收藏
  • 关注

原创 动态代理——拦截器——责任链——AOP面向切面编程底层原理详解(迪丽热巴版)

目录 动态代理模式详解前言什么是代理模式如何进行代理静态代理动态代理JDK动态代理CGLIB动态代理拦截器责任链模式博客文章版权申明 动态代理模式详解前言代理模式是设计模式中非常重要的一种设计思维,对于SSM...

2018-10-24 11:05:28 1701 3

原创 JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)

                             JavaWeb——Servlet    Tomcat工作机制动画演示(点击动图可全屏观看) 什么是Servlet        Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web...

2018-05-13 21:11:18 151895 154

原创 图的两种表示方法

前面我们简单的介绍了一些关于图的基础知识,这一次我们来讨论一下在计算机中如何去描述一个图,采用怎样的一个数据结构。前面我们看到,一个图的基本组成就是节点和边,因此,我们只想找到一种描述节点并且节点之间边关系的数据结构就好了。通常我们使用两种不同的表示方法来表示一个图:1.邻接矩阵法2.邻接表法这两种表示方法对于图中的点来说都是一样的,区别在与对点与点之间的边表示存在着不同。一.邻接

2018-01-12 16:33:33 14898 3

原创 SQL中关于EXISTS谓词的理解

  在SQL语言中,EXISTS(存在)谓词是一个非常重要的查询关键词。 让我们先看看EXISTS的用法:EXISTS代表存在量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。例如,以下的SQL语句: SELECT snameFROM studentWHERE exists(SELECT * FROM sc ...

2017-12-06 15:35:14 8145 11

原创 插入排序与选择排序的比较

  插入排序insertsort的基本思想为每一位上的数字都与它前面的每个数字进行比较(顾名思义为把数组上的每一位数字都与其前面的数字进行比较并插入合适的位置),若前面的一个数字比它大,则交换它们两个的位置,然后再次比较该位置前一位数是否仍然比其大,若成立,则继续交换,否则轮到下一个检测位重复上面的操作,这样,所有位上面的数字都能够与其前面的数字进行比较并占到符合自己的位置,相比于选择排序,插入排...

2017-09-18 17:36:33 8470 1

原创 Spring框架——Bean的Scope(作用域)易错陷阱解析

Spring框架——Bean的Scope(作用域)易错陷阱解析阅读先修:阅读本篇博文之前,您必须熟悉基本的有关Spring框架核心的IOC容器相关知识,以及基本的Bean配置方式。如若对该部分知识点仍然不太熟悉,可参考Spring官方文档有关于Scope的介绍:https://docs.spring.io/spring-framework/docs/cu...

2019-11-15 16:39:51 547 2

原创 动态规划之——矩阵连乘(全网最详细博文,看这一篇就够了!)

动态规划之矩阵连乘

2019-06-30 20:50:17 3736 9

原创 设计模式之——“迪米特法则”(“最少知道”原则)

设计模式之——“迪米特法则”(“最少知道”原则)什么是“迪米特法则”迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。上面是摘自百度百科对于“迪米特法则”的解释,相信有很多同学看完这段解释还是处于一脸懵逼的状...

2019-05-31 19:11:37 907 3

原创 解决AndroidStudio无法自动安装AndroidSDK等联网异常问题

解决AndroidStudio无法自动安装AndroidSDK等联网异常问题问题描述1.无法从【AndroidStudio中文网】http://www.android-studio.org下载安装包。2.无法从【AndroidStudio官网】https://developer.android.google.cn/studio下载安装包。3.And...

2019-05-19 21:37:43 3295

原创 JavaScript之”冒泡“和“捕捉”详解(全网精品博文)

JavaScript之“冒泡”和“捕捉”详解(全网精品博文)到底什么是“冒泡”?让我们首先通过一个简单的例子来感性的认识一下,JavaScript的冒泡到底指的是什么东西。先看下面一个简短的代码片段:<!DOCTYPE html><html><head><meta charset="utf-8...

2019-04-28 17:19:21 278

原创 win10配置汇编语言环境(王爽汇编语言环境)

win10配置汇编语言环境(王爽汇编语言环境)前言有不少童鞋在学习“汇编语言”这门课程时,不太满足于课本上的理论知识,想要亲自上机实践一下,从而更能够更深刻的理解汇编语言的基本原理。然而,大多数同学使用的电脑都比较新,用的是WIN10系统,然而自从win7之后,微软就把DOS从系统从去除了,因此,我们必须得自己搭建一个汇编语言的调试环境。...

2019-03-30 16:47:20 7995 17

原创 什么是Base64算法?——全网最详细讲解

什么是Base64算法?一、何为Base64算法Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A...

2019-03-04 17:20:17 1577

原创 汉明码——计算机网络——全网最通俗的讲解

   汉明码——计算机网络——全网最通俗的讲解   一、什么是汉明码(hamming code)“汉明码”,也称作“海明码”,英文名为“hanming code”,在通信领域中,“汉明码”有广泛的应用,由理查德·卫斯里·汉明于1950年发明。“汉明码”是一种“错误纠正码”,可以用来检测并且纠正数据从发送端发往接收端中发生的错误。汉明码的发明者理查德汉明在1940年代晚期,运...

2019-02-24 15:46:27 17280 46

原创 快速幂算法(全网最详细地带你从零开始一步一步优化)

快速幂算法——带你从零开始一步一步优化目录 快速幂算法——带你从零开始一步一步优化什么是快速幂算法再次思考快速幂算法初步入门压榨性能再优化终极优化参考资料博客文章版权声明什么是快速幂算法首先,我们先来看一道ACM程序设计题,这道题是杭电OJ中序号为2035的题目,没做过这道题目的同学可以...

2019-01-03 15:00:13 52795 164

原创 为什么使用Spring的@autowired注解后就不用写setter了?

为什么使用Spring的@autowired注解后就不用写setter了?刚学习Spring的时候,知道了@autowired注解是非常灵活的,既可以直接写在Properties(属性)上,也可以写在属性相应的setter方法上,亦或者直接写在Constructer(构造器)上,但是有一天,我却惊奇的发现,为什么在Properties上写了@autowired注解后,不写这个属性相应的s...

2018-12-16 17:15:01 11791 14

原创 TCP为什么一定需要三次握手?偶然又或者是有原因的?

                   TCP为什么需要三次握手?目录         TCP为什么需要三次握手?什么是TCP协议TCP的表头含义TCP的“三次握手”连接过程为什么刚好是三次握手?两次握手不可以吗?SEQ的初始值为什么是随机的?抓取真实的TCP包博客文章版权声明  在我们探讨TCP为啥一定要握3次手之前,先让我们从TCP协议的基础开始研...

2018-11-03 09:47:06 772

原创 有权图

目录                                                           有权图前言带权图的数据结构边Edge的结构设计邻接矩阵的结构改造邻接表的结构改造完整代码获取博客文章版权说明                                                               ...

2018-09-18 22:21:36 2440

原创 图的广度优先遍历和最短路径算法

目录          图的广度优先遍历和最短路径算法前言广度优先遍历算法的探讨核心代码分析测试用例完整代码获取博客文章版权声明                    图的广度优先遍历和最短路径算法前言上一次,我们讨论了有关图的深度优先遍历算法,既然二叉树有深度遍历算法,图也有深度遍历算法。那么二叉树还有广度优先遍历算法,图又有没有广度优先算法呢?答...

2018-09-12 19:33:42 17901 3

原创 图的寻路算法

                              目录         图的寻路算法前言寻路算法的思路核心代码详解测试用例完整代码获取博客文章版权声明                                         图的寻路算法前言前面我们探讨了有关于图的“深度优先遍历”算法,知道了如何利用dfs算法查找图中联通分量的个数,判断...

2018-09-11 17:07:31 2000

原创 图的深度优先遍历和联通分量

目录 图的深度优先遍历和联通分量深度优先遍历算法具体的搜索思路联通分量的计算关键代码实现完整代码获取 博客文章版权说明 图的深度优先遍历和联通分量前面已经探讨了图的两种表示方法:邻接表表示法和邻接矩阵表示法。这两种表示法分别用在不同的场景上。邻接矩阵表示法主要用在稠密图中,邻...

2018-09-10 18:10:26 2097 2

原创 操作系统——银行家算法(银行家和房地产开发商的爱恨情仇)

操作系统——银行家算法什么是银行家算法    银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。银行家算法的产生背景    在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大...

2018-06-05 17:05:27 691

原创 Java基础——对象的序列化(通俗易懂,排版优美)

Java基础——对象的序列化什么是对象的序列化(Serialization)    “序列化”是一种把对象的状态转化成字节流的机制,“反序列”是其相反的过程,把序列化成的字节流用来在内存中重新创建一个实际的Java对象。这个机制被用来“持久化”对象。通过对象序列化,可以方便的实现对象的持久化储存以及在网络上的传输。大致的过程如下图所示:    对象被转换成“字节流”后可以存入文件,内存,亦或者是数...

2018-05-23 23:31:23 7196 4

原创 JAVA基础——接口(全网最详细教程)

Java基础——接口接口概念 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 我的解释:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组...

2018-05-10 09:46:42 158954 96

原创 Java之对象的多态性(使用生活中通俗的例子讲解)

Java之对象的多态性多态概念 (Java)    多态(英语:polymorphism),是指计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。多态可分为变量多态与函数多态。变量多态是指:基类...

2018-04-03 12:48:49 15819 16

原创 2017第八届蓝桥杯C++B组省赛之等差素数列题

题目的要求如下:2,3,5,7,11,13,....是素数序列。类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为10的等差素数列,其公差最小值是多少?注意:需要提交的是...

2018-03-31 18:48:27 654 5

原创 操作系统之信号量

操作系统中的信号量在解决线程之间的同步中起着非常大的作用,那么什么是信号量呢?百度百科:信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。维基百科:信号量(...

2018-03-29 23:13:32 28799 3

原创 图的相邻节点迭代器

前面我们探讨了如何把一个抽象的图具体化的用代码去实现,讨论了图的邻接矩阵表示法和邻接表表示法,那么这一小节我们就来探讨一下图算法中最常见的操作,如何去遍历图中的各个节点相对应的临边呢?那么,通过一个点怎么去遍历与这个点相连的临边呢?例如,下图是图中一个节点与其相邻的各个节点,我们需要遍历0节点的邻节点。首先,对于邻接矩阵表示的图来说,我们只需要从表中遍历一遍0元素与其他

2018-01-30 15:02:07 926

原创 图论基础

今天,我们大家来讨论的数据结构为:图结构。图论是计算机科学中非常重要的内容。首先,让我们来了解一下什么是图论:图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。一个图就像下图所示。节点和节点之间用边连接起

2018-01-08 17:25:34 296

原创 并查集的路径压缩优化

在上面两节中,我们讨论了基于Size和基于Rank的优化策略,但是这两种优化策略都集中在在优化Unionelements这个操作上,那么,对于并查集来说,是不是还有其他部分可以优化呢?当然,下面我们就来介绍一下优化find查询的优化策略:一.基于循环的路径压缩优化首先,让我们来回忆一下find执行的操作:从一个节点,不停的通过parent数组向上去寻找他的根节点,在这个过程中,我们相当于把

2017-12-28 21:41:59 11020 7

原创 基于Rank的并查集优化

在上一小节中,我们讨论了基于Size的并查集优化方法,即在合并两个集合时,通过判断两个集合元素的数量大小来决定把哪一个集合并入另一个集合当中,从而减少了因为合并集合使得合并后树的层数增多的情况,因此执行find操作所需的步骤数量也大大减少了。但是,没有绝对完美的优化方法,这种基于Size的合并策略在有的时候却并不能很好的解决合并时发生层数增多的问题,例如下面这种情况:我们可以看

2017-12-27 21:21:42 2262 8

原创 基于Size的并查集优化

在上一节中,我们对并查集进行了一个结构上的优化,然而,我们发现在数据量很大时,貌似效率并没有被提升很多,因此,我们今天就来讨论一下并查集的另一种优化方式:基于Size的优化。在上一节中,我们对于两个集合的合并,貌似是随意的进行的,然而,这样会引发一些极端的情况出现,例如,在下图中:如果我们需要把4和9所在的集合合并,对于原来的代码逻辑,我们总是把第一个集合的根元素的父节点指向另一个

2017-12-27 17:14:03 708

原创 并查集的常规实现方法

在上一节中,我们讨论了并查集的简单实现方法,然而我们却发现并查集的效率好像并不是很高,因此,计算机科学家想出了另外一种方法来实现并查集。在新的实现思路中,我们把每一个元素看做是一个节点,该节点只有一个指向其父亲的指针,也就是说parent[i]=j的意思就是i元素的父亲为j元素,因为 i 元素的父亲指针就是指向 j 节点的,如果一个元素没有父亲了,那么它的父亲指针就指向自己,这也是作为

2017-12-27 10:54:04 421

原创 并查集基础入门

在计算机科学中,并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。并且,在图的相关算法中需要使用到并查集来实现一

2017-12-26 18:34:08 459

原创 二分搜索树的删除节点操作

本节我们来讨论一下对二叉搜索树的删除节点操作。首先,我们先来研究一下稍微简单一点的问题,如何删除二叉树中的最小值和最大值。例如上图的这一棵二叉树中,最小值节点和最大值节点都在哪里呢?我们可以很清楚的从图中看出,13是该树的最小节点,42是该树的最大节点,且13节点位于树的最左边,而42位于树的最右边,这难道是一种巧合吗?当然不是,首先,让我们来回忆一下二叉树的一个非常重要的性质。

2017-12-23 21:50:45 7010 2

原创 二叉搜索树的广度优先遍历

在上一节中,我们学习了二叉树的而前序遍历,中序遍历,以及后续遍历。但是我们发现,上述三种遍历方式都使用到了递归,因此无论哪种遍历都是一直往深处遍历到不能遍历为止。那么,有没有什么方法能够将每一层的节点遍历完然后在遍历下一层的节点呢?能够解决这种问题呢,因此,接下来我们就要开始讨论二叉树的广度优先遍历。对于广度遍历,我们需要额外引进一个辅助工具,那就是我们熟悉的数据结构中的一种:队列。让我们

2017-12-19 19:28:19 794

原创 二分搜索树的遍历

对于一棵二叉树来说,如果我们想要把这棵树中的所有节点都给遍历一遍,那么我们就需要了解二叉树的遍历方式。二叉树的遍历方式分为以下三种:二叉树的一个简单的结构如下图所示: 对于其中的“前”。“中”,“后”,我们都可以理解为是根节点的访问顺序。遍历时,我们分为三个阶段:前 中 后对于前序遍历来说:也就是在前阶段访问根节点,中阶段访问左节点,后阶段访问右

2017-12-11 22:17:46 377

原创 二叉搜索树的节点插入,查找。

在讲解二分搜索树之前,我想先讲清楚一个东西,那就是递归,因为在后面的插入,查找操作都是利用递归去查找的,而且对于递归的理解也是一个难点,因此,以下是我对于递归的理解。,对于递归,我们不能用人脑去展开来想,所以,我们只需要把递归过程中的两个过程给想清楚就好了,一个是递归发生在终止条件的时候,还有一个是递归在不断缩小规模的过程中其中的一个情况,具体我们可以见下图:我们把最下面的

2017-12-04 21:19:34 912 4

原创 二分搜索树的基础结构

上一节我们讲到了二分搜索法,这一节我们来讲讲二分搜索树。二分搜索树通常用于实现查找表这种结构,也可以称作“字典”,通过一个键(key),我们就能够查到其值(value),如果key都是整数,而且范围较小,我们则可以直接使用数组表示,但是如果key不能用整数表示或者key分散的较为疏散,则会浪费大量的空间,因此,我们需要一个查找表,最基础的方式也就是使用一个二叉搜索树。二分搜索树具有

2017-11-30 16:27:04 163

原创 二分查找法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少。其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。对于二分查找法,首先我们获取需要查找的数组的左边界l和右边界r,然后在通过左右边界计算出数组中中间的位置mid,但是计算mid不能简单的使用mid=(l+r)/2去计算,因为当l和r都接近于int的最大

2017-11-30 11:50:22 240

原创 数组连续交换的优化方法

我们经常在排序算法中会遇见这样的一种情况,数组中连续的两个值会不停的相互交换,类似于我们前面在插入排序和堆排序中的swap()优化,例如:在我们的插入排序算法中:原始的交换操作为:void insertsort(T arr[],int n) { for(int i=1;i<n;i++) { for(int j=i;j>0&&arr[j]<

2017-11-27 21:55:37 404 2

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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