更新時間:2019-04-19 10:53:52 來源:動力節(jié)點 瀏覽6372次
學(xué)習(xí)力強的Java程序員敢大膽地體驗嘗試新技術(shù),他們的技術(shù)棧始終在保持不斷地更新,他們能快速把握事物的本質(zhì),并判斷出它能用來做什么,不能用來做什么。
而學(xué)習(xí)力差的程序員呢?為了繼續(xù)停留在舊技術(shù)的舒適區(qū),他們往往會抵制新技術(shù)的推廣,甚至百般阻撓。因為那會使他們過去的經(jīng)驗統(tǒng)統(tǒng)無效,只能和后來者站在同一起跑線上,抱死一個框架好幾年,脫離了框架啥都干不了的程序員實在太多了,事實上,這樣的人不能駕馭技術(shù),反而是被技術(shù)給奴役了。
所以軟件開發(fā)人員要不斷地學(xué)習(xí),多學(xué)習(xí)課程,多看書,多思考,多討論。
我們經(jīng)常會看到另外一個問題是泥團一樣黏糊在一起的類,做了很多無關(guān)的事情,無關(guān)的新特性新功能一點點加入,讓簡單的類變得臃腫,塞入各種與該類名無關(guān)的行為,有時一個類的大小超過幾百行代碼。
避免這個問題的辦法應(yīng)該總是想:我在這里添加的功能符合類名本身嗎?如果不是,那么重新命名類的名稱,或者分成兩個獨立的類。
如果你不能想出一個代碼類的合適名稱,就會發(fā)出壞味道,那類的內(nèi)部就會變得混雜。有時可能一個需要分成兩個部分,才能找到合適的名稱分別代表它們。
超大號的類
越來越多代碼添加到一個類,變得非常臃腫,雖然這個類還能工作,但是代碼太長,非常繁瑣,容易發(fā)生很多bug,方向和細節(jié)混同在一起。
切分一個非常大的類的工作是枯燥的,也是一個挑戰(zhàn),類中代碼高度交織在一起,運行中不斷修復(fù)添加新功能,最后結(jié)果是必須有自律才能阻止它變得更大。
一般經(jīng)驗是我們盡量保持類代碼低于500行,函數(shù)低于50行,有時雖然不可行,但是我們總能尋找到辦法來重構(gòu)它,切分成更小更易于管理的代碼塊。
代碼的注釋
如果沒有注釋,代表沒有任何信息,這是臨時破碎的代碼嗎?被取代的舊代碼在哪里呢?
并行邏輯和重復(fù)代碼
舉一個例子,有某個結(jié)構(gòu)特征的名稱暗示我們一些它是什么的信息,比如“TreeBackground.dds”.為了了解這個特征能被用于一個tree類,我們需要檢查文件名中是否以單詞“Tree”開始.通過使用filename.beginsWith(”Tree”)檢查得很快.這段代碼如此短,但是我們在不同地方需要它,這樣我們就拷貝粘貼它,這就造成了重復(fù)代碼,當(dāng)然每個人知道重復(fù)代碼不好,但是這段代碼真的很短,拷貝粘貼非常容易,我們這里面臨的問題很明顯:也許以后我們會檢查這個結(jié)構(gòu)特征是否適合樹tree的改變,那是我們就需要在每個地方單獨一個個去解決(因為這段短代碼被復(fù)制到這些地方)
一般經(jīng)驗是,這段代碼不應(yīng)該被復(fù)制,應(yīng)該放在一個函數(shù)中,即使它超級短,主要因為做一個函數(shù)再調(diào)用需要許多代碼,而直接復(fù)制粘貼更直接簡單?
前沿技術(shù):
?為簡化MyBatis而生之MyBatis-Plus
?MyBatis通用Mapper
?云時代容器技術(shù)Docker
?微服務(wù)一站式框架SpringCloud
?分布式高性能消息中間件RabbitMQ
?持續(xù)集成利器Jenkins
?分布式服務(wù)治理框架Dubbo
?數(shù)據(jù)庫連接池Druid和JSON庫Fastjson
?云數(shù)據(jù)庫Redis分支ApsaraCache
?自研富容器技術(shù)Pouch和文件分發(fā)系統(tǒng)Dragonfly
?高并發(fā)條件下服務(wù)限流與服務(wù)降級
?高并發(fā)條件下緩存擊穿與緩存雪崩解決方案
?分布式架構(gòu)下的分布式事務(wù)解決方案
?分布式架構(gòu)下的全局ID生成方案
?億級流量下的Redis集群解決方案
?分布式架構(gòu)下的任務(wù)調(diào)度解決方案
?多線程&并發(fā)編程深入剖析
?JVM內(nèi)存模型&內(nèi)存可見性深度學(xué)習(xí)
?JVM優(yōu)化深入學(xué)習(xí)
?Nexus搭建Maven私服
?持續(xù)集成利器Jenkins
?分布式文件存儲數(shù)據(jù)庫MongoDB
?數(shù)據(jù)訪問SpringDataJPA
?MVVM框架Vue.js
?網(wǎng)絡(luò)爬蟲HttpClient與WebMagic
?分布式搜索引擎ElasticSearch
?阿里巴巴高性能連接池Druid
?阿里巴巴分布式RPC框架Dubbo深度解析
?Zookeeper注冊中心及集群詳解
?最活躍的MyCat讀寫分離和分庫分表實踐
?Comet框架pushlets信息推送
?最實用的Linux實戰(zhàn)
?集群/分布式下Session共享解決方案
?企業(yè)開發(fā)中的接口聯(lián)調(diào)測試
?支付寶/微信支付項目實戰(zhàn)
?支付中常見的掉單問題解決方案
?投資中的庫存防超賣設(shè)計
?互聯(lián)網(wǎng)金融項目的散標發(fā)布
?JMS規(guī)范及消息中間件ActiveMQ詳解
?樂觀鎖、悲觀鎖、分布式鎖
?互聯(lián)網(wǎng)中接口安全解決方案
?集群環(huán)境下的定時任務(wù)
?分布式文件系統(tǒng)FastDFS詳解與實踐
?分布式文件系統(tǒng)存儲合同文件
?主流NoSQL數(shù)據(jù)庫Redis詳解
?最常用的httpclient精解以及HttpComponents
?FreeMarker/Velocity模板技術(shù)
?最火熱的SpringBoot微服務(wù)開發(fā)框架精解
?SpringBoot下的模板技術(shù)Thymeleaf詳解
?Log4j2/slf4j/logback
?Redis緩存技術(shù)及使用場景案例
?消息隊列ActiveMQ的具體場景應(yīng)用案例
?高性能HTTP及反向代理服務(wù)器Nginx詳解
?JDK8/JDK9的新特性
?項目開發(fā)中常見的多數(shù)據(jù)庫解決方案
?MySQL數(shù)據(jù)庫主從復(fù)制及企業(yè)配置實踐
?WebServices異構(gòu)系統(tǒng)間的信息通信和調(diào)用技術(shù)詳解
?最常用的四種JSON解析指南
?微服務(wù)架構(gòu)SpringCloud
?持續(xù)集成Jenkins
?NoSQL&MongoDB&Cassandra
?IntelljIDEA開發(fā)工具的使用
?SVN&Git版本控制工具的使用
?互聯(lián)網(wǎng)高并發(fā)解決方案
?高并發(fā)秒殺系統(tǒng)實踐
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743