• <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>
            春暖花開
            雪化了,花開了,春天來了
            posts - 149,comments - 125,trackbacks - 0

                   剛剛休息了一個暑假。不要盲目羨慕我啊,只有短短一個星期。上研以來,還真的沒有什么假期可言,寒暑兩假一年加起來也就兩個多星期,相比同學悠哉的兩三個月來說真的是少啊。
                   眼看明年也快要畢業了,于是邀請父母還有淘氣的小侄來北京逛逛看看。父親的北京記憶還停留在80年代初,還話說他開著大卡車從除了天門前的其他街道呼嘯而過。北京已經變化得令他陌生。小侄則郁悶為什么去哪都要不停的倒車,嚷著再不做地鐵的他,做了一回公交后,再也沒有這種想法。
                    上星期還算天公作美,剛開始的幾天還算溫度適宜,領著逛了逛石景山游樂園,鳥巢,天文館,北京市海洋館,西單,前門,天安門。剩下幾天的高溫天氣,奈何我有興致,他們卻個個都不逛了。原因有二,一是money消耗了不少,父母也替我心疼錢了;二是高溫加交通不順,老的累了,小的也累了。情愿開著空調,家里看電視。
                    幾天下來,小侄竟然發出了這樣的感慨,北京沒有家好。父母也覺得沒有家好。在這個城市生活了兩年多的我,為什么沒有這種感覺呢。習慣了,習慣了擁堵,習慣了走路,習慣了忙碌,習慣了這個城市帶給我的感覺,也漸漸覺得自己融入了進來。畢竟這里會讓自己跑得更快些,跳得更高些,是這里的機遇與挑戰吸引了我,我想這也是吸引很多人的理由。要不,這么多人,擁擠在這個城市總該有個往前奔的理由。
                    還沒畢業,所以高得不能再高的房價還暫時對我帶不來什么沖擊,只是眼下的經濟形式,讓我面臨著就業壓力。父母的到來,讓我為自己找到了一個很好放松的理由。假期的結束,又讓自己回到了畢業的思考。
                    似乎這是一個熱門話題,身邊的同學、同事以及朋友都會問及此事。程序員是我的首選職業,因為我喜歡,喜歡那種挑戰和不斷學習的感覺,享受那種解決問題的快樂。我會選擇這個一直下去,有著成為小小專家的夢想。只是現在需要一個跳板,跳得更高,飛得更遠。
                     夢能飛得多遠,在于我能跑得多塊。假期給我帶來了一些疲憊,看看《蠟筆小新》,居然能緩解疲勞。其實小新有時比我小侄聽話好多。今天終于恢復了早起的習慣,工作也要認真起來。舊項目終于完結了,新項目又要開始了,項目總結也要趕著寫,學習進步也要加緊些。事情很多,都得一件一件來。在豆瓣網上看到的晨型人,5點多起來對于我來說真的太困難了,還是老時間起來吧,七點多,才能保證一天之精神飽滿。加油起來,堅持就會勝利。

            posted @ 2009-08-19 19:38 Sandy 閱讀(245) | 評論 (0)編輯 收藏
                 摘要: 目前做了一些版本涉及到海外的一些東西, 有些沒有辦法測試,只要寫死IMSI號碼。每回翻郵件真的很痛苦,遂在網絡上查了一下。還挺全的。摘自:http://blog.csdn.net/wyymaomi/archive/2009/04/19/4091396.aspx 國際移動客戶識別碼 IMSI International Mobile Subscriber Identification Number&...  閱讀全文
            posted @ 2009-08-06 11:41 Sandy 閱讀(8117) | 評論 (0)編輯 收藏

                     最近越來越感覺效率的重要性。為什么呢?
                     寫程序不僅僅是簡單的實現功能。原來寫代碼時沒有注意這些問題,現在暴漏出來了,也無計可施。多個功能再加界面,導致了界面很慢。用戶體驗不好。所以這需要在以后工作中引以為戒。

                     要把自己的代碼寫的漂亮一些。
            posted @ 2009-08-05 17:01 Sandy 閱讀(205) | 評論 (0)編輯 收藏

            今天在進行memcpy出現了一些問題。
            原因是這樣的:
            我定義了這樣一個接口,里面涉及memcpy操作。

            舉個例子吧,如接口addItem,
            void addItem(int iType, LPVOID *pItem);

            里面有一個對象是TCHAR szStr[512];
            我直接進行了這樣的拷貝,memcpy(szStr, pItem, sizeof(szStr));
            今天就出問題了。提示某塊內存無法訪問。于是重新看這個問題。為什么會這么寫這樣的接口呢?
            我原先寫的是 void addItem(int iType, TCHAR *pItem);
            后來由于需求的變化,變成了LPVOID。改成這個以后,原先的字符串wcscpy就變成了memcpy。這個一直沒有引起警覺。其實這一步的改變,就應該對接口做相應的調整,接口應該變為
            void addItem(int iType, LPVOID *pItem, DWORD cbItem);
            增加一個參數來說明pItem的大小。然而這一步沒有做。

            所以今天的教訓就是要注意修改接口的時候,注意相應的變化。

            還有是字符串的操作問題,寬字符和ASCII字符串的操作要注意。

            posted @ 2009-07-29 11:58 Sandy 閱讀(183) | 評論 (0)編輯 收藏
            這也是《程序員面試攻略》上的一道題,題目是這樣的:
            請編寫一個函數,確定一個整數的計算機內部表示中有幾個“1”。

            思索了一下這個題目,我是這樣考慮的,也學書上給出偽代碼
            count = 0;
            while (這個整數不為0)
            {
                  如果這個整數對2求余的結果是1,則count加1;
                 將這個整數向右移移位
            }

            代碼寫出來是這樣的:
            int numOnesInBinary(int num)
            {
                
            int count = 0;
                
            while (num != 0)
                
            {
                    
            if (num % 2 == 1)
                        count
            ++;
                    num 
            = num>>1;
                }


                
            return count;
            }

            看了一下書中的答案,的確比我簡練很多。對于求余這個方法還是比較笨的。書中采用了邏輯與。

            判斷條件從“num%2 == 1”變成 “num&1 == 1”,從程序中更傾向與后者。
            所以在分析問題的時候,要學會用邏輯“與、或、異或”進行判斷。

            到這一步,看似已經很完美了。但是書中又出奇的給了另一種解法。這種想法我真的沒有想到。

            想法的出發點是考慮一個數字減1時,它的二進制發生了什么變化。減1得到的結果是,從最低位的1到最低位都發生了翻轉,其他高位保持不變。如果您對這個整數和減一后的結果進行AND操作,得到的新的數字與原來的整數相比,只有最后一個1變成0.

            如果進行多次這樣的操作,這個整數的值變為0。這樣我們也就獲得了這個數的計算機表示中“1”的個數。

            int numOnesInBinary2(int num)
            {
                
            int count = 0;
                
            while(num != 0)
                
            {
                    num 
            = num & (num-1);
                    count
            ++;
                }

                
            return count;
            }


            第一方法的時間復雜度為o(n),第二種的時間復雜度為o(m),m為1的個數。

            后記:
            最近一周多,一直在做這本書上的編程題。一天3道,自己先嘗試編寫,運行成功后再與書上的解答進行對比。稍有幾次略感比書上稍好些。但大多數情況還是效率差一些。想想原因,還是練得比較少。所以繼續努力。多多積累,養成良好的思維習慣。

            posted @ 2009-07-28 15:56 Sandy 閱讀(697) | 評論 (3)編輯 收藏
            編程無他,唯手熟爾。

            七星重劍的博客上看到的,非常贊同。
            posted @ 2009-07-28 15:11 Sandy 閱讀(239) | 評論 (0)編輯 收藏
            這是《程序員面試攻略》上的一道題,先前也有一位公司同事問過我,今天有重新拿起看了一下。

            書中介紹了兩種方法
            第一種是這樣的利用強制類型轉換
            bool endianness()
            {
                  int testNum;
                 char*  ptr;

                 testNum = 1;
                 ptr = (char*)&testNum;
                 return ptr;
            }

            這個方法還比較好理解。

            第二種方法就是利用union。
            bool endianness()
            {
                union{
                     int theInteger;
                     char singleChar;
               }endianTesg;

               endianTest.theInteger = 1;
               return endianTest.singleChar;
            }

            這種方法很巧妙。帶著困意就是沒有看懂,一個個問號就蹦出來了?這是為什么呢?

            說實話,union在學習和工作中用的還真的不是很多。其用法還真是不記得。
            所以趕快到網上去搜了一下。有篇文章還不錯,我看懂了。
            共用體union用法講解
            鏈接地址:http://blog.ednchina.com/likee/20666/message.aspx

            Union表示幾個變量公用一個內存位置, 在不同的時間保存不同的數據類型和不同長度的變量。其長度為Union中最大的變量長度。

            這樣,我們就不難理解上面的程序,theInteger和singleChar是共用一個內存位置的,如果是小尾數法的話,那么singleChar為1,對應theInteger的低八位;如果是大尾數法的話,那么singleChar為0, 對應theInteger的低八位。


            繼續努力學習!
            朝著夢想加油前進。
            posted @ 2009-07-28 15:04 Sandy 閱讀(785) | 評論 (0)編輯 收藏

            去同學那玩,看到這么一本書《C++沉思錄》。這本書很早聽過,但是沒有讀過。于是捧起書讀了幾章,感覺很是不錯。其中第四章就是講“類設計者的核查表”。雖然用c++有幾年,但是有一些東西還是需要銘記于心的。

             

            類設計者的核查表

            一、        您的類需要一個構造函數么?

            有些類太簡單,無需構造函數,但有些類太復雜,他們需要構造函數來隱藏它們的內部工作方式。

            二、           您的數據成員是私有的么?

            通常使用公有的數據成員不是什么好事,因為類設計者無法控制何時訪問這些成員。

            三、           您的類需要一個無參的構造函數么?

            如果一個類已經有了構造函數,想聲明該類的對象可以不必顯示地初始化它們,則必須顯示地寫一個無參的構造函數。

            四、           是不是每一個構造函數初始化所有的數據成員?

            構造函數的用途就是用一種明確定義的狀態來設置對象。對象的狀態由對象的數據成員進行反映。每個構造函數都要負責為所有的數據成員設置經過明確定義的值。

            有時這種說法也未必總是正確的。有時,類會有一些數據成員,它們只在它們的對象存在了一定時間之后才有意義。提這個問題,只是激勵你進行思考。

            五、           類需要構造函數么?

            不是所有有構造函數的類都需要構造函數。如果深入考慮一個類要做些什么,那么該類是否需要析構函數的問題就十分明顯了。應該問一問該類是否分配了資源,而這些資源又不會有成員函數自動釋放,這就足夠了。特別是那些構造函數里包含了new表達式的類,通常要在析構函數中加上相應的delete表達式,所以需要一個虛析構函數。

            六、        類需要一個虛析構函數么?

            有些類需要虛析構函數只是為了聲明他們的析構函數是虛的。當然,決不會用做基類的類是不需要虛析構函數的:任何虛函數只在繼承的情況下才有用。

            虛析構函數通常是空的。

            七、           你的類需要復制構造函數么?

            很多時候答案都是“不”,但是有時候答案是“是”。關鍵在于復制該類對象是否就相當于復制其數據成員和基類對象。如果并不相當,就需要復制構造函數。

            如果你的類在構造函數內分配資源,則可能需要一個顯示的復制構造函數來管理資源。有析構函數的類通常是析構函數來釋放構造函數分配的資源,這通常說明需要一個復制構造函數。(空的虛析構函數除外)

            如果不想用戶能夠復制該類的對象,就聲明復制構造函數為私有的。如果其他的成員不會使用這些成員函數,聲明就足夠了,沒有必要定義它們。

            八、           你的類需要一個賦值操作么?

            如果需要復制構造函數,同理多半也會需要一個賦值操作。

            九、           你的賦值操作符能正確地將對象賦給對象本身么?

            賦值總是用新值取代目標對象的舊值。如果原對象和目標對象是同一個,而我們又奉行“先釋放舊值,再復制”的行事規程,那么就可能在還沒有實施復制之前就把原對象銷毀了。

            十、           你的類需要定義關系操作符么?

            如果你的類邏輯上支持相等操作,那么提供operate== operate!=可能會有好處。類似的,如果你的類的值有某種排序關系,那就可能會想提供余下的關系操作符。只要它們想創建你的類型的有序集合,你就必須提供關系操作符。

            十一  刪除數組時你記住了用delete[]么?

            這個形式的存在,是C++希望在保持與C的兼容性的同時關注效率。C++要求用戶告知要被刪除的是不是數組。如果是,該實現就可能會提供另一個地方來存儲長度,因為與數組所需的內存量相比,這個常數的開銷會小很多。

            十二   記得在復制構造函數和賦值操作符的參數類型中加上了const么?

            復制構造函數應該是像X::X(const X&)這樣,畢竟復制對象不會改變原對象。實際上,由于綁定一個非const引用到一個臨時對象是非法的,使用X::X(X&)作為復制構造函數不會允許復制任何特殊表達式的結果。同樣道理適用于賦值。

            十三   如果函數有引用參數,它們應該是const引用么?

            只有當函數想改變參數時,它才應該有不用const聲明的引用參數。

             

               其中很多作者提到,提這些問題并不是希望去尋求答案,只是希望能夠激勵你進行思考。所以當我們設計一個類的時候,多思考一下,有沒有什么地方需要注意的,我們設計的類將會更合理,更健壯一些。
            posted @ 2009-07-25 08:32 Sandy 閱讀(285) | 評論 (0)編輯 收藏

            今天抱著書在做這么一道題:
            整數/字符串轉換
            編寫兩個轉換例程。第一個例程將一個字符串轉換成帶符號的整數。您可以假定這個字符串只包含數字和符號字符('-'),是一個格式正確的整數,而且這個數字在int類型的范圍之內。第二個例程將Int類型中存儲的有符號整數轉換回字符串。

            其中碰到了int與char的轉換問題。這個還真的把我難住了。我先用最笨的方法switch進行了轉換。你也知道這肯定不是最優的方法。直接轉換,值也肯定不對。

            后來發現竟然是這么使用的,趕快記錄下來。
            1、int 轉換成char
                  例如:
                            int  n = 1;
                            char ch = char(n + '0');
                            不過需要注意,此處的n只能是0-9之間的字符
            2、char轉換成Int
                            char ch = '9';
                             int n = int(ch) - int('0');
                              此處ch也是‘0’至‘9’的數字字符

            多多學習,抓住機遇。

            posted @ 2009-07-24 17:45 Sandy 閱讀(2567) | 評論 (0)編輯 收藏

            快捷方式的讀取和創建

            一、快捷方式的獲取

            SHGetShortcutTarget

            功能:

            獲取快捷方式的目標路徑

            原型:

            BOOL SHGetShortcutTarget(

              LPTSTR szShortcut,

              LPTSTR szTarget,

              int cbMax

            );

            參數:

            szShortcut :包含快捷方式名字的字符串

            szTarget :包含快捷方式目標路徑的字符串, 字符串的大小至少是cbMax

            cbMax :將被拷貝到緩存szTarget的最大字符串

            返回值:

            成功返回TRUE,否則返回FALSE

            示例代碼:

            TCHAR StartMenuFilePath[MAX_PATH];
            ::SHGetSpecialFolderPath(NULL, StartMenuFilePath, CSIDL_PROGRAMS, FALSE);
            TCHAR szShortPath[MAX_PATH];
            wsprintf(szShortPath, _T("%s\\%s"), StartMenuFilePath, _T("搜索.lnk"));
            TCHAR szFilePath[MAX_PATH];
            :SHGetShortcutTarget(szShortPath, szFilePath, sizeof(szFilePath));

            執行完畢后,
            szFilePath 的值為shfind.exe

            二、快捷方式的創建

            SHCreateShortcut

            功能:

            創建快捷方式。

            原型:

            DWORD WINAPI SHCreateShortcut(

              LPTSTR szShortcut,

              LPTSTR szTarget

            );

            參數:

            szShortcut :包含快捷方式名字和路徑的字符串。在路徑指定的位置創建快捷方式。

            szTarget 包含快捷方式目標路徑和參數的字符串。大小限定在256個字符以內。

            返回值:

            成功返回TRUE,否則返回FALSE。如果指定的快捷方式已經存在的話將返回FALSE

            示例代碼:

            SHCreateShortcut(_T("\\搜索.lnk"), _T("shfind.exe"));
            執行結果為在根目錄下創建了“搜索.lnk”這個快捷方式文件。

            三、補充說明

            這里主要針對獲取快捷方式的內容進行幾點說明:

            我們獲取快捷方式的時候,內容不一定只包含路徑,有可能存在一下的情況,如:

            1、路徑后跟隨名稱

            \Windows\“開始”菜單\程序\任務.lnk

            2、縮寫名

            poutlook.exe tasks

            \Windows\“開始”菜單\程序\ActiveSync.lnk

            :MSSYNCAPP

            3、路徑后跟隨數字

            \Windows\“開始”菜單\程序\游戲\icon.lnk

            shellres.dll,-8229

            考慮以上這幾種情況,我們在獲取快捷方式路徑時,需要對路徑做一些特殊處理。這里重點說一下第二種情況,這個縮寫代表什么意思?在網上搜索了一下,原來我們可以在[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Rai\]鍵值下找到名為:MSSYNCAPP的子鍵,鍵值為1的子鍵數值指明了名為:MSSYNCAPP的程序名稱。但我們從這里獲得的值,有時也不是路徑,還會再次出現上述三種情況。所以,如果我們想從快捷方式中獲取路徑的話,就需要留意一些了。

            至于為什么會這樣,我還不是很明白。

            posted @ 2009-07-23 18:13 Sandy 閱讀(1632) | 評論 (1)編輯 收藏
            僅列出標題
            共15頁: 1 2 3 4 5 6 7 8 9 Last 
            久久久久亚洲AV成人网人人网站| 久久精品国产亚洲AV久| 亚洲AV无码一区东京热久久| 久久99精品久久久久久动态图 | 久久久女人与动物群交毛片| 欧美噜噜久久久XXX| 日韩中文久久| 色欲综合久久中文字幕网| 久久国产精品-国产精品| 欧美激情精品久久久久久| 亚洲精品乱码久久久久久按摩| 91精品国产91久久综合| 无码任你躁久久久久久久| 成人综合伊人五月婷久久| 久久免费视频一区| avtt天堂网久久精品| 思思久久99热只有频精品66| 久久综合综合久久狠狠狠97色88| 热久久视久久精品18| 热久久这里只有精品| 亚洲国产精品无码久久一线| 久久精品无码av| 91精品国产91热久久久久福利| 亚洲精品国产美女久久久| 亚洲国产成人久久综合野外| 99久久精品九九亚洲精品| 久久精品无码一区二区无码| 波多野结衣久久一区二区| 欧美久久一区二区三区| 国产成人香蕉久久久久| 久久香蕉一级毛片| 久久久av波多野一区二区| 久久精品aⅴ无码中文字字幕不卡| 久久久久人妻一区精品果冻| 亚洲国产精品久久| 99久久成人18免费网站| 伊人热人久久中文字幕| 国产精品免费久久久久影院| 国产精品无码久久久久| 精品无码久久久久久久动漫| 激情五月综合综合久久69|