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

你可能有所感悟。零散的資料讀了很多,但是很難有提升。到處是干貨,但是并沒什么用,簡單來說就是缺乏系統(tǒng)化。另外,噪音太多,雷同的框架一大把,我不至于全都要去學(xué)了吧。

這里,樂字節(jié):大體根據(jù)基礎(chǔ)、Java基礎(chǔ)、Java進階給分了下類,挑的也都是最常用最重要的工具。


這篇文章耗費了我大量的精力,你要是覺得好,請不要吝嗇你的贊。

基礎(chǔ)知識

數(shù)據(jù)結(jié)構(gòu)

基本的數(shù)據(jù)結(jié)構(gòu)是非常重要的,無論接觸什么編程語言,這些基本數(shù)據(jù)結(jié)構(gòu)都是首先要掌握的。具體的實現(xiàn),就體現(xiàn)在java的集合類中。這些數(shù)據(jù)結(jié)構(gòu),就是這些復(fù)雜工具的具體原始形態(tài),要爛記于心。

培訓(xùn)機構(gòu)一般沒有時間普及基礎(chǔ)知識,通過算法和數(shù)據(jù)結(jié)構(gòu),“通?!蹦軌蛞谎劭闯鍪欠袷墙?jīng)過培訓(xùn)。


常用算法

算法是某些大廠的門檻。毫無疑問,某些參加過ACM的應(yīng)屆生,能夠秒殺大多數(shù)工作多年的碼農(nóng)。算法能夠培養(yǎng)邏輯思維能力和動手能力,在剛參加工作的前幾年,是非常大的加分項。但隨著工作年限的增加,它的比重在能力體系中的比重,會慢慢降低。

算法的學(xué)習(xí)方式就是通過不斷的練習(xí)與重復(fù)。不精此道的同學(xué),永遠不要試圖解決一個沒見過的問題。一些問題的最優(yōu)解,可能耗費了某個博士畢生的精力,你需要的就是理解記憶以及舉一反三。最快的進階途徑就是刷leetcode。

對于普通研發(fā),排序算法和時間復(fù)雜度是必須要掌握的,也是工作和面試中最常用的。時間充裕,也可涉獵動態(tài)規(guī)劃、背包等較高階的算法知識,就是下圖的左列。


書籍

《算法導(dǎo)論》

《編程之美》

《數(shù)學(xué)之美》

數(shù)據(jù)庫基礎(chǔ) MySQL

MySQL是應(yīng)用最廣的關(guān)系型數(shù)據(jù)庫。除了了解基本的使用和建模,一些稍底層的知識也是必要的。

MySQL有存儲引擎的區(qū)別。InnoDB和MyISAM是最常用的,優(yōu)缺點應(yīng)該明曉。ACID是關(guān)系型數(shù)據(jù)庫的基本屬性,需要了解背后的事務(wù)隔離級別。臟讀、幻讀問題的產(chǎn)生原因也要了解。

為了加快查詢速度,索引是數(shù)據(jù)庫中非常重要的一個結(jié)構(gòu),B+樹是最常用的索引結(jié)構(gòu)。因字符集的問題,亂碼問題也是經(jīng)常被提及的。

專業(yè)的DBA通常能幫你解決一些規(guī)范和性能問題,但并不總是有DBA,很多事情需要后端自己動手。


書籍

《MySQL技術(shù)內(nèi)幕——InnoDB存儲引擎》

《高性能MySQL》

《高可用MySQL》

網(wǎng)絡(luò)基礎(chǔ)

網(wǎng)絡(luò)通信是互聯(lián)網(wǎng)時代最有魅力的一個特點,可以說我們的工作和生活,每時每刻都在和它打交道。

連接的三次握手和四次揮手,至今還有很多人非常模糊。造成的后果就是對網(wǎng)絡(luò)連接處于的狀態(tài)不慎了解,程序在性能和健壯性上大打折扣。

HTTP是使用最廣泛的協(xié)議,通常都會要求對其有較深入的了解。對于Java來說,熟悉Netty開發(fā)是入門網(wǎng)絡(luò)開發(fā)的捷徑。

爬蟲是網(wǎng)絡(luò)開發(fā)中另外一個極具魅力的點,但建議使用python而不是java去做。


書籍

《HTTP權(quán)威指南》

《TCP/IP詳解 卷一》

操作系統(tǒng) Linux

