Skip to content

Commit 59c2353

Browse files
authored
Merge pull request #1 from shishan100/master
pull
2 parents b55c0f2 + 403c174 commit 59c2353

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1230
-5
lines changed

README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151

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

155156
### 分布式会话
156157
- [集群部署时的分布式 Session 如何实现?](/docs/distributed-system/distributed-session.md)
@@ -177,6 +178,46 @@
177178
- [02、Java工程师面试突击第一季总结:你离一次成功的面试还差多少?](/docs/distributed-system/java-interview-season-1-summary.md)
178179
- [03、《21天互联网Java进阶面试训练营》的课程说明](/docs/distributed-system/21-day-course-instructions.md)
179180
- [04、作业:系统分析一下,自己距离大厂offer差在哪里?](/docs/distributed-system/homework.md)
181+
- [05、感受一下BAT面试官对分布式技术的十几个面试连环炮!](/docs/distributed-system/BAT-interview-fire.md)
182+
- [06、你们公司用的Dubbo?那你再额外说说Spring Cloud的核心架构原理?](/docs/distributed-system/core-architecture-principle%20.md)
183+
- [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)
184+
- [08、作业:你们的系统使用了哪种服务框架?为什么要这样技术选型?](/docs/distributed-system/distributed-framework-selection.md)
185+
- [09、看过Dubbo源码吗?说说Dubbo的底层架构原理?](/docs/distributed-system/dubbo-framework-principle.md)
186+
- [10、咱们来聊点深入的,说说Dubbo底层的网络通信机制原理!](/docs/distributed-system/dubbo-rock-bottom.md)
187+
- [11、Dubbo框架从架构设计角度,是怎么保证极高的可扩展性的?](/docs/distributed-system/dubbo-augmentability.md)
188+
- [12、作业:自己独立画出Dubbo的底层架构原理图](/docs/distributed-system/dubbo-independent-framework.md)
189+
- [13、如果让你设计一个RPC框架,网络通信、代理机制、负载均衡等该如何设](/docs/distributed-system/rpc-design.md)
190+
- [14、平时除了使用外,有研究过Spring Cloud的底层架构原理么?](/docs/distributed-system/springCloud-study-theory.md)
191+
- [15、从底层实现原理的角度,对比一下Dubbo和Spring Cloud的优劣!](/docs/distributed-system/dubbo-vs-springCloud.md)
192+
- [16、作业:自己独立画出Spring Cloud的架构原理图,RPC框架架构设计图!](/docs/distributed-system/springCloud-and-rpc-framework.md)
193+
- [17、面试官:你们的服务注册中心进行过选型调研吗?对比一下各种服务注册中心!](/docs/distributed-system/registration-center-%20guide.md)
194+
- [18、画图阐述一下你们的服务注册中心部署架构,生产环境下怎么保证高可用?](/docs/distributed-system/register-high-availability.md)
195+
- [19、你们系统遇到过服务发现过慢的问题吗?怎么优化和解决的?](/docs/distributed-system/service-register-discovery.md)
196+
- [20、作业:说一下自己公司的服务注册中心怎么技术选型的?生产环境中应该怎么优化?](/docs/distributed-system/register-production-optimize.md)
197+
- [21、你们对网关的技术选型是怎么考虑的?能对比一下各种网关技术的优劣吗?](/docs/distributed-system/gateway-model-selection.md)
198+
- [22、说说生产环境下,你们是怎么实现网关对服务的动态路由的?](/docs/distributed-system/dynamic-route.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code2.zip)
199+
- [23、如果网关需要抗每秒10万的高并发访问,你应该怎么对网关进行生产优化?](/docs/distributed-system/gateway-high-concurrency.md)
200+
- [24、作业:你们公司的网关是怎么技术选型的,假设有高并发场景怎么优化?](/docs/distributed-system/gateway-technical.md)
201+
- [25、如果需要部署上万服务实例,现有的服务注册中心能否抗住?如何优化?](/docs/distributed-system/registration-center-optimize.md)
202+
- [26、你们是如何基于网关实现灰度发布的?说说你们的灰度发布方案?](/docs/distributed-system/gray-environment.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code3.zip)
203+
- [27、说说你们一个服务从开发到上线,服务注册、网关路由、服务调用的流程?](/docs/distributed-system/service-register-gateway-router.md)
204+
- [28、作业:看看你们公司的服务注册中心能否支撑上万服务实例的大规模场景?](/docs/distributed-system/work-register.md)
205+
- [29、画一下你们系统的整体架构图,说说各个服务在生产环境怎么部署的?](/docs/distributed-system/system-framework.md)
206+
- [30、你们系统每天有多大访问量?每个服务高峰QPS多少?压测过服务最大QPS吗?](/docs/distributed-system/system-qps.md)
207+
- [31、如果系统访问量比现在增加10倍,你们考虑过系统的扩容方案吗?](/docs/distributed-system/system-dilatation.md)
208+
- [32、作业:独立画出自己系统的生产部署架构图,梳理系统和服务的QPS以及扩容方案](/docs/distributed-system/work-system-dilatation.md)
209+
- [33、你们生产环境的服务是怎么配置超时和重试参数的?为什么要这样配置?](/docs/distributed-system/service-request-time-out.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code4.zip)
210+
- [34、如果出现服务请求重试,会不会出现类似重复下单的问题?](/docs/distributed-system/request-retry.md)
211+
- [35、对于核心接口的防重幂等性,你们是怎么设计的?怎么防止重复下单问题?](/docs/distributed-system/interface-idempotence.md)
212+
- [36、作业:看看自己系统的核心接口有没有设计幂等性方案?如果没有,应该怎么设计?](/docs/distributed-system/work-interface-idempotence.md)
213+
- [37、画一下你们电商系统的核心交易链路图,说说分布式架构下存在什么问题?](/docs/distributed-system/deal-line.md)
214+
- [38、针对电商核心交易链路,你们是怎么设计分布式事务技术方案的?](/docs/distributed-system/work-distributed-transaction.md)
215+
- [39、对于TCC事务、最终一致性事务的技术选型,你们是怎么做的?如何调研的?](/docs/distributed-system/distributed-transaction-tcc.md)
216+
- [40、作业:你们公司的核心链路是否有事务问题?分布式事务方案怎么调研选型?](/docs/distributed-system/work-distributed-transaction.md)
217+
- [41、在搭建好的电商系统里,落地开发对交易链路的TCC分布式事务方案](/docs/distributed-system/tcc-landing-scheme.md)
218+
- [42、你能说说一个TCC分布式事务框架的核心架构原理吗?](/docs/distributed-system/tcc-framework-principle.md)
219+
- [43、现有的TCC事务方案的性能瓶颈在哪里?能支撑高并发交易场景吗?如何优化?](/docs/distributed-system/tcc-high-concurrence.md)
220+
- [44、作业:如果对自己的系统核心链路落地TCC事务,应该如何落地实现?](/docs/distributed-system/work-tcc-landing-scheme.md)
180221

