docker面试题汇总,我就不信你还吃不透Java的泛型
CAP原则要求分布式系统在数据一致性、数据可用性和分区耐受性之间做出权衡,通常选择牺牲强一致性以提高数据可用性。Raft算法通过选举领导节点、复制日志和安全性措施实现分布式系统的一致性,其核心优势在于将复杂问题拆解为更易管理的部分,并通过优化状态空间提高效率。学习资料涵盖Java开发、分布式系统、一致性算法及面试真题,旨在帮助开发者系统提升技能,节省学习成本并提供实战项目和视频讲解。
CAP原则
分布式系统中,若要遵循CAP原则,任何提供数据服务的存储系统都无法同时满足数据一致性、数据可用性和分区耐受性。

数据一致性(C):所有应用程序都能访问到相同的数据。数据可用性(A):任何时候,任何应用程序都可以读写访问。此外,这通常意味着数据的规模可以扩展。分区耐受性(P):系统可以跨网络分区线性伸缩。在大型网站中,通常需要权衡数据一致性(C)和数据可用性(A)。为了减小数据不一致可能带来的影响,通常会采取各种手段确保数据最终一致。
数据强一致:各个副本的数据在物理存储中总是一致的。
在物理存储副本中,数据可能存在不一致的情况,但通过纠错编码和数据校验机制,能够确保返回的数据一致且正确无误地恢复至用户端。
数据最终达到一致状态:物理存储的设备可能存储的数据存在不一致,不同终端用户在访问数据时可能遇到不一致的情况,但随着时间的推移,数据最终会达到一致状态。
一致性算法
让一组服务器达成一致地在一个值上,其显著特征在于最终每个服务器都能自主决定一个值。
通过值的一致能够实现对同一个数据的请求会让同一个服务器来处理。
Paxos和Raft均是通过选择master节点来达成系统中的一致性,从而采用一致性哈希算法来实现请求分配。
一致性哈希算法基于不同的属性参数(通常为IP地址和端口号),生成一系列互不相同的哈希值,并将这些哈希值转换为0至2^32-1范围内的整数。其中,不同范围的哈希值将由相应的服务器进行处理,具体而言,B-C区间内的哈希值将由服务器B处理。

Raft算法和Paxos算法
Raft算法是对Paxos算法进行优化的成果。该算法主要实现了两个方面的优化工作:首先,将复杂的分布式共识问题分解为领导选举、日志复制和安全性三个关键环节;其次,通过在原有Paxos算法的基础上施加更为合理的限制,有效降低了系统状态数量,从而减少了不确定性因素。
领导选举(具体以zookeeper举例) 其基本的特性有:
zookeeper在配置集群时节点数不可小于3
节点只有获得半数以上的投票才能当选Leader
zookeeper在启动时会通过广播机制来把投票结果告诉其他的节点
在启动过程中,zookeeper首先会为自己投一次票,然后会与其他已启动的节点进行通信操作,通过比较节点id来判断是否能够获取其他节点的投票。
zookeeper在选举过程中的角色:领导者、跟随者、观察者、竞选者
在一致性算法中,每个节点都运行着一个有限状态自动机,即复制机制(replicated state machine),该机制负责管理复制日志(replicated logs)队列。复制机制会依次接收并执行该队列中的请求,完成状态转换并输出结果。可以看出,确保各节点复制日志的一致性,就能保证所有节点状态机的状态转换和输出保持一致。

可以看出,日志由一个个按序排列的条目组成。每个条目内包含有请求的数据,还有该条目产生时的领导任期值。每个节点上的日志队列用一个数组log[]表示。
在领导节点选举完成之后,集群即可开始处理客户端的请求。当客户端发送请求时,领导节点首先将该请求加入自身的日志队列,随后并行发送AppendEntries RPC消息给所有从属节点。最终确保节点数据的一致性。
安全性 Raft安全保障机制有5种:
选举安全性:节点要3个以上,避免“脑裂”的方式
领导者仅添加:所有客户端的请求均被依次添加至该队列的末尾,且未进行任何修改或删除操作。
在日志匹配过程中,每条AppendEntries记录包含最新entry前一个entry的下标及任期值信息。当跟随节点在对应下标位置未找到对应任期的日志时,该过程将拒绝接受请求并通知相关领导节点。从而有效避免追随者故障,确保数据一致性。
当某个日志在一个任期被记录时,那么该日志一定会包含在后续的任期内的领导者日志中。此外,master会优先获取日志的更新信息。
状态机的安全性定义为:当一个节点已将一条日志中的请求复制至其复制状态机中时,其他节点在处理同一下标时,不得应用不同的请求。这种机制旨在避免主节点故障导致重选时部分节点数据不一致。
Raft算法和Paxos算法在分布式中的使用
Consul vs Eureka vs Zookeeper

CAP理论指出,数据一致性、数据可用性和分区容错性是系统设计的三大核心考量。在AP策略下,为了保证系统的高可用性,我们愿意牺牲强一致性,允许部分节点发生故障而不影响其他正常运行的节点。在CP策略下,为了保持数据一致性,当某台机器故障时,所有节点的数据将被隔离,无法访问。
自我简述,我于1993年毕业于上海交通大学,曾在小公司工作过,后又曾在华为、OPPO等知名企业工作过,自1994年进入阿里巴巴,迄今已有25年的工作经历。
在Java领域,许多开发者在技能提升的道路上,常常需要依靠自主学习或参加培训课程。然而,高昂的学费往往让人望而却步。自学虽能积累经验,但缺乏系统性,学习路径单一且耗时较长,容易在技术瓶颈面前停滞不前。
为了方便大家自学提升,我整理了一份《2024年Java开发全套学习资料》, intents were also straightforward,旨在帮助那些不知道从何开始学习的朋友,同时减轻大家的负担。



不仅提供适合初学者的零基础学习资料,还设有专为3年以上经验者设计的深入学习与提升的高级课程,基本涵盖了95%以上的Java开发知识点,真正形成了体系化的学习体系。
因为文件较大,仅列出部分目录的截图。每个节点中都包含以下内容:大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并会持续更新中。
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

分享
这次面试后,我也做了总结。确实还有很多需要学习的地方。将相关面试题进行了整理,可以和大家分享一下,了解一下面试真题。对于想进入大厂或进行跳槽的小伙伴来说,利用好这段时间进行学习是个不错的选择。

Spring Cloud实战

Spring Boot实战

面试真题整理(性能优化模块+微服务架构+并发编程技术+开源框架应用+分布式系统开发)
《互联网大厂面试真题解析与实践》点击传送门即可获取完整学习资源!
《互联网大厂进阶开发核心课程》点击传送门即可获取全套学习资源!
