不少讀者私信問我,本身工做三多年了,隨着工做年限的不斷增加,感受本身的技術水平與本身的工做年限嚴重不符。想跳槽出去換個新環境吧,又感受本身的能力達不到心儀公司的標準,即便投了簡歷也沒人來通知本身面試。就這樣在原來的公司一每天的混日子,時間久了,感受本身廢了,就這麼惡性循環着。html
文章已收錄到:
https://github.com/sunshinelyz/technology-binghe
https://gitee.com/binghe001/technology-binghe
首先,若是你認爲本身是一個天才程序員,那麼你能夠不按照我說的作,由於你是天才,你能夠分分鐘達到甚至超過30K。若是你認爲本身只是一個普通人,那好,繼續往下看,相信會對你有所幫助的。git
咱們該如何打破本身的技術水平和工做年限嚴重不符的這個僵局呢?程序員
首先,最重要的仍是心態 。爲何這麼說,由於從事互聯網開發工做,程序員的壓力其實仍是蠻大的,在高強度的平常工做中,就須要咱們以良好的心態來面對本身的工做。其次,就是要學會釋放壓力,以正確的方式來釋放或者緩解本身心中的壓力。github
其次,就是關鍵的一點,你要從心底問本身是否對如今的工做感興趣。 其實,咱們都知道,只要是作咱們本身感興趣的事情,就會事半功倍,若是是出於某種緣由不得不去作某件事,這樣每每會是投入了很大的精力,效果每每還不太好,這就是咱們常說的事倍功半。面試
常常有小夥伴在微信上私信我:我是學Java呢?仍是學Python呢?哪一個吃香啊?哪一個好找工做啊?學習大數據怎麼樣啊?大數據是否是已經飽和了啊?這一連串的問題,其實,我看到小夥伴們的這些問題,我都不知道如何回答。爲何呢?其實這些問題,小夥伴們內心應該都清楚:只要你足夠認真的堅持學下去,學什麼都可以找到一份好工做。算法
究其本質, 對於咱們這些搞技術的人來講,年齡的增加其實沒有外界說的那麼可怕,真正可怕的是你的年齡和你所掌握的技術深度沒有匹配。若是你的年齡與你的技術深度不匹配時,你是很難找到一個令本身滿意的工做的。試想,若是你已經工做五、6年了,你所作的工做連一、2年工做經驗甚至是應屆畢業生都能作時,那公司爲啥還要你來作呢?給你養老嗎?公司是要盈利的,盈利就意味着要賺錢。怎麼賺錢?節省成本就是一種賺錢的方式,那很差意思,你就會被淘汰掉。數據庫
因此,在技術這條道路上,你也須要選擇一個本身感興趣的方向。好比:Java、Python、大數據、雲計算、雲原生等等。接下來,就是深刻學習了。要知道: 再牛逼的技術,也抵不過傻逼似的堅持。 只要堅持,就沒有學不會的技術。編程
在學習的過程當中,必定要明確本身學什麼,切記不要三心二意。不要今天學習Java,明天又想學習Python了。必定要給本身制定一個目標,並將目標拆分爲天天的學習計劃。設計模式
調整好心態後,咱們再來看看須要學習哪些內容。安全
首先,就是要夯實本身的基礎。好比對集合類,併發包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深刻了解,最好是看過源碼瞭解底層的設計。
好比通常面試都會問 ConcurrentHashMap,CopyOnWrite,線程池,CAS,AQS,虛擬機優化等知識點,由於這些對互聯網的企業是絕對重要的。並且通常人這關都過不了,還發牢騷說這些沒什麼用,爲何要面試。
這裏,我給你們舉一個我所經歷的項目的真實案例。以前,我所在的公司,在作一個高併發電商項目時,一名開發同窗在項目中,由於使用了默認的建立線程池的方式,致使線程池中使用了默認的無界隊列,在遠程服務異常狀況下致使內層飆升。最終經過排查源碼定位到問題,將其修改成有界隊列,解決了問題。
試想,你要是連線程池都不清楚,你怎麼去玩?再舉一例,因爲對 ThreadLocal 理解出錯,使用它作線程安全的控制,致使沒能實現真的線程安全。此時,你會怎麼解決這個問題?
因此,基礎很重要,必定要把基礎學紮實。萬丈高樓平地起,只有把基礎搞紮實了,上層建築纔會更加牢固。
關於這一點,咱們須要從底層提及,你起碼得深刻了解 MySQL,Redis,MongoDB,Nginx,Tomcat,RPC,JMS、Dubbo、SpringCloud、SpringCloud Alibaba、性能調優、Netty、服務註冊發現、服務治理、各類中間件、互聯網工程、併發編程、分佈式、微服務等等方面的知識。
你要問須要瞭解到什麼程度,這裏,我能夠給你舉幾個例子:首先對於 MySQL,你要知道常見的參數設置,存儲引擎怎麼去選擇,還須要瞭解常見的索引引擎,知道怎麼去選擇。知道怎麼去設計表,怎麼優化 SQL,怎麼根據執行計劃去調優。掌握如何去作分庫分表的設計和優化,通常互聯網企業的數據庫都是讀寫分離,還會垂直與水平拆分,因此這些也須要你多多少少掌握。
而後 Redis,Mongodb 都是須要了解原理,須要會調整參數的。
而 Mginx 和 Tomcat 幾乎都是 JAVA 互聯網開發必配的Web服務器,這點,可能跟阿里的技術棧選擇有點關係。
至於RPC相關的就比較多了,必須瞭解各類網絡協議,序列化技術,SOA 等等,你要有一個深刻的理解。如今應用比較廣的 RPC 框架,在國內就是 dubbo 了,小夥伴們能夠到Dubbo的官網進行學習,也能夠到github下載源碼進行學習。
至於其餘的嘛,就須要小夥伴們本身去研究了。總之,掌握它們,對你沒壞處。
我這裏說的硬核能力,指的就是:編程能力,編程思想,算法能力,架構能力。
這裏,我就簡單的說下,除了基礎部分和互聯網技術須要掌握的技能外,還有幾個是必需要掌握的,那就是:編程能力、編程思想、算法能力、架構能力。
編程能力這個我以爲很差去評價,可是拿一個 2000W 用戶根據姓名年齡排序這種題目也能信手拈來。問你個 AOP 和 IOC 你起碼要清清楚楚,設計模式不說每種都用過,但也能瞭解個幾種吧。對於算法來講,你須要掌握基本的算法知識吧。其實,開發一個系統時,不少地方都須要考慮使用算法來實現。有些小夥伴認爲本身是作業務開發的,用不到算法,不須要學習算法啊,其實這種思想就是錯誤的!!
最後就是架構能力,這種不是說要你設計個多牛逼多高併發的系統,起碼讓你作一個秒殺系統,防重請求的設計能快速搞定而沒有坑吧。
好了,今天就到這兒吧,我是冰河,咱們下期見,後面給你們另外推薦一些書單,若是你也想月薪達到甚至超過30K,就請在下方留言吧,也能夠加我微信【sun_shine_lyz】進行交流,讓我知道你的想法~~