0%

引子

设计模式的六大原则

结构型设计模式

结构性设计模式描述 如何将类或者对象按某种布局组成更大的结构。

它分为类结构型模式和对象结构型模式,
前者采用继承机制来组织接口和类,
后者采用组合或者聚合组合对象。

由于组合关系或聚合关系比较继承关系耦合度低,满足“合成复合原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。

结构型模式分为以下7种:

  1. 代理模式(Proxy): 为某对象提供一种代理以控制对象的访问。即客户端通过代理简介的访问该对象,从而限制、增强或修改该对象的一些特征。

  2. 适配器模式(Adapter): 将一个类的接口转换成希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

  3. 桥接模式(Bridge): 将抽象和实现分离,使得他们可以独立变化。是用组合关系代替继承关系来实现的,从而降低了抽象和实现这两个可变维度的耦合度。

  4. 装饰模式(Decorator):动态的给对象正将一些职责,即增加其额外的功能。

  5. 外观模式(Facade):为多个复杂的子系统提供一个一致的接口,使得这些子系统更加容易被访问。

  6. 享元模式(Flyweight): 使用共享技术来有效的支持大量细粒度对象的复用。

  7. 组合模式(Composite):将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

    阅读全文 »

引子

在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。

如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。这样的例子还有很多,例如,你刚刚参加工作想租房,可以找“房屋中介”;或者,自己刚刚到一个陌生城市找工作,可以找“人才交流中心”帮忙。

在软件的开发过程中,这样的例子也很多,例如,在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;还有大家常用的 QQ 聊天程序的“中介者”是 QQ 服务器。所有这些,都可以采用“中介者模式”来实现,它将大大降低对象之间的耦合性,提高系统的灵活性。

阅读全文 »

数据结构-跳表

SkipList

跳表的原理

什么是跳表

链表,相信大家都不陌生,维护一个有序的链表是一件非常简单的事情,我们都知道,在一个有序的链表里面,查询跟插入的算法复杂度都是O(n)。

对上述有序列表建立一层索引
这样 就可以加速查询效率和 插入效率
比如查找 11,不加索引的需要查找 6次
加了一层索引以后,只需要查找 4次
查找速度为 O(n/2) +1

如果再加一层索引 就变成是 O(n/4) + 2

跳表就是这样的一种数据结构,结点是跳过一部分的,
从而加快了查询的速度。跳表跟红黑树又有什么差别呢?

既然两者的算法复杂度差不多,为什么Redis要使用跳表而不使用红黑树呢?
跳表相对于红黑树,主要有这几个优点:

  1. 代码相对简单
  2. 如果我们要查询一个区间里面的值,用平衡树可能会麻烦。
    这里的麻烦指的是实现和理解上,平衡二叉树查询一段区间也是可以做到的。
  3. 删除一段区间,这个如果是平衡二叉树,就会相当困难,
    毕竟设计到树的平衡问题,而跳表则没有这种烦恼。
阅读全文 »

引子

安装NodeJs

Windows

  1. 安装Nodejs

  2. 通过npm安装yarn

yarn 是facebook的一套包管理器

1
npm install -g yarn
  1. 通过yarn安装umi
1
yarn global add umi
阅读全文 »

引子

安装NodeJs

Node安装

Windows

官网下载
https://nodejs.org/en/
我用的是v6.10
安装完使用 node -v 验证下

Mac

  1. 安装 homebrew
1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. brew 升级
1
brew update
  1. 确保brew安全可靠
1
brew doctor
  1. 修复警告

  2. 通过brew安装node和npm

1
2
3
brew link node
brew uninstall node
brew install node
阅读全文 »

引子

安装HomeBrew,Mac用的少,记录下,以免忘记

安装

方式1. 简单的脚本安装brew [网络正常访问raw.githubusercontent.com]

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

方式2. ruby shell [网络正常访问raw.githubusercontent.com]

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

由于网络资源的原因,国内使用上面的方式很慢,经常失败,解决办法以下两种

方式3. 替换镜像源

方式4. 使用全局代理(挂VPN)

错误处理

阅读全文 »