Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,14 @@
- [02、Java工程师面试突击第一季总结:你离一次成功的面试还差多少?](/docs/distributed-system/java-interview-season-1-summary.md)
- [03、《21天互联网Java进阶面试训练营》的课程说明](/docs/distributed-system/21-day-course-instructions.md)
- [04、作业:系统分析一下,自己距离大厂offer差在哪里?](/docs/distributed-system/homework.md)
- [05、感受一下BAT面试官对分布式技术的十几个面试连环炮!](/docs/distributed-system/BAT-interview-fire.md)
- [06、你们公司用的Dubbo?那你再额外说说Spring Cloud的核心架构原理?](/docs/distributed-system/core-architecture-principle%20.md)
- [07、基于Dubbo和Spring Cloud分别搭建一个电商系统来快速体验一下!](/docs/distributed-system/Dubbo-SpringCloud-experience.md)
- [08、作业:你们的系统使用了哪种服务框架?为什么要这样技术选型?](/docs/distributed-system/distributed-framework-selection.md)
- [09、看过Dubbo源码吗?说说Dubbo的底层架构原理?](/docs/distributed-system/dubbo-framework-principle.md)
- [10、咱们来聊点深入的,说说Dubbo底层的网络通信机制原理!](/docs/distributed-system/dubbo-rock-bottom.md)
- [11、Dubbo框架从架构设计角度,是怎么保证极高的可扩展性的?](/docs/distributed-system/dubbo-augmentability.md)
- [12、作业:自己独立画出Dubbo的底层架构原理图](/docs/distributed-system/dubbo-independent-framework.md)


### 第二季-高并发
Expand Down
61 changes: 61 additions & 0 deletions docs/distributed-system/BAT-interview-fire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
针对面试突击第一季关于分布式这块的内容,相对应的做一个回顾和总结

面试突击第一季总共四五十讲,每个技术专题大概也是有十来讲

#### (1)为什么要把系统拆分成分布式的?为啥要用dubbo?
#### (2)dubbo的工作原理是啥?注册中心挂了可以继续通信吗?
#### (3)dubbo都支持哪些通信协议以及序列化协议?
#### (4)dubbo支持哪些负载均衡、高可用以及动态代理的策略?
#### (5)SPI是啥思想?dubbo的SPI机制是怎么玩儿的?
#### (6)基于dubbo如何做服务治理、服务降级以及重试?

这些问题在面试突击第一季里,我们都讲解过了,都是非常高简单的一些问题,作为一个合格的工程师,如果你是用了分布式系统架构,也就是把大的系统拆分为了多个子系统,或者是 多个服务

你肯定会用到一种服务框架,Dubbo、Spring Cloud、gRPC、Thrift

你必须 对这些服务框架的核心的架构原理,有一个认识和了解,服务注册和发现,通信和序列化,负载均衡,扩展机制,请求重试,请求超时

#### (7)分布式系统中接口的幂等性该如何保证?比如不能重复扣款?
#### (8)分布式系统中的接口调用如何保证顺序性?

接口幂等性,分布式系统,如果不保证,是否会发生类似重复下单,重复扣款之类的问题

#### (9)如何设计一个类似dubbo的rpc框架?架构上该如何考虑?

自己看过一些dubbo、spring cloud的源码,对一款服务框架底层的实现原理,有一定的了解和认识,此时如果说他希望能够深入的考察你一下,看看你的水平,这个时候就有可能会问你这个问题

#### (10)说说zookeeper一般都有哪些使用场景?
#### (11)分布式锁是啥?对比下redis和zk两种分布式锁的优劣?

拆分成了分布式系统,就说明有很多子系统在同时的运作,如果说两个子系统都需要对某个数据资源进行一系列复杂的操作,在复杂操作期间,不能让数据被其他任何人来改变。分布式锁,技术实现原理

#### (13)说说你们的分布式session方案是啥?怎么做的?

前后端分离之后,一般是前端那边来care session之类的问题,对于后端来说,玩儿分布式session玩儿的很少了

#### (14)了解分布式事务方案吗?你们都咋做的?有啥坑?


**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问**

**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。**

**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**

**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**

**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**

**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务**

**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务**

**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可**

**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**

**“狸猫技术窝”**,找到我们的训练营的详情页面




9 changes: 9 additions & 0 deletions docs/distributed-system/Dubbo-SpringCloud-experience.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Spring Cloud来搭建了一套

