- 浏览: 41070 次
- 性别:
- 来自: 武汉
最新评论
-
xieyaxiong:
songbin0201 写道整篇文章的精华在那些gif图片上 ...
排序算法 -
songbin0201:
整篇文章的精华在那些gif图片上
排序算法
文章列表
排序算法
- 博客分类:
- algorithms
/**
* 排序算法总结(冒泡排序、选择排序、插入排序、快速排序)
*
* @author bruce
*
*/
public class Sort {
/**
* 冒泡排序
*
* 每一趟不停的比较交换出最大值放在数组尾部
* @param arr
*/
public void bubbleSort(int[] arr){
for(int i=arr.length-1;i>=0;i--){
for(int j=0;j<i;j++){
if(arr[j]>arr[j+1 ...
数据库是一个共享资源,可以供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。
当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确数据,破坏事务的一致性和数据库的一致性。
并发控制概述
为了保证事务ACID(原子性,一致性,隔离性,持久性),DBMS需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任。
看一个例子,说明并发操作带来的数据的不一致性问题。
1:甲售票点读出某航班的机票余额A,设A=16;
2:乙售票点读出同一航班 ...
学生——课程数据库
* 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
* 课程表:Course(Cno,Cname,Cpno,Ccredit)
* 学生选课表:Sc(Cno,Cno,Crade)
学生表:Student
课程表:Course
学生选课表:Sc
一:其 ...
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。
范式说明
1.1
第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间 ...
针对问题: 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式和装饰模式很相似,不同之处在于代理模式是给主题添加控制,但是这些控制来自代理自身的实现,不像装饰模式一样添加的功能来自己主题的子类提供。
装饰模式可以装饰很多次来得到自己想要的实体,类似的代理模式也可以代理很多次,但通常不会这种做,因为这不是代理模式的目的。装饰模式的目的是添加功能,而代理模式的目的是添加控制。
代理模式结构图:
代理模式实现代码:
/**
...
针对问题:有时候一个方法可能有很多if..else来判断状态后再执行相关操作,当很多方法都重复的出现这样的if..else判断时,就可以考虑用状态模式了。
状态模式的结构图和策略模式一样,事实上状态模式和策略很相似,不同的是状态模式除了委托状态外,状态实体自身持有主实体对象的引用,在状态实体内部可以动态的改变主实体的状态。
状态模式结构图:
状态模式实现代码:
/**
* 状态接口
* @author bruce
*
*/
public interface State {
pub ...
针对问题:组合模式使我们在处理树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式结构图:
组合模式实现代码:
/**
* 为树叶或树枝抽象一个接口
* @author bruce
*
*/
public abstract class Component {
public abstract void operation();
public void add(Component com ...
针对问题:提供统一接口访问集合,屏蔽集合内部数据的访问和数据结构。提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。
迭代器模式的结构图:
迭代器模式的实现代码:
/**
* 迭代接口
* @author bruce
*
*/
public interface Iterator {
public Object first();
public Object next();
public boolean isDone();
public Ob ...
针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以将这些类抽象出一个继承结构,将重复的部分放在父类中来实现复用,而不同的地方由子类提供实现,和工厂方法模式类似。并且由子类提供实现这些思想可以大量用于类似回调的功能,例如java api 集合的排序功能。
模板方法模式 定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。
模板方法模式结构图:
模板方法模式实现代码:
/**
* 模板父类
* @author bruce
...
针对问题:在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。 那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?
为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。——Gang of Four
外观模式结构图:
外观模式实现代码:
/**
* 实例A
* @author bruce
*
*/
public c ...
针对问题:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four
适配器模式结构图:
适配器模式实现代码:
/**
* 现实存在的接口
* @author bruce
*
*/
public interface Adaptee {
public void specificRequest();
}
/**
* 客户期望的接口
* @author bruce
*
*/
public ...
针对问题:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式。在命令模式上可以看到观察者模块和代理模块的影子,事实上就是两者的结合。
命令模式结构图:
命令模式实现代码:
/**
* 命令接口
* @author bruce
*
* ...
单例是乎没什么好说的,创建的过程中需要考虑到的是并发安全问题和性能优化。
实现代码:
/**
* 用“双重检查加锁”,在getInstance()中减少使用同步
* @author bruce
*
*/
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
if(uniqueInstance==n ...
针对问题:和工厂方法模式类似,用一个继承体系来实现创建对象的多变性。不同的是,抽象工厂模式针对的是产品族(许多个产品).
抽象工厂模式结构图:
抽象工厂模式实现代码:
/**
* 产品A接口
* @author bruce
*
*/
public abstract class ProductA {
public abstract void descriptionA();
}
/**
* 产品B接口
* @author bruce
*
*/
publi ...
针对问题:当要创建的产品种类很多,并且会随着时间的推移会不断改变时。可以将这些变化的部分抽离出来作为一个继承结构,运用多态的动态性来替换本来的改变。
工厂方法模式结构图:
工厂方法实现代码:
/**
* 产品接口
* @author bruce
*
*/
public abstract class Product {
public abstract void description();
}
/**
* 创建者接口
* @autho ...