这些年,分布式框架越用越成熟,越用越广泛。几前年还只是架构师和高级开发的面试必考题,现在已经连应届生都要面对了。

分布式框架看似又多又复杂,但主要集中在协调类框架如 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(上面都有截图展示)。其实也没关系,想要深入学习朋友点击传送门 即可!!