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

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

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

    Energy of Love  
    日歷
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567
    統(tǒng)計(jì)
    • 隨筆 - 70
    • 文章 - 0
    • 評論 - 80
    • 引用 - 0

    導(dǎo)航

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     

    /**
    *作者:張榮華(ahuaxuan)
    *2007-8-15
    *轉(zhuǎn)載請注明出處及作者
    */

    前兩天在看Spring內(nèi)置的攔截器的時(shí)候,發(fā)現(xiàn)了一個(gè)之前沒有注意的類:org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor,好奇心促使我上網(wǎng)查了一下這個(gè)jamon。大概看了一下之后發(fā)現(xiàn)這個(gè)玩意還真挺好用的而且挺重要的,而且現(xiàn)在國內(nèi)對它的介紹也很少,所以寫了一篇文章和大家分享。

    一,Jamon簡介:
    Jamon的全名是:Java Application Monitor。它是一個(gè)小巧的,免費(fèi)的,高性能的,線程安全的性能監(jiān)測工具。它可以用來測定系統(tǒng)的性能瓶頸,也可以用來監(jiān)視用戶和應(yīng)用程序之間的交互情況。 Jamon主要是用來檢測jee的應(yīng)用程序。它最新的版本是2.1,可以用在1.4以上的jdk上。

    二,將jamon導(dǎo)入到你的應(yīng)用程序中去
    首先下載jamon的開發(fā)包,見我的附件,同時(shí)你也可以去Sourceforge上自己下載。Sourceforge的下載地址為http://jamonapi.sourceforge.net。解壓之后可以得到一個(gè)jar包和一個(gè)war包。jar包是自己會用到的,而war包是一個(gè)例子(不要小看這個(gè)例子,待會也要把它導(dǎo)入到項(xiàng)目中)。把war包之間丟到服務(wù)器上,訪問:localhost:8080/jamon就可以看到這個(gè)例子了,這個(gè)例子是一個(gè)簡單的性能監(jiān)控系統(tǒng)。

    接著把例子中的所有的包都導(dǎo)入到項(xiàng)目中,并把war包中的jsp和images還有css都考到項(xiàng)目中,比如新建一個(gè)目錄叫monitor(它和WEB-INF是同級目錄)。

    三,正確配置自己的應(yīng)用
    我們在性能監(jiān)測的時(shí)候最監(jiān)測的就是頁面的訪問率和類中方法的訪問率。所以在這一部分主要講解一下如何監(jiān)測自己的頁面和類中方法的訪問。

    1, 檢測自己的頁面訪問率
    首先我們需要在web.xml中添加一個(gè)filter,這個(gè)filter就是用來判斷哪些頁面需要被監(jiān)視的,如下所示:
    Java代碼 復(fù)制代碼
    1. <filter>   
    2.         <filter-name>JAMonFilter</filter-name>   
    3.         <filter-class>com.easywebwork.filter.EasyPageMonFilter</filter-class>   
    4.     </filter>   
    5.     <filter-mapping>   
    6.         <filter-name>JAMonFilter</filter-name>   
    7.         <url-pattern>/*</url-pattern>   
    8.     </filter-mapping>  
    接下來我們看看這個(gè)filter的寫法:
    Java代碼 復(fù)制代碼
    1. /**  
    2.  * @author 張榮華(ahuaxuan)  
    3.  *  
    4.  * @since 2007-8-13  
    5.  */  
    6. public class PageMonFilter extends JAMonFilter{   
    7.   
    8.     private static final long serialVersionUID = 5746197114960908454L;   
    9.   
    10.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {   
    11.          Monitor allPages = MonitorFactory.start(new MonKeyImp("org.easywebwork.allPages",getURI(request),"ms."));   
    12.          //這里就是我們要監(jiān)視的所有的頁面的配置   
    13.          Monitor monitor = MonitorFactory.start(getURI(request));   
    14.          //這里就是我們要監(jiān)視的某個(gè)頁面的配置   
    15.          try {   
    16.           filterChain.doFilter(request, response);   
    17.          } finally {   
    18.           monitor.stop();   
    19.           allPages.stop();   
    20.          }   
    21.        }   
    22.   
    23.        protected String getURI(ServletRequest request) {   
    24.          if (request instanceof HttpServletRequest) {   
    25.            return ((HttpServletRequest) request).getRequestURI();   
    26.          }  else {   
    27.            return "Not an HttpServletRequest";   
    28.          }   
    29.        }   
    30.   
    31.        private FilterConfig filterConfig = null;   
    32.           
    33. }}  

    這個(gè)類看上去很簡單,其實(shí)也挺簡單的,就是得到uri,然后把它注冊到MonitorFactory類中。這樣只要我們?nèi)ピL問剛才創(chuàng)建的monitor目錄下的jsp就可以看到性能監(jiān)測頁面了。

    2, ,接下來我們看看在使用spring的情況下如何監(jiān)測一個(gè)bean的方法調(diào)用。Spring也提供了對Jamon的支持(spring支持的東西還真多啊),也就是文章開頭提出的那個(gè)攔截器,為了給我們的bean加上攔截器,我們在spring的applicationcontext配置文件中加入如下語句:
    Java代碼 復(fù)制代碼
    1. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   
    2.         <property name="beanNames">   
    3.             <list>   
    4.                 <value>userService</value>                 
    5.             </list>   
    6.         </property>   
    7.         <property name="interceptorNames">   
    8.             <list>   
    9.                 <value>jamonInterceptor</value>   
    10.             </list>   
    11.         </property>   
    12.     </bean>   
    13.        
    14.     <bean id="jamonInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor">   
    15. </bean>  

    上面這個(gè)是典型的spring的aop的配置,如果對spring的aop配置不了解的可以去看一下spring中文文檔,當(dāng)然如果不想了解的話即使直接把這段配置拷到自己的項(xiàng)目中也是可以直接使用的。

    還有一個(gè)步驟就是在你的log4j.properties中加入這句代碼:
    Java代碼 復(fù)制代碼
    1. log4j.logger.org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor = TRACE  

    如果沒有這一行,那么這個(gè)攔截器是不會把方法調(diào)用的信息向MonitorFactory注冊的。

    只需要這些步驟,userservice中的方法在調(diào)用的時(shí)候就可以被攔截,然后將其注冊到MonitorFactory中去了。

    所有的配置完成之后我們來看一下效果吧:
    http://www.javaeye.com/topics/download/b2bac96e-6c18-4340-b7e0-f84c7bb6adca從這個(gè)圖上我們可以看到,所有頁面被訪問的次數(shù),UserService中的getAllUsers被調(diào)用的次數(shù),最右邊的是訪問時(shí)間。這只是整個(gè)圖的一部分,當(dāng)然這個(gè)頁面中也包括每一個(gè)頁面被訪問的次數(shù)和第一次訪問的時(shí)間等等。下載附件運(yùn)行,就可以看到所有的頁面了。

    三,總結(jié)
    根據(jù)以上的步驟,我們就可以監(jiān)測我們的程序了,應(yīng)用程序中哪些頁面被訪問的多,哪些頁面被訪問的少,哪些方法被訪問的多,哪些方法被訪問的少,以及訪問高峰期集中在什么時(shí)間等等,有了這些參數(shù),我們更可以有針對性的對應(yīng)用程序進(jìn)行優(yōu)化了,比如說某個(gè)頁面訪問比較頻繁,我就可以用ehcache或oscache給這個(gè)頁面做一個(gè)緩存。如果某個(gè)方法的訪問比較頻繁那就看看這個(gè)方法能否進(jìn)一步優(yōu)化,是需要異步,還是需要緩存,還是需要其他等等,總之有了jamon可以給我們帶來更多的便捷,既可以讓我們知道我們的客戶的行為,也可以讓我們知道我們開發(fā)的程序的“能力”。

    其實(shí)本文提供的只是對頁面和方法調(diào)用的監(jiān)控,但是jamon可以提供更多功能,比如說sql語句的監(jiān)控等等,這就需要我們共同去發(fā)掘了。

    附件中包括了一個(gè)easywebwork的例子,我把jamon導(dǎo)入到這個(gè)例子工程中去,大家可以直接下載運(yùn)行觀看效果。Easywebwork是一個(gè)旨在減少webwork2.2.x系列的xml配置文件的項(xiàng)目,
    如果對這個(gè)主題感興趣請到
    http://www.javaeye.com/topic/91614
    http://www.javaeye.com/topic/93814
    參加討論。





    之前有一篇文章講到如何使用jamon來監(jiān)控請求以及方法得調(diào)用(原文地址見:[url]http://www.javaeye.com/post/354575 [/url]),本文屬于其姊妹篇,使用jamon監(jiān)控系統(tǒng)的sql調(diào)用及其調(diào)用效率。

    需求:
    1我們知道在使用hibernate得時(shí)候,我們可以打開show sql選項(xiàng),可以直接查看sql語句調(diào)用的情況,那么當(dāng)我們使用其他持久技術(shù)的時(shí)候我們也需要這個(gè)功能怎么辦呢,沒有關(guān)系,jamon能夠幫我們做到。

    2 很多時(shí)候,不同的程序員會寫出不同的性能的sql,有時(shí)候可能會不小心或者因?yàn)椴恢蓝鴮懗鲂阅芎懿畹膕ql,我自己曾經(jīng)就發(fā)生過這種事情,在500w條數(shù)據(jù)的表里使用了一個(gè)limit來分頁,到后面,執(zhí)行一條sql都需要幾分鐘,諸如此類的時(shí)候可能大家都有碰到過,如果能有監(jiān)控sql性能的工具嵌在應(yīng)用里該多好,當(dāng)然有jamon就可以幫我們做到。

    對于jamon來說,每一個(gè)query的執(zhí)行之后的統(tǒng)計(jì)結(jié)果都會被保存下來,這些概要統(tǒng)計(jì)都以MonProxy-SQL開頭。這些統(tǒng)計(jì)中包括查詢執(zhí)行的時(shí)間,有比如平均時(shí)間,執(zhí)行總時(shí)間,最小執(zhí)行時(shí)間,最大執(zhí)行時(shí)間,這些東西難道不是我們正想要的嗎。

    那么讓我們開始吧,我們知道,這些query執(zhí)行的統(tǒng)計(jì)應(yīng)該是在connection中被統(tǒng)計(jì)的,也就是說我們要代理一般的connection,而connection又是由datasource產(chǎn)生的,所以我們可以代理datasource,說干就干。

    一個(gè)datasource接口中關(guān)于connection的方法只有兩個(gè):
    Java代碼 復(fù)制代碼
    1. /**  
    2.    * <p>Attempts to establish a connection with the data source that  
    3.    * this <code>DataSource</code> object represents.  
    4.    *  
    5.    * @return  a connection to the data source  
    6.    * @exception SQLException if a database access error occurs  
    7.    */  
    8.   Connection getConnection() throws SQLException;   
    9.          
    10.   /**  
    11.    * <p>Attempts to establish a connection with the data source that  
    12.    * this <code>DataSource</code> object represents.  
    13.    *  
    14.    * @param username the database user on whose behalf the connection is   
    15.    *  being made  
    16.    * @param password the user's password  
    17.    * @return  a connection to the data source  
    18.    * @exception SQLException if a database access error occurs  
    19.    * @since 1.4  
    20.    */  
    21.   Connection getConnection(String username, String password)    
    22.     throws SQLException;  

    也就是說我們只要override這兩個(gè)方法即可。
    根據(jù)這個(gè)思路我寫了以下代碼:
    Java代碼 復(fù)制代碼
    1. /**  
    2.  * @author ahuaxuan(aaron zhang)  
    3.  * @since 2008-2-25  
    4.  * @version $Id$  
    5.  */  
    6. public class MonitorDataSource implements DataSource {   
    7.     public DataSource realDataSource;   
    8.   
    9.     public void setRealDataSource(DataSource realDataSource) {   
    10.         this.realDataSource = realDataSource;   
    11.     }   
    12.   
    13.     public DataSource getRealDataSource() {   
    14.         return realDataSource;   
    15.     }   
    16.     public Connection getConnection() throws SQLException {   
    17. //表示由jamon來代理realDataSource返回的Connection   
    18.         return MonProxyFactory.monitor(realDataSource.getConnection());   
    19.     }   
    20.   
    21.     public Connection getConnection(String username, String password)   
    22.             throws SQLException {   
    23. //表示由jamon來代理realDataSource返回的Connection   
    24.   
    25.         return MonProxyFactory.monitor(realDataSource.getConnection(username,   
    26.                 password));   
    27.     }   
    28. }  

    顯然這個(gè)一個(gè)代理模式。接下來就是生成這個(gè)代理類,我是在spring中注冊了這么一個(gè)類:
    Java代碼 復(fù)制代碼
    1. <bean id="writeMonitorDataSource" class="org.ahuaxuan.MonitorDataSource" destroy-method="close">   
    2.         <property name="realDataSource" ref="writeDataSource"/>   
    3.     </bean>  


    writeMonitorDataSource 所依賴的writeDataSource就是我們真正配置的datasource,比如:
    Java代碼 復(fù)制代碼
    1. <bean id="writeDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   
    2.         <property name="driverClassName">   
    3.             <value>${jdbc.driverClassName}</value>   
    4.         </property>   
    5.         <property name="url">   
    6.             <value>${jdbc.url}</value>   
    7.         </property>   
    8.         <property name="username">   
    9.             <value>${jdbc.username}</value>   
    10.         </property>   
    11.         <property name="password">   
    12.             <value>${jdbc.password}</value>   
    13.         </property>   
    14.         <property name="maxActive">   
    15.             <value>${jdbc.maxActive}</value>   
    16.         </property>   
    17.         <property name="maxIdle">   
    18.             <value>${jdbc.maxIdle}</value>   
    19.         </property>   
    20.         <property name="maxWait">   
    21.             <value>${jdbc.maxWait}</value>   
    22.         </property>   
    23. </bean>  

    好了,那么在使用datasource的時(shí)候,我們應(yīng)該用哪個(gè)呢,當(dāng)然是writeMonitorDataSource這個(gè)里,我們可以把它注入給jdbcTemplate,或者sessionfactory,或者其他需要用到datasource的地方。

    到這里,就一切準(zhǔn)備完畢了,我們可以看看我們sql語句的執(zhí)行效率了(這個(gè)頁面的地址為sql.jsp):
    見圖1
    當(dāng)然要我們的應(yīng)用能夠顯示這個(gè)頁面,我們需要把jamon的一組頁面拷到我們的應(yīng)用中,這一組頁面包含在我提供下載的包中,最新的jamon版本是2.7。

    我們可以看到id為153的那條sql語句執(zhí)行了78ms,我要去看看這條sql語句是不是有點(diǎn)什么問題或者是否有優(yōu)化的可能性。

    當(dāng)然,剛才說到每一條sql語句都是有統(tǒng)計(jì)平均時(shí)間,最大最小執(zhí)行時(shí)間等等,沒錯(cuò),在另外一個(gè)頁面jamonadmin.jsp上就包含這些內(nèi)容
    見圖2
          

    上面的圖片代表hits表示執(zhí)行次數(shù),avg表示sql執(zhí)行的平均時(shí)間,后面的min和max表示sql執(zhí)行的最小耗時(shí)和最大耗時(shí)。從這里我們能夠更直觀的看到我們每條sql語句執(zhí)行的情況。很有用的一個(gè)功能。

    而且在上面那兩個(gè)頁面上,我們還可以選擇把sql執(zhí)行的結(jié)果導(dǎo)出來,可以導(dǎo)成xml或excel格式。

    總結(jié):使用jamon來監(jiān)控我們的sql語句我覺得很有使用意義,而且使用jamon對我們的應(yīng)用來說完全是松耦合的,根本不需要更改我們的業(yè)務(wù)邏輯代碼,完全是可插拔的,我們也可以開發(fā)時(shí)使用jamon,部署時(shí)拔掉jamon。有了它能夠使一些程序員能夠更多一點(diǎn)的關(guān)注自己所寫的sql的效率,當(dāng)然如果之前開發(fā)的時(shí)候沒有使用jamon也沒有關(guān)系,即使上線后也可以查看一下sql語句是否有問題,比如哪些sql語句執(zhí)行得比較頻繁,是否存在給其做緩存得可能性等等。總之使用jamon在應(yīng)用程序中來監(jiān)控我們得sql語句具有很強(qiáng)得實(shí)用意義,

    再次總結(jié):jamon,很好,很強(qiáng)大。
    posted @ 2010-07-28 16:06 不高興 閱讀(2076) | 評論 (0)編輯 收藏
     
    我在解析XML文件中出現(xiàn)如下錯(cuò)誤:

    org.xml.sax.SAXParseException: The reference to entity "Stars" must end with the  ';' delimiter.

    經(jīng)查實(shí)發(fā)現(xiàn),xml文件里有&的字眼

    把其中的"&"轉(zhuǎn)義字符&amp; 代替,就OK了

    posted @ 2010-06-01 13:42 不高興 閱讀(1008) | 評論 (2)編輯 收藏
     
            var check=function(e){
    e=e||window.event;
    if((e.which||e.keyCode)==116 || (e.ctrlKey && (e.which||e.keyCode)==82)){
    if(e.preventDefault){
    e.preventDefault();
    }
    else{
    event.keyCode = 0;
    e.returnValue=false;
    }
    }
    }
    if(document.addEventListener){
      document.addEventListener("keydown",check,false);
    }
    else{
      document.attachEvent("onkeydown",check);
    }
    posted @ 2010-05-31 20:48 不高興 閱讀(717) | 評論 (0)編輯 收藏
     
    function inti(){
     var temp="6668913&dflkewiofsdlfhewjl";
     
    var ByteCount =0;
     for (i=0;i<temp.length;i++){
      ByteCount  = temp.charCodeAt(i);
      if(ByteCount.length==1){
           ByteCount  ="0"+ByteCount 
      }
      ByteCount  = ByteCount.toString(16).toUpperCase();
      document.getElementById('result').innerHTML +=ByteCount ;
      }
    }
    posted @ 2010-05-27 15:39 不高興 閱讀(4340) | 評論 (2)編輯 收藏
     

    1. Java語言基礎(chǔ)

    談到Java語言基礎(chǔ)學(xué)習(xí)的書籍,大家肯定會推薦Bruce Eckel的《Thinking in Java》。它是一本寫的相當(dāng)深刻的技術(shù)書籍,Java語言基礎(chǔ)部分基本沒有其它任何一本書可以超越它。該書的作者Bruce Eckel在網(wǎng)絡(luò)上被稱為天才的投機(jī)者,作者的《Thinking in C++》在1995年曾獲SoftwareDevelopment Jolt Award最佳書籍大獎(jiǎng),《Thinking in Java》被評為1999年Java World“最愛讀者歡迎圖書”,并且贏得了編輯首選圖書獎(jiǎng)。作者從1986年至今,已經(jīng)發(fā)表了超過150篇計(jì)算機(jī)技術(shù)文章,出版了6本書(其中4本是關(guān) 于C++的),并且在全世界做了數(shù)百次演講。他是《Thinking in Java》、《Thinking in C++》、《C++ Inside & Out》《Using C++》和《Thinking in Patterns》的作者,同時(shí)還是《Black Belt C++》文集的編輯。他的書被讀者稱為“最好的Java參考書……絕對讓人震驚”;“購買Java參考書最明智的選擇”;“我見過的最棒的編程指南”。作 者的非凡才華,極其跨越語言的能力,使作者被選為Java發(fā)展10年間與Java關(guān)系最密切的10個(gè)人物之一。

    《Thinking in Java》講述了Java語言的方方面面,很多Java語言的老手都評價(jià)“這是一本將Java語言講得相當(dāng)丑陋的書”。該書談及了java語言的很多細(xì)節(jié),每一個(gè)方面都是相當(dāng)深刻的。通過本書你可以看到“丑陋的”java語言。

    網(wǎng)絡(luò)上關(guān)于java語言講解的視頻很多很多,其中不凡有垃圾。《翁愷—JAVA語言》可能是你學(xué)習(xí)java語言基礎(chǔ)的唯一選擇,該講座基本按照 《Thinking in Java》這本書講解,其中不凡有翁老師的很多有意思的笑話。我很幸運(yùn)學(xué)習(xí)就是從此視頻開始的。內(nèi)容包括30講,我總共看了3遍。

    不過,對于初學(xué)者我不太推薦使用《Thinking in Java》,我比較推薦Prentice Hall PTR 的《Core Java 2》國內(nèi)稱為《Java 2 核心技術(shù)》,目前是第七版。網(wǎng)絡(luò)上大家都可以下載到電子版。Oreilly的《Java in a nutshell》也是一個(gè)不錯(cuò)的選擇。讀完以上兩本后,你可以看看翁愷老師的視頻,接著可以研究《Thinking in Java》了。


    2. Java數(shù)據(jù)結(jié)構(gòu)

    市面上關(guān)于Java數(shù)據(jù)結(jié)構(gòu)的書本身就很少很少。大致有APress 的《Java Collections》,Jones 和Bartlett 的《Data Structures in Java》、《Object-oriented Data Structures Using Java》以及Prentice Hall 出版的《Data Structures and Algorithms in Java》 (Dec 19, 2005)還有一本就是《Data Structures And Algorithms With Object-oriented Design Patterns In Java》。很幸運(yùn)我的第一本英文書就是APress 的《Java Collections》(本書在國內(nèi)可能根本就沒有中文版――只能下載英文版了),很不錯(cuò),講得很有條例、很簡單,是一本完完全全Java Collections API介紹的書籍,其中不凡有擴(kuò)展API的例子。這是我推薦你學(xué)習(xí)java數(shù)據(jù)結(jié)構(gòu)的唯一一本好書。其它的Jones 和Bartlett的那兩本國內(nèi)好像有一本中文版,想看你也可以看看。

    在學(xué)習(xí)完API后,你可以看看java.util包中對應(yīng)的類了。不過只有在學(xué)習(xí)過設(shè)計(jì)模式后你才有可能完全理解整個(gè)Java Collections Framework。Java Collections Framework使用了很多著名的設(shè)計(jì)模式如:迭代器(Iterator)模式,工廠方法模式、裝飾器模式、適配器模式等等。通過研究 java.util包中數(shù)據(jù)結(jié)構(gòu)的源代碼,你可以知道臭名昭著的Properties類的設(shè)計(jì)了,同時(shí)可能基本具備設(shè)計(jì)簡單的數(shù)據(jù)結(jié)構(gòu)的能力了。

    所謂學(xué)習(xí)無止境,學(xué)習(xí)完Sun提供了Java Collections Framework后,你可以研究Apche的另一個(gè)Java Collections Framework,很有意思哦。互為補(bǔ)充的兩個(gè)Framework。



    在大家學(xué)習(xí)、研究Java Collections之前,我提示一下Java Collections主要包括以下三部分:接口(Interface)、實(shí)現(xiàn)(Implemention)和算法(Algorithm)。

    1. 接口主要有List、Set、Queue和 Map。List 、Se t和Queue是 Collection接口的子接口。

    2. 實(shí)現(xiàn)主要是實(shí)現(xiàn)這些接口的具體類。如實(shí)現(xiàn)List接口的ArrayList、LinkedList、Stack和Vector;實(shí)現(xiàn)Set接口的 HashSet、TreeSet 和LinkedHashSet;實(shí)現(xiàn)Queue接口的PriorityQueue、SynchronousQueue等等;實(shí)現(xiàn)Map接口的 HashMap、TreeMap、Hashtable、Properties、WeakHashMap等等。

    3. 算法主要是由Arrays類和Collections類提供的,它是整個(gè)Java Collection Framework算法的核心。支持各種類型的排序,查找等常用操作。

    Java Collections中包含兩個(gè)版本的數(shù)據(jù)結(jié)構(gòu),主要是原先的支持同步的數(shù)據(jù)結(jié)構(gòu)和后來不支持同步的數(shù)據(jù)結(jié)構(gòu)。

    Java Collection Framework在使用Comparator和Comparable接口支持排序。同時(shí)提供新舊兩個(gè)版本的迭代器Iterator和Enumeraton,以及它們?nèi)绾无D(zhuǎn)換等等。

    在java.util包中的Obserable接口和Observer類是考察者模式的核心。

    ……


    3. Java IO

    市面上關(guān)于IO的書籍也僅僅只有Oreilly出版社的兩本,都是Elliotte Rusty Harold的著作。兩本書的風(fēng)格基本一致,推薦閱讀是第一版的《Jvava I/O》,講得比較淺顯,內(nèi)容相對比較集中,實(shí)例也很多。第二版今年5月國外才出版,很有幸我在網(wǎng)絡(luò)上下載了第二版,講得極其詳細(xì)――726頁的大塊頭(我化了兩個(gè)星期),這次將NIO和IO和在一起,還包括J2ME部分的,不過串口、并口通信部分好像類庫支持不夠,自己不能實(shí)際操作。

    與第一版的《Jvava I/O》一起的Oreilly還有一本《Jvava NIO》,也是很不錯(cuò)的哦。

    大家在依次閱讀完《Jvava I/O》以及《Jvava NIO》后,可以研究java.io包中的源代碼了。在大家研究源代碼前我給點(diǎn)提示:

    Java的io包主要包括:

    1. 兩種流:字節(jié)流(byte Stream)和字符流(character stream),這兩種流不存在所謂的誰代替誰、誰比誰高級之說,它們互為補(bǔ)充,只是側(cè)重點(diǎn)不同而已。

    2. 兩種對稱:1.字節(jié)流、字符流的對稱;2.輸入、輸出的對稱。

    3. 一個(gè)橋梁:將字節(jié)流轉(zhuǎn)變?yōu)樽址鞯腎nputStreamReader和OutputStreamWriter。

    其中必須注意:

    1. PipedInputStream和PipedOutputStrem是兩個(gè)比較有趣的類。

    2. 支持Buffered的流是我們經(jīng)常使用的類。

    3. 裝飾器(Decorator)模式在java最著名的應(yīng)用就是用于io的設(shè)計(jì)。仔細(xì)研究各個(gè)Filter流與具體流的關(guān)系,多看設(shè)計(jì)模式的書籍。相信你會有所所獲。

    4. 學(xué)習(xí)好io包,是研究net包,rmi包……的基礎(chǔ)哦!


    4 . Java數(shù)據(jù)庫

    數(shù)據(jù)庫的書籍太多太多了,也是太爛太爛了!這方面的書我基本都研究過,推薦的你就看看Apress的《JDBC Recipes A Problem Solution Approach 》很不錯(cuò),國外2005年底才出版,(國內(nèi)好像沒有中文版,不過出了中文版也不一定值得看――國內(nèi)經(jīng)常將國外的書翻譯得一塌糊涂、不堪入目)不過我們真的很幸運(yùn),網(wǎng)絡(luò)上有電子版的。值得一看。推薦我看的第一本比較滿意的――Wiley出版的《Java Database Bible》,講得很不錯(cuò)!Sun公司自己的關(guān)于JDBC API介紹的那一本《JDBC API Tutorial andRefernece》也不錯(cuò)。我第二本JDBC的就是研究的這套API。

    不過目前這些書都是一些相對比較浮淺的API應(yīng)用的書籍。有機(jī)會我會給大家?guī)斫榻BJDBC API以及JDBC實(shí)現(xiàn)內(nèi)部細(xì)節(jié)的書!我盡快努力,同時(shí)希望得到大家的支持!

    順便給學(xué)習(xí)JDBC的朋友一點(diǎn)提示:

    JDBC的學(xué)習(xí)和使用主要是這套API,其使用過程也是極其簡單,下面是使用JDBC的一般流程:

    1. 加載某個(gè)數(shù)據(jù)庫的驅(qū)動(dòng)(Driver類),通常使用Class.forName(“驅(qū)動(dòng)的類名“);

    2. 連接數(shù)據(jù)庫――

    Connection con = DriverManager.getConnection(url,username,password);

    3. 得到會話――Statement stmt = con.createStatement();

    4. 執(zhí)行操作――Result rs = stmt.executeQuery(“SQL查詢語句”);

    5. 處理結(jié)果――

    while(rs.next()){

    String col1 = rs.getString(1);

    ……

    }

    簡單吧!整個(gè)JDBC中可以變化的一般是:

    1. 可以由Connection對象創(chuàng)建Statement、PreparedStatement和CallableStatement創(chuàng)建三種類型的Statement。

    2. 可以創(chuàng)建多種類型的ResultSet:支持單向移動(dòng)和個(gè)自由移動(dòng);可更新的和不可更新的;支持不同等級的交易的…..

    3. 數(shù)據(jù)輸入的批處理。

    4. 結(jié)果集中特殊類型(Blob、Clob、Arrary和Ref、Struct)列的操作。

    5. 這些特殊類型的錄入數(shù)據(jù)庫。

    6. javax.sql包中特殊結(jié)果集(CachedRowSet、JdbcRowSet、WebRowSet)的操作。

    7. 其它的就是一個(gè)DataSource了,也很簡單!一個(gè)J2EE中的被管理對象

    簡單吧!相信大家很快就會征服JDBC。


    5. Java 網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程――一個(gè)神秘的、充滿挑戰(zhàn)的方向。不過在談Java網(wǎng)絡(luò)編程之前首先感謝Sun公司的開發(fā)人員,因?yàn)樗鼈兲觳诺脑O(shè)想,充滿智慧的架構(gòu),使廣大java程序員學(xué)習(xí)java網(wǎng)絡(luò)編程變得異常簡單。

    Java網(wǎng)絡(luò)編程方面的書,我推薦O'Reilly的《Java Network Programming》,目前已經(jīng)第三版了,以前的版本市面上肯定有!網(wǎng)絡(luò)上早有第三版的電子版,國外2004年出版,706頁哦!講得很全,比較深入,太深入的可能由于Sun有些東西沒有完全公開,所以也就不好講了,有興趣的可以下載看看!第二本還是O'Reilly 1998年出版的《Java distributed computing 》,基礎(chǔ)部分寫得比較詳細(xì),后面的實(shí)例還是值得研究的。

    在大家閱讀這些書之前,給大家一點(diǎn)提示:

    java網(wǎng)絡(luò)編程其實(shí)相對比較簡單,入門也很快很快。java網(wǎng)絡(luò)編程主要包括兩個(gè)部分:1.Socket;2.URL部分。不過第二部分也完全建立在第一部分的基礎(chǔ)上。

    1. Socket包括客戶端的Socket和服務(wù)器端的ServerSocket。還有就是DatagramSocket和DatagramPacket,它對應(yīng)于UDP通信協(xié)議。 總之,Socket部分是建立其它高級協(xié)議的基礎(chǔ)。

    2. URL類是一個(gè)網(wǎng)絡(luò)資源定位器,通常和具體的網(wǎng)絡(luò)協(xié)議如HTTP,F(xiàn)TP,Telnet……相關(guān)。通過該類可以連接網(wǎng)絡(luò)上的資源,通過其 openStream可以以io包中的流(InputStream)的形式讀取網(wǎng)絡(luò)資源;通過其OpenConnection方法,可以打開一個(gè)連接,在此連接上可以不僅可以完成讀的操作,還可以完成寫的操作。

    Java的網(wǎng)絡(luò)編程大體包括以上兩部分。網(wǎng)絡(luò)編程和IO以及多線程部分非常密切,在學(xué)習(xí)此部分前大家一定對這兩部分了解比較透徹。

    學(xué)習(xí)了以上部分你可以研究java.net 包中的與此相關(guān)的源代碼了!研究所有的源代碼還為時(shí)尚早。在整個(gè)net包中包含: ContentHandlerFactory、URLStreamHandlerFactory、URLStreamHandler、 URLClassLoader等輔助類,它們構(gòu)成了java.net網(wǎng)絡(luò)編程的框架,通過研究其源代碼,你不僅可以快速理解java.net包,還可以為 以后擴(kuò)展該包打下基礎(chǔ),甚至可以將此思維方式運(yùn)用到自己的項(xiàng)目中。

    到此為止你對java.net 包應(yīng)該才了解60%,還有一部分你可以使用JDecompiler之類的反編譯軟件打開你JDK安裝目錄下\jdkxxx\ jre\lib目錄中的rt.jar,用WinRAR之類的軟件打開它的sun.net包,反編譯所有的文件,它是URL類工作的細(xì)節(jié)。當(dāng)研究完該 sun.net包,你就會對整個(gè)網(wǎng)絡(luò)編程很熟悉很熟悉了。

    一切看起來我們已經(jīng)對網(wǎng)絡(luò)編程很精通了。其實(shí)不然,剛剛開始而已,要想深入,請繼續(xù)吧!網(wǎng)絡(luò)上很多優(yōu)秀的網(wǎng)絡(luò)編程庫甚至軟件可以為我們“添加功力”。如 Apache的HttpCore和HTTPConnection 是兩個(gè)和HTTP協(xié)議相關(guān)庫;JGroups是研究分布式通信、群組通信的必讀庫;接著我們可以研究P2P的軟件包,如Sun公司的JXTA,它可能是 java平臺點(diǎn)對點(diǎn)通信未來的標(biāo)準(zhǔn)哦!接著你可以研究成熟得不得了,使用極其廣泛得P2P軟件Azureus!www.sourceforge.net可以下載到!

    千里之行始于足下!Just do it !(目前我也只研究了net包,其它的會在不久的將來繼續(xù)深入。Sun公司因?yàn)槟承┰驔]有公開net的其它實(shí)現(xiàn)細(xì)節(jié),在其允許將其源代碼以文字的形式加 以研究,以及允許將其沒有公開的實(shí)現(xiàn)寫入書中時(shí),我很希望能出一本java網(wǎng)絡(luò)編程的書籍,以飧廣大讀者!!)
    6. Servlet和JSP

    Servlet、JSP的書也是滿地都是!值得推薦的也僅僅兩三本。實(shí)推Addison Wiley的《Servlets and JavaServer pages :The J2EE Technology Web Tier》,又是一本很厚的哦!國外2003年出版、784頁,講得比較全,例子也很多,特別是第八章Filter,舉了幾個(gè)不錯(cuò)的例子。其它所有我看到的關(guān)于Servlet和JSP的書都沒有如此深入的!(可能有我沒有看到而已)。O’reilly的《Java Servlet Programming》和《Java Server Pages》相對比較好懂一些,可以讀讀!

    在大家學(xué)習(xí)Servlet和Jsp之前我還是要提醒一下:

    本質(zhì)上說Servlet就是一個(gè)實(shí)現(xiàn)Servlet接口的、部署于服務(wù)器端的服務(wù)器端的程序罷了!它可以象寫其它任何java應(yīng)用程序一樣編寫,它可以操作數(shù)據(jù)庫、可以操作本地文件、可以連接本地EJB……編寫Servlet程序的一般流程為:

    1. 繼承一個(gè)HttpServlet類;

    2. 覆蓋其doGet、doPost方法;

    3. 在覆蓋方法的內(nèi)部操作方法參數(shù)HttpServletRequest和HttpServletResponse。

    4. 讀取請求利用HttpServletRequest。利用HttpServletRequest你可以操作Http協(xié)議的協(xié)議頭、可以得到請求的操作方法、可以得到請求的路徑、可以得到請求的字符串、以及和請求客戶相關(guān)的信息,更主要的你可以得到Cookie和HttpSession這兩個(gè)對象。

    5. 利用Cookie你可以操作“甜心”對象或者將其寫入HttpServletResponse中。

    6. 向客戶輸出信息可以使用HttpServletResponse。使用HttpServletResponse可以寫入各種類型的協(xié)議頭、可以增加Cookie、可以重定向其它URL、可以向客戶發(fā)送Http協(xié)議的狀態(tài)碼。

    7. 利用HttpSession在會話內(nèi)完成你想實(shí)現(xiàn)的任何功能。

    同時(shí)Servlet還提供了一些事件和事件監(jiān)聽器(簡單的觀察者模式而已)。還有就是過濾器(Filter)和包裝器(ServletRequestWrapper、ServletResponseWrapper)――簡單的流的使用和裝飾器模式的使用。

    學(xué)習(xí)Sevlet、JSP必然要部署到服務(wù)器中,記住通常文件部署的步驟和參數(shù)的設(shè)置以及在程序中如何使用就可以了。

    完全理解Servlet后,學(xué)習(xí)jsp相對比較容易了!Jsp完全建立在Servlet的基礎(chǔ)上,它是為了迎合那些喜歡在Html文檔中嵌入腳本(如:PHP之類的網(wǎng)頁編程語言)的程序員的需要罷了!學(xué)起來也相當(dāng)?shù)娜菀祝?br />
    一切看起來似乎那么的風(fēng)平浪靜,簡單好學(xué)!簡單的表象背后有其復(fù)雜的機(jī)理。要想對Servlet和Jsp徹底研究,你得研究Tomcat等開源軟件的具體實(shí)現(xiàn)。它無非就是一個(gè)服務(wù)器,在客戶利用網(wǎng)頁通過HTTP協(xié)議向服務(wù)器發(fā)送請求后,服務(wù)器將此HTTP請求轉(zhuǎn)化為相應(yīng)的 HttpServletRequest對象,調(diào)用你編寫的Servlet罷了,在你的Servlet中你肯定操作了此 HttpServletRequest了吧,同時(shí)操作了HttpServletResponse了吧,服務(wù)器就將此 HttpServletResponse按照HTTP協(xié)議的要求利用HTTP協(xié)議發(fā)送給你的瀏覽器了!在服務(wù)器端的Jsp網(wǎng)頁在被客戶請求后, Tomcat會利用編譯軟件,使用javax.servlet.jsp包中的模板,編譯此jsp文件,編譯后就是一個(gè)Servlet!以后的操作和 Servlet完全一樣哦!

    在Servlet和Jsp的基礎(chǔ)上出現(xiàn)了,所謂的高級技術(shù):JSTL,Struts……無非就是一些標(biāo)簽和MVC模式的使用。

    繼續(xù)前進(jìn)吧!勝利就在前方!!


    7. 多線程

    一個(gè)看起來很神秘,卻很容易上手、很難精通的方向!

    我推薦兩本我感覺很好的書籍。首先是我第一本能上手看的這方面的書,Sams 1998年出版的《Java Thread Programming》,寫得暴好,很容易讀懂,我有空還時(shí)常看當(dāng)時(shí)的筆記!要知道怎么好你自己看吧!第二本OReilly三次出版的《Java Threads》,最新是2004版,國內(nèi)好像有中文版,推薦你還是看英文版的吧!書中談到了與多線程相關(guān)的N個(gè)方向,如IO、Swing、 Collection等等。

    給大家一點(diǎn)提示吧!java類庫中與多線程相關(guān)的類不是很多,主要有:Thread、ThreadGroup以及ThreadLocal和 InheritableThreadLocal四個(gè)類和一個(gè)Runnable接口;關(guān)鍵字synchronize、volatile ;以及Object對象的wait、notify、notifyAll方法!

    1 Thread是多線程的核心類,提供了一系列創(chuàng)建和操作多線程的方法。

    2 ThreadGroup是一個(gè)管理Thread的工具類。

    3 ThreadLocal和InheritableThreadLocal為Thread提供了一個(gè)類似保險(xiǎn)箱功能的存儲線程對象的類!

    4 Runnable不用說了吧!

    5 synchronize是同步方法和同步塊的核心哦!多個(gè)線程調(diào)用此方法時(shí),只有一個(gè)線程可以使用此方法,其它方法阻塞,從而保證被操作對象內(nèi)部狀態(tài)完整性。某個(gè)線程調(diào)用帶有synchronize的方法或塊時(shí)會得到該對象的對象鎖,完成塊中的操作后釋放此對象鎖,從而其它對象可以繼續(xù)操作。

    6 wait、notify、notifyAll提供了有效的等待/通知機(jī)制。Java語言中每一個(gè)對象都有一個(gè)休息室,任何線程在其操作的對象的狀態(tài)不滿足 的情況下,在該對象的休息室中休息,釋放對象鎖;當(dāng)其它線程操作該對象后,喚醒休息室中的線程,它們再檢查條件,當(dāng)條件滿足后,執(zhí)行相應(yīng)的操作。

    多線程大致就這么多基礎(chǔ)的!簡單嗎!這對于一個(gè)真正的程序員應(yīng)該是不夠的,真正對多線程要有所掌握,請您研究java.util.concurrent包 吧!大師Doug Lea的作品,原先是一個(gè)開源的一致性編程的庫,后來被Sun公司并入java類庫。作者的網(wǎng)站上也有另外一個(gè)版本的該類庫!值得研究的好東西! Hibernation、OpenJMS等開源軟件都使用了此包!


    8. 設(shè)計(jì)模式

    談到設(shè)計(jì)模式很多人多會推薦GOF的那本,該書在Amzon上是五星級的推薦書籍。不過對于學(xué)習(xí)java沒多久的、特別是java初學(xué)者,我很不推薦這本書。主要是該書的例子基本都是C++的,很多細(xì)節(jié)沒有講述得足夠清楚。

    我給大家推薦的第一本是閻宏博士的《Java 與模式》,它是第一本中國人自己寫的關(guān)于設(shè)計(jì)模式的書籍,寫的比較有趣,融合了很多中華民族的文化和觀念,例子、類圖都比較多,且相對簡單!非常不錯(cuò)的入門書籍――又是大塊頭哦!

    其次我推薦Wiley出版社出版的《Pattern In Java》一套三本,我才看了第一本,好像第二本不怎么樣,第三本還不錯(cuò)!

    第三本是中文翻譯版的關(guān)于多線程模式的(很難得的中文翻譯版)中國鐵道出版社2003年出版的《Java多線程設(shè)計(jì)模式》,將多線程模式講得非常淺顯,配有大量的圖例,每章都有習(xí)題,最后有答案!我研究多線程模式就是由它開始的!

    第四本,今年出版的Head First系列的《Head First Design Pattern》,秉承Head First系列圖書的優(yōu)點(diǎn),大量的類圖、豐富的實(shí)例、有趣的注解,值得購買!

    其次在J2EE方向你可以研究閱讀Addison Wesley 2002年出版的《Patterns of Enterprise Application Architecture》,眾多大腕的作品,講企業(yè)消息集成的!Sun提供的《J2EE PATTERNS SL500》也很好!晚了推薦那一本Amzon 4星半的《Holub on patterns》,大師的作品,提供了,很值得研究的例子,不過對上面四本不是很熟悉的讀者,最好不要讀它!可能會讓你比較累!

    我學(xué)習(xí)設(shè)計(jì)模式經(jīng)過一段很曲折的路線,前前后后大約看了20本,閻宏博士的《Java 與模式》我看了4遍,還排除我第一次基本沒看懂的看!記得研一時(shí)老師給我們講了GOF的那本,作為選修課,我和它們計(jì)算機(jī)系的碩士、博士們一起,到最后一個(gè)班40-50個(gè)人,不超過3個(gè)人明白,我也沒有明白任何一點(diǎn)(基礎(chǔ)差吧――主要我對C++語言一點(diǎn)都不了解),憑我不伏輸?shù)男愿瘢艺J(rèn)為我對java語 言理解還可以,我就借了《Java 與模式》,結(jié)果還是基本沒看懂。很有幸的是讀研三時(shí),聽過了上交大饒若楠老師關(guān)于Java OOP語言的講座,我懂了組合書籍模式等三種設(shè)計(jì)模式后,對其它模式有了強(qiáng)烈的興趣和要征服它的愿望!工作后我買的第一本就是《Java 與模式》,第一遍花了2個(gè)月研究了這個(gè)1000多頁的大塊頭,后來第三遍15天左右就可以搞定,筆記記了一大本!從此一發(fā)不可收拾。

    選對書、埋頭研究。相信很快就會入門的!



    學(xué)習(xí)Java語言8個(gè)簡單的部分,這只是我們研究Java語言的開始!這些都懂了充其量一個(gè)java程序員而已,后面的路很長很長!我們可以繼續(xù)研究數(shù)據(jù)庫實(shí)現(xiàn)的源代碼、Servlet服務(wù)器的源代碼、RMI、EJB、JNDI、面向方面編程、重構(gòu)、ANT工具、Eclipse工具、Spring工具、 JBoss、JOnAS、Apache Geronimo等J2EE服務(wù)器!研究了這些你可能會成為一個(gè)出色的J2EE Architecture!你可以繼續(xù)研究剖析器、編譯器、JNODE(java寫的操作系統(tǒng))……



    感謝大家有此耐心,聽我羅羅嗦嗦大半天!感謝大家的閱讀,感謝群里的朋友!這篇文章主要應(yīng)群里朋友的呼聲――不知道如何選書、不知道從何看起!大半天的功夫完成趕此文章,字句上難免有失誤,同時(shí)由于能力有限不凡有錯(cuò)誤!請閱讀后批評指正!

    上面基本是我研究java語言的順序,以上書籍都是我閱讀過的,不存在替任何出版社宣傳的成分!有的方法可能不適合你,假如你能收獲一點(diǎn),兩點(diǎn)甚至更多,請你不要吝嗇推薦給你的朋友――共同學(xué)習(xí)!

    感謝大家的閱讀;感謝互聯(lián)網(wǎng)的設(shè)計(jì)者;感謝java的設(shè)計(jì)師;感謝www.open-open.com和www.sourceforge.net網(wǎng)站!

    posted @ 2010-01-17 01:16 不高興 閱讀(828) | 評論 (1)編輯 收藏
     

    上海,我的奮斗歲月(非常精彩)                     作者:藍(lán)色づ憂郁

    看了論壇里有的兄弟越來越多對現(xiàn)實(shí)不滿,工作壓力大,想起自己在上海這五年的經(jīng)歷,不由感慨頗多。這位兄弟的這些苦惱,曾幾何時(shí)也占據(jù)了我的頭腦,讓我痛苦不堪。然而,如今回
    首看來,這五年來也這是這些苦惱最終成為我前進(jìn)的機(jī)遇,讓我擁有了目前還算可以生活境遇-700萬身價(jià),對有些兄弟來說可能是微不足道,但是我想大多數(shù)朋友還可能,暫時(shí)沒有達(dá)到這個(gè)狀態(tài)---沒有半點(diǎn)炫耀的意思,我知道朋友們很多都會成功,會比我
    強(qiáng)得多---所以會對我的經(jīng)歷感興趣,我決定定下心來,好好寫點(diǎn)文字,希望不會讓朋
    友們失望。

    今天我的心里有一個(gè)想法更加清晰,那就是:愛,只有愛,才是一個(gè)男人成功的最好動(dòng)
    力、最合適的動(dòng)力。而絕不是自己的虛榮心,或者所謂的雄心壯志。作為一個(gè)男人,首
    要的一件事是你要有你的真正所愛。它會像原子彈一樣激發(fā)你的能力,讓你爆發(fā)無窮的
    動(dòng)力,上帝也會為你感動(dòng)。這樣的狀態(tài),就是每個(gè)人夢寐以求的狀態(tài)。
    朋友們,也許你們不同意我的看法,我們先不忙爭論,您先看看我的經(jīng)歷,看看是不是
    有道理。

    1,上海
    1999年中,我辭去了剛剛分配的國家機(jī)關(guān)的工作,從***來到了上海。當(dāng)時(shí)我躊躇滿
    志,認(rèn)為憑借自己的力量和努力一定能夠在這個(gè)大都市里站穩(wěn)腳跟,創(chuàng)下一片屬于自己
    的天空。

    我是1976年出生在***,***的日照和高原氣候,讓我的身材像白楊一樣挺拔,相貌雖
    不敢說英俊非凡,但也讓絕大多數(shù)人不討厭。我從小學(xué)習(xí)可以說是優(yōu)異的,大學(xué)考上了
    國家排名前5的重點(diǎn)大學(xué),當(dāng)時(shí)分配是98年,父親害怕工作難找,一定要我回去做個(gè)清
    閑穩(wěn)定的機(jī)關(guān)公務(wù)員。我覺得自己也可以歷練以下為人處事,就回到了***自治區(qū)政
    府。工作了幾個(gè)月后,和本部門的同事混得極熟,喝酒、吹牛、查顏觀色的本領(lǐng)提高飛
    快,但是覺得工作實(shí)在是研磨青春,浪費(fèi)生命,就決定辭職,去上海打拼一下。呵呵,
    現(xiàn)在我的同學(xué)在***的也都混得很好。這是個(gè)性不同了。
    我的專業(yè)是經(jīng)濟(jì)管理類的,當(dāng)時(shí)不懂事,自視頗高,到了上海我就傻了:這種人企業(yè)根
    本不要,他們要的是有一定技能的人,能干事的人,像我這種實(shí)際工作沒做過的人根本
    沒人提供培訓(xùn)的機(jī)會。同學(xué)和朋友一個(gè)個(gè)工作都找到了,就我搞不成低不就的,眼看帶
    來的錢慢慢要見底了,這心里越來越急-難道這里還真沒有我的用武之地了嗎?
    3個(gè)月后,我終于找到了一個(gè)讓自己暫時(shí)滿意的工作,但遠(yuǎn)遠(yuǎn)不是自己的專業(yè)了。我這
    個(gè)人興趣比較廣泛,精力也充沛,大學(xué)里涉獵很多領(lǐng)域,想法也多,文字功底還可以。
    正好有一個(gè)廣告公司招策劃文案,我覺得自己能行,結(jié)果一試,公司面試者說我雖然沒
    有做過,但是思路和功底還不錯(cuò),再說畢業(yè)的學(xué)校名聲不錯(cuò),就留下我了---現(xiàn)在我還
    是很感激那位前輩,后面的工作也證明了他的眼光。月薪3500,還好,生活問題暫時(shí)解
    決了。

    很快我的生活進(jìn)入了工作狀態(tài),我覺得很快樂。2個(gè)月過后,一件讓我猝不及防發(fā)生
    了,沒想到由此開始,我的生活發(fā)生了這么大的變化。

    2,邂逅
    上班后我對工作極其熱忱,也非常努力,一兩個(gè)月后我已經(jīng)做過了3個(gè)Case,客戶和老
    板還有上司都比較滿意。當(dāng)時(shí)我一則是剛從機(jī)關(guān)出來,一心想好好干個(gè)工作,二則是想
    報(bào)公司識人用人之恩,做事情時(shí)即不惜努力,又謙虛肯學(xué),另外因?yàn)榻?jīng)過機(jī)關(guān)的歷練,
    做人上路又大方,經(jīng)常請同事喝酒吃飯,他們也愿意幫我,所以很快上手成為部門的骨
    干。到現(xiàn)在我還在勸年輕的朋友們,工作是應(yīng)該用全身心來投入的,這項(xiàng)投入從理財(cái)?shù)?
    角度說對任何人來說都不會虧本。呵呵,不過,那段時(shí)間存款為0。
    有一天我去上班,那天早上下小雨,從住的地方要打車去公司那里,要車的人多,根本
    打不到車。剛剛輪到我就要上車的時(shí)候,一個(gè)女孩子從路邊沖過來,頭發(fā)已經(jīng)淋得不像
    話了,拉開后門就要上車。我回頭剛想出口請她下車,看看她淋得那樣,再說讓一個(gè)女
    孩子出去我還說真不出來,她也好像也實(shí)在沒辦法了,看著我臉紅紅的。我就對她笑了
    一下,退了出去。

    第二天早上,我們又在同一個(gè)地方見面了。那天是晴天,大家都在等公交車,她一見我
    就主動(dòng)向我報(bào)以歉意的笑容,我指著快來的公交車笑著說:"你不會把這輛車也搶走
    吧?",她呵呵笑了,說:"今天就讓給你了!"。
    就這樣,我們認(rèn)識了。

    3,熱戀
    她叫蕓,來自湖南。她不僅有湘妹子的美麗溫婉,也有湖南女子的潑辣和善解人意。她
    也是剛到上海,在一家貿(mào)易公司工作。

    我們迅速的認(rèn)識,相知,然后熱戀。也許熱戀還在相知之前。我至今也有點(diǎn)不明白,為
    什么會忽然愛的一塌糊涂。也許是剛到一個(gè)陌生的地方,剛剛脫離了生存的威脅,也許
    是我工作后一直嘻嘻哈哈慣了,忽然有個(gè)好女孩出現(xiàn)了,也有了真實(shí)的感情我就繳械
    了。

    我們因?yàn)樽〉慕掳嗪竺刻於荚谝黄穑|說我第一次擁抱她時(shí),她就離不開我了,她
    說我的體味讓她無比迷戀。熱戀時(shí)我感覺我的精力無窮,每天陪我的蕓到夜里11點(diǎn)12
    點(diǎn),靈感來了還去公司加班,那段時(shí)間工作效率也很高。朋友們都說我的眼睛熠熠閃
    光。我們一天不見就如隔三秋。看著她的眼睛我會忘了饑餓,有很多次我心里碰碰跳著
    回到住所時(shí),忽然發(fā)現(xiàn)自己已經(jīng)餓得受不了了,呵呵。

    有一次我去崇明跟項(xiàng)目,因?yàn)橥砹舜啻瓮A嘶夭粊恚越o她打電話說不回來了。我
    們一晚上竟然通了50多個(gè)電話,不是她打過來就是我打過去。第二天一早我一下船,居
    然在碼頭上發(fā)現(xiàn)了我的蕓---要知道那里打車也要1個(gè)小時(shí)的路,她流著眼淚說一夜沒
    睡,一早就來等我了。我們相擁而泣,幸福異常。

    很快我們雙方都認(rèn)為對方是自己未來家庭里的另一半。到年底的時(shí)候,蕓說讓我去她家
    見見她家人。我很緊張,但是很高興,開始準(zhǔn)備見面禮。呵呵,那時(shí)我們都愛昏了頭,
    根本沒有存錢的想法。好在我的薪水漲到了5500,她也有2500,我們還夠花。
    然而沒多久,一個(gè)消息把我的心情打入了十八層地獄。

    4,彩禮
    到年底了,我的禮物也準(zhǔn)備的差不多了,一共花了大概4000多。半年多來,我已經(jīng)成為
    公司的干將,老板也比較看好我。因?yàn)槲乙恢笔俏鞅比说男愿瘢浪皇髦牵ぷ?
    從不計(jì)較加班,補(bǔ)助什么的。年底老板還多發(fā)了不少,買好禮物手邊已經(jīng)有1萬了,感覺
    自己有錢了,所以根本沒想到錢的事。
    這時(shí)候她的一個(gè)表妹從她的老家來了,說是來看看。我想可能主要是她家里人讓她來看
    看我這個(gè)未上門的女婿的。她早就給我說過,她家里她媽市老大,決定一切事宜。我們
    不敢怠慢,帶她表妹在上海好好的玩來一遍。最后我感到她表妹對我還是比較滿意,我
    的心也放下來了。

    到了臨走的前幾天,蕓忽然告訴我說,這次上門可能比較正式,語言有些閃爍其詞。我
    有點(diǎn)不明白,心里想可能她媽已經(jīng)初步考察通過了吧。一天,我們?nèi)齻€(gè)人在的時(shí)候,她
    表妹開玩笑的樣子對她說,姐,你這么好的條件,彩禮可不能少要啊!姨說了,前街的
    老李家的閨女都要了男方8萬呢,我們決不能少于15萬的。說著還看看我。
    天啊,我像被電打一下,呆住了。說實(shí)話,我從小在***長大,風(fēng)氣很開明的,結(jié)婚男
    方有送錢的一般不過4~5萬了不起了,而且還是說明給孩子的。彩禮這個(gè)概念只有讀小
    說時(shí)接觸過,萬萬沒有想到會有朝一日到自己頭上。她家里人現(xiàn)在說出這個(gè)話,絕對是
    當(dāng)真的,說話的方式都掌握的這么有技巧。我該怎么辦?讓她嫁改變做法想法?省省
    吧!憑什么?家里的底子我清楚,決不能向家里伸手。那該怎么辦?我還是笑著看看蕓
    和她表妹,蕓有點(diǎn)緊張,我心里更不忍了。"呵呵!看來我要表現(xiàn)誠意了。",我笑著
    不置可否的回答。

    我該怎么辦?回去后我翻來覆去地想這個(gè)問題。

    5,諾言
    這是痛苦的3天,我?guī)缀鯖]怎么睡覺。蕓也看出來了,她小心翼翼地不敢惹我。我心里
    很憋火:怎么弄得嫁女兒跟賣女兒一樣?有時(shí)候想干脆吹了算了,可是一想到我們要分
    開,心里就像刀割一樣,眼淚就不由自主的下來。家里一直是清貧的家庭,弟弟還在上
    大學(xué),不可能向家里伸手的;自己的工資?天啊,我現(xiàn)在都覺得錢不夠話,手邊只有1
    萬塊錢,這次去還要準(zhǔn)備出血,再說我就是攢錢,也要為我們結(jié)婚買房作準(zhǔn)備啊,15萬
    給了她家,我們將來怎么辦?。。。

    這么多年來,我對自己的了解是,我喜歡出奇招。想了3天,我有了一個(gè)辦法,心就定
    了。蕓有時(shí)看著我,不知所措-她知道我的脾氣,家境和經(jīng)濟(jì)狀況,可是,她也知道
    她無力改變她媽的想法,而且關(guān)鍵的是,她還有一點(diǎn)想法是彩禮是應(yīng)該給的。我告訴
    她,別擔(dān)心,我有辦法了。

    很快,到了她家了,見面,遞上禮物,聊天。。。她母親和藹而精明,父親穩(wěn)重而慈
    愛。很快兩天過去了,我們也該走了,這時(shí)該來的也該來了。最后的晚餐,她的母親說
    話了:"小D,你在我們這里已經(jīng)2天了,我們對你還是比較滿意的。你是個(gè)不錯(cuò)的孩
    子。如果沒有意外,希望你們能今年(新的一年)把婚定了。你看什么時(shí)候把禮節(jié)辦
    了?你們商量一下,也和你家里商量一下,好嗎?對了,我們這邊的風(fēng)俗你可能還不清
    楚,也不知阿蕓小月給你講了沒有。"

    我馬上接住了話題,笑著說:"謝謝阿姨,伯父,小月和我說了。"這時(shí)我看到阿蕓緊
    張的臉都變了,看著我怕得要命。是啊,最后一段千萬別搞砸了。我笑笑讓她放心。
    "阿姨,伯父,你們的心情我我理解,養(yǎng)女兒不容易,再說只有一個(gè)女兒,我覺得15萬
    如果比比投入,不算多,甚至還根本不夠。這個(gè)錢我們家應(yīng)該給。"
    "我想阿蕓也把我家里的情況告訴二位老人了,我是這么想的,也不一定合適,您二位
    先聽聽。

    "15萬應(yīng)該給。但是我覺得既然我工作了,我自食其力了,而且是我娶阿蕓,同時(shí)你們
    也覺得我合適,那么這個(gè)15萬應(yīng)該由我來給,而不是我家里來給。

    "你們和阿蕓看中的人,不應(yīng)該僅僅需要家里有15萬,還要有能力,有能力給阿蕓將來
    的生活帶來幸福。我想,我有這個(gè)能力。我自己不僅要有15萬,而且應(yīng)該向你們證明,
    我有能力給阿蕓幸福。

    "我只有一個(gè)要求,就是給我不長的時(shí)間,兩年吧。我們還小(阿蕓比我小2歲),晚
    一點(diǎn)結(jié)婚也沒關(guān)系。兩年后,我會拿出15萬,而且會證明給你們看,我和阿蕓有能力生
    活的幸福。"

    其實(shí),當(dāng)天晚上我的語言遠(yuǎn)遠(yuǎn)比我的文字精彩,因?yàn)橛袗墼谛睦铮掖騽?dòng)了她家所有
    人,阿蕓的臉也紅撲撲的。我們走的時(shí)候,他家里人很開心,當(dāng)然也許只是表面上是,
    但是至少他媽默認(rèn)了我的要求。當(dāng)然從此后,我感覺有個(gè)巨大的大山壓在了我的心里,
    我的生活改變了。

    6,開端
    回到上海以后,我的心情沒有低落,反而有種大戰(zhàn)來臨時(shí)的平靜和激動(dòng)。我心里暗暗下
    定決心,為了我的愛人,我的未來幸福生活,我要付出比別人幾倍的努力,實(shí)現(xiàn)我的諾
    言。我全身心地渴望這樣做,而且相信自己一定能夠成功。

    蕓反而很擔(dān)心,她和我說要不我們搬到一起,生活上可以節(jié)省一些,她和我一起攢錢。
    我拒絕了她。雖然我們早就有了肌膚之親,但是我不想讓她家里人知道,這樣對她不
    好。而且我也不愿讓她一起攢錢,畢竟我說了,這是我的事。我知道一個(gè)女孩,生活、
    衣服、化妝品等等,每個(gè)月的花費(fèi)怎么說也要2000塊左右的。我說,蕓這段時(shí)間我可能
    就不能給你買很多衣服和化妝品了,她鄭重地點(diǎn)點(diǎn)頭。我不知道,以后我是否會為這個(gè)
    決定而后悔。

    我的初步想法是這樣的:因?yàn)槲抑还ぷ髁?個(gè)月,而我的薪水已經(jīng)漲到了5500。如果依
    照這個(gè)速度,半年后我的薪歲至少應(yīng)該到8000,一年后最不濟(jì)也應(yīng)該到10000左右。我
    可以什么都作,而且可以往管理方面發(fā)展,這樣,我每月存下70%的工資,2年下來加上
    年終獎(jiǎng),也就差不多了。而且,那時(shí)候即便把15萬都"上供"了,我的年收入也能夠讓
    我們生活的小康。

    現(xiàn)在回想我那時(shí)候想法,心里只有兩個(gè)字:幼稚。事態(tài)的發(fā)展果然證實(shí)了那句話:計(jì)劃
    在現(xiàn)實(shí)面前永遠(yuǎn)是無用的。

    7,失敗
    很快,現(xiàn)實(shí)給了我重重一擊。一個(gè)偶然的機(jī)會,我和大老板聊起來,他告訴我策劃和創(chuàng)
    意人才可以很快贏得中等偏上的薪資,但是要達(dá)到5位數(shù),只有2年的工作經(jīng)歷基本不可
    能。因?yàn)閲鴥?nèi)的商業(yè)條件還不成熟,客戶的能力也有限。所有的公司愿意付出一些成本
    搞定客戶,在策劃和創(chuàng)意上達(dá)到80%的滿意就可以了。而且,公司愿意把高薪給業(yè)務(wù)人
    員和管理人員,一個(gè)只有2年工作經(jīng)歷的人基本不具備它所需要的人脈資源、操作能力
    和管理能力。

    我明白了老板的意思。我開始在市場上尋找其他的公司。但是現(xiàn)實(shí)很快讓我失望,要在
    一年內(nèi)獲得萬元以上的月薪根本是不可能的。好的公司有,但都說2到3年內(nèi)有希望,如
    果做得好的話。老天,我的時(shí)間不夠了!同時(shí),公司知道了我在外面找工作的事情,老
    板們很不開心,因?yàn)槠叫亩摴居X得已經(jīng)待我不薄了。說實(shí)話,這條路成功的可能
    性很大,但是時(shí)間不夠啊!
    怎么辦?

    我決定辭職。

    8,艱辛
    既然已經(jīng)證明此路不通,再留下去就是浪費(fèi)時(shí)間。我的時(shí)間不多了。而且我認(rèn)為自己如
    果辭職,就有的是大塊的時(shí)間,能夠接觸更多更深的社會,機(jī)會也相應(yīng)的多了。阿蕓不
    同意,她說這樣太不穩(wěn)定了。我沒法說服她,她也沒辦法說服我。這件事我還是做了,
    我知道,只能破釜沉舟了。

    臨走時(shí)和老板深談了一次,請他原諒。也把我的處境部分告訴了他。我們談得很好。老
    板很惋惜,讓我以后有可能還回來工作,我也很依依不舍,但是我已經(jīng)沒有退路了。
    我開始了在上海灘到處漫游的經(jīng)歷,騎著一輛破自行車到處在上海轉(zhuǎn),到處找有限的熟
    人,問有沒有項(xiàng)目做。我身邊有1萬2千多塊錢,覺得還可以支撐半年吧。我想,這半年
    里如果有策劃項(xiàng)目做,我就辛苦點(diǎn),把所有的事情都自己做了,應(yīng)該可以掙個(gè)2到3萬,
    多做幾個(gè)項(xiàng)目就比打工好了。呵呵,如果朋友們誰有我那時(shí)一樣的想法,今天我一定勸
    你千萬別!事后想,我太自信了太著急了,真是應(yīng)該邊工作邊找機(jī)會,時(shí)機(jī)成熟再干
    的,否則下海99%是被淹死。我就這樣風(fēng)里來雨里去,跑了2個(gè)月,一個(gè)單子也沒有跑
    到,加上有一次丟了包,損失了1000多塊錢和手機(jī)。住宿、吃飯、交通花了3500塊錢,
    身邊只剩7000多塊錢了。可是一點(diǎn)沒有轉(zhuǎn)機(jī)的跡象出現(xiàn)。

    9,機(jī)遇
    就在這時(shí)候,一個(gè)令人不敢相信的、非常好的機(jī)會出現(xiàn)了。我以前的一個(gè)客戶找到我,
    說是他的一個(gè)朋友在上海嘉定那邊的一個(gè)鎮(zhèn)里做鎮(zhèn)長,他們鎮(zhèn)上3個(gè)月后要辦一個(gè)"水
    鄉(xiāng)情思"的活動(dòng),主要是吸引港臺和外籍人士的資金投資。他們要我構(gòu)思起草一個(gè)大型
    活動(dòng)的策劃書,價(jià)格是4萬元。這個(gè)客戶說以前在我們公司和我合作過,覺得我有這個(gè)
    能力,而且拿到公司去做策劃,價(jià)格一般要到8萬以上。我們合作空間更大,而且如果
    策劃書做的好的話,活動(dòng)組織和制作我們還有機(jī)會。我很開心,明白他是想自己也賺一
    些,立刻給了他2000元的好處費(fèi)。不知道這個(gè)習(xí)慣有沒有影響我,直到現(xiàn)在我都認(rèn)為機(jī)
    會來了一定要投入,而不是大多數(shù)人認(rèn)為的不見兔子不撒鷹。

    我廢寢忘食地工作了20多天,每天夜里干到2點(diǎn),稿子改了4次。然后又自己貼了400多
    塊錢制作了3本樣本。交給那朋友的時(shí)候,他非常贊賞,連聲說做的太好了,看來后面
    的制作也沒問題了,一周之內(nèi)我就等著拿錢吧。我也心里感嘆投入沒有白投,連忙把這
    個(gè)好消息告訴了蕓,她也非常開心。畢竟這是我的第一筆收入啊!而且金額還算不少。

    10,被騙
    我萬萬沒有想到,這次看起來不錯(cuò)的機(jī)會竟然實(shí)際上是碰上了一個(gè)騙子。這個(gè)客戶拿到
    了我的方案以后,竟然人間蒸發(fā)了!我苦苦等了一周以后,這家伙死活不再和我聯(lián)系
    了。我打電話,手機(jī)已經(jīng)停機(jī),跑到他原來公司去找他,公司的人說他早就不做了,現(xiàn)
    在在和一個(gè)人合作開公司。我又跑到嘉定的那個(gè)鎮(zhèn)上去找我們以前一起見過的他的鎮(zhèn)長
    朋友,鎮(zhèn)長說這個(gè)項(xiàng)目早就簽約了,他和我那個(gè)客戶也不是朋友,只是簽約公司說策劃
    書部分包給他,他又找到了我,說我是他的助手。現(xiàn)在策劃書已經(jīng)通過,錢都已經(jīng)付
    了。我馬上又找到了那家公司,公司說我那個(gè)客戶不是他們公司的人,只是他讓公司把
    策劃書部分包給他,錢公司和他剛結(jié)清了。知道我的情況后,他們表示同情,但沒辦
    法:現(xiàn)在他們也找不到人,錢也結(jié)清了。

    這個(gè)打擊對那時(shí)的我是致命的,讓我的處境雪上加霜。我已經(jīng)花了大量的精力不說,原
    來剩下的7000多塊錢已經(jīng)被我花去了大半,只剩3000多了。更可怕的是我的時(shí)間又用去
    了一個(gè)多月。

    這是后話:那個(gè)客戶我這幾年就再也沒有見過。后來聽說他過得很不好,很多人都在找
    他,他又讓合作伙伴坑了一次,基本上就再也沒有聽說在這個(gè)行業(yè)里做過什么了。

    11,灰心
    萬分沮喪的我把情況告訴了蕓,告訴她的時(shí)候我分明聽到了一個(gè)美麗的泡沫在她心里破
    碎的聲音。她表面上沒有說什么,但我知道她失望極了。我們相擁無言,我只能從她這
    里得到一絲溫暖和安慰。她說,你別急,沒關(guān)系,我們從頭再來。可是,我的愛人,你
    知道嗎,這個(gè)打擊甚至讓我回頭審視自己,懷疑自己:我這樣的一個(gè)北方人,是不是適
    合在上海打拼?

    盡管萬分失落和失望,可我不能讓我的女孩對我失望。第二天我強(qiáng)打精神對阿蕓說我要
    重新開始。我考慮了一夜,因?yàn)槲乙呀?jīng)沒錢了,不能再租原來的房子了,我必須去找一
    個(gè)民房住,每個(gè)月可以省7~800元左右。但是這樣就不能和蕓象以前那樣離的那么近
    了。我說我不能停下來,時(shí)間不多了。蕓哭著抱著我說,我一定要多來看她,她會很想
    我,我有經(jīng)濟(jì)困難一定要來找她。我笑著說,你有經(jīng)濟(jì)困難也要來找我啊。
    朋友們,盡管時(shí)間已經(jīng)過去了那么久,可是今天我回憶到這里的時(shí)候仍然淚流不止。那
    時(shí)候我已經(jīng)處于最低谷,生存也成問題,可是我仍然愿意回憶那時(shí)的事情。我怎么可能
    想到,命運(yùn)老人會讓以后的我和她發(fā)生那么大的變化?

    12,初醒
    我搬到的一個(gè)民居是個(gè)私房,就是農(nóng)民自己蓋的房子,房子里面夏天熱冬天冷,而且只
    有10個(gè)平房大小。我已經(jīng)很滿足了,這里每個(gè)月租金才200元,比以前我已經(jīng)省了800塊
    錢了。

    搬過來以后,我有很長一段日子不知自己干什么好。我想這是載過跟頭的人的通病吧,
    相信有過類似經(jīng)歷的朋友會有同感。可是不做事情我心里又焦急萬分。這種矛盾的感覺
    真是讓我每天心里都不好受。

    轉(zhuǎn)眼一個(gè)月就要過去了,這個(gè)月里我基本上是饅頭就咸菜,肚子里油水實(shí)在缺的厲害。
    我決定去買點(diǎn)熟肉解解饞。我這個(gè)民房周圍有幾個(gè)新改成的小區(qū),因?yàn)殡x市區(qū)比較遠(yuǎn),
    基本上是一些市內(nèi)動(dòng)遷戶遷到這里來的,真的購買這里房子的人也都沒什么錢,但是這
    樣的人在上海很多,小區(qū)外人氣還是不錯(cuò)的。這里不像高價(jià)房,高價(jià)房是開盤很久了還
    沒見幾個(gè)人煙。小區(qū)之間有條街,人很多但大都是些老人孩子在轉(zhuǎn)悠。熟肉店生意好象
    不是很好,我要了一些肉又買了一瓶啤酒,在旁邊小店的簡易桌上坐下來吃。

    多年以后我回想那個(gè)時(shí)刻,還是認(rèn)為那是上帝給處于絕境的我的一個(gè)機(jī)遇。就在那時(shí),
    忽然有人和熟食店老板說話,在說老板,你這生意不行啊!是啊,那老板說,我下禮拜
    農(nóng)忙,準(zhǔn)備回家了,不做了。那人說,那你這店怎么辦?那老板說,轉(zhuǎn)了唄,這半年沒
    賺什么錢,還不如做點(diǎn)別的。忽然我有一種蘇醒的感覺,我到處找錢賺,可是好高騖
    遠(yuǎn),忽視了這身邊的機(jī)會,難道自己一直沒看見?我馬上站起來,讓老板再給我一點(diǎn)牛
    肉,然后漫不經(jīng)心地問他轉(zhuǎn)讓店面的情況。

    不過十分鐘,我就清楚了:這個(gè)店也就10個(gè)平方左右,月租金1200,租金他多付了兩個(gè)
    月。轉(zhuǎn)讓費(fèi)他要求不高,不虧就行,帶一點(diǎn)簡單的設(shè)施,2萬塊錢吧。我說我想接手,
    但是價(jià)格太高,他降到了1萬8。我說1萬5我今天就要,他回去和他老婆商量了以下,同
    意了。我立刻回房拿了我僅剩的3000塊錢作為訂金付給他,然后當(dāng)晚立下轉(zhuǎn)讓書,當(dāng)然
    他同意我7天內(nèi)把余款付清。

    13,努力
    我找到以前公司的老板,請他借給我錢。我還帶去了我做的那份策劃書,說我送給公司
    的。老板也多少聽說了我的事情,他詳細(xì)地了解了我的境況,二話沒說借給了我1萬5千
    塊錢。我笑著說:"老板,我把身份證押在你這里吧?",老板也笑著說:"你要不要
    我的身份證,1萬5我押在你那里?"其實(shí)到現(xiàn)在我都一直敬佩我的老板。他的事業(yè)現(xiàn)在
    也做得很好,家資3000多萬了。

    拿到店面前的3天我一直在苦苦思考,怎么能讓我的店面生意大為改觀呢?首先,我回
    憶到以前的雞粥店,覺得上海人愛吃雞,特別是白斬雞,還有烤鴨,決定經(jīng)營品種適當(dāng)
    變化;另外,飲食業(yè)最重要的是衛(wèi)生(衛(wèi)生許可證一年一辦,已經(jīng)有了),我決定徹底
    打掃店面一天,店面重新貼開業(yè)標(biāo)志,另外買了一個(gè)二手的消毒柜,特意擺到臺面上讓
    客戶看到消毒設(shè)施的過程;然后,我找了一個(gè)上海老師傅來指導(dǎo)制作工藝(退休了返
    聘,很便宜的),再找了2個(gè)勤快的四川妹幫忙,允諾給他們業(yè)績5%的提成,但是不行
    我就換人;等等大概有20多條措施吧,我當(dāng)時(shí)可是寫滿了2頁紙的,全部做完已經(jīng)過了
    近10天了。最后,我買了一些鞭炮,噼哩啪啦一放,人氣立刻被我吸引過來了。呵呵,
    當(dāng)天忙到夜里11點(diǎn),一盤點(diǎn)營業(yè)額居然有500多!

    14,曙光
    做過生意的朋友都知道,開業(yè)的當(dāng)天生意好不見得以后生意一直會好。因?yàn)閯傞_始客戶
    是好奇,試一試,一旦沒有什么特別吸引之處,他們就會立刻忘了你。而你要再吸引他
    們的注意力就困難得多了。

    我明白這個(gè)道理,所以第二天開始就在店面前不停的拉人聊天,問味道怎么樣,然后不
    由分說要送他們一些熟食。上海人內(nèi)外分的很清楚,他們決不會白要?jiǎng)e人的東西,絕大
    多數(shù)都付點(diǎn)錢,當(dāng)然他們也不會白給別人東西。當(dāng)然我明白,生意的關(guān)鍵是我的貨品要
    合客戶的口味。慢慢的我的小店人氣就有了。我還請人在幾個(gè)小區(qū)里張貼了我們店的廣
    告,也請人故意拎我們的烤鴨在幾個(gè)小區(qū)人多的地方走動(dòng),相互之間含喧,巧妙吸引人
    們注意。通過很多這樣的方法,一個(gè)月后我的店每天的營業(yè)額可以達(dá)到800元左右,而
    且還在不斷上升中。呵呵,我以前的策劃功底全部用在這上面了。

    我這樣起早貪黑的忙碌,每天大概干14、5個(gè)小時(shí)吧,完全把心思撲在了店面上。作了
    第一個(gè)月的生意后,我盤點(diǎn)了一下,我一共賺了9000元錢;第二個(gè)月我賺了12000。把
    欠的債還掉后,我又沒錢了。但是我感到,我生命中久違的曙光已經(jīng)來了。說實(shí)話,這
    種感覺真的很美妙。

    15,做夢
    我就這樣經(jīng)營著自己的小店,時(shí)間又過了3~4個(gè)月。其間我忙得每天只睡5、6個(gè)小時(shí),
    一躺下就昏迷不醒的樣子。我和阿蕓通過幾次電話,她也忙,因?yàn)樗殲橘Y深業(yè)務(wù)
    了。我們見過幾次面,她都讓我好好休息一下,我笑著說,把你娶回來再說吧。她說你
    靠那個(gè)門臉賺到錢了?我笑笑,決定幾個(gè)月后給她一個(gè)驚喜。

    4個(gè)月后,我已經(jīng)攢了5萬塊錢,可是也快到年底了。算算我的時(shí)間只剩13個(gè)月多一點(diǎn)
    了。如果按照現(xiàn)在這個(gè)模式發(fā)展下去,我完成目標(biāo)15萬的可能性是穩(wěn)穩(wěn)的。我每個(gè)月只
    要保持現(xiàn)在的狀態(tài),那么一年以后我應(yīng)該用18~20萬。錢是夠了,還可以辦個(gè)像樣的婚
    禮,不過買房子是暫時(shí)不用想的。呵呵,看到這里,不知道又有多少朋友在笑我-樓
    主的幼稚病又犯了!是啊,如果沒有房東的收租事件,我想我會把這樣的夢做下去吧。
    房東來收過幾個(gè)月租后,就到年底了。有一天房東忽然出現(xiàn)說是要簽明年的租房合同,
    但是價(jià)格貴了一倍。氣得我差點(diǎn)翻臉,這分明是看我生意好了眼紅嘛!可是我知道人在
    屋檐下,不能不低頭啊。再說我現(xiàn)在可是一點(diǎn)問題也不能出。我和他好說歹說,又送給
    他了一些熟食,房東還是加了我1000塊錢。

    這件事讓我意識到危機(jī)已經(jīng)顯現(xiàn)。生意做得好了以后,第一房東的房租會漲價(jià),不可能
    再跌價(jià),各種費(fèi)用也會漲;第二,很快競爭者就會出現(xiàn),出現(xiàn)以后和我的小店是同樣規(guī)
    模,勢必會分流客戶。所以這種賺錢的狀態(tài)是不會持久的。如果我不動(dòng)作,最后的結(jié)果
    我想也想得出:小店幾個(gè)月后就回到維持生計(jì)的地步。那么我該怎么辦呢?我一夜沒
    睡,苦思對策。

    第二天一早,我下定了決心,決定孤注一擲,冒一把大險(xiǎn)!

    16,冒險(xiǎn)
    我的計(jì)劃是這樣的:第一步,在附近的小區(qū)再開幾家這樣的熟食店。地段只要和我現(xiàn)在
    的店面地段差不多就行了,但是不能太近了,然后用一樣的裝修、一樣的名字、一樣的
    策劃手段,建立起小區(qū)居民心目中品牌形象,這樣進(jìn)貨價(jià)格會便宜很多,還可以逼迫后
    來者提高投入。這個(gè)計(jì)劃實(shí)施的越快越好。第二步,我覺得現(xiàn)在這個(gè)商鋪的價(jià)格不高,
    2000多交租不如我把它買下來。上海的朋友都知道,2000年底上海郊區(qū)的房子價(jià)格只有
    2000多,商鋪也只有3000多。這一步必須穩(wěn)步實(shí)施,一個(gè)一個(gè)來。但是這樣我就是必須
    投入我現(xiàn)在所有的5萬塊錢,如果一旦失敗,我的時(shí)間、金錢投入可能會讓我的目標(biāo)徹
    底無法實(shí)現(xiàn)。但是我又想,我不去做,就把希望寄托在別人別來搶生意上,我去做了,
    希望在我自己身上。相比一下,我愿意把希望寄托在自己身上。

    但是我以前所想的給我的蕓一個(gè)驚喜的計(jì)劃只能延時(shí)了。我心里對自己說,為了她,拿
    出你所有的勁吧!那是無比艱辛的一個(gè)月。我不僅要照顧一號店的生意,又要為二號
    店、三號店選址、選人、買設(shè)施、店面布置等等。后來我提高了一個(gè)一號店店員的提成
    比例,封他為店長,告訴他1個(gè)月后店里的營業(yè)額如果下降5%以上,立刻換店長。這樣
    我就全身心投入到新店的開張。1個(gè)月過后,我的二號店、三號店相繼開張,我還是無
    法清閑,又開始了以前那樣的策劃造勢,而且開始了四號店的準(zhǔn)備工作。

    后面的一個(gè)月,我一號店的盈利狀況還是不錯(cuò),達(dá)到了12000元,二號店5000元,3號店
    最好,居然有10000!要知道這是頭一個(gè)月,人員還不熟呢!我發(fā)現(xiàn)原因是一個(gè)女孩店
    員做生意很有天賦,也會招睞客戶,我二話沒說給她工資翻倍,直接提升為店長。

    年底如期到來,我和蕓只在一起度過了半天,就不得不忙著自己的店面了。蕓要回家
    去,我不能走,目標(biāo)沒有完成我怎么能見她家人呢?不過我和她媽通了一個(gè)電話,她媽
    笑著說:"小D,我們知道你是個(gè)好樣的孩子,我們都盼著你把我家蕓蕓早點(diǎn)娶走
    呢!"我知道這話里的意思,也笑著回答說:"我會的,謝謝阿姨和伯父的信任。"
    年底年頭的2個(gè)月,因?yàn)檫^年,節(jié)日也多,我的生意好的一塌糊涂。四號店也趕在春節(jié)
    前開了。這兩個(gè)月每個(gè)店平均一月能賺15000,2個(gè)月后我身邊的現(xiàn)金達(dá)到了12萬。元旦
    前還有一件事,原來的老板給我打電話說,他公司還有一個(gè)轉(zhuǎn)入戶口的名額,問我要不
    要,我說要。他說我什么都不用管了,把資料給他就行了。為了好好感謝他,過年時(shí)我
    去他家給他的孩子送了一個(gè)5000塊的紅包。年后不久我的戶口辦下來了。我開始逐步的
    和各個(gè)東房談要購買鋪面,如果他們不賣,我就找別的房東談,那是很多房子是物業(yè)
    的,比較好拿。而且那時(shí)候房價(jià)低,再說我找房子前就打的有伏筆,另外我價(jià)格給的稍
    高一些,前面3家都談的很順利,單價(jià)大概在3700一個(gè)平方吧,一共13萬,我全部給的
    是現(xiàn)金。第四家以一共要5萬(生意好啊,房東要挾我),我沒錢了,但是抵押了前面
    的一家店作為3萬先簽了意向書,等到一個(gè)月后,資金回籠了,把錢湊齊了把店拿了下
    來。

    這時(shí)候已經(jīng)是3月底了,我還剩8個(gè)月。生意好象在穩(wěn)步進(jìn)行,目標(biāo)好像越來越近。可是
    我沒想到,一個(gè)足以摧毀我的重創(chuàng)也越來越近了。直到今天我回想到這個(gè)讓我記憶深刻
    的時(shí)間段,還覺得眼眶里淚水未干。

    17,重創(chuàng)
    時(shí)間又過了3個(gè)半月,馬上要到7月10日了,我之所以記得這個(gè)日子,因?yàn)檫@是蕓的生
    日。我決定在這個(gè)日子之前攢足15萬,并把這個(gè)消息作為生日禮物送給她。想到她得到
    這個(gè)禮物時(shí)候的開心,我的心里別提多激動(dòng)了。這幾個(gè)月店面也爭氣,每個(gè)店都能夠達(dá)
    到10000多的利潤,這是因?yàn)槲业甓嗔耍M(jìn)貨成本低了,而且房租也不用交了,還有一
    個(gè)最主要的原因就是我用了一個(gè)很好的店長-小成。

    小成就是我前面破格提拔為店長的那個(gè)女孩子。這女孩是從浙江來的,只有19歲,人長
    的清秀漂亮(因?yàn)橐袕瓶蛻簦@是一個(gè)比較重要的因素,招人的時(shí)候我就特別注意要
    找看著舒服的女孩)。因?yàn)橐话愕耐鈦砻么蠖嗖皇钦憬瓉淼模晕姨貏e留意她。沒想
    到這個(gè)女孩在做生意方面真的很有天賦,她一直是很開心的樣子,從沒見過她煩過,會
    說話,人很甜,客戶緣很好。而且她很有腦子,開業(yè)沒幾天就把所有的常客的名字記熟
    了(我估計(jì)她是問周圍的店主和客戶的),還建議我,天氣熱了,店面里配點(diǎn)素菜,啤
    酒,買點(diǎn)簡易桌椅,晚上讓客戶邊吃邊納涼。她還把周圍的幾家飯店的電話弄到了,把
    飯店的生意也拉了進(jìn)來。后來我們熟食店里的生意飯店進(jìn)貨居然占了30%!

    不過她也有一點(diǎn)不好,就是好像身體太單薄,力氣活干不了多久就累得臉發(fā)白、出虛
    汗。小店生意好的時(shí)候,這也挺影響的。我考慮了幾天,決定揚(yáng)其長,避其短,在店里
    又招了一個(gè)身強(qiáng)力壯的小伙子給她打下手,告訴她只管招徠客戶,管理帳務(wù)。

    這時(shí)候我的一個(gè)朋友打電話給我。原來他不知道從什么地方得知我開了幾個(gè)店,做得
    還行,而他正在做房產(chǎn)銷售,代理一個(gè)別墅的盤子,非要我去看看。上海的朋友都知
    道,2001年的時(shí)候上海的房產(chǎn)還遠(yuǎn)遠(yuǎn)不熱,房產(chǎn)銷售尤其是高價(jià)房的銷售很難做。他代
    理的那個(gè)別墅房型有180多個(gè)平方,周邊的配套還不完善,再說總價(jià)要80萬朝上,我不
    想買,就告訴他沒那么多錢。他說,你來看看吧,看了肯定喜歡,再說錢的事情好辦,
    貸款就行了。我說那還要首付呢,我首付也沒有。他說沒關(guān)系,他可以在合同上做點(diǎn)手
    腳,讓我零首付,全部貸款。我沒辦法只好去看看,沒想到看了以后特別喜歡別墅下面
    的花園,因?yàn)槲矣浀檬|曾經(jīng)告訴我說,她的夢想就是住在花園的上面,每天早上打開窗
    戶就能聞到花的清香。朋友看我有意,就拼命鼓動(dòng)我說,買了這個(gè)房子這個(gè)優(yōu)惠,那個(gè)
    免費(fèi)的,每月只要付6000多就可以了。我還是有點(diǎn)猶豫,說我不想每月跑銀行。他說,
    我?guī)湍戕k,每月自動(dòng)劃款,不用你操心的。我沒什么再挑的了,想想就定了一套。不過
    后來知道,這小子還是打了埋伏,有些言過其實(shí):窗戶就不是他說的雙層的,車位也不
    是免費(fèi)的,呵呵。

    7月9日,我拿著那份15萬元的存折卡,興沖沖地拿著一束花,拎著一品瓶紅酒(蛋糕明
    天叫人送來)趕往蕓的住處。之前,我已經(jīng)給她媽打了一個(gè)電話,向她父母親問好。同
    時(shí)告訴他們,我已經(jīng)提前5個(gè)月實(shí)現(xiàn)了諾言,很快就會娶她家女兒了。我決定先給蕓一
    個(gè)驚喜,然后今晚就住在她那里。我特意趕在她下班前一點(diǎn)趕到,準(zhǔn)備突然出現(xiàn),嚇得
    她快樂的大叫。

    可是讓我始料不及的事情出現(xiàn)了,蕓下車時(shí)不是一個(gè)人,而是和一個(gè)男孩一起。他們手
    拉著手,好像很親昵。我一下傻了,不知道怎么辦好,他們一起進(jìn)了小區(qū),我傻乎乎地
    跟在后面。在光線陰暗處,那男的還一把摟住蕓親了一下。我的腦袋轟的一下,再也受
    不了了。我大叫著蕓的名字,沖上前去一把抓住蕓,然后就要打那個(gè)男的。蕓嚇了一
    跳,拼命地拉住我,對那個(gè)男人說快走,你先走,我跟他解釋。男的走了,蕓還是拉住
    我不放,我叫到解釋什么?解釋什么?一邊眼淚就快下來了。蕓看著我,很冷靜,冷靜
    的我們好像不認(rèn)識。她對我說對不起,早該告訴我。但是我今天太不冷靜,她希望我先
    冷靜下來,現(xiàn)在的氣氛我們沒法談。我沒辦法冷靜,說不行,今天你就必須給我一個(gè)說
    法。她被我糾纏的沒辦法了,對我說,D,一直以來,我以為你的素質(zhì)很高,你今天這
    樣會讓我很失望。我停了下來,看著她,眼淚慢慢地流下來,最后對她說,好,我走,
    明天來再談。出了小區(qū),發(fā)現(xiàn)花和紅酒居然還在手中,一把把他們?nèi)舆M(jìn)了垃圾箱。
    那夜我一夜無眠,盯著外面發(fā)呆,怎么也想不明白事情怎么會到這種地步。第二天一早
    我在蕓的樓下等著。蕓下來說我們找個(gè)地方吧。我們到了一家茶室,我呆呆坐下,等她
    解釋。那天她說了很多,我都有些記不清了。她說,其實(shí)從我搬走我們就很少在一起
    了。她知道我很努力,很辛苦,但是經(jīng)歷那么多波折,真的很懷疑我是不是能夠?qū)崿F(xiàn)15
    萬的諾言。她心里開始很怕,但是又沒機(jī)會和我說。我的壓力又不和她分擔(dān)。在上海這
    么長時(shí)間,她和我一樣做得很辛苦也都沒有歸宿感,覺得很累。這時(shí)候她的上司,就是
    那個(gè)男孩出現(xiàn)在她身邊,男孩是上海人,比她大4歲,在公司職位不錯(cuò),家里條件也
    好。蕓說和他在一起,她會覺得很安心,很安定,很有安全感,不像和我在一起,雖然
    感情曾經(jīng)很熱烈,但是總是不知道我們的將來在那里。她說對不起,真的對不起。我激
    動(dòng)的渾身亂顫,說不出話來。好容易稍微平靜一些,我告訴她說,我現(xiàn)在有15萬了,你
    還會愛我嗎?她說,對不起,我覺得現(xiàn)在很好,我不能再對不起他了,我們不會再在一
    起了,希望你將來幸福。出門的時(shí)候我發(fā)現(xiàn)了那個(gè)男孩,心里又一陣刺痛。約在這里,
    一定是他們商量的結(jié)果。

    18,懷疑
    這真是一個(gè)巨大的諷刺。一直以來,我以她為努力奮斗的動(dòng)力,可是等我奮斗到了目標(biāo)
    跟前,卻發(fā)現(xiàn)目標(biāo)忽然消失了。我記得那時(shí)候,我開始失眠,希望自己趕快入睡,然后
    夢見蕓。可是我一次也沒有夢見她,倒是我清醒的時(shí)候一刻也沒有停止想她。我經(jīng)常覺
    得心里刺痛,頭皮發(fā)麻。一直以來,我那么小心翼翼地把她放到我心里的一個(gè)最溫暖、
    最柔軟的地方,沒想到最痛苦的打擊卻由這里產(chǎn)生。

    有一個(gè)朋友曾經(jīng)回貼問我,怎樣才能獲得不愛你的女孩的愛,我沒有回答。不是我不愿
    回答,而是我不知道怎樣回答。我真的不是這方面的專家,我也曾痛苦無比,希望能夠
    改變我愛的女孩的心。可是我沒有什么辦法,只有自己默默地退回,獨(dú)自一人舔著自己
    的傷口。

    那段時(shí)間我對自己過去的所作所為產(chǎn)生了懷疑,我這么做到底有什么意義?如果我還在
    公司工作,每天還有時(shí)間,情況就不會這樣。如果我不搬家,事情也不會這樣。如果我
    不開店,就有時(shí)間陪她,情況也不會這樣。就是開店了,如果我不開分店,也有時(shí)間去
    看她,應(yīng)該也能阻止她情變。每天我這樣亂七八糟的想法充斥了我的腦海,讓我對生意
    根本提不起興趣。

    店里的員工都看出來了,他們小心翼翼的不敢惹我。幾個(gè)店長都很稱職,生怕店里的事
    情會引得我大發(fā)雷霆。尤其是小成,她主動(dòng)找到我說她來每天到個(gè)家店里盤點(diǎn),讓我忙
    我自己的事。我很感激她,也相信她的能力,就告訴幾個(gè)店以后由她來查店。我知道自
    己這個(gè)狀態(tài)如果硬讓我去,非出事不可。小成很有手段,也有能力,查店每天要多做2
    個(gè)小時(shí),她很快讓其他人服服帖帖。還好,有小成和他們的幫助,我的生意沒有什么影
    響。

    但是我自己知道,我已經(jīng)迷失了前進(jìn)的方向。我不知道怎么再找到這個(gè)方向。

    19,迷失
    有人說工作累的時(shí)候,家里壓力大的時(shí)候很辛苦,我卻不是這樣認(rèn)為。我覺得一個(gè)人迷
    失方向的時(shí)候最痛苦,因?yàn)槟悴恢雷约簯?yīng)該做什么,這種狀態(tài)每天無時(shí)無刻不深刻地
    提醒你不過是一具行尸走肉罷了。那個(gè)時(shí)候就是我迷失方向的時(shí)候。我就像一個(gè)被抽去
    發(fā)條的時(shí)鐘鐘擺,每天不過是由慣性推動(dòng)我在擺動(dòng)。我不知道什么時(shí)候會停擺。也許在
    我的內(nèi)心深處還在暗暗期盼那停擺的時(shí)刻。

    蕓的媽媽給我打了一個(gè)電話,接到電話知道是她,我心里真的不知道是什么滋味。她媽
    對我說,孩子,阿姨知道你很難過。你們年輕人的事真不知怎么搞的。但是阿姨告訴
    你,你是個(gè)好孩子。你的前途還很遠(yuǎn)大。阿蕓不能和你在一起,是她沒福。好好的,我
    們?nèi)叶甲8D恪B犃诉@話,我的眼淚又留下來了。以前覺得她是那么固執(zhí)和勢力,今
    天怎么覺得她的話那么溫暖。我終于能夠真正站到一個(gè)父母的角度上來看彩禮這件事,
    是啊,那是要把自己女兒未來幸福生活盡量多地抓到手里的感覺。

    在這里我要感謝我的一位大學(xué)同學(xué)楓,如果不是他湊巧來到上海,要我陪同的話,我不
    知道我這種狀態(tài)要持續(xù)多久。楓來上海玩,指定我陪,而且說陪得不好當(dāng)即給所有哥們
    打電話說上海沒我。我強(qiáng)打精神,楓還是有所察覺。楓一見我就說,你小子怎么減肥減
    的那么明顯,不行不行,我們不能一起照相,否則班花見了照片,我一點(diǎn)想頭都沒了。
    他就是這樣,那幾天逗得我開心了一些。要走的時(shí)候,楓說,說說吧,怎么了。我這才
    知道,他早看出我有事,所以一直在讓我開心。從蕓變心以來,我從沒有向人傾訴過。
    楓聽過了之后,很久沒有說話。后來一開口就是一句:"好!這是好事!"我聽的愣
    了。

    楓接著解釋說,我和蕓現(xiàn)在分開始好事。因?yàn)榫褪乾F(xiàn)在不分開,我們早晚要分開。因?yàn)?
    我們不是一路人。蕓的內(nèi)心深處時(shí)那種安分守己的人,經(jīng)不起動(dòng)蕩,分開的時(shí)間主要視
    我波動(dòng)的強(qiáng)度而定;而我是那種不安分守己的人,越是不利、越是艱難,越能激發(fā)我的
    能力。我適宜在變數(shù)中求生存,求發(fā)展。而且我不是很在乎物質(zhì),所以要的感情是非常
    純粹的,女孩子大多到了要結(jié)婚的關(guān)鍵時(shí)刻,生活現(xiàn)實(shí)和撫育后代的本能讓她們不得不
    物質(zhì)起來。這不能說不對。這也是為什么當(dāng)初蕓自己也不反對彩禮的原因。他說,我這
    樣的人,只有物質(zhì)生活到了一個(gè)水準(zhǔn)后,交往的女孩子才會有安穩(wěn)的感覺。現(xiàn)在還不
    行。但是我應(yīng)該感謝蕓,她激發(fā)了我,她放了我是我的幸運(yùn),否則我們在一起,蕓一定
    會成為我的桎梏。他還說,你的奮斗動(dòng)力就是她?那你的家人,朋友呢?我們呢?你以
    前的老板呢?你的員工呢?我們還一直以為你能成大氣,為了我們這份信任,你也不應(yīng)
    該放棄。而且,說實(shí)話,你的這點(diǎn)家業(yè)還很小很小,一不小心,很快就敗了。

    他還告訴我要留意小成,這小姑娘太聰明。我就是對女的太遲鈍了才栽的跟頭。以后絕
    對不能讓她獨(dú)掌財(cái)務(wù)大權(quán),我一定要控制住她。最后,他拍拍我說,兄弟,醒過來吧,
    外面的世界很殘酷,也很精彩,但是絕對不是為這個(gè)樣子的你準(zhǔn)備的。

    楓,今天的你也在看這份貼子嗎?如果是的話,我想對你說:哥們,真的謝謝你!

    20,心意
    因?yàn)槟且粓鲋笔阈匾艿膬A訴和楓的精到勸慰,我終于慢慢開始擺脫失戀的陰影。我特地
    給家里打了電話,給弟弟也打了電話,同時(shí)也和同學(xué)朋友紛紛聯(lián)系,又去拜訪了以前的
    老板,他們都為我在上海的奮斗狀態(tài)和所得高興。我之所以這樣做是想提醒自己,我的
    世界還在,我的生活還在,我要主動(dòng)地讓他們把我拉回到我的世界里。他們對我的愛也
    會成為我的動(dòng)力,這是更綿綿不絕,更持久的動(dòng)力。

    同時(shí)我也聽取了楓的建議,重新收回了店面的管理權(quán)限和財(cái)務(wù)權(quán)限。我把小成和另外一
    個(gè)店長互換了位置,然后仔細(xì)的查詢了最近的賬目,還悄悄地私下和其他人談了談,側(cè)
    面問了問他們對小成的看法,大家都沒說什么有價(jià)值的話,除了一號店店長,他的資格
    最老。一號店長說小成太跋扈,太不尊重人,什么事情都自己定,也不和老板商量,更
    別說其他人了。每天的財(cái)務(wù)帳、現(xiàn)金全是她管,根本不讓別人插手,也不知道她是怎么
    想的。因?yàn)槲視簳r(shí)沒有查到什么小成的把柄,所以只能安慰一下他,也沒有做什么動(dòng)
    作。

    這時(shí)候4號店的小徐(他就是我招的為小成打下手的伙計(jì))找到我,要求要換地方,他
    要跟小成到一個(gè)店里去,否則就辭職。我一開始很奇怪,后來恍然大悟,明白了小徐的
    心意:原來小徐已經(jīng)喜歡上了小成。我同意了小徐的要求,同時(shí)更為警惕,因?yàn)楣纠?
    有一對的話,容易形成小集體,而且他們?nèi)菀滓黄鹛郏蔀槲倚碌母偁帉κ帧N也坏?
    不暗自多留心小成和小徐。

    21,真愛
    我的心意逐漸回到了生意上。不得不承認(rèn),小成有一套。她總結(jié)出一些管理規(guī)范和待客
    方法很有用處。她的做法比我原來的做法更細(xì),我比較傾向于策劃一些活動(dòng)和辦法,短
    期效應(yīng)比較明顯,但長期的發(fā)展還是需要細(xì)化的管理。生意還是緩步發(fā)展,我們基本上
    每半年利潤提升20%,這一方面因?yàn)楣芾淼募?xì)化,人員的熟悉;另一方面還是得益于這
    里的人氣漸漸旺起來了。這樣過了年,到了2002年4月份,我的手頭已經(jīng)有了超過50萬
    的資金。經(jīng)過和小成交談,了解了她的很多想法,我覺得我暫時(shí)還時(shí)離不開小成。這段
    時(shí)間我發(fā)現(xiàn)小成對小徐也是淡淡的,他們的關(guān)系好像并沒有變得密切起來。

    因?yàn)閷π〕傻牧粜模野l(fā)現(xiàn)了小成身上的越來越多的細(xì)節(jié):她一個(gè)人住,愛干凈,愛
    笑,愛看書,很怕冷,尤其害怕感冒,不喜歡貓狗等等。因?yàn)樯獾木壒剩液托〕傻?
    交流越來越多,也就越來越了解她的聰明和能干。有時(shí)候我想,這么聰明的女孩因?yàn)榧?
    庭的原因不能上大學(xué)真是可惜了!又轉(zhuǎn)念一想,就是上了大學(xué)又怎么樣呢?大學(xué)生我自
    己不就是嗎?我見得還少嗎?原來戒備心理也可以讓人如此留意一個(gè)人。

    有一天我去查店,發(fā)現(xiàn)小成沒來上班。我們一般上班很晚,下班也相應(yīng)晚一些,因?yàn)樯?
    意一般是在下半天。寫到這里,我想到有的朋友懷疑一個(gè)10幾平方的熟食店一個(gè)月的利
    潤怎么會有10000塊錢,我想說,生意人人做,關(guān)鍵看你怎么做。我們的每個(gè)店周圍都
    有1000戶左右的小區(qū),很多是租戶,他們不愿開伙。我們每天晚飯時(shí)段一般要做50筆生
    意,每筆十幾元,這樣營業(yè)額就有700元左右。食品行業(yè)一般利潤率一半左右。節(jié)假日
    更好做,還不算飯店的生意。當(dāng)然,我們不用交房租。而且現(xiàn)在的生意也不如那時(shí)了,
    這是后話。言歸正傳,我發(fā)現(xiàn)小成沒來,就問了一下,有員工說她不舒服,今天不來
    了。小成沒來,小徐也沒來,我想想反正上午每什么事,應(yīng)該去看看小成是不是病得很
    嚴(yán)重,就向他們問了地址,出來買了點(diǎn)水果,打車往小成住的地方趕去。

    小成住的地方我沒有來過,到了小區(qū)門口我才發(fā)現(xiàn)是個(gè)比較高檔的小區(qū),這里一室一廳
    的房子一個(gè)月要1000塊吧,我邊走邊想,一邊又很不解為什么小成會把月收入的一小半
    用來租房,尤其是想想自己才剛從私房里搬出不久,現(xiàn)在的房子也不過是1000元左右。
    正在胡思亂想,忽然發(fā)現(xiàn)小徐從一個(gè)門洞里出來,急匆匆的樣子,我連忙回避在一旁,
    看著小徐跨上自行車往店面的方向趕去。

    忽然在這里看見了小徐的片刻,我的心里產(chǎn)生了一種很奇怪的滋味。一種很不舒服、心
    頭微酸--好像是吃醋的感覺,同時(shí)覺得一陣懊惱。這種感覺沒有經(jīng)過理智,完全好像是
    自然而然產(chǎn)生的,只是片刻之后,我忽然一陣震驚---難道我如此在意小成?難道我不
    知不覺已經(jīng)愛上了她?這是一個(gè)連我自己都吃驚的發(fā)現(xiàn),因?yàn)槭俚暮芫靡詠恚乙恢?
    覺得自己好像已經(jīng)不會愛、不能愛了,有時(shí)候我會接觸到一些女孩,可是我根本無法提
    起感覺。沒想到,我愛的感覺會在小成這里復(fù)蘇?小成可是我一直提防的人啊!

    剎那之間,我的腦海里風(fēng)起云涌,萬種思路好像被同時(shí)激活:是我失去了蕓,把小成作
    為一個(gè)感情的替代者了嗎?不是,和小成在一起的感覺完全和蕓不同,我們的交流更平
    和,因而更交融,我也感到更輕松。和蕓在一起完全是被激情和沖動(dòng)淹沒,我們心靈層
    面的交流顯得更少---如果更多的話,也不致有那樣的結(jié)果;是我因?yàn)樗×硕鴳z惜她
    嗎?不,憐憫和愛我是分得清的,現(xiàn)在我的心里分明有一種心痛而且甜蜜的感覺;難道
    是見到小徐引起的男人本能的異性排他性不滿?也不是,因?yàn)槲仪迩宄闹溃覜Q
    不是一個(gè)把身邊所有女孩都看成情人的情圣…..你呀你呀,你經(jīng)歷過感情的痛苦,所以
    你一定要分辨清楚,這是你的真感情,你的真愛嗎?你不要糊里糊涂的再帶給自己或別
    人痛苦了!

    可是我越是想,小成的笑臉、話語和我們交流的場景等等印象就越清晰,我就越覺得小
    成是真正適合我的女孩。她的開朗,她的平和,她的聰明能干,她的善解人意,還有她
    為我的事業(yè)作的努力和成效,當(dāng)然還有她可愛的、惹人憐惜的樣子---這些我以前都沒
    有明顯地感覺到,可是今天我感覺對我來說就象空氣一樣不可缺少!

    愛情的幼苗一旦破土,成長的速度真是驚人!在我佇立樓下不到30分鐘的之后,我已經(jīng)
    感到我的心胸開始無法承受它的奔涌,必須要向她傾訴才能緩解。可是我不是一個(gè)語言
    表達(dá)愛意的能手,尤其是現(xiàn)在這個(gè)令人激動(dòng)的時(shí)刻,我覺得我現(xiàn)在激動(dòng)的別說講話了,
    連一口氣都不能順暢的呼出。我忐忑不安,但又決定立刻向她說出來-就是現(xiàn)在!
    敲開她的房門的時(shí)候,她的臉色有些蒼白,可是她的目光那么平靜,柔和,一點(diǎn)也不吃
    驚。我反而更加慌張,不管了,我必須要說---"我,我……你,你,你病了……我
    發(fā)現(xiàn)我離不開你!我發(fā)現(xiàn)我愛你!小成,你聽我說,我愛你。我喜歡你。我要給你說,
    我離不開你了!"

    那天我說了很多吧?不知道,記不得了。可是結(jié)果我卻記得,小成拒絕了我。
    (周一請看:22,原因
    各位,21這一節(jié)和理財(cái)關(guān)系不大,可是對我的人生卻關(guān)系重大,所以我把它寫的很細(xì)。
    希望你們喜歡。)

    22,原因
    在感情方面,我是一個(gè)臉皮很薄的人。小成不聲不響地聽完我語無倫次的表白后,低著
    頭平靜地?fù)u頭表示不能接受,我就不知道該怎么做了。為什么?因?yàn)槟愫托⌒欤课覇枴?
    她搖搖頭,沒有說話,但我看到她有眼淚流下。呆了一會,我不知該怎么做,一直惶惶
    惑惑地。最后,我還是離開了她的住處。再見到小成,是2天后了。她來上班,我早早
    等在店里,遠(yuǎn)處一見她的身影,心里就怦怦跳個(gè)不停,可是見了她的面又不知該怎么說
    話。她看見我,好像臉紅了一下,就再沒和我說話。說實(shí)話,我覺得她是喜歡我的,尤
    其是回憶到她以前幫我時(shí)那種自告奮勇和盡心盡力,我越發(fā)這樣認(rèn)為,但是她為什么拒
    絕我呢?我想不明白,哎,真不理解女孩子的心思啊。她工作起來還是那樣井井有條效
    率很高。我不愿打擾,就去其他店了。

    到了4,5月份,天氣有點(diǎn)熱了,因?yàn)閯傔^了年,生意是屬于淡季。我們希望再熱一些,
    這樣人們愿意出來吃飯;不過因?yàn)樘鞜幔称沸袠I(yè)風(fēng)險(xiǎn)很大,絕對不能出現(xiàn)食品變質(zhì),
    否則對生意的傷害是很大的。我們這時(shí)候一般加緊和飯店聯(lián)系,因?yàn)轱埖暌看螅?
    可以預(yù)知,這樣風(fēng)險(xiǎn)小。因?yàn)檫@方面一直是小成負(fù)責(zé),所以現(xiàn)在淡季反而她會比較忙,
    我也比較放心。沒想到,不久小成忽然出了事情---她累得暈倒在了店里。

    當(dāng)時(shí)我接到電話飛速趕到店里,小徐已經(jīng)把小成扶在椅子上坐著,根據(jù)小成的指點(diǎn)正在
    給她味藥。小成堅(jiān)決不同意去醫(yī)院,小徐他們也沒辦法,看見我來了,都像看到救星一
    樣。我不由分說,對小徐說:你出去打車,我們兩把她送醫(yī)院!小徐一出門,我一把抱
    起小成就走。小成在邊掙邊說不去,我根本不停。我知道,不讓小徐他會和我急的,但
    是我也要和小徐公平競爭。很快送到了市八院---離我們那兒打車要30分鐘吧,我們
    等在旁邊,護(hù)士就要開始測血壓、測血、停診了,對站在旁邊誰都不肯離去的我和小徐
    說:"女孩子脫衣服你們小伙子也在旁邊嗎?"沒辦法,我們只好出去。

    我們等在外面,小徐一直不和我說話。大概他感覺出我對小成的意思,他有些戒備吧。
    大概過了幾十分鐘吧,醫(yī)生出來小聲說:"成**,同事還是家屬?"我們都站了起來,
    醫(yī)生責(zé)備的對我們說,小成有先天性心臟病,根本不能工作勞累、激動(dòng),更不能感冒。
    她的心臟已經(jīng)比普通人大了,因?yàn)樾r(shí)候沒有手術(shù)治療,現(xiàn)在手術(shù)的可能性很小,只能
    靜養(yǎng)。

    這時(shí)候我的腦海里如電光火石一般,一下明白了為什么她一累就臉色發(fā)白;為什么她不
    能干體力活;為什么她怕冷,不能感冒;為什么她住那樣的房子---因?yàn)獒t(yī)院近;甚
    至,我也明白了---為什么她拒絕我。小徐顯然也不知道這個(gè)真相,他愣在一旁一時(shí)有
    些不知所措。我搶先沖進(jìn)急診室,小成也看見了我,她顯然也聽見了醫(yī)生叫我們。她的
    目光平靜,柔和,還有---期待。我走到小成身邊,抓住她的手,對她輕聲說:我知
    道了。你該早點(diǎn)告訴我。我和你一起,我們一起面對,好嗎?說著把她的手貼在了自己
    臉上,小成的眼淚刷地下來了。這時(shí)候,小徐進(jìn)來正好看見。護(hù)士著急地說,她不能激
    動(dòng)的,你們出去!出去!

    我終于得到了小成的認(rèn)可。她后來對我說,其實(shí)她開始是覺得我失戀了,很可憐,愿意
    幫我多做點(diǎn)事,后來就慢慢喜歡上了我;可是后來她發(fā)現(xiàn)我在防她,很讓她傷心;她拒
    絕我一方面是因?yàn)檫@個(gè)---女孩子的報(bào)復(fù)心,她也有;另一方面,她早知道自己的
    病,也不想拖累我。最后她在病床邊倚著我,淚光閃閃的對我說:"你知道嗎?一個(gè)女
    孩子在外面,很多時(shí)候真累啊。我暈倒的時(shí)候,心里想,真去了,別的沒什么,就是好
    后悔啊,我應(yīng)該和你愛一場啊。我是不是好自私?我真的是不甘心。"我什么也沒說,
    只是把她緊緊的摟在懷里。

    小成還告訴我,其實(shí)她是出生就有這個(gè)病了,他父母親一直在做生意,家里人其實(shí)不缺
    錢。家里人讓她讀書讀到高中,考大學(xué)已經(jīng)考上了,但是擔(dān)心遠(yuǎn)沒人照顧,死活不讓她
    去上。小成很不愿意自己成為家里人的累贅,自己跑了出來打工,決心自己養(yǎng)活自己。
    她以前就和家里人耳濡目染,所以對生意很在行。正好我把她招了進(jìn)來。她說,小徐一
    直對她很好,她加班小徐一直陪著,可是她知道他們不可能。

    沒幾天小成堅(jiān)持要出院,她說住了多少次院了,還是家里舒服---不就是靜養(yǎng)嗎。我
    們搬在了一起。這是我的堅(jiān)持要求,我說我一定要照顧好你。小徐要辭職,我沒說什么
    同意了。最后,我和他一起吃了頓晚飯。他深情黯然的說,沒想到她有那么嚴(yán)重的病,
    我就是愣了一會,哎,你先跑進(jìn)去了。后來喝了點(diǎn)酒,他又說,你比我有錢,她當(dāng)然選
    你。我一般抓住他,對他說,你胡說,小成不是那種看重錢的人。至于錢,小徐,好好
    努力,你還年輕,你也會有錢,也許比我還有錢。到那時(shí)也許你會明白小成。

    3年以后的一個(gè)偶然的機(jī)會,我又在閔行體育公園附近見到了小徐。不過他早已今昔非
    比,他對我說,他一直沒忘我的話,也自己憋了一口氣。辭職了以后,他先是自己騎三
    輪車從七寶蔬菜批發(fā)市場批蔬菜到小區(qū)賣,后來自己租了個(gè)攤位,后來賣豬肉,再后來
    自己買了一輛二手嘉寶,自己去江蘇進(jìn)豬肉賣。3年以后,剛剛掙了50萬,在附近買了
    一套80平方的房子。他最后說,還是要謝謝你。我想起身邊和網(wǎng)上很多朋友不停地抱怨
    房價(jià)飛漲,抱怨沒有工作,抱怨辛苦賺不到錢,抱怨這里抱怨那里---其實(shí)他們連一
    個(gè)高中都沒有讀完的小徐都不如!

    23,乏術(shù)
    我看到有人在懷疑我的經(jīng)歷的真實(shí)性,想要向他們爭辯,想想又算了。每個(gè)人的生活軌
    跡不同,想法不同,就是向他們證實(shí)了又能怎么樣呢?能改變生活現(xiàn)狀嗎?我還是寫下
    去,就算是經(jīng)歷了這么多的總結(jié)吧。但愿有朋友在看的時(shí)候能夠獲得共鳴,獲得激勵(lì),
    產(chǎn)生力量,進(jìn)而改變你們自己的人生。如果不信,也沒什么,因?yàn)槲覀兩畈煌?
    都要繼續(xù)。

    小成和我的關(guān)系定了以后,我們會經(jīng)常長時(shí)間的交談。她讀書很多,尤其喜歡古詩詞。
    我們很多事情都談的津津有味,可以就一個(gè)事件談上幾個(gè)小時(shí)。現(xiàn)在我在想,談戀愛談
    戀愛,說談是有道理的吧。她有時(shí)候會從夢里醒來,一聲不響地看我半天。我問她為什
    么,她說她高興,睡不著。有時(shí)候她會流淚,說是想家了。我要和她家聯(lián)系,她又不
    讓。我不再讓她查店,每天帶著她看看就行了。可是她閑不住,對我說,我要閑著就在
    家耗著,跑這來干嘛?我也沒辦法。本想生意就這么發(fā)展下去,我們也不會擔(dān)心未來錢
    的事。可是這時(shí)候生意忽然被一件沒有料到的事情影響了。

    過了幾個(gè)月,我們這里要聽說要修路了,要打通和大馬路接上。因?yàn)槲覀冇?家店面是
    屬于臨時(shí)房,肯定會被拆掉。臨時(shí)商業(yè)房拆掉,市政會補(bǔ)一點(diǎn)錢,但是對我們來說并不
    劃算,因?yàn)楦浇匿伱嬉呀?jīng)漲價(jià)了,客戶也熟悉了。我考慮了很久,也沒有什么辦法。
    為了不讓小成知道擔(dān)心,我并沒有在她面前表現(xiàn)的壓力很大。

    同時(shí)我也暗暗留心小成的病情,我覺得好像越來越嚴(yán)重了。我也到處查找她的這個(gè)病的
    原因,治療方式和注意事項(xiàng)。大夫給我說的是對的,這個(gè)病一般不能結(jié)婚,更禁止生
    育,因?yàn)樗男呐K會受不了。一般在嬰兒時(shí)期手術(shù)解決,成人后手術(shù)成功率很低。目前
    除了靜養(yǎng),不能勞累,尤其不能感冒。除此之外,還沒有比較好的治療辦法。我覺得這
    個(gè)障礙比我以前碰到的任何一個(gè)都艱巨、困難,有一種一籌莫展的感覺。

    24,訣別
    也許很多朋友的感情經(jīng)歷比我復(fù)雜的多,但是一直以來我都認(rèn)為命運(yùn)待我不公,一直以
    來我也在問上蒼:為什么不給我一段長一點(diǎn)的真愛,比如說一輩子。直到不久以前,我
    才解開這個(gè)心結(jié)(請看后續(xù)章節(jié))。看到這一節(jié)的標(biāo)題,朋友們想必已經(jīng)知到了結(jié)果。
    原諒我寫得這么慢,我不能平靜自己的心情。

    小成自己也有感覺。她有時(shí)候會摟住我說,真不想把你交給另一個(gè)人,我讓她別胡說。
    有時(shí)候她會說,我走了以后,你一定要找一個(gè)好的。你看,她在不停的矛盾。我覺得她
    真是普通人,一個(gè)平凡女孩的心思和想法她都有,正是這些讓我覺得她一個(gè)讓我無比憐
    惜的人。她的心跳越來越快,也不規(guī)則了。我不再讓她跟我去店里,還找了一個(gè)阿姨照
    顧她。有一天,她對我說,不行,我?guī)湍阗嵙四敲炊噱X,從來沒有做過主婦的感覺,你
    要把錢都交出來,我要管錢,做做主婦。我笑著把存折、密碼、身份證、房產(chǎn)證都交給
    了她。有什么不能呢?這些我失去了相信還可以賺回。

    到了秋天,天氣冷了,小成好象更不好了。她臉色不好,心跳過快,我還是把她送進(jìn)了
    醫(yī)院。我覺得一定要把她的家人叫來。她這次沒有拒絕,但是她說她先和家里人打個(gè)電
    話,不讓我聽。電話不到2天,她的父母親就趕來了。不知道她和她的父母說了什么,
    她的父母見了我特別的親,一個(gè)勁在我面前流淚,還說這孩子脾氣太倔了。我們3個(gè)人
    的時(shí)候,她的父母親會象我自己的父母一樣,不停的讓我注意身體,多吃一些,多穿一
    些。

    我真的不愿意回憶那個(gè)日子,12月21號,她住進(jìn)醫(yī)院2個(gè)月半月的時(shí)候。其實(shí)她走的時(shí)
    候,心臟已經(jīng)很大了。醫(yī)生說,這樣的病一般是心臟忽停,突然死亡,象她這樣的比較
    少,她也屬于比較嚴(yán)重的了。我留著淚在她床前聽到最后的一句話是:難受,胸好悶。
    謝謝。

    25,禮物
    我送走了小成。我不知道怎樣描述當(dāng)時(shí)我的悲痛欲絕的心情。因?yàn)槲也荒茉谒母改该?
    前表現(xiàn)出來,否則她的母親根本沒有辦法控制自己的感情。想起前面有個(gè)朋友問我,如
    果用我的全部身家去換取真愛,我會怎樣選擇?我想我在這里可以回答了:朋友,如果
    你的一只手要離你而去,代價(jià)是你的全部身家,你會怎樣選擇?如果你有猶豫,那答案
    很簡單---這不是你的真愛。我感覺到我的心已經(jīng)是不再完整的了。

    在她的遺物中我發(fā)現(xiàn)了以前給她的存折,但是已經(jīng)少了一個(gè)房產(chǎn)證---我的別墅的房產(chǎn)
    證。當(dāng)然,我還發(fā)現(xiàn)了一封信。其實(shí)我早就知道她在寫遺書,只是不忍在內(nèi)心承認(rèn)罷
    了。她這么聰明的女孩,一定會想到這些的。

    遺書里說:對不起,我不能和你一起忙下去了。別太難過,以后就是你要經(jīng)常想我。遇
    見你很好,我本來害怕就這樣糊里糊涂地走了,現(xiàn)在知道我的生命比我以前的想法好多
    了,我不那么遺憾了。就是會帶給你和我父母痛苦……
    ……

    你要堅(jiān)強(qiáng),要挺住,你還要走很長的路吧。我把你的別墅給賣了---這是你給另外一
    個(gè)女孩買的,是嗎?我做主了,你會怪我嗎?因?yàn)槲覀兊氖焓车瓴皇情L久之計(jì),你也不
    會甘心一輩子賣肉,是吧?我去定了一個(gè)商鋪,首付就用別墅賣的錢,剩下的2個(gè)店,
    賣了吧,還有拆遷的店,拿到了補(bǔ)償,和我們(我用了我們,你愿意嗎?)以前的錢,
    不少了吧,別亂花。然后到我家去,和我爸交流一下,也許你能夠找到機(jī)會。他會幫你
    的,我和他們說過了。你應(yīng)該有更大的事業(yè)。

    如果我這樣替你做主,真的賺了錢,就算是我留給你的禮物吧。虧了,就當(dāng)我以前為你
    忙碌賣命,我應(yīng)得的錢我又拿走了。呵呵,我不想要錢,只想你過的快樂一些,就看你
    自己的努力了……

    26,轉(zhuǎn)型
    小成的事情之后,我的生意大不如前了,可能也和我的心情有關(guān)。2003年1月底,我賣
    掉了我的2個(gè)店。又過了3個(gè)月,我拿到了市政補(bǔ)助的資金。加上我手里的錢,一共109.
    5萬。我的別墅,小成以8500左右的單價(jià)賣出,用80萬左右做首付買了一個(gè)300平方左右
    的商鋪,但是要4個(gè)月以后交房。這個(gè)地方的商鋪,近一年后我在2003年12月時(shí)以每平
    方每天7元出租,一個(gè)月能收回6萬多塊錢,扣除還款我每月還能剩余4萬塊錢。這已經(jīng)
    基本相當(dāng)于我以前4個(gè)店一個(gè)月的盈利了,今年年初,我讓評估師估了一下價(jià)格,已經(jīng)
    到19000左右每平方了。小成,你又一次讓我見識了你的聰慧。

    想到以前小成每天那么開心,那么充實(shí)的樣子,現(xiàn)在我明白了:其實(shí)她一直處在生命隨
    時(shí)會停止的陰影下,所以她的生活態(tài)度反而那么豁達(dá),開朗,而又忙碌充實(shí)。這才是生
    命本來應(yīng)該有的態(tài)度。我也應(yīng)該這樣生活。而且我不能僅靠收租為生。我又開始想著新
    的事業(yè)了,我決定如小成所說,到她家里去一次。我和她父母聯(lián)系了一下,他們很熱
    情,讓我隨時(shí)都可以去。我雖然比以前多了100萬現(xiàn)金,可是我心里面一點(diǎn)也不輕松,
    因?yàn)檫@一次我面臨著從飲食業(yè)到其他行業(yè)的轉(zhuǎn)型,其實(shí)也是一種重頭再來。

    2003年4月,我去了小成家。小成的父母在做皮革生意,他們一直在為國外的汽車和家
    具提供定制的真皮座椅和包墊。真沒想到,他們生意做得很大。而且他們那里家家是作
    坊,戶戶是工廠,浙江真是讓我見識了民營經(jīng)濟(jì)的力量。和她的父母交流之后,我才知
    道自己這100萬現(xiàn)金根本不夠做這個(gè)方面。她家人對我說,可以提供資金幫助,我也可
    以和他們合股做,我愿意留下來也行。但是我拒絕了。我有種感覺,這不是我要找的那
    個(gè)行業(yè),另外我還是愿意自己奮斗。她的父母認(rèn)了我為干兒子,我走的那一天,在她家
    吃飯,我喝醉了。她的母親又哭了。

    27,嘗試
    我最終沒有接受小成父母的美意,不知道遠(yuǎn)在天國的小成知道我的這個(gè)選擇后是滿意還
    是不滿意。我想她是理解我的吧,我一直那么獨(dú)立,一直以為自己的事情要自己做。雖
    然沒有做她父母的那個(gè)行業(yè),但是她父母臨走時(shí)說的一句話倒是讓我思索很久。她父母
    說,現(xiàn)在他們的產(chǎn)品慢慢地國內(nèi)的汽車廠家也開始要貨了,這是不是說明這個(gè)大行業(yè)內(nèi)
    還是有機(jī)會的呢?

    2003年4月底我回到上海以后,又以70萬總價(jià)70%貸款買了一套商品房,畢竟自己也要住
    的,付房租不如付貸款了。然后我就主要在考慮下一步的努力方向了。飲食業(yè)我是不再
    考慮了,可能有點(diǎn)傷心的原因在里面吧。我希望有個(gè)嶄新的事業(yè),嶄新的我。IT業(yè)我也
    認(rèn)為不好,原因是我看到這幾年身邊的年輕人開公司有80%選擇IT業(yè),競爭太激烈了,
    而且經(jīng)營狀況并不理想,我估計(jì)還要至少幾年淘汰這個(gè)行業(yè)才會正常。電子加工,服務(wù)
    業(yè)什么的,我都考慮過。想來想去比較了很長時(shí)間,我決定嘗試代理國外品牌做汽車機(jī)
    油和高檔潤滑油。我覺得小成的父母給我的啟示還是有幾分道理的:國內(nèi)的汽車市場現(xiàn)
    在才剛剛開始,還會有10幾年的高速發(fā)展期,這個(gè)行業(yè)就像10幾年前做計(jì)算機(jī)行業(yè)一
    樣,是值得我投入的。

    我的習(xí)慣是:想法一經(jīng)決定,行動(dòng)決不遲疑。5月初,我找好了辦公地點(diǎn),開始招人;5
    月底,辦公家具和人員進(jìn)場;6月份,我拿到了營業(yè)執(zhí)照和發(fā)票。我開始熟悉這個(gè)市場
    的渠道、客戶、產(chǎn)品。那個(gè)時(shí)候我?guī)缀趺刻於既侵新罚刻於忌暇W(wǎng)查資料,每天都向
    國外寫電子郵件詢問產(chǎn)品性能,報(bào)價(jià),索要樣品等等信息。到了8月份的時(shí)候,我公司
    終于定下了一個(gè)全權(quán)代理和4項(xiàng)一級代理的產(chǎn)品。然后我開始在江浙一帶的城市里不停
    地奔波,尋找、拜訪代理和零售商,以及和他們洽談。我是這樣認(rèn)為,以我目前的實(shí)力
    在上海的這個(gè)行業(yè)里撕開口子太難了,我應(yīng)該先從周邊入手。開始我是租車開,后來10
    月份的時(shí)候,我自己貸款賣了一輛馬自達(dá)-福美來。我的現(xiàn)金我認(rèn)為還是應(yīng)該留著公司
    發(fā)展用。

    雖然2003年下半年我做的很辛苦,但是到了年底一算,我的這個(gè)公司并沒有賺錢,反而
    虧損了12萬-平均每個(gè)月2萬的虧損。可能有的朋友會問,汽車行業(yè)2003年是最熱
    了,你怎么還虧了呢?這個(gè)虧損我卻一點(diǎn)也沒有心痛和意外,一方面是因?yàn)槲乙呀?jīng)經(jīng)歷
    了很多生意上的風(fēng)雨,更重要的是因?yàn)檫@都在我的預(yù)想之內(nèi)。

    做生意有很多種,有的人是以長時(shí)間積累的技巧、經(jīng)驗(yàn)、關(guān)系和渠道掙錢-這是以時(shí)間
    換空間;有的人是一招鮮、吃遍天-這是壟斷或是以技術(shù)制勝;還有的人是用錢換取技
    巧、經(jīng)驗(yàn)、關(guān)系和生意流通的渠道,這是以空間換時(shí)間-我就是這么做的。我剛進(jìn)入
    這個(gè)行業(yè),經(jīng)驗(yàn)、關(guān)系、客戶基礎(chǔ)和渠道都不行,一進(jìn)來就賺錢是不太可能的。但是更
    不能害怕花錢而停止腳步,生意一定要走出去,開發(fā)的流程不能停止。這半年來,雖然
    我出貨不多,遠(yuǎn)遠(yuǎn)不能養(yǎng)活公司,但是我一是組織了團(tuán)隊(duì),熟悉了團(tuán)隊(duì),鍛煉了團(tuán)隊(duì)的
    力量;二是建立了銷售渠道,江浙一帶我們開發(fā)了70多家下級代理,我們讓他們試用先
    打開市場,還要熟悉競爭對手,客戶公關(guān)等等,這一切都進(jìn)展順利。2003年汽車銷售是
    很熱,但是我認(rèn)為我們這一塊屬于汽車保養(yǎng)和維修類會有一個(gè)滯后期。我們2003年底的
    業(yè)績已經(jīng)大大好于8月份。對于即將到來的2004年,我胸有成竹。

    28,歸宿
    公司的實(shí)際經(jīng)營果然是按照我的預(yù)想發(fā)展。2004年1月份,我們的銷量獲得了突破,我
    們已經(jīng)有些許的盈利了。2月份因?yàn)檫^節(jié),生意比1月份下降5%。3月份獲得30%的大幅增
    長,這樣我們已經(jīng)凈盈利4萬了。我加大了激勵(lì)力度,我的團(tuán)隊(duì)志氣如虹,一個(gè)個(gè)宣稱
    今年底要比3月份的銷量翻番。我知道,這是有可能的。因?yàn)槲覀兦捌诖罹偷钠脚_完全
    可以承載這個(gè)銷量----70~100個(gè)有規(guī)模的下級代理,每個(gè)月每個(gè)代理的銷量達(dá)到
    8000~10000元并非難事。

    我的公司里招了幾個(gè)上海的女孩子。原來我很少和上海女孩打交道---其實(shí)我就很少
    和女孩打交道,阿蕓和小成而已。但是通過和我們公司的上海女孩溝通,合作,熟悉
    之后,她們讓我以前對上海女孩的看法大為改觀-----我以前是心里有偏見了。她們
    初看打扮時(shí)髦而又干練,說話快而利落,腦子清楚毫不拖泥帶水,對價(jià)格非常敏感,你
    以為她們很勢力很在乎金錢。是的,對普通人陌生人是的。可是交往久了,我覺得她們
    工作盡職盡責(zé)----加班從來都是自己要求的,自己的事自己做完;做事很有責(zé)任心
    ----對公司的財(cái)物,以及用水用電完全像對自己家的一樣;很重感情----我們公司
    有不只一個(gè)女孩為了男朋友、同學(xué)而付出了金錢,時(shí)間,甚至家庭的埋怨。也許,外人
    對他們的誤解只是因?yàn)榇蠹易鍪虑榈姆椒ú煌T了,畢竟,人更重要的是心靈和思想。
    可是我的感情生活依舊空白。我覺得現(xiàn)在的我不可能再發(fā)展一段戀情---在我的心里
    小成一刻也不曾離開。每天我都會看小成給我的那封信,那信其實(shí)寫得很長。看了之后
    我總覺得她離我不遠(yuǎn),我的心里也覺得很溫暖。小成,你的心靈和思維脫離了肉體的羈
    絆,應(yīng)該飛的更快更遠(yuǎn)了吧。這段時(shí)間由于小成的離去,我每天努力的工作回家之后,
    會覺得失去了歸宿感。有時(shí)候我會忽然想,我來這里干什么?哪里是我的歸宿呢?我努
    力奮斗,努力掙錢,掙了很多錢又怎么樣呢?

    這是我第一次考慮這個(gè)問題----金錢對我意味著什么。以前生存和事業(yè)的壓力,以及
    一個(gè)接著一個(gè)的打擊和磨礪讓我始終無暇顧及這個(gè)具有終極意義的話題。是啊,雖然我
    現(xiàn)在還不是很有錢,但是我有錢了以后怎么辦?以前我國傳統(tǒng)的精神也只講過:君子愛
    財(cái),取之有道。可是如果取到了有怎么樣呢?原諒我的陋學(xué),我沒有看到這方面的闡
    述。很多中國人有錢了以后,生活奢靡、大講排場、意志低落、胡亂花錢,很多還喪失
    了生活的動(dòng)力,多少人在貧賤時(shí)堅(jiān)持的修身養(yǎng)性,成仁取義,在富貴來臨時(shí)煙消云散。
    更有很少的人捐錢給慈善事業(yè)和救助他人,我想這一切也和我們的傳統(tǒng)文化有關(guān)。我堅(jiān)
    決不要這樣的生活。可是為什么西方人有那么多有錢人,給慈善事業(yè)捐錢呢?而且他們
    一些窮人也有給慈善事業(yè)捐錢的習(xí)慣呢?

    一個(gè)偶然的機(jī)會我看到了《圣經(jīng)-馬太福音》,里面的闡述讓我如夢初醒。那里面
    說,雖然富人因?yàn)樯系劢o予的機(jī)會和能力獲得了財(cái)富,但是那財(cái)富并不是富人的,只是
    上帝因?yàn)榭吹截?cái)富由于在富人手中增值而讓那些富人代為保管的,一旦有需要,應(yīng)該把
    財(cái)富還給所有人。這就是我所要尋找的原因。我于是如饑似渴地每天看《圣經(jīng)》,那里
    面的文字讓我的安靜,安定,安心。在這里面,我找到了和我心靈合拍的仁愛心、慈悲
    心、謙卑心和使命心。我進(jìn)一步了解到我以前毫無信仰,或者以自己為信仰時(shí)的無知、
    自以為是、狂妄自大和故步自封。朋友,也許你和我信仰不同,請不要在這里爭執(zhí)孰是
    孰非。也許只有每個(gè)人只有經(jīng)歷苦苦思索和重重磨礪,才能接近你所認(rèn)為的真理。最終
    我在這里找到了歸宿,也找到了問題的答案。

    我在徐家匯教堂受了洗,成為主的信徒。受洗之后,我每周都要去教堂坐坐。我知道,
    小成一定會成為天使,主一定也會指引我。我以前認(rèn)為的愛是我前進(jìn)的動(dòng)力,這愛字,
    今天我才體會到更廣泛更宏大的意義。它已經(jīng)成為了我的使命。

    29,疑問
    2005年的1月,我在徐家匯附近,漕溪路旁的那塊大空地上停好車出來的時(shí)候,忽然意
    外地發(fā)現(xiàn)了蕓和她的男朋友----現(xiàn)在應(yīng)該已經(jīng)是老公了吧,因?yàn)樗麄兪掷镞€抱著一個(gè)2
    歲大小的孩子。他們顯然也發(fā)現(xiàn)了我,但是顯然雙方都有點(diǎn)錯(cuò)諤。我先打招呼,笑著
    說,這是你們的孩子啊?真漂亮!我們之間的氣氛一下融洽了。交談中我得知,他們
    2001年底結(jié)婚,2002年底有了這個(gè)可愛的女兒。他們的生活不錯(cuò),買車買房也是2004年
    的事。我衷心的祝福他們。他們問我的情況,我也告訴了他們,我也得到了他們的祝
    福。我們還約好下次一起吃飯。

    我曾經(jīng)以為,如果我再見到蕓,我絕對不會保持平靜,甚至我不知道怎么見她。可是我
    做到了,我不僅做到了心情平靜,還做到了如常交流,更做到了絕對真心地祝福他們,
    理解他們。經(jīng)歷了那么多,看到了那么多,失去了那么多,我也得到了那么多。穿破圍
    墻,我的心靈獲得了更大的空間和放飛的舞臺。

    我公司的生意到了2004年的9月份已經(jīng)能夠保持每個(gè)月70萬左右的營業(yè)額,12萬左右的
    利潤了。10,11,12三個(gè)月我們又在原來的基礎(chǔ)上開拓了30家左右的零售店面,基本能
    夠?qū)崿F(xiàn)每個(gè)月15萬左右的利潤。到年底的時(shí)候,我手上的資金加上商鋪出租收入,公司
    原有資金和盈利,已經(jīng)達(dá)到了180萬。我的一個(gè)專門做公司投資的朋友說,像我們這樣
    的小公司,只要我能保持公司連續(xù)盈利36個(gè)月,那么公司的價(jià)值一般就是公司60個(gè)月的
    利潤總和。他笑著說,算算你的公司也值四五百萬了吧,如果你保持現(xiàn)在的盈利狀況。
    我的心中不相信"保持現(xiàn)狀"這句話,以前的經(jīng)歷屢屢說明這一點(diǎn):沒有人能夠保持現(xiàn)
    狀。只有改變現(xiàn)狀,才能保持不敗。可是我經(jīng)過粗粗一算之后,心里產(chǎn)生了疑問。因?yàn)?
    我要提升目前的經(jīng)營水準(zhǔn),勢必重新打造一個(gè)更大更快速的經(jīng)營平臺,管理要上新臺
    階,還要進(jìn)行更嚴(yán)密更系統(tǒng)的市場推廣計(jì)劃---我叫它"重生"計(jì)劃。這個(gè)計(jì)劃我粗粗
    算了一下,要求我投入300萬左右的資金。我陷入了思考:這樣的計(jì)劃風(fēng)險(xiǎn)是否太大?
    如果失敗,我會失去現(xiàn)有的所有公司盈利和手上資金,還有我部分的不動(dòng)產(chǎn)。那么我應(yīng)
    該保持現(xiàn)狀,這也沒什么不好,這樣總有其他競爭者先做,然后我再靜觀事變嗎?如果
    我實(shí)施"重生"計(jì)劃,完成后如果發(fā)揮100%的效果,我9~10個(gè)月可以收回成本,公司隨
    后還有應(yīng)該有更大的發(fā)展。如果發(fā)揮70%的效果,我15~18個(gè)月可以收回成本。如果發(fā)揮
    50%以下的效果,那就是失敗。

    可是奮斗這種東西已經(jīng)進(jìn)入了我的血液,變成了我的基因。我實(shí)在不能忍受自己什么也
    不做而失去這個(gè)成為自己領(lǐng)域內(nèi)前幾位的機(jī)會。為主,為小成,為我,為我所有的朋友
    和家人,還有我的員工,我決定放手一博。我把買的商品房(現(xiàn)在已經(jīng)漲價(jià)了,達(dá)到
    150萬了)和汽車做了二次抵押,貸了120萬資金,這樣我手上的資金已經(jīng)有300萬了。
    2004年12月21日夜里11點(diǎn),我終于完成了17萬字的詳細(xì)的"重生計(jì)劃"的策劃報(bào)告。我
    沒有忘了這一天,我一定要在這一天完成這報(bào)告。

    半夜里我開車從主干道下來,到了以前我和小成三號店的舊址----她是在這里愛上
    我,我也是在這里愛上她的。這里一切已經(jīng)今昔非比,再也見不到路邊的臨時(shí)房了,全
    部都是寬寬的馬路和人行道,誰也不會再關(guān)心這里曾經(jīng)發(fā)生的事情了。我停下車,下車
    來靠著車點(diǎn)燃一只煙。看著天邊半滿的月亮,我清清楚楚地看見了小成妍妍的笑臉。我
    也笑了,只是臉上已經(jīng)流滿了淚水。

    朋友們,我在上海的奮斗歲月-----結(jié)束了嗎?不,我心里知道,一切才剛剛開始!

    30,經(jīng)驗(yàn)(大結(jié)局)
    下面是我自己的感悟和我的經(jīng)驗(yàn),權(quán)做參考:
    1,人生就是投資和收益的人生。如果你有錢,就投入金錢;如果你沒有金錢,而有經(jīng)
    驗(yàn)和能力,就投入經(jīng)驗(yàn)和能力;如果你既沒有金錢,也沒有經(jīng)驗(yàn)和能力,但是你有熱
    情、勤奮和努力,那就投入熱情、勤奮和努力。如果你既沒有金錢,也沒有經(jīng)驗(yàn)和能
    力,連熱情、勤奮和努力也沒有,那就別想這些了。
    2,比賺錢更重要的是找到你自己的賺錢動(dòng)力;
    3,比金錢重要的是時(shí)間,比時(shí)間重要的是時(shí)機(jī),比時(shí)機(jī)重要的是你要抓住時(shí)機(jī)的決
    心,動(dòng)力和準(zhǔn)備!
    4,別好高騖遠(yuǎn),機(jī)會一般都在你看不起眼的角落里藏著;
    5,舍得投入;
    6,決定一下,行動(dòng)要快;
    7,永遠(yuǎn)盡可能準(zhǔn)備好資源,隨時(shí)準(zhǔn)備抓住機(jī)會,要快!
    8,待人以誠,對人以善。有時(shí)候,機(jī)會是別人給的;
    9,給別人的比別人期待的多一些(這是我抄李嘉誠的,我很喜歡);
    10,賺錢有個(gè)普遍的法則:多做,快做,動(dòng)腦筋變著花樣做,就是別跟著別人一樣
    做。
    11,合理規(guī)劃有錢以后的日子,會讓你走的更遠(yuǎn);
    12,有信仰,有原則,有愛心。

    posted @ 2009-12-16 01:10 不高興 閱讀(644) | 評論 (0)編輯 收藏
     

    select   *   from   mytable   where   to_char(install_date,'YYYYMMDD')   >   '20050101'  

    select   *   from   mytable   where   install_date     >   to_date('20050101','yyyymmdd');

    取得當(dāng)前日期是本月的第幾周

    SQL>   select   to_char(sysdate,'YYYYMMDD   W   HH24:MI:SS')   from   dual;
      
    TO_CHAR(SYSDATE,'YY
    -------------------
    20030327   4   18:16:09
      
    SQL>   select   to_char(sysdate,'W')   from   dual;
      
    T
    -
    4

    №2:取得當(dāng)前日期是一個(gè)星期中的第幾天,注意星期日是第一天

    SQL>   select   sysdate,to_char(sysdate,'D')   from   dual;
      
    SYSDATE       T
    ---------   -
    27-MAR-03   5

    類似:

    select   to_char(sysdate,'yyyy')   from   dual;   --年
    select   to_char(sysdate,'Q'   from   dual;           --季
    select   to_char(sysdate,'mm')   from   dual;       --月
    select   to_char(sysdate,'dd')   from   dual;       --日
    ddd   年中的第幾天
    WW   年中的第幾個(gè)星期
    W   該月中第幾個(gè)星期

    DAY 周中的星期幾
    D   今天對映的NUMBER

    '1','星期日',  '2','星期一', '3','星期二', '4','星期三', '5','星期四',  '6','星期五',  '7','星期六'
    hh   小時(shí)(12)
    hh24   小時(shí)(24)
    Mi   分
    ss   秒

    №3:取當(dāng)前日期是星期幾中文顯示:

    SQL>   select   to_char(sysdate,'day')   from   dual;
      
    TO_CHAR(SYSDATE,'DAY')
    ----------------------
    星期四

    №4:如果一個(gè)表在一個(gè)date類型的字段上面建立了索引,如何使用

    alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'


    №5: 得到當(dāng)前的日期
    select sysdate from dual;

    №6: 得到當(dāng)天凌晨0點(diǎn)0分0秒的日期
    select trunc(sysdate) from dual;

    -- 得到這天的最后一秒
    select trunc(sysdate) + 0.99999 from dual;

    -- 得到小時(shí)的具體數(shù)值
    select trunc(sysdate) + 1/24 from dual;

    select trunc(sysdate) + 7/24 from dual;

    №7:得到明天凌晨0點(diǎn)0分0秒的日期

    select trunc(sysdate+1) from dual;

    select trunc(sysdate)+1 from dual;


    №8: 本月一日的日期
    select trunc(sysdate,'mm') from dual;


    №9:得到下月一日的日期
    select trunc(add_months(sysdate,1),'mm') from dual;

    №10:返回當(dāng)前月的最后一天?
    select last_day(sysdate) from dual;      
    select last_day(trunc(sysdate)) from dual;
    select trunc(last_day(sysdate)) from dual;
    select trunc(add_months(sysdate,1),'mm') - 1 from dual;


    №11: 得到一年的每一天
    select trunc(sysdate,'yyyy')+ rn -1 date0
    from
    (select rownum rn from all_objects
    where rownum<366);


    №12:今天是今年的第N天
    SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;

    №13:如何在給現(xiàn)有的日期加上2年
    select add_months(sysdate,24) from dual;

    №14:判斷某一日子所在年分是否為潤年
    select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','閏年','平年') from dual;

    №15:判斷兩年后是否為潤年
    select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','閏年','平年') from dual;


    №16:得到日期的季度

    select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;

    select to_char(sysdate, 'Q') from dual;


    獲取本周一,周日的日期

    select trunc(sysdate,'d')+1,trunc(sysdate,'d')+7 from dual;

    posted @ 2009-12-15 13:40 不高興 閱讀(1538) | 評論 (0)編輯 收藏
     
    1.
    概述
    最近論壇很多人提的問題都與行列轉(zhuǎn)換有關(guān)系,所以我對行列轉(zhuǎn)換的相關(guān)知識做了一個(gè)總結(jié),希望對大家有所幫助,同時(shí)有何錯(cuò)疏,懇請大家指出,我也是在寫作過程中學(xué)習(xí),算是一起和大家學(xué)習(xí)吧!
    行列轉(zhuǎn)換包括以下六種情況:
    1)
    列轉(zhuǎn)行
    2)
    行轉(zhuǎn)列
    3)
    多列轉(zhuǎn)換成字符串
    4)
    多行轉(zhuǎn)換成字符串
    5)
    字符串轉(zhuǎn)換成多列
    6)
    字符串轉(zhuǎn)換成多行
    下面分別進(jìn)行舉例介紹。
    首先聲明一點(diǎn),有些例子需要如下10g及以后才有的知識:
    A.
    掌握model子句
    B.
    正則表達(dá)式
    C.
    加強(qiáng)的層次查詢
    討論的適用范圍只包括8i,9i,10g及以后版本。
    2.
    列轉(zhuǎn)行
    CREATE TABLE t_col_row(
    ID INT,
    c1 VARCHAR2(10),
    c2 VARCHAR2(10),
    c3 VARCHAR2(10));
    INSERT INTO t_col_row VALUES (1, 'v11', 'v21', 'v31');
    INSERT INTO t_col_row VALUES (2, 'v12', 'v22', NULL);
    INSERT INTO t_col_row VALUES (3, 'v13', NULL, 'v33');
    INSERT INTO t_col_row VALUES (4, NULL, 'v24', 'v34');
    INSERT INTO t_col_row VALUES (5, 'v15', NULL, NULL);
    INSERT INTO t_col_row VALUES (6, NULL, NULL, 'v35');
    INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL);
    COMMIT;
    SELECT * FROM t_col_row;
    2.1
    UNION ALL
    適用范圍:8i,9i,10g及以后版本
    SELECT id, 'c1' cn, c1 cv
    FROM t_col_row
    UNION ALL
    SELECT id, 'c2' cn, c2 cv
    FROM t_col_row
    UNION ALL
    SELECT id, 'c3' cn, c3 cv FROM t_col_row;
    若空行不需要轉(zhuǎn)換,只需加一個(gè)where條件,
    WHERE COLUMN IS NOT NULL 即可。
    2.2
    MODEL
    適用范圍:10g及以后
    SELECT id, cn, cv FROM t_col_row
    MODEL
    RETURN UPDATED ROWS
    PARTITION BY (ID)
    DIMENSION BY (0 AS n)
    MEASURES ('xx' AS cn,'yyy' AS cv,c1,c2,c3)
    RULES UPSERT ALL
    (
    cn[1] = 'c1',
    cn[2] = 'c2',
    cn[3] = 'c3',
    cv[1] = c1[0],
    cv[2] = c2[0],
    cv[3] = c3[0]
    )
    ORDER BY ID,cn;
    2.3
    COLLECTION
    適用范圍:8i,9i,10g及以后版本
    要?jiǎng)?chuàng)建一個(gè)對象和一個(gè)集合:
    CREATE TYPE cv_pair AS OBJECT(cn VARCHAR2(10),cv VARCHAR2(10));
    CREATE TYPE cv_varr AS VARRAY(8) OF cv_pair;
    SELECT id, t.cn AS cn, t.cv AS cv
    FROM t_col_row,
    TABLE(cv_varr(cv_pair('c1', t_col_row.c1),
    cv_pair('c2', t_col_row.c2),
    cv_pair('c3', t_col_row.c3))) t
    ORDER BY 1, 2;
    3.
    行轉(zhuǎn)列
    CREATE TABLE t_row_col AS
    SELECT id, 'c1' cn, c1 cv
    FROM t_col_row
    UNION ALL
    SELECT id, 'c2' cn, c2 cv
    FROM t_col_row
    UNION ALL
    SELECT id, 'c3' cn, c3 cv FROM t_col_row;
    SELECT * FROM t_row_col ORDER BY 1,2;
    3.1
    AGGREGATE FUNCTION
    適用范圍:8i,9i,10g及以后版本
    SELECT id,
    MAX(decode(cn, 'c1', cv, NULL)) AS c1,
    MAX(decode(cn, 'c2', cv, NULL)) AS c2,
    MAX(decode(cn, 'c3', cv, NULL)) AS c3
    FROM t_row_col
    GROUP BY id
    ORDER BY 1;
    MAX聚集函數(shù)也可以用sum、min、avg等其他聚集函數(shù)替代。
    被指定的轉(zhuǎn)置列只能有一列,但固定的列可以有多列,請看下面的例子:
    SELECT mgr, deptno, empno, ename FROM emp ORDER BY 1, 2;
    SELECT mgr,
    deptno,
    MAX(decode(empno, '7788', ename, NULL)) "7788",
    MAX(decode(empno, '7902', ename, NULL)) "7902",
    MAX(decode(empno, '7844', ename, NULL)) "7844",
    MAX(decode(empno, '7521', ename, NULL)) "7521",
    MAX(decode(empno, '7900', ename, NULL)) "7900",
    MAX(decode(empno, '7499', ename, NULL)) "7499",
    MAX(decode(empno, '7654', ename, NULL)) "7654"
    FROM emp
    WHERE mgr IN (7566, 7698)
    AND deptno IN (20, 30)
    GROUP BY mgr, deptno
    ORDER BY 1, 2;
    這里轉(zhuǎn)置列為empno,固定列為mgr,deptno。
    還有一種行轉(zhuǎn)列的方式,就是相同組中的行值變?yōu)閱蝹€(gè)列值,但轉(zhuǎn)置的行值不變?yōu)榱忻?br /> ID CN_1 CV_1 CN_2 CV_2 CN_3 CV_3
    1 c1 v11 c2 v21 c3 v31
    2 c1 v12 c2 v22 c3
    3 c1 v13 c2 c3 v33
    4 c1 c2 v24 c3 v34
    5 c1 v15 c2 c3
    6 c1 c2 c3 v35
    7 c1 c2 c3
    這種情況可以用分析函數(shù)實(shí)現(xiàn):
    SELECT id,
    MAX(decode(rn, 1, cn, NULL)) cn_1,
    MAX(decode(rn, 1, cv, NULL)) cv_1,
    MAX(decode(rn, 2, cn, NULL)) cn_2,
    MAX(decode(rn, 2, cv, NULL)) cv_2,
    MAX(decode(rn, 3, cn, NULL)) cn_3,
    MAX(decode(rn, 3, cv, NULL)) cv_3
    FROM (SELECT id,
    cn,
    cv,
    row_number() over(PARTITION BY id ORDER BY cn, cv) rn
    FROM t_row_col)
    GROUP BY ID;
    3.2
    PL/SQL
    適用范圍:8i,9i,10g及以后版本
    這種對于行值不固定的情況可以使用。
    下面是我寫的一個(gè)包,包中
    p_rows_column_real用于前述的第一種不限定列的轉(zhuǎn)換;
    p_rows_column用于前述的第二種不限定列的轉(zhuǎn)換。
    CREATE OR REPLACE PACKAGE pkg_dynamic_rows_column AS
    TYPE refc IS REF CURSOR;
    PROCEDURE p_print_sql(p_txt VARCHAR2);
    FUNCTION f_split_str(p_str VARCHAR2, p_division VARCHAR2, p_seq INT)
    RETURN VARCHAR2;
    PROCEDURE p_rows_column(p_table IN VARCHAR2,
    p_keep_cols IN VARCHAR2,
    p_pivot_cols IN VARCHAR2,
    p_where IN VARCHAR2 DEFAULT NULL,
    p_refc IN OUT refc);
    PROCEDURE p_rows_column_real(p_table IN VARCHAR2,
    p_keep_cols IN VARCHAR2,
    p_pivot_col IN VARCHAR2,
    p_pivot_val IN VARCHAR2,
    p_where IN VARCHAR2 DEFAULT NULL,
    p_refc IN OUT refc);
    END;
    /
    CREATE OR REPLACE PACKAGE BODY pkg_dynamic_rows_column AS
    PROCEDURE p_print_sql(p_txt VARCHAR2) IS
    v_len INT;
    BEGIN
    v_len := length(p_txt);
    FOR i IN 1 .. v_len / 250 + 1 LOOP
    dbms_output.put_line(substrb(p_txt, (i - 1) * 250 + 1, 250));
    END LOOP;
    END;
    FUNCTION f_split_str(p_str VARCHAR2, p_division VARCHAR2, p_seq INT)
    RETURN VARCHAR2 IS
    v_first INT;
    v_last INT;
    BEGIN
    IF p_seq < 1 THEN
    RETURN NULL;
    END IF;
    IF p_seq = 1 THEN
    IF instr(p_str, p_division, 1, p_seq) = 0 THEN
    RETURN p_str;
    ELSE
    RETURN substr(p_str, 1, instr(p_str, p_division, 1) - 1);
    END IF;
    ELSE
    v_first := instr(p_str, p_division, 1, p_seq - 1);
    v_last := instr(p_str, p_division, 1, p_seq);
    IF (v_last = 0) THEN
    IF (v_first > 0) THEN
    RETURN substr(p_str, v_first + 1);
    ELSE
    RETURN NULL;
    END IF;
    ELSE
    RETURN substr(p_str, v_first + 1, v_last - v_first - 1);
    END IF;
    END IF;
    END f_split_str;
    PROCEDURE p_rows_column(p_table IN VARCHAR2,
    p_keep_cols IN VARCHAR2,
    p_pivot_cols IN VARCHAR2,
    p_where IN VARCHAR2 DEFAULT NULL,
    p_refc IN OUT refc) IS
    v_sql VARCHAR2(4000);
    TYPE v_keep_ind_by IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
    v_keep v_keep_ind_by;
    TYPE v_pivot_ind_by IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
    v_pivot v_pivot_ind_by;
    v_keep_cnt INT;
    v_pivot_cnt INT;
    v_max_cols INT;
    v_partition VARCHAR2(4000);
    v_partition1 VARCHAR2(4000);
    v_partition2 VARCHAR2(4000);
    BEGIN
    v_keep_cnt := length(p_keep_cols) - length(REPLACE(p_keep_cols, ',')) + 1;
    v_pivot_cnt := length(p_pivot_cols) -
    length(REPLACE(p_pivot_cols, ',')) + 1;
    FOR i IN 1 .. v_keep_cnt LOOP
    v_keep(i) := f_split_str(p_keep_cols, ',', i);
    END LOOP;
    FOR j IN 1 .. v_pivot_cnt LOOP
    v_pivot(j) := f_split_str(p_pivot_cols, ',', j);
    END LOOP;
    v_sql := 'select max(count(*)) from ' || p_table || ' group by ';
    FOR i IN 1 .. v_keep.LAST LOOP
    v_sql := v_sql || v_keep(i) || ',';
    END LOOP;
    v_sql := rtrim(v_sql, ',');
    EXECUTE IMMEDIATE v_sql
    INTO v_max_cols;
    v_partition := 'select ';
    FOR x IN 1 .. v_keep.COUNT LOOP
    v_partition1 := v_partition1 || v_keep(x) || ',';
    END LOOP;
    FOR y IN 1 .. v_pivot.COUNT LOOP
    v_partition2 := v_partition2 || v_pivot(y) || ',';
    END LOOP;
    v_partition1 := rtrim(v_partition1, ',');
    v_partition2 := rtrim(v_partition2, ',');
    v_partition := v_partition || v_partition1 || ',' || v_partition2 ||
    ', row_number() over (partition by ' || v_partition1 ||
    ' order by ' || v_partition2 || ') rn from ' || p_table;
    v_partition := rtrim(v_partition, ',');
    v_sql := 'select ';
    FOR i IN 1 .. v_keep.COUNT LOOP
    v_sql := v_sql || v_keep(i) || ',';
    END LOOP;
    FOR i IN 1 .. v_max_cols LOOP
    FOR j IN 1 .. v_pivot.COUNT LOOP
    v_sql := v_sql || ' max(decode(rn,' || i || ',' || v_pivot(j) ||
    ',null))' || v_pivot(j) || '_' || i || ',';
    END LOOP;
    END LOOP;
    IF p_where IS NOT NULL THEN
    v_sql := rtrim(v_sql, ',') || ' from (' || v_partition || ' ' ||
    p_where || ') group by ';
    ELSE
    v_sql := rtrim(v_sql, ',') || ' from (' || v_partition ||
    ') group by ';
    END IF;
    FOR i IN 1 .. v_keep.COUNT LOOP
    v_sql := v_sql || v_keep(i) || ',';
    END LOOP;
    v_sql := rtrim(v_sql, ',');
    p_print_sql(v_sql);
    OPEN p_refc FOR v_sql;
    EXCEPTION
    WHEN OTHERS THEN
    OPEN p_refc FOR
    SELECT 'x' FROM dual WHERE 0 = 1;
    END;
    PROCEDURE p_rows_column_real(p_table IN VARCHAR2,
    p_keep_cols IN VARCHAR2,
    p_pivot_col IN VARCHAR2,
    p_pivot_val IN VARCHAR2,
    p_where IN VARCHAR2 DEFAULT NULL,
    p_refc IN OUT refc) IS
    v_sql VARCHAR2(4000);
    TYPE v_keep_ind_by IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
    v_keep v_keep_ind_by;
    TYPE v_pivot_ind_by IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
    v_pivot v_pivot_ind_by;
    v_keep_cnt INT;
    v_group_by VARCHAR2(2000);
    BEGIN
    v_keep_cnt := length(p_keep_cols) - length(REPLACE(p_keep_cols, ',')) + 1;
    FOR i IN 1 .. v_keep_cnt LOOP
    v_keep(i) := f_split_str(p_keep_cols, ',', i);
    END LOOP;
    v_sql := 'select ' || 'cast(' || p_pivot_col ||
    ' as varchar2(200)) as ' || p_pivot_col || ' from ' || p_table ||
    ' group by ' || p_pivot_col;
    EXECUTE IMMEDIATE v_sql BULK COLLECT
    INTO v_pivot;
    FOR i IN 1 .. v_keep.COUNT LOOP
    v_group_by := v_group_by || v_keep(i) || ',';
    END LOOP;
    v_group_by := rtrim(v_group_by, ',');
    v_sql := 'select ' || v_group_by || ',';
    FOR x IN 1 .. v_pivot.COUNT LOOP
    v_sql := v_sql || ' max(decode(' || p_pivot_col || ',' || chr(39) ||
    v_pivot(x) || chr(39) || ',' || p_pivot_val ||
    ',null)) as "' || v_pivot(x) || '",';
    END LOOP;
    v_sql := rtrim(v_sql, ',');
    IF p_where IS NOT NULL THEN
    v_sql := v_sql || ' from ' || p_table || p_where || ' group by ' ||
    v_group_by;
    ELSE
    v_sql := v_sql || ' from ' || p_table || ' group by ' || v_group_by;
    END IF;
    p_print_sql(v_sql);
    OPEN p_refc FOR v_sql;
    EXCEPTION
    WHEN OTHERS THEN
    OPEN p_refc FOR
    SELECT 'x' FROM dual WHERE 0 = 1;
    END;
    END;
    /
    4.
    多列轉(zhuǎn)換成字符串
    CREATE TABLE t_col_str AS
    SELECT * FROM t_col_row;
    這個(gè)比較簡單,用||或concat函數(shù)可以實(shí)現(xiàn):
    SELECT concat('a','b') FROM dual;
    4.1
    || OR CONCAT
    適用范圍:8i,9i,10g及以后版本
    SELECT * FROM t_col_str;
    SELECT ID,c1||','||c2||','||c3 AS c123
    FROM t_col_str;
    5.
    多行轉(zhuǎn)換成字符串
    CREATE TABLE t_row_str(
    ID INT,
    col VARCHAR2(10));
    INSERT INTO t_row_str VALUES(1,'a');
    INSERT INTO t_row_str VALUES(1,'b');
    INSERT INTO t_row_str VALUES(1,'c');
    INSERT INTO t_row_str VALUES(2,'a');
    INSERT INTO t_row_str VALUES(2,'d');
    INSERT INTO t_row_str VALUES(2,'e');
    INSERT INTO t_row_str VALUES(3,'c');
    COMMIT;
    SELECT * FROM t_row_str;
    5.1
    MAX + DECODE
    適用范圍:8i,9i,10g及以后版本
    SELECT id,
    MAX(decode(rn, 1, col, NULL)) ||
    MAX(decode(rn, 2, ',' || col, NULL)) ||
    MAX(decode(rn, 3, ',' || col, NULL)) str
    FROM (SELECT id,
    col,
    row_number() over(PARTITION BY id ORDER BY col) AS rn
    FROM t_row_str) t
    GROUP BY id
    ORDER BY 1;
    5.2
    ROW_NUMBER + LEAD
    適用范圍:8i,9i,10g及以后版本
    SELECT id, str
    FROM (SELECT id,
    row_number() over(PARTITION BY id ORDER BY col) AS rn,
    col || lead(',' || col, 1) over(PARTITION BY id ORDER BY col) ||
    lead(',' || col, 2) over(PARTITION BY id ORDER BY col) ||
    lead(',' || col, 3) over(PARTITION BY id ORDER BY col) AS str
    FROM t_row_str)
    WHERE rn = 1
    ORDER BY 1;
    5.3
    MODEL
    適用范圍:10g及以后版本
    SELECT id, substr(str, 2) str FROM t_row_str
    MODEL
    RETURN UPDATED ROWS
    PARTITION BY(ID)
    DIMENSION BY(row_number() over(PARTITION BY ID ORDER BY col) AS rn)
    MEASURES (CAST(col AS VARCHAR2(20)) AS str)
    RULES UPSERT
    ITERATE(3) UNTIL( presentv(str[iteration_number+2],1,0)=0)
    (str[0] = str[0] || ',' || str[iteration_number+1])
    ORDER BY 1;
    5.4
    SYS_CONNECT_BY_PATH
    適用范圍:8i,9i,10g及以后版本
    SELECT t.id id, MAX(substr(sys_connect_by_path(t.col, ','), 2)) str
    FROM (SELECT id, col, row_number() over(PARTITION BY id ORDER BY col) rn
    FROM t_row_str) t
    START WITH rn = 1
    CONNECT BY rn = PRIOR rn + 1
    AND id = PRIOR id
    GROUP BY t.id;
    適用范圍:10g及以后版本
    SELECT t.id id, substr(sys_connect_by_path(t.col, ','), 2) str
    FROM (SELECT id, col, row_number() over(PARTITION BY id ORDER BY col) rn
    FROM t_row_str) t
    WHERE connect_by_isleaf = 1
    START WITH rn = 1
    CONNECT BY rn = PRIOR rn + 1
    AND id = PRIOR id;
    5.5
    WMSYS.WM_CONCAT
    適用范圍:10g及以后版本
    這個(gè)函數(shù)預(yù)定義按','分隔字符串,若要用其他符號分隔可以用,replace將','替換。
    SELECT id, REPLACE(wmsys.wm_concat(col), ',', '/') str
    FROM t_row_str
    GROUP BY id;
    6.
    字符串轉(zhuǎn)換成多列
    其實(shí)際上就是一個(gè)字符串拆分的問題。
    CREATE TABLE t_str_col AS
    SELECT ID,c1||','||c2||','||c3 AS c123
    FROM t_col_str;
    SELECT * FROM t_str_col;
    6.1
    SUBSTR + INSTR
    適用范圍:8i,9i,10g及以后版本
    SELECT id,
    c123,
    substr(c123, 1, instr(c123 || ',', ',', 1, 1) - 1) c1,
    substr(c123,
    instr(c123 || ',', ',', 1, 1) + 1,
    instr(c123 || ',', ',', 1, 2) - instr(c123 || ',', ',', 1, 1) - 1) c2,
    substr(c123,
    instr(c123 || ',', ',', 1, 2) + 1,
    instr(c123 || ',', ',', 1, 3) - instr(c123 || ',', ',', 1, 2) - 1) c3
    FROM t_str_col
    ORDER BY 1;
    6.2
    REGEXP_SUBSTR
    適用范圍:10g及以后版本
    SELECT id,
    c123,
    rtrim(regexp_substr(c123 || ',', '.*?' || ',', 1, 1), ',') AS c1,
    rtrim(regexp_substr(c123 || ',', '.*?' || ',', 1, 2), ',') AS c2,
    rtrim(regexp_substr(c123 || ',', '.*?' || ',', 1, 3), ',') AS c3
    FROM t_str_col
    ORDER BY 1;
    7.
    字符串轉(zhuǎn)換成多行
    CREATE TABLE t_str_row AS
    SELECT id,
    MAX(decode(rn, 1, col, NULL)) ||
    MAX(decode(rn, 2, ',' || col, NULL)) ||
    MAX(decode(rn, 3, ',' || col, NULL)) str
    FROM (SELECT id,
    col,
    row_number() over(PARTITION BY id ORDER BY col) AS rn
    FROM t_row_str) t
    GROUP BY id
    ORDER BY 1;
    SELECT * FROM t_str_row;
    7.1
    UNION ALL
    適用范圍:8i,9i,10g及以后版本
    SELECT id, 1 AS p, substr(str, 1, instr(str || ',', ',', 1, 1) - 1) AS cv
    FROM t_str_row
    UNION ALL
    SELECT id,
    2 AS p,
    substr(str,
    instr(str || ',', ',', 1, 1) + 1,
    instr(str || ',', ',', 1, 2) - instr(str || ',', ',', 1, 1) - 1) AS cv
    FROM t_str_row
    UNION ALL
    SELECT id,
    3 AS p,
    substr(str,
    instr(str || ',', ',', 1, 1) + 1,
    instr(str || ',', ',', 1, 2) - instr(str || ',', ',', 1, 1) - 1) AS cv
    FROM t_str_row
    ORDER BY 1, 2;
    適用范圍:10g及以后版本
    SELECT id, 1 AS p, rtrim(regexp_substr(str||',', '.*?' || ',', 1, 1), ',') AS cv
    FROM t_str_row
    UNION ALL
    SELECT id, 2 AS p, rtrim(regexp_substr(str||',', '.*?' || ',', 1, 2), ',') AS cv
    FROM t_str_row
    UNION ALL
    SELECT id, 3 AS p, rtrim(regexp_substr(str||',', '.*?' || ',',1,3), ',') AS cv
    FROM t_str_row
    ORDER BY 1, 2;
    7.2
    VARRAY
    適用范圍:8i,9i,10g及以后版本
    要?jiǎng)?chuàng)建一個(gè)可變數(shù)組:
    CREATE OR REPLACE TYPE ins_seq_type IS VARRAY(8) OF NUMBER;
    SELECT * FROM TABLE(ins_seq_type(1, 2, 3, 4, 5));
    SELECT t.id,
    c.column_value AS p,
    substr(t.ca,
    instr(t.ca, ',', 1, c.column_value) + 1,
    instr(t.ca, ',', 1, c.column_value + 1) -
    (instr(t.ca, ',', 1, c.column_value) + 1)) AS cv
    FROM (SELECT id,
    ',' || str || ',' AS ca,
    length(str || ',') - nvl(length(REPLACE(str, ',')), 0) AS cnt
    FROM t_str_row) t
    INNER JOIN TABLE(ins_seq_type(1, 2, 3)) c ON c.column_value <=
    t.cnt
    ORDER BY 1, 2;
    7.3
    SEQUENCE SERIES
    這類方法主要是要產(chǎn)生一個(gè)連續(xù)的整數(shù)列,產(chǎn)生連續(xù)整數(shù)列的方法有很多,主要有:
    CONNECT BY,ROWNUM+all_objects,CUBE等。
    適用范圍:8i,9i,10g及以后版本
    SELECT t.id,
    c.lv AS p,
    substr(t.ca,
    instr(t.ca, ',', 1, c.lv) + 1,
    instr(t.ca, ',', 1, c.lv + 1) -
    (instr(t.ca, ',', 1, c.lv) + 1)) AS cv
    FROM (SELECT id,
    ',' || str || ',' AS ca,
    length(str || ',') - nvl(length(REPLACE(str, ',')), 0) AS cnt
    FROM t_str_row) t,
    (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 5) c
    WHERE c.lv <= t.cnt
    ORDER BY 1, 2;
    SELECT t.id,
    c.rn AS p,
    substr(t.ca,
    instr(t.ca, ',', 1, c.rn) + 1,
    instr(t.ca, ',', 1, c.rn + 1) -
    (instr(t.ca, ',', 1, c.rn) + 1)) AS cv
    FROM (SELECT id,
    ',' || str || ',' AS ca,
    length(str || ',') - nvl(length(REPLACE(str, ',')), 0) AS cnt
    FROM t_str_row) t,
    (SELECT rownum rn FROM all_objects WHERE rownum <= 5) c
    WHERE c.rn <= t.cnt
    ORDER BY 1, 2;
    SELECT t.id,
    c.cb AS p,
    substr(t.ca,
    instr(t.ca, ',', 1, c.cb) + 1,
    instr(t.ca, ',', 1, c.cb + 1) -
    (instr(t.ca, ',', 1, c.cb) + 1)) AS cv
    FROM (SELECT id,
    ',' || str || ',' AS ca,
    length(str || ',') - nvl(length(REPLACE(str, ',')), 0) AS cnt
    FROM t_str_row) t,
    (SELECT rownum cb FROM (SELECT 1 FROM dual GROUP BY CUBE(1, 2))) c
    WHERE c.cb <= t.cnt
    ORDER BY 1, 2;
    適用范圍:10g及以后版本
    SELECT t.id,
    c.lv AS p,
    rtrim(regexp_substr(t.str || ',', '.*?' || ',', 1, c.lv), ',') AS cv
    FROM (SELECT id,
    str,
    length(regexp_replace(str || ',', '[^' || ',' || ']', NULL)) AS cnt
    FROM t_str_row) t
    INNER JOIN (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 5) c ON c.lv <= t.cnt
    ORDER BY 1, 2;
    7.4
    HIERARCHICAL + DBMS_RANDOM
    適用范圍:10g及以后版本
    SELECT id,
    LEVEL AS p,
    rtrim(regexp_substr(str || ',', '.*?' || ',', 1, LEVEL), ',') AS cv
    FROM t_str_row
    CONNECT BY id = PRIOR id
    AND PRIOR dbms_random.VALUE IS NOT NULL
    AND LEVEL <=
    length(regexp_replace(str || ',', '[^' || ',' || ']', NULL))
    ORDER BY 1, 2;
    7.5
    HIERARCHICAL + CONNECT_BY_ROOT
    適用范圍:10g及以后版本
    SELECT id,
    LEVEL AS p,
    rtrim(regexp_substr(str || ',', '.*?' || ',', 1, LEVEL), ',') AS cv
    FROM t_str_row
    CONNECT BY id = connect_by_root id
    AND LEVEL <=
    length(regexp_replace(str || ',', '[^' || ',' || ']', NULL))
    ORDER BY 1, 2;
    7.6
    MODEL
    適用范圍:10g及以后版本
    SELECT id, p, cv FROM t_str_row
    MODEL
    RETURN UPDATED ROWS
    PARTITION BY(ID)
    DIMENSION BY( 0 AS p)
    MEASURES( str||',' AS cv)
    RULES UPSERT
    (cv
    [ FOR p
    FROM 1 TO length(regexp_replace(cv[0],'[^'||','||']',null))
    posted @ 2009-12-15 13:16 不高興 閱讀(1237) | 評論 (0)編輯 收藏
     
      select 'select * from '||wl.table1||' where rowid= ''' || wl.aa||''';' from
      (select o.object_name table1 ,dbms_rowid.rowid_create(1,s.row_wait_obj#,s.row_wait_file#,s.row_wait_block#,s.row_wait_row#) aa
          from  v$session s , dba_waiters w , v$locked_object l , dba_objects o
          where w.waiting_session=s.SID
            and w.mode_held='Exclusive'
            and w.waiting_session=l.SESSION_ID
            and l.OBJECT_ID=o.object_id ) wl;
    posted @ 2009-12-01 11:34 不高興 閱讀(438) | 評論 (0)編輯 收藏
     
    最近在做一個(gè)工資核算的系統(tǒng),所有的運(yùn)算全部在前臺進(jìn)行,因此用了的是JS來做。
    做完以后,經(jīng)手工核算,發(fā)現(xiàn)一個(gè)奇怪的問題。就是JS算出來的結(jié)果跟用計(jì)算器算出來的結(jié)果有差距。
    想了很久,也沒有想出問題出在哪里。
      問題這樣的:
      37.5*5.5=206.08  (JS算出來是這樣的一個(gè)結(jié)果,我四舍五入取兩位小數(shù))
      我先懷疑是四舍五入的問題,就直接用JS算了一個(gè)結(jié)果為:206.08499999999998
      怎么會這樣,兩個(gè)只有一位小數(shù)的數(shù)字相乘,怎么可能多出這么小數(shù)點(diǎn)出來。
      我Google了一下,發(fā)現(xiàn)原來這是JavaScript浮點(diǎn)運(yùn)算的一個(gè)bug。
      比如:7*0.8 JavaScript算出來就是:5.6000000000000005

      網(wǎng)上找到了一些解決辦法,就是重新寫了一些浮點(diǎn)運(yùn)算的函數(shù)。
      下面就把這些方法摘錄下來,以供遇到同樣問題的朋友參考:
      
       程序代碼
    //除法函數(shù),用來得到精確的除法結(jié)果
    //說明:javascript的除法結(jié)果會有誤差,在兩個(gè)浮點(diǎn)數(shù)相除的時(shí)候會比較明顯。這個(gè)函數(shù)返回較為精確的除法結(jié)果。
    //調(diào)用:accDiv(arg1,arg2)
    //返回值:arg1除以arg2的精確結(jié)果
    function accDiv(arg1,arg2){
        var t1=0,t2=0,r1,r2;
        try{t1=arg1.toString().split(".")[1].length}catch(e){}
        try{t2=arg2.toString().split(".")[1].length}catch(e){}
        with(Math){
            r1=Number(arg1.toString().replace(".",""))
            r2=Number(arg2.toString().replace(".",""))
            return (r1/r2)*pow(10,t2-t1);
        }
    }

    //給Number類型增加一個(gè)div方法,調(diào)用起來更加方便。
    Number.prototype.div = function (arg){
        return accDiv(this, arg);
    }

    //乘法函數(shù),用來得到精確的乘法結(jié)果
    //說明:javascript的乘法結(jié)果會有誤差,在兩個(gè)浮點(diǎn)數(shù)相乘的時(shí)候會比較明顯。這個(gè)函數(shù)返回較為精確的乘法結(jié)果。
    //調(diào)用:accMul(arg1,arg2)
    //返回值:arg1乘以arg2的精確結(jié)果
    function accMul(arg1,arg2)
    {
        var m=0,s1=arg1.toString(),s2=arg2.toString();
        try{m+=s1.split(".")[1].length}catch(e){}
        try{m+=s2.split(".")[1].length}catch(e){}
        return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
    }

    //給Number類型增加一個(gè)mul方法,調(diào)用起來更加方便。
    Number.prototype.mul = function (arg){
        return accMul(arg, this);
    }

    //加法函數(shù),用來得到精確的加法結(jié)果
    //說明:javascript的加法結(jié)果會有誤差,在兩個(gè)浮點(diǎn)數(shù)相加的時(shí)候會比較明顯。這個(gè)函數(shù)返回較為精確的加法結(jié)果。
    //調(diào)用:accAdd(arg1,arg2)
    //返回值:arg1加上arg2的精確結(jié)果
    function accAdd(arg1,arg2){
        var r1,r2,m;
        try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
        try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
        m=Math.pow(10,Math.max(r1,r2))
        return (arg1*m+arg2*m)/m
    }

    //給Number類型增加一個(gè)add方法,調(diào)用起來更加方便。
    Number.prototype.add = function (arg){
        return accAdd(arg,this);
    }



      在你要用的地方包含這些函數(shù),然后調(diào)用它來計(jì)算就可以了。
      比如你要計(jì)算:7*0.8 ,則改成 (7).mul(8)
      其它運(yùn)算類似,就可以得到比較精確的結(jié)果。
    posted @ 2009-11-26 20:33 不高興 閱讀(756) | 評論 (0)編輯 收藏
    僅列出標(biāo)題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
     
    Copyright © 不高興 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲日韩精品射精日| ww亚洲ww在线观看国产| 亚洲.国产.欧美一区二区三区| 毛片亚洲AV无码精品国产午夜| 久久精品一本到99热免费| 亚洲 无码 在线 专区| 亚洲福利一区二区精品秒拍| 国产免费一级高清淫曰本片| 最近中文字幕mv免费高清电影| 亚洲自偷自偷精品| 国产福利免费视频 | 狠狠色伊人亚洲综合成人| 亚洲欧好州第一的日产suv| 亚洲一区免费在线观看| 亚洲精品无码久久久影院相关影片| 亚洲av无码专区首页| 青青青国产在线观看免费网站| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 337p日本欧洲亚洲大胆艺术| 国产黄在线播放免费观看| 永久免费无码网站在线观看| 亚洲大香人伊一本线| 免费av片在线观看网站| 亚洲人成影院在线观看| 精品国产日韩亚洲一区91| 中字幕视频在线永久在线观看免费| 亚洲乱亚洲乱淫久久| aa级女人大片喷水视频免费| 五月天婷亚洲天综合网精品偷| 亚洲色大情网站www| 97热久久免费频精品99| 亚洲色欲色欲综合网站| 国产免费无码AV片在线观看不卡| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲成a人片在线观看播放| 国产一精品一av一免费爽爽| 国产亚洲AV手机在线观看| 一级毛片完整版免费播放一区| 四虎影视永久免费观看网址| 亚洲av色香蕉一区二区三区蜜桃| 妞干网免费视频观看|