Java工程师应该如何逆袭冲进BAT?

目录
(1)80% Java工程师都有的迷茫面试

(2)你的技术为啥十年八年都没法进步?redis

(3)追求卓越,本身设立技术挑战spring

(4)幻想一步登天?那只是你的黄粱好梦数据库

(5)不断提高本身,最后进入BAT缓存

(6)最后的寄语性能优化

(1)80% Java工程师都有的迷茫
这篇文章,跟你们聊一聊不少不少不少人问个人一个问题:中小公司的Java工程师应该如何规划准备,才能跳槽进入BAT这类一线互联网公司?mybatis

之因此我用了三个 “不少” 来形容这个问题,是由于实在这个问题太广泛了,由于国内Java工程师至少好几十万,可是在国内互联网大厂里干过的码农可能也就十分之一,或者五分之一的比例。架构

因此,其实这个也是符合28法则的,少部分人在大厂里干过,发展的很好。可是大部分人仍是在中小型公司,或者外包类传统IT公司里工做。并发

这些同窗可能对本身的技术成长,职业发展感到很是的迷茫,本身有点追求,也想去一下大厂,可是又不知道怎么规划。mvc

由于我我的在国内几个最大的互联网公司前后有着十余年工做经历,面试和招聘过大量各类水平的开发人员。包括初、中、高级开发,技术专家,高级技术专家,都面过。

一样,也指导过不少同窗的职业发展规划,看过大量的同窗不顺利的职业发展,因此打算从我我的的角度来聊聊这个问题:中小公司的同窗应该如何一步一步实现逆袭进入BAT。

我相信如下情形不少同窗应该都有相似体会:一直徘徊在各类中小公司里开发一些没技术难度的Java系统,主要就是CRUD。

哪怕是用了用MQ、缓存、分库分表,可是也没什么并发量,数据量也不算特别大,本身的技术成长极为缓慢。

而后就是三五年,七八年,甚至十多年,职业发展和技术水平都停滞在这个状态,没法有更进一步的发展。

随着如今寒冬到来,处处裁人,中年码农的危机,加不动班,体力愈来愈差,孩子压力愈来愈大,对本身何去何从很迷茫。

有一些同窗是一直徘徊在那种中小型互联网公司里碰到上述状况,有一些同窗是在一些外包类的IT公司里碰到上述状况。

(2)你的技术为啥十年八年都没法进步?
先来搞清楚一个问题,你的技术到底为何十年八年都没法进步?

拆解一下,你的能力集中在哪几块:

技术广度

对MQ、缓存、NoSQL、大数据、高并发、高可用、微服务,等一系列的相关技术都有必定的了解,熟悉常见功能 在本身的项目里落地使用过,有必定的技术使用经验

这能够解释为技术广度。

技术深度

读过Kafka的底层源码? 对消息中间件的架构设计思想有深入的理解? 对分布式事务框架/中间件的架构设计有过研究? 在每秒百万并发场景下作过底层系统的深刻优化和故障处理? 若是你有相似这种过人之处,那么你才能说你有某些技术深度。

项目经验

你有没有总体负责过几亿注册用户,几千万日活用户的大规模、高并发、分布式、高可用、高复杂度的系统架构设计? 或者你负责的一直都是那种公司内部使用的,几十我的用的OA系统,CRM系统? 这些就是你的项目经验

*团队管理

你在互联网公司里带过20的团队? 或者你在一个传统IT公司里带过3我的的小组? 这都是你的团队管理经验。

拆解事后,再来看看,若是你在一些小型互联网公司,或者是作一些传统软件开发,为何技术没法进步?

其实道理很简单,可能你的公司推出了一款APP,可是很差意思,用户量总共就100万,日活用户就10万人。

那你以为你的系统有技术挑战吗?没有。

既然没有技术挑战,你把系统搞那么复杂干吗?或者你的架构师搞那么复杂干吗?不须要。

你们简单作一作,主要crud写一下功能,最多如今spring cloud流行了,上一下拆成微服务的就够了。

而后这套系统就稳定支撑你公司的业务了,那你接触不到很大的技术挑战,因此技术进入停滞状态,不是很正常么?

或者你作一些传统的软件开发,好比说建筑类软件,办公自动化软件,相似这种的。总共就几十我的用一个系统,或者几百人用,那你就更是如此了。

可能都不须要spring cloud,直接单块系统,单机部署,就是在里面填充业务代码就行了。

因此根本缘由,就是不少同窗平时的工做环境,他没有什么技术挑战,因此只要把系统技术作的简单一些,低成本就能够支撑公司业务了,那既然这样,固然技术就进展很缓慢了。

而后可能你工做了八年十年,技术广度还能够,对流行的技术本身都看过一些书,简单用过,玩过demo。

你的项目经验积累了很多,可是都是一些各个传统领域的系统业务理解较为深入,没有极高技术挑战的项目经验。

有的人工做时间长,可能就是带过一些人,有过一些带团队的经验,能管人。

