开头

学习如逆水行舟,尤其是IT行业有着日新月异的节奏。

而且现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱,只是被互联网的高薪吸引,毕竟技术岗位非常枯燥,不仅要面对奇奇怪怪的需求,还要不停的充实自己避免被淘汰。所以,我们更要抓紧每一次可以学习和进步的机会。没有撤退可言!

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为明年的金三银四做准备!

正文

ZooKeeper 很流行,有个基本的疑问:

  • ZooKeeper 是用来做什么的?
  • 之前没有ZK,为什么会诞生 ZK?

OK,解答一下上面的疑问:(下面是凭直觉说的)

  • ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节
  • ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发
  • ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群

上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑问就更多了:

  1. 分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的?
  2. ZooKeeper 对外暴露了那些 API?这些 API 如何支持分布式应用开发的?这些 API 还能简化吗?API 的语义性怎么样?
  3. ZooKeeper 自身是一个高性能、高可用、高可靠的分布式集群,那有个简单的问题:
  • 高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作?
  • 高可用同上
  • 高可靠同上

Note:本篇 wiki 就是为了解决上述第一个疑问的。(其他疑问会在其他 blog 中逐步解答)

为什么有 ZooKeeper

一个应用程序,涉及多个进程协作时,业务逻辑代码中混杂有大量复杂的进程协作逻辑。

上述多进程协作逻辑,有 2 个特点:

  • 处理复杂
  • 处理逻辑可重用

因此,考虑将多进程协作的共性问题拎出,作为基础设施,让 RD 更加专注业务逻辑开发,即:

ZooKeeper 就是上述多进程协作基础服务的一种。

ZooKeeper 的特点

ZooKeeper 有几个简单特点:

  • ZooKeeper 的 API:从 文件系统 API 得到的启发,提供简单的 API
  • ZooKeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性可扩展性

ZooKeeper 是存储设施,但特别注意

  • ZK上存储的数据聚焦为:协作数据元数据),而不是应用数据,应用数据有自己的存储方案,例如 HDFS 等
  • ZK 本质上,可以看作一种特殊的 FS

特别说明:

应用数据和元数据,由于使用场景不同,对一致性和持久性的要求有差异, 因此,架构设计、数据治理过程中,应将 2 类数据独立看待、独立存储。

ZooKeeper 的使命

ZK 要解决的核心问题:

ZK 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供高效可靠的分布式协调服务(基础服务),例如:

  • 统一的命名服务
  • 分布式锁
  • 进程崩溃检测
  • Leader 选举
  • 配置管理:配置变更时,及时下发到各个 Client。

一个简单的问题:多进程的协作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是回答一下。

多进程协作,整体分为 2 类:

  1. 协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,M 向 S 分配任务,S 才会执行,否则 S 就保持空闲状态
  2. 竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,M 节点失效后,很多 S 都想成为 M,这时,就需要互斥锁,只有第一个获得锁的 S 成为 M

特别说明:

  1. 不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量)
  2. 跨网络协作:多进程,分布在不同的物理主机上,ZK 关注这一类

跨网络多进程协作,进程通信,基本思路有 2 个:

  1. 消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语
  2. 共享存储:利用外部共享存储,实现多进程协作,要求共享存储提供有序访问,ZK 采用这种方式

真实系统中,跨网络通信,有几个共性问题:

  1. 消息延迟:由于网络原因,后发送先到达
  2. 处理器性能:由于系统调度原因,消息到达后,延迟处理
  3. 时钟偏移:不同物理主机,时钟发生偏移

ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面完全透明化。

ZooKeeper 特性

ZooKeeper 解决的本质问题

分布式系统的一致性问题:

  1. 消息传递:延迟性,先发送的消息,不一定先到达;
  2. 消息传递:丢失性,发送的消息,可能丢失;
  3. 节点崩溃:分布式系统内,任何一个节点都可能崩溃;

在这种情况下,如何保证数据的一致性?

  1. 提案投票:基于投票策略,2PC
  2. 选举投票:基于投票策略,投出优先级最高的节点(包含最新数据的节点)

Paxos 目标:解决分布式一致性问题,提高分布式系统容错性的一致性算法。

Paxos 本质:基于消息传递高度容错一致性算法

ZooKeeper 定位

ZooKeeper 是:

  1. 分布式协调服务
  2. 高效、可靠
  3. 方便应用程序,聚焦业务逻辑开发,而不需要过多关注分布式进程间协作细节

ZooKeeper 不直接暴露原语,而是,暴露一部分调用方法组成的 API,类似文件系统的 API,支持应用程序实现自己的原语

ZooKeeper 特性

ZooKeeper 可以保证如下分布式一致性特性:

  • 顺序一致性:同一个 Client 发起的事务请求,严格按照发起顺序执行
  • 原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用
  • 单一视图:Client 无论连接到哪个节点,看到的服务端数据都是一致的(Note:不准确,其实是最终一致性
  • 可靠性:事务一旦执行成功,状态永久保留
  • 实时性:事务一旦执行成功,Client 并不能立即看到最新数据,但 ZooKeeper 保证最终一致性

ZooKeeper 设计目标

ZooKeeper 致力于提供高性能高可用顺序一致性的分布式协调服务,保证数据最终一致性

目标一:高性能(简单的数据模型)

  1. 采用树形结构组织数据节点;
  2. 全量数据节点,都存储在内存中;
  3. Follower 和 Observer 直接处理非事务请求;

目标二:高可用(构建集群)

  1. 半数以上机器存活,服务就能正常运行
  2. 自动进行 Leader 选举

目标三:顺序一致性(事务操作的顺序)

  1. 每个事务请求,都会转发给 Leader 处理
  2. 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)

