必看!java後端,亮劍誅仙(最全知識點)

你可能有所感悟。零散的資料讀了不少,可是很難有提高。處處是乾貨,可是並沒什麼用,簡單來講就是缺少系統化。另外,噪音太多,雷同的框架一大把,我不至於全都要去學了吧。java

(想自學習編程的小夥伴請搜索圈T社區,更多行業相關資訊更有行業相關免費視頻教程。徹底免費哦!)python

這裏,我大致根據基礎、Java基礎、Java進階給分了下類,挑的也都是最經常使用最重要的工具。
在這裏插入圖片描述
這篇文章耗費了我大量的精力,你要是以爲好,請不要吝嗇你的贊。若是你認同,能夠關注個人微信公衆號xjjdog,裏面講的就是這些內容。我會嘗試更加系統化。git

最新的內容會在github持續更新,添加新的精選相關文章。地址:程序員

https://github.com/sayhiai/javaok

基礎知識

數據結構

基本的數據結構是很是重要的,不管接觸什麼編程語言,這些基本數據結構都是首先要掌握的。具體的實現,就體如今java的集合類中。這些數據結構,就是這些複雜工具的具體原始形態,要爛記於心。github

培訓機構通常沒有時間普及基礎知識,經過算法和數據結構,「一般」可以一眼看出是不是通過培訓。
在這裏插入圖片描述面試

經常使用算法

算法是某些大廠的門檻。毫無疑問,某些參加過ACM的應屆生,可以秒殺大多數工做多年的碼農。算法可以培養邏輯思惟能力和動手能力,在剛參加工做的前幾年,是很是大的加分項。但隨着工做年限的增長,它的比重在能力體系中的比重,會慢慢下降。算法

算法的學習方式就是經過不斷的練習與重複。不精此道的同窗,永遠不要試圖解決一個沒見過的問題。一些問題的最優解,可能耗費了某個博士畢生的精力,你須要的就是理解記憶以及觸類旁通。最快的進階途徑就是刷leetcode。數據庫

對於普通研發,排序算法和時間複雜度是必需要掌握的,也是工做和麪試中最經常使用的。時間充裕,也可涉獵動態規劃、揹包等較高階的算法知識,就是下圖的左列。
在這裏插入圖片描述編程

