自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (1)基础

文章目录定义数据结构和算法的关系复杂度分析常用数据结构常用算法定义数据结构:指一组数据的存储结构算法:操作数据的一组方法数据结构和算法的关系数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。复杂度分析复杂度分析是数据结构和算法的精髓。数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是...

2019-09-17 11:25:29 120 1

原创 设计模式-目录

目录List item

2019-04-30 14:19:28 57

原创 (20)设计模式-职责链模式

文章目录1. 定义2. 通用类图3. 其他1. 定义职责链模式 的英文翻译是 Chain Of Responsibility Design Pattern。将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。2. 通用类图3. 其他在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链

2020-06-24 22:28:20 196

原创 (19)设计模式-策略模式

文章目录1. 定义2. 通用类图3. 优缺点3.1 优点3.2 缺点4. 使用场景5. 总结1. 定义策略模式,英文全称是 Strategy Design Pattern。定义为:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端。2. 通用类图3. 优缺点3.1 优点算法可以自由切换。避免使用多重条件判断。扩展性良好。3.2 缺点策略类数量增多。所有的策略类都需要对外暴露。4. 使用场景多个类只有在算法或行为上稍

2020-06-24 22:05:21 211

原创 (18)设计模式-模板模式

文章目录1. 定义2. 通用类图3. 优点4. 使用场景5. 回调的原理6. 模板模式 VS 回调1. 定义模板模式,全称是 模板方法设计模式,英文是 Template Method Design Pattern。定义为:模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。2. 通用类图注意:为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。3. 优点封庄不变部分,扩

2020-06-24 21:29:36 220

原创 (17)设计模式-观察者模式

文章目录1. 定义2. 通用类图3. 优缺点3.1 优点3.2 缺点4. 其他创建型设计模式主要解决 “对象的创建” 问题,结构型设计模式主要解决 “类或对象的组合或组装” 问题,那行为型设计模式主要解决的就是 “类或对象之间的交互” 问题。行为型设计模式有 观察者模式、模板模式、策略模式、职责链模式、状态模式、迭代器模式、访问者模式、备忘录模式、命令模式、解释器模式、中介模式。1. 定义观察者模式(Observer Design Pattern)也叫作发布订阅模式,定义为:定义对象间一种一对多的

2020-06-24 20:57:37 170

原创 (16)设计模式-享元模式

文章目录1. 定义2. 通用类图3. 优缺点4. 使用场景5. 享元模式 vs 单例、缓存、对象池5.1 享元模式跟单例的区别5.2 享元模式跟缓存的区别5.3 享元模式跟对象池的区别1. 定义享元模式(Flyweight Design Pattern)是池技术的重要实现方式。定义为:使用共享的对象可有效地支持大量的细粒度的对象。所谓 “享元”,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。2. 通用类图3. 优缺点享元模式是一个非常简单的模式,它可

2020-06-23 20:27:18 203

原创 (15)设计模式-组合模式

文章目录1. 定义2. 通用类图1. 定义将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整体”的层次结构。组合模式也叫作合成模式,有时又叫做部分-整体模式。将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。2. 通用类图组合模式的设计思路,与其说是一种设计模式,倒不如说是对业务场景的一种数据结构和算法的抽象。其中,数据可以表示成树这种数据结构,业务需求可以通过在树上的递归遍历算法来实现。组合模式,将一组对象组织成树形结构,

2020-06-23 20:03:31 159

原创 (14)设计模式-门面模式

文章目录1. 定义2. 通用类图3. 优点4. 使用场景1. 定义门面模式,也叫外观模式,英文全称是 Facade Design Pattern。在 GoF 的《设计模式》一书中,门面模式是这样定义的:门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容易于使用。2. 通用类图3. 优点减少系统的相互依赖提高了灵活性提高安全性4. 使用场景解决易用性问题。解

2020-06-23 19:51:02 105

原创 (13)设计模式-适配器模式

