Java面试核心知识点笔记
其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。
Java中高级面试高频考点整理
最后分享Java进阶学习及面试必备的视频教学
今天就给大家分享阿里P8高级技术专家分享出的深度剖析ApacheDubbo核心技术文档,将从目录、主要内容和总结给大家来进行介绍,因为文档包含的内容较多,不能一一给大家做介绍,所以只能把部分知识点拿出来给大家介绍,希望大家能够理解与喜欢!!
目录
==
Dubbo基础;
============
- 1.1初识Dubbo,整体来说,一个公司业务系统的演进流程基本上都是从单体应用到多体应用。业务系统为单体应用时,不同业务模块的相互调用直接在本地JVM进程内就可以完成;而变为多个应用时,相互之间进行通信的方式就不是简单地进行本地调用了,因为不同的业务模块部署到了不同的JVM进程里,更常见的情况是部署到了不同的机器中,这时候,一个高效稳定的RPC远程调用框架就变得非常重要。
Dubbo是阿里巴巴开发的一个开源的高性能的RPC调用框架,是一个致力于提供高性能和透明化的RPC远程调用服务解决方案。作为阿里巴巴SOA服务化治理方案的核心框架,目前它已从Apache孵化器项目毕业,其前景可谓无限光明。
- 1.2本文Demo详解;
Dubbo框架内核原理剖析;
==================
-
2.1 Dubbo分层架构概述,本节我 从整体上来看看 Dubbo 的分层架构设计,架构分 个比较经典的模式,比如网络中的 协议,每层执行固定的功能,上层依赖下 提供的功能,下层的改变对上层不可见 ,并且每层都是 个可被替换的组件
-
2.2 Dubbo远程调用细节,本节我们先从整体来看看 Dubbo 务发布与消费的概要流程, 以便对其中涉及的概念有个了解,更详细的过程后面的章节会具体讲解。
-
2.3 Dubbo的适配器原理,在前面谈论 ubbo 分层架构时,我们讲到, Dubbo 为每个功能点提供了一个 SPI展接口, Dubbo 框架在使用扩展点功能的时候是对接口进行依赖的,而 个扩展接口对应系列的扩展实现类。那么如何选择使用哪个扩展接口的实现类呢?其实这是使用适配器模式来做的。
-
2.4 Dubbo的动态编译原理,众所周知 Java 程序要想运行首先需要使用 javac 源代码编译为 class 宇节码文件然后使用 M 把 class 字节码文件加载到内存创建 lass 对象后,使用 lass 对象 建对象实例。正常情况下我 是把所有源文件静态编译为字节码文件, 然后由 NM 统一加载,而动态编译则是在 JVM 进程运行时把源文件编译为字节码 文件,然后使用字节码文件创建对象实例。
-
2.5 Dubbo增强SPI,前面我们讲解了 Dubbo 框架如何使用动态编译技术给每个扩展接 生成适配器类,并讲解了适配器类根据其中的参数来选择对应的 SPI 实现,下面我们讲解在适配器类中是如何根据参数来装载具体的SPI 实现的。
-
2.6 Dubbo使用JavaAssist减少反射调用开销,Dubbo 会给 个服务提供者的实现类生产一个 Wrapper 这个 Wrapper 类里面最终调用服务提供者的接口实现类,Wrapper 类的存在是为了减少反射的调用。当服务提供方收到消费方发来的请求后,需要根据消费者传递过来的方法名和参数反射调用服务提供者的实现类,而反射本身是有性能开销的,Dubbo把每个服务提供者的实现类通过JavaAssist包装为- - 个Wrapper 类以减少反射调用开销。那么Wrapper类为何能减少反射调用呢?
远程服务发布与引用流程剖析;
==================
-
3.1 Dubbo服务发布端启动流程剖析,
-
3.2 Dubbo服务提供方如何处理请求,
-
3.3 Dubbo服务消费方启动流程剖析,
-
3.4 Dubbo服务消费端一次远程调用过程,
Directory目录与Router路由服务;
===========================
-
4.1 Directory目录.,本章我们主要从下面几个方面来探讨RegistryDirectory :●消费端启动时何时构建RegistryDirectory;●RegistryDirectory 管理的invoker列表如何动态变化;●路由信息是如何保存与变化的。
-
4.2 RegistryDirectory 的创建;
-
4.3 RegistryDirectory 中invoker列表的更新,上一节探讨了RegistryDirectory 何时被创建,本节我们看看其管理的invoker列表是何时被创建与更新的。
Dubbo消费端服务mock与服务降级策略原理;
============================
-
5.1服务降级原理,
-
5.2本地服务mock原理,
Dubbo集群容错与负载均衡策略;
=====================
-
6.1 Dubbo集群容错策略概述,当我 进行系统设计时 不仅要考虑正常情况 代码逻辑应该如何 还要考虑异常情况下代码逻辑应该怎么走。当服务消费方调用服务提供方的服务 现错误 Dubbo供了多种容错方案 默认模式为 Failo er luster ,也就是失败重试。
-
6.2 Failfast Cluster策略源码分析;
-
6.3 Failsafe Cluster策略源码分析;
-
6.4 Failover Cluster策略源码分析;
-
6.5 Failback Cluster策略源码分析;
-
6.6 Forking Cluster策略源码分析;
-
6.7 Broadcast Cluster策略源码分析;
-
6.8如何基于扩展接口自定义集群容错策略,前面已经讲过 Dubbo 本身提供了丰富的集群容错策略,但是如果你有定制化需求可以根据 Dubbo 提供的扩展接口Cluster进行定制;
-
6.9 Dubbo负载均衡策略概述,当服务提供方是集群时,为了避免大量请求一直集中在一个或者几个服务提供方机器上,从而使这些机器负载很高,甚至导致服务不可用,需要做一定的负载均衡策略。Dubbo提供了多种均衡策略,默认为random,也就是每次随机调用一台服务提供者的服务。
-
6.10 Random LoadBalance策略源码分析;
-
6.11 RoundRobin LoadBalance策略源码分析;
-
6.12 LeastActive LoadBalance策略源码分析;
-
6.13 ConsistentHash LoadBalance策略源码分析;
-
6.14如何基于打展接口自定义负载均衡策略,如前所述,Dubbo 本身提供了丰富的负载均衡策略,但是如果你有定制化需求,则可以根据Dubbo提供的扩展接口LoadBalance进行定制。
Dubbo线程模型与线程池策略;
====================
-
7.1 Dubbo的线程模型概述,Dubbo默认的底层网络通信使用的是Netty,服务提供方NettyServer使用两级线程池,其中EventLoopGroup(boss) 主要用来接收客户端的链接请求,并把完成TCP三次握手的连接分发给EventLoopGroup(worker)来处理,我们把boss和worker线程组称为IO线程。
-
7.2 AllDispatcher源码剖析;
-
7.3 DirectDispatcher源码剖析;
-
7.4 MessageOnlyDispatcher源码剖析;
-
7.5 ExecutionDispatcher源码剖析;
-
7.6 ConnectionOrderedDispatcher源码剖析;
-
7.7线程模型的确定时机;
-
7.8如何基于扩展接口自定义线程模型,Dubbo提供了常用的线程模型,这些模型可以满足我们绝大部分的需求,但是也可以根据自己的需要进行扩展定制。
-
7.9 Dubbo的线程池策略,我们在上面讲解Dubbo线程模型时提到,为了尽量早地释放Netty的I/O线程,某些线程模型会把请求投递到线程池进行异步处理,那么这里所谓的线程池是什么样的线程池呢?其实这里的线程池ThreadPool也是一个扩展接口SPI,Dubbo 提供了该扩展接口的一些实现。
-
7.10 FixedThreadPool源码剖析;
-
7.11 LimitedThreadPool源码剖析;
-
7.12 EagerThreadPool源码剖析;
-
7.13 CachedThreadPool源码剖析;
-
7.14线程池的确定时机;
-
7.15如何基于扩展接口自定义线程池策略,Dubbo提供了常用的线程池策略,这些策略可以满足我们绝大部分的需求,但是也可以根据自己的需要进行扩展定制。
Dubbo如何实现泛化引用;
==================
我们在本章中将探讨Dubbo如何实现泛化调用,主要内容包括:服务消费端如何使用GenericImplFiter拦截泛化调用,把泛化参数进行校验并发起远程调用;服务提供方如何使用GenercFilter拦截请求,并把泛化参数进行反序列化处理,然后把请求转发给具体的服务进行执行。
-
8.1服务消费端GenericlmplFilter源码分析;
-
8.2服务提供端GenericFilter源码分析;
Dubbo并发控制;
==============
由于资源的限制, 般会在服务提供方和消费方限制接口调用 并发数,本章将探讨相关的原理。
- 9.1服务消费端并发控制;
总结
如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了
《Java中高级核心知识全面解析》
小米商场项目实战,别再担心面试没有实战项目:
[外链图片转存中…(img-xaJIz4Or-1715701156548)]