不经意早已组织工作 5 年了,一路上走过力不从心但终于有了他们的一点儿小感受。对两个 Java 合作开发者而言,到了 5 年的关键性结点,须要掌控什么样习题呢?历经我他们的归纳,我列举了下面的观念填空。

自动草稿

从下面的相片他们能窥见大体分成四个部份:JDK 源代码、JVM 基本原理、架构源代码。

JDK源代码

JDK 源代码是所有人的此基础,很多架构都参照了 JDK 源代码的同时实现路子,因而搞清楚 JDK 源代码是两件十分关键的事。而 JDK 源代码又能分成下面 4 小块:

子集源代码mammalian子集源代码并承揽源代码堵塞堆栈源代码缓存池源代码子集源代码

说到子集,他们我们都十分熟识,这不过他们组织工作时用得十分多的两类 API。但会用了,还得晓得它究竟是怎样同时实现的,这种才能防止踩坑。JDK 源代码中的子集并并非不光多,约莫有 五大类约莫 14 个常见的 API。

List子集

ArrayList:列表子集经典同时实现。Vector:列表子集经典同时实现,缓存安全,与 ArrayList 对应。LinkedList:链表结构的经典同时实现。Stack:栈结构的经典同时实现,先进后出的数据结构。继承了 Vector,缓存安全。Set子集

HashSet:Set 子集的哈希同时实现。LinkedHashSet:Set 子集的哈希同时实现,维护了元素插入顺序。TreeSet:Set 子集的有序同时实现。Queue子集

PriorityQueue:优先级堆栈LinkedList:双向堆栈同时实现ArrayDeque:双向循环堆栈同时实现Map子集

HashMap:Map 子集的经典哈希同时实现。LinkedHashMap:在 HashMap 的此基础上,增加了对插入元素的链表维护。WeakedHashMap:在 HashMap 的此基础上,使强引用变为弱引用。TreeMap:Map 子集的有序同时实现。底层是红黑树的经典同时实现。在这 14 个常见的 API 中虽然有一些他们还没使用过,但如果你要建立起一套完整的知识体系,那么还是有必要去仔细琢磨一下它们的作用,并且对它们进行横向比较的。

mammalian子集源代码

他们前面说到的子集源代码,它们大部份都是缓存不安全的,它们在多缓存的环境下使用会产生各种各样的问题。而缓存安全与mammalian安全又不一样,缓存安全考虑的是绝对的安全,而mammalian安全则是牺牲部份特性来提高mammalian效率。也就是说mammalian子集适合在多缓存环境下使用,并且效率足够高,能够应对高mammalian的情况。

在 JDK 的mammalian子集源代码中,一共有 7 个常见的mammalian子集。

ConcurrentHashMap:高mammalian的HashMapConcurrentSkipListMap:高mammalian下的TreeMap(基于跳表同时实现)ConcurrentSkipListSet:内部使用ConcurrentSkipListMap同时实现CopyOnWriteArrayList:高mammalian的ArrayList,适合读场景。CopyOnWriteArraySet:高mammalian的Set子集,使用CopyOnWriteArrayList同时实现。ConcurrentLinkedQueue:高mammalian的链表堆栈。ConcurrentLinkedDeque:高mammalian的双向链表堆栈。虽然有 7 个mammalian子集,但是实际上只有 5 个左右,因为另外两个都直接用代理的方式委托同时实现。例如:CopyOnWriteArraySet 类内部并没有具体的逻辑同时实现,而是直接委托 CopyOnWriteArrayList 同时实现。

并承揽源代码

他们前面说过很多子集都是缓存不安全的,在多缓存环境、甚至高mammalian环境须要使用mammalian子集。那么mammalian子集究竟是怎么同时实现缓存安全的呢?在 JDK1.8 之后,mammalian子集大部份都使用 CAS 来同时实现缓存安全。而其实在 JDK1.8 之前,很多缓存安全都是使用锁来同时实现的。而说到锁,他们就必须了解一下并承揽源代码。