文章目录1. 定义2. 通用类图3. 代码4. 使用场景5. 代理、桥接、装饰器、适配器 4 种设计模式的区别1. 定义将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。适配器模式的英文翻译是 Adapter Design Pattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对

2020-06-22 22:38:25 143

原创 (12)设计模式-装饰器模式

文章目录1. 定义2. 通用类图3. 装饰器的优缺点3.1 优点3.2 缺点4. 装饰模式的使用场景5. 装饰器模式特殊地方1. 定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。Java IO 使用的就是装饰器模式。2. 通用类图3. 装饰器的优缺点3.1 优点装饰类和被装饰类可以独立发展,而不会相互耦合。装饰模式是继承关系的一个替代方案。装饰器模式可以动态地扩展一个实现类的功能。3.2 缺点多层的装饰是比较复杂的。4. 装饰模式的使用场景

2020-06-22 22:19:37 126

原创 (11)设计模式-桥接模式

文章目录1. 定义2. 通用类图3.优点及使用场景3.1 优点3.2 使用场景1. 定义桥接模式,也叫作 桥梁模式,英文是 Bridge Design Pattern。定义是将抽象和实现解耦,让它们可以独立变化。还有另外一种理解方式:“一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。”对于第一种 GoF 的理解方式,弄懂定义中 “抽象” 和 “实现” 两个概念,是理解它的关键。定义中的 “抽象”,指的并非 “抽象类 ”或 “接口” ,而是被抽象出来的

2020-06-22 21:48:21 199

原创 (10)设计模式-代理模式

文章目录1. 定义2. 通用类图3.1. 定义2. 通用类图3.

2020-06-22 21:24:40 103

原创 (9)设计模式-建造者模式

文章目录1. 定义2. 通用类图3. 原型模式的两种实现方法1. 定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。2. 通用类图3. 原型模式的两种实现方法原型模式有两种实现方法,深拷贝和浅拷贝。浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用

2020-06-21 21:45:57 112

原创 (8)设计模式-建造者模式

文章目录1. 定义2. 类图3. 建造者模式使用场景4. 工厂模式和建造者模式区别1. 定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。英文为 Builder 模式,中文翻译为 建造者模式 或者 构建者模式,也有人叫它 生成器模式。2. 类图3. 建造者模式使用场景把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填的属性有很多,把这些必填属性都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。如果把必填属性通过 set() 方法设置,那校

2020-06-19 10:46:16 94

原创 (7)设计模式-工厂模式

文章目录1. 简单工厂(Simple Factory)2. 工厂方法模式(Factory Method)3. 抽象工厂模式(Abstract Factory)工厂模式分为三种类型:简单工厂、工厂方法和抽象工厂。1. 简单工厂(Simple Factory)2. 工厂方法模式(Factory Method)3. 抽象工厂模式(Abstract Factory)...

2020-06-19 10:13:52 110

原创 (6)设计模式-单例设计模式

文章目录1. 什么是单例设计模式2. 为什么要使用单例3. 单例的实现3.1 饿汉式3.2 懒汉式3.3 双重检测3.4 静态内部类3.5 枚举1. 什么是单例设计模式单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。2. 为什么要使用单例从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。除此之外,还可以使用单例解决

2020-06-18 09:13:13 81

原创 (5)设计模式-改善代码质量的20条编程规范

文章目录1. 命名与注释1.1 命名1.2 注释2. 代码风格3. 编程技巧1. 命名与注释1.1 命名命名的关键是能准确达意。对于不同作用域的命名,我们可以适当地选择不同的长度。利用上下文简化命名。 可以借助类的信息来简化属性、函数的命名,利用函数的信息来简化函数参数的命名。命名要可读、可搜索。1.2 注释注释的目的就是让代码更容易看懂。只要符合这个要求的内容,就可以将它写到注释里。总结一下,注释的内容主要包含这样三个方面:做什么、为什么、怎么做。对于一些复杂的类和接口,可能还需要写明

2020-06-16 19:41:31 122

原创 (4)设计模式-重构

