网易资深Java架构师:java数组对象转为list集合

前言

现在刷抖音经常可以看到一些老外街坊,问他们最想把什么带回自己的国家,我听过很多的回答都是:淘宝,支付宝,美食,微信,外卖,高铁等等。

确实如此,随着国家的快速发展吸引了不少国际上羡慕的目光,更让中国的新四大发明走向世界。说到这些,都离不开背后庞大的互联网体系的支撑,阿里作为国内最顶级的互联网企业必然也聚集了行业内顶级的IT人才。

众所周知,阿里巴巴的主要开发语言就是Java,而对于Java开发者来说,最重要的就是学习Spring框架了。现在,我想跟大家分享出这份老外看外都不禁赞叹的《阿里技术官Spring全家桶笔记》,赶紧一睹为快吧。

咱们都知道,学Spring最重要的还是它的核心思想AOP和IOC,这两个内容也单独拿出来做一份笔记来重点讲解了,先睹为快!

由于篇幅限制,这两个知识点讲的干货内容非常多,这里只能截取部分文档内容展示,完整版获取在上面,感谢配合。

正文

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 用于存储元数据,需要单独存储应用数据

最后

面试题文档来啦,内容很多,485页!

由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。有想获取完整版笔记的朋友,点赞后点击这里免费领取哦

1111道Java工程师必问面试题

MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:

Elasticsearch 24 题 +Memcached + Redis 40题:

Spring 26 题+ 微服务 27题+ Linux 45题:

Java面试题合集:

R2og42E-1622454470125)]

Elasticsearch 24 题 +Memcached + Redis 40题:

[外链图片转存中…(img-WYOLv9UP-1622454470126)]

Spring 26 题+ 微服务 27题+ Linux 45题:

[外链图片转存中…(img-rSWlOipn-1622454470127)]

Java面试题合集:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

夯实基础——P2084 进制转换

题目链接:https://www.luogu.org/problem/P2084 P2084 进制转换 题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^40*2^31*2^20*2^11*2^0, 那么请你编程实…

网易资深Java架构师:java方法的定义和使用

前言 今年因为这个疫情,感觉这是从工作以来过的最久的一个年了,在家呆的时间不是一般的久,算一算有好几个月呢!我大概是3月底快4月了才出门,投了超多的简历,天天面试面试面试面试面试面试面试…庆幸的是还…

PHP----学生管理系统

闲来无事花费两天时间写了份简易版的学生管理系统 源码地址:https://www.cnblogs.com/post/ReadAuth?blogId509327&PostId11333758&url%2Fbyczyz%2Fprotected%2Fp%2F11333758.html 转载于:https://www.cnblogs.com/byczyz/p/11333760.html

网易资深Java架构师:jdkjrejvm的区别和联系

前言 作为同时具备高性能、高可靠和高可扩展性的典型键值数据库,Redis不仅功能强大,而且稳定,理所当然地成为了大型互联网公司的首选。 众多大厂在招聘的时候,不仅会要求面试者能简单地使用Redis,还要能深入地理解底…

深度学习之开端备注

Adagrad //适合稀疏样本 RMSprop//借鉴Adagrad的思想,改进使得不会出现学习率越来越低的问题 由此可见Adadelta既不需要输入学习率等参数,而且表现得非常好!!但是我试了几次,这个优化器效果极差!&#xff0…

网易资深Java架构师:疫情对java行业的影响分析

前言 在实际开发,Redis使用会频繁,那么在使用过程中我们该如何正确抉择数据类型呢?哪些场景下适用哪些数据类型。而且在面试中也很常会被面试官问到Redis数据结构方面的问题: Redis为什么快呢?为什么查询操作会变慢了…

ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值

原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_20130624.aspx ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值 本文跟上一篇文章有关连,请依照顺序来练习&#xff1…

美团java研发岗二面:java静态方法存储在哪个区

思维导图 前言 在很多时候,我们都可以在各种框架应用中看到ZooKeeper的身影,比如Kafka中间件,Dubbo框架,Hadoop等等。为什么到处都看到ZooKeeper? 一、 前些年,互联网行业里对架构师这个岗位的标准还不是…

