1. 程式人生 > >【乾貨】一個優秀的知識體系省去你幾年的盲目探索

【乾貨】一個優秀的知識體系省去你幾年的盲目探索

不管是開發、測試、運維,每個技術人員心裡多多少少都有一個成為技術大牛的夢,畢竟“夢想總是要有的,萬一實現了呢”!正是對技術夢的追求,促使我們不斷地努力和提升自己。

然而“夢想是美好的,現實卻是殘酷的”,很多同學在實際工作後就會發現,夢想是成為大牛,但做的事情看起來跟大牛都不沾邊,例如,程式設計師說“天天寫業務程式碼還加班,如何才能成為技術大牛”,測試說“每天都有執行不完的測試用例”,運維說“扛機器接網線敲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年我也會為了更高的段位去奮鬥,我要去不斷的學習不斷的加深對技術的認識。特別對效能優化、原始碼分析等技術是我今年打算加深學習的。下面是我找到的幾個圖譜,分享出來給大家一起看看吧。


原始碼分析


分散式架構


微服務架構