這篇文章,跟大家聊一聊很多很多很多人問(wèn)我的一個(gè)問(wèn)題:中小公司的Java工程師應(yīng)該如何規(guī)劃準(zhǔn)備,才能跳槽進(jìn)入BAT這類一線互聯(lián)網(wǎng)公司?
之所以我用了三個(gè) “很多” 來(lái)形容這個(gè)問(wèn)題,是因?yàn)閷?shí)在這個(gè)問(wèn)題太普遍了,因?yàn)閲?guó)內(nèi)Java工程師至少好幾十萬(wàn),但是在國(guó)內(nèi)互聯(lián)網(wǎng)大廠里干過(guò)的碼農(nóng)可能也就十分之一,或者五分之一的比例。
所以,其實(shí)這個(gè)也是符合28法則的,少部分人在大廠里干過(guò),發(fā)展的很好。但是大部分人還是在中小型公司,或者外包類傳統(tǒng)IT公司里工作。
(1)80% Java工程師都有的迷茫
這些同學(xué)可能對(duì)自己的技術(shù)成長(zhǎng),職業(yè)發(fā)展感到非常的迷茫,自己有點(diǎn)追求,也想去一下大廠,但是又不知道怎么規(guī)劃。
因?yàn)槲覀€(gè)人在國(guó)內(nèi)幾個(gè)最大的互聯(lián)網(wǎng)公司先后有著十余年工作經(jīng)歷,面試和招聘過(guò)大量各種水平的開(kāi)發(fā)人員。包括初、中、高級(jí)開(kāi)發(fā),技術(shù)專家,高級(jí)技術(shù)專家,都面過(guò)。
同樣,也指導(dǎo)過(guò)很多同學(xué)的職業(yè)發(fā)展規(guī)劃,看過(guò)大量的同學(xué)不順利的職業(yè)發(fā)展,所以打算從我個(gè)人的角度來(lái)聊聊這個(gè)問(wèn)題:中小公司的同學(xué)應(yīng)該如何一步一步實(shí)現(xiàn)逆襲進(jìn)入BAT。
我相信以下情形很多同學(xué)應(yīng)該都有類似體會(huì):一直徘徊在各種中小公司里開(kāi)發(fā)一些沒(méi)技術(shù)難度的Java系統(tǒng),主要就是CRUD。
哪怕是用了用MQ、緩存、分庫(kù)分表,但是也沒(méi)什么并發(fā)量,數(shù)據(jù)量也不算特別大,自己的技術(shù)成長(zhǎng)極為緩慢。
然后就是三五年,七八年,甚至十多年,職業(yè)發(fā)展和技術(shù)水平都停滯在這個(gè)狀態(tài),無(wú)法有更進(jìn)一步的發(fā)展。
隨著現(xiàn)在寒冬到來(lái),到處裁員,中年碼農(nóng)的危機(jī),加不動(dòng)班,體力越來(lái)越差,孩子壓力越來(lái)越大,對(duì)自己何去何從很迷茫。
有一些同學(xué)是一直徘徊在那種中小型互聯(lián)網(wǎng)公司里碰到上述情況,有一些同學(xué)是在一些外包類的IT公司里碰到上述情況。
(2)你的技術(shù)為啥十年八年都無(wú)法進(jìn)步?
先來(lái)搞清楚一個(gè)問(wèn)題,你的技術(shù)到底為什么十年八年都無(wú)法進(jìn)步?
拆解一下,你的能力集中在哪幾塊:
技術(shù)廣度
對(duì)MQ、緩存、NoSQL、大數(shù)據(jù)、高并發(fā)、高可用、微服務(wù),等一系列的相關(guān)技術(shù)都有一定的了解,熟悉常見(jiàn)功能
在自己的項(xiàng)目里落地使用過(guò),有一定的技術(shù)使用經(jīng)驗(yàn)
這可以解釋為技術(shù)廣度。
技術(shù)深度
讀過(guò)Kafka的底層源碼?
對(duì)消息中間件的架構(gòu)設(shè)計(jì)思想有深刻的理解?
對(duì)分布式事務(wù)框架/中間件的架構(gòu)設(shè)計(jì)有過(guò)研究?
在每秒百萬(wàn)并發(fā)場(chǎng)景下做過(guò)底層系統(tǒng)的深入優(yōu)化和故障處理?
如果你有類似這種過(guò)人之處,那么你才能說(shuō)你有某些技術(shù)深度。
項(xiàng)目經(jīng)驗(yàn)
你有沒(méi)有整體負(fù)責(zé)過(guò)幾億注冊(cè)用戶,幾千萬(wàn)日活用戶的大規(guī)模、高并發(fā)、分布式、高可用、高復(fù)雜度的系統(tǒng)架構(gòu)設(shè)計(jì)?
或者你負(fù)責(zé)的一直都是那種公司內(nèi)部使用的,幾十個(gè)人用的OA系統(tǒng),CRM系統(tǒng)?
這些就是你的項(xiàng)目經(jīng)驗(yàn)
團(tuán)隊(duì)管理
你在互聯(lián)網(wǎng)公司里帶過(guò)20的團(tuán)隊(duì)?
或者你在一個(gè)傳統(tǒng)IT公司里帶過(guò)3個(gè)人的小組?
這都是你的團(tuán)隊(duì)管理經(jīng)驗(yàn)。
拆解過(guò)后,再來(lái)看看,如果你在一些小型互聯(lián)網(wǎng)公司,或者是做一些傳統(tǒng)軟件開(kāi)發(fā),為什么技術(shù)無(wú)法進(jìn)步?
其實(shí)道理很簡(jiǎn)單,可能你的公司推出了一款A(yù)PP,但是不好意思,用戶量總共就100萬(wàn),日活用戶就10萬(wàn)人。
那你覺(jué)得你的系統(tǒng)有技術(shù)挑戰(zhàn)嗎?沒(méi)有。
既然沒(méi)有技術(shù)挑戰(zhàn),你把系統(tǒng)搞那么復(fù)雜干嘛?或者你的架構(gòu)師搞那么復(fù)雜干嘛?不需要。
大家簡(jiǎn)單做一做,主要crud寫一下功能,最多現(xiàn)在spring cloud流行了,上一下拆成微服務(wù)的就夠了。
然后這套系統(tǒng)就穩(wěn)定支撐你公司的業(yè)務(wù)了,那你接觸不到很大的技術(shù)挑戰(zhàn),所以技術(shù)進(jìn)入停滯狀態(tài),不是很正常么?
或者你做一些傳統(tǒng)的軟件開(kāi)發(fā),比如說(shuō)建筑類軟件,辦公自動(dòng)化軟件,類似這種的。總共就幾十個(gè)人用一個(gè)系統(tǒng),或者幾百人用,那你就更是如此了。
可能都不需要spring cloud,直接單塊系統(tǒng),單機(jī)部署,就是在里面填充業(yè)務(wù)代碼就好了。
所以根本原因,就是很多同學(xué)平時(shí)的工作環(huán)境,他沒(méi)有什么技術(shù)挑戰(zhàn),所以只要把系統(tǒng)技術(shù)做的簡(jiǎn)單一些,低成本就可以支撐公司業(yè)務(wù)了,那既然這樣,當(dāng)然技術(shù)就進(jìn)展很緩慢了。
然后可能你工作了八年十年,技術(shù)廣度還可以,對(duì)流行的技術(shù)自己都看過(guò)一些書(shū),簡(jiǎn)單用過(guò),玩過(guò)demo。
你的項(xiàng)目經(jīng)驗(yàn)積累了不少,但是都是一些各個(gè)傳統(tǒng)領(lǐng)域的系統(tǒng)業(yè)務(wù)理解較為深刻,沒(méi)有極高技術(shù)挑戰(zhàn)的項(xiàng)目經(jīng)驗(yàn)。
有的人工作時(shí)間長(zhǎng),可能就是帶過(guò)一些人,有過(guò)一些帶團(tuán)隊(duì)的經(jīng)驗(yàn),能管人。
大概就是如此了,每次換工作,還是只能換類似的公司,干類似的技術(shù),依然沒(méi)有進(jìn)步,依然是類似的項(xiàng)目經(jīng)驗(yàn)。
所以大伙兒先梳理清楚,迷茫的根源究竟在哪里。
(3)想進(jìn)BAT的你該掌握什么技術(shù)?
筆者在這里總結(jié)了一下,首先是基礎(chǔ)工作需要的,spring,IOC,AOP,spring mvc,mybatis,這些源碼都是需要讀的。

