Java架構師,應該算是一些Java程式設計師們的一個職業目標了吧。很多碼農碼了五六年的程式碼也沒能成為架構師。那成為Java架構師要掌握哪些技術呢,總體來說呢,有兩方面,一個是基礎技術,另一個就是組織能力和提出解決方案能力了。我就跟大家來簡要地說說吧。
如果你是想成為Java架構師,那麼你首先要是一個Java高階攻城獅。也就是說,基礎必須牢固,對Java的瞭解全面而且深入。
熟練使用各種框架,並知道它們實現的原理。
Jvm虛擬機器原理、調優操作,懂得jvm能讓你寫出效能更好的程式碼;
池技術也是要掌握的,物件池、連線池、執行緒池都要會;
Java反射技術,寫框架必備的技術;
Java各種集合物件的實現原理,瞭解這些可以讓你在解決問題時選擇合適的資料結構,高效地解決問題,寫出程式碼;
nio,注意“直接記憶體”的特點,使用場景。
還沒完,除了上邊那些,你還要熟練使用各種資料結構和演算法,陣列、雜湊、連結串列、排序樹等等都是;熟練使用Linux作業系統,也是必備的;熟悉各種協議,比如tcp協議,建立連線三次握手和斷開連線四次握手的整個過程,不瞭解就沒法對高併發網路應用做優化,http協議,session和cookie的生命週期與關聯;熟悉系統叢集、負載均衡、反向代理、動靜分離,網站靜態化;懂得分散式儲存系統nfs,fastdfs,tfs,Hadoop瞭解他們的優缺點,適用場景,以及分散式快取技術memcached,redis,提高系統效能必備。
以上這些夠了嗎?當然不。還有呢,工具nginx必備技能超級好用,高效能,基本不會掛掉的伺服器,功能多多,解決各種問題;掌握資料庫的設計能力,Mysql必備,最基礎的資料工具,主要是免費且好用,對它基本的引數優化,慢查詢日誌分析,主從複製的配置,至少要成為半個mysql dba,其他資料庫也要至少略懂一二;還有佇列中介軟體也要會操作,如訊息推送,可以先把訊息寫入資料庫,推送放佇列伺服器上,由推送伺服器去佇列獲取處理,這樣就可以將訊息放資料庫和佇列裡後直接給使用者反饋,推送過程則由推送伺服器和佇列伺服器完成,好處非同步處理、緩解伺服器壓力,解藕系統。
說了這麼多,其實都還是純粹的基礎技術,並且還沒有列全。要想成為架構師,除了這些之外,就還要具備我們說的組織能力和解決問題的能力了。
架構師思考的是全域性的東西,是如何組織系統,以達到業務要求、效能要求。架構師要針對業務特點、系統的效能要求提出解決問題成本最低的設計方案。為了架構而架構,這是絕對不可取的。你想啊,人家一個幾百人使用者的系統,訪問量不大,資料量也不大,你給人家上叢集、分散式儲存、高階伺服器,肯定能到達效能要求,但是成本高啊。要知道,架構師的作用,一是滿足業務需求,二是最低的硬體網路成本和技術維護成本。
架構師還要根據業務發展階段,提前預見發展到下一個階段系統架構的解決方案,並且設計當前架構時將架構的升級擴充套件考慮進去,做到易於升級;否則等系統瓶頸來了,出問題了再去出方案,或現有架構無法擴充套件直接扔掉重做,或擴充套件麻煩問題一大堆,這會對企業造成損失。
架構師是經過程式設計師,開發員,高階開發員等一步步積累而來。一個好的架構師不太可能看一些書就能短期內看會。建議平時寫程式碼時,多思考,而不是僅僅滿足於完成功能。可以試著用不同的方法去實現一個功能,分析優缺點。看別人的程式碼時也要學會別人為什麼這麼寫。等到有了些積累,可以去系統地學些design pattern,並逐漸運用到工作中。熟練後你會發現自己可以寫變種的pattern了。到這一步你已經積累了不少需求分析的經驗,也能夠把需求中的問題抽象出來,程式碼已經能很好的重用了。這就已經踏入架構師的門檻了,接下來,你要做的是培養自己預測需求變化的能力。當你的設計總是能夠以最小的代價適應需求的改變時,就是個合格的架構師了。
第一階段:java基礎知識要牢固,java程式設計思想,設計模式,effective java這些都算是基礎知識。在這基礎上,要結合多種專案經驗,利用實踐來提高基礎能力。
第二階段:開闊眼光,借鑑優秀的專案或開原始碼。例如jstorm、hadoop等開源軟體,可以下載後利用業餘時間研讀,提升能力。
第三階段:結合業務進行架構設計和實踐,並多與行業高手交流,提升領域建模等能力
選一個方向,然後多閱讀一些高質量程式碼,站在前輩架構師的肩膀上,才能比較快速的進步,長時間的技術積累,業務專案的積累,合理的方案解決通用問題。多讀多寫多思考。多讀的目的是開拓自己的視野,讓自己具備舉一反三觸類旁通的能力。多寫是腳踏實地,避免誇誇其談紙上談兵。多思考是融會貫通所讀所寫。
架構師的學習之路也正式開始。
效能優化
JVM調優
Java程式效能優化
Tomcat
Mysql
Spring IOC
Spring AOP
Spring MVC
Spring 5新特性
Mybatis
分散式架構
架構核心服務層技術
架構關鍵技術設施
分散式訊息通訊 非同步於MQ
分散式快取
Redis
Memcached
MongoDB
資料儲存
高併發分流技術Nginx
分散式解決方案
應用框架原始碼解讀
微服務專題
你還不知道微服務?怎麼加(zhuang)薪(bi)
SpringBoot
與微服務的區別於聯絡
快速構建SpringBoot工程
SpringBoot核心元件剖析
快速整合mybatis實戰
快速整合Dubbo及案例實戰
構建整合 redis及案例實戰
構建Swagger外掛實現API
管理及介面測試體系
SpringCloud
Zuul路由閘道器詳解原始碼探析
Ribbon客戶端負載均衡原理
Feign宣告式服務呼叫方式
Eureka註冊中心構件
Config配置服務中心
svn、git快速整合
Sleuth呼叫鏈路跟蹤
BUS訊息匯流排技術
Docker虛擬化技術
介紹、安裝與使用
compose部署指令碼
service服務編排
redis分散式叢集部署
docker file構建
通過maven外掛打包映象
部署及執行應用程式kubernetes編配
構建Mysql叢集實戰
高可用SpringCloud微服務與docker整合實現動態擴容實戰
團隊協作開發
Git
Maven
Jenkins
Sonar
B2C商城專案實戰
擼起袖子幹實事,專案經驗那點事
系統設計
架構設計
資料庫設計
部署設計
基礎開發框架講解
使用者管理子系統
使用者註冊登入(二維碼技術)
許可權控制(shiro)
單點登入(session統一快取、sso)
商品管理子系統
商品管理(MongoDB)
商品分類(MongoDB)
商品釋出(nosql與mysql資料同步)
熱賣商品排行(redis)
搜尋子系統
基於ES的全文探索
檢索需求分析
檢索策略
索引設定
分詞演算法
命中率優化
訂單實時統計
訂單子系統
分散式環境生成唯一編號(zookeeper)
下單業務流程(訊息中介軟體)
訂單可靠性
秒殺功能(redis)
訂單管理
訂單功能(mongodb)
支付系統
微信支付對接
支付寶對接
銀聯對接 開發
分散式排程系統
資料統計
資料同步
任務排程配置
後臺系統
日常管理
線上IM系統(websockedNIO)
使用者行為分析(日誌系統設計)
報表大資料查詢優化(mysql查詢優化)
歡迎大家加入Java高階架構/網際網路:570210627 本群提供免費的學習指導 架構資料 以及免費的解答 不懂得問題都可以在本群提出來 之後還會有職業生涯規劃以及面試指導 進群修改群備註:開發年限-地區-經驗 方便架構師解答問題
效能優化
效能調優
JVM調優
Java程式效能優化
Tomcat
Mysql
應用框架原始碼解讀
Spring概述
Spring容器
Spring AOP
Spring MVC
Spring 5新特性
Mybatis
分散式架構
分散式架構思維
架構開發基礎
架構核心服務層技術
分散式環境指揮官Zookeeper
分散式訊息通訊 非同步於MQ
分散式快取Nosql
Redis
Memcached
快取開發專題
MongoDB
資料儲存
高併發分流技術Nginx
分散式常見場景解決方案
微服務架構
Springboot
SpringCloud
Docker虛擬化技術
團隊協作開發
Git
Maven
Jenkins
Sonar
B2C商城專案實戰