这些年,分布式框架越用越成熟,越用越广泛。几前年还只是架构师和高级开发的面试必考题,现在已经连应届生都要面对了。
分布式框架看似又多又复杂,但主要集中在协调类框架如 Zookeeper,分布式缓存如 Redis,消息队列如 Kafka,数据库 MySQL 的分库分表方案如 MyCat,全文检索如 ElasticSearch,微服务如 Dubbo,方向代理如 Nginx。
每种技术都有多个框架供大家选择,具体应用依赖业务场景,大厂们内部也有自己的实现,一般面试官要求同类型的框架深入了解一个即可,毕竟学会了一个,其他就很容易入手。
我这里也就每种类型都列举了一个,其中消息队列选了两个,因为笔者所在的部门根据业务的不同经常用两种队列,所以笔者感觉有必要提到两个。
注意:篇幅原因,下面从存储、数据库、中间件ZK、消息kafka、微服务dubbo、方向代理Nginx等方面介绍各个所需学习的知识点以及一些Java高级面试必备的题目、一些自己学习过程中的笔记以及收集的各大分布式笔记PDF,很多只是截图介绍展示一下,不过都可提供原文件,有需求的朋友点击传送门 即可!!
01 分布式存储相关(Redis)
1.1 Redis应该学习的那些知识
- String 的内部结构及实现原理
- List 的内部结构及实现原理
- Map 的内部结构及实现原理
- Set 的内部结构及实现原理
- SortedSet 的内部结构及实现原理
- Redis 有 timeout 机制,请问到了过期时间,数据是否真的被删除了?
- Redis 的持久化机制 Redis 是单进程单线程?性能为什么这么快?
- Redis 的集群
- Redis 的哨兵
- Redis 缓存与数据一致性的问题 缓存雪崩 缓存击穿
- Redis 的内存回收策略
- 管道和 Lua 脚本
- 一致性哈希算法
- 手写一个 LRU 算法
- Redis 版的分布式锁
1.2 根据以上知识整理Redis超高频面试70问(六大模块)
- Redis概念理解
- Redis数据结构与指令
- Redis高并发处理策略
- Redis集群结构以及设计理念
- Redis缓存管理与持久化机制
- Redis应用场景设计
答案解析
1.3 学习过程中记录的一份Redis笔记
包括五个分类:基础篇、数据结构篇、持久化篇、集群篇、其他分类,这些是笔者自己对于Redis的学习而总结出的笔记
内容详解
02 数据库存储相关(MySQL)
2.1 知识点
- MySQL 单表数据达到多少的时候会影响数据库的查询性能?为什么?
- MySQL 主从复制的原理是什么?常见的形式有哪些?
- MySQL 分库分表,解释一下垂直和水平 2 种不同的拆分
- MySQL 垂直拆分会带来哪些问题?
- 分布式数据存储中间件 MyCat 的核心流程是什么?
- 概述一下 MyCat?
- 解释一下全局表,ER 表,分片表
- MyCat在分库分表之后,是怎么支持连表查询的?
- 库表拆分时,拆分规则怎么取舍?
- 全局 ID 方案有哪些?程序自定义全局 ID 方案有哪些?
- 一致性 Hash 的原理?设计的好处是什么?
- 4 层负载和 7 层负载谁性能更高,为什么?
- 讲一讲 MySQL 的高可用方案?
2.2 关于分库分表Java高级面试题
面试题+面试官心里分析+题目剖析+答案详解
答案详解
03 分布式中间件相关 Zookeeper
- Zookeeper 是什么?
- 描述一下 ZAB 协议
- 四种类型的数据节点 Znode
- TCP 不是可靠连接吗?为什么分布式要考虑网络信息丢失的问题?
- 介绍一下两阶段提交协议 2pc
- 介绍一下三阶段提交协议 3pc
- Zookeeper 宕机如何处理?
- 描述一下 Zookeeper 中 session 管理的思想,画图描述一下
- Zookeeper Watcher 机制
- Zookeeper Server 的角色
- Zookeeper Server 的状态
- Zookeeper 负载均衡和 Nginx 负载均衡区别
- Zookeeper 的序列化
- ZXID 是什么?有什么作用?
- 讲解一下 Zookeeper 的持久化机制
- 投票信息的五元组
- Quorum 与脑裂
- 选举的全过程
- 数据同步全过程
- 实现一个分布式锁
- 追问 1:Watch 监听为什么是一次性的?
- 追问 2:Zookeeper 为什么不用数据库做持久化?
- 追问 3:Zookeeper 的 session 为什么由 server 维护,client 不行吗?
3.1 ZK面试:27连问
- ZooKeeper 提供了什么?
- Zookeeper 文件系统?
- ZAB 协议?
- 四种类型的数据节点 Znode
- Zookeeper Watcher 机制 -- 数据变更通知
- 客户端注册 Watcher 实现
- 服务端处理 Watcher 实现
- 客户端回调 Watcher
- ACL 权限控制机制
- Chroot 特性
- 服务器角色
- 会话管理
- Zookeeper 下 Server 工作状态
- 数据同步
- zookeeper 是如何保证事务的顺序一致性的?
- 分布式集群中为什么会有 Master?
- zk 节点宕机如何处理?
- zookeeper 负载均衡和 nginx 负载均衡区别
- Zookeeper 有哪几种几种部署模式?
- 集群最少要几台机器,集群规则是怎样的?
- 集群支持动态添加机器吗?
- Zookeeper 对节点的 watch监听通知是永久的吗?为什么不是永久的?
- Zookeeper 的 java 客户端都有哪些?
- chubby 是什么,和 zookeeper 比你怎么看?
- 说几个 zookeeper 常用的命令。
- ZAB 和 Paxos 算法的联系与区别?
- Zookeeper 的典型应用场景?
ZK答案解析
04 消息队列
4.1 消息队列知识点
- Kafka ISR 的设计思想
- Kafka 的速度为什么那么快?
- Kafka 如何保证消息的顺序消费?
- 活锁的问题怎么解决?
- Kafka 高效文件存储设计特点
- 谈一谈 Kafka 的再均衡
- Kafka 的副本复制过程详解
- Kafka 的存储机制详解
- Kafka 什么情况下会丢失消息?
- Kafka 的分区数与多线程
- RabbitMQ 消息队列的作用与使用场景
- RabbitMQ 怎么自动删除没人消费的消息?
- RabbitMQ 无法被路由的消息,去了哪里?
- RabbitMQ 消息在什么时候会变成Dead Letter?
- RabbitMQ 如何保证消息的可靠性投递?
- RabbitMQ 消息幂等性
- RabbitMQ 如何保证消息的顺序性?
4.2 kafka面试(基础+进阶+高阶共44问)
- 1.Kafka的用途有哪些?使用场景如何?
- 2.Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么
- 3.Kafka中的HW、LEO、LSO、LW等分别代表什么?
- 4.Kafka中是怎么体现消息顺序性的?
- 5.Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
- 6.Kafka生产者客户端的整体结构是什么样子的?
- 7.Kafka生产者客户端中使用了几个线程来处理?分别是什么?
- 8.Kafka的旧版Scala的消费者客户端的设计有什么缺陷?
- 9.“消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?如果正确,那么有没有什么hack的手段?
- 10.有哪些情形会造成重复消费?
- 11.那些情景下会造成消息漏消费?
- 12.KafkaConsumer是非线程安全的,那么怎么样实现多线程消费?
- 13.简述消费者与消费者之间的关系
- 14.当你使用kafka-topics.sh创建(删除)了一个topic之后,Kafka背后会执行什么逻辑?
- 15.topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?
- 16.topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?
- 17.创建topic时如何选择合适的分区数?
- 1.Kafka目前有哪些内部topic,它们都有什么特征?各自的作用又是什么?
- 2.优先副本是什么?它有什么特殊的作用?
- 3.Kafka有哪几处地方有分区分配的概念?简述大致的过程及原理
- 4.简述Kafka的日志目录结构
- 5.Kafka中有哪些索引文件?
- 6.如果我指定了一个offset,Kafka怎么查找到对应的消息?
- 7.如果我指定了一个timestamp,Kafka怎么查找到对应的消息?
- 8.聊一聊你对Kafka的Log Retention的理解
- 9.聊一聊你对Kafka的Log Compaction的理解
- 10.聊一聊你对Kafka底层存储的理解
- 11.聊一聊Kafka的延时操作的原理
- 12聊一聊Kafka控制器的作用
- 13.Kafka的旧版Scala的消费者客户端的设计有什么缺陷?
- 14.消费再均衡的原理是什么?(提示:消费者协调器和消费组协调器)
- 15.Kafka中的幂等是怎么实现的?
- 1.Kafka中的事务是怎么实现的?
- 2.失效副本是指什么?有哪些应对措施?
- 3.多副本下,各个副本中的HW和LEO的演变过程
- 4.Kafka在可靠性方面做了哪些改进?(HW, LeaderEpoch)
- 5.为什么Kafka不支持读写分离?
- 6.Kafka中的延迟队列怎么实现
- 7.Kafka中怎么实现死信队列和重试队列?
- 8.Kafka中怎么做消息审计?
- 9.Kafka中怎么做消息轨迹?
- 10.怎么计算Lag?(注意read_uncommitted和read_committed状态下的不同)
- 11.Kafka有哪些指标需要着重关注?
- 12.Kafka的那些设计让它有如此高的性能?
4.3 RabbitMQ面试(22问)
题目+答案
05 分布式相关
- CAP 理论
- Paxos 协议
- Raft 协议
- 设计一个全局唯一的 ID
06 分布式全文检索
- 谈谈分词与倒排索引的原理
- 分段存储的思想
- 段合并的策略思想
- 文本相似度 TF-IDF
- ElasticSearch 写索引的逻辑
- ElasticSearch 集群中搜索数据的过程
- ElasticSearch 深翻页的问题及解决
- ElasticSearch 性能优化
07 分布式事务
- 分布式事务的几种实现方式
- TCC 柔性分布式事务
- TCC-Transaction 框架的原理
《分布式事务综合案例分析》
《分布式系统常用技术及案例分析PDF》
目录详解
内容详解
08 反向代理
- Nginx 的动静分离
- Nginx 的防盗链
- Nginx 的跨域访问
- Nginx 的进程模型
- Nginx 与网关
- Nginx 的高可用方案
8.1 Nginx的学习笔记
《深入理解Nginx模块开发与架构解析第2版.PDF》
09 微服务相关
- Dubbo 的调用流程
- Dubbo 的负载均衡策略
- Dubbo 的并发和连接控制
- Dubbo 的服务暴露过程
- Dubbo 的SPI思想
- Dubbo 的六种集群容错模式
- Dubbo 源码 Debug 时个人遇到的几个难点
9.1 Java高级面试之分布式系统Dubbo
Dubbo面试题目
Dubbo答案解析
撒花环节
内容太多,篇幅受限,所以不能仅靠一篇文章将上面分布式的各大知识讲清楚,只能粗略的介绍哪些知识是必备的,以及分享一些Java高级面试问题和学习的PDF(上面都有截图展示)。其实也没关系,想要深入学习朋友点击传送门 即可!!