![](https://upload-images.jianshu.io/upload_images/11633898-a596247db0ef7a2f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这篇文章,跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师应该如何规划准备,才能跳槽进入BAT这类一线互联网公司?
**80% Java工程师都有的迷茫**
国内Java工程师至少好几十万,但是在国内互联网大厂里干过的码农可能也就十分之一,或者五分之一的比例。其实少部分人在大厂里干过,发展的很好。但是**大部分人还是在中小型公司,或者外包类传统IT公司里工作。**
这些人可能对自己的技术成长,**职业发展感到非常的迷茫**,自己有点追求,也**想去一下大厂**,但是又**不知道怎么规划。**
我相信以下情形很多人应该都有类似体会:一直徘徊在各种中小公司里开发一些没技术难度的Java系统,主要就是CRUD。
哪怕是用了用MQ、缓存、分库分表,但是也没什么并发量,数据量也不算特别大,自己的技术成长极为缓慢。
然后就是三五年,七八年,甚至十多年,职业发展和技术水平都**停滞在这个状态**,无法有更进一步的发展。
**随着现在寒冬到来,到处裁员,中年码农的危机,加不动班,体力越来越差,孩子压力越来越大,对自己何去何从很迷茫。**
有一些人是一直徘徊在那种中小型互联网公司里碰到上述情况,有一些同学是在一些外包类的IT公司里碰到上述情况。
**你的技术为啥十年八年都无法进步?**
先来搞清楚一个问题,你的技术到底为什么十年八年都无法进步?
拆解一下,你的能力集中在哪几块:
**技术广度**
**对MQ、缓存、NoSQL、大数据、高并发、高可用、微服务,等一系列的相关技术都有一定的了解,熟悉常见功能**
在自己的项目里落地使用过,有一定的技术使用经验,这可以解释为技术广度。
**技术深度**
* 读过Kafka的底层源码?
* 对消息中间件的架构设计思想有深刻的理解?
* 对分布式事务框架/中间件的架构设计有过研究?
* 在每秒百万并发场景下做过底层系统的深入优化和故障处理?
* 如果你有类似这种过人之处,那么你才能说你有某些技术深度。
**项目经验**
* 你有没有整体负责过几亿注册用户,几千万日活用户的大规模、高并发、分布式、高可用、高复杂度的系统架构设计?
* 或者你负责的一直都是那种公司内部使用的,几十个人用的OA系统,CRM系统?
* 这些就是你的项目经验
**团队管理**
* 你在互联网公司里带过20的团队?
* 或者你在一个传统IT公司里带过3个人的小组?
* 这都是你的团队管理经验。
拆解过后,再来看看,**如果你在一些小型互联网公司,或者是做一些传统软件开发,为什么技术无法进步?**
其实道理很简单,可能你的公司推出了一款APP,但是不好意思,用户量总共就100万,日活用户就10万人。
如有有收获,喜欢小编的可以关注小编同时也欢迎大家加入小编的Java交流群937053620,逆袭BATJ..........
那你觉得你的系统有技术挑战吗?没有。
**既然没有技术挑战,你把系统搞那么复杂干嘛?**或者你的架构师搞那么复杂干嘛?不需要。
大家**简单做一做**,主要crud写一下功能,最多现在spring cloud流行了,上一下拆成微服务的就够了。
**然后这套系统就稳定支撑你公司的业务了,那你接触不到很大的技术挑战,所以技术进入停滞状态,不是很正常么?**
所以根本原因,就是**平时的工作环境,没有什么技术挑战,所以只要把系统技术做的简单一些,低成本就可以支撑公司业务了,那既然这样,当然技术就进展很缓慢了。**
有的人工作时间长,可能就是带过一些人,有过一些带团队的经验,能管人。
大概就是如此了,每次换工作,还是只能换类似的公司,干类似的技术,依然没有进步,依然是类似的项目经验。
所以大伙儿先梳理清楚,**迷茫的根源究竟在哪里?**
**追求卓越,自己设立技术挑战**
通常来说,站在公司角度是很反对架构的过度设计的,因为平白浪费很多时间,而且很多架构过度复杂没有必要。
但是如果是站在个人的职业发展角度而言,那么你的leader必须要有对技术追求卓越的思维。或者你是leader的话,就得有对你的团队技术追求卓越的品质。
每个人都有每个人的方式,但是**归根到底一句话:**如果你本身工作没有技术挑战,那么尽可能多给自己设立一些挑战,多学一些技术,多做一些尝试和实践。
**能帮助你在一定程度上提高技术,扩展技术知识**
在这个阶段,最多的人犯的**最大的一个错误**就是:觉得自己这样倒腾一些技术是没用的,没有实际的真正的经验。
然后着急忙慌,心浮气躁,自怨自艾,**总想着必须得先进一个好的公司,才能锻炼技术。**
实际上,这是一种很浮躁的想法,**你要进好的公司锻炼,你必须先打磨一下自己的技术**,然后才能有资本去一家更好的公司。
**幻想一步登天?**
很多人多学了一些技术,有了一些经验,很容易开始有点膨胀,老是想着一步登天,一下子就进入BAT。
在你学习了一些技术,同时自己多做了一些尝试,积累了一定的经验之后,此时应该做的是:**做最坏的打算,抱最好的希望。**
你完全可以去试试BAT的面试,TMD的面试,尽可能去争取机会,但是如果没面上也无所谓。
**你可以降低期望,人只要跟自己比就好了。**
只要你每一步跳槽,都比之前好,都让自己有进步,那么整体的大方向就是没错的。
在这个阶段我见过很多人犯的**最大的错误**就是:老是觉得自己刚学了一点东西,就必须立马进大公司。
**不断提升自己,最后进入BAT**
一旦你开始做到跳槽进入一家比之前更好的公司,有更高的技术挑战,那么公司本身的技术挑战就会促使你快速成长。
你开始真正接触一些所谓的:高并发、高可用、高性能、海量数据的实际处理。
基于你开发的业务系统,你开始更多的实践,同时你还对各种涉及到的技术有了更加深入的研究,比如对一些核心中间件系统进行了源码级别的阅读和研究。
最后你终于等到一个机会,BAT里某家公司让你去面试,经历了四五轮面试之后,对方给了你一个offer,是年薪40万的高级Java工程师的职位。
然后你进去之后,可以在最顶尖的互联网公司里学习开发流程、规范、架构,接触到最大规模的用户量,每天都有解决不完的技术挑战,在这个过程中,你又可以继续成长。
最后可能你再次跳槽,就可以进入TMD中某一家,拿下技术专家的offer,在大公司里拿下技术专家的职位,带一个团队,达到人生第一个巅峰。
**最后的寄语**
最后,送大家一句话:**九层之台,始于垒土;千里之行,始于足下。**
这里面最难的就是开始的那一步,也就是大量的人都停留在一些完全没太多技术含量的技术工作的情况下,这个时候是最难熬的。
其实只要能把第一步走好,自己拼命的积累技术,努力跟其他工程师竞争,技术远超跟自己同情况的其他工程师,那么你就有机会率先脱离这种困境,开始慢慢第二步,第三步。
**End**
如果你对程序员进阶比较感兴趣,给大家推荐一个Java进阶**内推交流群937053620**,不管你在地球哪个方位,不管你参加工作几年都欢迎你的入驻!**(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)**
有疑问加站长微信联系(非本文作者)