张晗的个人博客

技术的价值是业务

字符串键是 Redis 中最基本的键值对类型,被关联的 k-v 既可以是普通文本数据,有可以是二进制数据。

阅读全文 »

描述

冒泡排序会从头开始依次比较 2 个相邻元素的大小,如果顺序错误就交换,直到没有相邻元素需要交换,即排序完成。每进行一次循环,就会有固定一个排序元素到末尾。

补充

  • 由于末尾是目标位置,所以不用放在循环中;
  • 使用 flag 来描述一次循环是否有需要交换的元素,如果没交换,说明已经有序,则不用接下来的循环。

时间复杂度

O(n^2)

示例代码

golang

java

描述

选择排序首先会找到数组中最小的元素;其次,交换它和第一个元素;再其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换。

如此往复,直到将整个数组排序。

补充

  • 由于需要寻找最小的,所以每个元素都需要比较;
  • 冒泡排序是比较后,满足要求就交换;而选择排序是先比较一轮,最后只交换一次。所以选择排序的步数大概只有冒泡排序的一般,即选择排序比冒泡排序快一倍。

时间复杂度

O(n^2)

示例代码

golang

java

模式描述

提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类。

优点

  1. 分离了具体的产品类;
  2. 有利于产品一致性;

缺点

  1. 难以扩展抽象工厂

应用场景

  1. 一个系统要独立产品的创建、组合和表示;
  2. 一个系统要由多个产品系列中的一个来配置;
  3. 提供一个产品库,只显示接口而非实现;
阅读全文 »

模式描述

定义对象间的一对多关系,当一个对象的状态发生改变时,所有依赖与它的对象都得到通知并自动被更新。

优点

  1. 目标和观察者解耦;
  2. 支持对观察者的广播通讯;

缺点

  1. 依赖准则的定义和维护不当,会引起错误更新,而且很难排查;

应用场景

  1. 一个对象改变,其他待定的对象同时需要改变;
  2. 解耦 1 个模型中,相互依赖的 2 个方面;
阅读全文 »
0%