科普,想成爲厲害的 Java 後端程序員,你須要懂這 13 個知識點

老讀者就請肆無忌憚地點贊吧,微信搜索【 沉默王二】關注這個在九朝古都洛陽苟且偷生的程序員。
本文  GitHub  github.com/itwanger 已收錄,裏面還有我精心爲你準備的一線大廠面試題。

站在指揮若定的角度來看,一名厲害的 Java 後端程序員都須要懂得哪些知識呢?我想,這也是不少讀者迫切想知道的一個問題,由於若是不站在一個宏觀的角度的話,全部學過的知識點都是零散的,就感受像一隻迷路的小鹿,跌跌撞撞的,總感受欠點火候,對吧?前端

怎麼把知識點串聯起來,造成知識圖譜或者知識體系,就顯得很是重要了。接下來,我根據這些年磨破滾打的一些經驗,給你們簡單科普一下,若是有漏掉的內容,但願讀者朋友們在留言區指出來。git

1)MVC 框架:MVC 模式是軟件工程中的一種軟件架構模式,能夠把軟件系統分爲三個基本部分:程序員

  • 模型(Model),編寫程序應有的功能(實現算法等等)、進行數據管理和數據庫設計,。
  • 視圖(View),界面設計人員進行圖形界面設計。
  • 控制器(Controller),負責轉發請求,對請求進行處理。

比較知名的 MVC 框架有 SpringMVC,是一種基於請求驅動類型的輕量級 Web 框架,目的是幫助咱們後端程序員簡化開發。github

我我的喜歡的還有一個更輕量級的 JFinal,國人開發的,基於 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful,小型項目我都會選擇使用 JFinal,很方便。面試

2)IoC 框架:可實現依賴注入/控制反轉的框架,Spring 框架就是爲此而生的。算法

3)ORM 框架:對象關係映射(Object Relational Mapping)是經過使用描述對象和數據庫之間映射的元數據,將面嚮對象語言程序中的對象自動持久化到關係數據庫中。數據庫

MyBatis 是目前最流行的 ORM 框架,可以屏蔽底層的數據庫操做細節,減小大量的模板代碼,而且可以支持分佈式特性。後端

爲了在服務層面統一解決分庫分表、讀寫分離、故障恢復等問題,就須要一種數據庫中間件,MyCat 是最知名的一種。數組

MyCat 是基於 Java 語言編寫的數據庫中間件,是一個實現了 MySQL 協議的服務器,前端用戶能夠把它看做是一個數據庫代理,用 MySQL 客戶端工具和命令行訪問,後端能夠用 MySQL 原生協議與多個 MySQL 服務器通訊,也能夠用 JDBC 協議與大多數主流數據庫服務器通訊,其核心功能是分庫分表,配合數據庫的主從模式還可實現讀寫分離,很是強大。緩存

4)緩存框架:緩存一般用來解決熱點數據的訪問問題,能夠提升數據的查詢效率,尤爲是在高併發的服務中,將持久層的數據加載到緩存中,能夠避免數據庫被大量請求擊垮。使用頻率最高的緩存框架就是 Redis,沒有之一,Memcached 相對來講也比較經常使用。

Redis 是互聯網技術領域中使用最普遍的緩存中間件,它是 Remote Dictionary Service 三個單詞中加粗字母的組合。你別說,組合起來後念着挺天然的。

Redis 以超高的性能、完美的文檔、簡潔的源碼著稱,國內外不少大型互聯網公司都在用,好比說阿里、騰訊、GitHub、Stack Overflow 等等。它的版本更新很是的快,功能也愈來愈強大,最初只是用來做爲緩存數據庫,如今已經能夠用它來實現消息隊列了。

能夠這麼說吧,掌握 Redis 已經變成了一項 Java 後端程序員必須具有的基礎技能。

5)數據庫:絕大多數的業務數據都須要持久化存儲到數據庫中,主流的關係型數據庫有 MySQL 和 Oracle。

MySQL 和 Oracle 如今都隸屬於甲骨文公司,這家公司的產品很牛逼,CEO 拉里埃爾森也很牛逼,和史蒂夫喬布斯是鐵哥們。Oracle 相對 MySQL 更沉重一些,屬於企業級應用。而 MySQL 是開源的,性能又給力,因此近些年來市場佔用率已經飆升到了第一位,甩開 Oracle 兩條街。

主流的非關係型數據庫有 MongoDB 和 HBase,後者主要用於數據庫領域。

MongoDB 是一個基於分佈式的文件存儲數據庫,旨在爲 Web 應用提供可擴展的高性能數據存儲解決方案。它將數據存儲爲一個文檔(相似於 JSON 對象),數據結構由鍵值對組成,相似於 Java 中的 Map,經過 key 的方式訪問起來效率就高得多,對吧?這也是 MongoDB 最重要的特色。

