大家都知道,程序員薪資高,高級程序員薪資更高。那么Java程序員月薪如何達到30K,技術水平需要達到什么程度?
有人回答說這只能是大企業(yè)或者互聯(lián)網企業(yè)工程師才能拿到。也許是的,小公司或者非互聯(lián)網企業(yè)拿到30K的不太可能是碼農了,應該已經轉管理。那么,月薪3萬的Java程序員,都有哪些過人的本領?
30K對應的層級分別是什么?
30K的月薪在BAT等一線大廠實在太普遍了,一般是高級工程師和資深工程師的職位,在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,在京東是t3-1,美團是p6左右。
掌握的技能樹主要包含哪幾個方面
第一個是基礎。
比如對集合類,并發(fā)包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過源碼了解底層的設計。比如一般面試都會問ConcurrentHashMap,CopyOnWrite,線程池,CAS,AQS,虛擬機優(yōu)化等知識點,因為這些對互聯(lián)網的企業(yè)是絕對重要的。
而且一般人這關都過不了,還發(fā)鬧騷說這些沒什么用,為什么要面試。舉一例子,在使用線程池時候,因為使用了無界隊列,在遠程服務異常情況下導致內層飆升,怎么去解決?你要是連線程池都不清楚,你怎么去玩?再舉一例,由于對ThreadLocal理解出錯,使用它做線程安全的控制,導致沒能實現(xiàn)真的線程安全。所以作為一個拿三萬的JAVA程序員這點基礎是要有的。
第二你需要有全面的互聯(lián)網主流技術相關知識。
從底層說起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問需要了解到什么程度,我可以給你說個大慨。首先對于MySQL,你要知道常見的參數(shù)設置,存儲引擎怎么去選擇,還需要了解常見的索引引擎,知道怎么去選擇。知道怎么去設計表,怎么優(yōu)化sql,怎么根據執(zhí)行計劃去調優(yōu)。
高級的你需要去做分庫分表的設計和優(yōu)化,一般互聯(lián)網企業(yè)的數(shù)據庫都是讀寫分離,還會垂直與水平拆分,所以這個也有經驗的成分在里面。然后redis,mongodb都是需要了解原理,需要會調整參數(shù)的,而nginx和tomcat幾乎都是Java互聯(lián)網方面必配,其實很阿里的技術棧選擇有點關系。至于rpc相關的就多的去,必須各種網絡協(xié)議,序列化技術,SOA等等你要有一個深入的理解。
現(xiàn)在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜索。至于jms相關的起碼得了解原理吧,一般情況下不是專門開發(fā)中間件系統(tǒng)和支撐系統(tǒng)的不需要了解太多細節(jié),國內企業(yè)常用的主要是activeMQ和kafka。你能對我說的都研究的比較深入,阿里p7都不是太大問題的,當然這個還需要看你的架構能力方面的面試表現(xiàn)了。
第三就是編程能力,編程思想,算法能力,架構能力。
首先30K程序員對算法的要求還是比較低,再高級也最多紅黑樹吧,但是排序和查詢的基本算法得會。編程思想是必須的,問你個AOP和IOC你起碼的清清楚楚,設計模式不說每種都用過,但也能了解個幾種吧。
編程能力這個不好去評價,但是拿一個2000W用戶根據姓名年齡排序這種題目也能信手拈來。最后就是架構能力,這種不是說要你設計個多牛逼多高并發(fā)的系統(tǒng),起碼讓你做一個秒殺系統(tǒng),防重請求的設計能快速搞定而沒有坑吧。
技術的突破需要依賴業(yè)務場景的需求和自身刻意的規(guī)劃學習,二者缺一不可。但前者是機會,往往不是自己能完全把控的,如果在工作中沒有實踐場景,最好的辦法就是系統(tǒng)的學習與梳理,待機會來臨時才能一展身手。
看過以上的專業(yè)技術要求,你終于明白為什么這些程序員可以拿到月薪3萬了吧。你是不是也想成為這樣的程序員?
中軟卓越JAVA全棧課程
中軟卓越JAVA全棧課程根據企業(yè)技術需求設置。課程從基礎開始,循序漸進,緊跟技術發(fā)展。整個課程側重”JAVA企業(yè)級應用“的學習,旨在教學與實戰(zhàn)訓練相結合。
中軟卓越堅持5R教學原則,用真實的工作體驗讓學員提前適應職場。實訓學員在學習期間實訓項目均來自企業(yè)真實項目。