面试准备
58
分布式事务***2PC,3PC,一致性哈希,Raft
Raft算法
是分布式系统开发首选的共识算法,Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。
分三种角色:
跟随者(Follower):
普通群众
,默默接收和来自领导者的消息,当领导者心跳信息超时的时候,就主动站出来,推荐自己当候选人。候选人(Candidate):
候选人
将向其他节点请求投票 RPC 消息,通知其他节点来投票,如果赢得了大多数投票选票,就晋升当领导者。领导者(Leader):
霸道总裁
,一切以我为准。处理写请求、管理日志复制和不断地发送心跳信息,通知其他节点“我是领导者,我还活着,你们不要”发起新的选举,不用找新领导来替代我。
2PC和3PC都存在性能问题
2PC 有数据不一致问题、同步阻塞、单点故障。
分为准备阶段和提交阶段(confirm 或 cancle)。
3PC 把准备阶段分为两段 canCommit、preCommit、DoCommit。
主要用的是TCC这种,try-confirm-canle : https://www.cnblogs.com/jiangym/p/17455823.html
redis
- CAP:一致性、可用性、分区容错性
- redis满足的是AP
- 一致性在redis中是最终一致性
- AOF 每条都存
- RDB 定期存
- 定时删除
- 惰性删除 访问时才删除
- 默认同时开启这两个策略
- noeviction:不会淘汰任何键值对,而是直接返回错误信息。
- allkeys-lru:从所有 key 中选择最近最少使用的那个 key 并删除。
- volatile-lru:从设置了过期时间的 key 中选择最近最少使用的那个 key 并删除。
- allkeys-random:从所有 key 中随机选择一个 key 并删除。
- volatile-ttl:从设置了过期时间的 key 中选择剩余时间最短的 key 并删除。
- volatile-lfu:淘汰的对象是带有过期时间的键值对中,访问频率最低的那个。
- allkeys-lfu:淘汰的对象则是所有键值对中,访问频率最低的那个。
淘汰算法
- FIFO 先进先出
- LRU 使用过的和新插入的放到链表头,满了删除链表最后的。
- LFU 最近最不常用 有一个引用计数,删除数小的。
数据库
什么情况会索引失效
- not in
- not exists
- 联合索引
- 不符合最左匹配
- 要么不同时升序,要么不同时降序
- order by语句中没有加where或limit关键字,该sql语句将不会走索引
- countryi,age 联合索引中 country > "C" and age = 18; age用不到索引;
但是country like "C%" and age = 18; age却用到了索引;country like "%C%" and age = 18; 都不走索引- 如果索引字段上使用 like '%xxx',这种不会用到索引,后面的索引也不会用到,如果格式为 like 'xxx%',这种可以用到索引,而且不影响后面的索引使用。
怎么进行sql调优
- 通过explain看执行计划 主要看type,key,extra字段
- type:表示查询时所使用的索引类型,包括ALL、index、range、ref、eq_ref、const等。
- system>const>eq_ref>ref>range> index>all
- possible_keys:表示可能被查询优化器选择使用的索引。
- key:表示查询优化器选择使用的索引。
- Extra:表示其他额外的信息,包括Using index、Using filesort、Using temporary等。
- type:表示查询时所使用的索引类型,包括ALL、index、range、ref、eq_ref、const等。
数据库的悲观锁和乐观锁
悲观锁:
关闭自动提交后 select * from update
乐观锁:
cas 通过版本号比较
数据库事务
读写锁的实现
一条语句的执行过程 具体有哪些
- 使用连接器,客户端与mysql建立连接。
- querycache,是否命中了缓存
- show global variables like '%query_cache%';
- https://www.cnblogs.com/chang09/p/16576004.html
- 解析器进行语法分析和语义分析,生成解析树。
- 语法是否有问题
- 优化执行器看看索引是否可以优化
- 选择合适的索引
- 数据的读取方式
- 执行器执行sql
JUC、并发
reentrantlock 原理 synchronized什么情况下会锁升级。
innodb和myisam
B树
Lang包
java juc lang 包
java容器
4.用过哪些线程安全的类,除了hashtable和concurrenthashmap(原理没说明白),还有java.lang包下的了解过吗
9.hashmap 1.7和1.8的区别,多线程时存在的问题。hashMap底层。1.8的红黑树 原理 好处 。线程安全。 初始容量。 数组大小超过堆剩余大小 还会分配内存吗?
JVM
GC CMS、G1 新生代和老年代分别用什么算法
消息队列
算法
各种排序算法 讲一下http
spring
设计模式 和应用场景
springCloud组件
tomcat
线上问题排查
Nginx
11.跨域除了nginx还能用什么