Reactor 和Rxjava是Reactive Programming范例的一個(gè)具體實(shí)現(xiàn),可以概括為:

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、聞喜網(wǎng)絡(luò)推廣、成都微信小程序、聞喜網(wǎng)絡(luò)營(yíng)銷、聞喜企業(yè)策劃、聞喜品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供聞喜建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:chinadenli.net
作為反應(yīng)式編程方向的第一步,Microsoft在.NET生態(tài)系統(tǒng)中創(chuàng)建了Reactive Extensions(Rx)庫(kù)。然后RxJava在JVM上實(shí)現(xiàn)了響應(yīng)式編程。隨著時(shí)間的推移,通過Reactive Streams工作出現(xiàn)了Java的標(biāo)準(zhǔn)化,這一規(guī)范定義了JVM上的反應(yīng)庫(kù)的一組接口和交互規(guī)則。它的接口已經(jīng)在父類Flow下集成到Java 9中。
另外Java 8還引入了Stream,它旨在有效地處理數(shù)據(jù)流(包括原始類型),這些數(shù)據(jù)流可以在沒有延遲或很少延遲的情況下訪問。它是基于拉的,只能使用一次,缺少與時(shí)間相關(guān)的操作,并且可以執(zhí)行并行計(jì)算,但無法指定要使用的線程池。但是它還沒有設(shè)計(jì)用于處理延遲操作,例如I / O操作。其所不支持的特性就是Reactor或RxJava等Reactive API的用武之地。
Reactor 或 Rxjava等反應(yīng)性API也提供Java 8 Stream等運(yùn)算符,但它們更適用于任何流序列(不僅僅是集合),并允許定義一個(gè)轉(zhuǎn)換操作的管道,該管道將應(yīng)用于通過它的數(shù)據(jù),這要?dú)w功于方便的流暢API和使用lambdas。它們旨在處理同步或異步操作,并允許您緩沖,合并,連接或?qū)?shù)據(jù)應(yīng)用各種轉(zhuǎn)換。
首先考慮一下,為什么需要這樣的異步反應(yīng)式編程庫(kù)?現(xiàn)代應(yīng)用程序可以支持大量并發(fā)用戶,即使現(xiàn)代硬件的功能不斷提高,現(xiàn)代軟件的性能仍然是一個(gè)關(guān)鍵問題。
人們可以通過兩種方式來提高系統(tǒng)的能力:
通常,Java開發(fā)人員使用阻塞代碼編寫程序。這種做法很好,直到出現(xiàn)性能瓶頸,此時(shí)需要引入額外的線程。但是,資源利用率的這種擴(kuò)展會(huì)很快引入爭(zhēng)用和并發(fā)問題。
更糟糕的是,會(huì)導(dǎo)致浪費(fèi)資源。一旦程序涉及一些延遲(特別是I / O,例如數(shù)據(jù)庫(kù)請(qǐng)求或網(wǎng)絡(luò)調(diào)用),資源就會(huì)被浪費(fèi),因?yàn)榫€程(或許多線程)現(xiàn)在處于空閑狀態(tài),等待數(shù)據(jù)。
所以并行化方法不是靈丹妙藥,獲得硬件的全部功能是必要的。
第二種方法,尋求現(xiàn)有資源的更高的使用率,可以解決資源浪費(fèi)問題。通過編寫異步,非阻塞代碼,您可以使用相同的底層資源將執(zhí)行切換到另一個(gè)活動(dòng)任務(wù),然后在異步處理完成后返回到當(dāng)前線程進(jìn)行繼續(xù)處理。
但是如何在JVM上生成異步代碼? Java提供了兩種異步編程模型:
但是上面兩種方法都有局限性。首先多個(gè)callback難以組合在一起,很快導(dǎo)致代碼難以閱讀以及難以維護(hù)(稱為“Callback Hell”):
考慮下面一個(gè)例子:在用戶的UI上展示用戶喜歡的top 5個(gè)商品的詳細(xì)信息,如果不存在的話則調(diào)用推薦服務(wù)獲取5個(gè);這個(gè)功能的實(shí)現(xiàn)需要三個(gè)服務(wù)支持:一個(gè)是獲取用戶喜歡的商品的ID的接口(userService.getFavorites),第二個(gè)是獲取商品詳情信息接口(favoriteService.getDetails),第三個(gè)是推薦商品與商品詳情的服務(wù)(suggestionService.getSuggestions),基于callback模式實(shí)現(xiàn)上面功能代碼如下:
如上為了實(shí)現(xiàn)該功能,我們寫了很多代碼,使用了大量callback,這些代碼比較晦澀難懂,并且存在代碼重復(fù),下面我們使用Reactor來實(shí)現(xiàn)等價(jià)的功能:
future相比callback要好一些,但盡管CompletableFuture在Java 8上進(jìn)行了改進(jìn),但它們?nèi)匀槐憩F(xiàn)不佳。一起編排多個(gè)future是可行但是不容易的,它們不支持延遲計(jì)算(比如rxjava中的defer操作)和高級(jí)錯(cuò)誤處理,例如下面例子。考慮另外一個(gè)例子:首先我們獲取一個(gè)id列表,然后根據(jù)id分別獲取對(duì)應(yīng)的name和統(tǒng)計(jì)數(shù)據(jù),然后組合每個(gè)id對(duì)應(yīng)的name和統(tǒng)計(jì)數(shù)據(jù)為一個(gè)新的數(shù)據(jù),最后輸出所有組合對(duì)的值,下面我們使用CompletableFuture來實(shí)現(xiàn)這個(gè)功能,以便保證整個(gè)過程是異步的,并且每個(gè)id對(duì)應(yīng)的處理是并發(fā)的:
Reactor本身提供了更多的開箱即用的操作符,使用Reactor來實(shí)現(xiàn)上面功能代碼如下:
如上代碼使用reactor方式編寫的代碼相比使用CompletableFuture實(shí)現(xiàn)相同功能來說,更簡(jiǎn)潔,更通俗易懂。
可組合性,指的是編排多個(gè)異步任務(wù)的能力,使用先前任務(wù)的結(jié)果作為后續(xù)任務(wù)的輸入或以fork-join方式執(zhí)行多個(gè)任務(wù)。
編排任務(wù)的能力與代碼的可讀性和可維護(hù)性緊密相關(guān)。隨著異步過程層數(shù)量和復(fù)雜性的增加,能夠編寫和讀取代碼變得越來越困難。正如我們所看到的,callback模型很簡(jiǎn)單,但其主要缺點(diǎn)之一是,對(duì)于復(fù)雜的處理,您需要從回調(diào)執(zhí)行回調(diào),本身嵌套在另一個(gè)回調(diào)中,依此類推。那個(gè)混亂被稱為Callback Hell,正如你可以猜到的(或者從經(jīng)驗(yàn)中得知),這樣的代碼很難回歸并推理。
Reactor提供了豐富的組合選項(xiàng),其中代碼反映了抽象過程的組織,并且所有內(nèi)容通常都保持在同一級(jí)別(嵌套最小化)。
原材料可以經(jīng)歷各種轉(zhuǎn)換和其他中間步驟,或者是將中間元素聚集在一起形成較大裝配線的一部分。如果在裝配線中某一點(diǎn)出現(xiàn)堵塞,受影響的工作站可向上游發(fā)出信號(hào)以限制原材料的向下流動(dòng)。
雖然Reactive Streams規(guī)范根本沒有指定運(yùn)算符,但Reactor或者rxjava等反應(yīng)庫(kù)的最佳附加值之一是它們提供的豐富的運(yùn)算符。這些涉及很多方面,從簡(jiǎn)單的轉(zhuǎn)換和過濾到復(fù)雜的編排和錯(cuò)誤處理。
在Reactor中,當(dāng)您編寫Publisher鏈時(shí),默認(rèn)情況下數(shù)據(jù)不會(huì)啟動(dòng)。相反,您可以創(chuàng)建異步過程的抽象描述(這可以幫助重用和組合)。
上游傳播信號(hào)也用于實(shí)現(xiàn)背壓,我們?cè)谘b配線中將其描述為當(dāng)工作站比上游工作站處理速度慢時(shí)向上游線路發(fā)送的反饋信號(hào)。
這將推模型轉(zhuǎn)換為推拉式混合模式,如果上游生產(chǎn)了很多元素,則下游可以從上游拉出n個(gè)元素。但是如果元素沒有準(zhǔn)備好,就會(huì)在上游生產(chǎn)出元素后推數(shù)據(jù)到下游。
(一)食物鏈與營(yíng)養(yǎng)級(jí)
食物鏈(food cycle),簡(jiǎn)單來說,就是一種生物以另一種生物為食,而另一種生物又以第三種生物為食……彼此就形成一個(gè)以食物為紐帶的鏈鎖關(guān)系。比如在草原中,兔子以草為食,而狐以兔子為食,狼又捕食狐,狼又被更兇猛的虎或獅子捕食,這就是一個(gè)食物鏈。實(shí)際上,在自然界食物鏈?zhǔn)且粋€(gè)很復(fù)雜的關(guān)系,生物與生物之間存在一個(gè)相互制約的關(guān)系,是制約一個(gè)群落穩(wěn)定性的重要因素。
營(yíng)養(yǎng)級(jí)(trophic level)是指食物鏈中的每一個(gè)環(huán)節(jié)。如綠色植物是一個(gè)營(yíng)養(yǎng)級(jí),兔子或食草動(dòng)物是一個(gè)營(yíng)養(yǎng)級(jí),狼或食肉動(dòng)物又是一個(gè)營(yíng)養(yǎng)級(jí)(圖13-4)。營(yíng)養(yǎng)級(jí)實(shí)際上就是一個(gè)儲(chǔ)存能量的一些生物組合,它可劃分為第一個(gè)營(yíng)養(yǎng)級(jí)(位于最低層,如綠色植物)、第二個(gè)營(yíng)養(yǎng)級(jí)(如食草動(dòng)物)、第三個(gè)營(yíng)養(yǎng)級(jí)(食肉動(dòng)物)……以此類推,還可以有第四個(gè)、第五個(gè)營(yíng)養(yǎng)級(jí)。
(二)生態(tài)系統(tǒng)及其組成
生態(tài)系統(tǒng)(ecosystem)一詞是由英國(guó)植物生態(tài)學(xué)家Tansley于1935年提出來的。現(xiàn)在的定義是指在一定時(shí)間和空間范圍內(nèi),所有生物和非生物的總和(表13-2)。生態(tài)系統(tǒng)是一個(gè)復(fù)雜的綜合體,生物與生物或與非生物之間借助于能量流動(dòng)、物質(zhì)循環(huán)和信息傳遞而相互聯(lián)系、相互影響、相互依存,并形成具有自組織和自調(diào)節(jié)功能的復(fù)合體。
生態(tài)系統(tǒng)的范圍可大可小,大到全球的生物圈,小到一個(gè)池塘等。無論大小如何,生態(tài)系統(tǒng)都應(yīng)包括生產(chǎn)者、消費(fèi)者、分解者和無機(jī)環(huán)境四個(gè)組成部分。
表13-2 生態(tài)系統(tǒng)的結(jié)構(gòu)
(引自郝志功,1988)
無機(jī)環(huán)境即非生物的物質(zhì)和能量,其中包括水、氣體、土壤和陽(yáng)光等,陽(yáng)光是生物的最主要來源。生產(chǎn)者是生態(tài)系統(tǒng)中最積極的因素,它包括所有的綠色植物和某些細(xì)菌。它們通過光合作用,將二氧化碳和水等無機(jī)物轉(zhuǎn)化成有機(jī)物,將太陽(yáng)能儲(chǔ)存起來,使生態(tài)系統(tǒng)獲得能量。消費(fèi)者是生態(tài)系統(tǒng)的消極因素,它不能為生態(tài)系統(tǒng)制造有機(jī)物和能量,而是直接或間接地依賴于生產(chǎn)者而生存,消費(fèi)者包括各類動(dòng)物。分解者也是生態(tài)系統(tǒng)的積極因素,是把生態(tài)系統(tǒng)中一些復(fù)雜的有機(jī)物逐步分解為簡(jiǎn)單的無機(jī)物,便于生產(chǎn)者吸收。它包括細(xì)菌、真菌、土壤原生動(dòng)物等。
(三)生態(tài)系統(tǒng)中的能量流動(dòng)和物質(zhì)循環(huán)
生態(tài)系統(tǒng)的能量是處于不斷的流動(dòng)之中的。能量流動(dòng)不僅使生態(tài)系統(tǒng)各個(gè)部分都能獲得能量,保持穩(wěn)定性,而且使生態(tài)系統(tǒng)中各種生物之間建立聯(lián)系。生態(tài)系統(tǒng)中的能量流動(dòng)是通過食物鏈來完成的(圖13-4)。如綠色植物把太陽(yáng)能轉(zhuǎn)化成生態(tài)系統(tǒng)內(nèi)部的能量,而食草動(dòng)物又把綠色植物中的能量轉(zhuǎn)移到第二營(yíng)養(yǎng)級(jí)上,食肉動(dòng)物又把能量轉(zhuǎn)移到第三營(yíng)養(yǎng)級(jí)。這樣,生態(tài)系統(tǒng)中的能量就一級(jí)一級(jí)地流動(dòng)下去。
生態(tài)系統(tǒng)中的能量流動(dòng)是遵循能量守恒定律的,既不能產(chǎn)生,也不能消亡。由于生態(tài)系統(tǒng)是一個(gè)開放系統(tǒng),能量流動(dòng)是單向的不可逆過程,始終是從能量較豐富的低營(yíng)養(yǎng)級(jí)流向高營(yíng)養(yǎng)級(jí)。生態(tài)系統(tǒng)能量流動(dòng)另一個(gè)原則是“十分之一”法則(圖13-5),就是在能量流動(dòng)過程中,前一個(gè)營(yíng)養(yǎng)級(jí)的能量轉(zhuǎn)移給后一個(gè)營(yíng)養(yǎng)級(jí)的能量效率一般為10%左右,其他的能量通過散熱或呼吸、排泄等形式輸出生態(tài)系統(tǒng)。
圖13-4 一個(gè)簡(jiǎn)化了的陸地生態(tài)系統(tǒng)及食物鏈
(引自王翊亭等,1985)
圖13-5 生態(tài)系統(tǒng)能量傳遞的“十分之一”法則
(引自祝延成等,1993)
生態(tài)系統(tǒng)中的物質(zhì)循環(huán)是指各種物質(zhì)和元素從環(huán)境到生物,又從生物到環(huán)境的這種往返不停的運(yùn)動(dòng)。維持生命所必需的各種化學(xué)元素,通過食物鏈不停地在生產(chǎn)者、消費(fèi)者和分解者之間循環(huán)反復(fù)利用,如氧、碳、氮、磷等元素。以碳為例,它以CO2 的形式,經(jīng)光合作用被綠色植物或藻類固存,一些食草動(dòng)物又把這部分碳轉(zhuǎn)移到自己的體內(nèi),其中一部分又以CO2 的形式通過呼吸排出體外進(jìn)入大氣,又進(jìn)行光合作用而循環(huán),一部分以廢物排出體外,被分解者分解之后又被植物吸收,余下的通過食物鏈轉(zhuǎn)移到食肉動(dòng)物體內(nèi)。
(四)生態(tài)系統(tǒng)的分類
生態(tài)系統(tǒng)的分類有多種方案。如按生態(tài)系統(tǒng)的生物成分,可分為植物生態(tài)系統(tǒng)、動(dòng)物生態(tài)系統(tǒng)、微生物生態(tài)系統(tǒng)、人類生態(tài)系統(tǒng);若按生態(tài)系統(tǒng)的非生物成分和特征,從宏觀上可分為陸地生態(tài)系統(tǒng)和水生生態(tài)系統(tǒng);如果按照人類活動(dòng)及其影響程度,可分為自然生態(tài)系統(tǒng)、半自然生態(tài)系統(tǒng)和人工復(fù)合生態(tài)系統(tǒng)。陸地生態(tài)系統(tǒng)的類型可簡(jiǎn)列如下表(表13-3):
表13-3 陸地生態(tài)系統(tǒng)的類型
一、日志相關(guān)類庫(kù)
日志庫(kù)是很常見的,因?yàn)槟阍诿恳粋€(gè)項(xiàng)目中都需要他們。打印日志是服務(wù)器端應(yīng)用中最重要的事情,因?yàn)槿罩臼悄懔私饽愕某绦虬l(fā)生了什么的唯一途徑。盡管JDK附帶自己的日志庫(kù),但是還是有很多更好的選擇可用,例如 Log4j 、 SLF4j 和 LogBack。
Java開發(fā)人員應(yīng)該熟悉日志記錄的利弊, 并且了解為什么SLF4J要比Log4J要好。
二、JSON解析庫(kù)
在當(dāng)今世界的web服務(wù)和物聯(lián)網(wǎng)中(IoT),JSON已經(jīng)取代了XML,成為從客戶端到服務(wù)器傳送信息的首選協(xié)議。有一個(gè)好消息和一個(gè)壞消息。壞消息 是JDK沒有提供JSON庫(kù)。好消息是有許多優(yōu)秀的第三方庫(kù)可以用來解析和創(chuàng)建JSON消息,如 Jackson 和 Gson
一個(gè)Java web開發(fā)人員應(yīng)該熟悉Jackson 和 Gson這兩種中的至少一種庫(kù)。
三、單元測(cè)試庫(kù)
單元測(cè)試技術(shù)的使用,是區(qū)分一個(gè)一般的開發(fā)者和好的開發(fā)者的重要指標(biāo)。程序員經(jīng)常有各種借口不寫單元測(cè)試,但最常見的借口就是缺乏經(jīng)驗(yàn)和知識(shí)。常見的單測(cè)框架有 JUnit , Mockito 和PowerMock 。
《2020最新Java基礎(chǔ)精講視頻教程和學(xué)習(xí)路線!》
四、通用類庫(kù)
有幾個(gè)很好的第三方通用庫(kù)可供Java開發(fā)人員使用,例如 Apache Commons 和 Google Guava 。我會(huì)經(jīng)常在我的代碼中使用這些通用類庫(kù),因?yàn)檫@些類庫(kù)都是經(jīng)過無數(shù)開發(fā)者實(shí)踐過的,無論是實(shí)用性還是在性能等方面都是最佳的。
五、Http 庫(kù)
我不是很喜歡JDK的一個(gè)重要原因就包括他們?nèi)狈?duì)HTTP的支持。雖然可以使用java.net包類,但是這和直接使用像 Apache HttpClient 和 HttpCore 等開源類庫(kù)比起來麻煩太多了。
盡管JDK 9將開始HTTP 2.0,也對(duì)HTTP的支持做了優(yōu)化,但是我還是強(qiáng)烈建議所有的Java開發(fā)人員熟悉流行的HTTP處理類庫(kù),例如HttpClient和HttpCore HTTP等庫(kù)。
六、XML解析庫(kù)
市面上有很多XML解析的類庫(kù),如 Xerces , JAXB , JAXP , Dom4j , Xstream 等。 Xerces2是下一代高性能,完全兼容的XML解析工具。Xerces2定義了 Xerces Native Interface (XNI)規(guī)范,并提供了一個(gè)完整、兼容標(biāo)準(zhǔn)的 XNI 規(guī)范實(shí)現(xiàn)。該解析器是完全重新設(shè)計(jì)和實(shí)現(xiàn)的,更簡(jiǎn)單以及模塊化。
七、Excel讀寫庫(kù)
許多應(yīng)用程序需要提供把數(shù)據(jù)導(dǎo)出到Excel的功能,如果你要做相同的Java應(yīng)用程序,那么你需要 Apache POI API 。
這是一個(gè)非常豐富的類庫(kù),你可以從Java程序讀寫XLS文件。
八、字節(jié)碼庫(kù)
如果你正在編寫一個(gè)框架或者類庫(kù)。有一些受歡迎的字節(jié)碼庫(kù)如 javassist 和 Cglib Nodep 可以供你選擇,他們可以讓你閱讀和修改應(yīng)用程序生成的字節(jié)碼。
Javassist使得JAVA字節(jié)碼操作非常簡(jiǎn)單。它是一個(gè)為編輯Java字節(jié)碼而生的類庫(kù)。 ASM 是另一個(gè)有用的字節(jié)碼編輯庫(kù)。
九、數(shù)據(jù)庫(kù)連接池庫(kù)
如果你的Java應(yīng)用程序與數(shù)據(jù)庫(kù)交互不是使用數(shù)據(jù)庫(kù)連接池庫(kù)的話,那么你就大錯(cuò)特錯(cuò)了。因?yàn)樵谶\(yùn)行時(shí)創(chuàng)建數(shù)據(jù)庫(kù)連接非常耗時(shí)并且會(huì)拖慢你的程序。所以墻裂建議使用,有些好用的連接池可供選擇,如 Commons Pool 和 DBCP 。
在web應(yīng)用程序中,web服務(wù)器通常提供了這些功能。但是在java項(xiàng)目中需要把數(shù)據(jù)庫(kù)連接池的類庫(kù)導(dǎo)入到應(yīng)用中。
十、消息傳遞庫(kù)
像日志和數(shù)據(jù)庫(kù)連接池一樣,消息傳遞也是很多實(shí)際的Java項(xiàng)目中必備的。Java提供了JMS Java消息服務(wù),但這不是JDK的一部分,你需要單獨(dú)的引入jms.jar。類似地,如果您準(zhǔn)備使用第三方消息傳遞協(xié)議, Tibco RV 是個(gè)不錯(cuò)的選擇。
十一、PDF處理庫(kù)
除了Excel和Word,PDF也是一種常用的文件格式。如果你的應(yīng)用程序要支持PDF格式的文件處理,你可以使用 iText 和 Apache FOP 類庫(kù)。兩者都提供了非常有用的PDF處理功能。
十二、日期和時(shí)間庫(kù)
在Java之前,JDK的日期和時(shí)間庫(kù)一直被人們所詬病,比如其非線程安全的、不可變的、容易出錯(cuò)等。很多開發(fā)人員會(huì)選擇更好用的 JodaTime 類庫(kù)。
但是在Java8推出之后,我們就可以徹底放棄JodaTime了,因?yàn)镴ava 8提供了其所有功能。但是,如果你的代碼運(yùn)行在一個(gè)低版本的JDK中,那么JodaTime還是值得使用的。
十三、集合類庫(kù)
雖然JDK有豐富的集合類,但還是有很多第三方類庫(kù)可以提供更多更好的功能。如 Apache Commons Collections 、 Goldman Sachs collections 、 Google Collections 和 Trove 。Trove尤其有用,因?yàn)樗峁┧袠?biāo)準(zhǔn)Collections 類的更快的版本以及能夠直接在原語(yǔ)(primitive)(例如包含int 鍵或值的Map 等)上操作的Collections 類的功能。
FastUtil是另一個(gè)類似的API,它繼承了Java Collection Framework,提供了數(shù)種特定類型的容器,包括映射map、集合set、列表list、優(yōu)先級(jí)隊(duì)列(prority queue),實(shí)現(xiàn)了java.util包的標(biāo)準(zhǔn)接口(還提供了標(biāo)準(zhǔn)類所沒有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實(shí)用的二進(jìn)制或文本文件的I/O操作類。
十四、郵件API
javax.mail 和 Apache Commons Email 提供了發(fā)送郵件的api。它們建立在JavaMail API的基礎(chǔ)上,提供簡(jiǎn)化的用法。
十五、HTML解析庫(kù)
和XML與JSON類似,HTML是另外一種我們可能要打交道的傳輸格式。值得慶幸的是,我們有jsoup可以大大簡(jiǎn)化Java應(yīng)用程序使用HTML。你不僅可以使用 JSoup 解析HTML還可以創(chuàng)建HTML文檔。
十六、加密庫(kù)
Apache Commons家族中的 Commons Codec 就提供了一些公共的編解碼實(shí)現(xiàn),比如Base64, Hex, MD5,Phonetic and URLs等等。
十七、嵌入式SQL數(shù)據(jù)庫(kù)庫(kù)
我真的是非常喜歡像 H2 這種內(nèi)存數(shù)據(jù)庫(kù),他可以嵌入到你的Java應(yīng)用中。在你跑單測(cè)的時(shí)候如果你需要一個(gè)數(shù)據(jù)庫(kù),用來驗(yàn)證你的SQL的話,他是個(gè)很好的選擇。順便說一句,H2不是唯一嵌入式DB,你還有 Apache Derby 和 HSQL 可供選擇。
十八、JDBC故障診斷庫(kù)
有不錯(cuò)的JDBC擴(kuò)展庫(kù)的存在使得調(diào)試變得很容易,例如P6spy,這是一個(gè)針對(duì)數(shù)據(jù)庫(kù)訪問操作的動(dòng)態(tài)監(jiān)測(cè)框架,它使得數(shù)據(jù)庫(kù)數(shù)據(jù)可無縫截取和操縱,而不必對(duì)現(xiàn)有應(yīng)用程序的代碼作任何修改。 P6Spy 分發(fā)包包括P6Log,它是一個(gè)可記錄任何 Java 應(yīng)用程序的所有JDBC事務(wù)的應(yīng)用程序。其配置完成使用時(shí),可以進(jìn)行數(shù)據(jù)訪問性能的監(jiān)測(cè)。
十九、序列化庫(kù)
Google Protocol Buffer是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,或者說序列化。它很適合做數(shù)據(jù)存儲(chǔ)或 RPC 數(shù)據(jù)交換格式。可用于通訊協(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語(yǔ)言無關(guān)、平臺(tái)無關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。目前提供了 C++、Java、Python 三種語(yǔ)言的 API。
二十、網(wǎng)絡(luò)庫(kù)
一些有用的網(wǎng)絡(luò)庫(kù)主要有 Netty 的和 Apache MINA 。如果您正在編寫一個(gè)應(yīng)用程序,你需要做的底層網(wǎng)絡(luò)任務(wù),可以考慮使用這些庫(kù)。
這都是每位Java開發(fā)人員應(yīng)該熟悉的,并且十分有用的庫(kù)。Java生態(tài)系統(tǒng)非常龐大的,你會(huì)發(fā)現(xiàn)有很多不同的類庫(kù)可以做不同的事情。每個(gè)你想到的東西,都可能有一個(gè)庫(kù)可以做到。
要相信,你遇到的問題,肯定不止你一個(gè)遇到過。
要相信,也許有很多人比你更勤奮。
要相信,你用或不用,輪子就在那里。
要相信,使用這些類庫(kù),你和你的代碼都會(huì)變得更好。
原文鏈接:
1、DevOps (Docker and Jenkins)
過去的一年,越來越多的公司正在轉(zhuǎn)型DevOps,DevOps非常龐大,需要學(xué)習(xí)很多工具和原理,如果你是一個(gè)有經(jīng)驗(yàn)的Java程序員,愿意學(xué)習(xí)環(huán)境管理、自動(dòng)化和整體改進(jìn),你也可以成為DevOps工程師。
2、Java 9 - Java 15
相信現(xiàn)在很多Java開發(fā)人員主要使用的Java版本還是以Java 8為主,雖然Java 9 - Java 13已經(jīng)推出了有一段時(shí)間。
但是作為Java程序員,我們可能因?yàn)槟承┰驔]辦法在線上環(huán)境真正的進(jìn)行JDK的升級(jí),但是花一些時(shí)間學(xué)習(xí)Java 9、Java 10、Java 11、Java 12和 Java 13的新特性還是有必要的。
另外,大家可以重點(diǎn)關(guān)注一些關(guān)鍵特性,如GC相關(guān)的特性、對(duì)編碼風(fēng)格有改變的特性等。還有就是Java的LTS版本(Java 8、Java 11)要重點(diǎn)學(xué)習(xí)。
3、Spring Framework 5
2017年我們見證了Spring和Java生態(tài)系統(tǒng)的許多重大升級(jí),Spring 5.0就是其中之一。 Spring 5 的新反應(yīng)式編程模型、HTTP/2 支持,以及 Spring 通過 Kotlin 對(duì)函數(shù)式編程的全面支持這些都值得我們好好了解一下。
4、Spring Security 5.0
Spring Security 5.0 提供了許多新功能,并支持 Spring Framework 5.0,總共有 400 多個(gè)增強(qiáng)功能和 bug 修復(fù)。在Spring Security 5.0.0之前,密碼是明文保存,十分不安全。因?yàn)檫@一次發(fā)布的是大版本,所以我們決定使用更安全的密碼存儲(chǔ)方式。 Spring Security 5.0.0的主要亮點(diǎn)在于它只需要最小化的JDK 8、反應(yīng)式安全特性、OAuth 2.0(OIDC)和現(xiàn)代密碼存儲(chǔ)。
5、Spring Boot 2
Spring Boot 2.0 基于 Spring 5 Framework ,提供了 異步非阻塞 IO 的響應(yīng)式 Stream 、非堵塞的函數(shù)式 Reactive Web 框架 Spring WebFlux等特性。很多使用過SpringBoot的人都知道,使用SpringBoot搭建Web應(yīng)用真的是又快又好,相信Spring Boot 2會(huì)帶來更多驚喜。
6、Hadoop、Spark 和 Kafka
另外Java程序員需要學(xué)習(xí)的是大數(shù)據(jù)相關(guān)的知識(shí)。特別是Apache Spark 和 Kafka兩個(gè)框架。
7、Elasticsearch
全文搜索屬于最常見的需求,開源的 Elasticsearch (以下簡(jiǎn)稱 Elastic)是目前全文搜索引擎的首選。維基百科、Stack Overflow、Github 都在使用它。
名稱欄目:java動(dòng)物生態(tài)系統(tǒng)代碼,動(dòng)物管理系統(tǒng)java
文章轉(zhuǎn)載:http://chinadenli.net/article4/dsgcdoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、電子商務(wù)、服務(wù)器托管、外貿(mào)建站、、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)