专栏名称: 石杉的架构笔记
专注原创、用心雕琢!十余年BAT一线大厂架构经验倾囊相授
目录
相关文章推荐
半月谈  ·  家里不建议安装摄像头?民警提醒! ·  昨天  
半月谈  ·  陈晏被提起公诉! ·  2 天前  
中工网  ·  胡劲军任广东省委宣传部部长 ·  3 天前  
中工网  ·  胡劲军任广东省委宣传部部长 ·  3 天前  
半月谈  ·  全力合围,“职业闭店人”这下悬了! ·  3 天前  
51好读  ›  专栏  ›  石杉的架构笔记

中华石杉互联网Java进阶面试训练营【全网发布ing】

石杉的架构笔记  · 公众号  ·  · 2019-08-02 08:30

正文


写在前面

相信不少Java工程师的职业生涯中,尤其在早期,都或多或少经历过下面的场景:

  • 公司规模小,项目没有任何技术挑战。每天重复着CRUD的工作,你也自黑为 CRUD工程师

  • 工作于外包公司,不同的项目经常用不同的技术。这个技术还没搞明白呢,又得快速上手另一个技术了。 你就像一块砖,哪里需要往哪里搬!

  • 常年工作于传统公司,技术陈旧,害怕背锅,老大不想也不敢上新。就这样温水煮青蛙慢慢煮着。 在这个过程中, 你也和一些主流技术渐行渐远


正常情况下,你这样干着,好像也没啥。然而一旦因为种种原因,你准备跳槽,问题就来了!


跳槽面试,尤其是去互联网公司面试,你平时工作的内容将淋漓尽致的体现在面试中,并且被 无限放大

浏览招聘网站,准备简历的时候,你突然发现自己 技术栈严重脱节掉队 ,好像就会一些框架的使用。

这么多年的工作经验,好像就只比刚入行的小年轻多做了一些CRUD的项目,别的似乎就没了!

好不容易,你拿到了一些一线大厂的面试机会。面试现场,面试官针对一些高阶技术点进行连环炮式的提问,你一脸茫然。

每次去大厂面试,出来总是汗流浃背,被虐的很惨。

我们来看看,一个典型的一线互联网公司的面试现场:


面试官
你在系统里用过消息队列吗?
候选人
用过的


面试官
那你说一下你们在项目里是怎么用消息队列的?
候选人
我们有个订单系统,订单系统会每次下一个新的订单时,会发送时一条消息到ActiveMQ里面去

后台有个库存系统负责获取了消息然后更新库存。

(候选人回答完毕,自我感觉良好)


面试官
那你们为什么使用消息队列?

你的订单系统不发送消息到MQ,直接调用库存系统接口,咔嚓一下,库存不就更新了?
候选人
额。。。(我没想过啊,老大让用就用了,只能硬着头皮胡扯了几句)



面试官当然听得出你的慌乱,气氛开始有点尴尬了


面试官
那你说说用消息队列都有什么优点和缺点?
候选人
这个。。。(确实平时没怎么考虑过这个问题啊!继续胡言乱语)


面试官
kafka、activemq、rabbitmq、rocketmq都有什么区别?
(面试官语气已经有点严肃了!)
候选人
我们就用过activemq,别的没用过。。。区别,也不太清楚
面试官
那你们是如何保证消息队列的高可用啊?
候选人
这个。。。我平时就是简单走api调用一下,不太清楚消息队列怎么部署的
面试官
如何保证消息的可靠性传输啊?要是消息丢失了怎么办啊?
候选人
我们没丢过消息啊。。。
面试官
那如何保证消息的顺序性?
候选人
顺序性?什么意思?还要保证消息的顺序性?
面试官

如何解决消息队列的延时以及过期失效问题?

消息队列满了以后该怎么处理?

有几百万消息持续积压几小时,说说怎么解决?
候选人
我平时暂时还没遇到过这些问题。。。
面试官
如果让你写一个消息队列,该如何进行架构设计?说一下你的思路!
候选人
(汗流浃背)我还是走吧。。。。


以上就是互联网大厂一个典型的针对消息队列MQ的面试连环炮


虽略有夸张( 候选人技术一般不至于low成那样 ),但却真实反映了不少Java工程师面试的痛点。

很多同学往往只知道MQ、缓存等技术的基本使用,对很多深层次的技术问题从没思考过,出去面试人家稍微问深入一点,就原形毕露


正是基于上述痛点,去年6月,我发布了一套针对Java工程师的面试课程:

《互联网Java工程师面试突击(第一季)》


我希望用一个短期突击的方式,帮助广大Java工程师快速梳理准备互联网公司的高频Java进阶面试知识点。

如今,差不多一年时间过去了!

随着课程在网络上快速传播,成千上万的同学快速夯实了Java进阶技术栈的知识体系。

