王佳冉
網站架構涉及許多技術,
Java程序員想要學習進階成為架構師,需具備與架構師相匹配的技術能力,這是前提和基礎。本篇列舉了架構師的必備技術能力,文末隨附詳細的架構師專題資料。一、計算機基礎
- 操作系統(推薦現代操作系統)
- 編譯原理
- 計算機網絡
- 互聯網協議
- TCP/IP(推薦《TCP/IP協議族》)
- HTTP1.1/2.0
- HTTPS
- OAauth 2.0
- REST
二、集合框架(源碼)
- 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
五、遠程調用(RPC)
- rmi
- Thrift
- Dubbo(Dubbox)
- 服務器治理,也可以作為微服務
- gRPC
六、構建
- Maven:推薦《Maven實戰》
- Gradle
七、安全
- 單項散列算法: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)
- 原子性
- 一致性
- 隔離性
- 持久性
十三、鎖
- 表鎖
- 行鎖
- 悲觀鎖
數據庫設計
十四、範式
- 第一範式
- 第二範式
- 第三範式
- E-R圖
十五、搜索引擎
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
以上,是架構師必備的技術能力,以下,是架構師進階專題(已更新至80期),將關鍵詞【架構】私信給優知學院,全部秒收~
優知學院
一: 編程基礎
不管是C還是C++,不管是Java還是PHP,想成為一名合格的程序員,基本的數據結構和算法基礎還是要有的。下面幾篇文章從思想到實現,為你梳理出常用的數據結構和經典算法。
1-1 常用數據結構
數組、鏈表、堆、棧、隊列、Hash表、二叉樹等
1-2 算法思想
算法時間複雜度和空間複雜度的分析計算
算法思想:遞推、遞歸、窮舉、貪心、分治、動態規劃、迭代、分枝界限
1-3 經典算法
經典排序:插入排序、冒泡排序、快排(分劃交換排序)、直接選擇排序、堆排序、合併排序
經典查找:順序查找、二分查找、二叉排序樹查找
1-4 高級數據結構
B+/B-數、紅黑樹、圖等
1-5 高級算法
圖的深度優先搜索、圖的廣度優先搜索、拓撲排序、Dijkstra算法(單源最短路徑)、霍夫曼編碼、輾轉相除法、最小生成樹等
二:Java語言基礎
誕生不過二十餘年的Java語言憑藉其跨平臺、面向對象、適合於分佈式計算的特性,廣泛應用於Web網站、移動設備、桌面應用中,並且已經連續多年穩居TOBIE編程語言排行榜前列,最近更是登上冠軍寶座。Java有哪些優秀而又與眾不同的地方首先一定要清楚。
2-1 基礎語法
Java語法格式,常量和變量,變量的作用域,方法和方法的重載,運算符,程序流程控制,各種基本數據類型及包裝類
2-2 重要:集合類
Collection以及各種List、Set、Queue、Map的實現以及集成關係,實現原理
Collections和Arrays
2-3 其他JavaAPI
String和StringBuffer,System和Runtime類,Date和DateFomat類
java.lang包
java.util包(集合類體系、規則表達式、zip,以及時間、隨機數、屬性、資源和Timer等)
java.math包
java.net包
java.text包(各種格式化類等)
java.security包
2-4 面向對象、面向接口
對象的三大特性:封裝、繼承和多態,優缺點
如何設計類,類的設計原則
this關鍵字,final關鍵字,static關鍵字
對象的實例化過程
方法的重寫和重載;方法和方法的參數傳遞過程
構造函數
內部類,抽象類,接口
對象的多態性(子類和父類之間的轉換、父類紙箱子類的引用),抽象類和接口在多態中的應用
2-5 JVM內存模型、垃圾回收
2-6 關於異常
Throwable/Error/Exception,Checked Exception vs. Unchecked Exception,異常的捕捉和拋出,異常捕捉的原則,finally的使用
2-7 多線程
線程和進程的概念
如何在程序中創建多線程,線程安全問題,線程之間的通訊
線程的同步
死鎖問題的剖析
線程池
2-8 IO
java.io包,理解IO體系的基於管道模型的設計思路以及常用IO類的特性和使用場合。
File及相關類,字節流InputStream和OutputStream,字符流Reader和Writer,以及相應緩衝流和管道流,字節和字符的轉化流,包裝流,以及常用包裝類使用
分析IO性能
2-9XML
熟悉SAX、DOM以及JDOM的優缺點並且能夠使用其中的一種完成XML的解析及內容處理;這幾種解析方法的原理
2-10 一些高級特性
反射、代理、泛型、枚舉、Java正則表達式
2-11 網絡編程
網絡通信協議原理及適用場景,Socket編程,WEB服務器的工作原理
2-11 JDK1.5、JDK1.6、JDK1.7、JDK1.8每個版本都比前面一個版本添加了哪些新特性,進行了哪些提升
三:數據庫相關
前面說到了數據結構,數據庫簡單來說就像是電子化的檔案櫃,是按照一定的數據結構來組織、存儲和管理數據的倉庫。
3-1理論基礎
數據庫設計原則和範式
事務(ACID、工作原理、事務的隔離級別、鎖、事務的傳播機制)
3-2 各種數據庫優缺點、使用場景分析
MySQL/SQLServer/Oracle以及各種NoSQL(Redis、MongoDB、Memcached、HBase、CouchDB等)
3-2 SQL語句
數據庫創建,權限分配,表的創建,增刪改查,連接,子查詢
觸發器、存儲過程、事務控制
3-3 優化
索引原理及適用,大表查詢優化,多表連接查詢優化,子查詢優化等
3-4 分庫、分表、備份、遷移
導入、導出,分庫、分表,冷備熱備,主從備份、雙機熱備、縱向擴展、橫向擴展
3-5 JDBC
JDBC Connection、Statement、PreparedStatement、CallableStatement、ResultSet等不同類的使用
連接池(配置使用、實現原理)
ORM,DAO
四:JavaWeb核心技術(包括部分前端)
Html5/Css/JS原生/jQuery
Ajax(跨域等)
JSP/JavaBean/Servlet/EL/JSTL/TabLib
JSF
JSON
EJB
序列化和反序列化
規則引擎
搜索引擎
模板引擎
緩存
身份認證
測試
集群
持久化
生成靜態頁技術
高性能
安全
事務JTA
其他需要了解的,如:管理JMX、安全JCCA/JAAS、集成JCA、通信JNDI/JMS/JavaMain/JAF、SSI技術
五、主流框架及工具
Struts1/Struts2
Spring(IoC、AOP等),SpringMVC
持久化:Hibernate/MyBatis
日誌:Log4j
單元測試:JUnit
消息隊列:ActiveMQ、RabbitMQ等
負載均衡:Nginx/HaProxy
Web服務器:Tomcat、JBoss、Jetty、Resin、WebLogic、WebSphere等
通信:WebService(cxf的soap、restful協議)
緩存:Redis、Memcached
工作流:Activity、JBPM
搜索引擎:lucene,基於lucene封裝的solr
模板引擎:Velocity、FreeMaker
大數據:Hadoop(HDFS和MapReduce)
構建工具:Ant/Maven
六、JavaWeb系統設計與架構
Java設計模式
JAVA與UML建模
面向服務架構:SOA/SCA/ESB/OSGI/EAI,微服務
成都朗沃教育
1 首先是一個合格的程序員。
2 真正懂軟件,懂軟件工程,而不知是考試做題。可以獨立完成一個產品,並服務客戶產生收益。
3 需要伯樂,給你一個超出一個人完成的項目,你兢兢業業險些在deadline前完成了產品。
4 不斷有新的挑戰。