文章目录1. 为什么要重构(why)2. 重构什么(what)3. 什么时候重构(when)4. 如何重构(how)5. 保证重构不出错,能落地的技术手段5.1 什么是单元测试5.2 为什么要写单元测试1. 为什么要重构(why)重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。首先,重构是时刻保证代码质量的一个极其有效的手段,不至于让代码腐化到无可救药的地步。其次,优秀的代码或架构不是一开始就能完全设计好的,就像优秀的公司和产品也都是迭代出来的

2020-06-16 19:40:53 1393

原创 (3)设计模式-设计原则

文章目录单一职责原则(SRP)本文包括的设计原则有:SOLID、KISS、YAGNI、DRY、LOD 。SOLID原则分别是:单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则。单一职责原则(SRP)单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。一个类或者模块只负责完成一个职责(或者功能)。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。如何判断类的职责是否足够单一类中的代码行数、函数或属性过多,会影响代码的可

2020-06-14 21:35:22 157

原创 (2)设计模式-面向对象

文章目录什么是面向对象什么是面向对象

2020-06-07 20:37:05 265

原创 (2)Java并行程序基础----初始化线程及其方法

文章目录1. 关于进程2.线程的基本知识2.1 线程的创建2.2 终止线程2.3 线程中断2.4 等待(wait)和通知(notify)2.5 挂起(suspend)和继续执行(resume)2.6 等待线程结束(join)和谦让(yield)1. 关于进程进行是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程是轻量级的进程,是程序执行的最小单位。2.线程的基本知识2.1 线程的创建线程创建可以 new 一个线程对象,调用该对象的start()方法,如下Thread t1

2020-06-07 20:12:08 158

原创 (1)设计模式-导读

文章目录1. 为什么要学习设计模式2. 评判代码好坏的维度2.1 可维护性1. 为什么要学习设计模式设计模式讲的是如何写出可扩展、可读、可维护的高质量代码。应对面试中的设计模式相关问题。告别写被人吐槽的烂代码。提高复杂代码的设计和开发能力。让读源码、学框架事半功倍。为职场发展做铺垫。2. 评判代码好坏的维度维度包括:可维护性、可读性、可扩展性、灵活性、简洁性(简单、复杂)、可复用性、可测试性。2.1 可维护性所谓的“维护”无外乎就是修改 bug、修改老的代码、添加新的代码之类的

2020-06-06 08:03:57 139

原创 (1)走入并行世界

文章目录1.同步(Synchronous)和异步(Asynchronous)2.并发(Concurrency)和并行(Parallelism)3.临界区4.阻塞(Blocking)和非阻塞(Non-Blocking)5.死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)死锁饥饿活锁6.并发级别阻塞无饥饿无障碍无锁无等待1.同步(Synchronous)和异步(Asynchronous)同步和异步通常用来形容一次方法调用。同步调用一旦开始,调用者必须等到方法调用返回后,

2020-05-26 08:24:51 117

原创 (4)Java基础

文章目录1.作用域的区别2.final, finally, finalize的区别3.Gabage Collection4.heap 和 stack5.字节流与字符流1.作用域的区别作用域当前类同一个 package子孙类其他 packagepublicOOOOprotectedOOOXfriendlyOOXXprivate...

2020-01-20 08:52:24 91

原创 (3)Java基础

文章目录1.反射机制2.final 关键字3.一个 .java 源文件是否可以包含多个类4.& 与 &&5.integer 通过 == 比较1.反射机制JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...

2020-01-19 09:11:01 76

原创 (2)Java基础

文章目录1.接口和抽象的区别2.Super面试题题一题二3.Static 关键字4.equals() 与 hashcode()5.== 和 equal 的区别1.接口和抽象的区别抽象类可以有构造方法 接口不行抽象类可以有普通成员变量 接口没有抽象类可以有非抽象的方法 接口必须全部抽象抽象类的访问类型都可以 接口只能是 public abstract一个类可以实现多个接口 但只能继承一个...

2020-01-17 11:05:55 84

原创 (1)Java基础

