Java程序員月薪2萬需要具備的技術(shù)水平亩冬,大家可以對號入座,根據(jù)自己的現(xiàn)狀不斷學(xué)習(xí)硼身,向高薪靠近硅急。
一覆享、程序員收入現(xiàn)狀分析
有人回答說這只能是大企業(yè)或者互聯(lián)網(wǎng)企業(yè)工程師才能拿到。也許是的营袜,小公司或者非互聯(lián)網(wǎng)企業(yè)拿兩萬的不太可能是碼農(nóng)了撒顿,應(yīng)該已經(jīng)轉(zhuǎn)管理。還有區(qū)域問題连茧,這個不在我的考慮范圍內(nèi)核蘸,因為除了北上廣深杭巍糯,其他地方也很難達到啸驯。
還有人提到這個水平不止2w,其實工資是跟面試表現(xiàn)有關(guān)的祟峦,也跟其他綜合水平有關(guān)罚斗,比如你是985,top10宅楞,或者研究生學(xué)歷针姿,也或者懂點node,懂點大數(shù)據(jù)等等厌衙,或者表達能力強距淫,擊中面試官痛點都會加分。
如果你達到我說的水準(zhǔn)婶希,起薪就是2w榕暇,有其他優(yōu)秀的表現(xiàn)還會在這個基礎(chǔ)上加分。但純JAVA方面待遇是比較吻合的喻杈。還有SSH真的不是我要黑彤枢,2w水平的面試幾乎很少問SSH的知識,要問也是問架構(gòu)層次的還有設(shè)計模式的筒饰。例如mybatis是如何管理session和cache的缴啡。spring里面有哪些你熟悉的設(shè)計模式,你怎么理解和應(yīng)用的瓷们。
首先兩萬的月薪在BAT實在太普遍了业栅,一般是高級工程師和資深工程師的職位。在阿里是p6~p7左右谬晕,在百度是t5左右碘裕,騰訊是t2-3左右,京東是t3-1固蚤,美團是p6左右娘汞,其他的我不了解。這種級別是他們主要碼農(nóng)層級夕玩,加班多你弦,能解決大部分問題惊豺,但對系統(tǒng)的整體架構(gòu)能力和深入分析瓶頸的能力還需要培養(yǎng)。
二禽作、月薪2W技能樹主要有三個方面
1尸昧、要有扎實基礎(chǔ)
比如對集合類,并發(fā)包旷偿,IO/NIO烹俗,JVM,內(nèi)存模型萍程,泛型幢妄,異常,反射茫负,等有深入了解蕉鸳,最好是看過源碼了解底層的設(shè)計。
比如一般面試都會問ConcurrentHashMap忍法,CopyOnWrite潮尝,線程池,CAS饿序,AQS勉失,虛擬機優(yōu)化等知識點,因為這些對互聯(lián)網(wǎng)的企業(yè)是絕對重要的原探。而且一般人這關(guān)都過不了乱凿,還發(fā)鬧騷說這些沒什么用,為什么要面試踢匣。
舉一例子告匠,在使用線程池時,因為使用了無界隊列离唬,在遠程服務(wù)異常情況下導(dǎo)致內(nèi)層飆升后专,怎么去解決?你要是連線程池都不清楚输莺,你怎么去玩戚哎?再舉一例,由于對ThreadLocal理解出錯嫂用,使用它做線程安全的控制型凳,導(dǎo)致沒能實現(xiàn)真的線程安全。所以作為一個拿兩萬的JAVA程序員這點基礎(chǔ)是要有的嘱函。
2甘畅、你需要有全面的互聯(lián)網(wǎng)技術(shù)相關(guān)知識
從底層說起,你起碼得深入了解mysql,redis疏唾,mongodb蓄氧,nginx,tomcat槐脏,rpc喉童,jms等方面的知識。你要問需要了解到什么程度顿天,我可以給你說個大慨堂氯。首先對于MySQL,你要知道常見的參數(shù)設(shè)置牌废,存儲引擎怎么去選擇咽白,還需要了解常見的索引引擎,知道怎么去選擇畔规。知道怎么去設(shè)計表局扶,怎么優(yōu)化sql恨统,怎么根據(jù)執(zhí)行計劃去調(diào)優(yōu)叁扫。高級的你需要去做分庫分表的設(shè)計和優(yōu)化,一般互聯(lián)網(wǎng)企業(yè)的數(shù)據(jù)庫都是讀寫分離畜埋,還會垂直與水平拆分莫绣,所以這個也有經(jīng)驗的成分在里面。
然后redis悠鞍,mongodb都是需要了解原理对室,需要會調(diào)整參數(shù)的,而nginx和tomcat幾乎都是JAVA互聯(lián)網(wǎng)方面必配咖祭,其實很阿里的技術(shù)棧選擇有點關(guān)系掩宜。至于rpc相關(guān)的就多的去,必須各種網(wǎng)絡(luò)協(xié)議么翰,序列化技術(shù)牺汤,SOA等等,你要有一個深入的理解『葡樱現(xiàn)在應(yīng)用比較廣的rpc框架檐迟,在國內(nèi)就是dubbo了,可以自行搜索码耐。
至于jms相關(guān)的起碼得了解原理吧追迟,一般情況下不是專門開發(fā)中間件系統(tǒng)和支撐系統(tǒng)的不需要了解太多細節(jié),國內(nèi)企業(yè)常用的主要是activeMQ和kafka骚腥。你能對我說的都研究的比較深入敦间,阿里p7都不是太大問題的,當(dāng)然這個還需要看你的架構(gòu)能力方面的面試表現(xiàn)了。
3廓块、必備編程能力金闽,編程思想,算法能力剿骨,架構(gòu)能力
首先2W程序員對算法的要求我覺得還是比較低代芜,再高級也最多紅黑樹吧,但是排序和查詢的基本算法得會浓利。編程思想是必須的挤庇,問你個AOP和IOC你起碼的清清楚楚,設(shè)計模式不說每種都用過贷掖,但也能了解個幾種吧嫡秕。
編程能力這個我覺得不好去評價,但是拿一個2000W用戶根據(jù)姓名年齡排序這種題目也能信手拈來苹威。最后就是架構(gòu)能力昆咽,這種不是說要你設(shè)計個多牛逼多高并發(fā)的系統(tǒng),起碼讓你做一個秒殺系統(tǒng)牙甫,防重請求的設(shè)計能快速搞定而沒有坑吧掷酗。
這以上就是我說得2w水準(zhǔn),如果你運氣好窟哺,面試表現(xiàn)好泻轰,3w+也有可能哦
三、能否實現(xiàn)月薪2萬的決定因素
月薪2萬的Java程序員屬于中級程序員且轨。就是技術(shù)稍好一點浮声,還做不到架構(gòu)師級別的。一般來說我給人開2萬的薪水主要取決于以下幾個方面旋奢。
1.能否獨立完成項目泳挥,以及完成過哪些項目,至少是6+項目至朗。
項目經(jīng)驗多了屉符,對于需求的理解能力也會好很多。
2.對于自己所做項目用的技術(shù)框架爽丹,是否足夠清楚筑煮,能否回答出來是如何選型的。
并不要求現(xiàn)在能夠去做架構(gòu)的選型粤蝎,但是一定要了解自己原有項目的架構(gòu)體系真仲。
3.是否對行業(yè)技術(shù)的現(xiàn)狀有足夠多的了解,是否有主動學(xué)習(xí)的表現(xiàn)初澎。
這是看一個人的視野開闊程度秸应,15K的程序員我不要求這些虑凛。20K的程序員必須要讀一些主流的體系,哪怕說出來幾個名詞都可以软啼。
4.處理過的最大的數(shù)據(jù)量是多少桑谍,有沒有超過千萬級的流水。處理過的最大的并發(fā)數(shù)是多少祸挪,TPS能到達多少锣披。
5.是否了解分布式和緩存,RPC框架用過哪些贿条,緩存的失效策略怎么處理雹仿。
6.是否能夠快速的解決線上的故障,是否熟悉Bug和線上Bug的緊急修復(fù)流程整以。
7.是否熟悉項目工具胧辽,如Jenkins滑臊,Nexus煎源,Confluence账忘,wiki振愿,git,svn等項目中常用的東西爽醋。
8.是否對性能調(diào)優(yōu)有了解披泪,GC的算法了解到多少剩瓶。
其實應(yīng)該是反過來說番刊,就是候選人值多少錢?
補充一句含鳞,并沒有說都滿足。而是說至少要有幾項是滿足的芹务。符合的條件越多,可以給出的薪水范圍就越高鸭廷。
四枣抱、總結(jié)
總結(jié)起來,要達到月薪2萬辆床,需要掌握如下技能:
1.有扎實的Java編程基礎(chǔ)佳晶,熟悉各種設(shè)計模式,有良好的程序設(shè)計能力讼载。
2.熟悉整個軟件開發(fā)流程及規(guī)范轿秧。
3.熟練掌握Spring/Struts/Ibatis以及主流開發(fā)框架。
4.熟悉數(shù)據(jù)庫咨堤,比如Mysql菇篡、oracle等,并對數(shù)據(jù)庫事物有深刻理解一喘。
5.擅長使用開源框架驱还,解讀過源碼,掌握實現(xiàn)原理。
6.1-5年開發(fā)經(jīng)驗议蟆。
7.學(xué)歷能力強闷沥,善于總結(jié)、思考咐容。
以上的只是月薪20k Java開發(fā)崗位的基本技能舆逃,針對不同的業(yè)務(wù)還需要其他技能,比如搜索業(yè)務(wù)戳粒,還需要掌握Lucene颖侄、ElasticSearch等技術(shù)。