181222

182223
### 第二季-高并发
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
针对面试突击第一季关于分布式这块的内容,相对应的做一个回顾和总结
2+
3+
面试突击第一季总共四五十讲,每个技术专题大概也是有十来讲
4+
5+
#### (1)为什么要把系统拆分成分布式的?为啥要用dubbo?
6+
#### (2)dubbo的工作原理是啥?注册中心挂了可以继续通信吗?
7+
#### (3)dubbo都支持哪些通信协议以及序列化协议?
8+
#### (4)dubbo支持哪些负载均衡、高可用以及动态代理的策略?
9+
#### (5)SPI是啥思想?dubbo的SPI机制是怎么玩儿的?
10+
#### (6)基于dubbo如何做服务治理、服务降级以及重试?
11+
12+
这些问题在面试突击第一季里,我们都讲解过了,都是非常高简单的一些问题,作为一个合格的工程师,如果你是用了分布式系统架构,也就是把大的系统拆分为了多个子系统,或者是 多个服务
13+
14+
你肯定会用到一种服务框架,Dubbo、Spring Cloud、gRPC、Thrift
15+
16+
你必须 对这些服务框架的核心的架构原理,有一个认识和了解,服务注册和发现,通信和序列化,负载均衡,扩展机制,请求重试,请求超时
17+
18+
#### (7)分布式系统中接口的幂等性该如何保证?比如不能重复扣款?
19+
#### (8)分布式系统中的接口调用如何保证顺序性?
20+
21+
接口幂等性,分布式系统,如果不保证,是否会发生类似重复下单,重复扣款之类的问题
22+
23+
#### (9)如何设计一个类似dubbo的rpc框架?架构上该如何考虑?
24+
25+
自己看过一些dubbo、spring cloud的源码,对一款服务框架底层的实现原理,有一定的了解和认识,此时如果说他希望能够深入的考察你一下,看看你的水平,这个时候就有可能会问你这个问题
26+
27+
#### (10)说说zookeeper一般都有哪些使用场景?
28+
#### (11)分布式锁是啥?对比下redis和zk两种分布式锁的优劣?
29+
30+
拆分成了分布式系统,就说明有很多子系统在同时的运作,如果说两个子系统都需要对某个数据资源进行一系列复杂的操作,在复杂操作期间,不能让数据被其他任何人来改变。分布式锁,技术实现原理
31+
32+
#### (13)说说你们的分布式session方案是啥?怎么做的?
33+
34+
前后端分离之后,一般是前端那边来care session之类的问题,对于后端来说,玩儿分布式session玩儿的很少了
35+
36+
#### (14)了解分布式事务方案吗?你们都咋做的?有啥坑?
37+
38+
39+
**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问**
40+
41+
**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。**
42+
43+
**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**
44+
45+
**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**
46+
47+
**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**
48+
49+
**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务**
50+
51+
**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务**
52+
53+
**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可**
54+
55+
**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**
56+
57+
**“狸猫技术窝”**,找到我们的训练营的详情页面
58+
59+
60+
61+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Spring Cloud来搭建了一套
2+
3+
http://localhost:9000/order/order/create?productId=1&userId=1&count=3&totalPrice=300
4+
5+
刚开始几次请求会出现请求超时的问题,这个问题大家别纠结,后续要给大家讲spring cloud生产系统的优化
6+
7+
小小的小作业,参考一下dubbo的官方文档,搭建一个电商系统的dubbo版本的案例出来,我后面会搭建好的
8+
9+
[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code.zip)
79.4 KB
Binary file not shown.
19.1 KB
Binary file not shown.

