自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zzu-hust-madd

勤用智,智用勤

  • 博客(539)
  • 收藏
  • 关注

原创 idea使用技巧

全局搜索快捷键ctrl + shift + f字符变成大写ctrl + shift + u格式化代码ctrl + Alt + L回到上次/下次编辑的地方ctrl + alt + ←/→生成变量的set/get方法右键 —> generate —> Getter and Setter...

2019-11-28 22:07:11 252

转载 数据库之关系数据理论

数据库的规范化(上一篇博客有写到)的程度不同,便有了这么多种范式。数据库范式是数据库设计必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库,甚至设计出错误误的数据库。课本中的定义比较抽象,不太直观,也不易理解,记是肯定记不住的。关系数据库常用范式关系数据库知道了,再来理解范式。范式是关系数据库关系模式规范化的标准,从规范化的宽松到严格,分为不同的范式,通常使用的有第一范式。第...

2019-11-23 11:18:42 586

原创 磁盘调度之扫描类算法

1、扫描(SCAN)算法1)进程“饥饿”现象SSTF算法虽然能获得较好的寻道性能,但却可能导致某个进程发生“饥饿”现象。因为只要不断有新进程的请求到达,且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的I/O请求必然优先满足。对SSTF算法略加修改后所形成的SCAN算法,即可防止老进程出现“饥饿”现象。2)SCAN算法该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是...

2019-11-17 12:46:02 13120

原创 磁盘调度之最短寻道时间优先

最短寻道时间优先(SSTF,Shortest Seek Time First)该算法选择这样的过程,其要求访问的的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。但这种算法不能保证平均寻道时间最短。下图示出了按SSTF算法进行调度时,各种进程被调度的次序、每次磁头移动的距离,以及9次调度磁头平均移动的距离。...

2019-11-17 12:02:00 2140

原创 磁盘调度之先来先服务

先来先服务(FCFS,First Come First Served)这是一种最简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。下图示出了有9个进程先后提出磁盘I/O请求时,按FCFS算法进行调度的情况。这里将进程号(请求...

2019-11-17 11:56:49 1921

原创 页面置换之Clock置换算法

LRU算法是较好的一种算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用LRU的近似算法。Clock算法就是用得较多的一种LRU近似算法。1、简单的Clock置换算法当采用简单Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只需检查页的访问位。如果是0,就选择该页换出;若为1,...

2019-11-17 11:41:27 10993

原创 页面置换之最近最久未使用置换算法

LRU(Least Recently Used)置换算法LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。利用LRU算法对上例进行页面置换的结果如图所示。当进程第一次对页面2进行访问时,由于页面7是最近最久未被访问的,故将它置换出去。当...

2019-11-17 10:58:54 1910

原创 页面置换算法之最佳置换算法和先进先出置换算法

1.最佳(Optimal)置换算法该算法所选择的淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其他算法。现举例说明如下。假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:...

2019-11-17 10:43:54 3873

原创 避免死锁之银行家算法

1. 算法思想银行家算法是为了避免死锁的算法,是Dijkstra的银行家算法。由于该算法用于实现银行系统现金贷款的发放而得名的。为实现银行家算法,系统中必须设置若干数据结构。1) 银行家算法的数据结构a) 可利用资源向量availableb) 最大需求矩阵c) 分配矩阵d) 需求矩阵2) 银行家算法设Requesti 是进程Pi的请求量,如果Requesti[j]=k,表示进程Pi...

2019-11-17 10:13:56 382

原创 实时调度算法之最低松弛度优先算法

最低松弛度优先即LLF(Least Laxity First)算法该算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高,以使之优先执行。例如,一个任务在200ms时必须完成,而它本身所需的运行时间就有100ms,因此,调度程序必须在100ms之前调度执行,该任务的紧急程度(松弛程度)为100ms。又如,另一任务在400ms时必须完成,它本身需...

2019-11-17 10:07:58 11878 5

原创 实时调度算法之EDF算法

最早截止时间优先即EDF(Earliest Deadline First)算法该算法是根据任务的开始截止时间来确定任务的优先级。截止时间愈早,其优先级愈高。该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的早晚排序;当然,具有最早截止时间的任务排在队列的最前面。调度程序在选择任务时,总是选择就绪队列中的第一个任务,为之分配处理机,使之投入运行。最早截止时间优先算法既可用于抢占式...

2019-11-17 09:23:46 22118 4

原创 操作系统线程同步之读者-写者问题