http://localhost:9000/order/order/create?productId=1&userId=1&count=3&totalPrice=300

刚开始几次请求会出现请求超时的问题,这个问题大家别纠结,后续要给大家讲spring cloud生产系统的优化

小小的小作业,参考一下dubbo的官方文档,搭建一个电商系统的dubbo版本的案例出来,我后面会搭建好的

[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code.zip)
Binary file added docs/distributed-system/code/code.zip
Binary file not shown.
44 changes: 44 additions & 0 deletions docs/distributed-system/core-architecture-principle .md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
如果聊分布式这块的技术,围绕**Dubbo来拷问**的,但是呢,现在其实非常流行的是**Spring Cloud,Dubbo和Spring Cloud以及阿里系的一些技术**,现在正在融合,**Spring Cloud Alibaba,只不过现在用的公司暂时还没那么多而已**

作为合格的工程师,行业里主流的**分布式服务技术栈**,**Dubbo**和**Spring Cloud**两种,有的公司他是用**Dubbo**的,不用**Spring Cloud**的,有的公司是用**Spring Cloud**的,不用**Dubbo**的,他们是代表了两种主流技术栈

Java工程师,Dubbo和Spring Cloud起码是基本原理,都有一定的了解

**大白话 + 现场画图**

上网看一些博客资料,或者是买一些Spring Cloud的书,可能没考虑过一个事儿,第一篇必须是用非常通俗的语言,把一个系统如果用Spring Cloud来做分布式架构的话,那么他需要用到Spring Cloud哪些组件,为什么

跟着书或者博客,直接上手开始搭建demo,开始做起来了

**分别用Dubbo和Spring Cloud做两个最基本的Demo工程**,用电商背景来搭建几个服务

比如说,现在我们有一个电商系统

用户现在需要下单购买一些东西这样子,订单系统、库存系统、仓储系统、积分系统

不太可能说用单块的架构,电商系统你想支撑多少用户量?10万注册用户,日活1000用户来你这里来购买?

百万级用户,十万级日活,单块系统就不太合适了,背后有几十个人的团队在协作开发,此时单块系统是绝对不合适的

梳理和明确一个概念:电商系统,拆分为了多个子系统,一次下订单的请求需要多个子系统协作完成,每个子系统都完成一部分的功能,多个子系统分别完成自己负责的事情,最终这个请求就处理完毕

我们不会让每个视频太长,按照我们大纲来讲,说是60讲,粗略的大纲,其实最终会拆分成可能上百讲,Spring Cloud架构原理,我们就要分为上下两讲来说
![Spring Cloud核心架构原理](/docs/distributed-system/images/SpringCloud-core-architecture.png)

### Spring Cloud

#### Eureka:服务注册中心
#### Feign:服务调用
#### Ribbon:负载均衡
#### Zuul/Spring Cloud Gatway:网关

这么多的系统,电商系统包含了20个子系统,每个子系统有20个核心接口,一共电商系统有400个接口,这么多的接口,直接对外暴露,前后端分离的架构,难道你让前端的同学必须记住你的20个系统的部署的机器,他们去做负载均衡,记住400个接口


微服务那块,**网关**

**灰度发布**、**统一熔断**、**统一降级**、**统一缓存**、**统一限流**、**统一授权认证**



**Hystrix**、**链路追踪**、**stream**、很多组件,Hystrix这块东西,其实是会放在高可用的环节去说的,并不是说一个普通系统刚开始就必须得用的,没有用好的话,反而会出问题,**Hystrix线路熔断的框架**,必须得设计对应的一整套的限流方案、熔断方案、资源隔离、降级机制,配合降级机制来做
3 changes: 3 additions & 0 deletions docs/distributed-system/distributed-framework-selection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
**Spring Cloud**入门和使用级别的资料,建议大家自行百度,面试训练营,不是说针对每个技术详细给大家讲解的一个课程,我们会针对每个技术推出重磅的项目实战课程

**自己公司如果是分布式的架构,你们当前选用的是Spring Cloud?Dubbo?自己研发的服务框架?对比一下各种服务框架的优点和缺点,技术选型,为什么?**
25 changes: 25 additions & 0 deletions docs/distributed-system/dubbo-augmentability.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
两点,第一点,是核心的组件全部接口化,组件和组件之间的调用,必须全部是依托于接口,去动态找配置的实现类,如果没有配置就用他自己默认的

