1、把這些提煉到一個方法里面來完成
創(chuàng)新互聯(lián)專注于中大型企業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶成百上千家,服務(wù)滿意度達97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!
2、一句sql語句能搞定的就用一句sql語句。你寫的查詢多個表java代碼肯定沒有mysql的速度快
3、方法模塊化,把功能盡量小化,然后根據(jù)模塊劃分和封裝
理論上的就不說了,你自己搜也能搜到很多。
舉個例子,你從一個方法a調(diào)用了另一個方法b。
我們知道,在a和b之中是可以創(chuàng)建相同名稱的變量的,比如都有int i = 0;這句話。這種現(xiàn)象的根本原因在于,方法的調(diào)用會產(chǎn)生中斷,中斷產(chǎn)生后,cpu會做現(xiàn)場保護,包括把變量等進行壓棧操作,即把方法a的相關(guān)資源進行了壓棧,而方法b的相關(guān)資源放在棧頂,只有棧頂資源可以與cpu交互(就把方法a中的變量i保護起來),當方法b結(jié)束后出棧,a就又回到了棧頂,并獲取了方法b運行的結(jié)果,然后繼續(xù)運行。
哎,有些啰嗦了。方法的調(diào)用、中斷、壓棧出棧等等這些操作你說一點不消耗資源吧,那是不可能的,多少都會消耗一些,雖然很非常十分微不足道。那么編譯器的優(yōu)化過程,我知道的其作用之一,就是會把這些做一個優(yōu)化。原本方法a一共10句話,你偏要只寫1句,然后第2句寫成方法b,第3句寫成方法c。。。。。,然后依次嵌套調(diào)用。這樣的源代碼,編譯器優(yōu)化后,就跟你直接寫10句是一個結(jié)果,即做了一定程度上的優(yōu)化。
對于程序員來說,軟件編程開發(fā)代碼質(zhì)量能夠直接反應(yīng)出一個程序員能力的高低,下面IT培訓(xùn)就一起來了解一下,在代碼質(zhì)量優(yōu)化方面,我們需要關(guān)注哪些問題。
1.吹毛求疵般地執(zhí)行編碼規(guī)范嚴格執(zhí)行代碼編寫規(guī)范,可以使一個項目乃至一個公司的代碼具有完全統(tǒng)一的風格,就像同一個人編寫的一樣,而且命名良好的變量,函數(shù),類和注釋,也無疑可以提高代碼的可讀性.具體落實到執(zhí)行層面,可以參照Google的編碼規(guī)范或者java官方的編碼規(guī)范,網(wǎng)上可以找到,關(guān)鍵是要嚴格遵守,并且在codereview時,嚴格要求,沒有按照規(guī)范的一定要指出并且要求修改.實際情況往往是雖然大家都知道優(yōu)秀的代碼規(guī)范是怎樣的,但在具體寫代碼的過程中,卻執(zhí)行的差強人意,很多情況是認識上不夠重視,覺得一個變量或者函數(shù)的命名成哪樣關(guān)系不大,所以不夠推敲,注釋很多也都不寫,codereview的時候大家也都事不關(guān)己心態(tài),或者覺得沒必要太摳細節(jié),導(dǎo)致慢慢的整個codebase變得越來越差.所以這里還是要強調(diào)一下,細節(jié)決定成敗,提高團隊對代碼規(guī)范的認同及其嚴格的執(zhí)行是關(guān)鍵.2.編寫高質(zhì)量的單元測試單元測試是容易執(zhí)行,且對提高代碼質(zhì)量見效快的方法之一還。
但還是有很多公司對單元測試重視不夠,包括一些大的互聯(lián)網(wǎng)公司,不寫或者隨便寫寫。
有些工程師覺得有測試團隊就夠了,再寫單元測試就是浪費時間。
其實測試團隊的測試和單元測試是在不同層面上的,測試團隊的測試一般是黑盒測試,系統(tǒng)層面的集成測試,對于復(fù)雜系統(tǒng)來說,組合爆炸,a測試團隊無法窮舉所有的測試用例。
單元測試是代碼層面的測試,一般是針對類的測試。
既然無法從系統(tǒng)的整體上保證100%符合我們的預(yù)期,那單元測試起碼能保證我們代碼在細粒度上運行符合預(yù)期。
有些工程師認為開發(fā)任務(wù)重沒時間寫。
這個還是沒有足夠重視單元測試,覺得是可有可無的部分,才會有這樣的想法。
寫好單元測試,節(jié)省很多解決線上bug的時間,開發(fā)時間反而更充足了。
還有很多工程師雖然在寫單元測試,但只對正常流程做測試。
代碼中的bug多數(shù)是寫代碼時異常情況沒有考慮全面導(dǎo)致的,正常流程一般不會出問題。
單元測試的作用就在于測試各種異常情況下代碼的運行是否符合預(yù)期,所以只對正常流程測試無法發(fā)揮單元測試真正的作用。
一般情況下,單元測試代碼量要比要測試的代碼多,一般是1-2倍的樣子,寫單元測試本身沒有太多的技術(shù)挑戰(zhàn),主要看工程師邏輯是否縝密,能夠考慮各種異常情況,寫起來比較枯燥,所以寫高質(zhì)量的單元測試的一方面要靠工程師的耐心執(zhí)行,另一方面要靠團隊的嚴格要求。
當然這些都是建立在對單元測試重要性的認同之上。
每個人都說代碼是程序員手中的一把雕刻刀,是對他們產(chǎn)品輪廓和細節(jié)的打磨。
每個程序員在代碼優(yōu)化方面需要做的是,即使是每天處理代碼的程序員也有很多關(guān)于他們編寫代碼的問題,所以優(yōu)化很重要。
下面西安西安IT培訓(xùn)為大家介紹代碼優(yōu)化的方法。
1、盡量重用目標特別是,使用代表字符串收斂的String目標應(yīng)該使用StringBuilder/StringBuffer。
因為Java虛擬機不僅要花時間生成目標,而且可能還需要花時間檢索和刪除這些目標,所以西安計算機學(xué)院發(fā)現(xiàn)生成太多目標會對程序的功能產(chǎn)生重大影響。
2、可以運用局部變量調(diào)用方法時傳遞的參數(shù)和調(diào)用中創(chuàng)建的臨時變量保存在堆棧中的速度更快。
其他變量,如靜態(tài)變量、實例變量等等,在堆中創(chuàng)建,速度較慢。
此外,西安北大青鳥發(fā)現(xiàn)在堆棧中創(chuàng)建的變量,方法的操作結(jié)束,當這些內(nèi)容都消失了,就不需要額定廢物回收。
3、及時封閉流Java的程序編寫過程中,數(shù)據(jù)庫連接,I/O流操作必須謹慎,應(yīng)用結(jié)束后,應(yīng)該及時關(guān)閉發(fā)布資源。
因為西安java培訓(xùn)發(fā)現(xiàn)這些大目標的運行會造成大系統(tǒng)支出,稍有不慎就會導(dǎo)致嚴重的結(jié)果。
網(wǎng)站優(yōu)化通常包含兩方面的內(nèi)容:減小代碼的體積和提高代碼的運行效率。減小代碼的體積已經(jīng)寫過太多這類的文章了,下面就簡單討論下如何提高代碼的效率。一、不用new關(guān)鍵詞創(chuàng)建類的實例用new關(guān)鍵詞創(chuàng)建類的實例時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。但如果一個對象實現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone()方法。clone()方法不會調(diào)用任何類構(gòu)造函數(shù)。在使用設(shè)計模式(DesignPattern)的場合,如果用Factory模式創(chuàng)建對象,則改用clone()方法創(chuàng)建新的對象實例非常簡單。二、使用非阻塞I/O版本較低的JDK不支持非阻塞I/OAPI。為避免I/O阻塞,一些應(yīng)用采用了創(chuàng)建大量線程的辦法(在較好的情況下,會使用一個緩沖池)。這種技術(shù)可以在許多必須支持并發(fā)I/O流的應(yīng)用中見到,如Web服務(wù)器、報價和拍賣應(yīng)用等。然而,創(chuàng)建Java線程需要相當可觀的開銷。JDK1.4引入了非阻塞的I/O庫(java.nio)。如果應(yīng)用要求使用版本較早的JDK,需要支持非阻塞I/O的軟件包。三、慎用異常異常對性能不利。拋出異常首先要創(chuàng)建一個新的對象。Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因為在處理過程中創(chuàng)建了一個新的對象。異常只能用于錯誤處理,不應(yīng)該用來控制程序流程。四、不要重復(fù)初始化變量默認情況下,調(diào)用類的構(gòu)造函數(shù)時,Java會把變量初始化成確定的值:所有的對象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和double變量設(shè)置成0.0,邏輯值設(shè)置成false。當一個類從另一個類派生時,這一點尤其應(yīng)該注意,因為用new關(guān)鍵詞創(chuàng)建一個對象時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。五、盡量指定類的final修飾符帶有final修飾符的類是不可派生的。在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內(nèi)聯(lián)(inline)所有的final方法(這和具體的編譯器實現(xiàn)有關(guān))。此舉能夠使性能平均提高50%。六、盡量使用局部變量調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量、實例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進一步優(yōu)化,望采納,謝謝。