8000 e'e'e by xia2017zm · Pull Request #1 · xia2017zm/Java-Interview-Advanced · GitHub
[go: up one dir, main page]

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
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@

### 分布式事务
- [分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?](/docs/distributed-system/distributed-transaction.md)
- [关于如何实现一个TCC分布式事务框架的一点思考](http://www.bytesoft.org)

### 分布式会话
- [集群部署时的分布式 Session 如何实现?](/docs/distributed-system/distributed-session.md)
Expand All @@ -177,6 +178,22 @@
- [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)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code.zip)
- [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)
- [13、如果让你设计一个RPC框架,网络通信、代理机制、负载均衡等该如何设](/docs/distributed-system/rpc-design.md)
- [14、平时除了使用外,有研究过Spring Cloud的底层架构原理么?](/docs/distributed-system/springCloud-study-theory.md)
- [15、从底层实现原理的角度,对比一下Dubbo和Spring Cloud的优劣!](/docs/distributed-system/dubbo-vs-springCloud.md)
- [16、作业:自己独立画出Spring Cloud的架构原理图,RPC框架架构设计图!](/docs/distributed-system/springCloud-and-rpc-framework.md)
- [17、面试官:你们的服务注册中心进行过选型调研吗?对比一下各种服务注册中心!](/docs/distributed-system/registration-center-%20guide.md)
- [18、画图阐述一下你们的服务注册中心部署架构,生产环境下怎么保证高可用?](/docs/distributed-system/register-high-availability.md)
- [19、你们系统遇到过服务发现过慢的问题吗?怎么优化和解决的?](/docs/distributed-system/service-register-discovery.md)
- [20、作业:说一下自己公司的服务注册中心怎么技术选型的?生产环境中应该怎么优化?](/docs/distributed-system/register-production-optimize.md)


### 第二季-高并发
Expand Down
61 changes: 61 additions & 0 deletions docs/distributed-system/BAT-interview-fire.md
8000
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用户来你这里来购买?

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

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

我们不会让每个视频太长,按照我们大纲来讲,说是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线路熔断的框架**,必须得设计对应的一整套的限流方案、熔断方案、资源隔离、降级机制,配合降级机制来做
10 changes: 5 additions & 5 deletions docs/distributed-system/distributed-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

最最起码的,你应该去从哪个角度来考察这个获选人呢?职位JD要求是工作经验在3年~5年,有一定的社会工作经验的

###(1)技术广度来考察
### (1)技术广度来考察

招聘过来一个有几年经验的人,就不要再去培养他了,候选人的整个技术栈是比较匹配我们团队的技术栈的

Expand All @@ -34,7 +34,7 @@ JVM,数据库和并发,都是必考的

薪资在20k左右,差不多

###(2)项目经验
### (2)项目经验

你平时用的各种技术在你的项目中如何结合业务来进行落地,然后你在项目的生产环境中落地一个技术之后,对他进行的生产优化、架构优化、生产实践是怎么来做的

Expand All @@ -50,7 +50,7 @@ JVM,数据库和并发,都是必考的

出去面试的时候,往往被 面试官一通追问项目的各种细节,然后就直接死了

###(3)生产经验
### (3)生产经验

分布式、微服务这块,你说用过网关,网关调研了哪几种技术?对比一下他们的优缺点?最后你们是怎么进行技术选型的?你们这个系统每天的访问量多高?高峰期QPS多高?你们网关要抗多高的QPS?网关是如何部署的?部署了几台机器?每台机器的配置如何,几个核CPU,几个GB内存?

Expand All @@ -74,7 +74,7 @@ JVM,数据库和并发,都是必考的

如果是很多的大厂,哪怕是三五年经验,或者二三年经验,也会来考察这块项目经验和生产经验,越是大厂,对你的能力里要求就越高,希望你进来以后越能独当一面,所以就希望你不光只是有技术广度

###(4)技术深度
### (4)技术深度

你有没有读过哪些开源项目的源码,RocketMQ,RocketMQ的源码,Dubbo的源码,如果你精通一些技术的源码的话,为什么会特别的有价值,有竞争力,让面试官更加的倾向于用你呢?

Expand All @@ -86,7 +86,7 @@ Dubbo、RocketMQ、Kafka、ES,随时可能有问题,比如说Dubbo随时可

大厂,很可能会考察你的技术深度,如果发现你没有什么技术深度,那么可能你就没有太大的竞争优势

###(5)系统设计
### (5)系统设计

往简单了说,就是会考察一些问题,比如说让你来设计秒杀系统,设计一个12306火车票购票系统,支撑几亿用户买火车票,你会如何来设计,让你设计一个微信红包系统,你会如何来考虑

Expand Down
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
Loading
0