04.20 Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

“當我活著的時,我要做生命的主宰,而不做它的奴隸。”從小到大我就不相信命這一說。沒有別人顯赫家庭背景,沒有別人做官的父親,沒有別人家產萬貫,只有憑自己的雙手去創造自己的未來。

現在在一線有了10年行業經驗,其中3年外企、7年互聯網工作經驗。曾就職於惠普、大眾點評、互聯網金融行業,擁有了豐富的前後臺大型項目架構經驗。也積累下來了一些感悟,可能有些地方略有偏頗,就當拋磚引玉,聊為笑談。

行軍打仗,你需要一個嚮導;如果沒有嚮導,你需要一個地圖;如果沒有地圖,至少要學習李廣,找一匹識途的老馬;而技術學習,你需要有“貴人”帶路。

有些人在有1-5工作經驗的時候,會面對流行的技術不知從何下手,想要突破現有的技術瓶頸,卻不知道從何下手。

有些人在公司待久了之後,過得太安逸,但跳槽時卻總是面試碰壁。

有些人會覺得自己很牛B,一般需求都能搞定。但是不經意間卻發現所學的知識點沒有系統化,很難在技術領域繼續突破。

怎麼說呢,這些情況相信會有很多人在過程中。不過我不是來揭短的,接下來進入正文

我根據自己的經驗總結了一下,一名架構師應該掌握的專業知識點(希望能讓大家找到學習技術的一個方向,少走一些彎路。如果需要可以加入我的Java架構/多線程/高性能交流學習群:454377428):

一、分佈式專題

分佈式計算就是通過計算機網絡將計算工作分佈到多臺主機上,多個主機一起協同完成工作。

我試著列一下相關知識吧。

網絡通訊,網絡是分佈式的基礎,對分佈式的理解建立在對網絡的理解上,包括:

OSI模型的7層

TCP/IP,DNS,NAT

HTTP,SPDY/HTTP2

Telnet

網絡編程,是通過程序在多個主機之間通信。包括:

Socket

多線程

非阻塞IO

網絡框架

Netty

Mina

ZeroMQ

操作系統的網絡部分

RPC,Socket使用不是很方便,很多分佈式應用是基於RPC的,包括:

同步RPC

異步RPC

主要的一些RPC協議

RMI

Rest API

Thrift

集群,分佈式計算離不開集群。集群就是多臺主機被當作一個系統

集群類型

高可用,如主機備機切換,冷備,熱備,雙活

伸縮性,如Web服務器集群,數據庫服務器的Sharding

並行計算,如網格,大數據

集群相關技術,包括:

高可用性,保證服務一直能夠被訪問,延長MTBF,縮短MTTR

冗餘的設備

多副本,為了避免單點失效

負載均衡,如何將大量工作負載分配到多個主機上,最大化吞吐量,最小化平均響應時間,最大化資源利用率。

伸縮性(橫向),能夠添加計算機和設備來應對增長的計算壓力

分片(Sharding),把數據分成多個數據集,由多個服務器來分別處理。

自動分片

容錯性,當硬件或軟件發生故障,能夠繼續運轉

故障檢測,以及故障預測

心跳包

告警

性能預警

故障轉移,當出現錯誤,如何解決,為了高可用性和容錯性

分佈式一致性,在分佈式環境中如何維持狀態的一致性,嚴格一致性,還是最終一致性

集群狀態協調,如Zookeeper,etcd等。

分佈式鎖,在分佈式環境中如何進行加鎖

選主,當Master宕機,如何選擇出新的Master,協議如Raft

一致性哈希,如何將數據分佈到集群中的多個主機。

分佈式事務,保證在多臺服務器上完成的操作符合事務的ACID屬性。

安全,網絡通常需要保證安全。

身份認證,如何驗證人或機器是他們聲明的身份

基於用戶名/口令

基於數字證書

私密性,如何防止竊聽和嗅探

對稱加密

非對稱加密

完整性,如何保證數據不被篡改

安全散列

消息認證碼(MAC)

不可否認性

基於數字證書的數字簽名和驗籤

基於密鑰的散列,如HMAC

互聯網站的基本架構

頁面緩存

負載均衡器,如HAProxy,Nginx

分佈式緩存,如Memcache,Redis

消息隊列,如ActiveMQ,Kafka

分佈式框架

關係型數據庫(Sharding,主從同步)

NoSQL

HBase,基於HDFS和Zookeeper的NoSQL

Cassandra,無主集群

大數據

HDFS,分佈式文件系統

MapReduce,將數據處理任務拆分為多個工作,通過集群來完成。

Spark,提供分佈式的數據集抽象

下圖是作為程序員最需要了解的分佈式體系:

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

二、微服務專題

微服務架構分為四大模塊,圍繞微服務的通用模式,集合微服務必須要掌握的知識點,使微服務的開發更加方便、快捷,讓微服務應用更加穩定、可用。

