自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 适配器模式(Adapter)

1.简述适配器模式就是将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。下面这个例子很好的说明了适配器的作用2.角色 目标角色(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 源角色(Adaptee)也就是被适配的类:需要适配的类或适配者类。 适配器角色(Adapter):通过包装一个需要适配...

2018-10-30 13:25:51 373

原创 策略模式(Strategy)

1.简述策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。2.角色Context(应用场景):需要使用ConcreteStrategy提供的算法。内部维护一个Strategy的实例。负责动态设置运行时Strategy具体的实现算法。负责跟Strategy之间的交互和数据传递。 Strategy(抽象策略类):定义...

2018-10-29 15:38:14 415

原创 Object类clone方法深度解析

首先我们来看下clone方法的源码protected native Object clone() throws CloneNotSupportedException;通过源代码可以发现几点:clone方法是native方法,native方法的效率远高于非native方法,因此还是使用clone方法去做对象的拷贝而不是使用new的方法,copy。 此方法被protected修饰。这...

2018-10-28 17:07:23 934

原创 桥接模式(Bridge)

1.简述桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。将抽象部分与他的实现部分分离这句话不是很好理解,其实这并不是将抽象类与他的派生类分离,而是抽象类和它的派生类用来实现自己的对象。这样还是不能理解的话。我们就先来认清什么是抽象化,什么是实现化,什么是脱耦。抽象化:从众多...

2018-10-28 12:36:01 402

原创 模板方法模式(Template)

1.简述模板模式:定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2.角色角色1:抽象模板(Abstract Template)角色有如下责任定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。 定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一...

2018-10-28 10:52:26 395

原创 抽象工厂模式(Abstract Factory)

抽象工厂模式:1.简介    抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不...

2018-10-26 16:55:58 373

原创 单例模式(Singleton)

单例模式: 1、简介: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、...

2018-10-23 17:18:09 496

原创 工厂方法模式(Factory Method Pattern)

工厂方法简介:工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式是简单工厂模式的衍生(简单工厂模式请见连接:https://bl...

2018-10-22 18:42:09 332

原创 归并排序

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。基本思路:        先递归的把数组划分为两个子数组,一直递归到数组中只有一个元素,然后再调用函数把两个子数组排好序。再依...

2018-10-20 13:15:12 357

原创 Shell(希尔)排序

shell排序算法描述:我们简单处理增量序列:增量序列d = {n/2 ,n/4, n/8 …..1} n为要排序数的个数 ,即:先将要排序的一组记录按某个增量d(n/2,n为要排序数的个数)分成若干组子序列,每组中记录的下标相差d。对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。继续不断缩小增量直至为1,最后使用直接插入排序完成排序...

2018-10-18 17:08:54 424

原创 图解快速排序

快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。算法思想:1.在待排序的元素任取一个元素作为基准(通常选第一个元素)称为基准元素;2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边; 3.对于基准元素左边的元素进行上述步骤的递归调用进行排序,基准元素右边的元素也是如此。你可以把快速排序...

2018-10-18 14:38:43 604 1

原创 LeetCode25.k个一组翻转链表

题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/description/题目描述:该题目是对反转一个链表的升级版。如何反转一个链表我在之前的博客已经写了:https://blog.csdn.net/qq_39241239/article/details/82973024算法描述:1.判断链表,若链...

2018-10-28 19:45:25 489

原创 装饰模式(Decorator)

1.简介装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。2.特点(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。(2) 装饰对象包含一个真实对象的引用(reference)(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。...

2018-10-27 12:35:00 271

原创 简单工厂模式(Factory Pattern)

简单工厂模式又 叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 我们从一个例子展开,现在有一道面试题:使用java实现一个计算机控制台程序,要求输入数的运算,得到结果。 这道题目最原始的写法:public class Client { public static voi...

2018-10-22 17:46:26 185

原创 设计模式分类以及设计原则

设计模式分为三大类:创建型模式   1)Factory模式(简单工厂模式)   2)AbstactFactory模式(抽象工厂模式)   3)Singleton模式(单例模式)   4)Builder模式(建造者模式)   5)Prototype模式(原型模式)结构型模式   6)Bridge模式(桥接模式)   7)Adapter模式(适配器模式)   8)Decorato...

2018-10-22 17:30:58 153

原创 八大排序时间复杂度,稳定性总结

八大排序的稳定性,时间复杂度和空间复杂度总结: 我们比较时间复杂度函数的情况: 所以对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法。...

2018-10-18 13:08:07 1592 1

原创 Oracle中手动创建emp表和dept表

以下的gw为用户名,把gw改成自己的用户名即可使用CREATE TABLE gw.DEPT(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,DNAME VARCHAR2(14),LOC VARCHAR2(13));CREATE TABLE gw.EMP(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMAR...

2018-10-16 16:45:56 3756 1

原创 fail-fast和fail-safe详解

一:快速失败(fail—fast)          在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。          原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount...

2018-10-15 16:49:47 419

原创 Java中的初始化块和构造器的执行顺序

我们都知道java中不但有构造器,还有初始化块和静态初始化块的概念,今天我们就来看看他们之间的执行顺序是怎样的。我们来看一个例子:package test;class Root { static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public ...

2018-10-15 14:54:20 951 1

原创 Oracle中的常用函数

1、数值型常用函数 函数   返回值   样例  显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual  11 floor(n) 小于等于数...

2018-10-13 21:02:22 375

原创 SQL语言的分类

SQL语言的分类SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语言共分为四大类:DQL:Data Query Language 数据查询语言DML:Data Manipulation Language 数据操纵语...

2018-10-13 19:17:23 229

原创 LeetCode206.反转链表

题目来源:https://leetcode-cn.com/problems/reverse-linked-list/description/题目描述:算法描述:该题可以使用递归法和非递归法两种 非递归法:从前向后遍历原链表,将每一个链表头插到新链表上代码如下:struct ListNode* reverseList(struct ListNode* head) {...

2018-10-08 20:27:02 186

原创 LeetCode24. 两两交换链表中的节点

题目来源:https://leetcode-cn.com/problems/swap-nodes-in-pairs/description/题目描述:算法描述:该题目有两种方法解决,一种递归,一种非递归非递归方法:1.如果链表只有一个或者没有节点的话,直接返回head。2.然后先交换第一个和第二个节点。(因为如果只有两个结点的话这是一种特殊情况,需要单独处理)3.如果第...

2018-10-08 19:33:11 245

空空如也

空空如也

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

TA关注的人

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