如何成爲一名架構師?
想成爲一名架構師,首先第一點必然是你的技術足夠優秀,知識的深度和廣度足夠,遇到問題能很快從腦海中尋找出最合適的解決之道.其次,架構師會從整體上領導項目,與人打交道必不可少,因此與人溝通這些軟技能也必不可少,當然,這個因人而異,有些人天生更會與人打交道,但無論如何,技術足夠優秀是基本條件.當然,想成爲一名優秀的架構師,實際開發經驗是必不可少的,沒有多年架構師的經驗也不行,但至少,我們想成爲一名架構師,理論知識得先掌握不是嗎?否則談何實踐呢?因此,我總結了一張JAVA架構師進階學習圖譜:
當然還有許多技術和技能也是需要的,比如:架構師要進行文檔輸出,會需要畫相關的圖,常見的比如:流程圖/用例圖/時序圖/泳道圖/狀態圖/協作圖等等(回憶一下這些課程在大學的時候是不是老師都講過?只是我們當時不在意罷了,至少筆者是這樣的,哈哈~).再比如java反射機制及其相關API,高性能NIO---Netty框架等等.如果是大數據相關還需要我們瞭解flink/blink/spark/hadoop/hbase,不一定全都要會,但是至少腦子裏面要有個概念,這個技術是幹嘛用的,以至於別人說的時候能聽得懂.至於爲什麼沒有畫在上面的圖中,是因爲筆者後續的文章只准備寫圖中的內容,其餘的留給童鞋們自己去學習吧.當然,因爲博客篇幅所限,每種技術不可能百分百把所有知識點都講到,但是保證講的全部都是乾貨,能讓讀完的童鞋有所收穫!
架構師應該關注什麼?
這個問題,換句話說,是我們在進行架構設計的時候應該關注什麼,筆者認爲從大的層面來講分兩類,功能性需求以及非功能性需求,細分的話有以下六個方面:
1.功能
記得我的老師曾說過,功能是0,其餘的是1,再牛逼的架構師,如果不滿足功能,再牛逼的設計也是沒用的,只有在滿足功能的前提下,其他的設計纔有用.
2.性能
對現代系統來說,響應時間越短就越可能留住用戶,畢竟誰會忍受打開一個頁面要等待10秒甚至幾分鐘呢?至少筆者在訪問任何網站的時候,一個網頁加載5秒以上就直接關了.常用的性能指標有QPS(每秒查詢速率)/TPS(每秒事務處理率).當然,性能需要在系統開發完成後進行預發環境(和生產環境一樣的環境)測試,常用的性能測試工具有apachebench(簡稱ab)/http_load/jmeter等等.QPS也遵循28原則,一天中80%的訪問量集中在20%的時間內,可以據此估算網站的QPS,從而規劃服務器配置,如果性能不達標,則需要優化,常見的優化手段有加機器(簡單粗暴),前端優化(CDN/動靜分離/減少請求次數/),後端代碼優化,緩存(如redis),JVM優化.
3.可用性
可用性是對現代分佈式系統來說,當其子系統有一個或幾個節點宕機的時候,是否還能繼續提供正常的服務.常用的手段是集羣以及自動故障轉移,幾乎所有分佈式系統中使用的技術都支持高可用,比如緩存redis官方提供redis-cluster集羣,MongoDB分片集羣,消息中間件(ActiveMQ/RabbitMQ/kafka/RocketMQ)集羣,數據庫MySQL集羣等等,如果對以上全部都瞭解的童鞋,總結一下,會發現它們的核心思想都一樣,通過集羣提供數據冗餘,再通過自動發現並且故障轉移機制保證組件的高可用.
4.伸縮性
伸縮性是指當系統容量不夠或者多餘的時候,是否能方便的進行擴容/縮容處理,很多大公司這方面都做的很好,比較好的策略是容器化,使用docker+k8s進行部署管理,可以方便的進行擴容或者縮容處理,能更好的合理利用資源.
5.擴展性
擴展性是指當有需求發生變更或者新增的時候,是否能在不改代碼或者改動很少代碼的情況下就能實現功能.擴展性相當考驗一個架構師的功力,筆者看來,想設計一個擴展性很好的系統,除了事先考慮,在合適的情景下使用設計模式也是相當好的方案,因此對架構師而言,設計模式很重要!舉個例子,有一個上傳服務,使用FTP協議進行上傳,我們基於apach ftpClient封裝了一套接口,此時另外有一個需求,是需要使用SFTP協議,我們又使用jsch封裝了另一套接口,那假如後續又有新的協議呢?每新增一個協議就需要我們新增代碼來適配,這個時候使用適配器模式是不是就能很好的解決問題呢?這也符合設計模式的思想,面向接口編程,以後新增一個協議,我們只需要新增一個實現類,而不會改動原有代碼,是不是在代碼改動最少的情況下滿足了需求呢?
6.安全性
一個網站,如果是用戶訪問量很大的情況下,很容易遭到網絡黑客的攻擊,常見的攻擊手段包括:
6.1 XSS攻擊
常見的防禦手段是消毒(不信任用戶輸入,對輸入進行嚴格校驗和過濾,比如使用"<"代替"<"等等).
6.2 SQL注入攻擊
以前我們使用JDBC的時候,使用Statement會導致SQL注入攻擊,因此後面有了PreparedStatement預編譯的方式來防止SQL注入攻擊,並且大量查詢的情況下PreparedStatement 效率更高.
6.3 CSRF攻擊
跨站請求僞造,攻擊者盜用受害者cookie,以受害者的名義發送惡意請求,常見的防禦方式有:表單提交驗證碼(用戶體驗相對不友好),URL帶token驗證,HTTP referer驗證等.
6.4 DDOS攻擊
分佈式拒絕服務攻擊,DOS攻擊的進階版,防禦難度很高,並且方案也相對複雜,業界比較厲害的是阿里,多次雙11大促都抗住了,畢竟阿里有道哥(吳翰清,阿里最年輕的P8,神一樣的存在)及其領導的安全小組的存在.
福利
小編整理出一篇Java進階架構師之路的核心知識,同時也是面試時面試官必問的知識點,篇章也是包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多線程併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分佈式緩存、數據結構等等
小編已將文檔整理打包好,由於細節內容太多,小編只展示文檔的目錄內容給大家看,需要整本文檔的程序員(媛)小夥伴可以 轉發+關注小編 後臺回覆“文檔”免費獲取哦
JVM
- 線程
- JVM內存區域
- JVM運行時內存
- 垃圾回收與算法
- JAVA 四種引用類型
- GC分代收集算法 VS 分區收集算法
- GC垃圾收集器
- JAVA IO/NIO
- JVM 類加載機制
由於篇幅限制小編,細節內容實在太多啦,所以只把部分知識點截圖出來粗略的介紹,每個小節點裏面都有更細化的內容!有需要的程序猿(媛)可以幫忙轉發+關注私信(文檔)獲取哦
JAVA集合
- 接口繼承關係和實現
- List
- ArrayList(數組)
- Vector(數組實現、線程同步)
- LinkList(鏈表)
- Set
- HashSet(Hash表)
- TreeSet(二叉樹)
JAVA多線程併發
- JAVA併發知識庫
- JAVA線程實現/創建方式
- 4種線程池
- 線程生命週期(狀態)
- 終止線程4種方式
- sleep與wait 區別
- start與run區別
- JAVA後臺線程
- JAVA鎖
- 編程基本方法
- 同步鎖與死鎖
- 線程池原理
- JAVA阻塞隊列原理
- CyclicBarrier、CountDownLatch、Semaphore的用法
- volatile關鍵字的作用(變量可見性、禁止重排序)
- 如何在兩個線程之間共享數據
JAVA基礎
- JAVA異常分類及處理
- JAVA反射
- JAVA註解
- JAVA內部類
- JAVA泛型
- JAVA序列化(創建可複用的Java對象)
- JAVA複製
Spring 原理
- Spring 特點
- Spring 核心組件
- Spring 常用模塊
- Spring 主要包
- Spring 常用註解
- Spring第三方結合
- Spring IOC原理
- Spring APO原理
- Spring MVC原理
- Spring Boot原理
- JPA原理
- Mybatis緩存
- Tomcat架構
由於篇幅限制小編,細節內容實在太多啦,所以只把部分知識點截圖出來粗略的介紹,每個小節點裏面都有更細化的內容!有需要的程序猿(媛)可以幫忙轉發+關注私信(文檔)獲取哦
微服務
- 服務註冊發現
- API 網關
- 配置中心
- 事件調度(kafka)
- 服務跟蹤(starter-sleuth)
- 服務熔斷(Hystrix)
- Hystrix斷路器機制
- API管理
Netty 與RPC
- Netty 原理
- Netty 高性能
- Netty RPC實現
- 關鍵技術
- 核心流程
- 消息編解碼
- 通訊過程
- RMI實現方式
網絡
- 網絡7層架構
- TCP/IP原理
- TCP三次握手/四次揮手
- HTTP原理
- CDN 原理
- 分發服務系統
- 負載均衡系統
- 管理系統
日誌
- Slf4j
- Log4j
- LogBack
- Logback優點
- ELK
Zookeeper
- Zookeeper概念
- Zookeeper角色
- Zookeeper工作原理(原子廣播)
- Znode有四種形式的目錄節點
Kafka
- Kafka概念
- Kafka數據存儲設計
- partition的數據文件(offset,MessageSize,data)
- 數據文件分段segment(順序讀寫、分段命令、二分查找)
- 數據文件索引(分段索引、稀疏存儲)
- 生產者設計
- 負載均衡(partition會均衡分佈到不同broker上)
- 批量發送
- 壓縮(GZIP或Snappy)
- 消費者設計
RabbitMQ
- RabbitMQ概念
- RabbitMQ架構
- Exchange 類型
負載均衡
- 四層負載均衡 vs 七層負載均衡
- 負載均衡算法/策略
- LVS
- Keepalive
- Nginx反向代理負載均衡
- HAProxy
數據庫
- 存儲引擎
- 索引
- 數據庫三範式
- 數據庫是事務
- 存儲過程(特定功能的SQL 語句集)
- 觸發器(一段能自動執行的程序)
- 數據庫併發策略
- 數據庫鎖
- 基於Redis分佈式鎖
- 分區分表
- 兩階段提交協議
- 三階段提交協議
- 柔性事務
- CAP
JAVA算法
- 二分查找
- 冒泡排序算法
- 插入排序算法
- 快速排序算法
- 希爾排序算法
- 歸併排序算法
- 桶排序算法
- 基數排序算法
- 剪枝算法
- 回溯算法
- 最短路徑算法
- 最大的數組算法
- 最長公共子序算法
- 最小生成樹算法
Hadoop
- Hadoop概念
- HDFS
- Client
- NameNode
- Secondary NameNode
- DataNode
- MapReduce
- JobTracker
- TaskTracker
- Task
- Reduce Task 執行過程
- Hadoop MapReduce 作業的生命週期
- 作業提交與初始化
- 任務調度與監控。
- 任務運行環境準備
- 任務執行
- 作業完成
Spark
- Spark概念
- 核心架構
- 核心組件
- SPARK編程模型
- SPARK計算模型
- SPARK運行流程
- SPARK RDD流程
- SPARK RDD
雲計算
- SaaS
- PaaS
- IaaS
- Docker
- Openstack
- Namespaces
- 進程(CLONE_NEWPID 實現的進程隔離)
- Libnetwork與網絡隔離
- 資源隔離與CGroups
- 鏡像與UnionFS
- 存儲驅動
由於篇幅限制小編,pdf文檔的詳解資料太全面,細節內容實在太多啦,所以只把部分知識點截圖出來粗略的介紹,每個小節點裏面都有更細化的內容!有需要的程序猿(媛)可以幫忙轉發+關注私信(文檔)獲取哦
如何獲取免費架構學習資料?
資料獲取方式:
關注+轉發後,私信關鍵詞 【文檔】即可免費獲取!