<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    I want to fly higher
    programming Explorer
    posts - 114,comments - 263,trackbacks - 0
    一.常用技巧

        1.避免使用不易理解的數(shù)字,用有意義的常量來代替。

        2.不要使用難懂的技巧性很高的語句。

        3.在處理String的時(shí)候,推薦使用StringBuffer類。

         String類將StringBuffer類封裝了起來,(以花費(fèi)更多時(shí)間為代價(jià))為開發(fā)人員提供了一個(gè)安全的接口。當(dāng)我們在構(gòu)造字符串的時(shí)候,我們應(yīng)該用StringBuffer來實(shí)現(xiàn)大部分的工作,當(dāng)工作完成后將StringBuffer對象再轉(zhuǎn)換為需要的String對象。如果用String對象代替StringBuffer對象的話,會(huì)花費(fèi)許多不必要的創(chuàng)建和釋放對象的CPU時(shí)間。  
          ○ StringBuffer description = new StringBuffer();

        ○ description.append(str1).append(str2) .append(str3);

        ○ model.setDescription(description.toString());

        × String description = “”;

        × description = str1 + str2 + str3;

        × model.setDescription(description);
        但是在上述例子中,如果被拼接的對象是靜態(tài)常量的話,直接使用“+”來拼接會(huì)效率更高一些。

        4.為了避免死鎖,請不要濫用或者使用不必要的synchronized關(guān)鍵字,應(yīng)該在必要的時(shí)候才使用它。

        5.在寫代碼的時(shí)候,請考慮性能的問題。但是并不是說要花很多時(shí)間在優(yōu)化代碼上,而是我們時(shí)刻應(yīng)該提醒自己要注意代碼的效率。

        6.內(nèi)存中的靜態(tài)集合類要清楚的知道何時(shí)清理,否則可能出現(xiàn)內(nèi)存泄露的情況。

        7.避免使用while循環(huán)時(shí)出現(xiàn)死循環(huán)或者長時(shí)間無法跳出的情況。

        8.對Collection,Map接口的類對象初始化時(shí)最好要先分配好合理的空間大小(建議),并且根據(jù)自己的需求選擇合適的對象,我們常用的集合對象包括ArrayLIist,HashMap,TreeMap,當(dāng)然還包括Concurrent類庫,ConcurrentHashMap,CopyOnWriteArrayList等。

        大家調(diào)用ArrayList的構(gòu)造函數(shù)時(shí),其源碼為:

    1 public ArrayList()
    2
    3    {
    4
    5        this(10);
    6
    7    }

    8

     

        9.不要用Timer定時(shí)執(zhí)行任務(wù),因?yàn)門imer有很多弊端,其采用單線程方式執(zhí)行所有的TimeTask,如果某個(gè)TimerTask很耗時(shí)則會(huì)影響到其他TimerTask的執(zhí)行。另外Timer不會(huì)捕獲由TimerTask拋出的未檢查的異常,故當(dāng)有異常拋出時(shí),Timer會(huì)終止,導(dǎo)致未執(zhí)行完得TimerTask不再執(zhí)行,新的TimerTask也不能被調(diào)度,最后Timer對調(diào)度的支持是基于絕對時(shí)間的。

        所以我們選擇jdk1.5引入的ScheduledThreadPoolExecutor或者ScheduledExecutorService。

        10.開發(fā)人員慎用線程,除了上面的定時(shí)任務(wù)執(zhí)行使用的ScheduledExecutor,因?yàn)槿绻€程不當(dāng)?shù)脑挘瑫?huì)造成很大的麻煩。

        11.注意優(yōu)化循環(huán)體,循環(huán)是重復(fù)運(yùn)行的地方,如果循環(huán)次數(shù)很大的話,循環(huán)體內(nèi)不好的代碼將被放大而突出。

        12盡量少用new實(shí)例,盡量在使用時(shí)再創(chuàng)建該對象,盡量重用對象。如ByteBuffer,每次不要都申請一個(gè)空間,而要clear后復(fù)用。

        13.盡可能的優(yōu)先使用Jdk提供的API,而不是自己寫,如數(shù)組復(fù)制等,因?yàn)橐话鉇PI都處于了性能的考慮。

        14.針對異常處理,一定要調(diào)用e.printStackTrace()方法打印堆棧而不是調(diào)用e.getMessage()這樣的方法。

        15.統(tǒng)一用Log4j等log工具而不是用System.out.println()等方法打印調(diào)試,非常不方便維護(hù)。

        16.一定要有緩存的概念,玩家游戲的一個(gè)操作都不能直接操作db,都是直接更新緩存中的數(shù)據(jù),最常用的緩存就是本地內(nèi)存。

        17.對于DB的處理,大家最好同一規(guī)范,都用一個(gè)專門的JdbcTemplate或者一個(gè)封裝數(shù)據(jù)庫操作,接口的facade。

        18.慎用反射,反射效率很低。

        19.字符串操作很復(fù)雜的話,推薦使用強(qiáng)大的正則表達(dá)式進(jìn)行處理。

        20.設(shè)計(jì)到游戲中狀態(tài)的判斷,推薦使用位運(yùn)算。

        21.用統(tǒng)一的序列化接口序列化游戲中的數(shù)據(jù)。    

        22.游戲服務(wù)器代碼中除了注釋通常不能出現(xiàn)中文。

        23.服務(wù)器通訊時(shí)能用byte的不用short,能用int的不用String,盡量減少通訊時(shí)的數(shù)據(jù)承載。

        24.盡量不要在方法上加synchronized,這樣效率會(huì)非常低。

        25.涉及到到db編碼時(shí),原則即"一個(gè)東西不能存到兩個(gè)地方",保證唯一性,避免不一致。

        26.時(shí)間處理上要統(tǒng)一,統(tǒng)一用毫秒。

        27.數(shù)據(jù)運(yùn)算過程中,要注意數(shù)據(jù)的溢出處理。

        28.對Concurrent類庫有足夠熟悉后才可以使用,不要認(rèn)為用了就不必同步了。

        29.盡量使用局部變量,調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧中,速度較快。

        30.寫代碼過程中要結(jié)合Junit反復(fù)測試,要寫測試文檔,畫UML圖等。
    二.面向?qū)ο笤O(shè)計(jì)原則

        1.單一職責(zé)原則:SRP-single responsibility principle

        每個(gè)類應(yīng)該只有一個(gè)職責(zé),對外提供一種功能。

        2.開閉原則:OCP-open for extendsion,close for modification

        對類的改動(dòng)是通過增加代碼進(jìn)行的,而不是改動(dòng)現(xiàn)有的代碼。

        3.里氏替換原則:LSP-liskov substitution principle

        在任何出現(xiàn)父類的地方都可以用它的子類來替代;同一個(gè)繼承體系中的對象應(yīng)該有共同的行為特征。

        4.依賴注入原則:DIP-dependence inversion principle

        要依賴于抽象,不要依賴于具體的實(shí)現(xiàn)。

        5.接口分離原則:ISP-interface segregation principle

        不應(yīng)該強(qiáng)迫客戶端程序依賴他們不需要使用的方法,一個(gè)接口不需要提供太多的行為。

        6.迪米特原則:LOD-law of demeter

        降低各個(gè)對象之間的耦合,提高系統(tǒng)的可維護(hù)性。在模塊之間,應(yīng)該通過接口進(jìn)行通信,而不會(huì)理會(huì)模塊的內(nèi)部的工作原理。

        7.優(yōu)先使用組合而不是繼承原則:CARP-composite/aggregate reuse principle

        復(fù)用對象的時(shí)候,優(yōu)先考慮組合,而不是繼承。因?yàn)樵谑褂美^承時(shí),父類的任何改變都可能影響子類的行為。

    三.附eclipse開發(fā)最常用快捷鍵

        Ctrl+L-查找行數(shù)

        Ctrl+T-查找當(dāng)前接口的實(shí)現(xiàn)類    

        Ctrl+ShiftO-快速生成import/去掉未使用的import聲明

        Alt+/-內(nèi)容輔助

        Ctrl+O-顯示大綱

        Ctrl+/-行注釋,取消行注釋

        Ctrl+D-刪除當(dāng)前行

        Ctrl+K-快速向下查找

        Ctrl+Shift+K-快速向上查找

        Ctrl+Shift+T-查找當(dāng)前workspace的type

        Ctrl+Shift+R-查找resource

        Ctrl+Shift+G-查找類方法和屬性的引用

        Ctrl+Shift+F-格式化代碼

        Alt+左右方向鍵-前進(jìn)和后退歷史記錄

        F2-重命名(Alt+Shift+R)

        F3-快速定位光標(biāo)位置的類,方法或?qū)傩?/span>

        F4-顯示類的繼承關(guān)系

        Ctrl+Shit+/-塊注釋

        Ctrl+Shift+\-取消行注釋

        Ctrl+1-快速修正

        Ctrl+G/Ctrl+鼠標(biāo)左鍵-查找當(dāng)前元素的聲明

        Ctrl+H-綜合搜索

        Ctrl+Alt+上下方向鍵-復(fù)制一份代碼
     

    posted on 2011-08-06 18:12 landon 閱讀(2218) 評論(0)  編輯  收藏 所屬分類: ProgramGameServer
    主站蜘蛛池模板: 一级视频在线免费观看| 免费在线观看h片| 亚洲av无码国产精品夜色午夜| 久久精品无码专区免费东京热| 久久亚洲精品国产精品婷婷 | 亚洲AV无码久久精品狠狠爱浪潮| a拍拍男女免费看全片| 青青视频免费在线| 亚洲精品自拍视频| 亚洲精品久久久www| 成人免费午夜无码视频| 国产免费伦精品一区二区三区| 国产精品亚洲精品| 情人伊人久久综合亚洲| 国产成人免费a在线视频色戒| 日韩人妻无码精品久久免费一| 亚洲AV无码专区国产乱码不卡 | 国产亚洲欧美日韩亚洲中文色| 久久精品国产亚洲av麻豆| 国产伦精品一区二区三区免费迷 | 亚洲电影免费在线观看| 理论秋霞在线看免费| 亚洲一区在线免费观看| 好看的电影网站亚洲一区| 国产免费人人看大香伊| 和日本免费不卡在线v| 国产成人免费AV在线播放| 国产成人综合亚洲绿色| 激情内射亚洲一区二区三区爱妻| 亚洲av午夜福利精品一区人妖| 少妇亚洲免费精品| 在线观看无码的免费网站| 亚洲一区二区三区免费视频| 久久免费国产精品一区二区| 九九九精品视频免费| 国产精品亚洲精品日韩电影| 亚洲人成网站色7799| 亚洲六月丁香六月婷婷蜜芽| 18gay台湾男同亚洲男同| 亚洲av无码一区二区乱子伦as| 亚洲免费观看视频|