6)搜索框架:目前用得比較多的開源軟件有 Solr 和 Elasticsearch,主要用於全文檢索和各類數據維度的查詢,後者逐漸成爲搜索引擎的主流開源方案。

Elasticsearch 是一個分佈式、RESTful 風格的搜索和數據分析引擎,可以解決不斷涌現出的各類用例。 做爲 Elastic Stack 的核心,它集中存儲您的數據,幫助您發現意料之中以及意料以外的狀況。

7)消息隊列:目前使用得比較廣泛的消息隊列有,基於日誌設計的 Kafka,重事務的 RabbitMQ。對消息丟失不是特別敏感的話,選擇 Kafka 能夠得到更高的性能。

Kafka 由 Scala 和 Java 編寫,目的是爲處理實時數據提供一個統1、高吞吐、低延遲的平臺。其持久化層本質上是一個「按照分佈式事務日誌架構的大規模發佈/訂閱消息隊列」,使得它做爲企業級基礎設施來處理流式數據很是有價值。

RabbitMQ 的主要特色在於健壯性好、易於使用、高性能、高併發、集羣易擴展,以及強大的開源社區支持。

8)文件存儲:文件存儲須要知足的特性有:可靠性、容災性、穩定性,可以保證文件不輕易丟失,還能在出現事故的時候提供回滾方案。Hadoop 的 HDFS 是目前最經常使用的分佈式文件存儲方案。

除此以外,還有一個開源的輕量級分佈式文件系統——FastDFS,能夠解決大數據量存儲和負載均衡等問題。特別適合以中小文件(建議範圍:4KB < file_size <500MB)爲載體的在線服務,如相冊網站、視頻網站等等。

9)單點登陸(Single Sign On):簡稱爲 SSO,目前不少網站都實現了單點登陸,當用戶登陸時,就能夠獲取全部系統的訪問權限,不用對每一個單一系統都逐一登陸。

推薦一個還不錯的分佈式單點登陸框架——xxl-sso,開源的。

10)統一配置中心:常見的有 properties、YAML 文件,就是能夠不修改代碼只修改配置文件就可以讓整個項目區分開發、測試、生產環境。

YAML 語言(發音 /ˈjæməl/ )的設計目標,就是方便人類讀寫。它實質上是一種通用的數據串行化格式。

對於較複雜的數據結構來講,YAML 遠遠優於 properties,可使用冒號加縮進的方式表明層級(屬性)關係,使用短橫槓(-)表明數組元素。

11)服務治理框架:隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已沒法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。

Dubbo 是一款高性能、輕量級的開源 Java RPC 框架,提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。

12)統一調度中心:定時調度是一個很是廣泛的場景,好比說定時去備份數據庫,刷新訂單狀態等。能夠依賴 Linux 的 Cron 機制,以及 Java 的 Quartz 框架。

工具型軟件 Cron 是一款類 Unix 操做系統下的基於時間的任務管理系統。 用戶能夠經過 Cron 在固定時間、日期、間隔下,運行按期任務(能夠是命令和腳本)。我最常常用的,就是經過 Cron 來備份 MySql 數據庫。

Quartz 能夠用來建立或簡單或複雜的調度時間表,執行 Java 下任意數量的做業。

13)日誌服務:日誌是生產環境不可缺乏的產物,可以爲線上服務提供快速記錄、定位、排查問題的來源。經常使用的日誌框架有 Log4j 和 LogBack。

Log4j 一般和 SLF4J 配合起來一塊兒使用,SLF4J 是簡單日記門面(simple logging Facade for Java)的意思,爲各類 log API 提供了一個簡單的統一接口,從而使得 Java 後端程序員可以在部署的時候配置本身但願的日誌實現。

LogBack 和 Log4j 是同一個大神寫的(做者對 Log4j 的性能不滿意),Spring Boot 默認使用的日誌框架是LogBack。

以上,就是我認爲一個厲害的 Java 後端程序員須要知道的知識點,但願可以幫助到讀者朋友們,peace。若是有漏掉的,請讀者朋友們在留言區補充一下,感謝。


我是沉默王二,一枚在九朝古都洛陽苟且偷生的程序員。關注便可提高學習效率,感謝你的三連支持,奧利給🌹

注:若是文章有任何問題,歡迎絕不留情地指正。

若是你以爲文章對你有些幫助,歡迎微信搜索「沉默王二」第一時間閱讀;本文 GitHub github.com/itwanger 已收錄,歡迎 star。

相關文章
相關標籤/搜索