北上广Java开发月薪20K往上,该如何做,需要会写什么
有人回答說(shuō)這只能是大企業(yè)或者互聯(lián)網(wǎng)企業(yè)工程師才能拿到。也許是的,小公司或者非互聯(lián)網(wǎng)企業(yè)拿兩萬(wàn)的不太可能是碼農(nóng)了,應(yīng)該已經(jīng)轉(zhuǎn)管理。還有區(qū)域問(wèn)題,這個(gè)不在我的考慮范圍內(nèi),因?yàn)槌吮鄙蠌V深杭,其他地方也很難達(dá)到。
還有人提到這個(gè)水平不止2w,其實(shí)工資是跟面試表現(xiàn)有關(guān)的,也跟其他綜合水平有關(guān),比如你是985,top10,或者研究生學(xué)歷,也或者懂點(diǎn)node,懂點(diǎn)大數(shù)據(jù)等等,或者表達(dá)能力強(qiáng),擊中面試官痛點(diǎn)都會(huì)加分。如果你達(dá)到我說(shuō)的水準(zhǔn),起薪就是2w,有其他優(yōu)秀的表現(xiàn)還會(huì)在這個(gè)基礎(chǔ)上加分。但純JAVA方面待遇是比較吻合的。還有SSH真的不是我要黑,2w水平的面試幾乎很少問(wèn)SSH的知識(shí),要問(wèn)也是問(wèn)架構(gòu)層次的還有設(shè)計(jì)模式的。例如mybatis是如何管理session和cache的。spring里面有哪些你熟悉的設(shè)計(jì)模式,你怎么理解和應(yīng)用的。
首先兩萬(wàn)的月薪在BAT實(shí)在太普遍了,一般是高級(jí)工程師和資深工程師的職位。在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,京東是t3-1,美團(tuán)是p6左右,其他的我不了解。這種級(jí)別是他們主要碼農(nóng)層級(jí),加班多,能解決大部分問(wèn)題,但對(duì)系統(tǒng)的整體架構(gòu)能力和深入分析瓶頸的能力還需要培養(yǎng)。
其次掌握的技能樹(shù)主要有三個(gè)方面:
第一個(gè)是基礎(chǔ)。比如對(duì)集合類(lèi),并發(fā)包,IO/NIO,JVM,內(nèi)存模型,泛型,異常,反射,等有深入了解,最好是看過(guò)源碼了解底層的設(shè)計(jì)。比如一般面試都會(huì)問(wèn)ConcurrentHashMap,CopyOnWrite,線(xiàn)程池,CAS,AQS,虛擬機(jī)優(yōu)化等知識(shí)點(diǎn),因?yàn)檫@些對(duì)互聯(lián)網(wǎng)的企業(yè)是絕對(duì)重要的。而且一般人這關(guān)都過(guò)不了,還發(fā)鬧騷說(shuō)這些沒(méi)什么用,為什么要面試。舉一例子,在使用線(xiàn)程池時(shí),因?yàn)槭褂昧藷o(wú)界隊(duì)列,在遠(yuǎn)程服務(wù)異常情況下導(dǎo)致內(nèi)層飆升,怎么去解決?你要是連線(xiàn)程池都不清楚,你怎么去玩?再舉一例,由于對(duì)ThreadLocal理解出錯(cuò),使用它做線(xiàn)程安全的控制,導(dǎo)致沒(méi)能實(shí)現(xiàn)真的線(xiàn)程安全。所以作為一個(gè)拿兩萬(wàn)的JAVA程序員這點(diǎn)基礎(chǔ)是要有的。
第二你需要有全面的互聯(lián)網(wǎng)技術(shù)相關(guān)知識(shí)。從底層說(shuō)起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識(shí)。你要問(wèn)需要了解到什么程度,我可以給你說(shuō)個(gè)大慨。首先對(duì)于MySQL,你要知道常見(jiàn)的參數(shù)設(shè)置,存儲(chǔ)引擎怎么去選擇,還需要了解常見(jiàn)的索引引擎,知道怎么去選擇。知道怎么去設(shè)計(jì)表,怎么優(yōu)化sql,怎么根據(jù)執(zhí)行計(jì)劃去調(diào)優(yōu)。高級(jí)的你需要去做分庫(kù)分表的設(shè)計(jì)和優(yōu)化,一般互聯(lián)網(wǎng)企業(yè)的數(shù)據(jù)庫(kù)都是讀寫(xiě)分離,還會(huì)垂直與水平拆分,所以這個(gè)也有經(jīng)驗(yàn)的成分在里面。然后redis,mongodb都是需要了解原理,需要會(huì)調(diào)整參數(shù)的,而nginx和tomcat幾乎都是JAVA互聯(lián)網(wǎng)方面必配,其實(shí)很阿里的技術(shù)棧選擇有點(diǎn)關(guān)系。至于rpc相關(guān)的就多的去,必須各種網(wǎng)絡(luò)協(xié)議,序列化技術(shù),SOA等等,你要有一個(gè)深入的理解。現(xiàn)在應(yīng)用比較廣的rpc框架,在國(guó)內(nèi)就是dubbo了,可以自行搜索。至于jms相關(guān)的起碼得了解原理吧,一般情況下不是專(zhuān)門(mén)開(kāi)發(fā)中間件系統(tǒng)和支撐系統(tǒng)的不需要了解太多細(xì)節(jié),國(guó)內(nèi)企業(yè)常用的主要是activeMQ和kafka。你能對(duì)我說(shuō)的都研究的比較深入,阿里p7都不是太大問(wèn)題的,當(dāng)然這個(gè)還需要看你的架構(gòu)能力方面的面試表現(xiàn)了。
第三就是編程能力,編程思想,算法能力,架構(gòu)能力。首先2W程序員對(duì)算法的要求我覺(jué)得還是比較低,再高級(jí)也最多紅黑樹(shù)吧,但是排序和查詢(xún)的基本算法得會(huì)。編程思想是必須的,問(wèn)你個(gè)AOP和IOC你起碼的清清楚楚,設(shè)計(jì)模式不說(shuō)每種都用過(guò),但也能了解個(gè)幾種吧。編程能力這個(gè)我覺(jué)得不好去評(píng)價(jià),但是拿一個(gè)2000W用戶(hù)根據(jù)姓名年齡排序這種題目也能信手拈來(lái)。最后就是架構(gòu)能力,這種不是說(shuō)要你設(shè)計(jì)個(gè)多牛逼多高并發(fā)的系統(tǒng),起碼讓你做一個(gè)秒殺系統(tǒng),防重請(qǐng)求的設(shè)計(jì)能快速搞定而沒(méi)有坑吧。
這以上就是我說(shuō)得2w水準(zhǔn),如果你運(yùn)氣好,面試表現(xiàn)好,3w+也有可能哦(?ω?)
來(lái)來(lái)來(lái),我們上招聘網(wǎng)站實(shí)際找?guī)讉€(gè)月薪超過(guò)2w的JD來(lái)看下。
阿里巴巴
分析:
1. “NIO”->老老實(shí)實(shí)研究一下netty的源碼和原理,保證他問(wèn)不倒你;“類(lèi)加載原理”->老生常談了,記得一個(gè)delegate,一個(gè)classloader如何造成內(nèi)存泄漏就行;“動(dòng)態(tài)代理、CGLIB”->肯定是問(wèn)你如何生成proxy類(lèi),兩者有啥異同。找?guī)灼┛蛠?lái)看看就行。另外,我估計(jì)很大程度是需要你結(jié)合spring來(lái)回答,因此還是看看spring的aop吧;“GC的原理”->這個(gè)就厲害了,GC有好多種,到底是哪種的原理啊?但是以我身為一名老年程序猿來(lái)告訴你,好好看一下CMS GC和G1 GC就行。CMS答好了肯定是OK的,G1純粹是錦上添花,給面試官留個(gè)追求技術(shù)的印象吧;“JVM內(nèi)存模型”->JVM怎么還有內(nèi)存模型?是Java語(yǔ)言的內(nèi)存模型吧?沒(méi)什么好說(shuō)的,看Java語(yǔ)言規(guī)范吧;“性能優(yōu)化手段”->胡侃吧,朝著怎么改進(jìn)鎖,怎么異步,怎么利用緩存,怎么選擇合適的GC算法,怎么調(diào)整Hotspot VM的各generation比例,blabla(此處應(yīng)有嘔吐的表情,這種問(wèn)題最煩了,你要是底氣足,頂一句“具體問(wèn)題具體分析”,我敬你是一條漢子)
2. “了解并發(fā)基礎(chǔ)變成最優(yōu)”->看不懂,估計(jì)應(yīng)該是“了解并發(fā)基礎(chǔ)編程最優(yōu)”,JD都有錯(cuò)別字,很不專(zhuān)業(yè)。并發(fā)這種東西,好好看一下java.util.concurrent包里的類(lèi)。
3. “具備開(kāi)發(fā)實(shí)戰(zhàn)技能,可以熟練使用Eclipse、Idea、熟悉常見(jiàn)的調(diào)試方法及技巧、ant/svn/maven,有疑難雜癥的排查經(jīng)驗(yàn)”->工作一段時(shí)間都會(huì)吧?ant和svn完全不夠酷,看得出來(lái)要么阿里的人比較守舊(或者懶),要么阿里的技術(shù)很老土。
4. blabla
總結(jié)一下,阿里的要求總體比美團(tuán)低,但是給的工資比美團(tuán)高(僅限這兩個(gè)JD的比較!特地加粗)。那么問(wèn)題來(lái)了,到底是美團(tuán)裝逼,高要求招人,低要求做事;還是阿里sb,低要求招人,高標(biāo)準(zhǔn)給工資?當(dāng)然還有一個(gè)可能,就是貼這個(gè)JD的hr是sb。總的來(lái)說(shuō),能拿到美團(tuán)的offer,肯定能拿到阿里的offer。因此優(yōu)質(zhì)騷年應(yīng)該以美團(tuán)的標(biāo)準(zhǔn)來(lái)要求自己(認(rèn)真臉)。
美團(tuán)
分析:
1. 計(jì)算機(jī)專(zhuān)業(yè)基本功和寫(xiě)代碼能力是廢話(huà),太主觀(guān)。我們先放著,一會(huì)再回來(lái)review。
2. “熟練掌握 Java 及面向?qū)ο笤O(shè)計(jì)開(kāi)發(fā)”=>工作一年以上;“對(duì)部分 Java 技術(shù)有深入研究”=>熟練IO的各種姿勢(shì),或者研究過(guò)Java內(nèi)存模型,有此二者在手,面試官絕對(duì)對(duì)你刮目相看;“研究過(guò)優(yōu)秀開(kāi)源軟件的源碼并有心得”=>去Github找找?guī)讉€(gè)star多的項(xiàng)目來(lái)看吧,推薦netty,不要多,一個(gè)就好。
3. “了解 SOA 架構(gòu)理念、實(shí)現(xiàn)技術(shù);熟悉常見(jiàn)設(shè)計(jì)模式”=>維基百科歡迎你,看看就行了;“熟練掌握 Spring、myBatis 等框架”=>過(guò)一遍源碼吧
4. “熟練掌握 MySQL 應(yīng)用開(kāi)發(fā)、數(shù)據(jù)庫(kù)原理和常用性能優(yōu)化和擴(kuò)展技術(shù)”=>買(mǎi)本mysql的書(shū)來(lái)看(認(rèn)真臉);“NoSQL,Queue 的原理、使用場(chǎng)景以及限制”=>好好看看redis就行
5. “http 協(xié)議 搜索引擎”=>維基百科;“緩存”=>Google Guava cache,memcached,redis;“jvm 調(diào)優(yōu)”=>掌握jvm參數(shù)(認(rèn)真臉);“序列化”=>Google protocol buffer;“nio”=>netty;“RPC 調(diào)用框架”=>dubbo(垃圾)
6. "xxx優(yōu)先"=>有最好,沒(méi)有就算了
7. 美團(tuán)應(yīng)該不會(huì)2b到考邏輯題或者腦經(jīng)急轉(zhuǎn)彎,所以這里肯定是結(jié)合你做過(guò)的項(xiàng)目來(lái)說(shuō)。一般都會(huì)問(wèn),1??項(xiàng)目架構(gòu),問(wèn)什么選擇這個(gè)不選擇那個(gè);2??碰到的最有挑戰(zhàn)/最復(fù)雜/最blabla的問(wèn)題是什么,怎么解決的
8. “高度的創(chuàng)業(yè)心和投入度”=>不一定要天天加班,但是碰到問(wèn)題或者項(xiàng)目緊急的時(shí)候要加班,面試的時(shí)候要表現(xiàn) 出這個(gè)態(tài)度,哈哈;“技術(shù),業(yè)務(wù),blabla”=>不能死關(guān)注技術(shù),一定要結(jié)合業(yè)務(wù)來(lái)回答面試問(wèn)題
好了,再回到第一條,“計(jì)算機(jī)專(zhuān)業(yè)基本功和寫(xiě)代碼能力”,我們可以綜合一下(根據(jù)分析2~8),美團(tuán)要求的可以是一個(gè):(注意“可以”,你這么做了“可以”獲得美團(tuán)面試官的肯定,假如面試官真的是根據(jù)這份JD來(lái)要求你的話(huà))
1. 對(duì)Java語(yǔ)言本身,我們掌握一下內(nèi)存模型,看一點(diǎn)并發(fā)相關(guān)的東西(java.util.concurrent包里的類(lèi)都看一遍),找?guī)灼┛涂聪聎eak/soft/phantom reference是什么意思就行啦;
2. 對(duì)于JVM,看看書(shū),理解一下Hotspot的常見(jiàn)結(jié)構(gòu)啊名詞啊啥的,記幾個(gè)重要的參數(shù),足以應(yīng)付面試官了;
3. 熟讀netty源碼;
4. 略讀Spring源碼,重點(diǎn)理解關(guān)鍵概念(AOP面試官很愛(ài)問(wèn)的哦);
5. 在維基百科上過(guò)一過(guò)JD里提到的一些名詞;
6. 買(mǎi)本mysql的書(shū)看看,高性能mysql那本書(shū)就很好;
7. redis或memcached哪個(gè)用的多就多看看相關(guān)博客。都沒(méi)用過(guò)?建議你看redis
8. 好好包裝一下你做過(guò)的最nb的項(xiàng)目,準(zhǔn)備幾個(gè)技術(shù)難點(diǎn)和解決方法,記住一定要結(jié)合業(yè)務(wù)哦。(什么?沒(méi)有?沒(méi)有不會(huì)編嗎?怎么編?往分布式和高并發(fā)方向編會(huì)嗎?不會(huì)?那你不適合互聯(lián)網(wǎng)。)
9. 多工作幾年!
你看,也不是很難嘛。如果上面的幾點(diǎn)你都做到了,還拿不到2w的美團(tuán)高級(jí)JAVA開(kāi)發(fā)工程師的offer,那美團(tuán)肯定是凍結(jié)了headcount。我認(rèn)識(shí)的好多遠(yuǎn)遠(yuǎn)達(dá)不到上面需求的人都在美團(tuán)呢。
PS:面試官問(wèn)你算法的話(huà),一定要裝作特別自信的說(shuō):“啊(第二聲),算法?一般工作當(dāng)中不需要自己手寫(xiě)算法吧?一方面是常用的算法,比如排序,查詢(xún),都有現(xiàn)成的代碼來(lái)用;另一方面真需要手寫(xiě)算法的問(wèn)題一般都是面向特定需求的問(wèn)題,或者要求效率特別高的地方。這些地方可以結(jié)合真正的需求來(lái)做。”當(dāng)然常見(jiàn)的算法的偽代碼還是要會(huì)寫(xiě)的哦。如果面試官問(wèn)你紅黑樹(shù),哈哈,那趕緊跑路。不是谷歌臉書(shū)也不是面試算法程序猿的公司問(wèn)你紅黑樹(shù),這公司一定是在裝逼
月薪2萬(wàn)的Java程序員屬于中級(jí)程序員。
就是技術(shù)稍好一點(diǎn),還做不到架構(gòu)師級(jí)別的。
一般來(lái)說(shuō)。
我給人開(kāi)2萬(wàn)的薪水主要取決于以下幾個(gè)方面。
1.能否獨(dú)立完成項(xiàng)目,以及完成過(guò)哪些項(xiàng)目,至少是6+項(xiàng)目。
項(xiàng)目經(jīng)驗(yàn)多了,對(duì)于需求的理解能力也會(huì)好很多。
2.對(duì)于自己所做項(xiàng)目用的技術(shù)框架,是否足夠清楚,能否回答出來(lái)是如何選型的。
并不要求現(xiàn)在能夠去做架構(gòu)的選型,但是一定要了解自己原有項(xiàng)目的架構(gòu)體系。
3.是否對(duì)行業(yè)技術(shù)的現(xiàn)狀有足夠多的了解,是否有主動(dòng)學(xué)習(xí)的表現(xiàn)。
這是看一個(gè)人的視野開(kāi)闊程度,15K的程序員我不要求這些。20K的程序員必須要讀一些主流的體系,哪怕說(shuō)出來(lái)幾個(gè)名詞都可以。
4.處理過(guò)的最大的數(shù)據(jù)量是多少,有沒(méi)有超過(guò)千萬(wàn)級(jí)的流水。處理過(guò)的最大的并發(fā)數(shù)是多少,TPS能到達(dá)多少。
5.是否了解分布式和緩存,RPC框架用過(guò)哪些,緩存的失效策略怎么處理。
6.是否能夠快速的解決線(xiàn)上的故障,是否熟悉Bug和線(xiàn)上Bug的緊急修復(fù)流程。
7.是否熟悉項(xiàng)目工具,如Jenkins,Nexus,Confluence,wiki,git,svn等項(xiàng)目中常用的東西。
8.是否對(duì)性能調(diào)優(yōu)有了解,GC的算法了解到多少。
其實(shí)應(yīng)該是反過(guò)來(lái)說(shuō),就是候選人值多少錢(qián)?
補(bǔ)充一句,并沒(méi)有說(shuō)都滿(mǎn)足。
而是說(shuō)至少要有幾項(xiàng)是滿(mǎn)足的。
符合的條件越多,可以給出的薪水范圍就越高。
總結(jié)起來(lái),要達(dá)到月薪2萬(wàn),需要掌握如下技能:
1.有扎實(shí)的Java編程基礎(chǔ),熟悉各種設(shè)計(jì)模式,有良好的程序設(shè)計(jì)能力。
2.熟悉整個(gè)軟件開(kāi)發(fā)流程及規(guī)范。
3.熟練掌握Spring/Struts/Ibatis以及主流開(kāi)發(fā)框架。
4.熟悉數(shù)據(jù)庫(kù),比如Mysql、oracle等,并對(duì)數(shù)據(jù)庫(kù)事物有深刻理解。
5.擅長(zhǎng)使用開(kāi)源框架,解讀過(guò)源碼,掌握實(shí)現(xiàn)原理。
6.1-5年開(kāi)發(fā)經(jīng)驗(yàn)。
7.學(xué)歷能力強(qiáng),善于總結(jié)、思考。
以上的只是月薪20k Java開(kāi)發(fā)崗位的基本技能,針對(duì)不同的業(yè)務(wù)還需要其他技能,比如搜索業(yè)務(wù),還需要掌握Lucene、ElasticSearch等技術(shù)。
總結(jié)
以上是生活随笔為你收集整理的北上广Java开发月薪20K往上,该如何做,需要会写什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《深入理解 Java 内存模型》读书笔记
- 下一篇: OncePerRequestFilter