書籍

    • 《算法導論》
    • 《編程之美》
    • 《數學之美》

    數據庫基礎 MySQL

    MySQL是應用最廣的關係型數據庫。除了瞭解基本的使用和建模,一些稍底層的知識也是必要的。後端

    MySQL有存儲引擎的區別。InnoDB和MyISAM是最經常使用的,優缺點應該明曉。ACID是關係型數據庫的基本屬性,須要瞭解背後的事務隔離級別。髒讀、幻讀問題的產生緣由也要了解。

    爲了加快查詢速度,索引是數據庫中很是重要的一個結構,B+樹是最經常使用的索引結構。因字符集的問題,亂碼問題也是常常被說起的。

    專業的DBA一般能幫你解決一些規範和性能問題,但並不老是有DBA,不少事情須要後端本身動手。
    在這裏插入圖片描述

    書籍

    • 《MySQL技術內幕——InnoDB存儲引擎》
    • 《高性能MySQL》
    • 《高可用MySQL》

    網絡基礎

    網絡通訊是互聯網時代最有魅力的一個特色,能夠說咱們的工做和生活,每時每刻都在和它打交道。

    鏈接的三次握手和四次揮手,至今還有不少人很是模糊。形成的後果就是對網絡鏈接處於的狀態不慎瞭解,程序在性能和健壯性上大打折扣。

    HTTP是使用最普遍的協議,一般都會要求對其有較深刻的瞭解。對於Java來講,熟悉Netty開發是入門網絡開發的捷徑。

    爬蟲是網絡開發中另一個極具魅力的點,但建議使用python而不是java去作。
    在這裏插入圖片描述

    書籍

    • 《HTTP權威指南》
    • 《TCP/IP詳解 卷一》

    操做系統 Linux

    科班出身的都學過《計算機組成機構》這門課,這很是重要,但很枯燥。結合Linux理解會直觀的多。鑑於目前大多數服務器環境都是Linux,提早接觸可以相輔相成。

    須要搞清楚CPU、內存、網絡、I/O設備之間的交互和速度差異。對於計算密集型應用,就須要關注程序執行的效率;對於I/O密集型,要關注進程(線程)之間的切換以及I/O設備的優化以及調度。這部分知識是開發一些高性能高可靠中間件的前提,沒法繞過。

    對於Linux,首先應該掌握的就是平常運維,包括經常使用命令的使用和軟件安裝配置。正則也是必需要掌握的一個知識點。

    腳本編程對後端來講是一個很是大的加分項。它不只能增長開發效率,也能在一些突發問題上使你遊刃有餘。
    在這裏插入圖片描述

    書籍

    • 《UNIX環境高級編程(第3版)》
    • 《鳥哥的Linux私房菜》
    • 《Linux內核設計與實現》
    • 《Linux命令行大全》

    Java基礎

    JVM

    Java程序員的最愛和噩夢。以oracle版本爲準,各個jvm版本之間有差異。JVM的知識包含兩方面。一個是存儲級別的,一個是執行級別的。

    以存儲爲例,又分爲堆內的和堆外的兩種,各有千秋。垃圾回收器就是針對堆內內存設計的,目前最經常使用的有CMS和G1。JVM有很是豐富的配置參數來控制這個過程。在字節碼層面,會有鎖升級以及內存屏障一類的知識,並經過JIT編譯來增長執行速度。

    JVM還有一個內存模型JMM,用來協調多線程的併發訪問。JVM的spec很是龐大,但面試常常說起。

    另外,jdk還提供了一系列工具來窺探這些信息。包含jstat,jmap,jstack,jvisualvm等,都是最經常使用的。
    在這裏插入圖片描述

    書籍

    • 《深刻理解Java虛擬機》

    JDK

    如今,終於到了java程序員的核心了:JDK,一套依據jvm規範實現的一套API。咱們日常的工做,就是組合這些API,來控制程序的行爲。

    jdk的代碼很是龐大,內容也很是繁雜。最重要的大致包括:集合、多線程、NIO、反射、文件操做、Lambda語法等。這部份內容加上下面的SSM,基本上就是大多數小夥伴玩耍的地方。

    假如說數據結構和算法是理論,這裏就是支撐理論的實現。Java玩的好很差,就是說這裏。
    在這裏插入圖片描述

    書籍

    • 《Effective Java 中文版》
    • 《數據結構與算法分析:Java語言描述》

    SSM

    你可能會用SSM開發項目,以爲編程無非就這些東西。設計模式爛記於心,IOC、AOP手到擒來。這裏集中了大部分同行,有些可能到此爲止就Ok了,由於有些同窗接下來的重點是項目管理,而不是技術。

    SSM最擅長的是Web開發。目前的表現形式逐漸多樣化,隨着先後端分離的盛行,Restful這種有着明確語義的模式逐漸流行。
    在這裏插入圖片描述

    書籍

    • 《Head First 設計模式》
    • 《Spring揭祕》
    • 《SpringBoot揭祕》
    • 《MyBatis技術內幕》
    • 《深刻剖析Tomcat》

    其實跟着文檔走一遍就好了,不少書籍就是翻譯而已。

    併發編程

    如今的服務器都是多核的了,併發編程也來越多。java有多種建立多線程的方式,不過目前使用線程池的多一些。線程池的基礎就是AQS,基於AQS,又有不少的工具類擴展。

    java同時有不少加鎖和線程同步的方式,鎖有樂觀鎖/悲觀鎖之分,又有公平鎖/非公平鎖之分,寫一段死鎖代碼仍是有點難度的。

    有兩個問題被考察的頻率很是高,一個是ABA,一個是僞共享。併發編程通常和網絡編程配對,提供對某個問題的一系列解決方案。

    這是java中一塊難啃的骨頭。
    在這裏插入圖片描述

    書籍

    • 《Java核心技術系列:Java多線程編程核心技術》
    • 《Java性能權威指南》
    • 《Java併發編程實戰》

    性能優化 & 故障排查

    有人認爲這應該是SRE的範疇,但一般最熟悉業務的倒是開發,技術並無什麼明顯的界限。掌握這些內容,會讓你在芸芸大衆中脫穎而出。

    從操做系統的內核優化到數據庫的索引和事務優化,這部分的技能是創建在牢固的基礎之上的。也就是操做系統的基礎。

    操做系統的每一個組件都有可能出現問題,對於一個java後端來講,要可以很是容易的定位到這些問題。好比常見的內存溢出問題。
    在這裏插入圖片描述

    書籍

    • 《性能之巔:洞悉系統、企業與雲計算》
    • 《高性能Linux服務器構建實戰》

    Java進階

    下面有些知識點,界限是很是模糊的。它們你中有我,我中有你,能夠說是一個總體。

    Redis

    緩存能夠說是計算機系統中應用最普遍的技術了。對於分佈式緩存來講,最經常使用的就是Redis了。因爲其數據結構豐富,被應用的場景愈來愈多。

    基本的5種數據類型都知道,但你要說出其餘幾種,給人的印象就不同了。Redis有主從和Cluster兩種集羣模式,高可用配置也不相同。

    Redis幾乎能適應除搜索外的全部互聯網業務,對於其使用來講,一些規範限制是很是有必要的。通常速度越快的系統,越容易被長尾操做給拖死。因此,對於info命令的內容,也應有了解。

    有三個點要尤爲注意:分佈式鎖、限流,以及和源數據的同步問題。
    在這裏插入圖片描述

    書籍

    • 《Redis實戰 》
    • 《Redis開發與運維》
    • 《Redis設計與實現》

    Kafka

    MQ是分佈式系統中很是重要的組件,目前使用最普遍的就是Kafka。除了用在大數據場景中,Kafka也可以在業務系統中使用。

    Kafka的速度很是快,根據ACK的級別配置,可靠性會增長,但速度會減緩。對於消息系統來講,監控報警是很是重要的一環,可以提早預知系統的問題。Kafka的集羣自身就是高可用的,依賴Zookeeper組件,瞭解一些基本概念,包括ISR,可以更加詳細的瞭解這個過程。
    在這裏插入圖片描述

    書籍

    • 《Kafka入門與實踐》
    • 《Kafka技術內幕》

    分庫分表 ShardingJDBC

    隨着數據的增加,MySQL自己出現了瓶頸。分庫分表是針對關係型數據庫的一套解決方案,把它改形成分佈式數據庫。

    根據切分層次,最像回事的是在代理層和驅動層進行切入。ShardingJDBC就是在驅動層的一個組件。

    組件自己只是一個問題。在真正的切分以前,會有垂直拆分和水平拆分之分。咱們的線上業務也要不停機的進行拆分和切換,一個全量和增量同步工具都是須要的。

    有條件經歷這個過程的,都是一筆寶貴的財富。它不只在技術上,並且在流程上都有諸多挑戰。你會體驗到技術、流程、管理,是不分家的。
    在這裏插入圖片描述

    相關文章

    • 《「分庫分表" ?選型和流程要慎重,不然會失控》

    微服務 & 中間件

    目前最火的微服務架構就是SpringCloud。這對熟悉SSM開發的同窗來講, 是很是容易上手的。微服務有註冊中心、RPC、負載均衡、熔斷限流、網關等關鍵組件,有些組件有不少不一樣的替代品。
    在這裏插入圖片描述
    微服務拆分後又引伸出一些列問題,須要一些其餘中間件支持。好比監控報警、ELKB、配置中心、調度中心、調用鏈等。雖然沒有微服務也須要它們,但明顯組合起來,效果會好的多。

    各類A/B測試,金絲雀,灰度等,基本是終極目標之一。

    微服務是一個複雜的總體,同時融合了技術和流程管理方面的內容。

    書籍

    • 《可伸縮服務架構:框架與中間件》
    • 《Spring Cloud與Docker微服務架構實戰》
    • 《架構修煉之道》

    分佈式

    當服務器數量增長,一些服務,包括上面提到的微服務,都須要進行協調和交互。這就是分佈式系統。

    分佈式的理論基礎有CAP、BASE等。針對一致性,有特別多的算法,其中Raft做爲易懂的新貴,使用愈來愈普遍。

    這部分側重於理論,一旦開始進入實踐,寫出來的都是些你們夥。這裏有一篇文章,雖然不是很全,聊表心意吧。

    在這裏插入圖片描述

    書籍

    • 《NoSQL精粹》
    • 《ZooKeeper:分佈式過程協同技術詳解》
    • 《從Paxos到Zookeeper分佈式一致性原理與實踐》

    支撐技術

    基本運維

    我傾向於基礎架構和運維不分家,由於它們有太多重合和類似的地方。基本運維和架構配合起來,典型的特色就是平臺化+規範化。

    這裏是檢驗綜合素質的地方,有廣度也有深度。
    在這裏插入圖片描述

    書籍

    • 《奔跑吧Ansible》
    • 《Docker——容器與容器雲》
    • 《Kubernetes權威指南》
    • 《Jenkins權威指南》
    • 《深刻理解Nginx》

    安全

    安全無小事,建築工地和系統安全同樣的道理。熟悉一些經常使用的攻擊和加密解密算法是必要的。

    就像是你給家裏的門上鎖:可以阻擋大部分心懷不軌的人,但沒法阻擋無所顧忌的暴徒。
    加粗樣式

    End

    你可能發現並無本身關注的組件。這不奇怪,好比我的喜歡的的ES,就找不到一個合適的位置。這裏只是最主要的一點內容,就已顯繁雜,一個大雜燴並不見得好。

    值得提醒的是,這些知識,是衆多發展路線上的一個分支。可能有的朋友,目前只在其中的一個點上面奮鬥,缺少所謂的廣度;也可能有的朋友,有着全棧的標籤,卻作着SSM的工做。不一樣的公司須要的技術水平不盡相同。一個專一ERP業務的公司,會在項目管理上多些文章;一個專作IM的團隊,可能對網絡開發倒背如流。

    再次強調。此技術要點爲我的整理,爲了修復認知上的誤差,我會維護一個github項目,實時跟進分類和增長新的相關文章(歡迎提交PR)。若是你有什麼想法,請儘快反饋給我,很是感謝。

    相關文章
    相關標籤/搜索