面试准备

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 定期存
redis集群模式
过期策略
  • 定时删除
  • 惰性删除 访问时才删除
  • 默认同时开启这两个策略
淘汰策略
  • noeviction:不会淘汰任何键值对,而是直接返回错误信息。
  • allkeys-lru:从所有 key 中选择最近最少使用的那个 key 并删除。
  • volatile-lru:从设置了过期时间的 key 中选择最近最少使用的那个 key 并删除。
  • allkeys-random:从所有 key 中随机选择一个 key 并删除。
  • volatile-ttl:从设置了过期时间的 key 中选择剩余时间最短的 key 并删除。
  • volatile-lfu:淘汰的对象是带有过期时间的键值对中,访问频率最低的那个。
  • allkeys-lfu:淘汰的对象则是所有键值对中,访问频率最低的那个。

淘汰算法

  • FIFO 先进先出
  • LRU 使用过的和新插入的放到链表头,满了删除链表最后的。
  • LFU 最近最不常用 有一个引用计数,删除数小的。

 

 

数据库 

 
建mysql会考虑什么
写sql会考虑什么

什么情况会索引失效

  1. not in
  2. not exists
  3. 联合索引
    1. 不符合最左匹配
    2. 要么不同时升序,要么不同时降序
    3. order by语句中没有加where或limit关键字,该sql语句将不会走索引
    4. countryi,age 联合索引中 country > "C" and age = 18;  age用不到索引;
      但是country like "C%" and age = 18; age却用到了索引;country like "%C%" and age = 18; 都不走索引
      1. 如果索引字段上使用 like '%xxx',这种不会用到索引,后面的索引也不会用到,如果格式为 like 'xxx%',这种可以用到索引,而且不影响后面的索引使用。

怎么进行sql调优

  1. 通过explain看执行计划 主要看type,key,extra字段
    1. type:表示查询时所使用的索引类型,包括ALL、index、range、ref、eq_ref、const等。
      1. system>const>eq_ref>ref>range> index>all
    2. possible_keys:表示可能被查询优化器选择使用的索引。
    3. key:表示查询优化器选择使用的索引。
    4. Extra:表示其他额外的信息,包括Using index、Using filesort、Using temporary等。

数据库的悲观锁和乐观锁

悲观锁:

关闭自动提交后 select * from update

乐观锁:

cas 通过版本号比较

 

数据库事务

 

读写锁的实现

 

一条语句的执行过程 具体有哪些

  1. 使用连接器,客户端与mysql建立连接。
  2. querycache,是否命中了缓存
    1. show global variables like '%query_cache%';
    2. https://www.cnblogs.com/chang09/p/16576004.html  
  3. 解析器进行语法分析和语义分析,生成解析树。
    1. 语法是否有问题  
  4. 优化执行器看看索引是否可以优化
    1. 选择合适的索引
    2. 数据的读取方式
  5. 执行器执行sql

 

 

JUC、并发

reentrantlock 原理 synchronized什么情况下会锁升级。

innodb和myisam 

B树

 

线程池 线程死了 还有线程了吗? 线程池中new一个线程,线程存在还是不存在。线程池的参数。newCachedPool最大能开启多少线程数。
volitle的原理 cutdownlunch 原理 四个同步工具。 原理和使用。
其他线程怎么和主线程同步 
  

Lang包


java juc lang 包

java容器

4.用过哪些线程安全的类,除了hashtable和concurrenthashmap(原理没说明白),还有java.lang包下的了解过吗

9.hashmap 1.7和1.8的区别,多线程时存在的问题。hashMap底层。1.8的红黑树 原理 好处 。线程安全。 初始容量。 数组大小超过堆剩余大小 还会分配内存吗?

 
 
 

JVM

GC  CMS、G1 新生代和老年代分别用什么算法

 类加载器有哪些 双亲委派是由父类加载还是子类加载
 

消息队列

原理 + 面经
 
 
 
 
 
 

算法

各种排序算法 讲一下
两个数组的交集 
反转链表
二叉树的BFS的小问题
 
 
 

http

TCP和滑动窗口
 
 
 
bio nio aio 彻底弄懂
 
 

 spring

bean加载流程
代理模式详细
 

设计模式 和应用场景 

 springCloud组件

 

tomcat

热部署原理
 

线上问题排查

oom
 
 

Nginx

11.跨域除了nginx还能用什么

 
 
 
 
posted @ 2023-07-18 22:35  CodingOneTheWay  阅读(9)  评论(0编辑  收藏  举报
回到顶部