Skip to content

Commit

Permalink
add .
Browse files Browse the repository at this point in the history
  • Loading branch information
文亮 committed Jul 22, 2019
1 parent a077767 commit 18d457a
Show file tree
Hide file tree
Showing 5 changed files with 362 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,12 @@
## 互联网Java进阶面试训练营

### 第一季-分布式
- [01、互联网大厂面试要求:技术广度、技术深度、系统设计以及项目经验](/docs/distributed-system/distributed-design.md)
- [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)


### 第二季-高并发
### 第三季-微服务
### 第四季-海量数据
Expand Down
171 changes: 171 additions & 0 deletions docs/distributed-system/21-day-course-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@

技术广度的积累,问题不太大,面试突击第一季好好看完,把对应的一些技术都自己去找一些资料简单学习一下

项目经验、生产经验、技术深度、系统设计

6季,**分布式****微服务****海量数据****高性能****高并发****高可用**

##第1季:分布式

每一季,都是把对应的技术主题中的相关的技术在项目里落地的细节,生产经验,架构经验,技术深度,系统设计,给大家结合很多的案例来进行讲解

每一季是持续21天,三周,每周的周一~周五会更新课程,15天,每天是更新4讲内容,每天的内容量大概在1小时左右,最后总课程时长大概在1000分钟左右
知己知彼
一线互联网公司面试分析

01、互联网大厂面试要求:技术广度、技术深度、系统设计以及项目经验

02、Java工程师面试突击第一季总结:你离一次成功的面试还差多少?

03、《21天互联网Java进阶面试训练营》的课程说明

04、作业:系统分析一下,自己距离大厂offer差在哪里?

###Dubbo vs Spring Cloud
两大核心分布式服务框架初探

05、感受一下BAT面试官对分布式技术的十几个面试连环炮!

06、你们公司用的Dubbo?那你再额外说说Spring Cloud的核心架构原理?

07、基于Dubbo和Spring Cloud分别搭建一个电商系统来快速体验一下!

08、作业:你们的系统使用了哪种服务框架?为什么要这样技术选型?



###深入底层Dubbo与Spring Cloud的架构原理剖析

09、看过Dubbo源码吗?说说Dubbo的底层架构原理?

10、咱们来聊点深入的,说说Dubbo底层的网络通信机制原理!

11、Dubbo框架从架构设计角度,是怎么保证极高的可扩展性的?

12、作业:自己独立画出Dubbo的底层架构原理图

13、如果让你设计一个RPC框架,网络通信、代理机制、负载均衡等该如何设计?

14、平时除了使用外,有研究过Spring Cloud的底层架构原理么?

15、从底层实现原理的角度,对比一下Dubbo和Spring Cloud的优劣!

16、作业:自己独立画出Spring Cloud的架构原理图,RPC框架架构设计图!


###服务注册中心与服务网关的生产实践

17、面试官:你们的服务注册中心进行过选型调研吗?对比一下各种服务注册中心!

18、画图阐述一下你们的服务注册中心部署架构,生产环境下怎么保证高可用?

19、你们系统遇到过服务发现过慢的问题吗?怎么优化和解决的?

20、作业:说一下自己公司的服务注册中心怎么技术选型的?生产环境中应该怎么优化?
21、你们对网关的技术选型是怎么考虑的?能对比一下各种网关技术的优劣吗?

22、说说生产环境下,你们是怎么实现网关对服务的动态路由的?

23、如果网关需要抗每秒10万的高并发访问,你应该怎么对网关进行生产优化?

24、作业:你们公司的网关是怎么技术选型的,假设有高并发场景怎么优化?

25、如果需要部署上万服务实例,现有的服务注册中心能否抗住?如何优化?

26、你们是如何基于网关实现灰度发布的?说说你们的灰度发布方案?

27、说说你们一个服务从开发到上线,服务注册、网关路由、服务调用的流程!

28、作业:看看你们公司的服务注册中心能否支撑上万服务实例的大规模场景?


###分布式系统的生产实践

29、画一下你们系统的整体架构图,说说各个服务在生产环境怎么部署的?

30、你们系统每天有多大访问量?每个服务高峰QPS多少?压测过服务最大QPS吗?

31、如果系统访问量比现在增加10倍,你们考虑过系统的扩容方案吗?

32、作业:独立画出自己系统的生产部署架构图,梳理系统和服务的QPS以及扩容方案