其次JVM,程序性能優(yōu)化,Tomcat,并發(fā)編程,MySQL,netty,Linux也是需要了解的。

高性能架構(gòu),分布式,Zookeeper,Nginx,active mq,rabbit mq,kafka,memcached,Redis,mongoDB。

微服務(wù),不用多說(shuō),spring boot ,spring cloud,docker。

團(tuán)隊(duì)開(kāi)發(fā),Git,Maven,Jenkins,sonar。

以上技術(shù),筆者整理了視頻,大家有需要可以加群免費(fèi)領(lǐng)取,還有相關(guān)面試題及電子書(shū),群號(hào):923116658。
(4)幻想一步登天?那只是你的黃粱美夢(mèng)
很多人多學(xué)了一些技術(shù),有了一些經(jīng)驗(yàn),很容易開(kāi)始有點(diǎn)膨脹,老是想著一步登天,一下子就進(jìn)入BAT。
關(guān)于這個(gè),其實(shí)是有類似的一些成功經(jīng)歷,比如有的人是大專學(xué)歷,通過(guò)自己的努力學(xué)習(xí),加上一些機(jī)緣巧合,直接一下子就從中小公司跳入了BAT。
但是就現(xiàn)實(shí)情況來(lái)看,不是每個(gè)人都一定可以一步登天,復(fù)制這個(gè)經(jīng)歷的。
在你學(xué)習(xí)了一些技術(shù),同時(shí)自己多做了一些嘗試,積累了一定的經(jīng)驗(yàn)之后,此時(shí)應(yīng)該做的是:做最壞的打算,抱最好的希望。
你完全可以去試試BAT的面試,TMD的面試,盡可能去爭(zhēng)取機(jī)會(huì),但是如果沒(méi)面上也無(wú)所謂。
你可以降低期望,人只要跟自己比就好了。
比如說(shuō)你現(xiàn)在在某小型的傳統(tǒng)外包軟件公司,那么接下來(lái)如果你能面進(jìn)一家小型創(chuàng)業(yè)互聯(lián)網(wǎng)公司,有個(gè)幾百萬(wàn)用戶量,日活用戶有幾十萬(wàn),比之前的公司技術(shù)挑戰(zhàn)多一些,用的技術(shù)也更多一些,那么你就可以去了。
只要你每一步跳槽,都比之前好,都讓自己有進(jìn)步,那么整體的大方向就是沒(méi)錯(cuò)的。
也許你先進(jìn)一個(gè)創(chuàng)業(yè)型互聯(lián)網(wǎng)公司,然后下一家就可以進(jìn)入一個(gè)市值幾十億美金的上市互聯(lián)網(wǎng)公司,再下一步就可以進(jìn)入BAT。
在這個(gè)階段我見(jiàn)過(guò)很多人犯的最大的錯(cuò)誤就是:老是覺(jué)得自己剛學(xué)了一點(diǎn)東西,就必須立馬進(jìn)大公司。
這些同學(xué)往往心態(tài)著急的不行,而忽略了自己的學(xué)歷、背景、經(jīng)驗(yàn)導(dǎo)致了起點(diǎn)較低。能立馬進(jìn)BAT當(dāng)然很好,但是有時(shí)候機(jī)緣巧合緣分沒(méi)到,進(jìn)不去也正常。
在這個(gè)階段最需要做的,就是跟自己比,別跟別人比,只要每一次跳槽都比上一次好,公司更大,薪資更高,職位更高,技術(shù)挑戰(zhàn)更大,就可以了。
(5)不斷提升自己,最后進(jìn)入BAT
一旦你開(kāi)始做到跳槽進(jìn)入一家比之前更好的公司,有更高的技術(shù)挑戰(zhàn),那么公司本身的技術(shù)挑戰(zhàn)就會(huì)促使你快速成長(zhǎng),還是舉個(gè)例子吧。
比如說(shuō)你本來(lái)就在做傳統(tǒng)軟件的開(kāi)發(fā),用的都是單塊系統(tǒng)涉及的一些技術(shù),就是簡(jiǎn)單的spring mvc、spring、mybatis等技術(shù)做CRUD的業(yè)務(wù)開(kāi)發(fā)。
但是呢,你通過(guò)追求卓越,自己業(yè)余不停的學(xué)習(xí)技術(shù),然后對(duì)自己負(fù)責(zé)的一些模塊多設(shè)立了一些技術(shù)挑戰(zhàn),自己構(gòu)思了很多更高挑戰(zhàn)的場(chǎng)景下,可以給自己的模塊加入哪些更高階的技術(shù)。
接著你帶著自己學(xué)習(xí)的一些技術(shù),還有積累的一些實(shí)踐經(jīng)驗(yàn)和思考,進(jìn)入了一家創(chuàng)業(yè)型互聯(lián)網(wǎng)公司。
這家公司的好處就在于,互聯(lián)網(wǎng)公司技術(shù)氛圍更好,比如zookeeper、redis、rocketmq、sharding-jdbc,等各種技術(shù),在公司生產(chǎn)環(huán)境的系統(tǒng)里,都有落地和使用。
那么你此時(shí)是不是就不用停留于一些技術(shù)挑戰(zhàn)的構(gòu)思,可以開(kāi)始真正做一些有點(diǎn)技術(shù)挑戰(zhàn)的工作了。
但是,此時(shí)你還是需要繼續(xù)不停的學(xué)習(xí)技術(shù),學(xué)習(xí)更多的架構(gòu)上需要的技術(shù),深入的學(xué)習(xí)技術(shù),同時(shí)積累實(shí)踐經(jīng)驗(yàn)。
然后帶著這份工作經(jīng)歷,同時(shí)加上你不斷加強(qiáng)的技術(shù)學(xué)習(xí),你進(jìn)入了一家比如30億美金估值的獨(dú)角獸公司。
這家公司有2000萬(wàn)用戶,日活用戶達(dá)到百萬(wàn)級(jí),高峰并發(fā)量可以過(guò)萬(wàn),每天數(shù)據(jù)庫(kù)里日增數(shù)據(jù)量達(dá)到了數(shù)十萬(wàn)。
此時(shí)你開(kāi)始真正接觸一些所謂的:高并發(fā)、高可用、高性能、海量數(shù)據(jù)的實(shí)際處理。
基于你開(kāi)發(fā)的業(yè)務(wù)系統(tǒng),你開(kāi)始更多的實(shí)踐,同時(shí)你還對(duì)各種涉及到的技術(shù)有了更加深入的研究,比如對(duì)一些核心中間件系統(tǒng)進(jìn)行了源碼級(jí)別的閱讀和研究。
最后你終于等到一個(gè)機(jī)會(huì),BAT里某家公司讓你去面試,經(jīng)歷了四五輪面試之后,對(duì)方給了你一個(gè)offer,是年薪40萬(wàn)的高級(jí)Java工程師的職位。
然后你進(jìn)去之后,可以在最頂尖的互聯(lián)網(wǎng)公司里學(xué)習(xí)開(kāi)發(fā)流程、規(guī)范、架構(gòu),接觸到最大規(guī)模的用戶量,每天都有解決不完的技術(shù)挑戰(zhàn),在這個(gè)過(guò)程中,你又可以繼續(xù)成長(zhǎng)。
最后可能你再次跳槽,就可以進(jìn)入TMD中某一家,拿下技術(shù)專家的offer,在大公司里拿下技術(shù)專家的職位,帶一個(gè)團(tuán)隊(duì),達(dá)到人生第一個(gè)巔峰。
接著你再跳槽,可能一些創(chuàng)業(yè)公司就開(kāi)始挖你去做一些技術(shù)管理層。
大家別以為這個(gè)僅僅是筆者捏造的一個(gè)故事,在筆者指導(dǎo)過(guò)的同學(xué)中,確實(shí)有同學(xué)按照這個(gè)路線,實(shí)現(xiàn)了人生的逆襲!
(6)最后的寄語(yǔ)
最后,送大家一句話:九層之臺(tái),始于壘土;千里之行,始于足下。
這里面最難的就是開(kāi)始的那一步,也就是大量的人都停留在一些完全沒(méi)太多技術(shù)含量的技術(shù)工作的情況下,這個(gè)時(shí)候是最難熬的。
其實(shí)只要能把第一步走好,自己拼命的積累技術(shù),努力跟其他工程師競(jìng)爭(zhēng),技術(shù)遠(yuǎn)超跟自己同情況的其他工程師,那么你就有機(jī)會(huì)率先脫離這種困境,開(kāi)始慢慢第二步,第三步。
到了后面,就是讓公司的技術(shù)挑戰(zhàn)push你不斷努力和進(jìn)步,最后進(jìn)入BAT這類一線互聯(lián)網(wǎng)公司。