1. 程式人生 > >月薪2w的程式設計師技能

月薪2w的程式設計師技能

首先兩萬的月薪在BAT實在太普遍了,一般是高階工程師和資深工程師的職位。在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,京東是t3-1,美團是p6左右,其他的我不瞭解。這種級別是他們主要碼農層級,加班多,能解決大部分問題,但對系統的整體架構能力和深入分析瓶頸的能力還需要培養。

其次掌握的技能樹主要有三個方面:
第一個是基礎。比如對集合類,併發包,IO/NIO,JVM,記憶體模型,泛型,異常,反射,等有深入瞭解,最好是看過原始碼瞭解底層的設計。比如一般面試都會問ConcurrentHashMap,CopyOnWrite,執行緒池,CAS,AQS,虛擬機器優化等知識點,因為這些對網際網路的企業是絕對重要的。而且一般人這關都過不了,還發鬧騷說這些沒什麼用,為什麼要面試。舉一例子,在使用執行緒池時,因為使用了無界佇列,在遠端服務異常情況下導致內層飆升,怎麼去解決?你要是連執行緒池都不清楚,你怎麼去玩?再舉一例,由於對ThreadLocal理解出錯,使用它做執行緒安全的控制,導致沒能實現真的執行緒安全,你怪我哦?所以作為一個拿兩萬的JAVA程式設計師這點基礎是必須的。

第二你需要有全面的網際網路技術相關知識
。從底層說起,你起碼得深入瞭解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問需要了解到什麼程度,我可以給你說個大慨。首先對於MySQL,你要知道常見的引數設定,儲存引擎怎麼去選擇,還需要了解常見的索引引擎,知道怎麼去選擇。知道怎麼去設計表,怎麼優化sql,怎麼根據執行計劃去調優。高階的你需要去做分庫分表的設計和優化,一般網際網路企業的資料庫都是讀寫分離,還會垂直與水平拆分,所以這個也有經驗的成分在裡面。然後redis,mongodb都是需要了解原理,需要會調整引數的,而nginx和tomcat幾乎都是JAVA網際網路方面必配,其實很阿里的技術棧選擇有點關係。至於rpc相關的就多的去,必須各種網路協議,序列化技術,SOA等等,你要有一個深入的理解。現在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜尋。至於jms相關的起碼得了解原理吧,一般情況下不是專門開發中間件系統和支撐系統的不需要了解太多細節,國內企業常用的主要是activeMQ和kafka。你能對我說的都研究的比較深入,阿里p6我覺得是沒問題的,當然這個還需要看你的架構能力方面的面試表現了。

第三就是程式設計能力,程式設計思想,演算法能力,架構能力的考量
。首先2W程式設計師對演算法的要求我覺得還是比較低,再高階也最多紅黑樹吧,但是排序和查詢的基本演算法得會。程式設計思想是必須的,問你個AOP和IOC你起碼的清清楚楚,設計模式不說每種都用過,但是也能深入理解個十四五種。程式設計能力這個我覺得不好去評價,但是拿一個2000W使用者根據姓名年齡排序這種題目也能信手拈來。最後就是架構能力,這種不是說要你設計個多牛逼多高併發的系統,起碼讓你做一個秒殺系統,防重請求的設計能快速搞定而沒有坑吧。

以上就是我覺得2w水平的JAVA程式設計師。不要說什麼SSH,那最多值8K。