这些同学通过系统的学习,对上例中这种 某个技术点 的面试连环炮,差不多都能hold住了

同时,我也在后台收到大量留言, 不少同学反馈说他们以前面试,可能10家公司都拿不到1个offer,但是认真学完课程,现在能轻松拿好几个offer。

此外,有同学还将《Java面试突击第一季》课程整理成资料,发布到GitHub。

短短半年多,就有了24000多stars,成为 2019年 GitHub 第二受欢迎的 Java 项目

GitHub的部分截图如下:


面试突击第一季不能解决的问题

然而,事情并没有想象的那么顺利。。。

有部分同学反映,虽然学习了第一季内容,技术确实提升不少,出去面试也能拿下不少offer,但似乎感觉还是缺了点什么。。。

这些同学在面试中可以抗住对于 某个技术的普通连环炮, 但是如果面试官再深入拷问,就回答不出来了。

举个例子:当面试官针对Dubbo的一些技术原理来个连环炮,可能觉得自己答的还不错,基本能抗住。

但是紧接着,一些厉害的 BAT 面试官可能会继续 下一轮 升级版的连环炮 ,炮火更加猛烈。

比如下面这个 升级版的 分布式 10连炮

  • 你们的服务注册中心进行过选型调研吗?

  • 能对比一下各种服务注册中心吗?

  • 给我画一下你们的服务注册中心部署架构,生产环境下怎么保证高可用?

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

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

  • 你们系统每天有多大访问量?

  • 每个服务高峰QPS多少?

  • 压测过服务最大QPS吗?

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

怎么样,这一通猛烈炮火下来,是不是有点头晕目眩,感觉吃不消。

为什么会出现这种情况?

答案很简单!因为考察的全是 生产环境的实践经验 以及 生产优化经验, 然而你并没有。

因此,很多同学还是跟BAT、京东、美团、滴滴等大厂失之交臂。

于是今年上半年,公众号后台收到最多的问题是:

老师,你啥时候出面试突击第二季啊!

针对上述问题,其实我也做了分析,即使在学习了《Java面试突击第一季》的基础上,大家在面试时仍然存在如下问题:

一、对各种技术在项目中如何落地,没任何概念

举个例子,比如分布式事务,很多人知道分布式事务的常见技术方案。但是这些方案:

  • 在自己负责的系统里应该怎么落地?

  • 技术该怎么选型?

  • 更进一步,如果核心链路并发量暴增10倍,这套技术选型还能抗住么?

对这些进阶技术在项目中的落地经验,大部分Java工程师可能都一无所知

二、缺乏生产实践经验,仅仅知道原理,会简单使用

比如说网关技术,可能你们的系统里引入了网关。那可能刁钻的面试会问你:

  • 网关在生产环境下对高并发、高性能的生产优化做过吗?

  • 它到底应该怎么部署?

  • 服务注册中心的性能瓶颈在哪里?

根据我多年的面试经验,很多同学对这些东西都不知道。一旦面试官针对这些内容发问,很多人就彻底蒙圈。

三、对一些技术的底层都不了解

最典型的一个问题,面试官从技术原理的角度拷问了Dubbo之后,很可能直接让你聊聊:

如果让你设计一个类似Dubbo的RPC框架,从 网络通信 代理机制 负载均衡 等各个环节考虑,该如何设计?

Spring Cloud也是同理,很多人都会使用,但是如果面试官让你深入聊底层各个组件的架构原理,大部分人就说不出来了。


如何解决这些痛点?

上述这些问题,都和生产实践结合紧密,涉及范围广,不是简单录制一个Java面试突击第二季就能搞定的。

经过反复考虑,我决定以专题为单元,设计 6 季 Java 进阶面试训练营

这六季将涵盖面试最热的六大技术专题:“分布式”、“微服务”、“海量数据”、“高性能”、“高并发”、“高可用”

我将带着大家 重点解决下面两个问题 ,彻底解决面试痛点:

  • 如何将各种高阶技术和架构落地到自己的项目里?

  • 生产环境下的架构实践和优化到底什么样的?

现推出第一季:

21 互联网Java进阶面试训练营》 (分布式篇)


训练营亮点:

我用下面一张图,概括了训练营的几大亮点:


:训练营详细目录大纲,请 参见文末


课后作业 (五星重要)

为啥把作业单独拎出来强调? 因为它实在太重要了。

授之以鱼不如授之以渔!如果说我课上传授给你的是鱼,那么你学完后,能将这些技术,真正 落地到自己手头的项目中 ,这才是渔的能力。

这个渔,是我真正想传授给你的东西!

而这个渔的能力,一定得通过大量的作业才能锻炼出来。

所以在每天的课程讲完后,都会布置一个作业,大家需要去思考:

  • 如何将一个进阶技术融入自己的系统业务流程?

  • 具体应该怎么设计技术方案?







请到「今天看啥」查看全文