并承揽源代码从零开始定义了一整套同时实现mammalian安全的机制,并且还提供了不少方便使用的mammalian工具。他们通过并承揽就能十分方便地同时实现多缓存下的缓存安全和mammalian控制,后面说到的堵塞堆栈都是以这个为此基础的。

并承揽是一整套接口和同时实现的定义,其主要的类和同时实现如下:

自动草稿

在mammalian源代码最顶层的是 AbstractQueueSynchronizer 接口,其定义了mammalian控制最为此基础的几个接口,之后的 Lock、ReentrantLock、ReentrantReadWriteLock 都是在这此基础上同时实现的。而 Condition 接口则是继 AbstractQueueSynchronizer 接口之后的另两个关键接口,其定义了分支条件,使得mammalian适用于更复杂的业务。

定义好了 AbstractQueueSynchronizer 和 Condition 接口,并承揽的此基础就搭建好了。并承揽中提供了 CountDownLatch、CyclicBarrier 等mammalian工具类来同时实现常见的mammalian操作,这些工具类都是使用前面提到的 Lock 来同时实现的。

堵塞堆栈源代码

堵塞堆栈其实是属于并承揽的一部份,但因为其功能性不光明显,所以他们专门挑出来单独说。堵塞堆栈用于在高mammalian环境下进行数据的交换,其同时实现此基础是他们前面说到的并承揽,没有并承揽就没有堵塞堆栈。

在 JDK 中,堵塞堆栈一共能分成三大类一共 8 个常见的堵塞堆栈。

此基础同时实现

这块是堵塞堆栈最此基础的同时实现

ArrayBlockingQueue:数组组成的有界堵塞堆栈LinkedBlockingQueue:链表组成的无界堵塞堆栈LinkedBlockingDeque:链表组成的双向堵塞堆栈有序延迟同时实现

这块的堵塞堆栈还同时实现了元素的排序以及延迟功能,只有时间到了才能出堆栈。

PriorityBlockingQueue:支持优先级排序的无界堵塞堆栈DelayQueue:支持优先级同时实现的无界延迟堵塞堆栈DelayedWorkQueue:缓存池中的延迟堵塞堆栈数据交换同时实现

这块堵塞堆栈主要用于多缓存之间的数据交换

SynchronousQueue:不存储元素的数据交换堵塞堆栈LinkedTransferQueue:链表组成的数据交换无界堵塞堆栈

自动草稿

缓存池源代码

缓存池也是 JDK 源代码中十分关键的一块,妥善利用缓存池能提高效率。而缓存池的此基础其实就是他们前面讲到的堵塞堆栈,缓存池的延迟功能都是使用堵塞堆栈同时实现的。缓存池的整体架构比较多,但是并不复杂,也没有什么难点。如果搞清楚了缓存池的整体类结构,那么缓存池也就没什么太大的问题了。

自动草稿

JVM基本原理

JVM 能说是 Java 程序员必须要掌控的此基础知识了。初学者或许会搞不懂这些东西究竟有什么用,一开始自学都是为了面试用。但老司机告诉你自学 JVM 基本原理有下面两个十分关键的用处:

理解 Java 语言特性。Java 代码写出来的只是语言层面的东西,当他们要了解两个特性是怎样同时实现的,他们就须要深入到字节码层面。例如:boolean 这个类型,在 Java 语言层面是存在的。但是其在字节码层面是不存在的,其在字节码层面是使用 Integer 的 1 和 0 表示 true 和 false。自学排查线上问题。他们遇到线上 JVM 问题,经常提示说:OutOfMemoryError: Java heap space。这时候你会不晓得从何入手,这是因为你不懂 JVM 的内存结构。所以你必须去自学 JVM 的内存结构,怎样排查问题发生在哪块内存,怎样解决问题。而这所有人的此基础就是 JVM 的此基础知识。架构源代码

自学完 JDK 的源代码,他们就须要把他们常见的架构源代码都弄清楚。这种在遇到架构问题的时候,他们才能快速地排查问题。

自动草稿