科班出身的都學(xué)過《計算機組成機構(gòu)》這門課,這非常重要,但很枯燥。結(jié)合Linux理解會直觀的多。鑒于目前大多數(shù)服務(wù)器環(huán)境都是Linux,提前接觸能夠相輔相成。

需要搞清楚CPU、內(nèi)存、網(wǎng)絡(luò)、I/O設(shè)備之間的交互和速度差別。對于計算密集型應(yīng)用,就需要關(guān)注程序執(zhí)行的效率;對于I/O密集型,要關(guān)注進程(線程)之間的切換以及I/O設(shè)備的優(yōu)化以及調(diào)度。這部分知識是開發(fā)一些高性能高可靠中間件的前提,無法繞過。

對于Linux,首先應(yīng)該掌握的就是日常運維,包括常用命令的使用和軟件安裝配置。正則也是必須要掌握的一個知識點。

腳本編程對后端來說是一個非常大的加分項。它不僅能增加開發(fā)效率,也能在一些突發(fā)問題上使你游刃有余。


Java基礎(chǔ)

JVM

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

以存儲為例,又分為堆內(nèi)的和堆外的兩種,各有千秋。垃圾回收器就是針對堆內(nèi)內(nèi)存設(shè)計的,目前最常用的有CMS和G1。JVM有非常豐富的配置參數(shù)來控制這個過程。在字節(jié)碼層面,會有鎖升級以及內(nèi)存屏障一類的知識,并通過JIT編譯來增加執(zhí)行速度。

JVM還有一個內(nèi)存模型JMM,用來協(xié)調(diào)多線程的并發(fā)訪問。JVM的spec非常龐大,但面試經(jīng)常提及。

另外,jdk還提供了一系列工具來窺探這些信息。包含jstat,jmap,jstack,jvisualvm等,都是最常用的。


SSM

你可能會用SSM開發(fā)項目,覺得編程無非就這些東西。設(shè)計模式爛記于心,IOC、AOP手到擒來。這里集中了大部分同行,有些可能到此為止就Ok了,因為有些同學(xué)接下來的重點是項目管理,而不是技術(shù)。

SSM最擅長的是Web開發(fā)。目前的表現(xiàn)形式逐漸多樣化,隨著前后端分離的盛行,Restful這種有著明確語義的模式逐漸流行。


Java進階

下面有些知識點,界限是非常模糊的。它們你中有我,我中有你,可以說是一個整體。

Redis

緩存可以說是計算機系統(tǒng)中應(yīng)用最廣泛的技術(shù)了。對于分布式緩存來說,最常用的就是Redis了。由于其數(shù)據(jù)結(jié)構(gòu)豐富,被應(yīng)用的場景越來越多。

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

Redis幾乎能適應(yīng)除搜索外的所有互聯(lián)網(wǎng)業(yè)務(wù),對于其使用來說,一些規(guī)范限制是非常有必要的。一般速度越快的系統(tǒng),越容易被長尾操作給拖死。所以,對于info命令的內(nèi)容,也應(yīng)有了解。

有三個點要尤其注意:分布式鎖、限流,以及和源數(shù)據(jù)的同步問題。


Kafka

MQ是分布式系統(tǒng)中非常重要的組件,目前使用最廣泛的就是Kafka。除了用在大數(shù)據(jù)場景中,Kafka也能夠在業(yè)務(wù)系統(tǒng)中使用。

Kafka的速度非???,根據(jù)ACK的級別配置,可靠性會增加,但速度會減緩。對于消息系統(tǒng)來說,監(jiān)控報警是非常重要的一環(huán),能夠提前預(yù)知系統(tǒng)的問題。Kafka的集群自身就是高可用的,依賴Zookeeper組件,了解一些基本概念,包括ISR,能夠更加詳細的了解這個過程。


值得提醒的是,這些知識,是眾多發(fā)展路線上的一個分支??赡苡械呐笥眩壳爸辉谄渲械囊粋€點上面奮斗,缺乏所謂的廣度;也可能有的朋友,有著全棧的標簽,卻做著SSM的工作。不同的公司需要的技術(shù)水平不盡相同。一個專注ERP業(yè)務(wù)的公司,會在項目管理上多些文章;一個專做IM的團隊,可能對網(wǎng)絡(luò)開發(fā)滾瓜爛熟。

此文章轉(zhuǎn)自樂字節(jié)教育

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容