目标四:最终一致性

  1. 通过提议投票方式,保证事务提交的可靠性
  2. 提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据

ZooKeeper 出现之前

ZK 出现之前,分布式系统常用两种方式,实现多进程协作:

  1. 分布式锁管理器
  2. 分布式数据库

ZK 更专注于进程协作,而不提供任何锁接口和通用的存储数据接口。(疑问:ZK 也可以提供啊,我们不使用就行了)

应用服务器,常见的 2 种需求:

  1. Master-Slave Leader 选举:要求提供Master节点选举功能
  2. 进程响应跟踪 崩溃检测:要求提供进程存活状态的跟踪
  3. 分布式锁:互斥排它锁

ZK 为上述 2 种策略提供了基础 API。

ZooKeeper 不适用的场景:

  1. 海量数据存储:ZK 本质是特殊的 FS,但 ZK 用于存储元数据,需要单独存储应用数据

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再免费分享一波我的Java面试真题+视频学习详解+技能进阶书籍

点击这里即可免费获取以上我收集整理的全部学习资料

低效漫长且无助。**

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再免费分享一波我的Java面试真题+视频学习详解+技能进阶书籍

点击这里即可免费获取以上我收集整理的全部学习资料

写得太好了!java导出excel设置单元格格式相关推荐

  1. java导出excel表格设置行高,POI导出Excel设置单元格格式

    使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = templ ...

  2. java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...

    java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...

  3. POI导出Excel设置单元格背景色

    POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...

  4. java-EasyExcel导出excel设置单元格为文本格式(含代码)

    java-EasyExcel导出excel设置单元格为文本格式(含代码) 在使用EasyExcel导出excel模板时.我们会发现导出的日期和大长度数字都会自动更换格式,不是文本格式.并且在空白单元格 ...

  5. java导出excel合并单元格

    今天是2018最后一天了,废话就不多说了直接上干货吧! 1.java导出excel用到POI所有jar包 ,大家可以直接到下面地址下载点击打开链接 2.导出excel的方法 package org; ...

  6. java poi excel 单元格样式_java poi批量导出excel 设置单元格样式

    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  7. 【记录】 layui导出表格设置单元格格式

    今天写项目时,一个导出Excel的需求:需要设置导出的Excel表格内容居中,并且设置单元格列宽.现在记录一下,大佬勿喷.代码如下: //设置excel表格列宽var colConf = excel. ...

  8. java导出excel合并单元格_Java 导出Excel 合并Excel单元格

    /** * 导出Excel表格 * * @param allList  要导出的数据 * @param headArr  json键值对 * @param titleArr excel标题 * @pa ...

  9. hutool导出excel 设置单元格日期格式 poi设置excel单元格日期格式

    hutool导出导入excel很方便,但没有依赖poi,需要手动添加poi依赖. <properties><poi.version>4.1.2</poi.version& ...

最新文章

  1. 反射机制(1)认识Class类
  2. strace命令用法
  3. 栈溢出利用-----jmp esp
  4. c#之using关键字
  5. Enterprise Solution 应用程序开发框架培训
  6. 在 Queue 中 poll()和 remove()有什么区别?
  7. html排版跟代码不一致_用壹伴助手,几分钟搞定公众号排版
  8. python设计一个爱心_python画一个玫瑰和一个爱心
  9. [Win32]创建模态窗口
  10. Sangfor AIOps in VDI:快看深信服IOM如何快速解决70%以上的桌面云运维管理问题
  11. MicroSIP软电话安装配置说明
  12. 5-6月份线上可靠性、软件测试、信息安全培训
  13. 别克汽车常见疑难故障1000实例
  14. Kaggle项目之Mobile App Store
  15. instr,left,mid 定位、取内容(字符串)函数
  16. C++析取器在代码自动化测试中的应用
  17. BUG(10) : Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be
  18. 【Python】-setting模块的安装
  19. java代码怎么打印松树_用JAVA画一颗树(Applet)
  20. 软件工程导论张海蕃书籍pdf_《软件工程导论》张海蕃 课后习题答案

热门文章

  1. Ubuntu_安装输入法以及输入法切换的问题
  2. [2018北京ICPC网络赛H] HihoCoder - 1835 K-Dimensional Foil II(点到平面的距离)
  3. Actor-Critic算法
  4. a 标签之假链接 和假链接
  5. 无线ldap认证服务器,华为AC6605对接OpenLDAP实现无线Portal认证
  6. Google正在研究利用海底通讯光缆中的偏振光实现海洋遥感
  7. 《天空之城》的吉他乐普
  8. 华清远见-重庆中心-JAVA面向对象阶段技术总结:
  9. 教程一:windows api(c mfc vs2017)实现U盘插拔检测,获取U盘容量,U盘内容移动,开启和关闭U盘以及获取盘符等
  10. cas4.10 mysql 配置_配置cas实现单点登录实例