first commit
This commit is contained in:
@ -0,0 +1,46 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
13 分布式事务考点梳理 + 高频面试题
|
||||
本课时我将和你一起梳理一下面试中分布式事务的高频考点,做到温故知新。
|
||||
|
||||
如何考察分布式事务
|
||||
|
||||
数据一致性和分布式事务是互联网分布式系统设计中必须要考虑的,所以对分布式事务的考察是中高级工程师面试必须跨过的一道门槛。
|
||||
|
||||
面试官通常会通过一个实际的系统设计题来展开提问,以考察候选人对分布式基础理论的理解、对各种数据一致性模型的掌握,以及对分布式下事务实现的原理、机制和各种实现手段的熟悉程度。
|
||||
|
||||
下面我模拟一个实际的面试场景,面试官可能会对你提出以下一连串的问题,你可以检测一下自己在学习中的掌握程度:
|
||||
|
||||
|
||||
请说说你对分布式系统 CAP 理论的理解,CAP 分别代表什么含义?
|
||||
为什么分布式系统的一致性和可用性不能同时满足?
|
||||
你是如何理解数据一致性的?数据一致性有哪几种模型?
|
||||
你在做系统设计时,如何选择实现强一致性还是弱一致性?
|
||||
在你的项目里,是如何设计分布式事务,实现最终一致性的?
|
||||
你了解数据库的 binlog 和 redolog 吗?是如何实现一致性的呢?
|
||||
|
||||
|
||||
需要说明的是,面试并不是应试考试,很多问题并没有标准答案,不过这里的问题,很多都可以在“模块二:分布式事务”中找到思路。
|
||||
|
||||
分布式事务高频考点
|
||||
|
||||
在分布式事务的面试中,主要会围绕分布式理论、一致性算法、分布式事务及其应用来展开提问。下面我进行了简单梳理,这里有一张分布式事务的知识点思维导图,你可以对照这张图片,查漏补缺进行分析。
|
||||
|
||||
|
||||
|
||||
分布式理论部分的主要内容包括 CAP 理论、Base 理论、各种数据一致性模型的应用等。在工作中应用比较多的是 ZooKeeper,需要了解 ZooKeeper 的原理和实现、应用场景等。
|
||||
|
||||
一致性算法部分,希望你能够对经典的数据一致性算法,比如 Paxos 算法等有自己的理解,并不是要做到对算法细节倒背如流,而是要能够通过自己的描述,把算法的整体流程讲清楚。
|
||||
|
||||
分布式事务的应用是日常开发中打交道最多的部分,如果你在工作中实践过分布式事务的实现是最好的,若没有,可以去了解一些开源的分布式事务中间件。比如我在专栏中多次介绍过的 Alibaba Seata 等组件,通过学习开源组件设计思路,你也可以对这一部分内容有个整体的把握。
|
||||
|
||||
在专栏的第 [10]、[11]课时我们一起讨论了分布式锁的应用场景和实现细节,你可以回顾一下,使用 Redis 实现分布式锁,需要注意哪些细节呢?不同的实现方式,又存在哪些缺陷呢?
|
||||
|
||||
另外,除了专栏的内容,我推荐你结合一些经典的公开课程去学习,以加深印象,建议关注拉勾教育直播课哦,有许多分布式相关的主题分享。
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,54 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
22 分布式服务考点梳理 + 高频面试题
|
||||
本课时我将和你回顾一下该模块的核心内容,并且一起梳理一下面试中分布式服务的高频考点。
|
||||
|
||||
如何考察分布式服务
|
||||
|
||||
在整个分布式课程中,分布式服务是大部分工程师实际开发中应用最多的,也是面试中经常出现的一个热点。
|
||||
|
||||
在分布式服务部分的面试中,面试官通常会围绕“服务治理”的各个场景进行提问,考察候选人对微服务和服务治理各个环节的掌握程度。分布式服务这部分内容涉及的比较广,有非常丰富的内涵和外延知识。本课程只是带你描述了一些核心领域的知识点,剩下的内容,还需要你在平时的工作和学习中多多积累。
|
||||
|
||||
我们在课程中提到了 Spring Cloud 和 Dubbo 两个技术栈,这两大技术栈是目前大部分公司进行服务治理的选择。当然,一些公司使用的是 Thrift 和 gRPC 等服务框架,但是应用比例要小很多,在实际的面试中,通常会选择一个服务治理的技术栈来展开提问,对候选人进行考察。
|
||||
|
||||
下面我以 Dubbo 技术栈为例,整理了一些分布式服务相关的问题,来模拟实际的面试场景。这些问题都是比较基础的,你可以作为对照,检测一下掌握程度:
|
||||
|
||||
|
||||
为什么需要 Dubbo?
|
||||
Dubbo 的主要应用场景?
|
||||
Dubbo 的核心功能?
|
||||
Dubbo 服务注册与发现的流程?
|
||||
Dubbo 的服务调用流程?
|
||||
Dubbo 支持哪些协议,每种协议的应用场景、优缺点?
|
||||
Dubbo 有些哪些注册中心?
|
||||
Dubbo 如何实现服务治理?
|
||||
Dubbo 的注册中心集群挂掉,如何正常消费?
|
||||
Dubbo 集群提供了哪些负载均衡策略?
|
||||
Dubbo 的集群容错方案有哪些?
|
||||
Dubbo 支持哪些序列化方式?
|
||||
|
||||
|
||||
需要你注意的是,即使开发框架不同,但是在服务治理中关注的功能是一致的,如果你应用的是另外的分布式服务框架,可以把关键词做一些替换,比如 Spring Cloud 的主要应用场景、Spring Cloud 的核心功能,同样可以用来考察自己对整体技术栈的掌握程度。
|
||||
|
||||
微服务技术栈梳理
|
||||
|
||||
下面我分别展开 Dubbo 和 Spring Cloud 这两大微服务技术栈,并且简单描绘了一张知识点思维导图,你可以对照这张图片,查漏补缺进行针对性的学习。
|
||||
|
||||
|
||||
|
||||
对 Spring Cloud 和 Dubbo 两大技术栈的掌握,重在深入而不是只能泛泛而谈。举个例子,Dubbo 在不同业务场景时,如何选择集群容错策略和不同的线程模型,又如何配置不同的失败重试机制呢?
|
||||
|
||||
Dubbo 为什么选择通过 SPI 来实现服务扩展,又对 Java 原生的 SPI 机制做了哪些调整呢?这些应用细节都要针对性地了解,才能在系统设计时避免各种问题。
|
||||
|
||||
除了上层的技术组件之外,微服务底层的技术支撑也要去了解一下,比如 Docker 容器化相关知识,容器内隔离是如何实现的,JVM 对容器资源限制的理解,以及可能产生的问题,还有容器如何调度等。
|
||||
|
||||
继续扩展,你可以思考一下,为什么现在很多企业选择 Golang 作为主要的开发语言,其中一个原因,就和 Go 语言部署和构建快速,占用容器资源小有关系。
|
||||
|
||||
在技术之外,微服务设计常用的 DDD(领域驱动设计)思路,开发中的设计模式,也要有一定的理解和掌握。
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,59 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
29 分布式存储考点梳理 + 高频面试题
|
||||
你好,欢迎来到分布式存储模块的加餐环节,本课时我将和你一起梳理面试中分布式系统的数据库的高频考点,做到温故知新。
|
||||
|
||||
面试中如何考察分布式存储
|
||||
|
||||
广义的分布式存储根据不同的应用领域,划分为以下的类别:
|
||||
|
||||
|
||||
分布式协同系统
|
||||
分布式文件系统
|
||||
分布式任务调度框架
|
||||
分布式 NoSQL 存储
|
||||
分布式关系数据库
|
||||
各种消息队列 MQ
|
||||
流式计算框架
|
||||
|
||||
|
||||
当然,这只是一种划分方式,你也可以根据存储数据的特点,将分布式存储系统划分为块存储、对象存储等不同的分类。
|
||||
|
||||
可以看到,分布式存储技术的范围非常大,技术覆盖的广度和深度都很有料,比如分布式协同系统或者各种流计算框架,都可以单独作为一个专栏来进行展开讲解。
|
||||
|
||||
由于篇幅有限,我在分布式存储这个模块里,主要围绕分布式系统下的关系型数据库这一主题,选择了与大部分开发者直接相关的热点内容,包括数据库的读写分离、分库分表存储拆分后的唯一主见问题,以及典型的 NoSQL 数据库应用。另外,简单介绍了 ElasticSearch 技术、倒排索引的实现等。
|
||||
|
||||
和之前一样,我在这里选择了一些热点技术问题,你可以考察一下自己的掌握程度。以分布式场景下的数据库拆分为例,面试官会对你进行下面的考察:
|
||||
|
||||
|
||||
当高并发系统设计时,为什么要分库分表?
|
||||
用过哪些分库分表中间件?
|
||||
不同的分库分表中间件都有什么优点和缺点?
|
||||
如何对数据库进行垂直拆分或水平拆分?
|
||||
如果要设计一个可以动态扩容缩容的分库分表方案,应该如何做?
|
||||
数据库分库分表以后,如何处理设计主键生成器?
|
||||
不同的主键生成方式有什么区别?
|
||||
|
||||
|
||||
上面的问题,都可以在“分布式存储”模块的内容中找到思路,你可以对照本模块学过的知识,整理自己的答案。
|
||||
|
||||
分布式存储有哪些高频考点
|
||||
|
||||
上面我提到过,分布式存储包含了非常丰富的技术栈,本模块的内容虽然在实际开发中有着高频应用,但只是分布式存储技术领域中非常小的一部分。在下面这张思维导图中,除了分布式下的关系型数据库之外的内容,我还补充了一些经典分布式存储技术的部分,你可以对照这张思维导图,进行针对性的扩展。
|
||||
|
||||
|
||||
|
||||
以分布式文件系统为例,常见的分布式文件系统有 Google 的 GFS、Hadoop 实现的分布式文件系统 HDFS、Sun 公司推出的 Lustre、淘宝的 TFS、FastDFS 等,这几种存储组件都有各自的应用场景。
|
||||
|
||||
比如淘宝的 TFS 适合用于图片等小文件、大规模存储的应用场景,是淘宝专门为了支持电商场景下数以千万的商品图片而开发的;FastDFS 类似 GFS,是一款开源的分布式文件系统,适合各类规模较小的图片和视频网站。
|
||||
|
||||
比如流式计算框架,有著名的流式计算三剑客,Storm、Spark 和 Flink,这三个框架基本上覆盖了绝大多数的流式计算业务,适用于不同的大数据处理场景。
|
||||
|
||||
今天的内容就到这里了,也欢迎你留言分享自己的面试经验,和大家一起讨论。
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,71 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
37 消息队列考点梳理 + 高频面试题
|
||||
你好,欢迎来到分布式消息队列模块的加餐环节,本课时我将和你一起梳理面试中消息队列的高频考点,做到温故知新。
|
||||
|
||||
面试中如何考察消息队列
|
||||
|
||||
消息队列作为日常开发中应用最高频的基础组件之一,相关的问题自然也是面试中的常客。
|
||||
|
||||
在面试中对消息队列的考察方式,主要包括两种形式,一种是针对消息队列的相关理论,比如消息队列重复消费、消费幂等性、消息队列的可靠传输等;另一种考察方式是针对某个具体的消息队列中间件,考察组件应用的原理,实现方案和应用细节,比如常见的 Kafka、RabbitMQ、RocketMQ 等消息队列组件。
|
||||
|
||||
下面我梳理了一些面试中的高频问题,你可以对照这些问题,检测自己是否掌握了问题考察的内容,针对自己薄弱的环节,进行针对性地提高。
|
||||
|
||||
消息队列理论高频问题
|
||||
|
||||
对消息队列应用相关理论和设计的考察,面试官可以提出下面一系列的问题:
|
||||
|
||||
|
||||
如何保证消息队列的高可用?
|
||||
如何保证消息不被重复消费?
|
||||
如何保证消费的时候是幂等?
|
||||
如何保证消息的可靠性传输?
|
||||
传输过程出现消息丢失了怎么办?
|
||||
如何保证消息的顺序性?
|
||||
如何解决消息队列的延时问题?
|
||||
如何解决消息队列的过期失效问题?
|
||||
消息队列满了以后该怎么处理?
|
||||
有几百万消息持续积压几小时,应该怎么解决?
|
||||
如果让你写一个消息队列,该如何进行架构设计?
|
||||
|
||||
|
||||
可以看到,这方面的问题非常重视考察候选人对实际问题处理的经验,不过没有固定的答案。我在专栏里多次强调,授人以鱼不如授人以渔,关于分布式的方法论是最重要的。如果让你从零到一设计一个消息队列,该如何展开呢?你可以从分布式的基础理论出发,从数据存储的一致性,集群扩展结合我在分布式消息队列模块所讲解的内容,同时融入自己对系统架构的理解,最后形成自己的观点。
|
||||
|
||||
消息队列应用高频问题
|
||||
|
||||
面试中对具体某一种消息组件的考察,一般是候选人有过该组件的应用经验,重点是考察候选人对基础组件掌握的深度,出现问题后的解决办法等。
|
||||
|
||||
以 Kafka 为例,可以提出以下的问题:
|
||||
|
||||
|
||||
描述一下 Kafka 的设计架构?
|
||||
Kafka、ActiveMQ、RabbitMQ、RocketMQ 之间都有什么区别?
|
||||
Kafka 消费端是否可能出现重复消费问题?
|
||||
Kafka 为什么会分区?
|
||||
Kafka 如何保证数据一致性?
|
||||
Kafka 中 ISR、OSR、AR 是什么?
|
||||
Kafka 在什么情况下会出现消息丢失?
|
||||
Kafka 消息是采用 Pull 模式,还是 Push 模式?
|
||||
Kafka 如何和 ZooKeeper 进行交互?
|
||||
Kafka 是如何实现高吞吐率的?
|
||||
|
||||
|
||||
如果是 RocketMQ,很多问题都是类似的,可以从以下的问题出发进行考察:
|
||||
|
||||
|
||||
RocketMQ 和 ActiveMQ 有哪些区别?
|
||||
为什么 RocketMQ 不会丢失消息?
|
||||
RocketMQ 的事务消息都有哪些应用?
|
||||
RocketMQ 是怎么保证系统高可用的?
|
||||
|
||||
|
||||
这些问题中一部分可以在专栏中找到思路,但大部分的问题还要靠你在平时多积累与思考,比如消息队列的高可用,你可以多机器部署,防止单点故障;主从结构复制,通过消息冗余防止消息丢失;消息持久化,磁盘写入的 ACK 等角度进行分析。
|
||||
|
||||
今天的内容就到这里了,也欢迎你留言分享自己的面试经验,和大家一起讨论。
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,68 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
44 分布式缓存考点梳理 + 高频面试题
|
||||
你好,欢迎来到分布式缓存模块的加餐环节,本课时我将和你一起梳理面试中分布式缓存的高频考点,做到温故知新。
|
||||
|
||||
分布式缓存在面试中如何考察
|
||||
|
||||
对缓存和数据库的考察,一直都是业务开发同学在面试中的核心问题,特别是缓存部分,随着大部分公司业务规模的增加,缓存的应用越来越重要。我偶尔会和身边的同事调侃:如何应对高并发?答案是加一层缓存,如果不够,就再加一层缓存。
|
||||
|
||||
缓存在分布式场景下的应用,比单机情况下更加复杂,除了常见的缓存雪崩、缓存穿透的预防,还要额外考虑缓存数据之间的一致性,缓存节点的负载均衡,缓存的监控和优化等。在面试中,对分布式缓存的考察一般有两种方式:
|
||||
|
||||
|
||||
通过实际场景来考察对缓存设计和应用的理解;
|
||||
直接考察常用的缓存组件,比如 Redis、Memcached、Tair。
|
||||
|
||||
|
||||
面试官通常会通过一个实际场景,结合常用的缓存组件,进行 System Design 相关方面的考察。下面我梳理了部分分布式缓存的高频考点,希望可以帮助你提纲挈领,体系化地去学习相关知识。
|
||||
|
||||
缓存如何应用
|
||||
|
||||
|
||||
缓存雪崩、缓存穿透如何理解?
|
||||
如何在业务中避免相关问题?
|
||||
如何保证数据库与缓存的一致性?
|
||||
如何进行缓存预热?
|
||||
|
||||
|
||||
缓存的高可用
|
||||
|
||||
|
||||
缓存集群如何失效?
|
||||
一致性哈希有哪些应用?
|
||||
缓存如何监控和优化热点 key?
|
||||
|
||||
|
||||
Redis 应用
|
||||
|
||||
|
||||
Redis 有哪些数据结构?
|
||||
Redis 和 Memcached 有哪些区别?
|
||||
单线程的 Redis 如何实现高性能读写?
|
||||
Redis 支持事务吗?
|
||||
Redis 的管道如何实现?
|
||||
Redis 有哪些失效策略?
|
||||
Redis 的主从复制如何实现?
|
||||
Redis 的 Sentinel 有哪些应用?
|
||||
Redis 集群有哪几种方式?
|
||||
Redis 和 memcached 什么区别?
|
||||
Redis 的集群模式如何实现?
|
||||
Redis 的 key 是如何寻址的?
|
||||
Redis 的持久化底层如何实现?
|
||||
Redis 过期策略都有哪些?
|
||||
缓存与数据库不一致怎么办?
|
||||
Redis 常见的性能问题和解决方案?
|
||||
使用 Redis 如何实现异步队列?
|
||||
Redis 如何实现延时队列?
|
||||
|
||||
|
||||
以上的这些问题,都是面试中非常高频的,你可以进行一个模拟面试,考察自己对这部分知识的掌握程度,有一部分问题在专栏中已经介绍过了,比如缓存集群、缓存一致性、缓存负载均衡等,专栏没有涉及的,可以作为一份索引,帮助你有针对性地学习。
|
||||
|
||||
今天的内容就到这里了,也欢迎你留言分享自己的面试经验,和大家一起讨论。
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user