8種開發(fā)工具,拒絕加班熬夜

??前言
工欲善其事 必先利其器
身為一個程序員,每天面對的事情就是寫代碼和吹牛逼了。但是總是感覺自己這兩個事情沒有達到一個平衡點,總感覺每天寫代碼的時間太多了,都沒有多少讓自己吹的時間了。不知道大家有沒有這些問題和疑惑呢?
我們已知程序員是最會偷懶的生物!哎!那么問題來了,那怎么摸魚時間還是這么少呢?難道是我們太菜了嗎?不不不,可不要小瞧自己,那會是啥原因嘞?
答案就是,當然是你還沒看這篇文章唄,本文切身感受程序員之痛苦,背后默默吐血整理了一篇文章,現(xiàn)在分享給大家,希望對大家有所幫助。
??目錄
??整體預覽圖
??JSON解析工具
??HTTP網(wǎng)絡請求工具
??字符串處理工具
??集合處理工具
??文件流處理工具
??加解密工具
??JAVA bean 對象轉(zhuǎn)換工具
??緩存和限流工具
??開始上手
整體預覽圖
本文會從圖中分類觸發(fā),介紹相關工具包,并簡單介紹使用。因為本文篇幅有限,所以只當做是一個引子。具體細節(jié)還是都得大家在寫代碼的時候慢慢體會。
JSON 解析工具
json 解析工具在開發(fā)中有多常用相信不用我多說了吧,可以說是程序員天天用到的工具,這也是我將它放到第一個來說的原因,下面我們來一起看一下,概括和使用吧,GO! 筆者我用的比較多的是 Fastjson ,它是阿里開源的一款進行 JSON 解析的工具,用法也是相當簡單。

maven 導入 pom 坐標
2.下面看怎么使用
JSON 字符串與實體對象互相轉(zhuǎn)化
JSON 字符串與 JSONObject 互相轉(zhuǎn)化
JSONObject只是一種數(shù)據(jù)結構,可以理解為JSON格式的數(shù)據(jù)結構(key-value 結構),可以使用put方法給json對象添加元素。JSONObject可以很方便的轉(zhuǎn)換成字符串,也可以很方便的把其他對象轉(zhuǎn)換成JSONObject對象
JSON 字符串轉(zhuǎn)化為 集合類
fastjson 就介紹到這里,這里只是介紹了簡單的使用,更加詳細的用法請參考官方的文檔,里面還有更多的用法等著你的哦~~
HTTP 網(wǎng)絡請求工具
除了 JSON 工具,作為一個優(yōu)秀的互聯(lián)網(wǎng)打工人,不學會網(wǎng)絡請求,怎么能夠在這個行業(yè)占有一席之地呢?HTTP 網(wǎng)絡請求工具你值得擁有~~ 根據(jù)我的個人意愿,我簡單介紹 httpclient的用法,因為我對這個比較熟悉

maven 導入 pom 坐標
如何使用
GET 請求(無參)
響應狀態(tài)為:HTTP/1.1 200 OK 響應內(nèi)容長度為:-1 響應內(nèi)容為:
GET 請求(有參)
POST 請求(有參數(shù))
??!這樣一步一步總結下來好累啊,看到這里的小伙伴們,點一下手里的小贊。嘿嘿~~ 當然我只是簡單介紹一下 httpClient 的使用,具體高深的使用方法和配置可以參考其他博主的詳細介紹,讓我們介紹下一個常用的工具吧。
字符串處理工具
字符串使我們開發(fā)中最常見的類型,也是我們最常需要操作的類型了。如果不知道字符串的常用工具,那在寫代碼的時候簡直就是場災難?。?!
字符串判空,截取字符串、轉(zhuǎn)換大小寫、分隔字符串、比較字符串、去掉多余空格、拼接字符串、使用正則表達式等等。
StringUtils 給我們提供了非常豐富的選擇。我們著重以本類來介紹使用。
導入maven坐標
常用方法介紹
字符串判空 ???
(isNotBlank 和 isBlanK)
(isNotEmpty 和 isEmpty)
優(yōu)先推薦使用 isBlank 和 isNotBlank 方法,因為 它會把空字符串也考慮進去。
分隔字符串 —— split —— ???
相較于 String 的 split 方法來說,StringUtils 的 split 方法不會有空指針異常
判斷是否純數(shù)字 —— isNumeric —— ??
給定一個字符串,判斷它是否為純數(shù)字 可以使用isNumeric方法
當然,這個工具類除了上面簡單的三個方法之外們還有其他很多對于我們來說很使用的方法,但是這里就不一一舉例了, 有興趣的小伙伴們可以看源碼統(tǒng)計一下
集合相關處理工具
哦吼~~看完了字符串的常用工具,重中之重的集合它來了,如果說沒有字符串,我們的程序就無法運行,那么沒有集合,我們將會是每天在加班的中度過了,出去后將會自豪的說,老板的車輪胎我也是做了貢獻的。
既然集合工具這么重要,那么當然要重點介紹。學會相關工具的使用,真的是能讓我們事半功倍的,真的是能讓摸魚時間大大增加的,不信你看看。