1.面向对象的特征有哪些方面封装让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量抽象声明方法的存在而不去实现它的类被叫做抽象类继承继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性多态多态就是指一个变量, 一个方法或者一个对象可以有不同的形式.2.一个类是由哪些变量...

2020-01-16 15:37:46 90

原创 (2)插入排序算法

插入排序算法,使用整数数组进行举例。/** * 插入排序 */ public static void insertSort(int[] items) { if (null == items || items.length < 2) { return; } // i初始为1 表示有1个已...

2020-01-14 10:29:13 79

原创 (1)冒泡排序算法

冒泡排序算法,以整数数组为例进行排序。/** * 冒泡排序法 */ public static void bubbleSort(int[] items) { if (null == items || items.length < 2) { return; } // i表示有多少个数值已经...

2020-01-14 09:52:32 73

原创 (9)冒泡排序

文章目录介绍优化代码介绍冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。优化当某次冒泡操作已经没有数据交换时,说明已经达到安全有序,不用再继续执行后续的冒泡操作。代码// 冒泡排序,a 表示数组,n 表示数组大小publ...

2020-01-13 15:04:30 656

原创 代码块

public class HelloA { static { System.out.println("A static"); } { System.out.println("A code block"); } public HelloA(){ System.out.println("A construst"...

2019-10-12 09:57:23 73

原创 Math.round

float naN = Float.NaN; System.out.println("NaN is " + Math.round(naN)); System.out.println("10.46 is " + Math.round(10.46)); System.out.println("10.5 is " + Math.round(10.5)); System.out.printl...

2019-10-12 09:35:23 142

原创 (8)排序基本介绍

文章目录常用排序算法分析排序算法常用排序算法冒泡排序插入排序选择排序归并排序快速排序计数排序基数排序桶排序分析排序算法排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数、低阶比较次数和交换(或移动)次数排序算法的内存消耗算法的内存消耗可以通过空间复杂度来衡量。原地排序,指空间复杂度是O(1)的排序算法。排序算法的稳定性...

2019-09-24 13:42:40 73

原创 (7)递归

文章目录定义理解使用递归满足的三个条件使用递归容易造成的问题定义在运行的过程中调用自己。理解所有的递归问题都可以用递推公式来表示,如下为递推公式。f(n)=f(n-1)+1 其中,f(1)=1写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。使用递归满足的三个条件一个问题的解可以分解为几个...

2019-09-19 14:15:40 102

原创 (6)队列

文章目录定义额外特性队列分类和栈的区别循环队列阻塞队列定义队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。先进者先出,这就是典型的队列。额外特性队列循环队列阻塞队列并发队列分类用数组实现的队列叫做顺序队列;用链表...

2019-09-19 12:14:11 133

原创 (5)栈

文章目录定义分类定义栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。后进者先出,先进者后出,这就是典型的栈结构。分类用数组实现的栈,叫做顺序栈。用链表实现的栈,叫做链式栈。...

2019-09-19 11:41:50 75

原创 (4)链表

文章目录定义定义

2019-09-18 18:49:19 107

原创 (3)数组

文章目录定义线性表非线性表数组和链表的区别定义数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。数组、链表、栈、队列等也是线性表结构。非线性表非线性表中,数据之间并不是简单的前后关系,比如二叉树、堆、图等。数组和链表的区别数组是支持随机访问,根据下标随机访问的时间复杂...

2019-09-17 16:25:21 213 1

原创 (2)复杂度分析

文章目录事后统计法大O复杂度表示法时间复杂度分析几种常见时间复杂度最好情况时间复杂度最坏情况时间复杂度平均情况时间复杂度均摊时间复杂度事后统计法将代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。但是这种方法有非常大的局限性测试结果非常依赖测试环境;测试结果受数据规模的影响很大;大O复杂度表示法算法的执行效率,粗略的讲,就是算法代码执行的时间。T(n)=O(...

2019-09-17 15:32:24 145

空空如也

空空如也

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

TA关注的人

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