快速复习
Redis
数据结构
1、5中基本数据结构
- string:SDS,三种编码方式(int、embstr、raw)
- list:linkedlist、ziplist——quicklist(linkedlist+ziplist)
- hash:zip、dict(hashtable),扩容(两个表,渐进式的rehash)
- set:inset(int16)、dict
- zset:ziplist、skiplist(做索引)
2、3中特殊数据结构
- bitmap:布隆过滤器、在线人数
- geospatial
- HyperLogLogs
缓存
1、缓存淘汰
- 淘汰的机制
- 最近最久未使用lru(设置了过期时间的,全部的)
- 最不经常使用lfu
- 随机
- 淘汰的策略
- 定期
- 定时
- 惰性
2、缓存一致
- 分类
- 旁路缓存
- 读:先读缓存,缓存里面没有就从数据库直接返回,再写入缓存
- 写:先写数据库,再删除缓存
- 能不能先删除缓存再更新数据库——缓存和DB数据不一致——延迟双删
- 读写穿透
- 读:先读缓存,再读数据库,先更新缓存再返回
- 写:缓存中没有直接写数据库,缓存中有,先写缓存再让缓存更新数据库
- 异步缓存
- 读:和穿透一样
- 写:不直接更新DB,只更新缓存,再批量更新数据库
- 旁路缓存
3、缓存异常
- 缓存击穿:热点数据提前进缓存
- 缓存穿透:布隆过滤器
- 缓存雪崩:大量请求直接到服务器上
集群
1、主从复制
2、哨兵
3、集群模式(master、slave):切分
数据结构和算法
数据结构
1、树
- B+树
- 省空间、查询速度稳定、叶子节点相连遍历更快
- 红黑树
- 每个节点是非红即黑的
- 这个节点和子节点颜色是相反的
- 根节点是黑的
- 叶子节点是黑的
- 路径上黑色节点的个数是相同的
算法
- 排序算法
- 时间复杂度:归并、快速、堆是 O ( N l o g N ) O(NlogN) O(NlogN),快速最坏是 O ( n 2 ) O(n^2) O(n2)
Linux
1、find是查路径下的文件,grep是查文件内容
2、查某个数据在那个文件下:grep -Ri 路径 -e 数据名
3、查看日志
- 查看实时日志:tail -n 5 file.log
- 查看日志关键词:cat file.log | grep -A(B/C) 关键词
- 用编辑器看:vim/vi file.log
4、查看进程:top / ps -aux
5、查看线程:top -Hp pid
6、改权限:chmod 路径/文件 权限(111 111 111)
设计模式
7大原则
- 开闭原则(OCP):向扩展开发,向修改关闭
- 设计一个计算器,实现加减乘除
- 里氏替换
- 依赖倒置
- 单一职责
- 迪米特法则
- 接口隔离
- 合成复用
GOF23
-
创建型
-
单例模式
-
懒汉(双重校验锁)
-
class Singleton{ private volatile static Singleton singleton; private Singleton(){} public static Singleton newSingleton(){ if(singleton==null){ synchronized(Singleton.class){ if(singleton==null){ singleton = new Singlenton; } } } return singleton; } }
-
-
饿汉
-
class Singleton{ private static Singleton singleton = new Singlenton; private Singleton(){} public static Singleton newSingleton(){ return singleton; } }
-
-
-
工厂模式
-
简单工厂
-
产品继承同一接口,用户创建工厂对象从而创建产品
-
需要修改代码
-
interface Product{ void method(); } class AProduct implements Product{ @override void method(){} } class simpleFactory{ static Product newProduct(String type){ Product product; if(type=="AProduct"){ product = new AProduct(); } return product; } }
-
-
工厂方法
-
interface Product{ void method(); } class AProduct implements Product{ @override void method(){} } abstract Factory{ abstract Product newProduct(); } class AProductFactory extends Factory{ @override Product newProduct(){ return new AProduct(); } }
-
-
抽象工厂
-
产品和品牌,是对应的对象族,二维的
-
// 抽象工厂 public interface ProductFactory { // 生产手机 IphoneProduct iphoneProduct(); // 生产路由器 IRouterProduct irouterProduct(); } //手机产品接口 public interface IphoneProduct { void start(); } //路由器接口 public interface IRouterProduct { void setting(); } // 小米手机 public class XiaomiPhone implements IPhoneProduct { @Override public void start() { System.out.println("小米开机"); } } // 小米路由器 public class XiaomiRouter implements IRouterProduct { @Override public void setting() { System.out.println("小米设置"); } } // 小米工厂 public class XiaomiFactory implements IProductFactory { @Override public IPhoneProduct iPhoneProduct() { return new XiaomiPhone(); } @Override public IRouterProduct iRouterProduct() { return new XiaomiRouter(); } }
-
-
-
-
结构型
- 适配器
- 桥接
- 代理
- 静态代理
- 动态代理
- JDK InvokeHandle
- Cglib
- 装饰器
-
行为型
- 观察者
RestFul风格
定义:资源(url)在网络中的状态转移
规范
- 动作
- get、post那些
- get、post的区别
- 请求参数的位置
- 可携带数据的大小
- 安全性
- 是否可以缓存
- 命名/路径
- 不用动词
- 用中线
- 版本化
GIT
撤销和回滚
合并冲突解决