Collections
它是 JAVA 的集合工具包,內(nèi)部包括了很多我們常用的方法,下圖展示了其中一些,方便食用!

排序—— sort—— ???
在我們?nèi)粘i_發(fā)工作中,經(jīng)常會遇到一些集合排序的需求。sort 就可以很好的幫助我們做好這一點
結果: [1, 2, 3] [3, 2, 1]
獲取最大最小值 —— max / min ——???
最大值最小值是我們操作集合最常見的方法了吧!!Collections 就有現(xiàn)成的方法幫助我們實現(xiàn)
結果:集合元素最大值:3 集合元素最小值:1
轉(zhuǎn)換線程安全集合—— synchronizedList ——???
在多線程狀態(tài)下,普通集合會產(chǎn)生并發(fā)問題,比如 ArrayList 并發(fā)添加會產(chǎn)生空值情況,這時我們又不想改動我們之前的集合怎么辦? 我們簡單的通過Collections 的線程安全轉(zhuǎn)化就可以做到了,簡簡單單一行代碼就可以做到!是不是方便的很!
當然,Collections 還有很多有用和有趣的方法等著我們?nèi)ヌ剿?,只是只是作為了一個拋轉(zhuǎn)引玉的效果,就不過多的贅述了。
CollectionUtils
我最常用的便是 CollecionUtils,它是 apache 開源的工具包。它的功能可以說是相當強大的,不信你可以往下看看,反正你能想到的集合操作基本上它都有。

集合判空—— isNotEmpty——???
我們最常用的集合方法,沒有之一,必須掌握它??!
集合不是空的嗎?false
交集/并集/補集/差集——???
在開發(fā)中,經(jīng)常需要將多集合進行交并補等的數(shù)學操作,不會還是傻傻的子集寫循環(huán)處理吧!那樣還能有摸魚的時間嗎?下面就是大大提升效率的工具!??!
兩集合并集: ? [1, 2, 3, 4]
兩集合交集: [3]
兩集合交集的補集:[1, 2, 4]
兩集合差集: [1, 2]
判斷兩集合是否相等——isEqualCollection——???
兩集合相等嗎?:true
Lists
最后在集合的工具類中再補充一個 google 官方的java包,里面有很多我們想不到的超級方便的小工具,既然是說集合,我們說一下它里面的 Lists 類,也是超級好用的!

快速初始化集合——newArrayList——???
相信大家在開發(fā)中,都有過初始化集合的需要吧!那么我們一般都是 新建一個 ArrayList 然后一個一個 add 進去,現(xiàn)在告訴大家,不用這么麻煩,一個方法新建帶初始化全搞定,真香警告??!
[1, 2, 3]
集合分頁——partition——???
有時候我們想將我們的大集合分散成為一些小集合,我們又不想手動操作怎么辦?這些痛點肯定已經(jīng)有人幫助我們想好了??!來來來,介紹一下?。?/p>
[ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10] ]
介紹完了 集合相關的操作類,下面我們也要介紹一下文件流相關操作,這個操作在開發(fā)中也是經(jīng)常用到的。
文件流處理工具
相信我們在工作已經(jīng)厭煩了,經(jīng)常寫** IO 流相關的類了吧。經(jīng)常簡單的讀取和寫入一個文件,我們需要大費周章的去定義一些 InputStream 和 OutputStream **等,感覺有一種殺雞用牛刀的錯覺。 介紹一個文件操作工具類,省去大量操作和關閉行為,超級好用,平常我可是經(jīng)常用的。

將信息寫入文件——writeByteArrayToFile——???
最最常用的操作,怎么樣很簡單吧,就只用一行代碼,秒殺!
從文件讀取信息——readFileToByteArray——???
知道了怎么往文件里寫東西,他的好兄弟讀取我們也得知道?。?/p>
讀取到的文本為:test
API 很多,我也不能一一為大家介紹,深入的了解還需要大家去,熟練地運用起來,并且是不是的去看看官方的文檔,查漏補缺,相信你也可以見識到很多讓你嘆為觀止的方法。
加解密工具類
平常我們經(jīng)常會遇到比如對用戶的密碼進行加密 (MD5) ,校驗接口的簽名 (sha256) 加密等等 用到加密的場景雖然不是很多,但是有這樣的工具何樂而不為呢?
因為常用的加密方法并不多,這里介紹兩個方法給大家,想知道其他更多用法的伙伴們,去自己探索吧

MD5加密后的結果:ef1fedf5d32ead6b7aaf687de4ed1b71
sha256加密后:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e3
JAVA bean 對象轉(zhuǎn)換工具
說到這里,我們來說一下對象轉(zhuǎn)化的工具,在開發(fā)中有些規(guī)范,比如DTO、DO、VO等等,之間,如果我們需要轉(zhuǎn)換,單純的我們要一個一個的 set 值,真是一項苦逼的活。

