後端開發工程師需要掌握的內容

原文鏈接:https://sq.163yun.com/blog/article/213754960929501184

1. 語言相關

1.1 Java

  • 核心知識點
    • Java的類加載機制
    • JVM相關:JVM內存模型和結構,GC原理,性能調優
    • 泛型
    • 集合體系
    • 異常體系
    • IO體系
    • 多線程編程
    • 反射
    • Servlet
  • 推薦數據
    • 《Java編程思想》
    • 《Effective Java》
    • 《深入理解Java虛擬機》

1.2 Shell、Python等腳本語言

  • 介紹
    • 此類腳本語言的意義在於輔助後端開發,包括系統運維,工具集成(藉助管道、重定向),文本處理,數據計算等工作,提升後端工作效率
  • 核心知識點(Shell)
    • 常用的linux操作和運維命令
    • 管道、重定向
    • awk、sed等文本處理工具
  • 推薦書籍

1.3 SQL 語言

  • 介紹
    • 通用於傳統關係型數據庫和大數據場景的結構化查詢模型語言。傳統數據庫方面要精通mysql的sql語法;大數據場景主要掌握Hive SQL(Impala和Spark SQL等均在兼容Hive SQL)
  • 核心知識點
    • 區分DDL和DML
    • 經典查詢語句主要結構
    • 表連接(內連接,左外連接,右外連接,全連接)
    • 函數(普通函數,聚合函數)
    • 索引
    • 分區
  • 適用場景
    • 傳統數據庫,傳統SQL:用於事務性數據操作,通常用於系統的業務庫;
    • 大數據場景下的SQL:用於數據分析,交互式查詢,批量數據處理等。
  • 推薦書籍
    • MySQL:《高性能MySQL》
    • Hive SQL:《Hive編程指南》

2. 開發工具

2.1 開發IDE Intellij/Eclipse

  • 核心知識點
    • 配置良好代碼風格模板,包括文件註釋,類註釋,方法註釋,縮進換行等
    • 安裝使用必要的插件:代碼規範檢查插件(Alibaba Java Coding Guidelines),源碼潛在bug檢查插件(pmd),字節碼潛在bug檢查插件(findbugs)等

2.2 工程構建 MAVEN

  • 核心知識點
    • maven 倉庫
    • maven pom.xml文件配置
    • maven 構建的生命週期
    • maven 插件
  • 能力要求
    • 學會配置maven多級工程結構
    • 能夠解決工程構建中常常出現的jar包衝突等問題
    • 熟練使用maven
  • 推薦書籍
    • 《Maven實戰》

2.3 版本管理 GIT

  • 介紹
    • git是一個開源的分佈式版本控制系統,通過規範化的工具和流程,使得開發者之間高效協同,保持產品穩定運行
  • 推薦文章

3. 開發/測試框架

3.1 Spring框架體系 Spring MVC/Spring Boot

  • 核心知識點
  • 參考說明
    • 有條件地閱讀spring核心模塊的代碼,debug Spring框架的啓動和Bean服務的過程是比較好的理解spring原理的方式
    • 最新的版本更新和參考文檔可以直接瀏覽 Spring官網

3.2 orm框架 mybatis/hibernate

  • mybatis介紹
    • 持久層框架,通過xml映射的方式,使得開發者主要關心sql實現即可,由框架實現從實體到java類的映射,數據訪問層服務實現,訪問優化等等
  • 核心知識點
    • 熟練配置使用mybatis,掌握mapper xml的寫法
    • 會使用mybatis-generator的mvn插件自動生成DAO層代碼和xml配置
    • 理解mybatis的一、二級緩存,瞭解sql session創建過程和sql執行過程
  • 推薦資料
    • 最新的版本更新和參考文檔可以直接瀏覽 Mybatis官網

3.3 測試框架 Junit/TestNG

  • 核心能力要求
    • 熟練使用Junit/TestNG進行單元測試,接口測試
    • 學會藉助Mockito解決外部系統,模塊依賴的mock測試
    • 學會使用maven的surfire plugin和jacoco plugin等插件,度量測例的通過率,測試代碼覆蓋率等指標

4. 服務端中間件

4.1 key-value存儲系統

  • 典型:redis/memcache
  • 核心知識點
    • redis配置策略(持久化策略,替換算法等)
    • redis的部署模式(standalone單機,sentinel哨兵,cluster集羣),哨兵的本質是主從切換,cluster是真正的分佈式部署可以線性擴展內存資源
    • redis支持的數據結構
  • 適用場景
    • 分佈式session存儲,數據緩存,分佈式鎖,簡單的消息隊列,計數器(累加器)

4.2 消息隊列

  • 典型:rabbitmq/kafka
  • 核心知識
  • 適用場景
    • 消息中間件一般適用於:系統之間需要高度解耦;異步傳輸數據(非阻塞);保證數據傳輸過程中數據可以持久化,解決生產端和消費端能力不一致的問題,避免峯值數據對下游服務節點的衝擊等
    • 對比rabbitmq和kafka: rabbitmq主要適用數據可靠性,一致性要求比較高的場景;kafka主要適用數據吞吐量比較的場景,如日誌數據的實時傳輸等

4.3 分佈式文件存儲

  • 典型:網易nos/阿里雲oss
  • 適用場景
    • 存儲需要在分佈式架構下共享的文件對象:如前端靜態文件,圖片資源,大文件資源等

