本篇內(nèi)容主要講解“Java后端知識(shí)點(diǎn)有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java后端知識(shí)點(diǎn)有哪些”吧!
公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出東蘭免費(fèi)做網(wǎng)站回饋大家。
基礎(chǔ)知識(shí)
數(shù)據(jù)結(jié)構(gòu)
基本的數(shù)據(jù)結(jié)構(gòu)是非常重要的,無(wú)論接觸什么編程語(yǔ)言,這些基本數(shù)據(jù)結(jié)構(gòu)都是首先要掌握的。具體的實(shí)現(xiàn),就體現(xiàn)在java的集合類中。這些數(shù)據(jù)結(jié)構(gòu),就是這些復(fù)雜工具的具體原始形態(tài),要爛記于心。
培訓(xùn)機(jī)構(gòu)一般沒(méi)有時(shí)間普及基礎(chǔ)知識(shí),通過(guò)算法和數(shù)據(jù)結(jié)構(gòu),“通常”能夠一眼看出是否是經(jīng)過(guò)培訓(xùn)。
常用算法
算法是某些大廠的門(mén)檻。毫無(wú)疑問(wèn),某些參加過(guò)ACM的應(yīng)屆生,能夠秒殺大多數(shù)工作多年的碼農(nóng)。算法能夠培養(yǎng)邏輯思維能力和動(dòng)手能力,在剛參加工作的前幾年,是非常大的加分項(xiàng)。但隨著工作年限的增加,它的比重在能力體系中的比重,會(huì)慢慢降低。
算法的學(xué)習(xí)方式就是通過(guò)不斷的練習(xí)與重復(fù)。不精此道的同學(xué),永遠(yuǎn)不要試圖解決一個(gè)沒(méi)見(jiàn)過(guò)的問(wèn)題。一些問(wèn)題的最優(yōu)解,可能耗費(fèi)了某個(gè)博士畢生的精力,你需要的就是理解記憶以及舉一反三。最快的進(jìn)階途徑就是刷leetcode。
對(duì)于普通研發(fā),排序算法和時(shí)間復(fù)雜度是必須要掌握的,也是工作和面試中最常用的。時(shí)間充裕,也可涉獵動(dòng)態(tài)規(guī)劃、背包等較高階的算法知識(shí),就是下圖的左列。
書(shū)籍
《算法導(dǎo)論》
《編程之美》
《數(shù)學(xué)之美》
數(shù)據(jù)庫(kù)基礎(chǔ) MySQL
MySQL是應(yīng)用廣泛的關(guān)系型數(shù)據(jù)庫(kù)。除了了解基本的使用和建模,一些稍底層的知識(shí)也是必要的。
MySQL有存儲(chǔ)引擎的區(qū)別。InnoDB和MyISAM是常用的,優(yōu)缺點(diǎn)應(yīng)該明曉。ACID是關(guān)系型數(shù)據(jù)庫(kù)的基本屬性,需要了解背后的事務(wù)隔離級(jí)別。臟讀、幻讀問(wèn)題的產(chǎn)生原因也要了解。
為了加快查詢速度,索引是數(shù)據(jù)庫(kù)中非常重要的一個(gè)結(jié)構(gòu),B+樹(shù)是最常用的索引結(jié)構(gòu)。因字符集的問(wèn)題,亂碼問(wèn)題也是經(jīng)常被提及的。
專業(yè)的DBA通常能幫你解決一些規(guī)范和性能問(wèn)題,但并不總是有DBA,很多事情需要后端自己動(dòng)手。
書(shū)籍
《MySQL技術(shù)內(nèi)幕——InnoDB存儲(chǔ)引擎》
《高性能MySQL》
《高可用MySQL》
網(wǎng)絡(luò)基礎(chǔ)
網(wǎng)絡(luò)通信是互聯(lián)網(wǎng)時(shí)代有魅力的一個(gè)特點(diǎn),可以說(shuō)我們的工作和生活,每時(shí)每刻都在和它打交道。
連接的三次握手和四次揮手,至今還有很多人非常模糊。造成的后果就是對(duì)網(wǎng)絡(luò)連接處于的狀態(tài)不慎了解,程序在性能和健壯性上大打折扣。
HTTP是使用廣泛的協(xié)議,通常都會(huì)要求對(duì)其有較深入的了解。對(duì)于Java來(lái)說(shuō),熟悉Netty開(kāi)發(fā)是入門(mén)網(wǎng)絡(luò)開(kāi)發(fā)的捷徑。
爬蟲(chóng)是網(wǎng)絡(luò)開(kāi)發(fā)中另外一個(gè)極具魅力的點(diǎn),但建議使用python而不是Java去做。
書(shū)籍
《HTTP權(quán)威指南》
《TCP/IP詳解 卷一》
操作系統(tǒng) Linux
科班出身的都學(xué)過(guò)《計(jì)算機(jī)組成機(jī)構(gòu)》這門(mén)課,這非常重要,但很枯燥。結(jié)合Linux理解會(huì)直觀的多。鑒于目前大多數(shù)服務(wù)器環(huán)境都是Linux,提前接觸能夠相輔相成。
需要搞清楚CPU、內(nèi)存、網(wǎng)絡(luò)、I/O設(shè)備之間的交互和速度差別。對(duì)于計(jì)算密集型應(yīng)用,就需要關(guān)注程序執(zhí)行的效率;對(duì)于I/O密集型,要關(guān)注進(jìn)程(線程)之間的切換以及I/O設(shè)備的優(yōu)化以及調(diào)度。這部分知識(shí)是開(kāi)發(fā)一些高性能高可靠中間件的前提,無(wú)法繞過(guò)。
對(duì)于Linux,首先應(yīng)該掌握的就是日常運(yùn)維,包括常用命令的使用和軟件安裝配置。正則也是必須要掌握的一個(gè)知識(shí)點(diǎn)。
腳本編程對(duì)后端來(lái)說(shuō)是一個(gè)非常大的加分項(xiàng)。它不僅能增加開(kāi)發(fā)效率,也能在一些突發(fā)問(wèn)題上使你游刃有余。
書(shū)籍
《UNIX環(huán)境高級(jí)編程(第3版)》
《鳥(niǎo)哥的Linux私房菜》
《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》
《Linux命令行大全》
Java基礎(chǔ)
JVM
Java程序員的最愛(ài)和噩夢(mèng)。以O(shè)racle版本為準(zhǔn),各個(gè)jvm版本之間有差別。JVM的知識(shí)包含兩方面。一個(gè)是存儲(chǔ)級(jí)別的,一個(gè)是執(zhí)行級(jí)別的。
以存儲(chǔ)為例,又分為堆內(nèi)的和堆外的兩種,各有千秋。垃圾回收器就是針對(duì)堆內(nèi)內(nèi)存設(shè)計(jì)的,目前最常用的有CMS和G1。JVM有非常豐富的配置參數(shù)來(lái)控制這個(gè)過(guò)程。在字節(jié)碼層面,會(huì)有鎖升級(jí)以及內(nèi)存屏障一類的知識(shí),并通過(guò)JIT編譯來(lái)增加執(zhí)行速度。
JVM還有一個(gè)內(nèi)存模型JMM,用來(lái)協(xié)調(diào)多線程的并發(fā)訪問(wèn)。JVM的spec非常龐大,但面試經(jīng)常提及。
另外,jdk還提供了一系列工具來(lái)窺探這些信息。包含jstat,jmap,jstack,jvisualvm等,都是常用的。
書(shū)籍
《深入理解Java虛擬機(jī)》
JDK
現(xiàn)在,終于到了java程序員的核心了:JDK,一套依據(jù)jvm規(guī)范實(shí)現(xiàn)的一套API。我們平常的工作,就是組合這些API,來(lái)控制程序的行為。
jdk的代碼非常龐大,內(nèi)容也非常繁雜。最重要的大體包括:集合、多線程、NIO、反射、文件操作、Lambda語(yǔ)法等。這部分內(nèi)容加上下面的SSM,基本上就是大多數(shù)小伙伴玩耍的地方。
假如說(shuō)數(shù)據(jù)結(jié)構(gòu)和算法是理論,這里就是支撐理論的實(shí)現(xiàn)。Java玩的好不好,就是說(shuō)這里。
書(shū)籍
《Effective Java 中文版》
《數(shù)據(jù)結(jié)構(gòu)與算法分析:Java語(yǔ)言描述》
SSM
你可能會(huì)用SSM開(kāi)發(fā)項(xiàng)目,覺(jué)得編程無(wú)非就這些東西。設(shè)計(jì)模式爛記于心,IOC、AOP手到擒來(lái)。這里集中了大部分同行,有些可能到此為止就Ok了,因?yàn)橛行┩瑢W(xué)接下來(lái)的重點(diǎn)是項(xiàng)目管理,而不是技術(shù)。
SSM擅長(zhǎng)的是Web開(kāi)發(fā)。目前的表現(xiàn)形式逐漸多樣化,隨著前后端分離的盛行,Restful這種有著明確語(yǔ)義的模式逐漸流行。
書(shū)籍
《Head First 設(shè)計(jì)模式》
《Spring揭秘》
《SpringBoot揭秘》
《MyBatis技術(shù)內(nèi)幕》
《深入剖析Tomcat》
其實(shí)跟著文檔走一遍就行了,很多書(shū)籍就是翻譯而已。
并發(fā)編程
現(xiàn)在的服務(wù)器都是多核的了,并發(fā)編程也來(lái)越多。java有多種創(chuàng)建多線程的方式,不過(guò)目前使用線程池的多一些。線程池的基礎(chǔ)就是AQS,基于AQS,又有很多的工具類擴(kuò)展。
java同時(shí)有很多加鎖和線程同步的方式,鎖有樂(lè)觀鎖/悲觀鎖之分,又有公平鎖/非公平鎖之分,寫(xiě)一段死鎖代碼還是有點(diǎn)難度的。
有兩個(gè)問(wèn)題被考察的頻率非常高,一個(gè)是ABA,一個(gè)是偽共享。并發(fā)編程一般和網(wǎng)絡(luò)編程配對(duì),提供對(duì)某個(gè)問(wèn)題的一系列解決方案。
這是java中一塊難啃的骨頭。
書(shū)籍
《Java核心技術(shù)系列:Java多線程編程核心技術(shù)》
《Java性能權(quán)威指南》
《Java并發(fā)編程實(shí)戰(zhàn)》
性能優(yōu)化 & 故障排查
有人認(rèn)為這應(yīng)該是SRE的范疇,但通常最熟悉業(yè)務(wù)的卻是開(kāi)發(fā),技術(shù)并沒(méi)有什么明顯的界限。掌握這些內(nèi)容,會(huì)讓你在蕓蕓大眾中脫穎而出。
從操作系統(tǒng)的內(nèi)核優(yōu)化到數(shù)據(jù)庫(kù)的索引和事務(wù)優(yōu)化,這部分的技能是建立在牢固的基礎(chǔ)之上的。也就是操作系統(tǒng)的基礎(chǔ)。
操作系統(tǒng)的每個(gè)組件都有可能出現(xiàn)問(wèn)題,對(duì)于一個(gè)java后端來(lái)說(shuō),要能夠非常容易的定位到這些問(wèn)題。比如常見(jiàn)的內(nèi)存溢出問(wèn)題。
書(shū)籍
《性能之巔:洞悉系統(tǒng)、企業(yè)與云計(jì)算》
《高性能Linux服務(wù)器構(gòu)建實(shí)戰(zhàn)》
Java進(jìn)階
下面有些知識(shí)點(diǎn),界限是非常模糊的。它們你中有我,我中有你,可以說(shuō)是一個(gè)整體。
redis
緩存可以說(shuō)是計(jì)算機(jī)系統(tǒng)中應(yīng)用最廣泛的技術(shù)了。對(duì)于分布式緩存來(lái)說(shuō),最常用的就是Redis了。由于其數(shù)據(jù)結(jié)構(gòu)豐富,被應(yīng)用的場(chǎng)景越來(lái)越多。
基本的5種數(shù)據(jù)類型都知道,但你要說(shuō)出其他幾種,給人的印象就不一樣了。Redis有主從和Cluster兩種集群模式,高可用配置也不相同。
Redis幾乎能適應(yīng)除搜索外的所有互聯(lián)網(wǎng)業(yè)務(wù),對(duì)于其使用來(lái)說(shuō),一些規(guī)范限制是非常有必要的。一般速度越快的系統(tǒng),越容易被長(zhǎng)尾操作給拖死。所以,對(duì)于info命令的內(nèi)容,也應(yīng)有了解。
有三個(gè)點(diǎn)要尤其注意:分布式鎖、限流,以及和源數(shù)據(jù)的同步問(wèn)題。
書(shū)籍
《Redis實(shí)戰(zhàn) 》
《Redis開(kāi)發(fā)與運(yùn)維》
《Redis設(shè)計(jì)與實(shí)現(xiàn)》
Kafka
MQ是分布式系統(tǒng)中非常重要的組件,目前使用最廣泛的就是Kafka。除了用在大數(shù)據(jù)場(chǎng)景中,Kafka也能夠在業(yè)務(wù)系統(tǒng)中使用。
Kafka的速度非???,根據(jù)ACK的級(jí)別配置,可靠性會(huì)增加,但速度會(huì)減緩。對(duì)于消息系統(tǒng)來(lái)說(shuō),監(jiān)控報(bào)警是非常重要的一環(huán),能夠提前預(yù)知系統(tǒng)的問(wèn)題。Kafka的集群自身就是高可用的,依賴Zookeeper組件,了解一些基本概念,包括ISR,能夠更加詳細(xì)的了解這個(gè)過(guò)程。
書(shū)籍
《Kafka入門(mén)與實(shí)踐》
《Kafka技術(shù)內(nèi)幕》
分庫(kù)分表 ShardingJDBC
隨著數(shù)據(jù)的增長(zhǎng),MySQL本身出現(xiàn)了瓶頸。分庫(kù)分表是針對(duì)關(guān)系型數(shù)據(jù)庫(kù)的一套解決方案,把它改造成分布式數(shù)據(jù)庫(kù)。
根據(jù)切分層次,最像回事的是在代理層和驅(qū)動(dòng)層進(jìn)行切入。ShardingJDBC就是在驅(qū)動(dòng)層的一個(gè)組件。
組件本身只是一個(gè)問(wèn)題。在真正的切分之前,會(huì)有垂直拆分和水平拆分之分。我們的線上業(yè)務(wù)也要不停機(jī)的進(jìn)行拆分和切換,一個(gè)全量和增量同步工具都是需要的。
有條件經(jīng)歷這個(gè)過(guò)程的,都是一筆寶貴的財(cái)富。它不僅在技術(shù)上,而且在流程上都有諸多挑戰(zhàn)。你會(huì)體驗(yàn)到技術(shù)、流程、管理,是不分家的。
微服務(wù) & 中間件
目前最火的微服務(wù)架構(gòu)就是SpringCloud。這對(duì)熟悉SSM開(kāi)發(fā)的同學(xué)來(lái)說(shuō), 是非常容易上手的。微服務(wù)有注冊(cè)中心、RPC、負(fù)載均衡、熔斷限流、網(wǎng)關(guān)等關(guān)鍵組件,有些組件有很多不同的替代品。
微服務(wù)拆分后又引申出一系列問(wèn)題,需要一些其他中間件支持。比如監(jiān)控報(bào)警、ELKB、配置中心、調(diào)度中心、調(diào)用鏈等。雖然沒(méi)有微服務(wù)也需要它們,但明顯組合起來(lái),效果會(huì)好的多。
各種A/B測(cè)試,金絲雀,灰度等,基本是終極目標(biāo)之一。
微服務(wù)是一個(gè)復(fù)雜的整體,同時(shí)融合了技術(shù)和流程管理方面的內(nèi)容。
書(shū)籍
《可伸縮服務(wù)架構(gòu):框架與中間件》
《Spring Cloud與Docker微服務(wù)架構(gòu)實(shí)戰(zhàn)》
《架構(gòu)修煉之道》
分布式
當(dāng)服務(wù)器數(shù)量增加,一些服務(wù),包括上面提到的微服務(wù),都需要進(jìn)行協(xié)調(diào)和交互。這就是分布式系統(tǒng)。
分布式的理論基礎(chǔ)有CAP、BASE等。針對(duì)一致性,有特別多的算法,其中Raft作為易懂的新貴,使用越來(lái)越廣泛。
這部分側(cè)重于理論,一旦開(kāi)始進(jìn)入實(shí)踐,寫(xiě)出來(lái)的都是些大家伙。這里有一篇文章,雖然不是很全,聊表心意吧。
書(shū)籍
《NOSQL精粹》
《ZooKeeper:分布式過(guò)程協(xié)同技術(shù)詳解》
《從Paxos到Zookeeper分布式一致性原理與實(shí)踐》
支撐技術(shù)
基本運(yùn)維
我傾向于基礎(chǔ)架構(gòu)和運(yùn)維不分家,因?yàn)樗鼈冇刑嘀睾虾拖嗨频牡胤??;具\(yùn)維和架構(gòu)配合起來(lái),典型的特點(diǎn)就是平臺(tái)化+規(guī)范化。
這里是檢驗(yàn)綜合素質(zhì)的地方,有廣度也有深度。
書(shū)籍
《奔跑吧Ansible》
《Docker——容器與容器云》
《Kubernetes權(quán)威指南》
《Jenkins權(quán)威指南》
《深入理解Nginx》
安全
安全無(wú)小事,建筑工地和系統(tǒng)安全一樣的道理。熟悉一些常用的攻擊和加密解密算法是必要的。
就像是你給家里的門(mén)上鎖:能夠阻擋大部分心懷不軌的人,但無(wú)法阻擋無(wú)所顧忌的暴徒。
你可能發(fā)現(xiàn)并沒(méi)有自己關(guān)注的組件。這不奇怪,比如個(gè)人喜歡的的ES,就找不到一個(gè)合適的位置。這里只是最主要的一點(diǎn)內(nèi)容,就已顯繁雜,一個(gè)大雜燴并不見(jiàn)得好。
值得提醒的是,這些知識(shí),是眾多發(fā)展路線上的一個(gè)分支??赡苡械呐笥?,目前只在其中的一個(gè)點(diǎn)上面奮斗,缺乏所謂的廣度;也可能有的朋友,有著全棧的標(biāo)簽,卻做著SSM的工作。不同的公司需要的技術(shù)水平不盡相同。一個(gè)專注ERP業(yè)務(wù)的公司,會(huì)在項(xiàng)目管理上多些文章;一個(gè)專做IM的團(tuán)隊(duì),可能對(duì)網(wǎng)絡(luò)開(kāi)發(fā)滾瓜爛熟。
到此,相信大家對(duì)“Java后端知識(shí)點(diǎn)有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!