Zhengshuai PENG

A Small Developer

Lovian Blog

24 Aug 2016

[Date Structure] 数据结构之栈

数值结构之栈 Stack I. 栈 1. 栈与队列 栈 Stack : 是限定仅在表尾为进行插入和删除操作的线性表 队列 Queue :是只允许在一段进行插入操作,而在另一端进行删除操作的线性表 2. 什么是栈 栈 Stack: 仅在表尾进行插入和删除操作的线性表 栈是后进先出的线性表 LIFO:...

24 Aug 2016

[Date Structure] 数据结构之队列

数值结构之队列 Queue I. 队列 1. 栈与队列 栈 Stack : 是限定仅在表尾为进行插入和删除操作的线性表 队列 Queue :是只允许在一段进行插入操作,而在另一端进行删除操作的线性表 2. 什么是队列 队列 Queue: 只允许在一端进行插入操作,另一端进行删除操作的线性表 允许插入的一端称之为队尾 允许删除的一端称之为队头...

22 Aug 2016

[Date Structure] 数据结构之链表

数据结构之链表 I. 链表 线性表由储存结构可以分为顺序表 sequence list 和链表 linked list。 顺序表由于插入和删除时需要移动大量的元素,所以非常耗费时间,所以就引出了链表 1. 什么是链表 链表 linkedlist 一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的 存储的数据元素可以存在内存中未被占用的任意位置 对每个数据元素 ai 的存储映像来说,我们称之为结点 Node,...

21 Aug 2016

[Date Structure] 数据结构之线性表

数据结构之线性表 I. 线性表 1. 什么是线性表 线性表: linear list 零个或者多个数据元素的有限序列 由相同数据类型的 n 个数据元素 a0,a​1​​ ... an−1​​ 组成的有限序列 a​0​​ 是唯一的“第一个”数据元素,又称为表头元素 a​n−1​​ 是唯一的“最后一个”数据元素,又称为表尾元素...

20 Aug 2016

[Web] Web 服务器和 Tomcat 的使用

