后端剩余知识点快速复习

本文详细介绍了Redis中的5种基本数据结构(string、list、hash、set、zset)和3种特殊结构(bitmap、geospatial、HyperLogLogs),涵盖了缓存淘汰策略、一致性处理及异常案例。同时,讲解了主从复制、哨兵和集群模式,涉及树结构(B+树、红黑树)和算法(排序、Linux实用技巧)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速复习

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

撤销和回滚

合并冲突解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值