大概就是如此了,每次换工做,仍是只能换相似的公司,干相似的技术,依然没有进步,依然是相似的项目经验。

因此大伙儿先梳理清楚,迷茫的根源究竟在哪里。

(3)追求卓越,本身设立技术挑战
一般来讲,我我的站在公司角度是很反对架构的过分设计的,由于平白浪费不少时间,并且不少架构过分复杂没有必要。

可是若是是站在我的的职业发展角度而言,那么你的leader必需要有对技术追求卓越的思惟。或者你是leader的话,就得有对你的团队技术追求卓越的品质。

什么叫追求卓越呢?

举个例子,如今你开发了一款办公自动化系统,服务了某个公司,几百人在用,那么技术通常,就是一个单块系统,直接Spring MVC + Spring + MyBatis就搞定了。你们都作着没意思。

好,如今leader为了你们的幸福和将来,咬咬牙说:

Leader

兄弟们,如今系统知足公司的发展了,可是咱们不如来大胆的追求一下卓越。

兄弟们

领导你是啥意思啊??

Leader

这样,我们首先为了提升系统的开发效率,避免30个兄弟开发一个单块系统效率过低,咱们来实践一把最流行的微服务架构吧。

我们一块儿来把系统重构成微服务的架构,把spring cloud整套东西都用进去。

兄弟们

(认真听着)

Leader

我们先得作技术调研,小A你来研究研究Spring Cloud核心技术组件,小B你来研究研究配置中心,小C你来研究研究服务链路追踪,等等。

你们分头行动,都开始学起来新技术。可是呢,我们平时已经很忙了,要是占用工做时间搞这个,老板会骂人,你们看,每一个人天天额外加班抽2小时一块儿来搞一下,怎么样?

兄弟们

领导,为了你们的幸福,那确定得赶忙上新技术啊,你们都学点新东西。

最后你们辛苦了2个月,一块儿把系统重构成了整套的微服务架构,每一个人都学到了东西,领导也学到了微服务总体架构设计的能力。

Leader

兄弟们,还想不想继续为将来的幸福努力一下?

兄弟们

一切都听领导安排。

Leader

如今这破系统就几百人用,忒没意思了,我们来大胆想象,假如说之后这个系统要作成SaaS云产品,会有几百个公司来用,有几万人,甚至几十万人同时使用一套后台系统。大伙想一想,那时会怎么样?

兄弟们

贫穷限制了个人想象力。。。。

Leader

那小A你去根据如今系统的访问量估算一下,若是有几十万人用,系统天天的并发量会有多少,数据库能不能支撑住,须要用哪些高并发的技术来支撑?

小B,你去调研一下,若是有几十万人用,咱们会存储多少数据量,性能会有多差,怎么支撑海量数据存储?而后看看用什么技术来支撑一下?

兄弟们

好,领导一句话,上刀山、下火海。

几个月后,你们研发了一套系统,完成了测试,系统集成了缓存集群、MQ集群、分库分表技术,还有不少其余的一些东西。

这个时候领导就想办法了,能不能跟老板建议一下,我们就把产品作成SaaS云的模式呢?而后是否是能够就把这套系统给部署到生产环境里去?

到此为止,就经过一个例子,给你们阐述了一下,本身在公司里,如何经过想办法不断的追求系统的卓越,提升研发效率,支撑也许可能会存在的更高的并发量,更多的数据量,尽量把系统作的更好一些。

多想一想为了解决本身设想的一些技术挑战,如何尽量把一些业界经常使用的技术都学习一下,好比缓存、消息、分布式、微服务、大数据,等等。

而后都尽量进行相关的实践,积累相关的项目经验。

实际每一个人在落地的这个过程的时候,方式确定是不同的:有的人也许人微言轻,只能对本身负责的模块设想一些技术挑战,而后只能本身在本地拉一个公司代码分支,尝试对这些分支加入一些技术,本身练习思考。

还有的人,多是个小leader,没法左右公司产品发展方向,可是能够尽量跟上级沟通,阐述本身对系统架构追求卓越的一些构想。

而后,争取到一些时间,尽量把系统多融入一些技术,给作的好一些。

每一个人都有每一个人的方式,可是归根到底一句话:若是你自己工做没有技术挑战,那么尽量多给本身设立一些挑战,多学一些技术,多作一些尝试和实践。

这老是能够尽量帮助你在必定程度上提升技术,扩展技术知识的。

在这个阶段,我见过最多的人犯的最大的一个错误就是:以为本身这样倒腾一些技术是没用的,没有实际的真正的经验。

而后他们着急忙慌,心浮气躁,自怨自艾,总想着必须得先进一个好的公司,才能锻炼技术。

实际上,这是一种很浮躁的想法,你要进好的公司锻炼,你必须先打磨一下本身的技术,而后才能有资本去一家更好的公司。

在此我向你们推荐一个架构学习交流圈。交流学习圈:830478757 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

(4)幻想一步登天?那只是你的黄粱好梦
不少人多学了一些技术,有了一些经验,很容易开始有点膨胀,总是想着一步登天,一会儿就进入BAT。

