摘要:鑒于目前大多數(shù)服務器環(huán)境都是,提前接觸能夠相輔相成。正則也是必須要掌握的一個知識點。有多種創(chuàng)建多線程的方式,不過目前使用線程池的多一些。
原創(chuàng):小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉(zhuǎn)載請保留出處。
你可能有所感悟。零散的資料讀了很多,但是很難有提升。到處是干貨,但是并沒什么用,簡單來說就是缺乏系統(tǒng)化。另外,噪音太多,雷同的框架一大把,我不至于全都要去學了吧。
這里,我大體根據(jù)基礎、Java基礎、Java進階給分了下類,挑的也都是最常用最重要的工具。
這篇文章耗費了我大量的精力,你要是覺得好,請不要吝嗇你的贊。如果你認同,可以關(guān)注我的微信公眾號xjjdog,里面講的就是這些內(nèi)容。我會嘗試更加系統(tǒng)化。
最新的內(nèi)容會在github持續(xù)更新,添加新的精選相關(guān)文章。地址:
https://github.com/sayhiai/javaok基礎知識 數(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),就是這些復雜工具的具體原始形態(tài),要爛記于心。
培訓機構(gòu)一般沒有時間普及基礎知識,通過算法和數(shù)據(jù)結(jié)構(gòu),“通?!蹦軌蛞谎劭闯鍪欠袷墙?jīng)過培訓。
常用算法算法是某些大廠的門檻。毫無疑問,某些參加過ACM的應屆生,能夠秒殺大多數(shù)工作多年的碼農(nóng)。算法能夠培養(yǎng)邏輯思維能力和動手能力,在剛參加工作的前幾年,是非常大的加分項。但隨著工作年限的增加,它的比重在能力體系中的比重,會慢慢降低。
算法的學習方式就是通過不斷的練習與重復。不精此道的同學,永遠不要試圖解決一個沒見過的問題。一些問題的最優(yōu)解,可能耗費了某個博士畢生的精力,你需要的就是理解記憶以及舉一反三。最快的進階途徑就是刷leetcode。
對于普通研發(fā),排序算法和時間復雜度是必須要掌握的,也是工作和面試中最常用的。時間充裕,也可涉獵動態(tài)規(guī)劃、背包等較高階的算法知識,就是下圖的左列。
書籍《算法導論》
《編程之美》
《數(shù)學之美》
MySQL是應用最廣的關(guān)系型數(shù)據(jù)庫。除了了解基本的使用和建模,一些稍底層的知識也是必要的。
MySQL有存儲引擎的區(qū)別。InnoDB和MyISAM是最常用的,優(yōu)缺點應該明曉。ACID是關(guān)系型數(shù)據(jù)庫的基本屬性,需要了解背后的事務隔離級別。臟讀、幻讀問題的產(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)絡通信是互聯(lián)網(wǎng)時代最有魅力的一個特點,可以說我們的工作和生活,每時每刻都在和它打交道。
連接的三次握手和四次揮手,至今還有很多人非常模糊。造成的后果就是對網(wǎng)絡連接處于的狀態(tài)不慎了解,程序在性能和健壯性上大打折扣。
HTTP是使用最廣泛的協(xié)議,通常都會要求對其有較深入的了解。對于Java來說,熟悉Netty開發(fā)是入門網(wǎng)絡開發(fā)的捷徑。
爬蟲是網(wǎng)絡開發(fā)中另外一個極具魅力的點,但建議使用python而不是java去做。
書籍《HTTP權(quán)威指南》
《TCP/IP詳解 卷一》
科班出身的都學過《計算機組成機構(gòu)》這門課,這非常重要,但很枯燥。結(jié)合Linux理解會直觀的多。鑒于目前大多數(shù)服務器環(huán)境都是Linux,提前接觸能夠相輔相成。
需要搞清楚CPU、內(nèi)存、網(wǎng)絡、I/O設備之間的交互和速度差別。對于計算密集型應用,就需要關(guān)注程序執(zhí)行的效率;對于I/O密集型,要關(guān)注進程(線程)之間的切換以及I/O設備的優(yōu)化以及調(diào)度。這部分知識是開發(fā)一些高性能高可靠中間件的前提,無法繞過。
對于Linux,首先應該掌握的就是日常運維,包括常用命令的使用和軟件安裝配置。正則也是必須要掌握的一個知識點。
腳本編程對后端來說是一個非常大的加分項。它不僅能增加開發(fā)效率,也能在一些突發(fā)問題上使你游刃有余。
書籍《UNIX環(huán)境高級編程(第3版)》
《鳥哥的Linux私房菜》
《Linux內(nèi)核設計與實現(xiàn)》
《Linux命令行大全》
《Linux上,最常用的一批命令解析(10年精選)》
Java基礎 JVMJava程序員的最愛和噩夢。以oracle版本為準,各個jvm版本之間有差別。JVM的知識包含兩方面。一個是存儲級別的,一個是執(zhí)行級別的。
以存儲為例,又分為堆內(nèi)的和堆外的兩種,各有千秋。垃圾回收器就是針對堆內(nèi)內(nèi)存設計的,目前最常用的有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等,都是最常用的。
書籍《深入理解Java虛擬機》
JDK現(xiàn)在,終于到了java程序員的核心了:JDK,一套依據(jù)jvm規(guī)范實現(xiàn)的一套API。我們平常的工作,就是組合這些API,來控制程序的行為。
jdk的代碼非常龐大,內(nèi)容也非常繁雜。最重要的大體包括:集合、多線程、NIO、反射、文件操作、Lambda語法等。這部分內(nèi)容加上下面的SSM,基本上就是大多數(shù)小伙伴玩耍的地方。
假如說數(shù)據(jù)結(jié)構(gòu)和算法是理論,這里就是支撐理論的實現(xiàn)。Java玩的好不好,就是說這里。
書籍《Effective Java 中文版》
《數(shù)據(jù)結(jié)構(gòu)與算法分析:Java語言描述》
你可能會用SSM開發(fā)項目,覺得編程無非就這些東西。設計模式爛記于心,IOC、AOP手到擒來。這里集中了大部分同行,有些可能到此為止就Ok了,因為有些同學接下來的重點是項目管理,而不是技術(shù)。
SSM最擅長的是Web開發(fā)。目前的表現(xiàn)形式逐漸多樣化,隨著前后端分離的盛行,Restful這種有著明確語義的模式逐漸流行。
書籍《Head First 設計模式》
《Spring揭秘》
《SpringBoot揭秘》
《MyBatis技術(shù)內(nèi)幕》
《深入剖析Tomcat》
其實跟著文檔走一遍就行了,很多書籍就是翻譯而已。
并發(fā)編程現(xiàn)在的服務器都是多核的了,并發(fā)編程也來越多。java有多種創(chuàng)建多線程的方式,不過目前使用線程池的多一些。線程池的基礎就是AQS,基于AQS,又有很多的工具類擴展。
java同時有很多加鎖和線程同步的方式,鎖有樂觀鎖/悲觀鎖之分,又有公平鎖/非公平鎖之分,寫一段死鎖代碼還是有點難度的。
有兩個問題被考察的頻率非常高,一個是ABA,一個是偽共享。并發(fā)編程一般和網(wǎng)絡編程配對,提供對某個問題的一系列解決方案。
這是java中一塊難啃的骨頭。
書籍《Java核心技術(shù)系列:Java多線程編程核心技術(shù)》
《Java性能權(quán)威指南》
《Java并發(fā)編程實戰(zhàn)》
有人認為這應該是SRE的范疇,但通常最熟悉業(yè)務的卻是開發(fā),技術(shù)并沒有什么明顯的界限。掌握這些內(nèi)容,會讓你在蕓蕓大眾中脫穎而出。
從操作系統(tǒng)的內(nèi)核優(yōu)化到數(shù)據(jù)庫的索引和事務優(yōu)化,這部分的技能是建立在牢固的基礎之上的。也就是操作系統(tǒng)的基礎。
操作系統(tǒng)的每個組件都有可能出現(xiàn)問題,對于一個java后端來說,要能夠非常容易的定位到這些問題。比如常見的內(nèi)存溢出問題。
書籍《性能之巔:洞悉系統(tǒng)、企業(yè)與云計算》
《高性能Linux服務器構(gòu)建實戰(zhàn)》
下面有些知識點,界限是非常模糊的。它們你中有我,我中有你,可以說是一個整體。
Redis緩存可以說是計算機系統(tǒng)中應用最廣泛的技術(shù)了。對于分布式緩存來說,最常用的就是Redis了。由于其數(shù)據(jù)結(jié)構(gòu)豐富,被應用的場景越來越多。
基本的5種數(shù)據(jù)類型都知道,但你要說出其他幾種,給人的印象就不一樣了。Redis有主從和Cluster兩種集群模式,高可用配置也不相同。
Redis幾乎能適應除搜索外的所有互聯(lián)網(wǎng)業(yè)務,對于其使用來說,一些規(guī)范限制是非常有必要的。一般速度越快的系統(tǒng),越容易被長尾操作給拖死。所以,對于info命令的內(nèi)容,也應有了解。
有三個點要尤其注意:分布式鎖、限流,以及和源數(shù)據(jù)的同步問題。
書籍《Redis實戰(zhàn) 》
《Redis開發(fā)與運維》
《Redis設計與實現(xiàn)》
《這可能是最中肯的Redis規(guī)范了》
KafkaMQ是分布式系統(tǒng)中非常重要的組件,目前使用最廣泛的就是Kafka。除了用在大數(shù)據(jù)場景中,Kafka也能夠在業(yè)務系統(tǒng)中使用。
Kafka的速度非常快,根據(jù)ACK的級別配置,可靠性會增加,但速度會減緩。對于消息系統(tǒng)來說,監(jiān)控報警是非常重要的一環(huán),能夠提前預知系統(tǒng)的問題。Kafka的集群自身就是高可用的,依賴Zookeeper組件,了解一些基本概念,包括ISR,能夠更加詳細的了解這個過程。
書籍《Kafka入門與實踐》
《Kafka技術(shù)內(nèi)幕》
《Kafka基礎知識索引》
分庫分表 ShardingJDBC隨著數(shù)據(jù)的增長,MySQL本身出現(xiàn)了瓶頸。分庫分表是針對關(guān)系型數(shù)據(jù)庫的一套解決方案,把它改造成分布式數(shù)據(jù)庫。
根據(jù)切分層次,最像回事的是在代理層和驅(qū)動層進行切入。ShardingJDBC就是在驅(qū)動層的一個組件。
組件本身只是一個問題。在真正的切分之前,會有垂直拆分和水平拆分之分。我們的線上業(yè)務也要不停機的進行拆分和切換,一個全量和增量同步工具都是需要的。
有條件經(jīng)歷這個過程的,都是一筆寶貴的財富。它不僅在技術(shù)上,而且在流程上都有諸多挑戰(zhàn)。你會體驗到技術(shù)、流程、管理,是不分家的。
相關(guān)文章《“分庫分表" ?選型和流程要慎重,否則會失控》
微服務 & 中間件目前最火的微服務架構(gòu)就是SpringCloud。這對熟悉SSM開發(fā)的同學來說, 是非常容易上手的。微服務有注冊中心、RPC、負載均衡、熔斷限流、網(wǎng)關(guān)等關(guān)鍵組件,有些組件有很多不同的替代品。
微服務拆分后又引申出一些列問題,需要一些其他中間件支持。比如監(jiān)控報警、ELKB、配置中心、調(diào)度中心、調(diào)用鏈等。雖然沒有微服務也需要它們,但明顯組合起來,效果會好的多。
各種A/B測試,金絲雀,灰度等,基本是終極目標之一。
微服務是一個復雜的整體,同時融合了技術(shù)和流程管理方面的內(nèi)容。
《可伸縮服務架構(gòu):框架與中間件》
《Spring Cloud與Docker微服務架構(gòu)實戰(zhàn)》
《架構(gòu)修煉之道》
當服務器數(shù)量增加,一些服務,包括上面提到的微服務,都需要進行協(xié)調(diào)和交互。這就是分布式系統(tǒng)。
分布式的理論基礎有CAP、BASE等。針對一致性,有特別多的算法,其中Raft作為易懂的新貴,使用越來越廣泛。
這部分側(cè)重于理論,一旦開始進入實踐,寫出來的都是些大家伙。這里有一篇文章,雖然不是很全,聊表心意吧。
相關(guān)文章《也淺談下分布式存儲要點》
書籍《NoSQL精粹》
《ZooKeeper:分布式過程協(xié)同技術(shù)詳解》
《從Paxos到Zookeeper分布式一致性原理與實踐》
我傾向于基礎架構(gòu)和運維不分家,因為它們有太多重合和相似的地方。基本運維和架構(gòu)配合起來,典型的特點就是平臺化+規(guī)范化。
這里是檢驗綜合素質(zhì)的地方,有廣度也有深度。
相關(guān)文章《這么多監(jiān)控組件,總有一款適合你》
書籍《奔跑吧Ansible》
《Docker——容器與容器云》
《Kubernetes權(quán)威指南》
《Jenkins權(quán)威指南》
《深入理解Nginx》
安全無小事,建筑工地和系統(tǒng)安全一樣的道理。熟悉一些常用的攻擊和加密解密算法是必要的。
就像是你給家里的門上鎖:能夠阻擋大部分心懷不軌的人,但無法阻擋無所顧忌的暴徒。
End你可能發(fā)現(xiàn)并沒有自己關(guān)注的組件。這不奇怪,比如個人喜歡的的ES,就找不到一個合適的位置。這里只是最主要的一點內(nèi)容,就已顯繁雜,一個大雜燴并不見得好。
值得提醒的是,這些知識,是眾多發(fā)展路線上的一個分支??赡苡械呐笥?,目前只在其中的一個點上面奮斗,缺乏所謂的廣度;也可能有的朋友,有著全棧的標簽,卻做著SSM的工作。不同的公司需要的技術(shù)水平不盡相同。一個專注ERP業(yè)務的公司,會在項目管理上多些文章;一個專做IM的團隊,可能對網(wǎng)絡開發(fā)滾瓜爛熟。
再次強調(diào)。此技術(shù)要點為個人整理,為了修復認知上的偏差,我會維護一個github項目,實時跟進分類和增加新的相關(guān)文章(歡迎提交PR)。如果你有什么想法,請盡快反饋給我,非常感謝。
作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,?進一步交流。?
近期熱門文章?
《必看!java后端,亮劍誅仙》
后端技術(shù)索引,中肯火爆
《Linux上,最常用的一批命令解析(10年精選)》
CSDN發(fā)布首日,1k贊。點贊率1/8。
《這次要是講不明白Spring Cloud核心組件,那我就白編這故事了》
用故事講解核心組件,包你滿意
《Linux生產(chǎn)環(huán)境上,最常用的一套“Sed“技巧》
最常用系列Sed篇,簡單易懂。Vim篇更加易懂。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76263.html
摘要:我不聽,我就是這么命名。任何服務啟動以后,都會把自己注冊到的注冊表中當服務死亡的時候,也會通知。服務拿到結(jié)果后,會把結(jié)果緩存在本地的注冊表里。根據(jù)負載均衡策略,從注冊表中選擇一個真正的實例地址。 原創(chuàng):小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉(zhuǎn)載請保留出處。 這幾天可真是熱啊,泡個海澡是再好不過了。玩的正起勁,突然腳底絆上一股暗流,然后我就一直在水里旋轉(zhuǎn)旋轉(zhuǎn)旋轉(zhuǎn)...終于...
Web前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程。第一階段:前端基礎(HTML / CSS / JavaScript / jQuery)初識HTML+CSS【學習筆記】HTML基礎完結(jié)篇html基礎知識——標簽詳解html基礎知識——與用戶交互!(表單標簽)html基礎知識——css樣式①史上最全Html和CSS布局技巧面試題匯總 HTML+CSS篇CSS 最核心的幾個概念純HTM...
Web前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程。第一階段:前端基礎(HTML / CSS / JavaScript / jQuery)初識HTML+CSS【學習筆記】HTML基礎完結(jié)篇html基礎知識——標簽詳解html基礎知識——與用戶交互!(表單標簽)html基礎知識——css樣式①史上最全Html和CSS布局技巧面試題匯總 HTML+CSS篇CSS 最核心的幾個概念純HTM...
閱讀 630·2021-09-24 09:48
閱讀 2492·2021-08-26 14:14
閱讀 517·2019-08-30 13:08
閱讀 1445·2019-08-29 15:22
閱讀 3067·2019-08-29 11:06
閱讀 1001·2019-08-26 18:26
閱讀 1034·2019-08-26 13:53
閱讀 2513·2019-08-26 12:21