自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Javaer,常用的 14 個類庫,你知道嗎?

開發(fā) 后端
第一送給Netty。其實我是有私心的,也只有在使用Netty開發(fā)一些網(wǎng)絡(luò)應(yīng)用的時候,我才能理直氣壯的不引入Spring這個目前變得越來越重的家伙,還我一個清清爽爽的世界。

[[423630]]

昨天下載下來Java16嘗嘗鮮。一看,好家伙,足足有176MB大。即使把jmc和jvisualvm給搞了出去,依然還是這么大,真的是讓人震驚不已。

但即使JDK足夠龐大,它的功能也已經(jīng)不夠用了。我們需要借助于第三方庫,來完成企業(yè)級開發(fā)。比如,一個常見的SpringBoot服務(wù),上百兆是輕輕松松的。

在這里,我盤點一下項目中常用的工具類庫和Jar包,來看一看一個Java程序員要學(xué)多少東西才能走的更加長遠(yuǎn)。

1. Netty

第一送給Netty。其實我是有私心的,也只有在使用Netty開發(fā)一些網(wǎng)絡(luò)應(yīng)用的時候,我才能理直氣壯的不引入Spring這個目前變得越來越重的家伙,還我一個清清爽爽的世界。

Netty已經(jīng)成為了目前最流行的Java網(wǎng)絡(luò)編程框架。有了它,Java才有了與golang等語言相提并論的權(quán)利。

2. SpringBoot

在很多中小公司,Java企業(yè)級開發(fā)首選SpringBoot,這是沒得說的。由于它的應(yīng)用實在是太廣泛,我這里就不浪費筆墨做過多介紹了。

Spring當(dāng)年的目標(biāo),是為了干掉J2EE。屠龍的少年如今變成了龍,現(xiàn)在在干著J2EE當(dāng)年做的事情。

不過,盡量做的輕量級,一直是它的主旋律,這一點從來沒有變過。因為錯的不是Spring,錯的是這個世界。

3. 工具類庫

由于歷史原因,apache-commons工具類庫,幾乎遍布了項目中的每個角落,比如lang3、beanutils、collections、codec等。個人覺得,apache-commons的很多工具,已經(jīng)是過度設(shè)計了,在一些新項目里,我已經(jīng)很少使用了。

取而代之的,是大量使用guava工具類庫,以及國產(chǎn)的hutool工具類庫。有了這些工具,就不用再在項目里寫一些拼拼湊湊,讓人難受的小工具類了。

說點有意思的事情,guava這個詞朗朗上口,它的中文意思是一種熱帶水果:番石榴,長的就像是小西瓜一樣。

4. 單元測試

JUnit幾乎成了Java單元測試的標(biāo)配。JUnit5更是對整體模塊進(jìn)行了重構(gòu)。現(xiàn)在,它包含3個主要的模塊:JUnit Jupiter、JUnit Platform、JUnit Vintage等。

Vintage是為了兼容比較老的版本而存在的,Platform是為了兼容其他測試引擎,這樣在JUnit上使用Mockito也成為了可能。如果你的項目比較新,建議直接上Jupiter。

很多國外系統(tǒng)對單元測試看的比較重,這和國內(nèi)的開發(fā)模式是不太一樣的。雖然說,單元測試是一個程序員的基本功,但離著普及還有一段距離。不過現(xiàn)在也有很多公司強(qiáng)制要求寫單元測試,以任務(wù)指標(biāo)的形式存在。

5. JMH

JMH是最裝逼,最牛逼的基準(zhǔn)測試工具套件,主要用在性能測試方面。如果定位到了熱點代碼,要測試它的性能數(shù)據(jù),評估改善情況,就可以交給 JMH。它的測量精度非常高,可達(dá)納秒級別。

它能夠消除JIT的差異,測試出真正的代碼性能。JMH 已經(jīng)在 JDK 12中被包含,其他版本的需要自行引入 maven。