关于这个,实际上是有相似的一些成功经历,好比有的人是大专学历,经过本身的努力学习,加上一些机缘巧合,直接一会儿就从中小公司跳入了BAT。

可是就现实状况来看,不是每一个人都必定能够一步登天,复制这个经历的。

在你学习了一些技术,同时本身多作了一些尝试,积累了必定的经验以后,此时应该作的是:作最坏的打算,抱最好的但愿。

你彻底能够去试试BAT的面试,TMD的面试,尽量去争取机会,可是若是没面上也无所谓。

你能够下降指望,人只要跟本身比就行了。

好比说你如今在某小型的传统外包软件公司,那么接下来若是你能面进一家小型创业互联网公司,有个几百万用户量,日活用户有几十万,比以前的公司技术挑战多一些,用的技术也更多一些,那么你就能够去了。

只要你每一步跳槽,都比以前好,都让本身有进步,那么总体的大方向就是没错的。

也许你先进一个创业型互联网公司,而后下一家就能够进入一个市值几十亿美金的上市互联网公司,再下一步就能够进入BAT。

在这个阶段我见过不少人犯的最大的错误就是:总是以为本身刚学了一点东西,就必须立马进大公司。

这些同窗每每心态着急的不行,而忽略了本身的学历、背景、经验致使了起点较低。能立马进BAT固然很好,可是有时候机缘巧合缘分没到,进不去也正常。

在这个阶段最须要作的,就是跟本身比,别跟别人比,只要每一次跳槽都比上一次好,公司更大,薪资更高,职位更高,技术挑战更大,就能够了。

(5)不断提高本身,最后进入BAT
一旦你开始作到跳槽进入一家比以前更好的公司,有更高的技术挑战,那么公司自己的技术挑战就会促使你快速成长,仍是举个例子吧。

好比说你原本就在作传统软件的开发,用的都是单块系统涉及的一些技术,就是简单的spring mvc、spring、mybatis等技术作CRUD的业务开发。

可是呢,你经过追求卓越,本身业余不停的学习技术,而后对本身负责的一些模块多设立了一些技术挑战,本身构思了不少更高挑战的场景下,能够给本身的模块加入哪些更高阶的技术。

接着你带着本身学习的一些技术,还有积累的一些实践经验和思考,进入了一家创业型互联网公司。

这家公司的好处就在于,互联网公司技术氛围更好,好比zookeeper、redis、rocketmq、sharding-jdbc,等各类技术,在公司生产环境的系统里,都有落地和使用。

那么你此时是否是就不用停留于一些技术挑战的构思,能够开始真正作一些有点技术挑战的工做了。

可是,此时你仍是须要继续不停的学习技术,学习更多的架构上须要的技术,深刻的学习技术,同时积累实践经验。

而后带着这份工做经历,同时加上你不断增强的技术学习,你进入了一家好比30亿美金估值的独角兽公司。

这家公司有2000万用户,日活用户达到百万级,高峰并发量能够过万,天天数据库里日增数据量达到了数十万。

此时你开始真正接触一些所谓的:高并发、高可用、高性能、海量数据的实际处理。

基于你开发的业务系统,你开始更多的实践,同时你还对各类涉及到的技术有了更加深刻的研究,好比对一些核心中间件系统进行了源码级别的阅读和研究。

最后你终于等到一个机会,BAT里某家公司让你去面试,经历了四五轮面试以后,对方给了你一个offer,是年薪40万的高级Java工程师的职位。

而后你进去以后,能够在最顶尖的互联网公司里学习开发流程、规范、架构,接触到最大规模的用户量,天天都有解决不完的技术挑战,在这个过程当中,你又能够继续成长。

最后可能你再次跳槽,就能够进入TMD中某一家,拿下技术专家的offer,在大公司里拿下技术专家的职位,带一个团队,达到人生第一个巅峰。

接着你再跳槽,可能一些创业公司就开始挖你去作一些技术管理层。

你们别觉得这个仅仅是笔者捏造的一个故事,在笔者指导过的同窗中,确实有同窗按照这个路线,实现了人生的逆袭!

 在此我向你们推荐一个架构学习交流圈。交流学习圈:830478757 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

(6)最后的寄语
最后,送你们一句话:九层之台,始于垒土;千里之行,始于足下。

这里面最难的就是开始的那一步,也就是大量的人都停留在一些彻底没太多技术含量的技术工做的状况下,这个时候是最难熬的。

其实只要能把第一步走好,本身拼命的积累技术,努力跟其余工程师竞争,技术远超跟本身同状况的其余工程师,那么你就有机会率先脱离这种困境,开始慢慢第二步,第三步。

到了后面,就是让公司的技术挑战push你不断努力和进步,最后进入BAT这类一线互联网公司。

END
若有收获,请帮忙转发,您的鼓励是做者最大的动力,谢谢!

一大波微服务、分布式、高并发、高可用的原创系列文章正在路上

相关文章
相关标签/搜索