Java程序员进阶的 3 个层次,你处于哪个?
在這個(gè)互聯(lián)網(wǎng)動(dòng)輒上億流量級(jí)別的時(shí)代,Java作為后端服務(wù)使用最廣泛的語(yǔ)言,誕生了一批又一批的新框架,包括HBase、Hadoop、MQ、Netty、SpringCloud等等 。
一些獨(dú)角獸公司以及BAT等知名大廠對(duì)Java人才的需求量連年升級(jí),但與此同時(shí)對(duì)人才的要求也越來(lái)越高。面試官經(jīng)常會(huì)考察如下問(wèn)題:
聊一聊你對(duì)JVM的原理,如何減少Full?GC的情況?
針對(duì)高并發(fā)場(chǎng)景,如何優(yōu)化,都采用了什么技術(shù)?
相比關(guān)系型數(shù)據(jù)庫(kù),NoSQL的優(yōu)勢(shì)在哪里,你們?cè)谑裁磮?chǎng)景下會(huì)用到?
可以看到,對(duì)于有2~5年工作經(jīng)驗(yàn)的同學(xué),更注重的是一些項(xiàng)目有深入的實(shí)戰(zhàn)經(jīng)驗(yàn)。但很多同學(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ù)上的突破。
以工作前5年的規(guī)劃為例,至少需要突破三個(gè)層次:
Part.1?對(duì)代碼精益求精
最開始工作的時(shí)候,我們會(huì)抱怨業(yè)務(wù)需求對(duì)技術(shù)沒(méi)挑戰(zhàn),覺(jué)得在學(xué)校學(xué)到的這么多知識(shí)卻沒(méi)有用武之地。
實(shí)質(zhì)上這是忽略了技術(shù)開發(fā)的本質(zhì),技術(shù)開發(fā)是一個(gè)工程項(xiàng)目,而工程項(xiàng)目的落地最重要的就是細(xì)節(jié)控制,也就是代碼的品質(zhì),比如:
代碼是否遵循了規(guī)約?接口設(shè)計(jì)的是否隨意?測(cè)試用例是否都通過(guò)?
滿屏的if-else是否可以用合理的設(shè)計(jì)模式來(lái)替代?有沒(méi)有遵循SOLID原則,KISS原則?
有沒(méi)有考慮用更合理的數(shù)據(jù)結(jié)構(gòu)和算法改變代碼的復(fù)雜性,提升運(yùn)行的性能?
代碼出bug的概率有多大,能否降低?
這是程序員的立足之本,基本是工作1年左右要達(dá)到的。在這一階段看書是比較好的提升方式,比如:《Java編程思想》、《effective java》等。但要注意的是,在看書的過(guò)程中一定要思考能否運(yùn)用書中的經(jīng)驗(yàn)來(lái)改善自己寫的代碼,運(yùn)用到實(shí)處,比如看到final和static,想想自己代碼中用的是否合理。
此外,還可以看些常用的開源框架,如果你用的是Spring框架等,那么下面一個(gè)很好的知識(shí)結(jié)構(gòu):
?
Part.2?跳出來(lái),主動(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ù)解決該問(wèn)題。
如何解決這個(gè)問(wèn)題?除了尋找更大規(guī)模的業(yè)務(wù)外,要時(shí)刻保持時(shí)刻跳出當(dāng)前層級(jí)和環(huán)境來(lái)思考的習(xí)慣。比如,你只用了關(guān)系型數(shù)據(jù)庫(kù),那么有沒(méi)有想過(guò)數(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ì)有一覽眾山小的感覺(jué)。
在工作的2~3年時(shí)間內(nèi)達(dá)到這個(gè)水平,30w的年薪就離你不遠(yuǎn)了。如果你對(duì)高并發(fā)和分布式技術(shù)感興趣,那么下面一幅圖會(huì)有幫助:
?
Part.3?不去造輪子,前提是得知道輪子的內(nèi)部結(jié)構(gòu)
如果說(shuō),第二步是增加你的知識(shí)廣度,那么造輪子就是增加你的技術(shù)深度,通過(guò)造輪子,才能真正把握技術(shù)的來(lái)龍去脈。
很多人信奉“不去造輪子”,看似性價(jià)比很高的一句話,卻不知道這句話是有前提的,那就是“你得知道輪子的內(nèi)部結(jié)構(gòu)”,否則就是自我麻痹。接下來(lái)需要選擇某一個(gè)或幾個(gè)方面深入研究下去,構(gòu)建自己的核心競(jìng)爭(zhēng)力。
比如,消息隊(duì)列在高并發(fā)分布式系統(tǒng)中一個(gè)及其重要的組件,起到削峰填谷、系統(tǒng)解耦的作用。我們以消費(fèi)端如何快速獲取數(shù)據(jù)來(lái)看思維是如何一步步深入的:
首先消費(fèi)端要想及時(shí)獲取數(shù)據(jù),是否需要建立一個(gè)長(zhǎng)連接?長(zhǎng)連接的實(shí)現(xiàn)方式如何?
數(shù)據(jù)是通過(guò)push還是pull方式給到消費(fèi)端,各自有什么弊端?
如果消費(fèi)失敗,可能是哪些原因引起?如果是因?yàn)榫W(wǎng)絡(luò)原因引起,該如何解決?
這些問(wèn)題都會(huì)在你自己造輪子的過(guò)程中暴露出來(lái),從而加深你的理解和技術(shù)深度,一個(gè)有技術(shù)深度的程序員才是有靈魂的。而大廠也是愿意為有趣的靈魂買單的,這個(gè)時(shí)候看的就不僅僅是工資水平,更多的是在于晉升和發(fā)展前景的廣闊性。
在Java語(yǔ)言上有所建樹的開發(fā)者,都經(jīng)歷過(guò)以上3個(gè)層次。但可惜的是,囿于外界環(huán)境和自身設(shè)限,大部分的Java開發(fā)者卻只停留在了第一個(gè)層次中,在日復(fù)一日的體力勞動(dòng)中喪失了對(duì)技術(shù)細(xì)節(jié)的深入探討,也喪失了晉升和薪資談判中的籌碼。
如何過(guò)渡到第二、三個(gè)層次?除了上文談到的內(nèi)容,這里我還想給你2個(gè)切身的建議:
1、擴(kuò)寬自己的眼界,學(xué)著從全局看待問(wèn)題,并且勇于挑戰(zhàn)別人眼中的難題
2、持續(xù)提升你的學(xué)習(xí)能力,雖然有很多人以「在公司學(xué)不到東西」為理由離職,但你要知道:公司的目的是盈利。盈利的前提下,公司會(huì)盡力培養(yǎng)你,但是更多的時(shí)候能力成長(zhǎng)還是得靠自己。學(xué)習(xí)能力弱的人,在哪里都沒(méi)用。
如果你依然覺(jué)得有些茫然,不如跟有多年Java開發(fā)經(jīng)驗(yàn)的資深工程師聊一聊。
總結(jié)
以上是生活随笔為你收集整理的Java程序员进阶的 3 个层次,你处于哪个?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软件开发中的开源协议详解!
- 下一篇: 从员工的离职时间,就能看出离职原因