• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            勤能補拙,Expter

            成都游戲Coder,記錄游戲開發過程的筆記和心得!

            #

            關于會話記錄Session的實現

                 摘要:        Session的適用性很廣,翻譯為‘會話’,最初接觸他的時候在做web方面,可以記錄一個用戶的會話記錄,當關閉瀏覽器的時候失效!Session實際上是一個特定的時間概念.       在最開始接觸它時沒有刻意的研究實現與擴展性,然后最近的一個工程有這...  閱讀全文

            posted @ 2009-04-22 20:53 expter 閱讀(1432) | 評論 (1)編輯 收藏

            一周回憶(2009.03.30-)

                 本周公司游戲公測,然后也玩了此玩游戲,同時也比較關心游戲的運營狀態,畢竟是公司第一款游戲。
                雖然沒有參與此游戲的開發,但是看了server部分的代碼,可以通過此次運營游戲的問題,來提醒自己以后盡量不要出現此問題,或者是提供一個更好的解決方案。


                本周在公司沒做多大的事情,游戲公測,我也跑去玩游戲去了,雖然沒有太大的網游天賦,但是還是盡量通過看的資料與代碼在結合游戲來熟悉各個環節,為自己以后開發做好一定的基礎。

                 本周清明節,放假3天,放假第一天先是回校和朋友們耍了,然后一起去圖書館還書,在借書,然后收到3G門戶人事的一些信息。放假第二天電腦出問題了,我寫的代碼用VS2005,VC6 一link就會死機,只有拔電源。我也不知道什么BUG。郁悶慘了,重裝系統問題依舊。陷于崩潰,最后打了幾盤Z3,緩解了下心情,然后只有用DEV了。晚上換了以前的Solaris,安裝了Ubuntu8.10,當然是虛擬機。放假第三天,和朋友逛了家樂福,下午睡覺,看了下畢業設計,有一些頭緒了。  然后晚上看了會書。三天放假就這樣過去了,感覺就像一宅男,下午和媽媽聊天,他喊我出去處處逛逛,我說一個人沒撒好逛的,已在叮囑我多吃,吃多點,感覺在父母眼中還是個小孩。。  這周看了2部電影,很好看,很好看,一部勵志電影《當幸福來敲門》 一部很感人的愛情片《八月迷情》。


                 同時最近看了些書與代碼,感覺收獲蠻大,風格和注意問題都有提高。希望能再接再厲,保持狀態,努力學習!



               

            posted @ 2009-04-06 23:55 expter 閱讀(385) | 評論 (0)編輯 收藏

            Cutting Corners (acm 1996)

                 摘要: 地址連接:http://www.karrels.org/Ed/ACM/96/ccorners.html剛開始做這題時候,沒作對,后來優化了下代碼,問了下pozen,測試代碼通過,只是沒有地方提交。。。尋路是dp(動態規劃)。。其實可以成優化成很小,直接是求所有點中的其中2點距離。 1996 ACM Scholastic Programming Contest Finals sponsored ...  閱讀全文

            posted @ 2009-04-04 21:25 expter 閱讀(511) | 評論 (1)編輯 收藏

            一周總結,讀書筆記

                      這周主要是熟悉開發流程,閱讀工程代碼,熟悉方案邏輯,查看需求文檔,然后就是看書學習,閑來無事可以聽下歌,中午休息的時候去zoj做了幾道題目。

                     
                    查看了接近一周的代碼和書籍有了一下總結:
            1.如果不需要一個類的對象不能被隱式的轉換,可以在構造函數前增加關鍵字explicit  
               
             1template<class T>
             2class Array
             3{
             4public:
             5    explicit Array(int _size = 0);
             6    T & operator [](int index);
             7    
             8}
            ;
             9
            10Array<int> a(10);
            11Array<int> b(10);
            12
            13if (a == b[i])
            14{
            15    // 如果沒有加explicit,可以編譯通過,加了就不能通過
            16}

            17// 要轉換可以使用
            18if (a == static_cast<int> b[i])
            19{
            20    ..
            21}

            2.可以通過宏或者const常量,來優化,減少和優化常量,還可以利用宏來定義一些函數,或者字符串的處理。
               比如一個簡單的字符串處理
              
            1#define  STR(ST) #ST

            3.容器的使用,注意各種函數的參數和返回值以及各種函數使用。
               比如:關聯容器和標準容器在刪除元素的時候會不同。
                 例子:
             1對于ma等關聯容器的元素刪除
             2map<int,int> mp;
             3for (map<int,int>::iterator it = mp.begin(); it != mp.end();)
             4{
             5    if ()  //滿足刪除條件
             6    {
             7        mp.erase(it++);//刪除當前節點,并返回下一個元素,自加
             8    }

             9    else
            10    {
            11        it++;
            12    }

            13}

            14對于vector等標準容器的元素刪除
            15vector<int> ve;
            16for (vector<int>::iterator it = ve.begin(); it != ve.end();)
            17{
            18    if ()  //滿足刪除條件
            19    {
            20        it = ve.erase(it);
            21    }

            22    else
            23    {
            24        it++;
            25    }

            26}

            27
            28關于2者區別主要是erase返回值問題,可以在網上查相關的說明,

            4.關于內存池,基于動態分配的安全的線程池,可以利用2個參數,一個數據類型,一個鎖類的參數模板。
               關于內存池可以閱讀boost::pool 庫相關文檔,Boost pool 庫引入了可用于實現快速內存分配的工具。正確的內存塊對齊可以得到保證。

               根據 Boost 文檔所述,當您分配和釋放許多小型對象時,建議使用池。使用池的另一個不太明顯的優點在于,作為程序員,您不必擔心內存泄露:內存由 Boost 庫在內部自動進行管理。要使用 pool 庫,您不必在鏈接時提供特定的庫——單憑頭文件就足以完成鏈接了。 有多個接口對 pool 庫可用:
               關于Boost pool可以閱讀
              http://www.ibm.com/developerworks/cn/aix/library/au-util_boost_lib/


                 另外實現一個鎖類有很大的用處,比如
             1template<typename TyVal>
             2class Lock
             3{
             4public:
             5    explicit Lock()
             6    {}
             7    explicit Lock(TyVal val):_val(val)
             8    {
             9        //加鎖
            10    }

            11    ~Lock(){//釋放}
            12private:
            13    TyVal _val;
            14}
            ;
            15
            16如果我們有一段代碼需要加鎖,則可以直接使用
            17vector<int> Vint;
            18Lock<vector<int> > lock(Vint);
            19可以直到lock的聲明周期結束,釋放資源

            5.關于重載操作符,本周看到同事們在討論一個關于結構體的代碼
              實例如下:
              
             1struct Test
             2{
             3    //
             4    
             5    Test & operator = (const Test &_t)
             6    {
             7        //關于此處是否需要增加一個 _t與*this的判斷,
             8       memcpy(this,&t,sizeof(t));      
             9        return *this;
            10    }

            11    
            12    //
            13}
            ;
                因為效率和安全的問題,是否需要增加判斷的代碼,比如
                 if(_t == *this)
                 {
                     return *this;
                 }
               其實Effective C++的條款17: (在operator=中檢查給自己賦值)的情況已經說了需要增加一個自檢驗證,我們姑且不考慮memcpy的數據重疊問題(new placement),增加一個明顯有好處。

            6. 必須有良好的OOA,OOD思想,這樣能更快寫出,高效的代碼。
            7. 算法重要,有良好的編程風格,在確保程序穩定的同時,增加效率。
             

            個人總結不代表其他意見。。

            posted @ 2009-03-29 22:28 expter 閱讀(2875) | 評論 (7)編輯 收藏

            智能指針(auto_ptr 和 shared_ptr)

            都是這周看書以及代碼的總結:
              
                Stl  中 auto_ptr只是眾多可能的智能指針之一,auto_ptr所做的事情,就是動態分配對象以及當對象不再需要時自動執行清理。
                這里是一個簡單的代碼示例,如果沒有auto_ptr,
                
               

             

             1void ProcessAdoption(istream &data)
             2{
             3 
             4    while (data)                            // 如果還有數據
             5    {
             6        ALA   *pa = readALAData(data);      // 取出下一個數據
             7        pa->DealProcessAdoption(data);        // 處理
             8 
             9        delete pa;                          // 釋放資源
            10    }

            11    return;
            12}


                 如果在DealProcessAdoption有一個exception,會發生什么事情,因為ProcessAdoption不能捕獲他,所以這段代碼很危險,所以DealProcessAdoption后面的代碼可能會跳過,造成內存泄露。
            如果利用try catch去捕獲他,會搞得代碼很亂,又缺少美觀性。

            所以Stl提供了一個智能指針來解決這個問題,我們可以先模擬實現一個智能指針的類實現。

             

             1// 關于一個智能指針的定義
             2template<typename Type>
             3class auto_ptr
             4{
             5public:
             6    auto_ptr(T *=NULL) :Ptr(p)
             7    {     }
             8    ~auto_ptr()
             9    {
            10        delete Ptr;
            11    }

            12private:
            13    Type *Ptr;
            14}
            ;
            15
            16
            17void ProcessAdoption(istream &data)
            18{
            19
            20    while (data)                            // 如果還有數據
            21    {
            22        auto_ptr<ALA> pa(readALADara(data));
            23        pa->DealProcessAdoption(data);
            24    }

            25    return;
            26}


            這個版本和原先版本的差異只有二處,
            第一pa是一智能指針的對象,不是ALA*
            第二不用自己去釋放delete

            然后我看到Effective STL的條款
            8:永不建立auto_ptr的容器
            關于此可以看的Effective STL的條款8

            因為auto_ptr并不是完美無缺的,它的確很方便,但也有缺陷,在使用時要注意避免。首先,不要將auto_ptr對象作為STL容器的元素。C++標準明確禁止這樣做,否則可能會碰到不可預見的結果

            auto_ptr的另一個缺陷是將數組作為auto_ptr的參數: auto_ptr<char>  pstr (new char[12] ); //數組;為定義
            然后釋放資源的時候不知道到底是利用delete pstr,還是 delete[] pstr;

            然后收集了關于auto_ptr的幾種注意事項:
            1、auto_ptr不能共享所有權。
            2、auto_ptr不能指向數組
            3、auto_ptr不能作為容器的成員。
            4、不能通過賦值操作來初始化auto_ptr
            std::auto_ptr<int> p(new int(42));     //OK
            std::auto_ptr<int> p = new int(42);    //ERROR
            這是因為auto_ptr 的構造函數被定義為了explicit
            5、不要把auto_ptr放入容器

            然后筆者從而推薦的是boost的shared_ptr,然后看完shared_ptr關于智能指針的介紹與例子。
            5種針對auto_ptr不足的指針如下:需要詳細了解可以去查看相當文檔,與測試新代碼。
            scoped_ptr <boost/scoped_ptr.hpp> 簡單的單一對象的唯一所有權。不可拷貝。
            scoped_array <boost/scoped_array.hpp> 簡單的數組的唯一所有權。不可拷貝。
            shared_ptr <boost/shared_ptr.hpp> 在多個指針間共享的對象所有權。
            shared_array <boost/shared_array.hpp> 在多個指針間共享的數組所有權。
            weak_ptr <boost/weak_ptr.hpp> 一個屬于 shared_ptr 的對象的無所有權的觀察者。
            intrusive_ptr <boost/intrusive_ptr.hpp> 帶有一個侵入式引用計數的對象的共享所有權。

            1. shared_ptr是Boost庫所提供的一個智能指針的實現,shared_ptr就是為了解決auto_ptr在對象所有權上的局限性(auto_ptr是獨占的),在使用引用計數的機制上提供了可以共享所有權的智能指針.
            2. shared_ptr比auto_ptr更安全
            3. shared_ptr是可以拷貝和賦值的,拷貝行為也是等價的,并且可以被比較,這意味這它可被放入標準庫的一般容器(vector,list)和關聯容器中(map)。

            關于shared_ptr的使用其實和auto_ptr差不多,只是實現上有差別,關于shared_ptr的定義就不貼代碼了,以為內開源,可以網上找
            1、shared_ptr<T> p(new Y);


            要了解更多關于auto_ptr的信息,可以查看more effective c++ 的p158頁條款28
            要了解shared_ptr 類模板信息,可以查看boost 1.37.0中文文檔,而且支持數組的shared_array 類模板
                

            posted @ 2009-03-29 15:50 expter 閱讀(31305) | 評論 (5)編輯 收藏

            2007年我在干啥

                 摘要: 2007年我在干啥  閱讀全文

            posted @ 2009-03-29 14:50 expter 閱讀(1679) | 評論 (3)編輯 收藏

            生活雜記。。。

                     這周末本來打算租房的,結果還是沒找到,很郁悶了,估計還得每天早起晚歸一周,原因有幾:房價太高,條件不好,都是中介舍不得中介費,家具配置也不咋全。


                     這周在fox的幫助下,終于把Netmonitor搞完了,平時還是得多看書,多學習。
                    周六找房子沒找到,實習論文懶得寫,晚上又真三了一盤。
                    周末去上了會自習,看了下書,閑時看了下朋友的公務員題目,看了幾道題有幾個不會,汗一個
                   
                   題目如下: (猜數字)
                  1 .    1    2    3    35   ..       猜下個數字
                  2 .    1    3    4    1     9       猜下個數字


                下周計劃:
                     1.沒事就多看書,多看代碼,多與其他人交流。
                     2.每天晚上多熟悉shell編程。
                     3、一定要確定房子。
                     4、提前一個月祝女友公務員考試成功。因為你生活更精彩!

              

            posted @ 2009-03-08 16:28 expter 閱讀(404) | 評論 (2)編輯 收藏

            一個索引表 (風格,問題推廣分析)

                 摘要: 今天看到以前寫的一個關于容器排序以及賦值問題。先貼以前代碼 #include <iostream>#include <cstdlib>#include <vector>#include <algorithm>using namespace std;template< cla...  閱讀全文

            posted @ 2009-03-08 14:58 expter 閱讀(1230) | 評論 (2)編輯 收藏

            一些學習筆記 ,陷阱,缺陷

             


            1、關于初始化:

            deque<string> Deque;// 一個deque容器

            deque
            <string> Deque2(Deque.begin(),Deque.end());                // 一種初始化

            copy(Deque.begin(),Deque.end(),back_inserter(Deque2) );         
            // 一種初始化

            deque
            <string> Deque3(istream_iterator<string>(cin),istream_iterator<string>()); // 一種初始化
              現在討論第三種初始化方式,
            typedef istream_iteraor<string> (Func)();

            deque
            <string> Deque3(istream_iteraotr<string> cin, Func);  
            看上去像一個函數聲明,

            typedef istream_iteraor
            <string> (Func)();
            deque
            <string> f(stream_iteraor<string> ,Func);
            現在比較清晰了吧,很像一個函數聲明了,

            所以第三種初始化方式根本就不能做任何事情.

            //如果真的要達到初始化的目標,可以通過括號來消除二義性
            deque<string> Deque3( (istream_iterator<string> (cin)) , istream_iterator<string>() );

            通過加括號來提示編譯器我們這里提供的是構造函數的參數而非參數聲明,因為 (istream_iterator<string> (cin))  不能解析為變量聲明,這個更void f ( (int i)) 不可能是函數聲明是一回事。多一對括號不可能解釋為合法的聲明語句。


            2.關于double 和float 區別

            一個例子
            int main()
            {

              
            double  x = 1e8;
              
              
            while(x >0)
                  x
            --;


               
            return 0;
            }


             

            現在的編譯器一秒就可能運行完成,
            如果吧doubel x = 1e8 ,換為 float x = 1e8;
             C++標準說 :
             浮點類型有三種: float ,double, long double,關于精度很顯然
            如果換成float 答案很詭異,因為取決于float的精度,能否表達0 1e8區間的整數

            所以如果換為 float,可能運行一秒,也可能是死循環,因為如果float不能表達0 1e8區間的整數, 因為其中 n-1 = n (由于浮點精度不夠)



            3. 一些拼寫代碼錯誤

            #include <iostream>
            #include 
            <iomanip>

            using namespace std;

            int main()
            {
                
            int x = 1;
                
            for (int i =0 ; i < 100; i++)
                
            {
                    ;
                }


                
            //  下面這行代碼會干些什么?遞增???????/
                ++x;
                std::cout 
            << x << std::endl; 
                
            return 0;
            }


              一個支持標準c++的編譯器答案輸出是 1
              原因很詭異,因為有個有趣的是:注釋末尾‘??/’會被轉換為'\' ,寫個宏的都知道這個就是換行符,所以??/換轉換為\ ,而++x就相當于粘貼到注釋行的末尾 ,所以++x.,不會起作用,是注釋的一部分。

            在看一個例子:
            一個符號標準 c++的編譯器會報多少錯誤。
            struct X 
            {
                
            static bool f(int *p)
                
            {
                    
            return p &&0[p] and not p[1:>>p[2];
                }

            }
            ;

            先一步一步的分析
            1:0[p] 其實和p[0]一樣
            2: and not都是有效關鍵字 ,他們分別是&& 和!
            3::>竟然也是合法的,他是]的雙字符寫法。

            所以這個語句會被解析為 return p && p[0] && !p[1]>p[2] ,沒有語法錯誤。
            很詭異。

             

            posted @ 2009-03-08 14:05 expter 閱讀(1869) | 評論 (5)編輯 收藏

            最近筆記以及總結!

                 來公司已經2周了,自己做的工作挺少,給的3周完成的一個編輯器,不到2周基本功能做完了,因為沒有詳細的設計,而且是內部的人員使用,很多的功能都是自己來規劃的,其實我覺得平時在校的話 這個3-4天就可以做完,不知道為啥做了這么久!

                 沒看看著忙碌的同事,還有游戲正在三測,都在加班,我只是看一些一些接口,一些邏輯代碼,沒多大的事情,估計是剛來任務也很輕吧,呵呵!
               
                 在校雖然學了主流的的語言,但是最后選擇C++,因為它開發自由,效率高,結構性很強等等。最近看了幾本書,對OOD,OOA,以及編寫代碼時的問題,與良好的設計模式有了一定的提高,但是對于有些又有些遺忘,比如STL,LUA,軟件工程。在我看來,一個程序員必須有很好的算法功底與扎實的數據結構!最近手中還有幾本書,打算閑的時候看,OOD啟示錄,boost也得學學,另外stl,設計模式和網絡編程以及他的幾種模型都要加強復習。

                 在我看來一個項目只有有了這方面的理論知識,有一門熟練的語言,實現起來都很快,自己感覺缺少的是一種思想,架構思想,估計是自己接觸的太少,經驗太少,需要的是時間來催化!
                
                 同時很高興在新的環境認識了新的朋友,大家都很和善,同時也知道fox,kevinlynx也經常在CPPBLOG這里寫日記,以后得像2位學習,以及公司的同事都是俺的前輩。

                 在大學沒有寫個太大的程序,估計最大一個軟件的在6K左右行吧(c++),ACM估計在100多道,以及平時也的小東西不到20個項目。學習筆記,以及一些簡單的win 32 編程還是有少許,比如底層驅動之類的。

                 現在的任務就是多看一些大牛的技術blog,多看書,多寫代碼才是王道,以后編程盡量規范了,良好的風格以及更好設計模式,更優的算法才是最好的,在我平時做什么東西,都希望敢時間,幾下就做不了了之。還得改正。

                 我比較喜歡網絡編程,平臺方面主要是win,對于linux只是寫過,平時玩玩。學得都比較淺畢竟沒做個啥子大的商業項目。既然來了這個公司就要做出自己成績。年輕有無限的激情,就要努力。

                 在等段時間就要寫畢業設計和論文了,希望沒多大問題,一個彩色人臉識別程序,關鍵是識別成功率!

                 在大學最后的時間即將完成,邁入社會就得認真對待任何事情了。努力工作,掙錢,養老婆,呵呵!   

                 加油?。?!就想kevinlynx那天說的,讓人知道你能做什么,會什么!!

                 因為自己表達能力稍加,一般不寫技術,怕描述因次誤導或者亂說了,其實也沒多大技術含量、、、呵呵 主要記錄的生活筆記!

            posted @ 2009-02-22 22:21 expter 閱讀(2005) | 評論 (12)編輯 收藏

            僅列出標題
            共7頁: 1 2 3 4 5 6 7 
            久久婷婷激情综合色综合俺也去| 久久久久久一区国产精品| 性做久久久久久免费观看| 亚洲国产精品久久久久婷婷软件 | 久久99国产综合精品免费| 久久精品卫校国产小美女| 免费一级做a爰片久久毛片潮| 欧美性猛交xxxx免费看久久久| 99久久综合国产精品二区| 久久久久无码专区亚洲av| 久久九九久精品国产免费直播| 久久久精品国产亚洲成人满18免费网站 | 久久se精品一区二区| 国产亚洲色婷婷久久99精品| 99精品国产在热久久无毒不卡 | 久久国产视频99电影| 一本久道久久综合狠狠躁AV | 久久久久久无码Av成人影院| 精品蜜臀久久久久99网站| 91久久精品视频| 怡红院日本一道日本久久 | 久久精品国产亚洲网站| 久久99精品久久久久久秒播| 久久无码精品一区二区三区| 亚洲精品tv久久久久久久久| 久久久精品免费国产四虎| 亚洲国产成人精品女人久久久| 亚洲婷婷国产精品电影人久久| 亚洲综合熟女久久久30p| 99久久精品国产一区二区| 久久婷婷国产麻豆91天堂| 久久国产成人午夜AV影院| 中文字幕日本人妻久久久免费 | 久久精品蜜芽亚洲国产AV| 久久综合欧美成人| 亚洲国产成人久久精品99 | 久久婷婷五月综合成人D啪| 久久人人妻人人爽人人爽| 色婷婷久久综合中文久久一本| 91精品国产乱码久久久久久| 亚洲?V乱码久久精品蜜桃 |