java StackOverflowError

StackOverflowError

StackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。在栈中会保存局部变量,操作数栈,方法出口等等。jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。

阅读更多
Redis对象与持久化

Redis对象与持久化

Redis使用5种对象来实现键值对数据库:字符串,列表,哈希,集合,有序集合对象。使用这么多对象方便了在不同情景下的使用。

对象的类型与编码

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct redisObject{
//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层数据结构的指针
void *ptr;
//引用计数
int refcount;
//空转时长
unsigned lru:22;
} robj;
阅读更多
Redis简介&数据结构

Redis简介&数据结构

简介

Redis是一个开源的key-value数据库,基于内存,使用c语言编写,因此它很快。适合作用于缓存。

  • Redis支持数据的持久化
  • 提供多种数据结构:String,hash,list,set,zset五种对象
  • Redis的所有操作都是原子性的

数据结构

阅读更多
java注解-Annotation

java注解

概念:注解用于给java代码添加元数据,在编译或者运行时解析处理这些元数据。注解可用于包,类,字段,方法,参数等。可以将理解为给这些包或类等等添加一个标签。

java内置注解

  1. @Override:表示当前的方法定义将覆盖父类中的方法
  2. @Deprecated:表示代码被弃用,如果使用了被@Deprecated注解的代码则编译器将发出警告
  3. @SuppressWarnings:表示关闭编译器警告信息

自定义注解

阅读更多
java反射

java反射

最近使用到了java反射,记一笔笔记。

定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

反射多使用在框架中,控制反转,动态代理都需要使用到反射。

使用反射有一个前提:得到对应字节码的Class对象

反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。

阅读更多
策略模式

策略模式

  • 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。
  • 可以定义一些独立的类来封装不同的算法,每一个类封装一个具体的算法,在这里,每一个封装算法的类我们都可以称之为策略(Strategy),为了保证这些策略的一致性,一般会用一个抽象的策略类来做算法的定义,而具体每种算法则对应于一个具体策略类。

定义

策略模式:定义了算法家族,分别封装起来,让他们之间可以相互替换。

结构

  • Strategy:抽象策略类
  • Context:环境类
  • ConcreteStrategy: 具体策略类
阅读更多
中介者模式

中介者模式

  • 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
  • 对象之间的连接增加会导致对象可复用性降低。
  • 系统的可扩展性低。增加一个新的对象,我们需要在其相关连的对象上面加上引用,这样就会导致系统的耦合性增高,使系统的灵活性和可扩展都降低。

为了解决这种情况,出现了中介者模式

阅读更多
观察者模式

观察者模式

建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。

定义

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听一个对象。这个对象改变时,会通知观察者对象,使它们能够自动更新自己。

结构

  • Subject: 目标,通常是一个接口或者抽象类,具有增删通知等方法
  • ConcreteSubject: 具体目标
  • Observer: 观察者,通常是一个接口或者抽象类
  • ConcreteObserver: 具体观察者
阅读更多
命令模式

命令模式

定义

命令模式:将请求封装成对象,使你可用不同的请求对客户进行参数化,对请求排队或请求日志,以及支持可撤销操作。

结构

  • Command抽象命令类:有执行方法以及命令接受者
  • ConcreteCommand具体命令类:实现执行方法,实际上是调用命令接受者执行命令
  • Receiver命令接受者:接受命令,并且具有执行功能
  • Invoker调用者:请求排队,撤销,执行一些逻辑等等
阅读更多
代理模式

代理模式

在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。(控制被代理的类)

定义

代理模式:给某个对象提供一个代理,并由代理对象控制对原对象的引用,是一种对象结构型模式。

结构

  • 抽象角色
  • 代理角色
  • 具体被代理角色
阅读更多