新手程序員通常會走入一個誤區(qū)
就是認為學(xué)習(xí)了一門語言,就可以稱為是某某語言工程師了屿衅。但事實上真的是這樣嗎埃难?其實并非如此。
今天我們就來聊一聊涤久,Java 開發(fā)工程師到底開發(fā)的是什么東西涡尘。準(zhǔn)確點來說,Java后端到底在做什么响迂?
通俗來講
大家都知道 Java 是一門后端語言考抄,后端指的就是服務(wù)端,服務(wù)端代碼一般運行在服務(wù)器上蔗彤,通常我們運行Java 程序的服務(wù)器都是 Linux 服務(wù)器川梅。
這些服務(wù)器在互聯(lián)網(wǎng)公司中一般放在一個叫做機房的地方里,于是像我們這類 Java 程序員的代碼一般也運行在這些機房里的服務(wù)器中然遏。
Java 里有一個概念叫做虛擬機贫途,你可以把它理解為一個安卓的模擬器,比如你在電腦上裝了一個安卓模擬器待侵,就可以通過它來運行安卓應(yīng)用程序丢早,比如裝個 APP,手機游戲什么的秧倾。
所以當(dāng)你在電腦上安裝了一個叫做 JDK 的東西時怨酝,電腦里就有了 JRE 也就是 Java 運行環(huán)境,有了這個運行環(huán)境那先,你就可以運行 Java 應(yīng)用程序了农猬。
Java基礎(chǔ)知識
知道 Java 程序如何運行在計算機上之后,我們再來講一講平時學(xué)的一些 Java 基礎(chǔ)知識胃榕,它們到底有什么用盛险?
其實平時這一些 Java 基礎(chǔ)語法都僅僅是你寫代碼的一些基礎(chǔ)知識,就相當(dāng)于英語中的 26 個字母勋又,常見的有基本類型變量苦掘、for 循環(huán)、if else 等等基本語法楔壤,掌握了這些基礎(chǔ)知識之后鹤啡,你就可以上手寫一些很簡單的代碼了。
除此之外蹲嚣,Java 還有一些比較特別的概念递瑰,比如面向?qū)ο蟮奶匦运钌渲杏蓄悺⒔涌诘雀拍疃恫俊槭裁?Java 要引入這些東西呢说贝,其實就是想讓使用者更好地進行設(shè)計、抽象和編程慎颗。
對于新手來說乡恕,你不需要理解得特別的深刻,因為這些東西只有你在你真正寫代碼之后才能逐步去理解俯萎。
集合類
說完基本知識之后傲宜,我想你也會好奇,Java里經(jīng)常提到的一些集合類是干嘛的呢夫啊,因為在現(xiàn)實生活中有很多場景函卒,需要用到集合類,比如說一個用戶名列表撇眯,你要怎么存呢报嵌?
你會用一個 List 來做對不對,所以集合類的作用就是讓你在編程中更好的存儲數(shù)據(jù)叛本。
事實上沪蓬,集合類的概念最早是來源于數(shù)據(jù)結(jié)構(gòu)的,因為計算機里有很多特殊的數(shù)據(jù)存儲結(jié)構(gòu)来候,比如文件樹,比如鏈表和數(shù)組等結(jié)構(gòu)逸雹,因此計算機理論把這些存儲數(shù)據(jù)的模型抽象成一些常見的結(jié)構(gòu)营搅,統(tǒng)稱為數(shù)據(jù)結(jié)構(gòu)。
并發(fā)編程
那么梆砸,Java 中的并發(fā)編程又是做什么的呢转质,Java 中的多線程是為了更好地利用電腦中的CPU核心,通過并發(fā)編程帖世,就可以提高程序并發(fā)的效率休蟹。
但是并發(fā)編程的背后需要操作系統(tǒng)的支持,以及計算機硬件的支持日矫,所以赂弓,如果你要完全地理解多線程,絕不僅僅是理解 Java 里的 Thread 或者是線程池就足夠了哪轿,你還需要去理解操作系統(tǒng)盈魁,以及計算機組成原理。
和并發(fā)編程類似窃诉,Java 里也有網(wǎng)絡(luò)編程的概念杨耙,Java 里的網(wǎng)絡(luò)編程和其他語言大同小異赤套,其實也是基于 TCP/IP 協(xié)議實現(xiàn)的一套 API,通過網(wǎng)絡(luò)編程珊膜,你就可以在程序中把你想傳輸?shù)臄?shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)的另一端容握,有了網(wǎng)絡(luò)編程和并發(fā)編程之后,Java 程序員的能量已經(jīng)很大了车柠。
后端技術(shù)
講完這幾點之后接下來再談?wù)勎ň冢覀兺ǔUf的 Java 后端技術(shù)到底是什么,就拿支付寶來舉例吧堪遂,曾經(jīng)的支付寶用戶數(shù)并不多介蛉,一臺服務(wù)器,一個數(shù)據(jù)庫就可以支持所有的業(yè)務(wù)了溶褪。
當(dāng)支付寶的用戶越來越多的時候币旧,一臺服務(wù)器無法同時滿足海量用戶的需求,于是開始出現(xiàn)了多臺服務(wù)器猿妈,多臺服務(wù)器組成了一個集群吹菱,用戶可以通過負載均衡的方式訪問這些服務(wù)器,每個用戶可能會訪問到不同的機器上彭则,這樣子就達到了分流的效果鳍刷,服務(wù)器的壓力就會減小。
由于數(shù)據(jù)庫需要保證數(shù)據(jù)的可靠性俯抖,萬一某一臺數(shù)據(jù)庫掛了输瓜,并且沒有備份的話,那么這個數(shù)據(jù)就無法訪問了芬萍,這在大型系統(tǒng)中是不允許出現(xiàn)的尤揣,于是乎,就有了數(shù)據(jù)庫的主從部署柬祠。
但事實上北戏,隨著業(yè)務(wù)發(fā)展,數(shù)據(jù)庫的壓力也越來越大漫蛔,主備部署并不能解決數(shù)據(jù)庫訪問性能的問題嗜愈,于是乎我們需要進行分庫分表,在數(shù)據(jù)庫主備的基礎(chǔ)上莽龟,我們會把一個數(shù)據(jù)量很大的表拆成多個表蠕嫁,并且把數(shù)據(jù)庫請求分流到不同的數(shù)據(jù)上,比如說100個分庫轧房,100個分表拌阴,就相當(dāng)于把一個數(shù)據(jù)表劃分成10000個數(shù)據(jù)表。
分布式技術(shù)
此時又出現(xiàn)一個問題奶镶,如果一個數(shù)據(jù)庫有多個備庫迟赃,并且當(dāng)主庫掛掉的時候需要進行主從切換時陪拘,主備數(shù)據(jù)庫之間的數(shù)據(jù)就可能發(fā)生不一致,而這也是分布式理論研究的問題之一纤壁,因為比較復(fù)雜左刽,我們這里就略過不講。
剛才說到了分布式技術(shù)酌媒,其實負載均衡欠痴、分庫分表都是分布式技術(shù)的一種實現(xiàn),如果你不想做分庫分表秒咨,那還有什么辦法能夠減輕數(shù)據(jù)庫訪問的壓力呢喇辽?于是緩存就出現(xiàn)了,緩存可以讓服務(wù)器先把請求打到緩存上雨席,由于緩存的數(shù)據(jù)一般在內(nèi)存中菩咨,所以訪問速度會非常快陡厘,這些請求無需經(jīng)過數(shù)據(jù)庫抽米。
隨著業(yè)務(wù)發(fā)展,緩存的單點壓力也會比較大糙置,于是乎分布式緩存就出現(xiàn)了云茸,通常來說,緩存難以保證數(shù)據(jù)的可靠性谤饭,因為它們的數(shù)據(jù)可能會丟失标捺,同時緩存只能存儲一部分的數(shù)據(jù),并不能解決所有問題网持。
所以當(dāng)某些業(yè)務(wù)的請求量非常大的時候宜岛,光靠緩存也解決不了問題,此時我們還可以通過消息隊列來幫我們解決大流量并發(fā)請求的問題功舀。
總結(jié)
我們可以通過消息隊列來存儲一部分的請求消息,然后根據(jù)我們服務(wù)器處理請求的能力身弊,把消息再逐步取出來辟汰,接著去把這些消息逐漸地進行處理,這樣就可以很好的解決高并發(fā)的問題阱佛。當(dāng)然帖汞,前提是消息隊列要保證消息存儲的可靠性,這也是大部分消息隊列都會保證的能力凑术。
一口氣講了這么多翩蘸,算是把 Java 后端的大概面貌介紹清楚了,除此之外還有很多東西沒講到淮逊,真要講完的話一晚上也說不完催首。
總體來說扶踊,Java 后端技術(shù),說難不難說簡單也不簡單郎任,我盡量把這些內(nèi)容都講的比較通俗易懂秧耗,事實上每項技術(shù)的背后都有特別多復(fù)雜的實現(xiàn)原理,當(dāng)然舶治,在你理解了 Java 后端技術(shù)的整體概念以后分井,相信對于你之后的學(xué)習(xí)會更有幫助。