微框架

與微服務之間的關係

熱部署實戰

核心組件:Starter、Actuator、AutoConfiguration、Cli

集成Mybaits實現多數據源路由實戰、集成Dubbo實戰、集成Redis緩存實戰

集成Swagger2構建API管理及測試體系

實現多環境配置動態解析

Spring Cloud

Eureka註冊中心

Ribbon集成REST實現負載均衡

Hystrix服務熔斷降級方式

Zuul實現微服務網關

Config分佈式統一配置中心

Sleuth調用鏈路跟蹤

BUS消息總線

基於Hystrix實現接口實現降級

集成Spring Cloud實現統一整合方案

Docker虛擬化

Docker的鏡像、倉庫、容器

Docker File構建的LNMP環境部署個人博客Wordpress

Docker Compose構建LNMP環境部署個人博客Wordpress

Docker網絡組成、路由互聯、Openvswitch

基於Swarm構建 Docker集群實戰

Kubernetes簡介

微服務架構

SOA架構和微服務架構之間的區別和聯繫

如何設計微服務及其設計原理

解惑Spring Boot流行因素及能夠解決什麼問題

什麼事Spring Cloud,為何要選擇Spring Cloud

基於全局分析Spring Cloud各個組件所解決的問題

下圖是作為程序員最需要了解的微服務體系:

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

三、併發編程專題

Java線程

線程模型

Java線程池

Future(各種Future)

Fork/Join框架

volatile

CAS(原子操作)

AQS(併發同步框架)

synchronized(同步鎖)

併發隊列(阻塞隊列)

下圖是作為程序員最需要了解的併發編程體系:

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

四、工程化專題

工欲善其事必先利其器,工具對Java程序員的重要性不言而喻現在有很多庫、實用工具和程序任Java開發人員選擇。下圖列出的工具都是程序員必不可少的工具

下圖是作為程序員最需要了解的工程化體系:

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

五、源碼分析專題

程序員每天都和代碼打交道。經過數年的基礎教育和職業培訓,大部分程序員都會「寫」代碼,或者至少會抄代碼和改代碼。但是,會讀代碼的並不在多數,會讀代碼又真正讀懂一些大項目的源碼的,少之又少。這種怪狀,真要追究起來,怪不得程序員這個群體本身 —— 它是兩個原因造成的。

我們所有的教育和培訓都在強調怎麼寫代碼,並沒有教大家如何讀代碼

大多數工作場景都是一個蘿蔔一個坑,我們只需要瞭解一個系統的局部便能開展工作,讀不相干的代碼,似乎沒用

我常常把寫代碼和寫作進行類比 —— 二者有很多相通之處;但從培養寫代碼和寫作的過程來看,二者又有很多不同。我們的寫作能力,是建立在大量基礎閱讀的基礎上的,是除了學習語法和文法知識外,從小學開始,經年累月,通過閱讀各種不同層次的名家的作品,再加上各種各樣的寫作訓練,累積出來的;而我們的寫代碼的能力,在瞭解和掌握了語法/文法之後(學習和抄寫 example 代碼也算語法/文法學習的一部分),跳過了大量閱讀名家作品的過程,直接 biu 地一下就自動養成了:學會基礎的語法和試驗了若干 example 後,我們就火箭般躥到了自己寫代碼打怪贊經驗的階段。這樣略過大量閱讀代碼的階段有三個害處:

寫代碼的基礎是不牢靠的,打怪升級的過程也是最慢的。道理很簡單 —— 前輩們踩過的坑,總結的經驗教訓,你都不得不親自用最慢的法子一點點試著踩一遍。

很容易養成 stackoverflow driven 的寫代碼習慣 —— 遇到不知如何寫的代碼,從網上找現成的答案,找個高票的複製粘貼改吧改吧,湊活著完成功能再說。寫代碼的過程中遇到問題,開啟調試模式,要麼設置無數斷點一步步跟蹤,要麼到處打印信息試圖為滿是窟窿的代碼打上補丁,導致整個寫代碼的過程是一部調代碼的血淚史。(見我的文章:你要避免的軟件開發模式)

你周圍最強的那個工程師的開發水平的上限就是你的上限。

下圖是作為程序員最需要了解的源碼體系:

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

六、性能優化

性能優化,簡而言之,就是在不影響系統運行正確性的前提下,使之運行地更快,完成特定功能所需的時間更短。性能問題永遠是永恆的主題之一,而優化則更需要技巧。

下圖是作為程序員最需要了解的性能優化體系:

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

這些知識點都是我從業多年總結出來的的經驗,都是當前最主流的技術。想學習這些技術的朋友可以加群:454377428。群裡會分享這些技術知識點供大家學習免費下載

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀

Java技術大牛化身老司機帶你彎道超車,成為架構師必看知識點解讀


分享到:


相關文章: