【乾貨】一個優秀的知識體系省去你幾年的盲目探索
不管是開發、測試、運維,每個技術人員心裡多多少少都有一個成為技術大牛的夢,畢竟“夢想總是要有的,萬一實現了呢”!正是對技術夢的追求,促使我們不斷地努力和提升自己。
然而“夢想是美好的,現實卻是殘酷的”,很多同學在實際工作後就會發現,夢想是成為大牛,但做的事情看起來跟大牛都不沾邊,例如,程式設計師說“天天寫業務程式碼還加班,如何才能成為技術大牛”,測試說“每天都有執行不完的測試用例”,運維說“扛機器接網線敲shell命令,這不是我想要的運維人生”。
我也是一位程式設計師,所以我希望通過以下基於程式開發的一些例子,幫助大家解決這些困惑。大道理是相通的,測試、運維都可以借鑑。
成為架構師的幾個誤區
第一:拜大牛為師
有人認為想成為技術大牛最簡單直接、快速有效的方式是“拜團隊技術大牛為師”,讓他們平時給你開小灶,給你分配一些有難度的任務。
我個人是反對這種方法的,主要的原因有幾個:
大牛很忙,不太可能單獨給你開小灶,更不可能每天都給你開1個小時的小灶;而且一個團隊裡面,如果大牛平時經常給你開小灶,難免會引起其他團隊成員的疑惑,我個人認為如果團隊裡的大牛如果真正有心的話,多給團隊培訓是最好的。然而做過培訓的都知道,準備一場培訓是很耗費時間的,課件和材料至少2個小時(還不能是碎片時間),講解1個小時,大牛們一個月做一次培訓已經是很高頻了。
因為第一個原因,所以一般要找大牛,都是帶著問題去請教或者探討。因為回答或者探討問題無需太多的時間,更多的是靠經驗和積累,這種情況下大牛們都是很樂意的,畢竟影響力是大牛的一個重要指標嘛。然而也要特別注意:如果經常問那些書本或者google能夠很容易查到的知識,大牛們也會很不耐煩的,畢竟時間寶貴。經常有網友問我諸如“jvm的-Xmn引數如何配置”這類問題,我都是直接回答“請直接去google”,因為這樣的問題實在是太多了,如果自己不去系統學習,每個都要問是非常浪費自己和別人的時間的。
大牛不多,不太可能每個團隊都有技術大牛,只能說團隊裡面會有比你水平高的人,即使他每天給你開小灶,最終你也只能提升到他的水平;而如果是跨團隊的技術大牛,由於工作安排和分配的原因,直接請教和輔導的機會是比較少的,單憑參加幾次大牛的培訓,是不太可能就成為技術大牛的。
綜合上述的幾個原因,我認為對於大部分人來說,要想成為技術大牛,首先還是要明白“主要靠自己”這個道理,不要期望有個像武功師傅一樣的大牛手把手一步一步地教你。適當的時候可以通過請教大牛或者和大牛探討來提升自己,但大部分時間還是自己系統性、有針對性的提升。
第二:業務程式碼一樣很牛逼
有人認為寫業務程式碼一樣可以很牛逼,理由是業務程式碼一樣可以有各種技巧,例如可以使用封裝和抽象使得業務程式碼更具可擴充套件性,可以通過和產品多交流以便更好的理解和實現業務,日誌記錄好了問題定位效率可以提升10倍等等。
業務程式碼一樣有技術含量,這點是肯定的,業務程式碼中的技術是每個程式設計師的基礎,但只是掌握了這些技巧,並不能成為技術大牛,就像遊戲中升級打怪一樣,開始打小怪,經驗值很高,越到後面經驗值越少,打小怪已經不能提升經驗值了,這個時候就需要打一些更高階的怪,刷一些有挑戰的副本了,沒看到哪個遊戲只要一直打小怪就能升到頂級的。成為技術大牛的路也是類似的,你要不斷的提升自己的水平,然後面臨更大的挑戰,通過應對這些挑戰從而使自己水平更上一級,然後如此往復,最終達到技術大牛甚至業界大牛的境界,寫業務程式碼只是這個打怪升級路上的一個挑戰而已,而且我認為是比較初級的一個挑戰。
所以我認為:業務程式碼都寫不好的程式設計師肯定無法成為技術大牛,但只把業務程式碼寫好的程式設計師也還不能成為技術大牛。
第三:上班太忙沒時間自己學習
很多人認為自己沒有成為技術大牛並不是自己不聰明,也不是自己不努力,而是中國的這個環境下,技術人員加班都太多了,導致自己沒有額外的時間進行學習。
這個理由有一定的客觀性,畢竟和歐美相比,我們的加班確實要多一些,但這個因素只是一個需要克服的問題,並不是不可逾越的鴻溝,畢竟我們身邊還是有那麼多的大牛也是在中國這個環境成長起來的。
我認為有幾個誤區導致了這種看法的形成:
(1)上班做的都是重複工作,要想提升必須自己額外去學習
形成這個誤區的主要原因還是在於認為“寫業務程式碼是沒有技術含量的”,而我現在上班就是寫業務程式碼,所以我在工作中不能提升。
(2)學習需要大段的連續時間
很多人以為要學習就要像學校上課一樣,給你一整天時間來上課才算學習,而我們平時加班又比較多,週末累的只想睡懶覺,或者只想去看看電影打打遊戲來放鬆,所以就沒有時間學習了。
實際上的做法正好相反:首先我們應該在工作中學習和提升,因為學以致用或者有例項參考,學習的效果是最好的;其次工作後學習不需要大段時間,而是要擠出時間,利用時間碎片來學習。
在此我向大家推薦一個交流學習群:454377428裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多
maven的使用
maven的使用入門
maven私服的搭建及部署
maven座標分析/父控設定
git版本管理及jenkins自動化構建
git使用入門培訓
git常用命令分析和使用
jenkins環境搭建及外掛配置
git+jenkins實現自動化構建
NoSql專題-redis高效能快取
redis使用入門
redis常用命令及客戶端的使用
redis高可用叢集搭建
NoSql專題-mongodb
mongodb使用入門
mongodb高可用叢集搭建
mongodb常用命令及客戶端的使用
分散式專題-zookeeper+dubbo服務協調
zookeeper安裝部署及命令分析
zookeeper客戶端的使用
zookeeper實現原理分析
dubbo的使用入門及配置分析
zookeeper+dubbo實現服務註冊和發現
分散式專題-訊息中介軟體
activeMq-jms規範及使用
activeMq訊息分發機制分析
kafka實現原理剖析
kafka的資料傳輸事務性及實踐練習
分散式快取分析對比
memcache的原理分析及使用
memcache和redis的橫向對比分析
分散式介面技術
webservice/RMI/restful的使用
高併發專題-資料庫層面優化
分庫分表的原理及規則講解
資料庫主備及高可用
效能調優專題-jvm調優
JVM原理剖析
jvm記憶體模型及垃圾回收器的分析
效能調優專題-容器效能優化
nginx效能優化
tomcat效能優化
效能調優專題-資料庫優化
mysql常見優化手段分析及實踐
高效能容器的使用
nginx使用入門
nginx負載均衡/反向代理實現
雙十一專題-九陽真經
太極聚氣之分散式壓測平臺
氤氳紫氣之分散式快取體系
盤龍真訣之分散式訊息系統
金剛之軀之分散式跟蹤系統
外功輔助之分散式配置系統
微服務架構技術棧分析
springboot的使用
分散式協調服務zookeeper
zookeeper叢集及相關概念分析
zookeeper java api的使用及實踐
從集中式到分散式架構
分散式架構的演進過程
分散式架構的基石-TCP/UDP
分散式通訊協議
分散式通訊協議-HTTP及RESTful
分散式通訊協議-webservice詳解
分散式通訊協議-RMI
分散式通訊協議-序列化技術
分散式服務治理
dubbo控制檯及監控中心的安裝部署
dubbo常用配置分析
dubbo實戰演練
NIO技術之-Netty
NIO基本概念及BIO、AIO的對比分析
NIO核心設計思想剖析(Buffer/Channel..)
Netty產生的背景及優缺點分析
Netty實現IM聊天系統
分散式快取技術-Redis
redis的安裝及資料型別分析
Redis客戶端的使用
Redis高可用方案實戰
Redis+Lua指令碼實現原子操作
高效能之道-MongoDB
MongoDB高可用部署
MongoDB動態查詢及索引剖析
MongoDB整合spring應用
資料庫高效能之道-Mysql
分庫分表深入分析
Mysql主從模型配置/Mycat的使用
分散式通訊技術
JMS基本概念和模型
ActiveMQ結合Spring開發
ActiveMQ靜態網路和**絡連結
Kafka的高可用方案及原理分析
SOA架構及微服務架構
什麼是SOA架構/為什麼需要SOA
領域驅動設計方法/典型SOA架構設計
spring boot深入剖析
spring boot+dubbo企業實戰
Docker虛擬化技術
Docker虛擬化技術(映象/倉庫/容器)
Docker整合spring boot
Docker 服務編排
導流技術
Nginx反向代理、負載均衡
Nginx程序模型分析
Nginx+keepalived高可用方案
微服務技術
spring boot(mvc)
spring boot(REST)
spring boot(驗證)
29、spring cloud
spring cloud config client
spring cloud config server
spring cloud netflix eureka
spring cloud netflix ribbon
spring cloud hystrix
spring cloud feign
spring cloud stream
spring cloud bus
spring cloud sleuth
分散式訊息技術-kafka
kafka高可用叢集及介紹
kafka底層實現原理分析
分散式快取-redis
redis的資料型別分析
redis高可用叢集方案
lua指令碼在redis中的應用
高效能之道-MongoDB
MongoDB的基本原理
MongoDB常用命令及客戶端使用
手寫基於MongoDB的ORM框架
MongoDB高可用解決方案
資料庫高效能-Mysql
分庫分表深入分析及主從模型
資料庫中介軟體Mycat介紹
效能優化專題
從測試的角度解讀如何衡量效能
瞭解Linux系統
虛擬機器-JVM
記憶體模型、執行時資料
垃圾回收、GC日誌
調優實戰
容器優化-Tomcat
tomcat架構分析
執行緒模型分析
tomcat調優實戰
mysql資料庫調優
Mysql底層儲存分析
很多問題其實答案很簡單,但是背後的思考和邏輯不簡單,要做到知其然還要知其所以然。如果想學習Java工程化、高效能及分散式、深入淺出。效能調優、Spring,MyBatis,Netty原始碼分析的朋友可以加Java進階群:454377428,群裡有阿里大牛直播講解技術,以及Java大型網際網路技術的視訊免費分享給大家。
同時2018年我也會為了更高的段位去奮鬥,我要去不斷的學習不斷的加深對技術的認識。特別對效能優化、原始碼分析等技術是我今年打算加深學習的。下面是我找到的幾個圖譜,分享出來給大家一起看看吧。
原始碼分析
分散式架構
微服務架構