Web 服务器和 Tomcat 的使用 I. Web 服务器 1.软件的结构 C/S (Client - Server 客户端-服务器端) 典型应用:QQ软件 ,飞秋,红蜘蛛。 特点: 必须下载特定的客户端程序。 服务器端升级,客户端升级。 B/S (Broswer...

20 Aug 2016

[Web] HTTP 协议

HTTP 协议 I. HTTP 协议 1. 什么是 HTTP 协议 在 BS 结构中,数据是从在浏览器之间交换,如下图所示: 那么数据如何传输,就涉及到网络的问题,而一个web 服务器,简单的说其实就是一个 Socket 服务端,那么就会利用到 TCP/IP 来建立网络连接,然后进行数据的传输。那么,数据传输的格式应该有个标准或者说规范,这样在浏览器和服务器之间才能够根据这个规范来传输数据,所以,就有了 HTTP 协议。...

19 Aug 2016

[JAVA] Java 中面向方面编程(AOP)的思想

面向方面编程的思想 I. 面向方面编程 1. 什么是方面 Aspect 大家可能知道,很多出名的框架比如 Spring, 里面用到了面向方面编程的思想,那么什么是面向方面编程呢?和学习面向对象编程 OOP一样,要先学习 对象 Object 是什么,那么在面向方面编程 AOP 中,我们要先知道什么是方面 Aspect: 可以这样理解,如果把对象看作一个圆柱体,那么其中的一个切面,就是一个方面 如果系统中存在交叉业务,一个交叉业务,就是要切入到系统的一个方面 我们用个例子来说明,有这么三个类: StudentService...

19 Aug 2016

[JAVA] Java 中注解的使用

Java 中注解的使用 I. 注解 Annotation 注解是 JDK 1.5 提供的一个新特性,在框架中大面积的使用了注解,所以在这里讲一下注解 1. 什么是注解 注解相当于一种标记,加了注解就等于打上了某种标记 javac, 开发工具,和其他程序可以通过反射来来了解你的类和各种元素上是否有标记,通过标记去执行相应的处理 标记可以加在包,类,字段,方法,方法的参数以及局部变量上 2. Java 提供的几个基本注解 在 java.lang...

18 Aug 2016

[JAVA] 了解JavaBean

内省 -> 了解 JavaBean I. 什么是 JavaBean JavaBean 是一种特殊的 Java 类: 主要用于传递数据信息 JavanBean 中的方法主要用于访问私有的字段 方法名符合某种命名规则(setter/getter) II. 使用 JavaBean 如果要在两个模块之间,传递多个信息,那么可以将这些信息封装到 JavaBean...

17 Aug 2016

[Design Pattern] 设计模式之模板方法模式

设计模式之模板方法模式 I. 模板方法模式概述 模板方法模式 (Template Method): 行为型模式 定义一个算法的骨架,而将具体的算法延迟到子类中来实现 使得子类可以不改变算法结构,即可重新定义算法中的某些步骤 II. 模板方法模式的结构 一般由一个抽象类和其实现类通过继承结构组成: 抽象类中方法有三种: 抽象方法: 定义好规范由子类来实现 模板方法: 抽象类声明此方法且加以实现 模板方法是调用抽象方法来完成主要的逻辑功能 大多会被定义为 final...

17 Aug 2016

[Design Pattern] 设计模式之单例模式

设计模式之单例模式 I. 单例模式概述 单例模式(Singleton): 创建型模式 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供 私有的构造方法 指向自己实例的私有静态引用 返回自己实例的静态公有方法 II. 单例模式的优缺点 优点: 在系统内存中只存在一个对象,因此可以节约系统资源, 对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能 避免对共享资源的多重占用 可以全局访问 缺点: 没有抽象层,因此扩展很难 职责过重,在一定程度上违背了单一职责 III....

17 Aug 2016

[Design Pattern] 设计模式之工厂模式

设计模式之工厂模式 I. 简单工厂模式 1.简单工厂模式概述 简单工厂模式: 创建型模式 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例 2.简单工厂模式的优缺点 优点 客户端不需要在负责对象的创建,从而明确了各个类的职责 缺点 -这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护 3. 示例 首先我们定义一个抽象类 Animal,定义一个 eat() 抽象方法 package org.lovian.designpattern.simplefactory;...

17 Aug 2016

[Design Pattern] 设计模式之装饰者模式

设计模式之装饰者模式 I. 装饰者模式概述 装饰者模式(Decorator Pattern): 结构型模式 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类 是继承的替代方案 装饰者模式通过组合的方式扩展对象的特性 允许我们在任何时候对对象的功能进行扩展甚至是运行时扩展 用继承来完成对类的扩展则只能在编译阶段实现,所以在某些时候装饰者模式比继承要更加灵活 II. 装饰者模式的特征 装饰者(decorator)和被装饰(扩展)的对象有着相同的超类(supertype)。 我们可以用多个装饰者去装饰一个对象。 我们可以用装饰过的对象替换代码中的原对象,而不会出问题(因为他们有相同的超类)。 装饰者可以在委托(delegate,即调用被装饰的类的成员完成一些工作)被装饰者的行为完成之前或之后加上他自己的行为。 一个对象能在任何时候被装饰,甚至是运行时。 III. 装饰者模式的组成...

15 Aug 2016

[JAVA] Java 类加载器和反射

Java 中类的加载器和反射 I. 类加载器 1. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化: 加载 : 就是指将class文件读入内存,并为之创建一个Class对象 一个class文件基本组成: 成员变量,构造方法,成员方法,静态成员 任何类被使用时系统都会建立一个Class对象。 连接 : 验证: 是否有正确的内部结构,并和其他类协调一致 准备: 负责为类的静态成员分配内存,并设置默认初始化值 解析:...

11 Aug 2016

[Design Pattern] 设计模式之面向对象思想设计原则

设计模式之面向对象思想设计原则 I. 面向对象思想设计原则 在开发面向对象程序时,我们应该遵循以下的原则,这些原则都是为了提高程序的扩展性,维护性,和复用性 1. 单一职责原则 开发人员经常说的”高内聚,低耦合” 每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个 在设计模式中,所有的设计模式都遵循这一原则 2. 开闭原则 核心思想:一个对象对扩展开放,对修改关闭 对类的改动是通过增加代码进行的,而不是修改现有代码 软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去,如何能够做到这一点呢? 这就需要借助于抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现则是可以改变和扩展的 3. 里氏替换原则 核心思想:在任何父类出现的地方都可以用它的子类来替代 同一个继承体系中的对象应该有共同的行为特征 4....

11 Aug 2016

[JAVA] Java 网络编程

Java 网络编程 I. 网络编程概述 1. 计算机网络 计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 2. 网络编程 网络编程,就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 3. 网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题。 OSI(Open System Interconnection开放系统互连)参考模型 应用层:主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用) 表示层 :主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等) 会话层...