读者—写者问题(Readers-Writers problem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进程共享一组数据区,要求:(1)允许多个读者同时执行读操作;(2)...

2019-11-16 18:58:37 877

原创 操作系统线程同步之哲学家进餐问题

1、问题描述(死锁)五个哲学家,五只筷子,只有获得一双筷子之后才能就餐,就有可能出现这种情况:每个哲学家都获得了一只筷子,卡死在那个地方。2、解决哲学家就餐问题当然后很多方法:(1)有一个服务生来负责避免死锁(2)哲学家在拿筷子的时候,确保左右都有筷子才同时拿起左右两只筷子(3)规定拿筷子的方式:给筷子编号,先拿号码小的筷子3、第二种方式java代码实现:class Chopsti...

2019-11-16 18:46:50 440

原创 操作系统线程同步之生产者---消费者问题

生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。wait/notify方法首先,我们搞清楚Thread.sleep()方法和Object.wait()、Object.notify()方法的区别。sleep(...

2019-11-16 18:34:00 385

原创 为什么四次握手之后需要等待2MSL

TCP释放过程如下图:为什么A在TIME_WAIT状态必须等待2MSL的时间呢?(1)为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST_ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器。最后,...

2019-11-16 18:00:22 722

原创 TCP和UDP对比

UDP的主要特点是(1)UDP是无连接的(2)UDP使用尽最大努力交付(3)UDP是面向报文的(4)UDP没有拥塞控制(5)UDP支持一对一、一对多、多对一和多对多的交互通信(6)UDP的首部开销小TCP的主要特点是(1)TCP是面向连接的运输层协议(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(3)TCP提供可靠交付的服务(4)TCP提供全双工通信(...

2019-11-16 17:41:56 108

原创 计算机网络之TCP拥塞控制

1.引言    计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。    拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同...

2019-11-16 12:41:30 434

原创 计算机网络之分组转发算法

算法如下:(1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。(2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付给目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行(3)。(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一条...

2019-11-16 12:30:59 3288

原创 各种内部排序方法的比较讨论

排序方法平均时间最坏情况辅助存储简单排序O(n2)O(n2)O(1)快速排序O(nlogn)O(n2)O(logn)堆排序O(nlogn)O(nlogn)O(1)归并排序O(nlogn)O(nlogn)O(n)基数排序O(d(n+rd))O(d(n_rd))O(rd)(1)从平均时间性能而言,快速排序最佳,其所需时...

2019-11-16 11:07:27 381

原创 归并排序

归并排序 (merge sort) 是一类与插入排序、交换排序、选择排序不同的另一种排序方法。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。一、两路归并排序算法思路分而治之(divide - conquer);每个递归过程涉及三个步骤第一, 分解: 把待排序的 n 个元...

2019-11-16 10:34:37 128

原创 堆排序

一、堆排序堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。二、堆1、什么是堆堆是一个树形结构,其实堆的底层是一棵完全二叉树。而完全二叉树是一层一层按照进入的顺序排成的。按照这个特性,我们可以用数组来按照完全二叉树实现堆。2、大顶堆与小顶堆大顶堆原理:根结点(...

2019-11-16 10:26:21 115

原创 B-和B+树

B-树是一种平衡的多路查找树,它在文件系统中很有用。一棵m阶的B-树,或为空树,或为满足下列特性的m叉树:(1)树中每个节点至多有m棵子树;(2)若根节点不是叶子节点,则至少有两棵子树;(3)除根之外的所有非终端节点至少有向上取整m/2棵子树(4)所有的非终端节点中包含下列信息数据(n,A0,K1,A1,K2,…,Kn,An)其中:Ki(i=1,…,n)为关键字,且Ki<Ki+1...

2019-11-15 21:49:33 133

原创 平衡二叉树

平衡二叉树又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。若将二叉树上节点的平衡因子定位为该节点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有节点的平衡因子只可能是-1、0、1.只要二叉树上有一个节点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。public class AVL { ...

2019-11-15 21:22:05 98

原创 二叉排序树

二叉排序树:或者是一棵空树;或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;(2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;(3)它的左、右子树也分别为二叉排序树import java.util.Scanner; /** * 二叉排序树 (binary sort tree) * 对于一个根节点,其左子树上所有节点的...

2019-11-15 21:09:52 148

原创 弗洛伊德算法

每一对顶点之间的最短路径/* * floyd最短路径。 * 即,统计图中各个顶点间的最短路径。 * * 参数说明: * path -- 路径。path[i][j]=k表示,"顶点i"到"顶点j"的最短路径会经过顶点k。 * dist -- 长度数组。即,dist[i][j]=sum表示,"顶点i"到"顶点j"的最短路径的长度是sum。 */public void...

2019-11-14 22:51:48 343

原创 Dijkstra算法

从某个源点到其余各顶点的最短路径package com.routeSearch.route;public class Dijkstra { private int[] distance; private int[] route; private static int Max = 999; /** * 求顶点begin到顶点i的最小距离。 ...

2019-11-14 22:44:35 95

原创 有向图的拓扑排序

什么是拓扑排序?简单地说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。设R是集合X上的偏序,如果对每个x,yЄX必有xRy或yRx,则称R是集合X上的全序关系。直观地看,偏序指集合中仅有部分成员之间可比较,而全序指集合中全体成员之间均可比较。import java.util.ArrayLis...

2019-11-14 22:21:11 211

原创 最小生成树之kruskal算法

kruskal算法描述:假设连通网N=(V,{E}),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{ }),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。以此类推,直至T中所有顶点都在同一连通分量上为止。kruskal算法描述如下:package Kruskal;...

2019-11-14 22:06:23 128

原创 最小生成树之Prim算法

Prim算法介绍:假设N = (V, {E})是连通网,TE是N上最小生成树中边的集合。算法U={u0}(u0ЄV),TE={}开始,重复执行下述操作:在所有uЄU,vЄV-U的边(u,v)ЄE中找一条代价最小的边(u0,v0)并入集合TE,同时v0并入U,直至U=V为止。此时TE中必有n-1条边,则T=(V,{TE})为N的最小生成树。Prim算法构造最小生成树的过程如下:代码如下:i...

2019-11-14 21:52:16 258

原创 回话跟踪技术有哪些?

     所谓会话,指的是从客户端打开与服务器的连接并发出请求到服务器响应客户端请求的全过程。会话跟踪是对同一个用户对服务器的连续请求和接受响应的监视,由于客户端与服务器端之间是通过HTTP进行通信的,而HTTP本身是无状态协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,在下一次请求时,需要重新建立连接,等到建立完连接后还需要判断是否是...

2019-11-14 21:18:57 252

原创 Statement、PreparedStatement和CallableStatement有什么区别

Statement用于执行不带参数的简单SQL语句,并返回它所生产结果的对象,每次执行SQL语句时,数据库都要编译该SQL语句。PreparedStatement表示预编译的SQL语句的对象,用于执行带参数的预编译SQL语句。CallableStatement则提供了用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。虽然Statement对象与PreparedStatem...

2019-11-04 17:19:16 182

原创 如何通过JDBC访问数据库

加载JDBC驱动器加载JDBC驱动建立数据库连接建立Statement对象或是PreparedStatement对象建立Statement对象或是PreparedStatement对象执行SQL语句访问结果集ResultSet对象依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用资源。...

2019-11-04 17:13:26 104

原创 多线程同步的实现方法有哪些

(1)synchronized关键字synchronized方法synchronized块(2)wait()方法和notify()方法(3)Locklock()tryLock()tryLock(long timeout, TimeUnit unit)lockInterruptibly()

2019-11-04 17:08:18 234

原创 什么是Java序列化

    Java提供了两种对象持久化的方式,分别为序列化和外部序列化。(1) 序列化在分布式环境下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要时把该...

2019-11-04 17:02:12 126

原创 “==”、equals和HashCode有什么区别

1) “= =” 运算符用来比较两个变量的值是否相等。也就是说,该运算符用于比较变量对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能使用 “==”运算符。具体而言,如果两个变量是基本数据类型,可以直接使用“= =”运算符来比较其对应的值是否相等。如果一个变量指向的数据是对象(引用类型),那么,此时涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一...

2019-11-04 16:11:21 86

原创 volatile有什么作用

    在用Java语言编写的程序中,有时为了提高程序的运行效率,编译器会自动对其进行优化,把经常被访问的变量缓存起来,程序在读取这个变量时有可能会直接从缓存(例如寄存器)中来读取这个值,而不会去内存中读取。这样做的一个好处是提高了程序的运行效率,当遇到多线程编程时,变量的值可能因为别的线程而改变了,而该缓存的值不会相应改变,从而造成应用程序读取的值和实际的...

2019-11-04 15:14:03 188

原创 什么是反射机制

    反射机制提供的功能主要有:得到一个对象所属的类;获得一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。    在反射机制中,Class是一个非常重要的类,那么如何才能获取Class类呢?总共有如下3种方法可以获得Class类:Class.forName(“类的路径”)类名.Class...

2019-11-04 14:48:14 94

原创 Java程序初始化的顺序是怎样的

    在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。    Java程序的初始化一般遵循3个原则(优先级依次递减):静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(...

2019-11-04 14:32:10 87

原创 观察者模式

什么是观察者模式观察者模式(也被称为发布/订阅模式)提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察者的对象分离开来。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关,结果是对象可以互相对话,而不必了解原因。Java与C#的事件处理机制就...

2019-10-24 11:39:58 111

原创 适配器模式

什么是适配器模式适配器模式也称为变压器模式,它是把一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。适配类可以根据所传递的参数返还一个合适的实例给客户端。适配器模式主要应用于“望复用一些现存的类,但是接口又与复用环境要求不一致”的情况,在遗留代码复用、类库迁移等方面非常有用。同时,适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配...

2019-10-24 11:24:40 109

空空如也

空空如也

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

TA关注的人

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