Java進階高級
朋友從你問出這個問題的時候,就說明你還沒有對於擔任成架構師這個職位做好準備?不是嗎?架構師難道是簡簡單單的技術上的牛X嗎,個人認為和個人的認知有好大的關係。當我們認為自己是一名架構師了,那麼你就是一個架構師,即使你乾的是做平常的編碼工作,即使你有很多的盲點沒有掌握,即使你拿的工資比普通員工還要少。首先只要自己認可了自己,然後賣出第一步找準合適的職位,那麼下一刻你就是架構師。
架構師速成記
架構師是程序員發展的目標方向之一,架構師決定了軟件的整體解決方案是科技公司中的重要崗位。一個項目通常由產品經理、主策、架構師、項目經理、軟件工程師、視覺工程師、交互工程師、測試工程師共同完成,不同職位完成不同的任務。
要了解架構師需要具備哪些技能,首先要明確架構師的任務是什麼,要描述架構師的任務,我們首先從一個項目的分工開始說起。
項目開發流程
一個項目往往由產品經理發起,產品經理決定了產品的基因和靈魂,所以說產品經理是決定產品成功與否的核心因素。當產品經理把產品的想法、定位和功能交給主策時,主策需要進一步完善產品的細節部分,主策要出一份策劃案交給視覺工程師和交互工程師。交互工程師和視覺工程師會在最短的時間內出一份產品模型,簡單的說就是不帶數據“空跑”的交互模型。產品經理和主策會根據交互模型進一步對產品進行“定型”,這個步驟可能會反覆進行多次。
“定型”之後的方案會交給架構師,架構師出技術方案。技術方案會交給項目經理,項目經理會根據技術方案來組件研發團隊,此時測試工程師也會進駐項目組。
在產品定型的初期需要產品經理、主策、架構師、視覺工程師、交互工程師共同參與,因為很多時候產品經理的設計存在一些技術壁壘,此時需要架構師及時提出解決方案,如果沒有解決方案則需要調整產品的設計,以避免項目延期這樣的嚴重問題。
架構師的任務
在產品開發流程中架構師是決定技術方案的核心角色,所以一個產品的最終性能主要取決於架構師的設計方案。有的大型軟件企業會把架構師進行細分,有前端架構師、後端架構師、安全架構師、數據庫架構師等等,這樣一個項目中需要不同領域的架構師進行協同工作,最終出一個合理的解決方案。
架構師最終出的是一個技術解決方案,方案中要針對核心部分給出解決思路和模塊測試的目標性能,在項目進行過程中要隨時根據測試工程師給出的測試結果進行項目指導。甚至很多內容是直接由架構師親自完成,這裡面主要是關乎性能的技術手段。
架構師定好解決方案的整體框架之後交給項目經理,項目經理根據方案來組件合適的技術團隊。技術團隊根據項目經理分配的任務進行開發,測試工程師隨時進行功能測試以保證功能的完整性。項目經理則要保證項目開發週期在可控的範圍內,此時的架構師要頻繁與測試工程師和項目經理進行交互,時刻關注項目的整體進度。
架構師的知識儲備
作為給出解決方案的核心角色,架構師需要具備充足的知識儲備。國內大部分架構師都出身自程序員,在大量的實際項目中積累了豐富的經驗,同時還要不斷學習新的技術方案。對架構師來說學習能力是非常重要的,能夠站在一個比較高的角度來俯視整個項目,並且能對未來發展有一定的預判,這樣的產品才能有競爭力。
以我個人經驗來說,作為一個軟件架構師至少應該具備以下能力:
- 較強的編碼能力,有豐富的編碼經驗。
- 瞭解多種解決方案的細節和性能指標。
- 對不同的目標人群的使用習慣有深刻的認識。
- 對不同的行業領域(金融、交通、政務等)有深刻的認識。
- 具備較強的學習能力。
- 具備較強的英語能力。
- 具備較強的文字表達能力和溝通能力。
作為架構師更需要不斷的學習和交流,所以架構師經常要出席不同的產品說明會,以瞭解不同產品的特點和性能指標。
以上就是我對軟件架構師的一些認識,不足之處在所難免,歡迎大家指正。
IT人劉俊明
IT行業以“技”服人,架構師是技術大牛,一個技術團隊的核心 ,需同時兼具技術的廣度與深度。一個能擔負起企業級應用的架構師,腦海裡常出現的詞會是這些:負載均衡、集群、分佈式、高併發、高可用、易管理等等。
粗略說來,架構師需要掌握的十四個主要技術能力如下:
一、集合框架(源碼)
- List
- ArrayList
- LinkedList
- Set:HashSet、TreeSet
- Map:TreeMap、ConcurrentHashMap
- Queue:ConcurrentLinkedQueue
- Stack
- Collection的synchronized等方法
二、工具類
- Google guava(推薦)
- Apache common lang/BeanUtils/Collctions/IO
- JSON
- fastjson
- gson
- jackson
三、框架
- Spring:IOC、AOP、常用註解
- SpringMVC
- Mybatis
- Shiro
- Netty
四、安全
- 單項散列算法:MD5、SHA
- 對稱加密:DES
- 非對稱加密:RSA、HTTPS
五、JVM
- Java虛擬機(Hotspot實現)
- 類加載機制
- 內存模型
- GC:回收算法、垃圾收集器
- 調優
- 工具:jstack、jmap、jconsole
六、併發編程
- Executor框架
- Fork/join
- happen-before
- 數據結構:ConcurrentHashMap
- 線程池:參數設置、原理、拒絕策略
- 線程狀態
- Lock/synchronized
- 原子操作類
- 併發工具類:CountDownLatch、Semaphore、CyclicBarrier、Exchanger
- IO、BIO、AIO、NIO
七、數據
NoSQL:MongoDB
分佈式緩存:Memcached、Redis(推薦)
關係數據庫
- MySQL
- 引擎
- InnoDB(支持事務)
- 分庫分表
- Cobar
- Mycat
八、SQL優化
- 索引
- 主鍵索引
- 組合索引
- explain
- 存儲過程
SQL注入:使用#而不使用$
九、事務隔離級別(ACID)
- 原子性
- 一致性
- 隔離性
- 持久性
十、鎖
- 表鎖
- 行鎖
- 悲觀鎖
數據庫設計
十一、搜索引擎
Luecene
Solr
ElasticSearch
十二、大數據
- Hadoop
- Hbase
- Spark
- Storm/JStorm
十三、算法與數據結構
- 數組
- 鏈表
- 棧
- 隊列
- 樹
- 二叉樹
- B Tree/B+ Tree
- 紅黑樹
- 哈希
十四、分佈式系統
- 從集中到分佈式
- 分佈式Session:Session複製、Session綁定、Session服務器(靠譜)
- 分佈式緩存:Redis、一致性Hash算法
- 數據庫:讀寫分離、主從熱備、分庫分表、一致性
- 分佈式事務、CAP、BASE、2PC/3PC
- 分佈式鎖
- Redisson
- 負載均衡、硬件、F5、軟件、LVS、Nginx
- 消息隊列:RabbitMQ、ZeroMQ、ActiveMQ、Kafka(推薦)
- 服務化:服務註冊與發現、Zookeeper
- 架構
- 微服務
- Spring Boot
- Dubbo
- RPC
- SOA
- 虛擬化
- Docker
以上,是架構師必備的主要技術能力。以下,是架構師進階專題合集,將關鍵詞【架構】私信給優知學院,立即秒收~
優知學院
我見過的架構師有兩種,一種是碼農一步步成長蛻變成的架構師,一種是PPT架構師。
我希望大家都能成為前者。
我現在差不多能算半個架構師,為啥是半個,因為本身是要帶項目的,但是也會負責產品線內其他項目的架構設計和評審工作,姑且算是半個吧。我分享一下我的看法,如果有不對的地方歡迎大家留言指正。
技術
單位中,不管是我這種半個架構,還是轉職的架構,都是技術出身的,甚至現在也會寫一些代碼,所以技術能力是必不可少的。
深入瞭解一門語言,對其他的一些編程語言也瞭解過一些。
編碼能力一定要過關,有些時候甚至會要求架構師親自上陣寫代碼的。
深入的學習過一些主流的框架,有些甚至需要研究到源碼的級別。架構嘛,技術一定得是要過關的。成長的道路上,誰還沒研究過一些源碼。
熟悉大多數流行的框架、中間件,達不到深入研究源碼的程度,但是至少使用過、優缺點是什麼、使用場景是什麼。這樣在架構設計的過程中,可以根據實際的需要,選擇合適的技術。
業務
在一個業務領域,有著一定的業務知識儲備。比如一個銀行業務的機構師,去一個電商網站做架構設計,肯定玩不轉喲。
需求分析能力:所有的機構設計,都是在瞭解用戶的業務流程之後,才開始做的。要充分的理解用戶到底想要什麼功能,再去設計怎麼實現這些功能。甚至有些時候用戶自己都不知道要什麼,需要架構幫他們去思考、去設計。
業務抽象能力:業務功能最後要是要用代碼來實現,架構師需要對系統中的各種子系統、模塊,以及它們之間的關係、如何交互等行為,進行抽象;用知識和經驗來解決實際的業務問題。
其他
溝通能力:和用戶、需求溝通,和領導溝通,和項目經理溝通,和開發人員溝通。
文檔和畫圖能力:溝通明白了,還是要落實在文檔上,特別是畫圖的能力,很重要,趕緊下一個Visio好好練練。
提出問題、提出質疑的能力:我就屬於聽到用戶的需求,容易說“行行行,好好好,可以實現”。其實用戶提的需求不一定合理,可能花費大量的時間去實現,最後卻不是他們真正想要的東西,要多質疑他們,給他們提更好的解決方案。
學習能力:保持一定的技術敏感度,需要不斷的學習新的技術。比如十年前項目緩存都用的是ehcache,現在都用memcached、redis,說不定再過幾年又有更好的解決方案了。
希望我的回答能夠幫助到你!