33、你们生产环境的服务是怎么配置超时和重试参数的?为什么要这样配置?

34、如果出现服务请求重试,会不会出现类似重复下单的问题?

35、对于核心接口的防重幂等性,你们是怎么设计的?怎么防止重复下单问题?

36、作业:看看自己系统的核心接口有没有设计幂等性方案?如果没有,应该怎么设计?


###分布式事务在项目中的落地实践与生产经验

37、画一下你们电商系统的核心交易链路图,说说分布式架构下存在什么问题?

38、针对电商核心交易链路,你们是怎么设计分布式事务技术方案的?

39、对于TCC事务、最终一致性事务的技术选型,你们是怎么做的?如何调研的?

40、作业:你们公司的核心链路是否有事务问题?分布式事务方案怎么调研选型?

41、在搭建好的电商系统里,落地开发对交易链路的TCC分布式事务方案

42、你能说说一个TCC分布式事务框架的核心架构原理吗?

43、现有的TCC事务方案的性能瓶颈在哪里?能支撑高并发交易场景吗?如何优化?

44、作业:如果对自己的系统核心链路落地TCC事务,应该如何落地实现?

45、在搭建好的电商系统里,如何基于RocketMQ最终一致性事务进行落地开发?

46、你了解RocketMQ对分布式事务支持的底层实现原理吗?

47、基于RocketMQ实现的最终一致性事务,如何抗住高并发交易场景?

48、作业:如果对自己的系统落地最终一致性事务,如何落地实现?


###分布式锁在项目中的落地实践与生产经验

49、你们是用哪个开源框架实现的Redis分布式锁?能说说其核心原理么?

50、如果Redis是集群部署的,那么分布式锁的实现原理是什么?

51、在Redis集群出现故障的时候,会导致分布式锁失效吗?

52、作业:自己梳理出来Redis分布式锁的生产问题解决方案

53、如果要实现ZooKeeper分布式锁,一般用哪个开源框架?核心原理是什么?

54、对于ZooKeeper的羊群效应,分布式锁实现应该如何优化?

55、如果遇到ZooKeeper脑裂问题,分布式锁应该如何保证健壮性?

56、作业:自己梳理出来ZooKeeper分布式锁的生产问题解决方案

57、在搭建好的电商系统中,落地开发分布式锁保证库存数据准确的方案

58、你们的分布式锁做过高并发优化吗?能抗下每秒上万并发吗?

59、淘宝和京东的库存是怎么实现的?能不能不用分布式锁实现高并发库存更新?

60、作业:自己系统的分布式锁在高并发场景下应该如何优化?


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

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

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

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

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

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

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

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

**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**
118 changes: 118 additions & 0 deletions docs/distributed-system/distributed-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
###技术广度,为什么要这么考察一个人的技术广度?

假设,现在咱们公司,咱们团队负责一个系统,Dubbo / Spring Cloud作为服务框架,MQ(RocketMQ / Kafka),缓存(Redis),搜索(Elasticsearch)

在互联网行业里 + 非互联网的IT公司里,本身是有一套主流技术栈的

假设,业务发展特别的迅猛,需要团队扩招5个人进来,此时就要在外面的招聘网站里发布对应的职位JD,跟猎头合作,捞一些比较合适的人的简历进来

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

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

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

从广度上把各种技术都给他考察一下,尤其是我们团队负责的系统涉及到的技术

Dubbo,熟悉吗?看你简历之前你们公司也是用的这个服务框架?说一下他的基本的工作原理,从服务注册到发现,他是怎么来运行的呢?你们当时服务注册中心是用的什么技术跟Dubbo搭配起来的?

看你简历上,说你们之前的系统里用过RocketMQ,来聊一聊,先说你们公司当时为什么要用MQ呢?MQ是怎么部署的?集群架构?高可用是如何保证的?RocketMQ的核心架构原理?工作原理?当时有没有考虑过发送到RocketMQ里的消息可能会丢失?

缓存(Redis),集群部署,Redis集群运行原理,Reids高可用的原理,Redis单线程高并发的原理,ES分布式架构的原理,一般你们的ES是怎么优化性能的

JVM,数据库和并发,都是必考的

我们希望你能够进来之后对JVM的基本原理都有一定的了解,然后呢如果你负责的一个系统出现了JVM的一个问题,比如内存溢出,或者是GC频繁的问题,希望你能独立的去分析和解决

