知识点整理

本文探讨了索引在项目中的应用,包括B+树原理,ACID特性在事务管理中的作用,以及MVCCLBCC中的MVCC与数据库锁概念。还涉及了分库分表、Redis的数据结构和注意事项,以及Redis持久化策略。最后,介绍了Websocket、单例模式和系统优化的相关知识点。

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

  1. 项目中的应用,索引生效和实效

  2. 索引原理

    索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash。

    Mysql使用的索引是B+树

  3. acid

    • 原子性

      事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

    • 一致性

      执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的

    • 隔离性

      并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

    • 持久性

      一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

  4. Mvcc lbcc

    • Mvcc

      • Mvcc在Innodb存储引擎中主要依赖于隐藏字段、read View、 undo log实现的。

        通过比较数据行中的隐藏字段DB_TRX_ID(事务ID)和read View判断数据的可见性,如果不可见,通过DB_ROLL_PTR(维护行数据版本链 指针指向)到undo log中寻找历史版本,找到所需要的数据版本。

      • Mvcc在mysql中只在RC和RR两个隔离级别下起作用在RC中,在一个事务中每次查询都会生成read View,解决了脏读,但是仍然存在不可重复度的问题。在RR隔离级别下,Mvcc在一个事务下,只会在第一次查询(select)生成read View,后续对数据的可见性都依靠此read vIew判断,从而解决可重复读问题。

        如何判断当前事务的可见性?

        read View中有一个列表来存储我们系统中当前活跃着的读写事务,也就是开始了还未提交的事务(事务开启时会分配到一个事务ID)。通过这个列表来判断记录的某个版本是否对当前事务可见。含有以下几个重要属性:

        up_limit_id:当前已经提交的事务号 + 1,事务号 < up_limit_id ,对于当前Read View都是可见的。理解起来就是创建Read View视图的时候,之前已经提交的事务对于该事务肯定是可见的。

        low_limit_id:当前最大的事务号 + 1(即下一个将被分配的事务ID),事务号 >= low_limit_id,对于当前Read View都是不可见的。理解起来就是在创建Read View视图之后创建的事务对于该事务肯定是不可见的。

        trx_ids:为活跃事务id列表,即Read View初始化时当前未提交的事务列表。所以当进行RR读的时候,trx_ids中的事务对于本事务是不可见的(除了自身事务,自身事务对于表的修改对于自己当然是可见的)。理解起来就是创建RV时,将当前活跃事务ID记录下来,后续即使他们提交对于本事务也是不可见的。

        [https://zhuanlan.zhihu.com/p/66791480]   参考文章

        [https://blog.youkuaiyun.com/Waves___/article/details/105295060#1.2%E3%80%81Read%20View%20%E7%BB%93%E6%9E%84]   参考文章

    • Lbcc

  5. 数据库锁

    • 行锁

    • 表锁

    • 间隙锁

    • 临建锁(行锁 + 间隙锁)

    • 共享锁

    • 乐观锁

    • 意向锁

      • 意向乐观锁

      • 意向悲观锁

  6. 分库分表

  7. Redis 数据结构和项目中使用

    • string

    • list

    • hash

    • set

    • zset

  8. Redis注意的问题

    • 缓存穿透

    • 缓存雪崩

  9. Redis的持久化

    • RDB (快照持久化)

      通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。

      Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis 主从结构,主要用来提高 Redis 性能),还可以将快照留在原地以便重启服务器的时候使用。

      保存的是数据,可以设置T时间段内有N个数据变换便对数据进行持久化。

    • AOF (追加文件方式持久化)

      与快照持久化相比,AOF 持久化的实时性更好,因此已成为主流的持久化方案。默认情况下 Redis 没有开启 AOF(append only file)方式的持久化,可以通过 appendonly 参数开启:

      appendonly yes

      开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入到内存缓存 server.aof_buf 中,然后再根据 appendfsync 配置来决定何时将其同步到硬盘中的 AOF 文件。

      AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件名是 appendonly.aof

      在 Redis 的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:

      appendfsync always    #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
      appendfsync everysec  #每秒钟同步一次,显式地将多个写命令同步到硬盘
      appendfsync no        #让操作系统决定何时进行同步
  10. 消息队列特性以及使用fifo

  11. Hashmap

  12. 项目描述:加强

  13. http一次请求以及resful

  14. Websocket

    套接字长连接,可实现服务端主动向客户端发送信息。

  15. 设计模拟

    单例

    • 懒汉式

      public class Singleton {  
          private static Singleton instance;  
          private Singleton (){}  
          public static synchronized Singleton getInstance() {  
              if (instance == null) {  
                  instance = new Singleton();  
              }  
              return instance;  
          }  
      }

    • 饿汉式

      public class Singleton {  
          private static Singleton instance = new Singleton();  
          private Singleton (){}  
          public static Singleton getInstance() {  
          return instance;  
          }  
      }

    • 双重校验锁(volatile)

      public class Singleton {  
          private volatile static Singleton singleton;  
          private Singleton (){}  
          public static Singleton getSingleton() {  
          if (singleton == null) {  
              synchronized (Singleton.class) {  
                  if (singleton == null) {  
                      singleton = new Singleton();  
                  }  
              }  
          }  
          return singleton;  
          }  
      }

  16. 系统优化认识多少

    小结

  • 知识储备不错,回答有些生硬和回答点太泛。

  • 项目描述的时候可以直接表述自己的负责点,让面试官可以快速了解你的工作点。可以知识点和项目结合起来。找到发力点。

  • 简历中可以添加自己的学校荣誉。

  • 最后面试完可以和面试官了解下公司情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值