写在前面
相信不少Java工程师的职业生涯中,尤其在早期,都或多或少经历过下面的场景:
公司规模小,项目没有任何技术挑战。每天重复着CRUD的工作,你也自黑为CRUD工程师。
工作于外包公司,不同的项目经常用不同的技术。这个技术还没搞明白呢,又得快速上手另一个技术了。你就像一块砖,哪里需要往哪里搬!
常年工作于传统公司,技术陈旧,害怕背锅,老大不想也不敢上新。就这样温水煮青蛙慢慢煮着。在这个过程中,你也和一些主流技术渐行渐远
正常情况下,你这样干着,好像也没啥。然而一旦因为种种原因,你准备跳槽,问题就来了!
跳槽面试,尤其是去互联网公司面试,你平时工作的内容将淋漓尽致的体现在面试中,并且被无限放大
浏览招聘网站,准备简历的时候,你突然发现自己技术栈严重脱节掉队,好像就会一些框架的使用。
这么多年的工作经验,好像就只比刚入行的小年轻多做了一些CRUD的项目,别的似乎就没了!
好不容易,你拿到了一些一线大厂的面试机会。面试现场,面试官针对一些高阶技术点进行连环炮式的提问,你一脸茫然。
每次去大厂面试,出来总是汗流浃背,被虐的很惨。
我们来看看,一个典型的一线互联网公司的面试现场:
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
用过的
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
我们有个订单系统,订单系统会每次下一个新的订单时,会发送时一条消息到ActiveMQ里面去
后台有个库存系统负责获取了消息然后更新库存。
(候选人回答完毕,自我感觉良好)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
你的订单系统不发送消息到MQ,直接调用库存系统接口,咔嚓一下,库存不就更新了?候选人
额。。。(我没想过啊,老大让用就用了,只能硬着头皮胡扯了几句)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
面试官当然听得出你的慌乱,气氛开始有点尴尬了
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
这个。。。(确实平时没怎么考虑过这个问题啊!继续胡言乱语)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
(面试官语气已经有点严肃了!)候选人
我们就用过activemq,别的没用过。。。区别,也不太清楚
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
这个。。。我平时就是简单走api调用一下,不太清楚消息队列怎么部署的
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
我们没丢过消息啊。。。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
顺序性?什么意思?还要保证消息的顺序性?
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
如何解决消息队列的延时以及过期失效问题?
消息队列满了以后该怎么处理?
我平时暂时还没遇到过这些问题。。。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29c5a895573cf554897b8a101f1c23e6.jpeg)
(汗流浃背)我还是走吧。。。。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cb14fe8390149ba2c5504626c57abff8.jpeg)
以上就是互联网大厂一个典型的针对消息队列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进阶面试训练营》(分布式篇)
训练营亮点:
我用下面一张图,概括了训练营的几大亮点:
注:训练营详细目录大纲,请参见文末
课后作业(五星重要)
为啥把作业单独拎出来强调?因为它实在太重要了。
授之以鱼不如授之以渔!如果说我课上传授给你的是鱼,那么你学完后,能将这些技术,真正落地到自己手头的项目中,这才是渔的能力。
这个渔,是我真正想传授给你的东西!
而这个渔的能力,一定得通过大量的作业才能锻炼出来。
所以在每天的课程讲完后,都会布置一个作业,大家需要去思考:
如何将一个进阶技术融入自己的系统业务流程?
具体应该怎么设计技术方案?
如果你生产环境遇到技术挑战,应该怎么来处理和解决?
因此,你一定得做作业!一定得做作业!一定得做作业!重要的事说3遍!
在作业中暴露问题,然后通过讨论交流答疑,解决问题。这是最有效的学习路径!
下面是一些作业示例:
作业:你们公司的服务注册中心怎么技术选型的,生产环境中怎么优化?
作业:你们公司网关是怎么技术选型的,假设有高并发场景怎么优化?
作业:画出自己系统的生产部署架构图,梳理系统和服务的QPS及扩容方案
作业:你们公司核心链路是否有事务问题?分布式事务方案怎么调研选型?
这些作业你只要去做,就一定会有问题。而作业暴露出的问题,正是你面试中最缺乏的短板
而一旦你解决了这些短板,你就会掌握一项独特的能力。
那就是当很多人还停留在学习各种技术的理论知识的时候,你已经深度思考和总结了这些技术在自己的系统中如何落地,积累了架构经验和生产经验。
如果你具备了这项能力,即使面对刁钻的BAT面试官的深度拷问,你也绝对可以从容应对。
这立马会让你的面试表现提升几档,跟普通工程师拉开巨大差距!
作业答疑 & 交流讨论
课程布置了大量作业,大家完成作业时,对于技术如何在自己系统中落地,一定会产生各种问题。
不过别担心,我们提供了完备的答疑服务!我将邀请之前一批优秀同学,组成助教团队。
这些同学就职于阿里巴巴、蚂蚁金服、京东、滴滴、携程、VIPKID、每日优鲜等各大知名公司,担任资深工程师、技术专家以及架构师
在每天的学习过程以及完成作业的过程中产生的疑问,可以在专栏的评论区内提出,每天都会由我和助教团队一起对评论区中大家的疑问进行解答
通过学习、完成作业、提问以及获取答疑的过程,相信每个同学都能够掌握扎实的技术实践经验
同时能够非常清楚各种技术在自己的项目中到底应该如何落地,各种生产实践经验到底如何运用到自己的项目中
我会和助教们一起,入驻面试训练营的微信群,大家平时可以在微信群里,针对各种技术自由讨论,也可以讨论跳槽面试等各种问题,同时我和助教团队也会参与到大家日常的技术讨论中来
另外,每天我们都会挑选优秀的作业以及典型的提问,并且给出详细的点评,然后推送到微信群里供大家学习交流
终极服务:集齐六季、召唤神龙
学习从来都不是一件轻松的事儿,整个 6 季是一个漫长的过程,需要的是毅力和坚持。
为鼓励坚持学习的同学,对于学完全部 6 季的同学,将可以集齐六季,召唤神龙,获取以下的面试一条龙的终极VIP服务,具体如下:
简历指导:我将对你的简历进行一次360°的诊断,告诉你如何优化简历,才能从上千份简历中脱颖而出
内推渠道:我们聚集了阿里、京东、滴滴等各种一二线互联网公司的内推资源,只要你敢投,我们就敢推!
面经分享:我将邀请之前跟我学习课程,并且在我的指导下面试上阿里巴巴、蚂蚁金服、京东、滴滴、携程、VIPKID、每日优鲜,等一线互联网大厂的同学,进行直播分享,现身说法,跟大家交流经验!
模拟面试:还原真实面试现场,通过比真实面试更强的压力面,极限压榨你的潜力
实际面试中的问题答疑和指导:在你实际面试过程中被问到的各种自己不会的问题,都给你进行解答,全程保驾护航
面试真题大礼包 && 面试实用技巧
200+ 一线互联网公司高频面试真题(含详细指导和解析)
每一轮技术面中的面试技巧(全部结合真实面试案例),比如:
如何引导面试官到自己熟悉的领域?
遇到不会的问题,如何巧妙化险为夷?
如何在技术面中巧妙的掌握主动权?
面对面试官高压的连环炮,如何巧妙应对?
HR面的面试技巧,识别并拆解HR面试中的各种套路
offer选择指导、职业规划,让你的面试完美收尾
注:神龙是专为坚持学习完 6 季的同学准备的,只送不卖!
你的收获
如果你跟着我的步伐,充分掌握全部 6 季的内容,踏实完成所有作业,你的能力将会有质的飞跃。
你积累起来的深厚内力,加上最后这条终极神龙的强力加持。出去面试,可以横扫国内所有互联网公司
没有任何一家互联网公司的面试能难得倒你,包括 BAT 的面试
训练营入口
训练营将在公众号狸猫技术窝更新,如何进入:
1、扫描下方二维码,关注狸猫技术窝
2、点击菜单栏知识店铺,扫描弹出的二维码,即可进入狸猫技术窝的知识店铺
3、进入店铺后,右上角三个点 ... ,选择收藏,将店铺收藏至你的微信个人收藏夹,方便下次访问
训练营详细大纲
END
BAT架构经验倾囊相授