4.4 服務治理/RPC框架

  • 典型:阿里dubbo
  • 核心知識點
    • 註冊中心,服務註冊、服務發現、負載均衡、序列化、反序列化、編碼、解碼等核心概念
  • 適用場景
    • 在相對複雜的應用服務網絡中,扮演服務治理,服務解耦,負責均衡,簡化服務調用方式的作用

4.5 Java Web容器

  • 典型:tomcat/jetty等
  • 介紹
    • 本質上是一個servlet容器,即可以在其上運行Java Web的應用程序

4.6 Nginx

  • 介紹
    • nginx本質上是一個的HTTP和反向代理服務器
  • 適用場景
    • http服務器,反向代理,軟負載均衡器等

4.7 關係型數據庫

  • 典型: MYSQL/ORACLE
  • 核心知識點
    • 索引
    • 事務與事務隔離級別
    • 存儲方法
    • 觸發器
    • 不同關係型數據庫的SQL差異
  • 推薦書籍
    • 《高性能MySQL》
    • 《Oracle從入門到精通》

5. 大數據存儲和計算框架等

  • 核心能力要求
    • 瞭解大數據體系整體的框架、組成
    • 熟悉各種大數據存儲,計算框架,查詢引擎等主要的架構、功能和適用場景
    • 能夠在項目的架構過程中進行合理的大數據技術方案選型

6. 其他

6.1 權限相關

  • 介紹:
    * 權限相關涉及到:身份認證,鑑權,權限管理等
  • 核心知識點:
    • RBAC(基於角色的權限控制)模型
    • 理解OAuth 2.0的設計思想和運行流程

6.2 安全相關

  • 介紹
    • 在後端開發中需要關注很多的安全問題,這些安全問題可能來自惡意的攻擊,也可能來自系統本身的安全性和健壯性不足。防止應用安全漏洞產生的前提是理解常見的漏洞概念、原理以及產生的原因
  • 核心知識點
    • 水平權限和垂直權限漏洞,以及在程序開發中怎樣避免
    • SQL注入攻擊(mybatis預編譯可以避免)
    • 常用的限流策略
    • CSRF 攻擊
    • XSS 攻擊

6.3 日誌相關

  • 核心知識點
    • Log4j、Logback、SLF4J之間的關係,應用中不可直接使用日誌系統(Log4j、Logback)中的API,而應依賴使用日誌框架SLF4J中的API
    • 日誌的等級(error/warn/info/debug)
    • 日誌的保留時間

6.4 異常處理相關

  • 核心知識點
    • 異常的分類,正確區分異常處理方式
    • 異常處理原則
    • 學會藉助spring框架等,將異常轉爲對用戶或者調用方更加友好的錯誤碼和錯誤信息

6.5 RestFul接口設計相關

  • 介紹
    • restful在目前是使用較多的接口設計和服務間依賴http接口設計的主要原則,基於良好的約定規範,可以使得接口簡單易懂,提高團隊協作的效率
  • 推薦文章

6.6 線上問題排查流程和工具

  • 核心知識點
    • 系統問題排查:學會使用w/uptime、top、df、netstat、iostat以及各種可視化監控工具排查本機的負載、磁盤、內存、網絡等系統問題
    • 應用問題排查:學會依據應用系統錯誤日誌以及jps、jinfo、jstat、jstack、jmap以及各種可視化監控工具,排查應用系統問題
    • 數據庫問題排查:學會藉助mysql慢查詢日誌、explain以及各種可視化工具排查mysql使用過程中的各種問題
    • 網絡問題排查:學會藉助telnet、ping、wget、nc等工具排查網絡問題

6.7 多線程編程

  • 核心知識點
    • Java線程相關接口和類的實現和關係
    • Java線程池
    • 線程同步,鎖等

6.8 網絡相關

  • 核心知識點
    • 掌握http協議消息體劃分、連接和通信過程
    • 掌握http主要的返回狀態碼意義
    • 掌握https協議的連接和通信過程

6.9 設計原則和設計模式

  • 核心知識點
    • 單例模式
    • 策略模式
    • 代理模式
    • 觀察者模式
    • 裝飾模式
    • 適配器模式
    • 組合模式
    • 工廠模式
    • 模板方法模式
    • ...
    • 單一職責原則
    • 里氏替換原則
    • 依賴倒置原則
    • 接口隔離原則
    • 迪米特法則
    • 開閉原則
    • 組合/聚合複用原則
    • 七大設計原則
    • 一些常用的設計模式

6.10 分佈式系統設計相關

  • 核心知識點
    • Quartz,基於數據庫鎖的搶佔式分佈式定時器
    • 基於數據庫
    • 基於緩存
    • 基於zookeeper
    • 一致性理論
    • 分佈式事務解決方案
    • 一致性模型
    • CAP定理
    • BASE 理論
    • 強一致性
    • 弱一致性
    • 最終一致性
    • eBay 事件隊列方案
    • TCC (Try-Confirm-Cancel)補償模式
    • 緩存數據最終一致性
    • 強一致性(兩段提交和三段提交模型, Paxos或者Raft算法)
    • 最終一致性
    • SOA
    • 微服務
    • Servless
    • 分佈式系統架構設計
    • 分佈式事務
    • 分佈式鎖
    • 分佈式定時器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章