下面的观念填空从上到下都是逐次递进的。他们自学了 JDK 源代码,再自学 Web 架构就能同时实现简单的 Web 项目。而随着业务增长,他们须要加入 RPC 服务化架构将其服务化。而随着业务复杂化和井喷,他们须要加入消息堆栈和缓存来进一步提高业务的稳定性。

如果你现在也在学Java,了解Java,渴望成为一名合格的Java合作开发工程师,在整个Java的自学过程当中,你有遇见任何关于自学方法,自学走线,自学效率等方面的问题,都能申请加入我的Java新手自学q-u-n:前面输入是: 537 ,中间输入是: 864 ,最后输入是:(2/51),这里面聚集了很多正在自学Java技术的初学者,其中不乏也有正在从事Java技术合作开发的大佬,有任何不懂的地方都能随时在里面探讨交流,不忙的时候我也会抽出一定的时间给我们进行解答。

Web架构

Spring 和 MyBatis 能说是 Java Web 合作开发者必学的两个架构了,因而对这两个架构有必要做两个深入的了解。

对 Spring 而言,其整个源代码体系太过于复杂,所以他们还是得抓住重点。对 Spring 而言,最关键的是其 AOP 和 IoC 的同时实现,以及其容器体系和常见的接口。而对 MyBatis 而言,其体系相对没有 Spring 那么复杂,所以能稍微深入一些。

RPC架构

在所有 RPC 架构中,dubbo 能说是最通用的两个了。所以如果你所在的公司没有自研的 RPC 架构,那么你不妨能将 dubbo 作为你的自学架构。

对 RPC 架构而言,其实无非就是封装对象代理,最后通过与服务提供者进行网络通信。但是怎样进行封装,如果进行负载均衡的同时实现,这就考验两个架构设计者的功力了。

一致性架构

对分布式系统,十分关键的两个组件就是一致性架构。在这些架构中,最常见的两个是 Zookeeper 和 Eureka。Zookeeper 同时实现了 CAP 中的 CP(即注重强一致性),而 Eureka 则是同时实现了 CAP 中的 AP(即注重可用性)。

虽然平常他们都将 Zookeeper 和 Eureka 作为服务化的协调组件,基本上没有什么机会深入自学。但是有机会还是能深入了解一下的。

消息堆栈

消息堆栈能说是同时实现业务解耦以及突发流量的利器。而在大型业务场景中,最常见的就是 Kafka 和 RocketMQ 了,因而搞清楚这两个消息堆栈的基本原理基本上就足够用了。

对消息堆栈,建议先选择两个深入研究,先搞清楚其基本基本原理,之后再阅读源代码验证想法。因为 RocketMQ 是基于 Kafka 改进的,所以建议先从 Kafka 入手研究。Kafka 研究得差不多了,RocketMQ 的研究也会进展飞速。

缓存架构

缓存架构能说是高mammalian下必用的两个架构了,但他们经常只是使用它,而不晓得起内部的基本原理和构造。因而找个时间深入自学下基本原理,还是很有必要的。

网络架构

对一些网络项目,例如聊天 IM 等,就须要用到 Netty 等架构。而 Netty 又是这类网络架构的佼佼者,通过对其源代码的研究,能学到不少知识。

搜索架构

对一些搜索功能的项目,单纯的数据库 SQL 查询早已无法满足需求了,这时候 ElasticSearch 的自学和研究就提上议程了。有时间的话,研究自学一下还是很有必要的。

增量订阅架构

Canal 和 Otter 架构能帮助你获得数据库的变化信息,从而更方便地做业务扩展。对这类架构,属于特定领域的细分架构,有时间能研究一下。

归纳

作为两个组织工作了 5 年的合作开发,下面的知识体系还是未能完全消化,只能说是对部份有些掌控。如果你也想构建他们的知识体系,那么我建议你能按照我列举的顺序去自学。先研究自学 JDK 源代码,之后自学 JVM 基本原理,最后再去研究自学架构源代码。而架构源代码的研究也从该架构的常见程度排序,对 ElasticSearch 这类不常见的,能放在后面。而对 Spring 这些用得很多的,则须要放在前面.

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!