6. OkHTTP

最新的JDK已經(jīng)內(nèi)置了HTTP的功能,但這種協(xié)議層面的東西,放在基礎(chǔ)類庫里老感覺不是那么妥當(dāng)。

很長一段時間里,Apache 的HttpClient統(tǒng)治了世界,甚至重構(gòu)后在不同版本之間不能夠做到兼容。我更喜歡輕量級的OkHTTP多一些,第一次見它還是在Android的應(yīng)用代碼里,現(xiàn)在用在應(yīng)用代碼里也很香。OKHTTP的透明壓縮,顯得也更加智能一些。

像SpringCloud這樣的組件,在底層是可以選擇切換成HttpClient還是OkHTTP的。

應(yīng)用層的協(xié)議變動都比較大,更新也比較快。比如HTTP2,Quic等支持,顯然要對整個類庫做很多的修改才能適配。

7. 數(shù)據(jù)庫連接池

SpringBoot2默認(rèn)選擇了hikaricp作為連接池,據(jù)說是速度最快的連接池,而且代碼量非常的精簡。c3p0、dbcp等老舊的數(shù)據(jù)庫連接池已經(jīng)慢慢退位。

hikaricp非常的卷,它采用無鎖化的思想,核心類庫只有ConcurrentBag一個,甚至使用Javassist修改字節(jié)碼來增加執(zhí)行速度。

在國內(nèi),還有一個使用較為廣泛的連接池是Druid,它有著完整的監(jiān)控功能。通過開啟后臺可以直接在web端查看整個連接池的狀態(tài)。

8. caffeine

堆內(nèi)緩存,首選caffeine。很長一段時間,我都在用Guava的LoadingCache。自從測試caffeine之后,我就決定是它了。

它結(jié)合了LRU和LFU,兩者合體之后,變成了新的W-TinyLFU算法,命中率非常高,內(nèi)存占用也更加的小。

在SpringBoot里,通過提供一個CacheManager的Bean,即可與Springboot-cache進(jìn)行集成,可以說是很方便了。

9. hazelcast

說完了堆內(nèi)的,就再說個堆外的。

除了有redis這種選擇之外,我們還可以選擇hazelcast。hazelcast采用raft算法進(jìn)行分布式協(xié)調(diào),在一致性方面強(qiáng)于redis。據(jù)hazelcast測試,在達(dá)到一定規(guī)模的時候,速度竟然比redis還快,hazelcast和redis甚至有過激烈的口水戰(zhàn)。

hazelcast可以以jar包的方式集成在Java應(yīng)用中,自身同時作為客戶端和服務(wù)端,組件多節(jié)點的集群。它提供了類似redisson一樣的功能齊全的分布式數(shù)據(jù)結(jié)構(gòu),比如Queue,你只需要直接在Java代碼中調(diào)用相應(yīng)的API,它就能把數(shù)據(jù)同步到所有的節(jié)點上去。

10. 日志組件

日志組件是常用的類庫,最早得到廣泛使用的是log4j,而現(xiàn)階段比較流行的是slf4j+logback。由于這些類庫非常的好用,JDK自帶的JUL反而無人問津。

slf4j是門面模式的典型應(yīng)用,它本身是一套接口,背后可以使用logback和log4j。這些關(guān)系,我們能夠從上面的圖很容易的看出來。

11. JSON、XML、YAML解析

由于Fastjson頻頻爆出漏洞,現(xiàn)在在Java中使用最廣泛的JSON解析類庫,就是jackson庫。它最主要的入口工具類是ObjectMapper,解析方法是線程安全的,我們可以在整個項目中共享一個解析對象。

jackson庫不僅僅可以解析JSON,它還可以解析XML、YAML、TOML等。事實上,它的抽象接口,可以實現(xiàn)Avro、Protobuf、CSV等格式數(shù)據(jù)的加載,但我們最長使用的,就是它的JSON解析。

12. Jolokia

