科普,想成為厲害的 Java 後端程式設計師,你需要懂這 13 個知識點
老讀者就請肆無忌憚地點贊吧,微信搜尋【沉默王二】關注這個在九朝古都洛陽苟且偷生的程式設計師。
本文 GitHub github.com/itwanger 已收錄,裡面還有我精心為你準備的一線大廠面試題。
站在運籌帷幄的角度來看,一名厲害的 Java 後端程式設計師都需要懂得哪些知識呢?我想,這也是很多讀者迫切想知道的一個問題,因為如果不站在一個巨集觀的角度的話,所有學過的知識點都是零散的,就感覺像一隻迷路的小鹿,跌跌撞撞的,總感覺欠點火候,對吧?
怎麼把知識點串聯起來,形成知識圖譜或者知識體系,就顯得非常重要了。接下來,我根據這些年磨破滾打的一些經驗,給大家簡單科普一下,如果有漏掉的內容,希望讀者朋友們在留言區指出來。
1)MVC 框架:MVC 模式是軟體工程中的一種軟體架構模式,可以把軟體系統分為三個基本部分:
模型(Model),編寫程式應有的功能(實現演算法等等)、進行資料管理和資料庫設計,。
檢視(View),介面設計人員進行圖形介面設計。
控制器(Controller),負責轉發請求,對請求進行處理。
比較知名的 MVC 框架有 SpringMVC,是一種基於請求驅動型別的輕量級 Web 框架,目的是幫助我們後端程式設計師簡化開發。
我個人喜歡的還有一個更輕量級的 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 編寫,目的是為處理實時資料提供一個統一、高吞吐、低延遲的平臺。其持久化層本質上是一個“按照分散式事務日誌架構的大規模釋出/訂閱訊息佇列”,使得它作為企業級基礎設施來處理流式資料非常有價值。
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。如果有漏掉的,請讀者朋友們在留言區補充一下,感謝。
我是沉默王二,一枚在九朝古都洛陽苟且偷生的程式設計師。關注即可提升學習效率,感謝你的三連支援,奧利給