10 Aug 2016

[JAVA] Java 中的多线程编程(三) 线程池,匿名线程,定时器

Java 中多线程编程(三): 线程池,匿名线程, 定时器 I. 线程池 1. 什么是线程池 因为程序启动一个新线程的成本是比较高的,因为它要涉及到要与操作系统进行交互,而使用线程池 则可以很好的提供性能,尤其是,当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 线程池中的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用 在 JDK5 之前,我们必须实现自己的线程池,从 JDK5 之后, Java 内置支持了线程池 2. 创建线程池...

02 Aug 2016

[JAVA] Java 中的多线程编程(二) 多线程安全问题

Java 中多线程编程二: 多线程安全问题 I. 线程安全 1. 多线程的问题: 那么首先来看多线程为什么出现问题(出问题的标准): 是否是多线程环境,因为单线程程序只要逻辑正确就没有问题 是否有共享数据, 没有共享数据的话,每个线程只访问和操作自己特有的数据,也不会出问题 是否有多条语句操作共享数据, 因为 cpu 执行指令的原子性,cpu 一次执行一个原子性操作,比如一次加法或者一次赋值 如果有多个线程,每个线程对共享数据的操作只有一个原子性的操作,那么数据也不会出问题 但如果,每个线程中都有多条操作语句操作共享数据,比如 A;B;C; 三个语句,对共享数据进行操作,理想顺序是线程1执行完...

01 Aug 2016

[JAVA] Java 中的多线程编程 (一) 基本概念和使用

Java 中多线程编程一: 多线程的基本概念和使用 I. 单线程程序和多线程程序的引入 如图,我们先来看单线程程序的代码执行顺序: 可以看得出来,代码的执行顺序是一条线从头开始执行直到结束,只有一条执行路径,该程序是单线程程序,那么如果在代码的执行过程中,从一个方法A转向执行另一个方法B的时候,A方法不停止,和B方法一起继续执行,那么这个程序就是多线程程序,如下图: II. 进程线程相关概念 1. 线程和进程 线程依赖于进程而存在 进程: Process 就是正在运行的程序,是系统进行资源分配和调用的独立单位 进程是一个程序在内存中的运行实例 每一个进程都有它自己的内存空间和系统资源 多进程有什么意义? 单进程计算机同时只能做一件事情,而多线程进程可以同时做多件事情,所以多线程能够在一段时间内,执行多个任务,提高cpu的使用效率。然而这并不是说,同一个时间点上,cpu 可以同时处理两个任务,而是在操作系统的资源管理与分配下,cpu...

31 Jul 2016

[JAVA] Java 中的序列化

Java 中的序列化 I. 序列化与反序列化 序列化是一种对象持久化的手段,普遍应用于网络传输和 RMI 的场景 序列化: 把对象按照流一样的方式,存入文本文件或者在网络中传输 对象 –> 流 ObjectOutputStream 反序列化: 把文本中的流对象数据或者网络中的流对象数据还原成对象 流 –> 对象 ObjectInputStream 1....