我相信J2EE當(dāng)年的目的肯定是好的,但總是做一些又大又笨重的東西。JMS算一個,JMX也算一個。

JMX其實是非常不好用的,因為它把功能隔離在了Java體系之內(nèi)?,F(xiàn)在的Promethus監(jiān)控系統(tǒng)就做的比較好,一切都是HTTP交互的文本格式。

Jolokia就可以提供JMX的遠(yuǎn)程訪問方法,把JMX接口給強(qiáng)制轉(zhuǎn)化成HTTP接口,以便于其他的監(jiān)控系統(tǒng)進(jìn)行功能對接。從這個描述上來看,Jolokia就是一個適配器。不過,通過Agent或者Jar包的方式,它能讓ActiveMQ,JBoss等這些老掉牙的系統(tǒng)接入到現(xiàn)代化的監(jiān)控系統(tǒng)中來,也算是大功一件。

13. hibernate-validator

hibernate留下了一個很棒的遺產(chǎn),那就是它的驗證框架,它是Bean Validation 的參考實現(xiàn),被廣泛的應(yīng)用于數(shù)據(jù)庫模型校驗、參數(shù)校驗等領(lǐng)域。

在JPA中,@Table的字段可以根據(jù)這些驗證,自動生成數(shù)據(jù)庫約束。在Spring的Controller中,也可以使用@Valid注解,來自動對傳入的對象進(jìn)行參數(shù)驗證。

14. freemarker

FreeMarker 是一款模板引擎,在很早之前,我主要用它來生成Web頁面。

不過,隨著前后端分離的流行,我現(xiàn)在主要在一些代碼生成器工具中用到它。它的應(yīng)用比較廣泛,比如做一個郵件模板,短信模板之類的。如果你寫過JSP的話,一定會知道它做的功能是類似的。

在Spring中,還有一個更加輕量級的模板引擎,叫做SPEL--一個表達(dá)式語言。你在@Value注解中所使用的語法就是它,它們都是類似的技術(shù)。

End

這些類庫,是我在工作中最長用到的,也是關(guān)注最多的。其實,一個Spring就夠大家折騰的了,但Spring的功能有時候仍然不夠,因為它本身更多的是一個整合型的工具,我們不得不關(guān)注到更底層的技術(shù)。

正是得益于這些穩(wěn)定、可靠的類庫,我們的應(yīng)用開發(fā)才能夠如此迅速。想要什么功能?找個類庫吧,大體就能實現(xiàn),這就是目前的開發(fā)幸福的地方。

獲得了如此方便快捷的功能,記得點贊鼓勵一下作者;遇到問題了,提個bug,修個錯誤,都是無聲的支持。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。 

 

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2024-02-19 00:00:00

Console函數(shù)鏈接庫

2020-10-27 13:41:43

Java技術(shù)開發(fā)

2020-12-24 15:26:07

Redis數(shù)據(jù)庫

2020-10-25 23:26:14

Java開發(fā)代碼

2024-06-07 08:26:10

2020-11-26 07:48:24

Shell 腳本內(nèi)置

2017-01-18 18:28:54

大數(shù)據(jù)數(shù)據(jù)庫技術(shù)

2020-08-17 09:31:31

Git命令開發(fā)

2018-09-07 15:23:16

2024-06-12 08:05:06

2023-12-12 08:41:01

2015-10-23 09:34:16

2024-11-01 10:48:01

C#WPF程序

2024-04-15 00:04:00

APP開發(fā)

2022-05-09 10:47:08

登錄SpringSecurity

2021-10-14 06:52:47

算法校驗碼結(jié)構(gòu)

2024-09-18 07:00:00

消息隊列中間件消息隊列

2022-09-29 15:32:58

云計算計算模式

2024-08-01 17:34:56

Promiseaxios請求

2021-11-17 11:03:14

Python代碼語法
點贊
收藏

51CTO技術(shù)棧公眾號