老讀者就請肆無忌憚地點贊吧,微信搜索【沉默王二】關注這個在九朝古都洛陽茍且偷生的程式員,
本文 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,如果有漏掉的,請讀者朋友們在留言區補充一下,感謝,
我是沉默王二,一枚在九朝古都洛陽茍且偷生的程式員,關注即可提升學習效率,感謝你的三連支持,奧利給??,
注:如果文章有任何問題,歡迎毫不留情地指正,
如果你覺得文章對你有些幫助,歡迎微信搜索「沉默王二」第一時間閱讀,回復關鍵字「小白」可以免費獲取我肝了 4 萬+字的 《Java 小白從入門到放肆》2.0 版;本文 GitHub github.com/itwanger 已收錄,歡迎 star,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/43131.html
標籤:Java
