15年畢業(yè),計算機專業(yè)出身,對軟件開發(fā)很感興趣,所以畢業(yè)找工作的時候就一直投IT行業(yè)的職位。剛踏入這個行業(yè)時,以為突擊一下東拼西湊的面試材料,就能有個很好的收獲。結(jié)果卻是,別說大公司了,就是很多看不上的小公司的筆試題都過不去。
焦躁階段
后來我去了本地的一個小公司去做服務(wù)端的開發(fā)。雖然叫服務(wù)端開發(fā),但其實就是做系統(tǒng)指標(biāo)監(jiān)控功能,從DB中讀取一些指標(biāo)數(shù)據(jù),通過圖表的形式展現(xiàn)在瀏覽器中,所用的技術(shù)無非就是Spring MVC那一套。這種CRUD的工作內(nèi)容做時間長了,就純粹是體力勞動了,技術(shù)視野沒辦法打開。
即使寫這么簡單的功能代碼,卻還總是被leader批評,說我寫的代碼質(zhì)量太差,配不上這幾千塊的工資。人總是要臉面的,為了改變這種狀況,就開始想著如何在平凡的工作中把事情做到極致,開始關(guān)注代碼質(zhì)量,開始真正的啃起了《Java編程思想》、《effective java》、《設(shè)計模式》這些書。
同時強迫自己在代碼開發(fā)前,多畫一些架構(gòu)圖、數(shù)據(jù)流程圖,寫代碼的時候也強迫自己代碼分層,經(jīng)過半年的磨煉,漸漸的也能寫出一些松耦合高內(nèi)聚的代碼,也改變了滿屏if-else亂飛的現(xiàn)象。leader也不再說我代碼差了,還給我漲了幾百塊錢(知識就是金錢)!
打開見識階段
當(dāng)時我以為這就是優(yōu)秀程序員的核心能力,就鼓足勇氣去投了一些大公司的職位,卻沒收到一個面試邀請函。后來投了幾個小公司的面試,收到了面試卻沒收到offer,因為有的面試題我根本沒有概念,比如:
相比關(guān)系型數(shù)據(jù)庫,NoSQL的優(yōu)勢在哪里,你們在什么場景下會用到?分析日志里存的都是賬號登陸信息,一天100G左右,找某一時間段內(nèi)登陸次數(shù)最多的一個賬號你們的并發(fā)量有多大,對于雪崩現(xiàn)象是如何規(guī)避的?
這些問題讓我意識到:語法與設(shè)計模式只是程序員基本技能而已,要想進一步發(fā)展,必須在數(shù)據(jù)結(jié)構(gòu)、高并發(fā)、分布式技術(shù)等方面提高。最開始學(xué)習(xí)的時候是很艱難的,基礎(chǔ)弱,加上工作中又沒有這些技術(shù)的使用場景,所以只能在論壇、博客等看零碎的文章,進步比較慢。
要想系統(tǒng)的學(xué)習(xí),圖書和網(wǎng)絡(luò)課程是比較好的選擇。我買了諸如《java并發(fā)編程實踐》、《大型分布式網(wǎng)站架構(gòu)設(shè)計與時間》、《Spring Cloud與微服務(wù)構(gòu)建》等書,來來回回看了好幾遍。然后在網(wǎng)上看了些視頻,有免費的,也有收費的。我還花了近半年時間系統(tǒng)性地學(xué)習(xí)了一套課程,學(xué)完之后對Java相關(guān)的技能有了更為體系化的了解。同時,對于非科班出身或基礎(chǔ)知識不夠扎實的工程師來說,也可以有效起到查漏補缺的作用。
之后我就試著在工作中利用這些技術(shù),當(dāng)時的狀態(tài)就是“拿著錘子后,看到哪里都是釘子”,學(xué)到一個新技術(shù)后,就想強行用在任何項目上,leader有時候說我瘋了,可我覺得也不必鄙視這種經(jīng)歷,凡事都有一個認知過程,這也是一種積累。
知識深化階段
大概17年下半年,我就投了一些大的互聯(lián)網(wǎng)公司職位,比上次好一點,有一些公司給我了面試邀請,但最后卻都還是沒收到offer。
后來復(fù)盤一下面試問題,發(fā)現(xiàn)我在整體技術(shù)面上回答得較好,但在細節(jié)技術(shù)點上,有點吃力,比如面試官問:
聊一聊你對JVM的原理,如何減少Full GC的情況?消息隊列如何保證順序消費?如何保證at least once特性?數(shù)據(jù)是通過push還是pull方式給到消費端,各自有什么弊端?如果消費失敗,可能是哪些原因引起?如果是因為網(wǎng)絡(luò)原因引起,該如何解決?
通俗的話來講,就是雖然我見識了各種各樣的輪子了,也知道各種輪子適合在什么樣的路上跑,但不知道為什么適合。針對這種情況,結(jié)合已有的知識體系,選擇了一個方面進行了深入,我當(dāng)時選的是消息隊列的深入研究,從網(wǎng)絡(luò)協(xié)議、服務(wù)端消息存儲、客戶端消費、各種異常情況的處理等都摸了一遍。
這個過程我會針對每個環(huán)節(jié)進行假設(shè)反問,如果這一步失敗了,會發(fā)生什么情況,該如何處理?這種思維培養(yǎng)了我對技術(shù)問題細節(jié)思考的能力,現(xiàn)在看來真的是受益匪淺。
18年上半年,我又去試了大公司的面試,雖然過程磕磕絆絆,但是面試官覺得我思考問題還是挺全面的,潛力比較大,因此最后收到了待遇豐厚的Offer!
逆襲路上的3點體會
為什么我會一直執(zhí)念于要去BAT之類的大型互聯(lián)網(wǎng)公司工作?除了因為薪水誘人,更是因為能有大規(guī)模分布式的技術(shù)可以挑戰(zhàn)。
回首三年來的升級打怪之路,從15年畢業(yè)后,能到成為頂尖互聯(lián)網(wǎng)公司的資深Java開發(fā)工程師,不免感慨良多。如果說讓我給大家分享幾點心得,那以下的3點應(yīng)該是我近兩年來最大的感觸:
跳出舒適圈,找到目標(biāo)是前進的起點。如果你在自己當(dāng)下的工作中無法接觸太多的新技術(shù),可以嘗試多去外面公司面試,這能在一定程度上幫助自己找到學(xué)習(xí)的目標(biāo);
跳槽要趁早,杜絕成為溫水里的青蛙。對于想跳槽到大公司的同學(xué)來說,一定要趁早。因為同樣的水平情況下,大公司更會看中「潛力」—— 年齡越大,潛力越??;
始終保持你的學(xué)習(xí)欲。對于工程師來說,學(xué)習(xí)永無止境。但埋頭苦學(xué)是不夠的,你要注意自己的學(xué)習(xí)一定要有系統(tǒng)性,除了手頭的項目和身邊“大牛”的指導(dǎo)外,看書和網(wǎng)絡(luò)課程是最有效的方法,用少量的金錢換取寶貴的時間,是非常值得的。
如果你依然覺得有些茫然,那么以下的福利很適合你,有自己個人學(xué)習(xí)規(guī)劃的可以忽略,但是期待提升自己技術(shù)棧的也可以看看(文末彩蛋)
針對大型互聯(lián)網(wǎng)企業(yè)所整理出來最適合工程師們學(xué)習(xí)的一套正確方向!
1.阿里巴巴的數(shù)據(jù)庫連接池druid
2.阿里巴巴Dubbo+Zookeeper注冊中心
3.阿里巴巴MyCat分庫分表
4.pushlets推送技術(shù)
5.Linux操作系統(tǒng)下shell編程
6.Redis緩存技術(shù)(session統(tǒng)一管理案例實現(xiàn))
7.引入接口聯(lián)調(diào)過程
8.支付寶和微信支付
9.支付中的掉單處理
10.處理常見超賣問題
11.互聯(lián)網(wǎng)金融項目的撮合業(yè)務(wù)系統(tǒng)
12.互聯(lián)網(wǎng)金融項目的滿標(biāo)審核、散標(biāo)發(fā)布
13.消息隊列ActiveMQ的具體應(yīng)用
14.樂觀鎖、悲觀鎖、分布式鎖
15.接口安全方案
16.集群環(huán)境下的定時任務(wù)
17.分布式文件系統(tǒng)FastDFS
分布式文件系統(tǒng)存儲合同文件
18.NoSQL&MongoDB&Cassandra
19.HttpComponents
21.20FreeMarker/Velocity
22.SpringBoot
23.Log4j2.
24.性能調(diào)優(yōu)
25.JVM調(diào)優(yōu)
26.Java程序性能優(yōu)化
27.Tomcat
28.Mysql
29.Spring IOC
30.Spring AOP
31.Spring MVC
32.Spring 5新特性
33.Mybatis
34.分布式架構(gòu)
35.架構(gòu)核心服務(wù)層技術(shù)
36.架構(gòu)關(guān)鍵技術(shù)設(shè)施
37.分布式消息通訊 異步于MQ
38.分布式緩存
39.Redis
40.Memcached
41.MongoDB
42.數(shù)據(jù)存儲
43.高并發(fā)分流技術(shù)Nginx
44.分布式解決方案
45.微服務(wù)架構(gòu)
46.團隊協(xié)作開發(fā)
性能調(diào)優(yōu)
JVM調(diào)優(yōu)
Java程序性能優(yōu)化
Tomcat
Mysql
應(yīng)用框架源碼解讀
Spring IOC
Spring AOP
Spring MVC
Spring 5新特性
Mybatis
分布式架構(gòu)專題
分布式架構(gòu)思維
架構(gòu)開發(fā)基礎(chǔ)
架構(gòu)核心服務(wù)層技術(shù)
架構(gòu)關(guān)鍵技術(shù)設(shè)施
分布式消息通訊 異步于MQ
分布式緩存
Redis
Memcached
MongoDB
數(shù)據(jù)存儲
高并發(fā)分流技術(shù)Nginx
分布式解決方案
微服務(wù)架構(gòu)
團隊協(xié)作開發(fā)
工程化+框架源碼
性能調(diào)優(yōu)+并發(fā)編程
微服務(wù)專題
分布式框架+項目實戰(zhàn)
如果你對以上知識點能掌握到一定程度那么進入BAT不是什么大問題!
{附}個人總結(jié)收集到的一些面試資料圖以及針對上面技術(shù)錄制的精講進階架構(gòu)視頻資料
想獲取資料學(xué)習(xí)提升自己的可以進我的學(xué)習(xí)交流群:909666042 免費獲??!



