• <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>

            陋居

            淡薄名利,修身養(yǎng)性

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              31 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

            常用鏈接

            留言簿

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            #

            好書列表 V2.1
            jacinth(jacinth@m2-68.ym.edu.tw)
            2000-1-14 16:09:40


            書評(píng)內(nèi)容
                
                                 
             蔣按:這是臺(tái)灣一名研究生的推薦 書目,看起來(lái)很不錯(cuò),不過(guò)很多書我都沒(méi)有見(jiàn)過(guò), 
                   國(guó)內(nèi)買原版書太難了,而且也太貴了!
                   如果你有心目中的好 書,不妨也發(fā)言吧!

            ===============================================================================
            1) 本 列表乃個(gè)人涉獵范圍內(nèi)所列的書目,所以在其他很多topic上并沒(méi)有整理,目前整理
               出來(lái)的書目,分為以下主題:

                ==& gt;系統(tǒng)網(wǎng)路管理(含系統(tǒng)安全)  程式系統(tǒng)工具  Shell程式設(shè)計(jì)
                ==>作業(yè)系統(tǒng)通論  COMPILER  Unix作 業(yè)系統(tǒng)
                ==>系統(tǒng)網(wǎng)路程式設(shè)計(jì)(含Pthread)
                ==>程式語(yǔ) 言: C  C++  Perl  Assembly
                ==>Data-structure  Algorithm
                ==>Architecture

            2) 有 網(wǎng)友問(wèn)說(shuō)為什麼不把全部的相關(guān)書籍都列出來(lái),嗯,有幾個(gè)原因啦....
               一是真的書太多了,全部列出來(lái)的結(jié)果是: 我會(huì)累死
               二 是我希望列出來(lái)的書單內(nèi)的東西基本上都是我涉獵過(guò)的,或是網(wǎng)友推薦的(我會(huì)注明)
               而不希望把全部的書都列出來(lái)。若全列出來(lái),結(jié)果會(huì)不知道誰(shuí) 好誰(shuí)不好。當(dāng)然憑我一已
               所學(xué)要來(lái)要求這份文件的完整性是太勉強(qiáng)了點(diǎn),因能力實(shí)在有限,關(guān)於這個(gè)問(wèn)題就只好
               祈盼網(wǎng)友們的不吝指 教了

            3) 會(huì)想整理這份文件是因?yàn)楫?dāng)初學(xué)弟妹們?cè)趩?wèn)要入門unix要看什麼書較好,而剛好那時(shí)又
               沒(méi)事,就順手整理了一份起 來(lái)。後來(lái)看到滿多人在網(wǎng)路上問(wèn)這方面的問(wèn)題,心想乾脆就
               把整理出來(lái)的東西再美化一下,再加上一些網(wǎng)路上大家介紹的書......最後就成了 這份
               小小的文件。

               謝謝很多網(wǎng)友在我前幾次post後給我的建議,還有你們推薦的書,讓這份文件不至成為
               只 有我這只井底之蛙知道的東西......

               我想這份文件應(yīng)該能給一些人幫助,畢竟所列的書都是那些topic 上數(shù)一數(shù)二的好書。
               為 了方便使用,我以個(gè)人的學(xué)習(xí)經(jīng)驗(yàn),為它們粗做分類,再加上一點(diǎn)點(diǎn)個(gè)人的看法,像
               它是入門書或是進(jìn)階書,它適合什麼等。

               今 後將以大概一個(gè)月一次的速度對(duì)這份文件做修改,并post出來(lái)

            4) 若您有任何好書想和大家分享,可直接reply在版上或是mail給 我,我會(huì)在下次整理時(shí)
               把它們加進(jìn)去。若對(duì)內(nèi)容有任何不滿,也煩請(qǐng)來(lái)信告知,有勞了.....謝謝

                                                                 by jacinth
                                        jacinth@m2-68.ym.edu.tw

            ===============================================================================
            以 下為網(wǎng)路上眾網(wǎng)友推薦的網(wǎng)路書局....(抱歉,私自放入....)

            www.a1books.com
            www.acses.com
            以 上兩者為用來(lái)比較各家網(wǎng)路書局售價(jià)用的網(wǎng)站

            www.addall.com
            www.amazon.com
            www.barnesandnoble.com
            www.bookpool.com
            www.cbooks.com
            www.clbooks.com
            www.computerliteracy.com

            ===============================================================================
            【系 統(tǒng),網(wǎng)路管理】
            1) Learning the Unix Operating System              

            1565923901 O'reilly/1997-4ed
                    *** 強(qiáng)力推薦給想入門unix的網(wǎng)友們!!
                       就只有薄薄的不到100頁(yè),在書局偶然發(fā)現(xiàn)....深覺(jué)其內(nèi)容適合初學(xué)者
                       相 信只要讀它,一個(gè)下午就可以了解基本UNIX的操作!!


            2) Unix : Visual Quickstart Guide          

            0201353954 A-W/1998-1ed
                *** 強(qiáng)力推薦給想入門unix的網(wǎng)友們!!
                   比上面那本大了點(diǎn),也是寫的很淺顯易懂,大概一兩天就是對(duì)unix有基本的
                   認(rèn) 識(shí)!!
            3) Essential System Administration:                

            1565921275 O'reilly/1996-2ed
                    Help for Unix System Administrators
                    *** 網(wǎng)友推薦,unix入門書....


            4) TCP/IP Network Administration                   

            1565923227 O'reilly/1998-2ed
                    *** 網(wǎng)管入門書,一開(kāi)始網(wǎng)路的概念介紹得棒!!

            5) Unix system administration handbook             

            0131510517  PTH/1995-2ed
                    *** 網(wǎng)路上昵稱其為"紅皮書",系統(tǒng),網(wǎng)路都說(shuō)的十分詳細(xì),無(wú)可挑惕!!
                       進(jìn)階用書,不適合初學(xué)者

            6) Sendmail                                        

            1565922220 O'reilly/1997-2ed
                    *** 十分詳細(xì),且平易近人,是這個(gè)主題的bible(我覺(jué)得啦)


            7) DNS and BIND                                    

            1565925122 O'reilly/1998-3ed
                *** 這一版加入了BIND 8與Perl module


            1) The complete FreeBSD                            

            1517162272 Walnut/1998-3ed
                    *** 最新版出來(lái)了(for 3.0)!!但臺(tái)灣還只看得到for 2.2.7的版本....另外,
                   我覺(jué)得handbook更好....


            1) A Practical Guide to Linux                      

            0201895498 A-W/1997-1ed
                    *** (A Practical Guide to UNIX的再版)
                       Linus寫序提到, 他當(dāng)初就是用這本書學(xué) Unix, 沒(méi)想到七年後很榮幸的為
                       作者寫序.

            2) Running Linux                                   

            O'Reilly/1999-3ed


            3) Linux Network Administrator's Guide             

            O'Reilly/1999-2ed
            *** 新版書出來(lái)羅!!只是我沒(méi)有找到它們的ISBN碼,請(qǐng)各位們行到書局找
                   都是1999年出的就是了(2和3)
            ===> LINUX的書好多喔!!而我又很久沒(méi)玩了,所以沒(méi)法提供更多的書目。以上三本書乃
                LINUX各部分較具代表性的高水準(zhǔn)作品,希望有研究 的網(wǎng)友提供更多更好的書目,
                讓大家飽飽眼福!!


            1) Solaris System Administrator's Guide            

            157870040X Macmillan/1998-2ed


            2) Solaris Advanced System Administrator's Guide   

            1578700396 Macmillan/1998-2ed


            3) Solaris Performance Administration :            

            0070117683 McGraw/1998-1ed
                    Performance Measurement, Fine Tuning, and Capacity Planning for
                    Releases 2.5.1 and 2.6 Solaris Servers
                    *** 以上三本書為網(wǎng)友所提供。但amazon上對(duì)第二本的評(píng)價(jià)差到極點(diǎn),大家叁考
                       看看。小弟學(xué)習(xí)時(shí)深覺(jué)其隨機(jī)附的manual 十分的精彩,十分的棒,有那份
                       manual就十分足夠了


            4) Sun Performance and Tuning:Java and Internet    

            0130952494 PTH/1998-2ed
                *** 網(wǎng)友fjchang推薦!!評(píng)語(yǔ):
                   市面上所有針對(duì) UNIX performance tuning 的書中,以這一本 對(duì) Solaris
                   寫得最深入,風(fēng)評(píng)絕非上述第三本可比擬


            5) Configuration and Capacity Planning for Solaris 

            0133499529 PTH/1997-1ed
                Servers
                *** 網(wǎng)友fjchang推薦!!評(píng)語(yǔ):
                   此書幾乎沒(méi)有任何 UNIX 指令出現(xiàn),但卻是一本硬書,提到許多規(guī)劃方面
                   應(yīng) 注意的事項(xiàng)。本書對(duì) Storage System 描寫之詳盡,無(wú)任何書可匹敵,
                   書評(píng)均認(rèn)為此處乃本書最成功之處,單單這個(gè)部分 就值回整本書價(jià)了。上
                   一本書作者 Adrian 受本書作者之薰陶與影響甚深。

            【系統(tǒng)安全】
            1) maximum Security:A hacker's guide to            

            0672313413 Sams/1998-2ed
                    protecting your internet site and network


            2) Cracking Des : Secrets of Encryption            

            1565925203 O'reilly/1998-1ed
                    Research, Wiretap Politics & Chip Design


            3) Practical Unix and Internet Security            

            1565921488 O'reilly/1996-2ed


            4) Building Internet Firewalls             

            1565921240 O'reilly/1995-1ed
            ===& gt;基本上....網(wǎng)路是最大也是最好的一本書....

            【Shell 程式設(shè)計(jì)】
            1) UNIX SHELLS by example                          

            0134608666 PTH/1998-1ed
                    *** 錯(cuò)誤頗多,但卻是一本好的shell programming入門書
            ===>對(duì)於shell programming,其實(shí)很多介紹 unix的書上面都會(huì)有簡(jiǎn)單的介紹,但完全討論
                這個(gè)主題的好像只有這本。它另外還有教awk,grep,sed,都很詳細(xì)

            【程 式&系統(tǒng)工具】
            1) managing projects with make                     

            0937175900 O'reilly/1993-2ed
                    *** 對(duì)make有詳細(xì)的說(shuō)明


            2) programming with GUN SOFTWARE                   

            1565921127 O'reilly/1997-1ed
                    *** 個(gè)人強(qiáng)力推薦!!教你用emacs,gcc,gdb,gmake....


            3) UNIX power tools                                

            1565922603 O'reilly/1997-2ed
                    *** 網(wǎng)友推薦,有很多的實(shí)用技巧.....

            【作業(yè)系統(tǒng)通論】
            1) Operating System concepts                       

            0201591138 A-W/1997-5ed
                    *** 大學(xué)教科書(operating system),俗稱"恐龍書"。很棒的作業(yè)系統(tǒng)入門書


            2) Modern operating system                         

            9813076623 PTH/1996-2ed
                    *** 大學(xué)教科書,配合恐龍書服用,效果加倍


            3) Operating systems design and implememtation     

            0136301959 PTH/1997-2ed
                    *** 大學(xué)教科書(advanced operating system)
                       教你寫一個(gè)完整的OS(Minix),不含網(wǎng)路系統(tǒng)


            4) Distributed Operating systems                   
            0131439340 PTH/1995-2ed

            【Data structure and algorithm】
            1) Fundamemtals of DATA STRUCTURES IN C        

            0716782502 CS/1993-1ed(?)
                *** 大學(xué)教科書(data structure),另有PASCAL,C++版本
              //蔣按:有大陸版


            2) Introduction to algorithms              

            0262031418 MIT/1990-1ed
                *** 大學(xué)教科書(algorithm)


            3) Computer Algorithms/C++             

            0716783150 CS/1996-1ed
                *** 大學(xué)教科書(algorithm),另有PASCAL版本。
                   不必我說(shuō),IA和CA兩本都是超棒的!!都拿來(lái)讀讀,多讀幾 次......
                   閱讀順序由個(gè)人選擇。我選CA->IA
              //蔣按:有大陸版


            4) The Art of Computer Programming (Vol 1):    

            0201896834 A-W/1997-3ed
                Fundamental Algorithms


            5) The Art of Computer Programming (Vol 2):        

            0201896842 A-W/1997-3ed
                Seminumerical Algorithms


            6) The Art of Computer Programming (Vol 3):        

            0201896850 A-W/1998-2ed
                Sorting and Searching
                *** 以上三本....我不必介紹了吧??(好想找時(shí)間完整的研究一次....)


            7) Distributed Algorithms              

            1558603484 M-K/1997-1ed
                *** 還沒(méi)玩完,但只想說(shuō): 真的好棒!!

            【Unix】
            1) Unix internals -the new frontiers               

            0131019082 PTH/1996-1ed
                    *** 深入U(xiǎn)NIX.....進(jìn)階用書(SVR4 BSD都有討論)


            2) 4.4 BSD Operating System                        

            0201549794 A-W/1996-2ed
                    *** 同上,但以4.4BSD為主題


            3) The Magic Garden Explained : The                

            0130981389 PTH/1994-1ed
                    Internals of Unix System V Release 4 : An Open Systems Design
                    *** 同上,但以SVR4為主題。臺(tái)灣沒(méi)有書,我是向國(guó)外訂的
                       (聽(tīng)說(shuō)臺(tái)大圖書館有喔~~~)


            4) The Design of the UNIX operating system         

            0132017997 PTH/1986-1ed
                    *** 同上,BACH著,很多教科書都指名它為reference....


            5) Lions' Commentary on Unix : With Source Code    

            1573980137 P-t-P/1996-6th


            6) Unix Internals : A Practical Approach           

            020187721X A-W/1996-1ed


            7) Unix Systems for Modern Architecture            

            0201633388 A-W/1994-1ed
                    : Symmetric Multiprocesssing and Caching for Kernel Programmers


            8) The Linux Kernel Book                           

            0471981419 Wiley/1998-1ed
                *** 我覺(jué)得翻譯得怪怪的(因?yàn)樗怯蓜e國(guó)語(yǔ)言翻成英文)....
                   最好先對(duì)kernel有多些概念再讀會(huì)較好....


            9) Linux Kernel Internals                          

            0201331438 A-W/1997-2ed
                    *** 討論linux kernel的書,恐龍書上在linux部分的reference,個(gè)人推薦


            10)Linux Device Drivers                

            1565922921 O'reilly/1998-1ed
                *** 網(wǎng)友推薦,作者是來(lái)自義大利的駭客....

            【系統(tǒng),網(wǎng)路程式設(shè)計(jì)】
            1) Advanced programming in the UNIX environment    

            0201563177 A-W/1992-1ed
                    ***Richard Steven 所著,十分適合對(duì)系統(tǒng),C有基礎(chǔ)的人,亦是一本好的manual


            2) UNIX systems programming(for SVR4)              

            1565921631 O'relly/1997-1ed
                    *** 網(wǎng)路上評(píng)語(yǔ)為其討論內(nèi)容過(guò)雜,但我覺(jué)得滿適合拿來(lái)當(dāng)reference


            3) internetworking with TCP/IP vol 1:              

            0132169878 PTH/1995-3ed
                    Principles, Protocols, and Architecture


            4) internetworking with TCP/IP vol 2:              

            0130102210 PTH/1999-3ed
                    design,implementation and internals


            5) internetworking with TCP/IP vol 3:              

            0132621487 PTH/1996-2ed
                    client-server programming and application
                    *** 以上三本乃comer所著,屬bible級(jí)讀物。為大學(xué)教科書.....
                   vol1講TCPIP的原理,vol2講TCPIP的 implementation,vol3講APP的寫作
                   另外vol3分成三個(gè)版本,分別為 BSDsockets,winsock,TLI


            6) TCP/IP illustrated vol 1                        0201633469 A-W/1994-1ed
            7) TCP/IP illustrated vol 2                        020163354x A-W/1995-1ed
            8) TCP/IP illustrated vol 3                        0201634953 A-W/1996-1ed
                    *** 以上三本乃Richard Steven所著,影響小弟甚深,bible級(jí)讀物。
                       vol1講TCPIP的原理,vol2講 TCPIP的implementation,vol3講APP的寫作


            9) UNIX network programming                        

            9813026537 PTH/1994-1ed


            10)UNIX network programming                        

            0136493289 PTH/1998-2ed
                    vol 1:networking API:Sockets and XTI
                    *** 以上兩本亦為Richard Steven所著,第一本為第一版,小弟無(wú)緣
                       第二本為第二版,強(qiáng)力推薦!!


            11)UNIX network Programming                        

            0130810819 PTH/1998-2ed
                    vol 2: Interprocess Communications
                    *** 以IPC為主題,覺(jué)得"雜"了點(diǎn)....但不失為一代宗師之作


            12)Programming With Curses             

            0937175021 O'reilly/1986-1ed
                *** 講unix下curses函式庫(kù),若你要控制terminal,很好的叁考書


            13)Thread Time:The Multithreaded Programming Guide 

            0131900676 PTH/1996-1ed


            14)Multithreaded Programming With Pthreads     

            0136807291 PTH/1997-1ed


            15)Programming With Posix Threads          

            0201633922 A-W/1997-1ed


            16)Programming With Threads            

            0131723898 PTH/1995-1ed


            17)Pthreads Programming                

            1565921151 O'reilly/1996-1ed
                *** 以上五本書都是以pthread為主題,個(gè)人推薦(14)(16),其他的也很不錯(cuò),只是
                   我沒(méi)細(xì)讀,不很清楚....

            【程 式語(yǔ)言:C】

            1) C : How to Program                              

            0132261197 PTH/1994-2ed
                    *** 教科書,初學(xué)C語(yǔ)言可考慮


            2) the c progamming language                       

            0131103628 PTH/1988-2ed
                    ***K&R 所著,乃C之bible中的bible,為c programmer 必讀之書藉。
                       惟不適合初學(xué)者,進(jìn)階用書


            3) The C Answer Book                   

            0131096532 PTH/1988-2ed
                ***K&R 的解答本....好貴:<....所以不買了....:)


            4) C: The Complete Reference               

            0078821010 McGraw/1995-3ed
                *** 評(píng)價(jià)直逼K&R的一本好書....可能也不適合初學(xué)者(我沒(méi)看過(guò))

            【程式語(yǔ)言:C++】

            1) C++ primer                                      

            0201824701 A-W/1998-3ed
                    *** 一本十分適合初學(xué)者拿來(lái)學(xué)習(xí)的書....
                   以下為候捷老師的評(píng)語(yǔ):
                   在「C++ 百科」類書中, 與 The C++ Programming Language 齊名,
                   親和性較佳。老字號(hào),有口碑。副作 者 Josee Lajoie 是 ANSI/ISO
                   C++ Standard 委員會(huì)的核心語(yǔ)言工作小組主席,因此本書在與
                   C++ Standard 的 密合度上,當(dāng)可令人放心。


            2) the C++ programming language                    

            0201889544 A-W/1998-3ed
                    *** 以下為候捷候老師評(píng)語(yǔ):
                   屬「C++ 百科」級(jí)的書。此書可謂 C++ 原典,具權(quán)威性,由 C++ 之父
                   所 著。連 ANSI C++ 制定時(shí)都得叁考此書。不論是內(nèi)容深度或文字風(fēng)格,
                   都不適合生手,但很適合做為進(jìn)階研究或叁考查閱壯膽之 用。原文書之
                   code 編排令我感到不舒服,行文之間學(xué)院派的味道頗重。本書為與
                   C++ Standard 相 映合,有份量極重之 errata,務(wù)請(qǐng)讀者上網(wǎng)下載。


            3) Thinking in C++                 

            0139177094 PTH/1995-1ed
                *** 以下為候捷候老師評(píng)語(yǔ):
                   也屬「C++ 百科」類書。口碑甚佳,唯目錄所列頁(yè)次與實(shí)際頁(yè)次 offset 4
                   1/e 年 代過(guò)於陳舊,當(dāng)此 C++ Standard 已定案之際,應(yīng)屬過(guò)時(shí)。
                   ps.第二版將不會(huì)有以上現(xiàn)象,但還未完書
              // 蔣按:大陸版有Thinking in Java

            4) C++ Standard                    

            抱 歉我查不到資料....
                ***以下為候捷候老師評(píng)語(yǔ):
                   醉心學(xué)術(shù)以及喜歡看 definition 的人,一定會(huì)喜 歡。有此資料在手,
                   與人爭(zhēng)辯 C++ 時(shí)可使用最大的膽子和最大的分貝。電子版(PDF 格式)
                   可 於 http://webstore.ansi.org/ 購(gòu)得,US$ 18.0。列印出來(lái)裝訂得
                   美美的,擺在架上足以唬人。


            5) Effective C++, 2nd Edition:             

            0201924889 A-W/1998-2ed
                50 Specific Ways to Improve Your Programs and Designs
                *** 以下為候捷候老師評(píng)語(yǔ):
                   以條列方式列出 50 條寶貴的程式經(jīng)驗(yàn)。每一條均有深入的原理說(shuō)明。
                   適合 有 C++ programming 經(jīng)驗(yàn)者。
              //蔣按:有大陸版

            6) More Effective C++:                 

            020163371x A-W/1996-1ed
                35 More Ways to Improve Your Programs and Designs
                *** 以下為候捷候老師評(píng)語(yǔ):
                   以條列方式列出 35 條寶貴的程式經(jīng)驗(yàn)。每一條均有深入的原理說(shuō)明。
                   適合 有 C++ programming 經(jīng)驗(yàn)者。


            7) Inside the C++ Object Model                 

            0201834545 A-W/1996-1ed
                *** 以下為候捷候老師評(píng)語(yǔ):
                   適合給已有 C++ 經(jīng)驗(yàn)的人閱讀??蔀槟阍?nbsp;C++ 內(nèi)部機(jī)制的深厚基礎(chǔ)。
                   原文 書筆誤極多(100 個(gè)以上,大大小小),影響閱讀甚巨,建議讀中譯
                   本。對(duì)大部份人而言,chap3,4 可帶來(lái)最大邊際效益。


            8) The Design and Evolution of C++                 

            0201543303 A-W/1994-1ed


            9) The Annotated C++ Reference Manual              

            0201514591 A-W/1990-1ed


            10)Advanced C++ Programming Styles and Idioms      

            0201548550 A-W/1991-1ed


            11)C++ Programming Style                           

            0201563657 A-W/1992-1ed


            12)C++ Strategies and Tactics                      

            0201563827 A-W/1993-1ed
                    *** 以上五本書為網(wǎng)友推薦,都算是進(jìn)階用書

            【程式語(yǔ)言:perl】


            1) Learning Perl                   

            1565922840 O'reilly/1997-2ed
                *** 最易上手的入門書,有程式基礎(chǔ)的人三天內(nèi)就可學(xué)到一些東西(親身經(jīng)驗(yàn)....)


            2) Programming Perl                

            1565921496 O'reilly/1996-2ed
                ***Perl's father 親 手寫的書,若先看過(guò)(1),會(huì)很快吸收


            3) Advanced Perl Programming               

            1565922204 O'reilly/1997-1ed


            4) The Perl Cookbook                   

            1565922433 O'reilly/1998-1ed


            5) Web Client Programming with Perl        

            156592214X O'reilly/1997-1ed


            6) Perl Resource Kit-Unix Edition          

            1565923707 O'reilly/1997-1ed


            7) Learning Perl/Tk                

            1565923146 O'reilly/1999-1ed

            【程 式語(yǔ)言:Assembly】

            1) IBM PC Assembly Language and Programming        

            0137566107 PTH/1997-4ed
                *** 初學(xué)用書....

            【Computer Architecture】

            1) Computer Organization and Design :              

            1558604286 Morgan/1997-2ed
                    The Hardware/Software Interface
                *** 大學(xué)教科書(計(jì)算機(jī)組織),這個(gè)topic的入門書


            2) Computer Architecture :                         

            1558603298 Morgan/1996-2ed
                    A Quantitative Approach
                *** 大學(xué)教科書(計(jì)算機(jī)組織),這個(gè)topic的入門書


            3) Computer Architecture : 

            Concepts and Evolution  0201105578 A-W/1997-1ed

            【compiler】
            1) Crafting a Compiler With C              

            0805321667 A-W/1991-1ed
                *** 大學(xué)教科書(compiler)


            2) Compilers Principles, Techniques, and tools     

            0201100886 A-W/1986-1ed
                *** 大學(xué)教科書(compiler),個(gè)人推薦!!因?yàn)槲矣盟鼘W(xué)的:>

            posted @ 2010-09-17 08:26 eircQ 閱讀(518) | 評(píng)論 (0)編輯 收藏

            一位軟件工程師的6年總結(jié)

             

            --------------------------------------------------------------------------------

             

            2007-10-29 21:47:12 標(biāo)簽:程序人生   [推送到技術(shù)圈]

             

             

             一位軟件工程師的6年總結(jié)     

             

             

            作者:成曉旭

             

            (聲明:歡迎轉(zhuǎn)載,請(qǐng)保證文章的完整性)

             

            “又是一年畢 業(yè)時(shí)”,看到 一批批學(xué)子離開(kāi)人生的象牙塔,走上各自的工作崗位;想想自己也曾經(jīng)意氣風(fēng)發(fā)、躊躇滿志,不覺(jué)感嘆萬(wàn)千……本文是自己工作6年的經(jīng)歷沉淀或者經(jīng)驗(yàn)提煉,希望對(duì)所有的軟件工程師們有所幫助,早日實(shí)現(xiàn)自己的人生目標(biāo)。本文主要是關(guān)于軟件開(kāi)發(fā)人員如何提高自己的軟件專業(yè)技術(shù)方面的具體建議,前面幾點(diǎn)旨在確定大的方向,算是廢話吧。

             

            謹(jǐn)以此文獻(xiàn)給那個(gè)自己為你奉獻(xiàn)3年青春與激情的開(kāi)發(fā)團(tuán)隊(duì)。還有團(tuán)隊(duì)成員:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。

             

            1、 分享第一條經(jīng) 驗(yàn):“學(xué)歷代表過(guò)去、能力代表現(xiàn)在、學(xué)習(xí)力代表未來(lái)。”其實(shí)這是一個(gè)來(lái)自國(guó)外教育領(lǐng)域的一個(gè)研究結(jié)果。相信工作過(guò)幾年、十幾年的朋友對(duì)這個(gè)道理有些體會(huì)吧。但我相信這一點(diǎn)也很重要:“重要的道理明白太晚將抱憾終生!”所以放在每一條,讓剛剛畢業(yè)的朋友們?cè)琰c(diǎn)看到哈!

             

            2、 一定要確定自己的發(fā)展方向,并為此目的制定可行的計(jì)劃。不要說(shuō)什么,“我剛畢業(yè),還不知道將來(lái)可能做什么?”,“跟著感覺(jué)走,先做做看”。因?yàn)?,這樣的觀點(diǎn)會(huì)通過(guò)你的潛意識(shí)去暗示你的行為無(wú)所事事、碌碌無(wú)為。一直做技術(shù),將來(lái)成為專家級(jí)人物?向管理方向走,成為職業(yè)經(jīng)理人?先熟悉行業(yè)和領(lǐng)域,將來(lái)自立門戶?還是先在行業(yè)里面混混,過(guò)幾年轉(zhuǎn)行做點(diǎn)別的?這很重要,它將決定你近幾年、十年內(nèi)“做什么事情才是在做正確的事情!”。

             

            3、 軟件開(kāi)發(fā)團(tuán)隊(duì)中,技術(shù)不是萬(wàn)能的,但沒(méi)有技術(shù)是萬(wàn)萬(wàn)不能的!在技術(shù)型團(tuán)隊(duì)中,技術(shù)與人品同等重要,當(dāng)然長(zhǎng)相也比較重要哈,尤其在MM比較多的團(tuán)隊(duì)中。在軟件項(xiàng)目團(tuán)隊(duì)中,技術(shù)水平是受人重視和尊重的重要砝碼。無(wú)論你是做管理、系統(tǒng)分析、設(shè)計(jì)、編碼,還是產(chǎn)品管理、測(cè)試、文檔、實(shí)施、維護(hù),多少你都要有技術(shù)基礎(chǔ)。算我孤陋寡聞,我還真沒(méi)有親眼看到過(guò)一個(gè)外行帶領(lǐng)一個(gè)軟件開(kāi)發(fā)團(tuán)隊(duì)成功地完成過(guò)軟件開(kāi)發(fā)項(xiàng)目,哪怕就一個(gè),也沒(méi)有看到。倒是曾經(jīng)看到過(guò)一個(gè)“高學(xué)歷的牛人”(非技術(shù)型)帶一堆人做完過(guò)一個(gè)項(xiàng)目,項(xiàng)目交付的第二天,項(xiàng)目組成員扔下一句“再也受不了啦!”四分五裂、各 奔東西。那個(gè)項(xiàng)目的“成功度”大家可想而知了。

             

            4、 詳 細(xì)制定自己軟件開(kāi)發(fā)專業(yè)知識(shí)學(xué)習(xí)計(jì)劃,并注意及時(shí)修正和調(diào)整(軟件開(kāi)發(fā)技術(shù)變化實(shí)在太快)。請(qǐng)牢記:“如果一個(gè)軟件開(kāi)發(fā)人員在1、2年內(nèi)都沒(méi)有更新過(guò)自己的知識(shí),那么,其實(shí)他已經(jīng)不再屬于這個(gè)行業(yè)了。”不要告訴自己沒(méi)有時(shí)間。來(lái)自時(shí)間管理領(lǐng)域的著名的“三八原則”告誡我們:另外的那8小時(shí)如何使用將決定你的人生成敗!本人自畢業(yè)以來(lái),平均每天實(shí)際學(xué)習(xí)時(shí)間超過(guò)2小時(shí)。

             

            5、 書籍是人類進(jìn)步的階梯,對(duì)軟件開(kāi)發(fā)人員尤其如此。書籍是學(xué)習(xí)知識(shí)的最有效途徑,不要過(guò)多地指望在工作中能遇到“世外高人”,并 不厭其煩地教你。對(duì)于花錢買書,我個(gè)人經(jīng)驗(yàn)是:千萬(wàn)別買國(guó)內(nèi)那幫人出的書!我買的那些家伙出的書,!00%全部后悔了,無(wú)一本例外。更氣憤的是,這些書在二手市場(chǎng)的地?cái)偵隙己茈y賣掉。“擁有書籍并不表示擁有知識(shí);擁有知識(shí)并不表示擁有技能;擁有技能并不表示擁有文化;擁有文化并不表示擁有智慧。”只有將書本變成的自己智慧,才算是真正擁有了它。

             

            6、 不要僅局限于對(duì)某項(xiàng)技術(shù)的表面使用上,哪怕你只是偶爾用一、二次。“對(duì)任何事物不究就里”是任何行業(yè)的工程師所不應(yīng)該具備的素質(zhì)。開(kāi)發(fā)Windows應(yīng)用程序,看看Windows程序的設(shè)計(jì)、加載、執(zhí)行原理,分析一下PE文件格式,試試用SDK開(kāi)發(fā)從頭開(kāi)發(fā)一個(gè)Windows應(yīng)用程序;用VC++、Delphi、Java、.Net開(kāi)發(fā)應(yīng)用程序,花時(shí)間去研究一下MFC、VCL、J2EE、.Net它們框架設(shè)計(jì)或者源碼;除了會(huì)用J2EE、JBoss、Spring、Hibernate等等優(yōu)秀的開(kāi)源產(chǎn)品或者框架,抽空看看大師們是如何抽象、分析、設(shè)計(jì)和實(shí)現(xiàn)那些類似問(wèn)題的通用解決方案的。試著這樣做做,你以后的工作將會(huì)少遇到一些讓你不明就里、一頭霧水的問(wèn)題,因?yàn)?,很多東西你“知其然且知其所以然”!

             

            7、 在一種語(yǔ)言上編程,但別為其束縛了思想。“代碼大全”中說(shuō):“深入一門語(yǔ)言編程,不要浮于表面”。深入一門語(yǔ)言開(kāi)發(fā)還遠(yuǎn)遠(yuǎn)不足,任何編程語(yǔ)言的存在都有其自身的理由,所以也沒(méi)有哪門語(yǔ)言是“包治百病”的“靈丹妙藥”。編程語(yǔ)言對(duì)開(kāi)發(fā)人員解決具體問(wèn)題的思路和方式的影響與束縛的例子俯拾皆是。我的經(jīng)驗(yàn)是:用面對(duì)對(duì)象工具開(kāi)發(fā)某些關(guān)鍵模塊時(shí),為什么不可以借鑒C、C51、匯編的模塊化封裝方式?用傳統(tǒng)的桌面開(kāi) 發(fā)工具(目前主要有VC++、Delphi)進(jìn)行系統(tǒng)體統(tǒng)結(jié)構(gòu)設(shè)計(jì)時(shí),為什么不可以參考來(lái)自Java社區(qū)的IoC、AOP設(shè)計(jì)思想,甚至借鑒像Spring、Hibernate、JBoss等等優(yōu)秀的開(kāi)源框架?在進(jìn)行類似于實(shí)時(shí)通信、數(shù)據(jù)采集等功能的設(shè)計(jì)、實(shí)現(xiàn)時(shí),為什么不可以引用來(lái)自實(shí)時(shí)系統(tǒng)、嵌入式系統(tǒng)的優(yōu)秀的體系框架與模式?為什么一切都必須以個(gè)人、團(tuán)隊(duì)在當(dāng)然開(kāi)發(fā)語(yǔ)言上的傳統(tǒng)或者經(jīng)驗(yàn)來(lái)解決問(wèn)題???“他山之石、可以攻玉”。

             

            8、 養(yǎng)成總結(jié)與反思的習(xí)慣,并有意識(shí)地提煉日常工作成果,形成自己的個(gè)人源碼庫(kù)、解決某類問(wèn)題的通用系統(tǒng)體系結(jié)構(gòu)、甚至進(jìn)化為框架。眾所周知,對(duì)軟件開(kāi)發(fā)人員而言,有、無(wú)經(jīng)驗(yàn)的一個(gè)顯著區(qū)別是:無(wú)經(jīng)驗(yàn)者完成任何任務(wù)時(shí)都從頭開(kāi)始,而有經(jīng)驗(yàn)者往往通過(guò)重組自己的可復(fù)用模塊、類庫(kù)來(lái)解決問(wèn)題(其實(shí)這個(gè)結(jié)論不應(yīng)該被局限在軟件開(kāi)發(fā)領(lǐng)域、可以延伸到很多方面)。這并不是說(shuō),所有可復(fù)用的東西都必須自己實(shí)現(xiàn),別人成熟的通過(guò)測(cè)試的成果也可以收集、整理、集成到自己的知識(shí)庫(kù)中。但是,最好還是自己實(shí)現(xiàn),這樣沒(méi)有知識(shí)產(chǎn)權(quán)、版權(quán)等問(wèn)題,關(guān)鍵是自己實(shí)現(xiàn)后能真正掌握這個(gè)知識(shí)點(diǎn),擁有這個(gè)技能。

             

            9、 理論與實(shí)踐并重,內(nèi)外雙修。工程師的內(nèi)涵是:以工程師的眼光觀察、分析事物和世界。一個(gè)合格的軟件工程師,是真正理解了軟件產(chǎn)品的本質(zhì)及軟件產(chǎn)品研發(fā)的思想精髓的人(個(gè)人觀點(diǎn)、歡迎探討)。掌握軟件開(kāi)發(fā)語(yǔ)言、應(yīng)用語(yǔ)言工具解決工作中的具體問(wèn)題、完成目標(biāo)任務(wù)是軟件工程師的主要工作,但從軟件工程師這個(gè)角度來(lái)看,這只是外在的東西,并非重要的、本質(zhì)的工作。學(xué)習(xí)、掌握軟件產(chǎn)品開(kāi)發(fā)理論知識(shí)、軟件開(kāi)發(fā)方法論,并在實(shí)踐中理解、應(yīng)用軟件產(chǎn)品的分析、設(shè)計(jì)、實(shí)現(xiàn)思想來(lái)解決具體的軟件產(chǎn)品研發(fā)問(wèn)題,才是真正的軟件工程師的工作。站在成熟理論與可靠方法論的高度思考、分析、解決問(wèn)題,并在具體實(shí)踐中驗(yàn)證和修正這些思想與方式,最終形成自己的理論體系和實(shí)用方法論。

             

            10、心態(tài)有多開(kāi)放,視野就有多開(kāi)闊。不要抱著自己的技術(shù)和成果,等到它們都已經(jīng)過(guò)時(shí)變成垃圾了,才拿出來(lái)丟人現(xiàn)眼。請(qǐng)及時(shí)發(fā)布自己的研究成果:開(kāi)發(fā)的產(chǎn)品、有創(chuàng)意的設(shè)計(jì)或代碼,公布出來(lái)讓大家交流或者使用,你的成果才有進(jìn)化和升華的機(jī)會(huì)。想想自己2000年間開(kāi)發(fā)的那些Windows系統(tǒng)工具,5、6年之后的今天,還是那個(gè)樣子,今天流行的好多Windows系統(tǒng)工具都比自己的晚,但進(jìn)化得很好,且有那么多用戶在使用。并且,不要保守自己的技術(shù)和思想,盡可能地與人交流與分享,或者傳授給開(kāi)發(fā)團(tuán)隊(duì)的成員。“與人交換蘋果之后,每個(gè)人還是只有一個(gè)蘋果;但交換思想之后,每個(gè)人都擁有兩種思想”,道理大家都懂,但有多少人真正能 做到呢?

             

            11、盡量參加開(kāi)源項(xiàng)目的開(kāi)發(fā)、或者與朋友共同研制一些自己的產(chǎn)品,千萬(wàn)不要因?yàn)闆](méi)有錢賺而不做。網(wǎng)絡(luò)早已不再只是“虛擬世界”,網(wǎng)上有很多的開(kāi)源項(xiàng)目、合作開(kāi)發(fā)項(xiàng)目、外包項(xiàng)目,這都是涉獵工作以外的知識(shí)的絕好機(jī)會(huì),并且能夠結(jié)識(shí)更廣的人緣。不要因?yàn)楣ぷ魇亲鯡RP,就不去學(xué)習(xí)和了解嵌入式、實(shí)時(shí)、通信、網(wǎng)絡(luò)等方面的技術(shù),反過(guò)來(lái)也是一樣。如果當(dāng)他別人拿著合同找你合作,你卻這也不會(huì),那也不熟時(shí),你將后悔莫及。

             

            12、書到用時(shí)方恨少,不要將自己的知識(shí)面僅僅局限于技術(shù)方面。諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)得主西蒙教授的研究結(jié)果表明: “對(duì)于一個(gè)有一定基礎(chǔ)的人來(lái)說(shuō),他只要真正肯下功夫,在6個(gè)月內(nèi)就可以掌握任何一門學(xué)問(wèn)。”教育心理學(xué)界為感謝西蒙教授的研究成果,故命名為西蒙學(xué)習(xí)法??梢?jiàn),掌握一門陌生的學(xué)問(wèn)遠(yuǎn)遠(yuǎn)沒(méi)有想想的那么高難、深?yuàn)W。多方吸取、廣泛涉獵。極力夯實(shí)自己的影響圈、盡量擴(kuò)大自己的關(guān)注圈。財(cái)務(wù)、經(jīng)濟(jì)、稅務(wù)、管理等等知識(shí),有空花時(shí)間看看,韜光養(yǎng)晦、未雨綢繆。

             

            13、本文的總 結(jié)與反思:

             

            A:不要去做技術(shù)上的高手,除非你的目標(biāo)如此。雖然本文是關(guān)于提高軟件開(kāi)發(fā)知識(shí)的建議,做技術(shù)的高手是我一向都不贊同的。你可以提高自己的專業(yè)知識(shí),但能勝任工作即止。

             

            B:提高軟件知識(shí)和技術(shù)只是問(wèn)題的表面,本質(zhì)是要提高自己認(rèn)識(shí)問(wèn)題、分析問(wèn)題、解決問(wèn)題的思想高度。軟件專業(yè)知識(shí)的很多方法和原理,可以很容易地延伸、應(yīng)用到生活的其它方面。

             

            C:在能勝任工作的基礎(chǔ)上,立即去涉獵其它領(lǐng)域的專業(yè)知識(shí),豐富自己的知識(shí)體系、提高自己的綜合素質(zhì),尤其是那些目標(biāo)不在技術(shù)方面的朋友。


            posted @ 2010-09-02 09:37 eircQ 閱讀(104) | 評(píng)論 (0)編輯 收藏

             但是如果你希望,提前在5年內(nèi)、3年內(nèi)甚至1年內(nèi)使你的收入加倍,你必須先使你的生產(chǎn)力加倍,然后收入加倍的美夢(mèng)才可能成真。

                如何使生產(chǎn)力加倍呢?美國(guó)職業(yè)生涯規(guī)劃與時(shí)間管理專家Brian
            Tracy,集20年實(shí)務(wù)工作經(jīng)驗(yàn)與研究,發(fā)現(xiàn)能使你生產(chǎn)力加倍 的7個(gè)工作秘訣:


                一、全心投入工作(work harder at what you
                        do):當(dāng)你工作時(shí),一定要全心投入,不要浪費(fèi)時(shí)間,不要把工作場(chǎng)所當(dāng)成社交場(chǎng)合。光這個(gè)秘訣,如果你能長(zhǎng)期實(shí)踐,就能使你的生產(chǎn)力加倍。


                二、工作步調(diào)快(work
                        faster):養(yǎng)成一種緊迫感,一次專心做一件事,并且用最快的速度完成,之后,立刻進(jìn)入下一件工作。養(yǎng)成這習(xí)慣后,你會(huì)驚訝地發(fā)現(xiàn),一天所能完成的工 作量居然是如此地驚人。


                三、專注于高附加值的工作(work on higher-value
                        activities):你要記住工作時(shí)數(shù)的多寡不見(jiàn)得與工作成果成正比。精明的老板或是上司關(guān)心的是你的工作數(shù)量及工作品質(zhì),工作時(shí)數(shù)并非重點(diǎn)。因此聰 明的員工,會(huì)想辦法找出對(duì)達(dá)成工作目標(biāo)及績(jī)效標(biāo)準(zhǔn)有幫助的活動(dòng),然后投入最多時(shí)間與心力在這些事情上面。投入的時(shí)間愈多,每分鐘的生產(chǎn)力就愈高,工作績(jī)效 也就提高,自然贏得老板及上司的賞識(shí)與重用,加薪與升遷在望。


                四、熟練工作(do things you are better
                        at):你找出最有價(jià)值的工作項(xiàng)目后,接著要想辦法,通過(guò)不斷學(xué)習(xí)、應(yīng)用、練習(xí),熟練所有工作流程與技巧,累積工作經(jīng)驗(yàn)(一句話解決KNOW
                        HOW的問(wèn)題)。你的工作愈純熟,工作所需的時(shí)間就愈短;你的技能愈熟練,生產(chǎn)力就提升得愈快。


                五、集中處理(bunch your
                        tasks):一個(gè)有技巧的工作人,會(huì)把許多性質(zhì)相近的工作或是活動(dòng),例如,收發(fā)E-MAIL、寫信、填寫工作報(bào)表、填寫備忘錄等等,集中在同一個(gè)時(shí)段來(lái) 處理,這樣會(huì)比一件一件分開(kāi)在不同時(shí)段處理,節(jié)省一半以上的時(shí)間,同時(shí)也能提高效率與效能。


                六、簡(jiǎn)化工作(simplify your
                        work):盡量簡(jiǎn)化工作流程,將許多分開(kāi)的工作步驟加以整合,變成單一任務(wù),以減少工作的復(fù)雜度,另外,運(yùn)用授權(quán)或是外包的方式,避免把時(shí)間花費(fèi)在低價(jià) 值的工作上。


                七、比別人工作時(shí)間長(zhǎng)一些(work longer
                        hours):早一點(diǎn)起床,早點(diǎn)去上班,避開(kāi)交通高峰;中午晚一點(diǎn)出去用餐,繼續(xù)工作,避開(kāi)排隊(duì)用餐的人潮;晚上稍微留晚一些,直到交通高峰時(shí)間已過(guò),再 下班回家。如此一天可以比一般人多出2至3個(gè)小時(shí)的工作時(shí)間,而且不會(huì)影響正常的生活步調(diào)。善用這些多出來(lái)的時(shí)間,可以使你的生產(chǎn)力加倍,進(jìn)而使你的收入 加倍。一個(gè)成功的人,通常是一個(gè)行動(dòng)派的人,一旦懂得提升生產(chǎn)力的方法,就會(huì)將這7個(gè)小秘訣,默記在心,不斷地應(yīng)用、練習(xí),直到成為工作、生活的習(xí)慣為 止。只要養(yǎng)成這個(gè)習(xí)慣,你的生產(chǎn)力一定會(huì)提高,收入也會(huì)加倍。


            posted @ 2010-09-02 09:29 eircQ 閱讀(123) | 評(píng)論 (0)編輯 收藏

            1 快速排序(QuickSort)

            快速排序是一個(gè)就地排序,分而治之,大規(guī)模遞歸的算法。從本質(zhì)上來(lái)說(shuō),它是歸并排序的就地版本??焖倥判蚩梢杂上旅嫠牟浇M成。

            (1) 如果不多于1個(gè)數(shù)據(jù),直接返回。

            (2) 一般選擇序列最左邊的值作為支點(diǎn)數(shù)據(jù)。

            (3) 將序列分成2部分,一部分都大于支點(diǎn)數(shù)據(jù),另外一部分都小于支點(diǎn)數(shù)據(jù)。

            (4) 對(duì)兩邊利用遞歸排序數(shù)列。

            快速排序比大部分排序算法都要快。盡管我們可以在某些特殊的情況下寫出比快速排序快的算法,但是就通常情況而言,沒(méi)有比它更快的了。快速排序是遞歸的,對(duì)于內(nèi)存非常有限的機(jī)器來(lái)說(shuō),它不是一個(gè)好的選擇。

            2 歸并排序(MergeSort)

            歸并排序先分解要排序的序列,從1分成2,2分成4,依次分解,當(dāng)分解到只有1個(gè)一組的時(shí)候,就可以排序這些分組,然后依次合并回原來(lái)的序列中,這樣就可以排序所有數(shù)據(jù)。合并排序比堆排序稍微快一點(diǎn),但是需要比堆排序多一倍的內(nèi)存空間,因?yàn)樗枰粋€(gè)額外的數(shù)組。

            3 堆排序(HeapSort)

            堆排序適合于數(shù)據(jù)量非常大的場(chǎng)合(百萬(wàn)數(shù)據(jù))。

            堆排序不需要大量的遞歸或者多維的暫存數(shù)組。這對(duì)于數(shù)據(jù)量非常巨大的序列是合適的。比如超過(guò)數(shù)百萬(wàn)條記錄,因?yàn)榭焖倥判?,歸并排序都使用遞歸來(lái)設(shè)計(jì)算法,在數(shù)據(jù)量非常大的時(shí)候,可能會(huì)發(fā)生堆棧溢出錯(cuò)誤。

            堆排序會(huì)將所有的數(shù)據(jù)建成一個(gè)堆,最大的數(shù)據(jù)在堆頂,然后將堆頂數(shù)據(jù)和序列的最后一個(gè)數(shù)據(jù)交換。接下來(lái)再次重建堆,交換數(shù)據(jù),依次下去,就可以排序所有的數(shù)據(jù)。

            4 Shell排序(ShellSort)

            Shell排序通過(guò)將數(shù)據(jù)分成不同的組,先對(duì)每一組進(jìn)行排序,然后再對(duì)所有的元素進(jìn)行一次插入排序,以減少數(shù)據(jù)交換和移動(dòng)的次數(shù)。平均效率是O(nlogn)。其中分組的合理性會(huì)對(duì)算法產(chǎn)生重要的影響?,F(xiàn)在多用D.E.Knuth的分組方法。

            Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相對(duì)比較簡(jiǎn)單,它適合于數(shù)據(jù)量在5000以下并且速度并不是特別重要的場(chǎng)合。它對(duì)于數(shù)據(jù)量較小的數(shù)列重復(fù)排序是非常好的。

            5 插入排序(InsertSort)

            插入排序通過(guò)把序列中的值插入一個(gè)已經(jīng)排序好的序列中,直到該序列的結(jié)束。插入排序是對(duì)冒泡排序的改進(jìn)。它比冒泡排序快2倍。一般不用在數(shù)據(jù)大于1000的場(chǎng)合下使用插入排序,或者重復(fù)排序超過(guò)200數(shù)據(jù)項(xiàng)的序列。

            6 冒泡排序(BubbleSort)

            冒泡排序是最慢的排序算法。在實(shí)際運(yùn)用中它是效率最低的算法。它通過(guò)一趟又一趟地比較數(shù)組中的每一個(gè)元素,使較大的數(shù)據(jù)下沉,較小的數(shù)據(jù)上升。它是O(n^2)的算法。

            7 交換排序(ExchangeSort)和選擇排序(SelectSort)

            這兩種排序方法都是交換方法的排序算法,效率都是 O(n2)。在實(shí)際應(yīng)用中處于和冒泡排序基本相同的地位。它們只是排序算法發(fā)展的初級(jí)階段,在實(shí)際中使用較少。

            8 基數(shù)排序(RadixSort)

            基數(shù)排序和通常的排序算法并不走同樣的路線。它是一種比較新穎的算法,但是它只能用于整數(shù)的排序,如果我們要把同樣的辦法運(yùn)用到浮點(diǎn)數(shù)上,我們必須了解浮點(diǎn)數(shù)的存儲(chǔ)格式,并通過(guò)特殊的方式將浮點(diǎn)數(shù)映射到整數(shù)上,然后再映射回去,這是非常麻煩的事情,因此,它的使用同樣也不多。而且,最重要的是,這樣算法也需要較多的存儲(chǔ)空間。

            9 總結(jié)

            下面是一個(gè)總的表格,大致總結(jié)了我們常見(jiàn)的所有的排序算法的特點(diǎn)。
            排序法  平均時(shí)間 最差情形 穩(wěn)定度 額外空間 備注
            冒泡  O(n2)   O(n2)  穩(wěn)定 O(1) n小時(shí)較好
            交換   O(n2)   O(n2) 不穩(wěn)定 O(1) n小時(shí)較好
            選擇  O(n2)  O(n2) 不穩(wěn)定 O(1) n小時(shí)較好
            插入  O(n2)  O(n2) 穩(wěn)定 O(1) 大部分已排序時(shí)較好
            基數(shù) O(logRB) O(logRB) 穩(wěn)定 O(n)

             

            B是真數(shù)(0-9),

            R是基數(shù)(個(gè)十百)

            Shell O(nlogn) O(ns) 1<2 不穩(wěn)定 O(1) s是所選分組
            快速 O(nlogn) O(n2) 不穩(wěn)定 O(nlogn) n大時(shí)較好
            歸并 O(nlogn) O(nlogn) 穩(wěn)定 O(1) n大時(shí)較好
            O(nlogn) O(nlogn) 不穩(wěn)定 O(1) n大時(shí)較好

            posted @ 2010-08-23 19:29 eircQ 閱讀(187) | 評(píng)論 (0)編輯 收藏

            ;***************************************************************************************************************
            ;       strlen returns the length of a null-terminated string in bytes, not including the null byte itself.
            ;       Algorithm:
            ;       int strlen (const char * str)
            ;       {
            ;           int length = 0;
            ;
            ;           while( *str++ )
            ;                   ++length;
            ;
            ;           return( length );
            ;       }

            ;***************************************************************************************************************
            ;       memcpy() copies a source memory buffer to a destination buffer.
            ;       Overlapping buffers are not treated specially, so propogation may occur.
            ;       Algorithm:
            ;       void * memcpy(void * dst, void * src, size_t count)
            ;       {
            ;               void * ret = dst;
            ;               /*
            ;                * copy from lower addresses to higher addresses
            ;                */
            ;               while (count--)
            ;                       *dst++ = *src++;
            ;
            ;               return(ret);
            ;       }

            ;***************************************************************************************************************
            ;       memmove() copies a source memory buffer to a destination memory buffer.
            ;       This routine recognize overlapping buffers to avoid propogation.
            ;       For cases where propogation is not a problem, memcpy() can be used.
            ;       Algorithm:
            ;       void * memmove(void * dst, void * src, size_t count)
            ;       {
            ;               void * ret = dst;
            ;               if (dst <= src || dst >= (src + count)) {
            ;                       /*
            ;                        * Non-Overlapping Buffers
            ;                        * copy from lower addresses to higher addresses
            ;                        */
            ;                       while (count--)
            ;                               *dst++ = *src++;
            ;                       }
            ;               else {
            ;                       /*
            ;                        * Overlapping Buffers
            ;                        * copy from higher addresses to lower addresses
            ;                        */
            ;                       dst += count - 1;
            ;                       src += count - 1;
            ;
            ;                       while (count--)
            ;                               *dst-- = *src--;
            ;                       }
            ;
            ;               return(ret);
            ;       }

            ;***************************************************************************************************************
            int strcmp(const char *str1,const char *str2)
            {
            while((*str1==*str2)&&(*str1))
            {
            str1++;
            str2++;
            }
            if((*str1==*str2)&&(!*str1)) //Same strings
            return 0;
            else if((*str1)&&(!*str2))  //Same but str1 longer
            return -1;
            else if((*str2)&&(!*str1)) //Same but str2 longer
            return 1;
            else
            return((*str1>*str2)?-1:1);
            }

            ;***************************************************************************************************************
            char *strstr1(const char *str1, const char *str2)
            {
                 char *cp = (char *)str1;  //type transfer
                 char *s1, *s2;
                 if(!str2) 
                  return (char *)str1;
                 while (cp)
                 {
                  s1 = cp;
                  s2 = (char *)str2;
                  while( !s1 && !s2 && !(*s1-*s2))
                  {
                   s1++, s2++;
                  }
                  if(!s2) 
                   return cp;
                  else
                   cp++;
                 }
                 return NULL;
            }

            ;***************************************************************************************************************
            *char *_itoa, *_ltoa, *_ultoa(val, buf, radix) - convert binary int to ASCII string
            static void __cdecl xtoa (unsigned long val, char *buf, unsigned radix, int is_neg )
            {
                    char *p;                /* pointer to traverse string */
                    char *firstdig;         /* pointer to first digit */
                    char temp;              /* temp char */
                    unsigned digval;        /* value of digit */

                    p = buf;

                    if (is_neg) {
                        /* negative, so output '-' and negate */
                        *p++ = '-';
                        val = (unsigned long)(-(long)val);
                    }

                    firstdig = p;           /* save pointer to first digit */

                    do {
                        digval = (unsigned) (val % radix);
                        val /= radix;       /* get next digit */

                        /* convert to ascii and store */
                        if (digval > 9)
                            *p++ = (char) (digval - 10 + 'a');  /* a letter */
                        else
                            *p++ = (char) (digval + '0');       /* a digit */
                    } while (val > 0);

                    /* We now have the digit of the number in the buffer, but in reverse
                       order.  Thus we reverse them now. */

                    *p-- = '\0';            /* terminate string; p points to last digit */

                    do {
                        temp = *p;
                        *p = *firstdig;
                        *firstdig = temp;   /* swap *p and *firstdig */
                        --p;
                        ++firstdig;         /* advance to next two digits */
                    } while (firstdig < p); /* repeat until halfway */
            }
            char * __cdecl _itoa ( int val, char *buf, int radix )
            {
                    if (radix == 10 && val < 0)
                        xtoa((unsigned long)val, buf, radix, 1);
                    else
                        xtoa((unsigned long)(unsigned int)val, buf, radix, 0);
                    return buf;
            }
            char * __cdecl _ltoa ( long val, char *buf, int radix )
            {
                    xtoa((unsigned long)val, buf, radix, (radix == 10 && val < 0));
                    return buf;
            }

            ;***************************************************************************************************************
            *long atol(char *nptr) - Convert string to long. Overflow is not detected.
            long __cdecl _tstol(const _TCHAR *nptr )
            {
                    int c;              /* current char */
                    long total;         /* current total */
                    int sign;           /* if '-', then negative, otherwise positive */
                    while ( _istspace((int)(_TUCHAR)*nptr) )
                             ++nptr;   /* skip whitespace */

                    c = (int)(_TUCHAR)*nptr++;
                    sign = c;           /* save sign indication */
                    if (c == _T('-') || c == _T('+'))
                        c = (int)(_TUCHAR)*nptr++;    /* skip sign */

                    total = 0;

                    while ( (c = _tchartodigit(c)) != -1 ) {
                        total = 10 * total + c;     /* accumulate digit */
                        c = (_TUCHAR)*nptr++;    /* get next char */
                    }

                    if (sign == '-')
                        return -total;
                    else
                        return total;   /* return result, negated if necessary */
            }
            int __cdecl _tstoi( const _TCHAR *nptr )
            {
                    return (int)_tstol(nptr);
            }

            ;***************************************************************************************************************
            ;performs a byteswap on an unsigned integer.
            unsigned short __cdecl _byteswap_ushort(unsigned short i)
            {
                unsigned short j;
                j =  (i << 8) ;
                j += (i >> 8) ;
                return j;
            }
            unsigned long __cdecl _byteswap_ulong(unsigned long i)
            {
                unsigned int j;
                j =  (i << 24);
                j += (i <<  8) & 0x00FF0000;
                j += (i >>  8) & 0x0000FF00;
                j += (i >> 24);
                return j;
            }

            ;***************************************************************************************************************
            *char *bsearch() - do a binary search on an array
            *Entry:
            *       const char *key    - key to search for const char *base   - base of sorted array to search unsigned int num   - number of *elements in array unsigned int width - number of bytes per element int (*compare)()   - pointer to function that compares two
            *array elements, returning neg when #1 < #2, pos when #1 > #2, and 0 when they are equal. Function is passed pointers to two
            *array elements.
            *Exit:
            *       if key is found: returns pointer to occurrence of key in array
            *       if key is not found:returns NULL

            void * __cdecl bsearch ( REG4 const void *key, const void *base, size_t num, size_t width, int (__cdecl *compare)(const void *, const void *)   )
            {
                    REG1 char *lo = (char *)base;
                    REG2 char *hi = (char *)base + (num - 1) * width;
                    REG3 char *mid;
                    size_t half;
                    int result;

                    while (lo <= hi)
                            if (half = num / 2)
                            {
                                    mid = lo + (num & 1 ? half : (half - 1)) * width;
                                    if (!(result = (*compare)(key,mid)))
                                            return(mid);
                                    else if (result < 0)
                                    {
                                            hi = mid - width;
                                            num = num & 1 ? half : half-1;
                                    }
                                    else    {
                                            lo = mid + width;
                                            num = half;
                                    }
                            }
                            else if (num)
                                    return((*compare)(key,lo) ? NULL : lo);
                            else
                                    break;

                    return(NULL);
            }

            ;***************************************************************************************************************
            void __cdecl _tmakepath (register _TSCHAR *path, const _TSCHAR *drive, const _TSCHAR *dir,
            const _TSCHAR *fname, const _TSCHAR *ext  )
            {
                 register const _TSCHAR *p;
                 /* copy drive */
                 if (drive && *drive) {
                            *path++ = *drive;
                            *path++ = _T(':');
                    }

                    /* copy dir */
                    if ((p = dir) && *p) {
                            do {
                                    *path++ = *p++;
                            }while (*p);
                            if (*(p-1) != _T('/') && *(p-1) != _T('\\')) {
                                    *path++ = _T('\\');
                            }
                    }

                    /* copy fname */
                    if (p = fname) {
                            while (*p) {
                                    *path++ = *p++;
                            }
                    }

                    /* copy ext, including 0-terminator - check to see if a '.' needs to be inserted. */
                    if (p = ext) {
                            if (*p && *p != _T('.')) {
                                    *path++ = _T('.');
                            }
                            while (*path++ = *p++)
                                    ;
                    }
                    else {
                            /* better add the 0-terminator */
                            *path = _T('\0');
                    }
            }


            posted @ 2010-08-23 14:42 eircQ 閱讀(399) | 評(píng)論 (0)編輯 收藏

            人生的一張時(shí)間表

            如果每天都有86400元進(jìn)入您的銀行戶頭,而且必須當(dāng)天用完,您會(huì)如何運(yùn)用這筆錢?天下真有這樣的好事嗎?是的,您真的有這樣一個(gè)戶頭,那就是“時(shí)間”。每天每一個(gè)人都會(huì)有新的86400秒進(jìn)帳??雌饋?lái)很富有?假如一個(gè)人的壽命為60歲,那么一生時(shí)間中,睡覺(jué)要花掉20年,吃飯6年,穿衣和梳洗5年,生病3年,打電話1年,照鏡子70天(部分女性除外),抹鼻涕10天,剩下的工作時(shí)間是多少呢?您又是怎樣利用它們呢?

            哲學(xué)家伏爾泰說(shuō):最長(zhǎng)的莫過(guò)于時(shí)間,因?yàn)樗鼰o(wú)窮無(wú)盡;最短的也莫過(guò)于時(shí)間,因?yàn)槲覀兯械挠?jì)劃都來(lái)不及完成。您是否有過(guò)這樣的經(jīng)歷:某一天,您雄心勃勃地準(zhǔn)備把手底下的事清理干凈,可到頭來(lái)卻一事無(wú)成?也許每個(gè)人都曾有過(guò)這樣的經(jīng)歷,但在某些人身上表現(xiàn)得格外明顯。

            讓我們分析一下時(shí)間是如何被浪費(fèi)掉的。

            人生時(shí)間表

            假如一個(gè)人的壽命為60歲,那么他總共只有21900天。一生時(shí)間的用途分別為:

            • 睡20年(7300天);
            • 吃飯6年(2190天);
            • 穿衣和梳洗5年(1825天);
            • 生病3年(1095天);
            • 打電話1年(365天);
            • 照鏡子70天;
            • 抹鼻涕10天。

            最后只剩下3205天,即8年又285天,用來(lái)做有用的工作。(人生真的很苦短)

            如何找到時(shí)間浪費(fèi)的原因

            在8年又285天的時(shí)間里,我們又做了哪些浪費(fèi)時(shí)間的事情?不妨問(wèn)問(wèn)自己以下四個(gè)問(wèn)題:

            • 我做了什么根本不需要做的事?
            • 我做了什么能夠由別人,并且應(yīng)該由別人做的事?
            • 我做了什么耗時(shí)過(guò)長(zhǎng)的事?
            • 我做了什么會(huì)浪費(fèi)別人時(shí)間的事?

            也許您很少或者沒(méi)有做過(guò)以上那些事情,但問(wèn)題有時(shí)并不在事情本身,看看自己是否也有這些浪費(fèi)時(shí)間的習(xí)慣:

            • 做事目標(biāo)不明確。
            • 作風(fēng)拖拉。
            • 缺乏擾先順序,抓不住重點(diǎn)。
            • 過(guò)于注重細(xì)節(jié)。
            • 做事有頭無(wú)尾。
            • 沒(méi)有條理,不簡(jiǎn)潔,簡(jiǎn)單的事情復(fù)雜化。
            • 事必躬親,不懂得授權(quán)。
            • 不會(huì)拒絕別人的請(qǐng)求。
            • 消極思考。

            人人都需要時(shí)間管理

            一項(xiàng)國(guó)際查表明:一個(gè)效率糟糕的人與一個(gè)高效的人工作效率相差可達(dá)10倍以上。

            時(shí)間管理可以幫助您把每一天、每一周甚至每個(gè)月的時(shí)間進(jìn)行有效的合理安排。運(yùn)用這些時(shí)間管理技巧幫您統(tǒng)籌時(shí)間,對(duì)于每個(gè)人來(lái)說(shuō)都是非常重要的。

            在時(shí)間管理中,“計(jì)劃組織”相對(duì)于其他技巧來(lái)說(shuō)是最簡(jiǎn)單的一種。比如,所有的時(shí)間管理建議都包括在一些表格當(dāng)中,在表格中把您想要完成的任務(wù)填進(jìn)去。對(duì)很多人來(lái)說(shuō),這是最簡(jiǎn)單和普通的了。當(dāng)然,制表格和填表對(duì)一些人來(lái)說(shuō)是有困難的。這是一個(gè)天份問(wèn)題,與一個(gè)人的邏輯能力、空間想象力、創(chuàng)造力和抽象思維能力無(wú)關(guān)。時(shí)間管理是需要經(jīng)過(guò)訓(xùn)練的,如果您沒(méi)有準(zhǔn)備好接受專門訓(xùn)練的話,您將不能成為一個(gè)優(yōu)秀的時(shí)間管理者?!杜=蚬芾碓u(píng)論》上推薦的十大自我時(shí)間管理技巧,值得注意的是,沒(méi)有稱之為最好的方法,不過(guò)這些方法對(duì)作者本人是有幫助的,希望對(duì)您也能有所幫助。

            1. 每天清晨把一天要做的事都列出清單

              如果您不是按照辦事順序去做事情的話,那么您的時(shí)間管理也不會(huì)是有效率的。在每一天的早上或是前一天晚上,把一天要做的事情列一個(gè)清單出來(lái)。這個(gè)清單包括公務(wù)和私事兩類內(nèi)容,把它們記錄在紙上、工作簿上、您的PDA或是其他什么上面。在一天的工作過(guò)程中,要經(jīng)常地進(jìn)行查閱。舉個(gè)例子,在開(kāi)會(huì)前十分鐘的時(shí)候,看一眼您的事情記錄,如果還有一封電子郵件要發(fā)的話,您完全可以利用這段空隙把這項(xiàng)任務(wù)完成。當(dāng)您做完記錄上面所有事的時(shí)候,最好要再檢查一遍。如果您和我有同樣的感覺(jué),那么,在完成工作后通過(guò)檢查每一個(gè)項(xiàng)目,您體會(huì)到一種滿足感。

            2. 把接下來(lái)要完成的工作也同樣記錄在您的清單上

              在完成了開(kāi)始計(jì)劃的工作后,把下來(lái)要做的事情記錄在您的每日清單上面。如果您的清單上在內(nèi)容已經(jīng)滿了,或是某項(xiàng)工作可以轉(zhuǎn)過(guò)天來(lái)做,那么您可以把它算作明天或后天的工作計(jì)劃。您是否想知道為什么有些人告訴您他們打算做一些事情但是沒(méi)有完成的原因嗎?這是因?yàn)樗麄儧](méi)有把這些事情記錄下來(lái)。如果我是一個(gè)管理者,我不會(huì)三翻五次地告訴我的員工我們都需要做哪些事情。我從不相信他們的記憶力。如果他們沒(méi)帶紙和筆,我會(huì)借給他們,讓他們要完成的工作和時(shí)間期限記錄下來(lái)。

            3. 對(duì)當(dāng)天沒(méi)有完成的工作進(jìn)行重新安排

              現(xiàn)在您有了一個(gè)每日的工作計(jì)劃,而且也加進(jìn)了當(dāng)天要完成的新的工作任務(wù)。那么,對(duì)一天下來(lái)那些沒(méi)完成的工作項(xiàng)目又將做處置呢?您可以選擇將它們順延至第二天,添加到您明天的工作安排清單中來(lái)。但是,希望您不要成為一個(gè)辦事拖拉的人,每天總會(huì)有干不完的事情,這樣,每天的任務(wù)清單都會(huì)比前一天有所膨脹。如果的確事情重要,沒(méi)問(wèn)題,轉(zhuǎn)天做完它。如果沒(méi)有那么重要,您可以和與這件事有關(guān)的人講清楚您沒(méi)完成的原因。

            4. 記住應(yīng)赴的約會(huì)

              使用您的記事清單來(lái)幫您記住應(yīng)赴的約會(huì),這包括與同事和朋友的約會(huì)。以我的經(jīng)驗(yàn)看,工作忙碌的人們失約的次數(shù)比準(zhǔn)時(shí)赴約的次數(shù)還多。如果您不能清楚地記得每件事都做了沒(méi)有,那么一定要把它記下來(lái),并借助時(shí)間管理方法保證它的按時(shí)完成。如果您的確因?yàn)橛惺露荒芨凹s,可以提前打電話通知您的約會(huì)對(duì)象。

            5. 制一個(gè)表格,把本月和下月需要優(yōu)先做的事情記錄下來(lái)

              據(jù)我所知很多人都開(kāi)始制定每一天的工作計(jì)劃。那么有多少人會(huì)把他們本月和下月需要做的事情進(jìn)行一個(gè)更高水平的籌劃呢?除非您從事的是一項(xiàng)交易工作,它的時(shí)間表上總是近期任務(wù),您經(jīng)常是在每個(gè)月末進(jìn)行總結(jié),而月初又開(kāi)始重新安排籌劃。對(duì)一個(gè)月的工作進(jìn)行列表規(guī)劃是時(shí)間管理中更高水平的方法,再次強(qiáng)調(diào),您所列入這個(gè)表格的一定是您必須完成不可的工作。在每個(gè)月開(kāi)始的時(shí)候,將上個(gè)月沒(méi)有完成而這個(gè)月必須完成的工作添加入表。

            6. 把未來(lái)某一時(shí)間要完成的工作記錄下來(lái)

              您的記事清單不可能幫助提醒您去完成在未來(lái)某一時(shí)間要完成的工作。比如,您告訴您的同事,在兩個(gè)月內(nèi)您將和他一起去完成某項(xiàng)工作。這時(shí)您就需要有一個(gè)辦法記住這件事,并在未來(lái)的某個(gè)時(shí)間提醒您。我一般是用一個(gè)電子日歷,因?yàn)楹芏嚯娮尤諝v都有提醒功能。其實(shí)為了保險(xiǎn)起見(jiàn),您可以使用多個(gè)提醒方法,一旦一個(gè)沒(méi)起作用,另一個(gè)還會(huì)提醒您。

            7. 保持桌面整潔

              我從不相信一個(gè)把自已工作環(huán)境弄得亂糟糟人會(huì)是一個(gè)優(yōu)秀的時(shí)間管理者。同樣的道理,一個(gè)人的臥室或是辦公室一片狼藉,他也不會(huì)是一個(gè)優(yōu)秀的時(shí)間管理者。因?yàn)橐粋€(gè)好的時(shí)間管理者是不會(huì)花很長(zhǎng)時(shí)間在一堆亂文件中找出所需的材料的。

            8. 把做每件事所需要的文件材料放在一個(gè)固定的地方

              隨著時(shí)間的過(guò)去,您可能會(huì)完成很多工作任務(wù),這就要注意保持每件事的有序和完整。我一般會(huì)把與某一件事有關(guān)的所有東西放在一起,這樣當(dāng)我需要時(shí)查找起來(lái)非常方便。當(dāng)我徹底完成了一項(xiàng)工作時(shí),我會(huì)把這些東西集體轉(zhuǎn)移到另一個(gè)地方。

            9. 清理您用不著的文件材料

              也許您會(huì)感到吃驚,在過(guò)去的十年中,我只有一個(gè)裝文件的抽屜,那里有我這些年所有的工作文件。我總是把新用完的工作文件放在抽屜的最前端,當(dāng)抽屜被裝滿的時(shí)候,我會(huì)清除在抽屜最后面的文件。換句話說(shuō),我總是保持有一個(gè)抽屜的文件,總量不會(huì)超出這個(gè)范圍。有的人會(huì)把所有的文件都保留著,這些沒(méi)完沒(méi)了的文件材料最后會(huì)成為無(wú)人問(wèn)津的廢紙,很多文件可能都不會(huì)再被人用到。我在這里所提到的文件材料并不包括您的工作手冊(cè)或是必需的參考資料,而是那些用作積累的文件。當(dāng)然,有的時(shí)候,我也會(huì)去查找用過(guò)的文件,它們雖然經(jīng)過(guò)了我的清理,但原稿我會(huì)一直保留在計(jì)算機(jī)里。

            10. 定期備份并清理計(jì)算機(jī)

              我對(duì)保存在計(jì)算機(jī)里的文件的處理方法也和上面所說(shuō)的差不多。我猜想,您保存在計(jì)算機(jī)里的95%的文件打印稿可能還會(huì)在您的手里放三個(gè)月。我定期地備份文件到光盤上,并馬上刪除機(jī)器中不再需要的文件。


            posted @ 2010-08-23 13:51 eircQ 閱讀(121) | 評(píng)論 (0)編輯 收藏

            為什么要用存儲(chǔ)過(guò)程 

             

             

            幾個(gè)去 IBM 面試的兄弟回來(lái)抱怨:去了好幾個(gè)不同的 IBM 項(xiàng)目組,幾乎每個(gè)面試官問(wèn)到數(shù)據(jù)庫(kù)的時(shí)候都要問(wèn)用沒(méi)用過(guò)存儲(chǔ)過(guò)程,煩人不?大家去面的程序員,又不是 DBA,以前的項(xiàng)目都沒(méi)有用到存儲(chǔ),不照樣運(yùn)行的好好的?

            存儲(chǔ)過(guò)程真的那么重要嗎,它到底有什么好處呢?

            筆者認(rèn)為,存儲(chǔ)過(guò)程說(shuō)白了就是一堆 SQL 的合并。中間加了點(diǎn)邏輯控制。

            但是存儲(chǔ)過(guò)程處理比較復(fù)雜的業(yè)務(wù)時(shí)比較實(shí)用。
            比如說(shuō),一個(gè)復(fù)雜的數(shù)據(jù)操作。如果你在前臺(tái) 處理的話。可能會(huì)涉及到多次數(shù)據(jù)庫(kù)連接。但如果你用存儲(chǔ)過(guò)程的話。就只有一次。從響應(yīng)時(shí)間上來(lái)說(shuō)有優(yōu)勢(shì)。
            也就是說(shuō)存儲(chǔ)過(guò)程可以給我們帶來(lái)運(yùn)行效率 提高的好處。
            另外,程序容易出現(xiàn) BUG 不穩(wěn)定,而存儲(chǔ)過(guò)程,只要數(shù)據(jù)庫(kù)不出現(xiàn)問(wèn)題,基本上是不會(huì)出現(xiàn)什么問(wèn)題的。也就是說(shuō)從安全上講,使用了存儲(chǔ)過(guò)程的系統(tǒng)更加穩(wěn)定。

            數(shù)據(jù)量小的,或者和錢沒(méi)關(guān)系的項(xiàng)目不用存儲(chǔ)過(guò)程也可以正常運(yùn)作。mysql 的存儲(chǔ)過(guò)程還有待實(shí)際測(cè)試。如果是正式項(xiàng)目,建議你用 sql server 或 oracle 的存儲(chǔ)過(guò)程。數(shù)據(jù)與數(shù)據(jù)之間打交道的話,過(guò)程會(huì)比程序來(lái)的快的多。面試官問(wèn)有沒(méi)有用存儲(chǔ),實(shí)際上就是想知道前來(lái)面試的程序員到底做過(guò)數(shù)據(jù)量大的項(xiàng)目沒(méi)。如 果是培訓(xùn)出來(lái)的,或者小項(xiàng)目小公司出來(lái)的,對(duì)存儲(chǔ)肯定接觸的少了。

            所以,要想進(jìn)大公司,沒(méi)有豐富存儲(chǔ)過(guò)程經(jīng)驗(yàn),是不行的。

            那么什么時(shí)候才可以用存儲(chǔ)?對(duì)于數(shù)據(jù)量不是很大以及業(yè)務(wù)處理不是很復(fù)雜的小項(xiàng)目就無(wú)需要了么?
            錯(cuò)。 存儲(chǔ)過(guò)程不僅僅適用于大型項(xiàng)目,對(duì)于中小型項(xiàng)目,使用存儲(chǔ)過(guò)程也是非常有必要的。其威力和優(yōu)勢(shì)主要體現(xiàn)在:
              1.存儲(chǔ)過(guò)程只在創(chuàng)造時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過(guò)程都不需再重新編譯,而一般 SQL 語(yǔ)句每執(zhí)行一次就編譯一次,所以使用存儲(chǔ)過(guò)程可提高數(shù)據(jù)庫(kù)執(zhí)行速度。
              2.當(dāng)對(duì)數(shù)據(jù)庫(kù)進(jìn)行復(fù)雜操作時(shí)(如對(duì)多個(gè)表進(jìn)行 Update,Insert,Query,Delete 時(shí)),可將此復(fù)雜操作用存儲(chǔ)過(guò)程封裝起來(lái)與數(shù)據(jù)庫(kù)提供的事務(wù)處理結(jié)合一起使用。這些操作,如果用程序來(lái)完成,就變成了一條條的 SQL 語(yǔ)句,可能要多次連接數(shù)據(jù)庫(kù)。而換成存儲(chǔ),只需要連接一次數(shù)據(jù)庫(kù)就可以了。
              3.存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量。
              4.安全性高,可設(shè)定只有某此用戶才具有對(duì)指定存儲(chǔ)過(guò)程的使用權(quán)。
            posted @ 2010-08-20 15:36 eircQ 閱讀(281) | 評(píng)論 (0)編輯 收藏

               1. /***********************************/  
               2. /* 功能:求兩個(gè)單鏈表是否相交和交點(diǎn)*/  
               3. /* 轉(zhuǎn)載自CSDN博客                  * /  
               4. /* 日期:2010/03/29                */  
               5. /***********************************/  
               6.   
               7.   
               8. Node* find(Node* head1,Node* head2)     
               9. {     
              10.      Node *p1=head1,*p2=head2;     
              11.     int m=0,n=0;     
              12.     while(p1)//O(len1)     
              13.      {
              14.          p1=p1->next;     
              15.          m++;
              16.      }
              17.     while(p2)//O(len2)
              18.      {
              19.          p2=p2->next;     
              20.          n++;     
              21.      }
              22.      p1=head1;
              23.      p2=head2;
              24.           
              25.     if(m>n)
              26.      {     
              27.         for(i=0;i<m-n;i++)     
              28.              p1=p1->next;     
              29.      }
              30.     else
              31.      {
              32.         for(i=0;i<n-m;i++)
              33.                p2=p2->next;
              34.      }//O(abs(len1-len2))
              35.     while(p1!=p2)
              36.      {
              37.          p1=p1->next;
              38.          p2=p2->next;     
              39.      }//O(min(len1,len2))     
              40.     return p1;
              41. }
            posted @ 2010-08-18 11:26 eircQ 閱讀(257) | 評(píng)論 (0)編輯 收藏

            ==========================
             功能:選擇排序(由小到大)
             返回:指向鏈表表頭的指針
            ==========================
            */

            /*
             選擇排序的基本思想就是反復(fù)從還未排好序的那些節(jié)點(diǎn)中,
             選出鍵值(就是用它排序的字段,我們?nèi)W(xué)號(hào)num為鍵值)最小的節(jié) 點(diǎn),
             依次重新組合成一個(gè)鏈表。

             我認(rèn)為寫鏈表這類程序,關(guān)鍵是理解:
             head存儲(chǔ)的是第一個(gè)節(jié)點(diǎn)的地址,head->next存儲(chǔ)的是第二個(gè)節(jié)點(diǎn)的地址;
             任 意一個(gè)節(jié)點(diǎn)p的地址,只能通過(guò)它前一個(gè)節(jié)點(diǎn)的next來(lái)求得。

            單向鏈表的選擇排序圖示:
            ---->[1]---->[3]---->[2]...----> [n]---->[NULL](原鏈表)
            head   1->next  3->next  2->next   n->next

            ---->[NULL](空鏈表)
            first
            tail

            ---->[1]---->[2]---->[3]...---->[n]---->[NULL](排序后鏈表)
            first   1->next  2->next  3->next   tail->next

            圖10:有N個(gè)節(jié)點(diǎn)的鏈表選擇排序

            1、先在原鏈表中找最小的,找到一個(gè)后就把它放到另一個(gè)空的鏈表中;
            2、空鏈表中安放第一個(gè)進(jìn)來(lái)的節(jié)點(diǎn),產(chǎn)生一個(gè)有序鏈表,并且讓它在原鏈 表中分離出來(lái)(此時(shí)要注意原鏈表中出來(lái)的是第一個(gè)節(jié)點(diǎn)還是中間其它節(jié)點(diǎn));
            3、繼續(xù)在原鏈表中找下一個(gè)最小的,找到后把它放入有序鏈表的尾指針的 next,然后它變成其尾指針;
            */
            struct student *SelectSort(struct student *head)
            {
             struct student *first; /*排列后有序鏈的表頭指針*/
             struct student *tail; /*排列后有序鏈的表尾指針*/
             struct student *p_min; /*保留鍵值更小的節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)的指針*/
             struct student *min; /*存儲(chǔ)最小節(jié)點(diǎn)*/
             struct student *p; /*當(dāng)前比較的節(jié)點(diǎn)*/
             
             first = NULL;
             while (head != NULL) /*在鏈表中找鍵值最小的節(jié)點(diǎn)。*/
             {
              /*注意:這里for語(yǔ)句就是體現(xiàn)選擇排序思想的地方*/
              for (p=head,min=head; p->next!=NULL; p=p->next) /*循環(huán)遍歷鏈表中的節(jié)點(diǎn),找出此時(shí)最小的節(jié)點(diǎn)。*/
              {  
               if (p->next->num < min->num) /*找到一個(gè)比當(dāng)前min小的節(jié)點(diǎn)。*/
               {
                p_min = p; /*保存找到節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn):顯然p->next的前驅(qū)節(jié)點(diǎn)是p。*/
                min = p->next; /*保存鍵值更小的節(jié)點(diǎn)。*/
               }
              }
             
              /*上面for語(yǔ)句結(jié)束后,就要做兩件事;一是把它放入有序鏈表中;二是根據(jù)相應(yīng)的條件判斷,安排它離開(kāi)原來(lái)的鏈表。*/
             
              /*第一件事*/
              if (first == NULL) /*如果有序鏈表目前還是一個(gè)空鏈表*/
              {
               first = min; /*第一次找到鍵值最小的節(jié)點(diǎn)。*/
               tail = min; /*注意:尾指針讓它指向最后的一個(gè)節(jié)點(diǎn)。*/
              }
              else /*有序鏈表中已經(jīng)有節(jié)點(diǎn)*/
              {
               tail->next = min; /*把剛找到的最小節(jié)點(diǎn)放到最后,即讓尾指針的next指向它。*/
               tail = min; /*尾指針也要指向它。*/
              } 

              /*第二件事*/
              if (min == head) /*如果找到的最小節(jié)點(diǎn)就是第一個(gè)節(jié)點(diǎn)*/
              {
               head = head->next; /*顯然讓head指向原h(huán)ead->next,即第二個(gè)節(jié)點(diǎn),就OK*/
              }
              else /*如果不是第一個(gè)節(jié)點(diǎn)*/
              {
               p_min->next = min->next; /*前次最小節(jié)點(diǎn)的next指向當(dāng)前min的next,這樣就讓min離開(kāi)了原鏈表。*/
              } 
             }

             if (first != NULL) /*循環(huán)結(jié)束得到有序鏈表first*/
             {
              tail->next = NULL; /*單向鏈表的最后一個(gè)節(jié)點(diǎn)的next應(yīng)該指向NULL*/
             }
             head = first;
             return head;
            }


            /*
            ==========================
             功能:直接插入排序(由小到大)
             返回:指向鏈表表 頭的指針
            ==========================
            */

            /*
             直接插入排序的基本思想就是假設(shè)鏈表的前面n-1個(gè)節(jié)點(diǎn)是已經(jīng)按鍵值
             (就是用它排序的字段,我們?nèi)W(xué)號(hào)num為鍵值)排好 序的,對(duì)于節(jié)點(diǎn)n在
             這個(gè)序列中找插入位置,使得n插入后新序列仍然有序。按照這種思想,依次
             對(duì)鏈表從頭到尾執(zhí)行一遍,就可以使無(wú)序鏈 表變?yōu)橛行蜴湵怼?
             
            單向鏈表的直接插入排序圖示:
            ---->[1]---->[3]----> [2]...---->[n]---->[NULL](原鏈表)
            head   1->next  3->next  2->next   n->next

            ---->[1]---->[NULL](從原鏈表中取第1個(gè)節(jié)點(diǎn)作為只有一個(gè)節(jié)點(diǎn)的有序鏈表)
            head
            圖11

            ---->[3]---->[2]...---->[n]---->[NULL](原鏈表剩下用于直接插入排序的節(jié)點(diǎn))
            first   3->next  2->next   n->next
            圖12

            ---->[1]---->[2]---->[3]...---->[n]---->[NULL](排序后鏈表)
            head   1->next  2->next  3->next   n->next

            圖13:有N個(gè)節(jié)點(diǎn)的鏈表直接插入排序

            1、先在原鏈表中以第一個(gè)節(jié)點(diǎn)為一個(gè)有序鏈表,其余節(jié)點(diǎn)為待定節(jié)點(diǎn)。
            2、從圖12鏈表中取節(jié)點(diǎn),到圖11鏈表中定位插入。
            3、上面 圖示雖說(shuō)畫了兩條鏈表,其實(shí)只有一條鏈表。在排序中,實(shí)質(zhì)只增加了一個(gè)用于指向剩下需要排序節(jié)點(diǎn)的頭指針first罷了。
               這一點(diǎn)請(qǐng)讀者務(wù)必搞清楚,要不然就可能認(rèn)為它和上面的選擇排序法一樣了。
            */
            struct student *InsertSort(struct student *head)
            {
             struct student *first; /*為原鏈表剩下用于直接插入排序的節(jié)點(diǎn)頭指針*/
             struct student *t; /*臨時(shí)指針變量:插入節(jié)點(diǎn)*/
             struct student *p; /*臨時(shí)指針變量*/
             struct student *q; /*臨時(shí)指針變量*/
             
             first = head->next; /*原鏈表剩下用于直接插入排序的節(jié)點(diǎn)鏈表:可根據(jù)圖12來(lái)理解。*/
             head->next = NULL; /*只含有一個(gè)節(jié)點(diǎn)的鏈表的有序鏈表:可根據(jù)圖11來(lái)理解。*/

             while (first != NULL) /*遍歷剩下無(wú)序的鏈表*/
             {
              /*注意:這里for語(yǔ)句就是體現(xiàn)直接插入排序思想的地方*/
              for (t=first, q=head; ((q!=NULL) && (q->num < t->num)); p=q, q=q->next); /*無(wú)序節(jié)點(diǎn)在有序鏈表中找插入的位置*/
             
              /*退出for循環(huán),就是找到了插入的位置*/
              /*注意:按道理來(lái)說(shuō),這句話可以放到下面注釋了的那個(gè)位置也應(yīng)該對(duì)的,但是就是不能。原因:你若理解了上面的第3條,就知道了。*/
              first = first->next; /*無(wú)序鏈表中的節(jié)點(diǎn)離開(kāi),以便它插入到有序鏈表中。*/
             
              if (q == head) /*插在第一個(gè)節(jié)點(diǎn)之前*/
              {
               head = t;   
              }
              else /*p是q的前驅(qū)*/
              {
               p->next = t;  
              }
              t->next = q; /*完成插入動(dòng)作*/
              /*first = first->next;*/
             }
             return head;
            }


            /*
            ==========================
             功能:冒泡排序(由小到大)
             返回:指向鏈表表頭的 指針
            ==========================
            */

            /*
             直接插入排序的基本思想就是對(duì)當(dāng)前還未排好序的范圍內(nèi)的全部節(jié)點(diǎn),
             自上而下對(duì)相鄰的兩個(gè)節(jié)點(diǎn)依次進(jìn)行比較和調(diào)整,讓鍵值 (就是用它排
             序的字段,我們?nèi)W(xué)號(hào)num為鍵值)較大的節(jié)點(diǎn)往下沉,鍵值較小的往
             上冒。即:每當(dāng)兩相鄰的節(jié)點(diǎn)比較后發(fā)現(xiàn)它們的排序與 排序要求相反時(shí),
             就將它們互換。


            單向鏈表的冒泡排序圖示:
            ---->[1]---->[3]---->[2]...----> [n]---->[NULL](原鏈表)
            head   1->next  3->next  2->next   n->next 

            ---->[1]---->[2]---->[3]...---->[n]---->[NULL](排序后鏈表)
            head   1->next  2->next  3->next   n->next

            圖14:有N個(gè)節(jié)點(diǎn)的鏈表冒泡排序

            任意兩個(gè)相鄰節(jié)點(diǎn)p、q位置互換圖示:
            假設(shè)p1->next指向p,那么顯然p1->next->next就指向q,
            p1->next->next->next 就指向q的后繼節(jié)點(diǎn),我們用p2保存
            p1->next->next指針。即:p2=p1->next->next,則 有:
            [  ]---->[p]---------->[q]---->[  ](排序前)
              p1->next  p1->next->next  p2->next
            圖15

            [  ]---->[q]---------->[p]---->[  ](排序后)

            圖16

            1、排序后q節(jié)點(diǎn)指向p節(jié)點(diǎn),在調(diào)整指向之前,我們要保存原p的指向節(jié)點(diǎn)地址,即:p2=p1->next->next;
            2、 順著這一步一步往下推,排序后圖16中p1->next->next要指的是p2->next,所以 p1->next->next=p2->next;
            3、在圖15中p2->next原是q發(fā)出來(lái)的指向,排序后圖16中 q的指向要變?yōu)橹赶騪的,而原來(lái)p1->next是指向p的,所以p2->next=p1->next;
            4、在圖15中 p1->next原是指向p的,排序后圖16中p1->next要指向q,原來(lái)p1->next->next(即p2)是指向q 的,所以p1->next=p2;
            5、至此,我們完成了相鄰兩節(jié)點(diǎn)的順序交換。
            6、下面的程序描述改進(jìn)了一點(diǎn)就是記錄了每次最后一 次節(jié)點(diǎn)下沉的位置,這樣我們不必每次都從頭到尾的掃描,只需要掃描到記錄點(diǎn)為止。
               因?yàn)楹竺娴亩家呀?jīng)是排好序的了。
            */
            struct student *BubbleSort(struct student *head)
            {
             struct student *endpt; /*控制循環(huán)比較*/
             struct student *p; /*臨時(shí)指針變量*/
             struct student *p1;
             struct student *p2;

             p1 = (struct student *)malloc(LEN);
             p1->next = head; /*注意理解:我們?cè)黾右粋€(gè)節(jié)點(diǎn),放在第一個(gè)節(jié)點(diǎn)的前面,主要是為了便于比較。因?yàn)榈谝粋€(gè)節(jié)點(diǎn)沒(méi)有前驅(qū),我們不能交換地址。*/
             head = p1; /*讓head指向p1節(jié)點(diǎn),排序完成后,我們?cè)侔裵1節(jié)點(diǎn)釋放掉*/

             for (endpt=NULL; endpt!=head; endpt=p) /*結(jié)合第6點(diǎn)理解*/
             {
              for (p=p1=head; p1->next->next!=endpt; p1=p1->next)
              {
               if (p1->next->num > p1->next->next->num) /*如果前面的節(jié)點(diǎn)鍵值比后面節(jié)點(diǎn)的鍵值大,則交換*/
               {
                p2 = p1->next->next; /*結(jié)合第1點(diǎn)理解*/
                p1->next->next = p2->next; /*結(jié)合第2點(diǎn)理解*/
                p2->next = p1->next; /*結(jié)合第3點(diǎn)理解*/
                p1->next = p2; /*結(jié)合第4點(diǎn)理解*/
                p = p1->next->next; /*結(jié)合第6點(diǎn)理解*/
               }
              }
             }

             p1 = head; /*把p1的信息去掉*/
             head = head->next; /*讓head指向排序后的第一個(gè)節(jié)點(diǎn)*/
             free(p1); /*釋放p1*/
             p1 = NULL; /*p1置為NULL,保證不產(chǎn)生“野指針”,即地址不確定的指針變量*/

             return head;
            }


            /*
            ==========================
             功能:插入有序鏈表的某個(gè)節(jié)點(diǎn)的后面(從小到大)
             返 回:指向鏈表表頭的指針
            ==========================
            */

            /*
            有序鏈表插入節(jié)點(diǎn)示意圖:

            ---->[NULL](空有序鏈表)
            head

            圖18:空有序鏈表(空有序鏈表好解決,直接讓head指向它就是了。)

            以下討論不為空的有序鏈表。
            ---->[1]---->[2]---->[3]...----> [n]---->[NULL](有序鏈表)
            head   1->next  2->next  3->next   n->next

            圖18:有N個(gè)節(jié)點(diǎn)的有序鏈表

            插入node節(jié)點(diǎn)的位置有兩種情況:一是第一個(gè)節(jié)點(diǎn)前,二是其它節(jié)點(diǎn)前或后。

            ---->[node]---->[1]---->[2]---->[3]...---->[n]---->[NULL]
            head  node->next  1->next  2->next  3->next   n->next

            圖19:node節(jié)點(diǎn)插在第一個(gè)節(jié)點(diǎn)前

            ---->[1]---->[2]---->[3]...---->[node]...---->[n]---->[NULL]
            head   1->next  2->next  3->next    node->next  n->next

            圖20:node節(jié)點(diǎn)插在其它節(jié)點(diǎn)后
            */
            struct student *SortInsert(struct student *head, struct student *node)
            {
             struct student *p; /*p保存當(dāng)前需要檢查的節(jié)點(diǎn)的地址*/
             struct student *t; /*臨時(shí)指針變量*/

             if (head == NULL) /*處理空的有序鏈表*/
             {
              head = node;
              node->next = NULL;
              n += 1; /*插入完畢,節(jié)點(diǎn)總數(shù)加1*/
              return head;
             }

             p = head; /*有序鏈表不為空*/
             while (p->num < node->num && p != NULL) /*p指向的節(jié)點(diǎn)的學(xué)號(hào)比插入節(jié)點(diǎn)的學(xué)號(hào)小,并且它不等于NULL*/
             {
              t = p; /*保存當(dāng)前節(jié)點(diǎn)的前驅(qū),以便后面判斷后處理*/
              p = p->next; /*后移一個(gè)節(jié)點(diǎn)*/
             }
             
             
             if (p == head)  /*剛好插入第一個(gè)節(jié)點(diǎn)之前*/
             {
              node->next = p;
              head = node;    
             }
             else /*插入其它節(jié)點(diǎn)之后*/
             { 
              t->next = node; /*把node節(jié)點(diǎn)加進(jìn)去*/
              node->next = p; 
             }
             n += 1; /*插入完畢,節(jié)點(diǎn)總數(shù)加1*/
             
             return head;
            }

            /*

            測(cè)試代碼如下:

            */

            /*測(cè)試SelectSort():請(qǐng)編譯時(shí)去掉注釋塊*/

             /*
             head = SelectSort(head);
             Print(head);
             */
             
             /*測(cè) 試InsertSort():請(qǐng)編譯時(shí)去掉注釋塊*/

             /*
             head = InsertSort(head);
             Print(head);
             */

             /*測(cè)試BubbleSort():請(qǐng)編譯時(shí)去掉注釋塊*/

             /*
             head = BubbleSort(head);
             Print(head);
             */

             /*測(cè)試SortInsert():上面創(chuàng)建鏈表,輸入節(jié)點(diǎn)時(shí)請(qǐng)注意學(xué)號(hào)num從小到大的順序。請(qǐng)編譯時(shí)去掉注釋塊*/

             /*
             stu = (struct student *)malloc(LEN);
             printf("\nPlease input insert node -- num,score: ");
             scanf("%ld,%f",&stu->num,&stu->score);
             head = SortInsert(head,stu);
             free(stu);
             stu = NULL;
             Print(head);
             */


            posted @ 2010-08-12 16:29 eircQ 閱讀(1848) | 評(píng)論 (2)編輯 收藏

            1、不說(shuō)"不可能";
            2、凡事第一反應(yīng): 找方法,不找借口;
            3、遇到挫折對(duì)自己說(shuō)聲:太好了,機(jī)會(huì)來(lái)了;
            4、不說(shuō)消極的話,不落入消極的情緒,一旦發(fā)生立即正面處理;
            5、凡事先訂立目標(biāo);
            6、行動(dòng)前,預(yù)先做計(jì)劃;
            7、工作時(shí)間,每一 分、每一秒做有利于生產(chǎn)的事情;
            8、隨時(shí)用零碎的時(shí)間做零碎的 事情;
            9、守時(shí);
            10、寫點(diǎn)日記,不要太依*記憶;
            11、隨時(shí)記錄想到的靈感;
            12、把重要的觀念、方法寫下來(lái),隨時(shí)提示自己;
            13、走路比平時(shí)快30%,肢體語(yǔ)言健康有力,不懶散、萎靡;
            14、每天出門照鏡子,給自己一個(gè)自信的微笑;
            15、 每天自我反省一次;
            16、每天堅(jiān)持一次運(yùn)動(dòng);
            17、聽(tīng)心跳一分鐘,在做重要的事情,疲勞時(shí),緊張時(shí),煩躁時(shí)。。。。
            18、開(kāi)會(huì)做前排;
            19、微笑;
            20、用心傾聽(tīng),不打斷對(duì)方的 話;
            21、說(shuō)話有力,感覺(jué)自己的聲音能產(chǎn)生感染力的磁場(chǎng);
            22、說(shuō)話之前,先考慮一下對(duì)方的感覺(jué);
            23、每天有意識(shí)贊美別人三次以上;
            24、即使表示感謝,如果別人幫助了你的話;
            25、控制住不要讓自己作出為自己辯護(hù)的第一反應(yīng);
            26、不用訓(xùn)斥、指責(zé)的口吻與別人說(shuō)話;
            27、每天做一件"分外事";
            28、不關(guān)任何方面,每天必須至少做一次"進(jìn)步一點(diǎn)點(diǎn)",并且有意識(shí)的提高;
            29、每天提前15分上班,推遲30分下班;
            30、每天下班前5分鐘做一下今天的整理工作;
            31、定期存錢;
            32、節(jié)儉;
            33、時(shí)常運(yùn)用"頭腦風(fēng)暴", 利用腦力激蕩提升自己創(chuàng)新能力;
            34、恪守誠(chéng)信;
            35、學(xué)會(huì)原諒。


            posted @ 2010-08-12 14:00 eircQ 閱讀(205) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共4頁(yè): 1 2 3 4 
            国产精品无码久久综合| 亚洲中文字幕无码久久综合网| 性欧美大战久久久久久久久| 久久99精品久久久久久hb无码| 国产精品久久影院| 一本一本久久A久久综合精品| 蜜臀av性久久久久蜜臀aⅴ| 久久久久国产| 久久综合给合久久狠狠狠97色| 国产一区二区精品久久| 国产精品亚洲综合久久| 久久精品二区| 久久精品中文字幕无码绿巨人 | 国产精品午夜久久| 久久99精品久久只有精品 | 亚洲国产综合久久天堂| 99久久99久久精品国产| 国产成人精品久久二区二区| 亚洲国产精品无码久久青草| 99久久久精品| 久久亚洲美女精品国产精品| 久久婷婷午色综合夜啪| 久久国产热这里只有精品| 久久久久成人精品无码中文字幕| 无码乱码观看精品久久| 久久久久久国产精品免费免费 | 狠狠88综合久久久久综合网| 日产久久强奸免费的看| 7国产欧美日韩综合天堂中文久久久久| 久久天天躁狠狠躁夜夜不卡| 婷婷国产天堂久久综合五月| 青青草原综合久久| 91精品国产91久久久久久蜜臀| 欧洲精品久久久av无码电影| 久久精品极品盛宴观看| 亚洲v国产v天堂a无码久久| 久久精品成人免费观看97| 久久精品国产亚洲精品| 久久精品国产72国产精福利| 欧洲国产伦久久久久久久| 少妇被又大又粗又爽毛片久久黑人 |