BeanUtils
java bean對象的相關轉(zhuǎn)化,我在這里介紹兩個 ,一個 是大家都非常熟悉的 BeanUtils,還有一個就是我平常在開發(fā)中經(jīng)常使用的 MapStruct 和 BeanUtils 最常用的莫過于對象的的拷貝了 。 不過面對需要深拷貝的對象大家要注意了,這里并不推薦大家使用此工具去實現(xiàn)
Student(name=小明, age=18)
MapStruct
下面我們重點說一下 MapStruct 這個轉(zhuǎn)化,BeanUtils 就是一個大老粗,只能同屬性映射,或者在屬性相同的情況下,允許被映射的對象屬性少。
但當遇到被映射的屬性數(shù)據(jù)類型被修改或者被映射的字段名被修改,則會導致映射失敗。而 mapstruct 就是一個巧媳婦兒了。
她心思細膩,把我們可能會遇到的情況都給考慮到了(要是我也能找一個這樣的媳婦兒該多好,內(nèi)心笑出了豬聲)
首先啥都不用想上來我們先把該導的包導進去
?? 2.用一下
對象之間字段完全相同
第一步:定義好我們的基礎類
第二步:接下來定義一個接口,但是注意不需要實現(xiàn),他就呢能夠幫我們轉(zhuǎn)化很神奇的
最后一步:在代碼中調(diào)用,聰明的小伙伴看下面代碼,一下就明白了,就是這么簡單
Teacher(name=小明, age=18)
對象之間字段存在不相同情況
我們介紹了完全兩個類字段相同的情況,那么,更加令我們頭疼的 有多個字段名字不同但是有對應關系應該怎么搞呢?
我們進階介紹一下,如何處理這種參數(shù)名不同的對應關系 目前假設我們新定義一個微信類,我們的學生要注冊到微信上,我們就要將學生對象轉(zhuǎn)化為微信對象
但是我們發(fā)現(xiàn)和我們上面的學生類,的名字參數(shù)名不同,怎么對應過去的? 答案就是在對方法上配置
WeiXin(username=小明, age=18)
這么簡單的兩個小例子可包含不了 MapStruct這么強大的功能,不管是日期格式化、還是表達式解析、還是深拷貝,都能一一搞定,只是限于本篇文章,無法跟大家說了。想想都很傷心呢! 但是還是那句話,拋磚引玉么!剩下的就交給聰明的小伙伴們了!
緩存和限流器工具
最后一小節(jié),我給大家?guī)砦业恼洳?,壓箱底的東西要拿出來了,大家還不快快點贊收藏,記好,錯過了,可就沒有下家店了。
我也是在 guava 中發(fā)現(xiàn)了很多好用的工具的 首先介紹緩存工具,開發(fā)中,我們常用的內(nèi)存緩存,也就常常是定義一個 Map 去存放,但是單純的 Map 只能存和取,確無法做到,緩存過期、緩存淘汰,和相關通知等等復雜操作。
我們有必要學習掌握一種工具,能夠 Cover 上面所有情況的緩存工具,有需求就有工具類,永遠記住。?。?!,Cache 登場了,還是老規(guī)矩,先看看它怎么用吧。
Cache
定義一個簡單定時過期的緩存
null
看到?jīng)],結果顯而易見,超過了緩存時間,就會自己釋放。嘿嘿。
定義一個緩存符合以下限制:
限制訪問并發(fā)
設置初始化容量
限制緩存數(shù)量上限
兩個小例子,大家看明白了沒有,真正的干貨,還不趕緊用起來。
除了這個,一個限流器也是常常需要的,我們總不能自記去寫一個限流器吧,需要考慮的太多,性能還不行哎!那就用接下來介紹的這個工具
RateLimiter
限流器大家在并發(fā)場景下經(jīng)常會遇到,最簡單的實現(xiàn)限流就是令牌桶算法,原理很簡單,但是具體實現(xiàn)是很復雜的,RateLimiter 幫助我們解決這一點,只需要調(diào)用簡單的 API 就能實現(xiàn)并發(fā)限流
定義限流器,每1秒鐘通過 1 個請求
并發(fā)兩個去獲取,看一下結果吧,是不是符合我們的預期
線程 1 獲取到執(zhí)行權限了嗎?true
線程 2 獲取到執(zhí)行權限了嗎?false
怎么樣,是不是只能有一個通過,簡單例子說明問題。 具體用法還得大家在實際開發(fā)中具體體會,筆者在這里就不多BB了?。×糁鴷r間大家趕快去練習吧。爭取成為一個 API 調(diào)用高手。
??修煉完成
經(jīng)過上面這么多的講解、案例和對知識的思考,相信大家已經(jīng)初步掌握了線程池的使用方法和細節(jié),以及對原理運行流程的掌握, 如果你覺得本文對你有一定的啟發(fā),引起了你的思考。 點贊、關注、收藏,下次你就能很快的找到我嘍!

最后
??? 小伙伴們學習編程,有時候不知道怎么學,從哪里開始學。掌握了基本的一些語法或者做了兩個案例后,不知道下一步怎么走,不知道如何去學習更加高深的知識。
那么對于這些小伙伴們,我準備了大量的視頻教程,PDF電子書籍,以及源代碼!
只要+up主威信wangkeit1備注“B站”就可以白嫖領取啦!