[学习之道] 修福不修慧,大象披璎珞; 修慧不修福,罗汉托空钵 (学习写程序,只靠补习上课吗?)...

这是我的备份,原文请看 http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/17/learning-and_do-it_20140917.aspx [学习之道] 修福不修慧,大象披璎珞; 修慧不修福,罗汉托空钵 (学习写程序,只靠补习上课吗&#…

阿里P8亲自教你!mysql列转行

前言 今日博主听闻,现在很多培训出来的应届生薪资都赶上了摸爬滚打两三年的朋友,讲道理,这说不过去啊 作为同行来说,这个行业发展很快,技术更新很快,淘汰也很快,千万不要再找借口了&#xff0…

同步、异步、多线程

1、首先明确一点,对于单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢? 举例来说,现在只有一个人,要做好几个任务。单线程就是,任务一个一个地做,必须做…

阿里P8亲自教你!熬夜整理华为最新Java笔试题

前言 Mysql的锁机制确实非常重要,所以在这里做一个全面的总结整理,便于以后的查阅,也分享给大家。 Mysql的锁机制还是有点难理解的,所以这篇文章采用图文结合的方式讲解难点,帮助大家理解,讲解的主要内容…

JSP基础笔记

/** #####这部分也是笔记,用于记录JSP的相关内容* ###怎么用JSP###指令的写法* <% 指令名字%>* *### page指令 * language > 表明jsp页面中可以写java代码 * contentType > 其实即使说这个文件是什么类型&#xff0c;告诉浏览器我是什么内容类型&#xff0c;以及使…

阿里P8亲自讲解!javawhile循环语句用法

前言 作为一个已经毕业的计算机专业学长&#xff0c;其实几年大学走来还是挺感慨万千的。&#xff08;说明一下&#xff1a;一本&#xff0c;非958、211&#xff09; 老实说&#xff0c;上大学之前填志愿选专业的时候没有任何打算&#xff0c;就觉得学海熬到头了&#xff0c;向…

Cookie,Session基础知识

//这部分主要是CookieSession的笔记部分/** //获取来访的客户端类型String clientTyereq.getHeader("User-Agent");//如果是火狐浏览器&#xff0c;那么使用以下代码if(clientTye.contains("Firefox")){fileNameDownLoadUtil.base64EncodeFileName(fileNam…

阿里P8亲自讲解!java中级开发工程师需要掌握的技能

前言 关于技术人如何成长的问题&#xff0c;一直以来都备受关注&#xff0c;因为程序员职业发展很快&#xff0c;即使是相同起点的人&#xff0c;经过几年的工作或学习&#xff0c;会迅速拉开极大的差距&#xff0c;所以技术人保持学习&#xff0c;提升自己&#xff0c;才能够…

随笔--互联网进化论

不闻不若闻之&#xff1b;有的人士的理论引起了轰动&#xff0c;吾等小网民也来学学&#xff0c;没那么大脑袋&#xff0c;从不敢谈解读与批判。闻香而来&#xff0c;放屁而去。比如说互联网进化论。看看实践&#xff0c;互联网的膨胀式发展是不会停的&#xff0c;在中国的互联…

阿里P8亲自讲解!java分布式需要学什么技术

引言 最近项目上线的频率颇高&#xff0c;连着几天加班熬夜&#xff0c;身体有点吃不消精神也有些萎靡&#xff0c;无奈业务方催的紧&#xff0c;工期就在眼前只能硬着头皮上了。脑子浑浑噩噩的时候&#xff0c;写的就不能叫代码&#xff0c;可以直接叫做Bug。我就熬夜写了一个…

Javascript的this用法

出自&#xff1a;http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this是Javascript语言的一个关键字。 它代表函数运行时&#xff0c;自动生成的一个内部对象&#xff0c;只能在函数内部使用。比如&#xff0c; function test(){ this.x 1; }…

[New Portal]Windows Azure Web Site (4) Web Site Gallery

《Windows Azure Platform 系列文章目录》 前言&#xff1a;最近因为工作变动&#xff0c;更新博客的速度变慢了。笔者在这边感到非常抱歉&#xff0c;以后尽量每周更新一篇Windows Azure的博客给大家。 好了&#xff0c;我们回到本章内容。 Windows Azure通过Web Role和Worker…