第二点,提供一种自己实现的组件的配置的方式,比如说你要是自己实现了某个组件,配置一下,人家到时候运行的时候直接找你配置的那个组件即可,作为实现类,不用自己默认的组件了




**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问**

**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。**

**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**

**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**

**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**

**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务**

**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务**

**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可**

**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**

73 changes: 73 additions & 0 deletions docs/distributed-system/dubbo-framework-principle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
**分布式**这块,**Dubbo相关的原理****Spring Cloud相关的原理**,有的面试官可能会这样问,你有没有看过**Dubbo或者Spring Cloud的源码呢****技术广度****技术深度****项目经验****系统设计****基本功**

平时看你简历主要是用一些技术来开发一些系统,就会问问你了,对于一些你平时常用的技术,有没有关注过底层的原理,或者是看过源码,你要是说,90%的人,一般都会在这个时候支支吾吾的说

源码看过一点点,但是没怎么看过

在我们面试训练营里,能给你来分析源码吗?不太现实的,任何一个开源项目,**源码**少则几万行,多则几十万行,**Hadoop、Spark****面试训练营**,几讲的时间来讲透任何一个**开源项目****源码**,不现实

看源码技巧是有,但是,需要**技术功底**

就是说提炼一些**Dubbo、Spring Cloud**相关的一些底层的运行的原理,给大家来用大白话+现场画图的方式,说清楚,你就可以结合我们视频讲解的内容,去现场画图给面试官画一画一些技术底层的运行的一些原理


我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问

大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。

所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力

学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问

每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流

如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务

如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务

具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可,

具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航




分布式系统

拆分为了多个子系统之后,各个系统之间如何通过Spring Cloud服务框架来进行调用,Dubbo框架来进行调用

![Dubbo核心架构原理](/docs/distributed-system/images/dubbo-framework-principle.png)
提供接口

服务注册中心:

###消费者

#### 动态代理:Proxy
#### 负载均衡:Cluster,负载均衡,故障转移
#### 注册中心:Registry
#### 通信协议:Protocol,filter机制,http、rmi、dubbo等协议

#### http、rmi、dubbo

比如说,我现在其实想要调用的是,DemoService里的sayHello接口

你的请求用什么样的方式来组织发送过去呢?以一个什么样的格式来发送你的请求?

http,/demoService/sayHello?name=leo
rmi,另外一种样子
dubbo,另外一种样子,interface=demoService|method=sayHello|params=name:leo

信息交换:Exchange,Request和Response

对于你的协议的格式组织好的请求数据,需要进行一个封装,Request

##### 网络通信:Transport,netty、mina
##### 序列化:封装好的请求如何序列化成二进制数组,通过netty/mina发送出去

提供者

#### 网络通信:Transport,基于netty/mina实现的Server
#### 信息交换:Exchange,Response
#### 通信协议:Protocol,filter机制
#### 动态代理:Proxy
10 changes: 10 additions & 0 deletions docs/distributed-system/dubbo-independent-framework.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

对**Dubbo**稍微做了一点进一步深入的讲解,但是远远是达不到精通源码的程度,只能说是相对于面试突击第一季要深入了一些,**Dubbo**一次服务请求调用,牵扯到了哪些组件,**负载均衡组件**、**注册中心**、**协议层**、**转换层**、**网络层(netty开发)**、**动态代理**,服务提供者也是类似的

网络通信的一些东西,是如何通过**NIO**的方式,**多线程**的方式,让一个服务提供者被多个服务消费者去并发的调用和请求

从整体架构原理的角度,说了一下如何进行扩展的

能说比普通的人稍微好一些,**技术深度**,那必须得是学其他的课程深入的理解他里面的源码,才能在面试的时候说,我精通一个技术的源码

**Dubbo底层架构原理的图**,自己手画出来,画的足够的熟练,如果有一些什么问题的话,可以提问
27 changes: 27 additions & 0 deletions docs/distributed-system/dubbo-rock-bottom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@

![Dubbo底层通信原理](/docs/distributed-system/images/dubbo-rock-bottom.png)
如果问到Dubbo底层原理,肯定除了上一讲的底层架构,你能说出来之外,还很可能会追问几个问题,网络通信这块原理的话

netty来举例,NIO来实现的,一台机器同时抗高并发的请求



**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**

**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**

**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**

**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务**

**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务**

**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可**

**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**






Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.