Java程序員月薪2萬需要具備的技術水平,大家可以對號入座,根據自己的現狀不斷學習,向高薪靠近。
一、程序員收入現狀分析
有人回答說這只能是大企業或者互聯網企業工程師才能拿到。也許是的,小公司或者非互聯網企業拿兩萬的不太可能是碼農了,應該已經轉管理。還有區域問題,這個不在我的考慮范圍內,因為除了北上廣深杭,其他地方也很難達到。
還有人提到這個水平不止2w,其實工資是跟面試表現有關的,也跟其他綜合水平有關,比如你是985,top10,或者研究生學歷,也或者懂點node,懂點大數據等等,或者表達能力強,擊中面試官痛點都會加分。
如果你達到我說的水準,起薪就是2w,有其他優秀的表現還會在這個基礎上加分。但純JAVA方面待遇是比較吻合的。還有SSH真的不是我要黑,2w水平的面試幾乎很少問SSH的知識,要問也是問架構層次的還有設計模式的。例如mybatis是如何管理session和cache的。spring里面有哪些你熟悉的設計模式,你怎么理解和應用的。
首先兩萬的月薪在BAT實在太普遍了,一般是高級工程師和資深工程師的職位。在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,京東是t3-1,美團是p6左右,其他的我不了解。這種級別是他們主要碼農層級,加班多,能解決大部分問題,但對系統的整體架構能力和深入分析瓶頸的能力還需要培養。
二、月薪2W技能樹主要有三個方面
1、要有扎實基礎
比如對集合類,并發包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過源碼了解底層的設計。
比如一般面試都會問ConcurrentHashMap,CopyOnWrite,線程池,CAS,AQS,虛擬機優化等知識點,因為這些對互聯網的企業是絕對重要的。而且一般人這關都過不了,還發鬧騷說這些沒什么用,為什么要面試。
舉一例子,在使用線程池時,因為使用了無界隊列,在遠程服務異常情況下導致內層飆升,怎么去解決?你要是連線程池都不清楚,你怎么去玩?再舉一例,由于對ThreadLocal理解出錯,使用它做線程安全的控制,導致沒能實現真的線程安全。所以作為一個拿兩萬的JAVA程序員這點基礎是要有的。
2、你需要有全面的互聯網技術相關知識
從底層說起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問需要了解到什么程度,我可以給你說個大慨。首先對于MySQL,你要知道常見的參數設置,存儲引擎怎么去選擇,還需要了解常見的索引引擎,知道怎么去選擇。知道怎么去設計表,怎么優化sql,怎么根據執行計劃去調優。高級的你需要去做分庫分表的設計和優化,一般互聯網企業的數據庫都是讀寫分離,還會垂直與水平拆分,所以這個也有經驗的成分在里面。
然后redis,mongodb都是需要了解原理,需要會調整參數的,而nginx和tomcat幾乎都是JAVA互聯網方面必配,其實很阿里的技術棧選擇有點關系。至于rpc相關的就多的去,必須各種網絡協議,序列化技術,SOA等等,你要有一個深入的理解。現在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜索。
至于jms相關的起碼得了解原理吧,一般情況下不是專門開發中間件系統和支撐系統的不需要了解太多細節,國內企業常用的主要是activeMQ和kafka。你能對我說的都研究的比較深入,阿里p7都不是太大問題的,當然這個還需要看你的架構能力方面的面試表現了。
3、必備編程能力,編程思想,算法能力,架構能力
首先2W程序員對算法的要求我覺得還是比較低,再高級也最多紅黑樹吧,但是排序和查詢的基本算法得會。編程思想是必須的,問你個AOP和IOC你起碼的清清楚楚,設計模式不說每種都用過,但也能了解個幾種吧。
編程能力這個我覺得不好去評價,但是拿一個2000W用戶根據姓名年齡排序這種題目也能信手拈來。最后就是架構能力,這種不是說要你設計個多牛逼多高并發的系統,起碼讓你做一個秒殺系統,防重請求的設計能快速搞定而沒有坑吧。
這以上就是我說得2w水準,如果你運氣好,面試表現好,3w+也有可能哦
三、能否實現月薪2萬的決定因素
月薪2萬的Java程序員屬于中級程序員。就是技術稍好一點,還做不到架構師級別的。一般來說我給人開2萬的薪水主要取決于以下幾個方面。
1.能否獨立完成項目,以及完成過哪些項目,至少是6+項目。
項目經驗多了,對于需求的理解能力也會好很多。
2.對于自己所做項目用的技術框架,是否足夠清楚,能否回答出來是如何選型的。
并不要求現在能夠去做架構的選型,但是一定要了解自己原有項目的架構體系。
3.是否對行業技術的現狀有足夠多的了解,是否有主動學習的表現。
這是看一個人的視野開闊程度,15K的程序員我不要求這些。20K的程序員必須要讀一些主流的體系,哪怕說出來幾個名詞都可以。
4.處理過的最大的數據量是多少,有沒有超過千萬級的流水。處理過的最大的并發數是多少,TPS能到達多少。
5.是否了解分布式和緩存,RPC框架用過哪些,緩存的失效策略怎么處理。
6.是否能夠快速的解決線上的故障,是否熟悉Bug和線上Bug的緊急修復流程。
7.是否熟悉項目工具,如Jenkins,Nexus,Confluence,wiki,git,svn等項目中常用的東西。
8.是否對性能調優有了解,GC的算法了解到多少。
其實應該是反過來說,就是候選人值多少錢?
補充一句,并沒有說都滿足。而是說至少要有幾項是滿足的。符合的條件越多,可以給出的薪水范圍就越高。
四、總結
總結起來,要達到月薪2萬,需要掌握如下技能:
1.有扎實的Java編程基礎,熟悉各種設計模式,有良好的程序設計能力。
2.熟悉整個軟件開發流程及規范。
3.熟練掌握Spring/Struts/Ibatis以及主流開發框架。
4.熟悉數據庫,比如Mysql、oracle等,并對數據庫事物有深刻理解。
5.擅長使用開源框架,解讀過源碼,掌握實現原理。
6.1-5年開發經驗。
7.學歷能力強,善于總結、思考。
以上的只是月薪20k Java開發崗位的基本技能,針對不同的業務還需要其他技能,比如搜索業務,還需要掌握Lucene、ElasticSearch等技術。