-
项目中的应用,索引生效和实效
-
索引原理
索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash。
Mysql使用的索引是B+树
-
acid
-
原子性
事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
-
一致性
执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的
-
隔离性
并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
-
持久性
一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
-
-
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
-
-
数据库锁
-
行锁
-
表锁
-
间隙锁
-
临建锁(行锁 + 间隙锁)
-
共享锁
-
乐观锁
-
意向锁
-
意向乐观锁
-
意向悲观锁
-
-
-
分库分表
-
Redis 数据结构和项目中使用
-
string
-
list
-
hash
-
set
-
zset
-
-
Redis注意的问题
-
缓存穿透
-
缓存雪崩
-
-
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 #让操作系统决定何时进行同步
-
-
消息队列特性以及使用fifo
-
Hashmap
-
项目描述:加强
-
http一次请求以及resful
-
Websocket
套接字长连接,可实现服务端主动向客户端发送信息。
-
设计模拟
单例
-
懒汉式
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; } }
-
-
系统优化认识多少
小结
-
知识储备不错,回答有些生硬和回答点太泛。
-
项目描述的时候可以直接表述自己的负责点,让面试官可以快速了解你的工作点。可以知识点和项目结合起来。找到发力点。
-
简历中可以添加自己的学校荣誉。
-
最后面试完可以和面试官了解下公司情况。