本文旨在梳理服務端開發技術棧,但願幫助後端開發同窗更全面瞭解Java服務端主要涉及的知識點html
核心知識點前端
Java的類加載機制java
JVM相關:JVM內存模型和結構,GC原理,性能調優mysql
泛型linux
集合體系ios
異常體系nginx
IO體系git
多線程編程redis
反射算法
Servlet
推薦數據
《Java編程思想》
《Effective Java》
《深刻理解Java虛擬機》
介紹
此類腳本語言的意義在於輔助後端開發,包括系統運維,工具集成(藉助管道、重定向),文本處理,數據計算等工做,提高後端工做效率
核心知識點(Shell)
經常使用的linux操做和運維命令
管道、重定向
awk、sed等文本處理工具
推薦書籍
《linux與unix shell編程指南》
《Python編程 從入門到實踐》
介紹
通用於傳統關係型數據庫和大數據場景的結構化查詢模型語言。傳統數據庫方面要精通mysql的sql語法;大數據場景主要掌握Hive SQL(Impala和Spark SQL等均在兼容Hive SQL)
核心知識點
區分DDL和DML
經典查詢語句主要結構
錶鏈接(內鏈接,左外鏈接,右外鏈接,全鏈接)
函數(普通函數,聚合函數)
索引
分區
適用場景
傳統數據庫,傳統SQL:用於事務性數據操做,一般用於系統的業務庫;
大數據場景下的SQL:用於數據分析,交互式查詢,批量數據處理等。
推薦書籍
MySQL:《高性能MySQL》
Hive SQL:《Hive編程指南》
核心知識點
配置良好代碼風格模板,包括文件註釋,類註釋,方法註釋,縮進換行等
安裝使用必要的插件:代碼規範檢查插件(Alibaba Java Coding Guidelines),源碼潛在bug檢查插件(pmd),字節碼潛在bug檢查插件(findbugs)等
核心知識點
maven 倉庫
maven pom.xml文件配置
maven 構建的生命週期
maven 插件
能力要求
學會配置maven多級工程結構
可以解決工程構建中經常出現的jar包衝突等問題
熟練使用maven
推薦書籍
《Maven實戰》
介紹
git是一個開源的分佈式版本控制系統,經過規範化的工具和流程,使得開發者之間高效協同,保持產品穩定運行
推薦文章
核心知識點
Spring框架的模塊組成
IOC和AOP的設計思想和實現原理
Bean的做用域和生命週期
參考說明
有條件地閱讀spring核心模塊的代碼,debug Spring框架的啓動和Bean服務的過程是比較好的理解spring原理的方式
最新的版本更新和參考文檔能夠直接瀏覽 Spring官網
mybatis介紹
持久層框架,經過xml映射的方式,使得開發者主要關心sql實現便可,由框架實現從實體到java類的映射,數據訪問層服務實現,訪問優化等等
核心知識點
熟練配置使用mybatis,掌握mapper xml的寫法
會使用mybatis-generator的mvn插件自動生成DAO層代碼和xml配置
理解mybatis的1、二級緩存,瞭解sql session建立過程和sql執行過程
推薦資料
最新的版本更新和參考文檔能夠直接瀏覽 Mybatis官網
核心能力要求
熟練使用Junit/TestNG進行單元測試,接口測試
學會藉助Mockito解決外部系統,模塊依賴的mock測試
學會使用maven的surfire plugin和jacoco plugin等插件,度量測例的經過率,測試代碼覆蓋率等指標
典型:redis/memcache
核心知識點
redis配置策略(持久化策略,替換算法等)
redis的部署模式(standalone單機,sentinel哨兵,cluster集羣),哨兵的本質是主從切換,cluster是真正的分佈式部署能夠線性擴展內存資源
redis支持的數據結構
適用場景
分佈式session存儲,數據緩存,分佈式鎖,簡單的消息隊列,計數器(累加器)
典型:rabbitmq/kafka
核心知識
兩種集羣模式對比:普通集羣和鏡像集羣(HA)
kafka
基於zk的分佈式拓撲結構
理解kafka支持的消息的寫入流程,寫入模式,消息的存儲模式,消息的消費方式等
rabbitmq
適用場景
消息中間件通常適用於:系統之間須要高度解耦;異步傳輸數據(非阻塞);保證數據傳輸過程當中數據能夠持久化,解決生產端和消費端能力不一致的問題,避免峯值數據對下游服務節點的衝擊等
對比rabbitmq和kafka: rabbitmq主要適用數據可靠性,一致性要求比較高的場景;kafka主要適用數據吞吐量比較的場景,如日誌數據的實時傳輸等
典型:網易nos/阿里雲oss
適用場景
存儲須要在分佈式架構下共享的文件對象:如前端靜態文件,圖片資源,大文件資源等
典型:阿里dubbo
核心知識點
註冊中心,服務註冊、服務發現、負載均衡、序列化、反序列化、編碼、解碼等核心概念
適用場景
在相對複雜的應用服務網絡中,扮演服務治理,服務解耦,負責均衡,簡化服務調用方式的做用
典型:tomcat/jetty等
介紹
本質上是一個servlet容器,便可以在其上運行Java Web的應用程序
介紹
nginx本質上是一個的HTTP和反向代理服務器
適用場景
http服務器,反向代理,軟負載均衡器等
典型: MYSQL/ORACLE
核心知識點
索引
事務與事務隔離級別
存儲方法
觸發器
不一樣關係型數據庫的SQL差別
推薦書籍
《高性能MySQL》
《Oracle從入門到精通》
核心能力要求
瞭解大數據體系總體的框架、組成
熟悉各類大數據存儲,計算框架,查詢引擎等主要的架構、功能和適用場景
可以在項目的架構過程當中進行合理的大數據技術方案選型
介紹:
* 權限相關涉及到:身份認證,鑑權,權限管理等
核心知識點:
RBAC(基於角色的權限控制)模型
理解OAuth 2.0的設計思想和運行流程
介紹
在後端開發中須要關注不少的安全問題,這些安全問題可能來自惡意的攻擊,也可能來自系統自己的安全性和健壯性不足。防止應用安全漏洞產生的前提是理解常見的漏洞概念、原理以及產生的緣由
核心知識點
水平權限和垂直權限漏洞,以及在程序開發中怎樣避免
SQL注入攻擊(mybatis預編譯能夠避免)
經常使用的限流策略
CSRF 攻擊
XSS 攻擊
核心知識點
Log4j、Logback、SLF4J之間的關係,應用中不可直接使用日誌系統(Log4j、Logback)中的API,而應依賴使用日誌框架SLF4J中的API
日誌的等級(error/warn/info/debug)
日誌的保留時間
核心知識點
異常的分類,正確區分異常處理方式
異常處理原則
學會藉助spring框架等,將異常轉爲對用戶或者調用方更加友好的錯誤碼和錯誤信息
介紹
restful在目前是使用較多的接口設計和服務間依賴http接口設計的主要原則,基於良好的約定規範,能夠使得接口簡單易懂,提升團隊協做的效率
推薦文章
核心知識點
系統問題排查:學會使用w/uptime、top、df、netstat、iostat以及各類可視化監控工具排查本機的負載、磁盤、內存、網絡等系統問題
應用問題排查:學會依據應用系統錯誤日誌以及jps、jinfo、jstat、jstack、jmap以及各類可視化監控工具,排查應用系統問題
數據庫問題排查:學會藉助mysql慢查詢日誌、explain以及各類可視化工具排查mysql使用過程當中的各類問題
網絡問題排查:學會藉助telnet、ping、wget、nc等工具排查網絡問題
核心知識點
Java線程相關接口和類的實現和關係
Java線程池
線程同步,鎖等
核心知識點
掌握http協議消息體劃分、鏈接和通訊過程
掌握http主要的返回狀態碼意義
掌握https協議的鏈接和通訊過程
核心知識點
單例模式
策略模式
代理模式
觀察者模式
裝飾模式
適配器模式
組合模式
工廠模式
模板方法模式
...
單一職責原則
里氏替換原則
依賴倒置原則
接口隔離原則
迪米特法則
開閉原則
組合/聚合複用原則
七大設計原則
一些經常使用的設計模式
核心知識點
Quartz,基於數據庫鎖的搶佔式分佈式定時器
基於數據庫
基於緩存
基於zookeeper
一致性理論
分佈式事務解決方案
一致性模型
CAP定理
BASE 理論
強一致性
弱一致性
最終一致性
eBay 事件隊列方案
TCC (Try-Confirm-Cancel)補償模式
緩存數據最終一致性
強一致性(兩段提交和三段提交模型, Paxos或者Raft算法)
最終一致性
SOA
微服務
Servless
分佈式系統架構設計
分佈式事務
分佈式鎖
分佈式定時器