数据库,MySQL,包括事务的原理、索引的原理、常见的SQL优化的手段

并发,本身是属于Java编程语言层面的一个基本的功能,本身有一些深度和难度的地方,写出来高效率的正确的并发程序

到此为止,确定,他进来的话,立马可以上手熟悉你们的架构、系统和代码,技术上不用做特殊的培养,很快就可以上手开始干活,基于你们现有的架构、现有的技术栈,上手就可以开始开发各种业务功能模块

常见的技术方案也会设计,常见的一些问题可以自己处理,常见的优化可以做

薪资在20k左右,差不多

###(2)项目经验

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

分库分表,你说你简历里用过Sharding-JDBC来做分库分表

首先给我说说,你们的系统有哪些库哪些表,对应的是哪些业务呢?然后告诉我,核心的表每天新增的数据量有多少,目前已经积累了多少数据了?单表是百万级?还是千万级?你们是什么时候分的表?什么时候分的库?为什么?

在没有分表之前,SQL的性能大概如何?分表之后SQL的性能大概如何?分库之前每个数据库服务器上放多少GB的数据?一台服务器可以抗多少数据?分库之后拆分到几台数据库服务器上去?每台服务器现在放多少GB的数据?

很多同学出去面试,学习了很多的技术,无论是跟着一些视频课程,在线培训课程,或者是网上的博客,或者是一些书,积累了很多的知识,Sharding-JDBC分库分表基本的原理,常见的分库分表的技术方案

但是呢,这些同学往往是为了面试去准备的一些技术,但是其实从没在自己的项目中实践过,也从没思考过这些技术在自己项目落地的各种细节应该是如何来进行设计的

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

###(3)生产经验

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

比如你的服务里加了一个新的接口,总不能你每次都手动在网关里配置一些新的接口和服务的对应关系,网关的动态路由是怎么做的?每次上线服务或者新的接口,跟你的网关动态路由是如何搭配起来的?

线上网关部署的机器在生产环境,你们的访问压力下,平时的高峰期的CPU负载如何

有没有考虑过网关的扩容?如果压力过大如何进行扩容?

有没有测算过网关进行请求路由的性能如何?一般一个请求经过网关层的路由对时间的开销大概是多少?

现在的话呢,假设说,网关当时在线上部署之后生产环境运行的时候有没有遇到过什么问题?比如并发的问题,性能的问题?如果要对生产环境的网关进行高并发、高性能的优化,你们是怎么做的呢?如果要做,你觉得从哪些角度入手可以去做?

总结一下:项目经验 + 生产经验,薪资是28k,30k,或者是32k,高级~资深的工程师,经验5年~8年左右,希望你能够去带一两个小弟,或者是带一个小小组,当一个小小的team leader

我肯定是希望你能够把生产环境的各种细节都cover住

项目经验,技术在项目中如何落地,各种细节,如果你是一个带几个小弟的资深工程师的话,此时你就必须对你负责的这个项目进行所有细节的把控,希望你能够结合业务和项目的细节去考虑技术如何落地

生产经验,把控项目部署后的生产环境里的情况,对各种情况做出对应的举措和优化的手段,全面为自己的项目来进行负责

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

###(4)技术深度

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

技术深度决定了你的技术功底,决定了在生产环境随时你的系统使用的各种技术可能会遇到一些异常或者报错,导致系统挂掉

Dubbo、RocketMQ、Kafka、ES,随时可能有问题,比如说Dubbo随时可能会报错,RocketMQ突然异常了无法写入消息,ES突然性能巨慢,一次查询要十几秒的时间

必须需要那些精通一些技术源码的同学,现场根据异常去分析技术的源码,从源码级别定位到问题的所在,然后解决问题

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

###(5)系统设计

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

大厂,越是对你的能力要求很高,希望你进来以后独大是哪个一面,哪怕你就20k的薪资,也希望你是进来独当一面的,独立负责一块东西

独立的设计一块系统,独立的设计一个小的架构,此时就会要求你有一定的独立的系统设计的能力,30k,40k的薪资才会考察

30k,40k,50k,更高薪资的职位,技术专家,架构师,要求你本来在你们公司就负责了一大块系统的架构,带了10来个小弟,负责了一个大系统,有丰富的大型架构设计的经验,架构设计的方方面面,从理论到深度,再到经验,都很丰富



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

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


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

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

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

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

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

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

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

0 comments on commit 18d457a

Please sign in to comment.