在這個(gè)IT系統(tǒng)動(dòng)輒就是上億流量的時(shí)代惠拭,Java作為大數(shù)據(jù)時(shí)代應(yīng)用最廣泛的語言,誕生了一批又一批的新技術(shù)江滨,包括HBase铛纬、Hadoop、MQ唬滑、Netty告唆、SpringCloud等等 。
一些獨(dú)角獸公司以及騰訊晶密、阿里擒悬、百度、網(wǎng)易等知名大廠對(duì)Java人才的需求量連年升級(jí)稻艰,有2年工作經(jīng)驗(yàn)的優(yōu)秀程序員能輕松達(dá)到30w+的水平懂牧,但與此同時(shí)對(duì)人才的要求也越來越高。
比如尊勿,大廠的面試官經(jīng)常會(huì)以如下句式來詢問:
聊一聊你對(duì)JVM的原理僧凤,如何減少Full GC的情況?
針對(duì)高并發(fā)場(chǎng)景元扔,如何優(yōu)化躯保,都采用了什么技術(shù)?
相比關(guān)系型數(shù)據(jù)庫澎语,NoSQL的優(yōu)勢(shì)在哪里途事,你們?cè)谑裁磮?chǎng)景下會(huì)用到验懊?
可以看到,對(duì)于社招同學(xué)而言(特別是有2~5年工作經(jīng)驗(yàn)的同學(xué))盯孙,不僅僅會(huì)問一些編程語言鲁森、設(shè)計(jì)模式等基礎(chǔ)問題,還要對(duì)一些項(xiàng)目有深入的實(shí)戰(zhàn)經(jīng)驗(yàn)振惰。
但現(xiàn)實(shí)卻是,很多同學(xué)在技術(shù)生涯最初幾年都會(huì)沉浸在業(yè)務(wù)開發(fā)中垄懂,忽視了對(duì)系統(tǒng)知識(shí)的梳理和技術(shù)視野的擴(kuò)展骑晶。日復(fù)一日,導(dǎo)致很多同學(xué)就以為這就是技術(shù)的全部草慧,同時(shí)在重復(fù)的體力勞動(dòng)中也喪失了對(duì)技術(shù)細(xì)節(jié)的深入探討桶蛔。
每個(gè)程序員都追求“成就感”,而獲得成就感最好的方式就是自己在技術(shù)上的突破漫谷。
技術(shù)的突破需要依賴業(yè)務(wù)場(chǎng)景的需求和自身刻意的規(guī)劃學(xué)習(xí)仔雷,二者缺一不可,但前者是機(jī)會(huì)舔示,往往不是自己能完全把控的碟婆,如果在自己工作中沒有實(shí)踐場(chǎng)景,最好的辦法就是系統(tǒng)的學(xué)習(xí)與梳理惕稻,為自己制定一個(gè)不同時(shí)間段的發(fā)展道路竖共,待機(jī)會(huì)來臨時(shí)就能一展身手。
以工作前5年的規(guī)劃為例俺祠,至少需要突破三個(gè)層次:
對(duì)代碼精益求精
最開始工作的時(shí)候公给,我們會(huì)抱怨業(yè)務(wù)需求對(duì)技術(shù)沒挑戰(zhàn),覺得在學(xué)校學(xué)到的這么多知識(shí)卻沒有用武之地蜘渣。
實(shí)質(zhì)上這是忽略了技術(shù)開發(fā)的本質(zhì)淌铐,技術(shù)開發(fā)是一個(gè)工程項(xiàng)目,而工程項(xiàng)目的落地最重要的就是細(xì)節(jié)控制蔫缸,也就是代碼的品質(zhì)腿准,比如:
代碼是否遵循了規(guī)約?接口設(shè)計(jì)的是否隨意捂龄?測(cè)試用例是否都通過释涛?
滿屏的if-else是否可以用合理的設(shè)計(jì)模式來替代?有沒有遵循SOLID原則倦沧,KISS原則唇撬?
有沒有考慮用更合理的數(shù)據(jù)結(jié)構(gòu)和算法改變代碼的復(fù)雜性,提升運(yùn)行的性能展融?
代碼出bug的概率有多大窖认,能否降低?
這是程序員的立足之本,基本是工作1年左右要達(dá)到的扑浸。在這一階段看書是比較好的提升方式烧给,比如:《Java編程思想》、《effective java》等喝噪。但要注意的是础嫡,在看書的過程中一定要思考能否運(yùn)用書中的經(jīng)驗(yàn)來改善自己寫的代碼,運(yùn)用到實(shí)處酝惧,比如看到final和static榴鼎,想想自己代碼中用的是否合理。
此外晚唇,還可以看些常用的開源框架巫财,如果你用的是Spring框架等,那么下面一個(gè)很好的知識(shí)結(jié)構(gòu):
跳出來哩陕,主動(dòng)了解技術(shù)全貌
在將基礎(chǔ)打牢之后平项,需要主動(dòng)突破舒適區(qū),不斷的去擴(kuò)大自己的技術(shù)視野悍及,做到有廣度闽瓢。
這一步比較難,因?yàn)楹芏嗤瑢W(xué)會(huì)被公司的技術(shù)和業(yè)務(wù)牽著走并鸵,比如公司當(dāng)前的業(yè)務(wù)規(guī)模決定了技術(shù)上不需要分布式技術(shù)鸳粉,那么很多同學(xué)就不會(huì)去思考如果規(guī)模大了之后,如何利用分布式技術(shù)解決該問題园担。
如何解決這個(gè)問題届谈?除了尋找更大規(guī)模的業(yè)務(wù)外弯汰,要時(shí)刻保持時(shí)刻跳出當(dāng)前層級(jí)和環(huán)境來思考的習(xí)慣艰山。比如,你只用了關(guān)系型數(shù)據(jù)庫咏闪,那么有沒有想過數(shù)據(jù)一直產(chǎn)生曙搬,到達(dá)TB級(jí)別的時(shí)候該如何快速檢索與保存呢?
此外鸽嫂,技術(shù)的全貌還包括各種技術(shù)之間的關(guān)系纵装,你用了Dubbo,那么Duboo和Netty是什么關(guān)系据某,為什么會(huì)用到Zookeeper呢橡娄,和Spring Cloud又是什么關(guān)系?如果能在學(xué)習(xí)新技術(shù)的時(shí)候癣籽,將繁雜的技術(shù)關(guān)系理順挽唉,會(huì)有一覽眾山小的感覺滤祖。
在工作的2~3年時(shí)間內(nèi)達(dá)到這個(gè)水平,30w的年薪就離你不遠(yuǎn)了瓶籽。如果你對(duì)高并發(fā)和分布式技術(shù)感興趣匠童,那么下面一幅圖會(huì)有幫助:
不去造輪子,
前提是得知道輪子的內(nèi)部結(jié)構(gòu)
如果說塑顺,第二步是增加你的知識(shí)廣度汤求,那么造輪子就是增加你的技術(shù)深度,通過造輪子严拒,才能真正把握技術(shù)的來龍去脈首昔。
很多人信奉“不去造輪子”,看似性價(jià)比很高的一句話糙俗,卻不知道這句話是有前提的,那就是“你得知道輪子的內(nèi)部結(jié)構(gòu)”预鬓,否則就是自我麻痹巧骚。接下來需要選擇某一個(gè)或幾個(gè)方面深入研究下去,構(gòu)建自己的核心競爭力格二。
比如劈彪,消息隊(duì)列在高并發(fā)分布式系統(tǒng)中一個(gè)及其重要的組件,起到削峰填谷顶猜、系統(tǒng)解耦的作用沧奴。我們以消費(fèi)端如何快速獲取數(shù)據(jù)來看思維是如何一步步深入的:
首先消費(fèi)端要想及時(shí)獲取數(shù)據(jù),是否需要建立一個(gè)長連接长窄?長連接的實(shí)現(xiàn)方式如何滔吠?
數(shù)據(jù)是通過push還是pull方式給到消費(fèi)端,各自有什么弊端挠日?
如果消費(fèi)失敗疮绷,可能是哪些原因引起?如果是因?yàn)榫W(wǎng)絡(luò)原因引起嚣潜,該如何解決?
這些問題都會(huì)在你自己造輪子的過程中暴露出來,從而加深你的理解和技術(shù)深度慌洪,一個(gè)有技術(shù)深度的程序員才是有靈魂的株憾。而大廠也是愿意為有趣的靈魂買單的,這個(gè)時(shí)候看的就不僅僅是工資水平计技,更多的是在于晉升和發(fā)展前景的廣闊性喜德。
在Java語言上有所建樹的開發(fā)者,都經(jīng)歷過以上3個(gè)層次酸役。但可惜的是住诸,囿于外界環(huán)境和自身設(shè)限驾胆,大部分的Java開發(fā)者卻只停留在了第一個(gè)層次中,在日復(fù)一日的體力勞動(dòng)中喪失了對(duì)技術(shù)細(xì)節(jié)的深入探討贱呐,也喪失了晉升和薪資談判中的籌碼丧诺。
如何過渡到第二、三個(gè)層次奄薇?除了上文談到的內(nèi)容驳阎,這里我還想給你2個(gè)切身的建議:
1、擴(kuò)寬自己的眼界馁蒂,學(xué)著從全局看待問題呵晚,并且勇于挑戰(zhàn)別人眼中的難題
2、持續(xù)提升你的學(xué)習(xí)能力沫屡,雖然有很多人以「在公司學(xué)不到東西」為理由離職饵隙,但你要知道:公司的目的是盈利。盈利的前提下沮脖,公司會(huì)盡力培養(yǎng)你金矛,但是更多的時(shí)候能力成長還是得靠自己。學(xué)習(xí)能力弱的人勺届,在哪里都沒用驶俊。
掌握精通以下技術(shù)知識(shí)點(diǎn)年薪50W不是小kiss?
項(xiàng)目實(shí)戰(zhàn)
高性能架構(gòu)
架構(gòu)師筑基
開源框架
設(shè)計(jì)模式
團(tuán)隊(duì)開發(fā)
微服務(wù)架構(gòu)
如果你依然覺得有些茫然免姿,不如跟有十余年Java開發(fā)經(jīng)驗(yàn)的資深工程師聊一聊饼酿。
架構(gòu)資料
架構(gòu)資料
歡迎工作一到五年的Java工程師朋友們加入架構(gòu)華山論劍【836442475點(diǎn)擊進(jìn)入】(大牛聚集地)一起交流學(xué)習(xí)探討!
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用胚膊、高并發(fā)故俐、高性能及分布式、Jvm性能調(diào)優(yōu)澜掩、Spring源碼购披,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己肩榕,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰刚陡!趁年輕,使勁拼株汉,給未來的自己一個(gè)交代筐乳!