這8個(gè)錦囊,助你成為一名優(yōu)秀的Java開(kāi)發(fā)者
私底下,隔三差五就有讀者問(wèn)我:“二哥,怎么樣才能像你一樣,成為一名優(yōu)秀的 Java 開(kāi)發(fā)者呢?”假如把“怎么才能像你一樣”去掉的話(huà),這個(gè)問(wèn)題就是一個(gè)好問(wèn)題,否則的話(huà),總有點(diǎn)彩虹屁的嫌疑。但話(huà)說(shuō)回來(lái),我喜歡這種提問(wèn)的藝術(shù)。
從上大學(xué)那會(huì)學(xué) Java 到現(xiàn)在,我已經(jīng)積攢了 10 多年的編程經(jīng)驗(yàn),雖然離優(yōu)秀還有很長(zhǎng)的距離,但總歸是可以分享一些心得給你,這對(duì)你來(lái)說(shuō),算不上至關(guān)重要,但多少是有點(diǎn)用的,至少在我看來(lái)。
01、學(xué)習(xí) Java 8
如果我沒(méi)記錯(cuò)的話(huà),已經(jīng) Java 14 了。但很遺憾的是,我的 IDE 中配置的 JDK 版本還停留在 Java 13,還有一個(gè)備用版本,就是 Java 8。之所以沒(méi)有追趕時(shí)髦,可能是因?yàn)閷W(xué)習(xí)的勁頭不像年輕時(shí)候那么足了,讓我先慚愧一會(huì)兒。
還有一個(gè)客觀上的原因,就是 Java 8 的新特性實(shí)在是開(kāi)天辟地、空前絕后。像 Lambda 表達(dá)式,Stream 流,可以稱(chēng)得上是好用到爆。事實(shí)上,還有不少 Java 程序員沒(méi)有掌握它們(扎心了吧)。
Java 8 之前,啟動(dòng)一個(gè)線(xiàn)程要這樣:
- Thread t = new Thread(new Runnable() {
- @Override
- public void run() {
- System.out.println("Java 8 之前");
- }
- });
- t.start();
Java 8 之后,啟動(dòng)一個(gè)線(xiàn)程只需要這樣:
- Thread t1 = new Thread(() -> {
- System.out.println("Java 8");
- });
- t.start();
孰優(yōu)孰劣,一清二楚。如果你對(duì) Java 8 的特性還不了解的話(huà),那真的很難成為一名優(yōu)秀的 Java 開(kāi)發(fā)者。還是那句耳朵能聽(tīng)出來(lái)繭子的話(huà):“種一棵樹(shù)最好的時(shí)間是 10 年前,其次是現(xiàn)在。”行動(dòng)起來(lái)吧!
02、掌握 Spring
Spring 目前在 Java 開(kāi)發(fā)中占據(jù)了重要的一環(huán),可以說(shuō)是密不可分。毫不夸張的說(shuō),不會(huì) Spring,絕對(duì)算不上一名優(yōu)秀的 Java 開(kāi)發(fā)人員。我敢賭 1 塊錢(qián),幾乎所有采用 Java 語(yǔ)言編寫(xiě)程序的公司,都在用 Spring 框架。
雖然我沒(méi)有賭錢(qián)的惡習(xí),但我敢保證自己能贏。只賭 1 塊錢(qián),不是我摳門(mén),而是為了輸家考慮,這點(diǎn)錢(qián)不至于賴(lài)賬吧。
架構(gòu)在與時(shí)俱進(jìn),就連小到只有兩三個(gè)人的開(kāi)發(fā)團(tuán)隊(duì)都在從單一應(yīng)用程序遷移到微服務(wù)。這就是所謂的浪潮吧,而 Spring Boot 和 Spring Cloud 在這方面有著天然的優(yōu)勢(shì)。
03、學(xué)會(huì)單元測(cè)試
我在日企的時(shí)候,測(cè)試占據(jù)著重要的位置,代碼 review、單元測(cè)試、集成測(cè)試等等忙得是不亦樂(lè)乎。但當(dāng)我回到洛陽(yáng)后,團(tuán)隊(duì)就完全沒(méi)有這種測(cè)試的文化,雖然我在竭力倡導(dǎo),但效果不佳,搞得很多問(wèn)題都在線(xiàn)上突發(fā),最后疲于應(yīng)付。
如果你想成為一名負(fù)責(zé)任的開(kāi)發(fā)人員,那就好好磨練你的測(cè)試技能吧。JUnit 和 TestNG 是 Java 中非常受歡迎的單元測(cè)試框架。設(shè)計(jì) JUnit 的目的是為了分析代碼單元,而 TestNG 的預(yù)期用途則針對(duì)高級(jí)測(cè)試。這兩個(gè)框架不能說(shuō)是平分秋色,但最起碼是各有千秋。
04、熟練 API 和類(lèi)庫(kù)
我有一個(gè)大學(xué)同學(xué),叫石磊,編程能力絕對(duì)配得上在一線(xiàn)大廠(chǎng)工作??上У氖?,當(dāng)初選擇了二線(xiàn)城市鄭州,這在很大程度上局限了他的發(fā)展。
當(dāng)我遇到任何編程上面的問(wèn)題時(shí),第一個(gè)想到的就是石磊,無(wú)論我扔什么問(wèn)題,他幾乎都能給我提供解決方案,他對(duì)整個(gè) Java 的生態(tài)系統(tǒng)(自身的 API 以及開(kāi)源類(lèi)庫(kù))了解比我要透徹得多。
如果你希望成為石磊那樣富有擔(dān)當(dāng),就必須要先了解下面這些類(lèi)庫(kù)。
1)日志類(lèi)庫(kù),比如說(shuō) Log4j、SLF4j、LogBack。
2)JSON 解析類(lèi)庫(kù),比如說(shuō) Gson、Jackson、org.json 和 fastjson。
3)測(cè)試類(lèi)庫(kù),比如說(shuō)之前提到的 JUnit 和 TestNG。
4)通用類(lèi)庫(kù),比如說(shuō) Google 的 Guava,Apache 的一系列類(lèi)庫(kù)。
5)HTTP 類(lèi)庫(kù),比如說(shuō) HttpClient 和 HttpCore。
6)Word、PDF、Excel 類(lèi)庫(kù)。
7)數(shù)據(jù)庫(kù)連接池類(lèi)庫(kù),比如說(shuō) durid、HikariCP。
8)消息通知類(lèi)庫(kù),比如說(shuō) RabbitMQ、Kafka。
9)郵件類(lèi)庫(kù),比如說(shuō) JavaMail。
10)加密解密類(lèi)庫(kù)。
05、學(xué)習(xí)設(shè)計(jì)模式
學(xué)編程就像練武功一樣,武功要練得很牛逼,有兩樣?xùn)|西不能丟。第一,是內(nèi)功;第二,是武功秘籍。內(nèi)功對(duì)應(yīng)到編程就是我們編程基礎(chǔ)能力,那編程的設(shè)計(jì)模式就可以想象成武術(shù)中的武功秘籍。
設(shè)計(jì)模式就是根據(jù)不同類(lèi)型場(chǎng)景,設(shè)計(jì)優(yōu)雅的(編碼)解決方案。學(xué)好設(shè)計(jì)模式有很多好處,比如,容易看懂經(jīng)典代碼中的邏輯(很多優(yōu)秀的開(kāi)源框架大量使用了設(shè)計(jì)模式);應(yīng)對(duì)面試時(shí)對(duì)答如流(設(shè)計(jì)模是面試重點(diǎn));可以編寫(xiě)出優(yōu)雅的解決方案(或者代碼)。
如果你想學(xué)習(xí)設(shè)計(jì)模式的話(huà),我推薦一本秦小波的《設(shè)計(jì)模式之禪》,趣味化十足,讀起來(lái)也非常容易理解。
06、掌握開(kāi)發(fā)運(yùn)維工具
如果你能夠熟練掌握 Maven、Git、Jenkins、Docker 等持續(xù)集成和部署工具的話(huà),在進(jìn)行開(kāi)發(fā)運(yùn)維的時(shí)候就會(huì)感覺(jué)如有神助。我來(lái)隆重地介紹一下這 4 位同學(xué):
Maven,是一個(gè)(特別是 Java)軟件項(xiàng)目管理及自動(dòng)構(gòu)建工具,由大名鼎鼎的 Apache 軟件基金會(huì)所提供,基于項(xiàng)目對(duì)象模型(縮寫(xiě)為 POM,知道那個(gè) xml 文件的由來(lái)了吧)的概念,利用一個(gè)中央倉(cāng)庫(kù)來(lái)管理項(xiàng)目的構(gòu)建和文檔等步驟。
Git 是一個(gè)分布式版本控制軟件,最初由林納斯·托瓦茲創(chuàng)作,于 2005 年以 GPL 的開(kāi)源協(xié)議發(fā)布。大型交友平臺(tái) Github 就是用 Git 做版本控制的代碼托管平臺(tái)。
Jenkins 是一款由 Java 編寫(xiě)的開(kāi)源的持續(xù)集成工具,使開(kāi)發(fā)者從繁雜的集成工作中解脫出來(lái),專(zhuān)注于更為重要的業(yè)務(wù)邏輯實(shí)現(xiàn)上。
Docker 讓?xiě)?yīng)用程序部署在軟件貨柜下的工作實(shí)現(xiàn)了自動(dòng)化,借此在 Linux 操作系統(tǒng)上提供一個(gè)額外的軟件抽象層,以及操作系統(tǒng)虛擬化的自動(dòng)管理機(jī)制。
07、熟練使用 IDE
說(shuō)起 IDE,讓我情不自禁地想起一句古話(huà):“工欲善其事必先利其器”。IDE 就好像士兵手里的那把搶和刀,這玩意如果用得不熟練,怎么上陣殺敵呢?
我是在去年的時(shí)候才從 Eclipse 切換 IntelliJ IDEA 的,一開(kāi)始極其排斥和抗拒,讀者都勸我堅(jiān)持用一段時(shí)間,沒(méi)想到一個(gè)月后就愛(ài)上了。你要是非要給我扣上個(gè)“喜新厭舊”的帽子,我也是毫無(wú)反駁的理由,誰(shuí)讓這玩意這么好用呢?
上次推薦了兩個(gè)提高代碼質(zhì)量的 IDEA 插件,沒(méi)想到,大家都說(shuō)好,你如果想變得優(yōu)秀的話(huà),趕緊去試試。
08、了解 JVM
要想成為一名真正優(yōu)秀的 Java 開(kāi)發(fā)人員,JVM 這關(guān)注定是繞不過(guò)去的,就好像你費(fèi)盡幾代人的心血參加了童試、鄉(xiāng)試、會(huì)試,最后要是中不了進(jìn)士,那就有點(diǎn)前功盡棄。
你必須得搞清楚 JVM 的工作原理、即時(shí)編譯(JIT)、垃圾收集等相關(guān)知識(shí)點(diǎn),才可以編寫(xiě)出健壯且高性能的 Java 應(yīng)用程序。