写在前面
相信不少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面试突击第一季》的基础上,大家在面试时仍然存在如下问题:
一、对各种技术在项目中如何落地,没任何概念
举个例子,比如分布式事务,很多人知道分布式事务的常见技术方案。但是这些方案:
对这些进阶技术在项目中的落地经验,大部分Java工程师可能都一无所知
二、缺乏生产实践经验,仅仅知道原理,会简单使用
比如说网关技术,可能你们的系统里引入了网关。那可能刁钻的面试会问你:
根据我多年的面试经验,很多同学对这些东西都不知道。一旦面试官针对这些内容发问,很多人就彻底蒙圈。
三、对一些技术的底层都不了解
最典型的一个问题,面试官从技术原理的角度拷问了Dubbo之后,很可能直接让你聊聊:
如果让你设计一个类似Dubbo的RPC框架,从
网络通信
、
代理机制
、
负载均衡
等各个环节考虑,该如何设计?
Spring Cloud也是同理,很多人都会使用,但是如果面试官让你深入聊底层各个组件的架构原理,大部分人就说不出来了。
如何解决这些痛点?
上述这些问题,都和生产实践结合紧密,涉及范围广,不是简单录制一个Java面试突击第二季就能搞定的。
经过反复考虑,我决定以专题为单元,设计 6 季 Java 进阶面试训练营
这六季将涵盖面试最热的六大技术专题:“分布式”、“微服务”、“海量数据”、“高性能”、“高并发”、“高可用”
我将带着大家
重点解决下面两个问题
,彻底解决面试痛点:
-
如何将各种高阶技术和架构落地到自己的项目里?
-
生产环境下的架构实践和优化到底什么样的?
现推出第一季:
《
21
天
互联网Java进阶面试训练营》
(分布式篇)
训练营亮点:
我用下面一张图,概括了训练营的几大亮点:
注
:训练营详细目录大纲,请
参见文末
课后作业
(五星重要)
为啥把作业单独拎出来强调?
因为它实在太重要了。
授之以鱼不如授之以渔!如果说我课上传授给你的是鱼,那么你学完后,能将这些技术,真正
落地到自己手头的项目中
,这才是渔的能力。
这个渔,是我真正想传授给你的东西!
而这个渔的能力,一定得通过大量的作业才能锻炼出来。
所以在每天的课程讲完后,都会布置一个作业,大家需要去思考:
-
如何将一个进阶技术融入自己的系统业务流程?
-
具体应该怎么设计技术方案?