Java学习路线!java大数据开发心得,2021最新版!
NO1:说说zookeeper是什么?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现(Chubby是不开源的),它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户 。
Zookeeper一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心,服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据,简单示例图如下:
NO2:了解Zookeeper的系统架构吗?
ZooKeeper 的架构图中我们需要了解和掌握的主要有:
(1)ZooKeeper分为服务器端(Server) 和客户端(Client),客户端可以连接到整个 ZooKeeper服务的任意服务器上(除非 leaderServes 参数被显式设置, leader 不允许接受客户端连接)。
(2)客户端使用并维护一个 TCP 连接,通过这个连接发送请求、接受响应、获取观察的事件以及发送信息。如果这个 TCP 连接中断,客户端将自动尝试连接到另外的 ZooKeeper服务器。客户端第一次连接到 ZooKeeper服务时,可以接受这个连接的 ZooKeeper服务器会为这个客户端建立一个会话。当这个客户端连接到另外的服务器时,这个会话会被新的服务器重新建立。
(3)上图中每一个Server代表一个安装Zookeeper服务的机器,即是整个提供Zookeeper服务的集群(或者是由伪集群组成);
(4)组成ZooKeeper服务的服务器必须彼此了解。它们维护一个内存中的状态图像,以及持久存储中的事务日志和快照, 只要大多数服务器可用,ZooKeeper服务就可用;
(5)ZooKeeper 启动时,将从实例中选举一个 leader,Leader 负责处理数据更新等操作,一个更新操作成功的标志是当且仅当大多数Server在内存中成功修改数据。每个Server 在内存中存储了一份数据。
(6)Zookeeper是可以集群复制的,集群间通过Zab协议(Zookeeper Atomic Broadcast)来保持数据的一致性;
(7)Zab协议包含两个阶段:leader election阶段和Atomic Brodcast阶段。
- a) 集群中将选举出一个leader,其他的机器则称为follower,所有的写操作都被传送给leader,并通过brodcast将所有的更新告诉给follower。
- b) 当leader崩溃或者leader失去大多数的follower时,需要重新选举出一个新的leader,让所有的服务器都恢复到一个正确的状态。
- c) 当leader被选举出来,且大多数服务器完成了 和leader的状态同步后,leadder election 的过程就结束了,就将会进入到Atomic brodcast的过程。
- d) Atomic Brodcast同步leader和follower之间的信息,保证leader和follower具有形同的系统状态。
NO3:能说说Zookeeper的工作原理?
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。
Zab协议有两种模式,它们 分别是恢复模式(选主)和广播模式(同步)。
Zab协议 的全称是 Zookeeper Atomic Broadcast** (Zookeeper原子广播)。Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性。Zab协议要求每个 Leader 都要经历三个阶段:发现,同步,广播。
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加 上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一 个新的epoch,标识当前属于那个leader的统治时期。第32位用于递增计数。
epoch:可以理解为皇帝的年号,当新的皇帝leader产生后,将有一个新的epoch年号。
每个Server在工作过程中有三种状态:
- LOOKING:当前Server不知道leader是谁,正在搜寻。
- LEADING:当前Server即为选举出来的leader。
- FOLLOWING:leader已经选举出来,当前Server与之同步。
NO4:Zookeeper为什么要这么设计?
ZooKeeper设计的目的是提供高性能、高可用、顺序一致性的分布式协调服务、保证数据最终一致性。
高性能(简单的数据模型)
- 采用树形结构组织数据节点;
- 全量数据节点,都存储在内存中;
- Follower 和 Observer 直接处理非事务请求;
高可用(构建集群)
- 半数以上机器存活,服务就能正常运行
- 自动进行 Leader 选举
顺序一致性(事务操作的顺序)
- 每个事务请求,都会转发给 Leader 处理
- 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)
最终一致性
- 通过提议投票方式,保证事务提交的可靠性
- 提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据
NO5:你知道Zookeeper中有哪些角色?
系统模型:
领导者(leader)
Leader服务器为客户端提供读服务和写服务。负责进行投票的发起和决议,更新系统状态。
学习者(learner)
- 跟随者(follower) Follower服务器为客户端提供读服务,参与Leader选举过程,参与写操作“过半写成功”策略。
- 观察者(observer) Observer服务器为客户端提供读服务,不参与Leader选举过程,不参与写操作“过半写成功”策略。用于在不影响写性能的前提下提升集群的读性能。
客户端(client):服务请求发起方。
NO6:你熟悉Zookeeper节点ZNode和相关属性吗?
节点有哪些类型?
Znode两种类型:
持久的(persistent):客户端和服务器端断开连接后,创建的节点不删除(默认)。
短暂的(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除。
Znode有四种形式:
- 持久化目录节点(PERSISTENT):客户端与Zookeeper断开连接后,该节点依旧存在持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
- 客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号:临时目录节点(EPHEMERAL)
- 客户端与Zookeeper断开连接后,该节点被删除:临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)
- 客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
「注意」:创建ZNode时设置顺序标识,ZNode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。
结局:总结+分享
看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱,所以福利也为你准备,这份1000题免费送你!点击这里免费领取
- Java互联网工程师面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 程序员代码面试指南–IT名企算法与数据结构题目最优解
- 其余像设计模式,建议可以看看下面这4份PDF(已经整理)
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
QrDdF-1624325089520)]
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
[外链图片转存中…(img-yvpEP3D6-1624325089520)]
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!
Java学习路线!java大数据开发心得,2021最新版!相关推荐
- 大数据和java就业前景_java大数据开发的就业前景及未来趋势
有这样一句话叫数据重构商业,流量改变未来.小编带你1分钟解读java大数据开发的就业前景及未来趋势,作为大数据岗位中的 "大熊猫",大数据工程师的收入待遇可以说达到了同类的顶级.j ...
- 大数据开发和java的前景_大数据开发和javaEE后端开发哪个就业前景好?
javaEE后端开发和大数据开发(Hadoop Spark...)哪个就业前景好? 本科计算机毕业一年了最近在自学想选择一个方向努力有JavaSE基础想知道这两个方向市场怎么样我知道javaEE后端开 ...
- 大数据开发和java的前景_Java大数据开发前景好吗?
在IT职业领域,Java一直以来都是占据着非常重要的位置的,而在进入大数据时代之后,Java也再次获得了更好的发展方向.在大数据应用开发当中,Java是重要的编程语言,学大数据需要Java基础.今天我 ...
- 阿里云Java学习路线 - Java编程入门 笔记
学习链接 目录 学习链接 第一章 Java语言介绍 1.Java发展简介 2.Java语言特点 3.Java可移植性 第二章 搭建Java开发环境 1.JDK简介 2.安装完成后配置JDK环境 第三章 ...
- 大数据开发学习:进行大数据开发课程有哪些
想要成为工资高.待遇好的大数据工程师,是需要专业的技能的.对于专业大数据技术的学习,需要学习的大数据开发课程有哪些呢? 大数据开发课程: 一.Hadoop 可以说,hadoop几乎已经是大数据代名词. ...
- java学习路线 Java学习路线
Java 学习路线一条龙! 大纲: 路线特点: 1.最新,完整一条龙,从入门到入土(⭐ 表示推荐学习) 2.给出目标.学习建议.关键知识点.最优资源以及各类资源推荐(视频.书籍.文档.项目.工具等) ...
- 大数据工程师学习路线,大数据培训后好就业吗?能拿多少钱?
大数据开发工程师在一线城市和大数据发展城市的薪资是比较高的,因为我接触到的学生毕业后一般在北京.广东.上海.南京地区就业的居多,所以可能我的概括也有局限性仅供你参考.对于一些大数据行业就业信息的数据报 ...
- 2018年,Java程序员转型大数据开发,是不是一个好选择?
近日网上有一篇关于Java程序员职场生存现状的文章"2017年 Java 程序员,风光背后的危机",在Java程序员圈子里引起了广泛关注和热议. 2017年,Java 程序员面临更 ...
- 哈罗python的学费多少-哈啰出行招聘Java、算法、大数据开发、安卓、iOS、运维架构专家/高级专家等...
简历请发hanlongjie05932@hellobike.com 资深IOS开发工程师 工作职责: 1.负责IOS平台应用产品的研发工作: 2.负责根据产品需求完成模块设计.编码.编码集成工作: 3 ...
- 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...
最新文章
- JavaScript初学者编程题(17)
- python 删除文件-python 删除文件和读取文件
- 上汽集团金忠孝: 人工智能时代的汽车将发生颠覆的变革
- 高级Python:定义类时要应用的9种最佳做法
- react16.8+的生命周期
- php 性能日志,php性能分析之php-fpm慢执行日志slow log用法浅析
- 【Vue2.0】—vue-router(二十六)
- Refactoring Game Entities with Components
- 基于Matlab深度学习的驾驶员疲劳检测系统
- itextPDF生成表格的pdf
- 用Radeon RAMDisk在Windows 10中创建关机或重新启动不消失的内存虚拟盘
- python爬app视频_用Python爬抖音APP短视频
- 迅雷手机版苹果版_迅雷IOS版恢复下载,又能用苹果手机下载电影愉快追剧了
- oracle分析函数结构,oracle之分析函数解析及其应用场景
- C# XmlDocument.Save文件操作System.IO.IOException:The process cannot access the file because it is being
- sass基础操作记录
- 无人驾驶汽车系统入门(十八)——使用pure pursuit实现无人车轨迹追踪
- [2020.1.1]2020第一个blog哟~~~一套RGB分体水冷攒机单
- Python学生管理系统(界面版)
- 四大名著之精选22句名言:经典即是永恒,蕴藏人生哲理