docs/distributed-system/code/code3.zip

Whitespace-only changes.
95.2 KB
Binary file not shown.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
如果聊分布式这块的技术,围绕**Dubbo来拷问**的,但是呢,现在其实非常流行的是**Spring Cloud,Dubbo和Spring Cloud以及阿里系的一些技术**,现在正在融合,**Spring Cloud Alibaba,只不过现在用的公司暂时还没那么多而已**
2+
3+
作为合格的工程师,行业里主流的**分布式服务技术栈****Dubbo****Spring Cloud**两种,有的公司他是用**Dubbo**的,不用**Spring Cloud**的,有的公司是用**Spring Cloud**的,不用**Dubbo**的,他们是代表了两种主流技术栈
4+
5+
Java工程师,Dubbo和Spring Cloud起码是基本原理,都有一定的了解
6+
7+
**大白话 + 现场画图**
8+
9+
上网看一些博客资料,或者是买一些Spring Cloud的书,可能没考虑过一个事儿,第一篇必须是用非常通俗的语言,把一个系统如果用Spring Cloud来做分布式架构的话,那么他需要用到Spring Cloud哪些组件,为什么
10+
11+
跟着书或者博客,直接上手开始搭建demo,开始做起来了
12+
13+
**分别用Dubbo和Spring Cloud做两个最基本的Demo工程**,用电商背景来搭建几个服务
14+
15+
比如说,现在我们有一个电商系统
16+
17+
用户现在需要下单购买一些东西这样子,订单系统、库存系统、仓储系统、积分系统
18+
19+
不太可能说用单块的架构,电商系统你想支撑多少用户量?10万注册用户,日活1000用户来你这里来购买?
20+
21+
百万级用户,十万级日活,单块系统就不太合适了,背后有几十个人的团队在协作开发,此时单块系统是绝对不合适的
22+
23+
梳理和明确一个概念:电商系统,拆分为了多个子系统,一次下订单的请求需要多个子系统协作完成,每个子系统都完成一部分的功能,多个子系统分别完成自己负责的事情,最终这个请求就处理完毕
24+
25+
我们不会让每个视频太长,按照我们大纲来讲,说是60讲,粗略的大纲,其实最终会拆分成可能上百讲,Spring Cloud架构原理,我们就要分为上下两讲来说
26+
![Spring Cloud核心架构原理](/docs/distributed-system/images/SpringCloud-core-architecture.png)
27+
28+
### Spring Cloud
29+
30+
#### Eureka:服务注册中心
31+
#### Feign:服务调用
32+
#### Ribbon:负载均衡
33+
#### Zuul/Spring Cloud Gatway:网关
34+
35+
这么多的系统,电商系统包含了20个子系统,每个子系统有20个核心接口,一共电商系统有400个接口,这么多的接口,直接对外暴露,前后端分离的架构,难道你让前端的同学必须记住你的20个系统的部署的机器,他们去做负载均衡,记住400个接口
36+
37+
38+
微服务那块,**网关**
39+
40+
**灰度发布****统一熔断****统一降级****统一缓存****统一限流****统一授权认证**
41+
42+
43+
44+
**Hystrix****链路追踪****stream**、很多组件,Hystrix这块东西,其实是会放在高可用的环节去说的,并不是说一个普通系统刚开始就必须得用的,没有用好的话,反而会出问题,**Hystrix线路熔断的框架**,必须得设计对应的一整套的限流方案、熔断方案、资源隔离、降级机制,配合降级机制来做
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
分布式系统核心的问题,服务框架、注册中心、网关系统、部署架构、超时重试、幂等防重,生产相关的问题,都搞定了,还是针对面试这块,人家到时候问你很多的生产问题,你必须回答的很好,你可以自己主动聊,说我们在生产环境里做了哪些优化
3+
4+
分布式事务,分布式锁
5+
6+
核心交易链路,核心数据链路,核心计算链路,核心业务链路,都建议要上分布式事务,保证核心链路的数据一致性
7+
8+
面试突击第一季,如果你没看过,务必去看一下,分布式事务这块,几种技术方案,我当时都讲解过了,离落地还有一段距离
9+
10+
分布式锁,在分布式系统中用的是非常多的,单块系统,不需要分布式事务,一个系统对应一个数据库,事务都是本地数据库的事务就可以了;锁,很多地方多线程并发修改一些共享资源,在单块系统内部用synchronized锁就可以搞定了
11+
12+
13+
14+
分布式系统,事务 -> 分布式事务,锁 -> 分布式锁
15+
16+
17+
18+
19+
订单服务 -> 创建订单
20+
-> 库存服务 -> 扣减库存
21+
-> 积分服务 -> 增加积分
22+
-> 仓储服务 -> 通知发货
23+
24+
25+
26+
微服务架构里,哪怕你就部署了一个MySQL在一台高配物理机上,但是在这个MySQL实例中会创建不同的database,db_order,db_inventory,db_credit,db_wms,订单服务涉及到5张表,db_order中就会有5张表
27+
28+
29+
30+
已经在自己本地插入了一条订单数据了,调用库存服务扣减库存,在db_inventory里执行sql扣减库存,此时库存服务执行失败了,但是对于订单服务,他可能是没有感知到,他的订单还是创建成功了,调用积分服务和仓储服务,积分增加了,还打算对商品进行发货
31+
32+
33+
订单服务 -> 创建了订单,库存服务 -> 扣减了库存,积分服务 -> 增加积分失败,一旦回滚了之后,就会导致创建的订单被取消了,没了,create语句,放在本地事务里,一旦发现失败了,此时就会回滚,就会导致
34+
35+
36+
37+

docs/distributed-system/distributed-design.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

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

11-
###(1)技术广度来考察
11+
### (1)技术广度来考察
1212

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

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

3535
薪资在20k左右,差不多
3636

37-
###(2)项目经验
37+
### (2)项目经验
3838

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

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

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

53-
###(3)生产经验
53+
### (3)生产经验
5454

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

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

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

77-
###(4)技术深度
77+
### (4)技术深度
7878

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

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

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

89-
###(5)系统设计
89+
### (5)系统设计
9090

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

0 commit comments

Comments
 (0)