Skip to content

Commit

Permalink
Merge pull request #1 from shishan100/master
Browse files Browse the repository at this point in the history
pull
  • Loading branch information
dengliaohang authored Aug 12, 2019
2 parents b55c0f2 + 403c174 commit 59c2353
Show file tree
Hide file tree
Showing 53 changed files with 1,230 additions and 5 deletions.
41 changes: 41 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,46 @@
- [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)
- [21、你们对网关的技术选型是怎么考虑的?能对比一下各种网关技术的优劣吗?](/docs/distributed-system/gateway-model-selection.md)
- [22、说说生产环境下,你们是怎么实现网关对服务的动态路由的?](/docs/distributed-system/dynamic-route.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code2.zip)
- [23、如果网关需要抗每秒10万的高并发访问,你应该怎么对网关进行生产优化?](/docs/distributed-system/gateway-high-concurrency.md)
- [24、作业:你们公司的网关是怎么技术选型的,假设有高并发场景怎么优化?](/docs/distributed-system/gateway-technical.md)
- [25、如果需要部署上万服务实例,现有的服务注册中心能否抗住?如何优化?](/docs/distributed-system/registration-center-optimize.md)
- [26、你们是如何基于网关实现灰度发布的?说说你们的灰度发布方案?](/docs/distributed-system/gray-environment.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code3.zip)
- [27、说说你们一个服务从开发到上线,服务注册、网关路由、服务调用的流程?](/docs/distributed-system/service-register-gateway-router.md)
- [28、作业:看看你们公司的服务注册中心能否支撑上万服务实例的大规模场景?](/docs/distributed-system/work-register.md)
- [29、画一下你们系统的整体架构图,说说各个服务在生产环境怎么部署的?](/docs/distributed-system/system-framework.md)
- [30、你们系统每天有多大访问量?每个服务高峰QPS多少?压测过服务最大QPS吗?](/docs/distributed-system/system-qps.md)
- [31、如果系统访问量比现在增加10倍,你们考虑过系统的扩容方案吗?](/docs/distributed-system/system-dilatation.md)
- [32、作业:独立画出自己系统的生产部署架构图,梳理系统和服务的QPS以及扩容方案](/docs/distributed-system/work-system-dilatation.md)
- [33、你们生产环境的服务是怎么配置超时和重试参数的?为什么要这样配置?](/docs/distributed-system/service-request-time-out.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code4.zip)
- [34、如果出现服务请求重试,会不会出现类似重复下单的问题?](/docs/distributed-system/request-retry.md)
- [35、对于核心接口的防重幂等性,你们是怎么设计的?怎么防止重复下单问题?](/docs/distributed-system/interface-idempotence.md)
- [36、作业:看看自己系统的核心接口有没有设计幂等性方案?如果没有,应该怎么设计?](/docs/distributed-system/work-interface-idempotence.md)
- [37、画一下你们电商系统的核心交易链路图,说说分布式架构下存在什么问题?](/docs/distributed-system/deal-line.md)
- [38、针对电商核心交易链路,你们是怎么设计分布式事务技术方案的?](/docs/distributed-system/work-distributed-transaction.md)
- [39、对于TCC事务、最终一致性事务的技术选型,你们是怎么做的?如何调研的?](/docs/distributed-system/distributed-transaction-tcc.md)
- [40、作业:你们公司的核心链路是否有事务问题?分布式事务方案怎么调研选型?](/docs/distributed-system/work-distributed-transaction.md)
- [41、在搭建好的电商系统里,落地开发对交易链路的TCC分布式事务方案](/docs/distributed-system/tcc-landing-scheme.md)
- [42、你能说说一个TCC分布式事务框架的核心架构原理吗?](/docs/distributed-system/tcc-framework-principle.md)
- [43、现有的TCC事务方案的性能瓶颈在哪里?能支撑高并发交易场景吗?如何优化?](/docs/distributed-system/tcc-high-concurrence.md)
- [44、作业:如果对自己的系统核心链路落地TCC事务,应该如何落地实现?](/docs/distributed-system/work-tcc-landing-scheme.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.
Binary file added docs/distributed-system/code/code2.zip
Binary file not shown.
Empty file.
Binary file added docs/distributed-system/code/code4.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线路熔断的框架**,必须得设计对应的一整套的限流方案、熔断方案、资源隔离、降级机制,配合降级机制来做
37 changes: 37 additions & 0 deletions docs/distributed-system/deal-line.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

分布式系统核心的问题,服务框架、注册中心、网关系统、部署架构、超时重试、幂等防重,生产相关的问题,都搞定了,还是针对面试这块,人家到时候问你很多的生产问题,你必须回答的很好,你可以自己主动聊,说我们在生产环境里做了哪些优化

分布式事务,分布式锁

核心交易链路,核心数据链路,核心计算链路,核心业务链路,都建议要上分布式事务,保证核心链路的数据一致性

面试突击第一季,如果你没看过,务必去看一下,分布式事务这块,几种技术方案,我当时都讲解过了,离落地还有一段距离

分布式锁,在分布式系统中用的是非常多的,单块系统,不需要分布式事务,一个系统对应一个数据库,事务都是本地数据库的事务就可以了;锁,很多地方多线程并发修改一些共享资源,在单块系统内部用synchronized锁就可以搞定了



分布式系统,事务 -> 分布式事务,锁 -> 分布式锁




订单服务 -> 创建订单
-> 库存服务 -> 扣减库存
-> 积分服务 -> 增加积分
-> 仓储服务 -> 通知发货



微服务架构里,哪怕你就部署了一个MySQL在一台高配物理机上,但是在这个MySQL实例中会创建不同的database,db_order,db_inventory,db_credit,db_wms,订单服务涉及到5张表,db_order中就会有5张表



已经在自己本地插入了一条订单数据了,调用库存服务扣减库存,在db_inventory里执行sql扣减库存,此时库存服务执行失败了,但是对于订单服务,他可能是没有感知到,他的订单还是创建成功了,调用积分服务和仓储服务,积分增加了,还打算对商品进行发货


订单服务 -> 创建了订单,库存服务 -> 扣减了库存,积分服务 -> 增加积分失败,一旦回滚了之后,就会导致创建的订单被取消了,没了,create语句,放在本地事务里,一旦发现失败了,此时就会回滚,就会导致




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?自己研发的服务框架?对比一下各种服务框架的优点和缺点,技术选型,为什么?**
Loading

0 comments on commit 59c2353

Please sign in to comment.