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

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

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

    posts - 64,comments - 22,trackbacks - 0
    阿里云主機(jī)推薦碼,可以打九折8C0BAY 有效期 11-30號(hào)
    posted @ 2015-10-15 18:13 hellxoul 閱讀(199) | 評(píng)論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-01-05 11:52 hellxoul 閱讀(317) | 評(píng)論 (0)編輯 收藏
    如果不配置其他參數(shù),大致相當(dāng)于以下的配置文件(參考自org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser) 
      1 <!-- 配置路徑擴(kuò)展名映射的媒體類型 -->
      2   <bean name="pathExtensionContentNegotiationStrategy"
      3         class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
      4     <constructor-arg>
      5       <props>
      6         <!-- if romePresent -->
      7         <prop key="atom">application/atom+xml</prop>
      8         <prop key="rss">application/rss+xml</prop>
      9         <!-- endif -->
     10         <!-- if jackson2Present || jacksonPresent -->
     11         <prop key="json">application/json</prop>
     12         <!-- endif -->
     13         <!-- if jaxb2Present -->
     14         <prop key="xml">application/xml</prop>
     15         <!-- endif -->
     16       </props>
     17     </constructor-arg>
     18   </bean>
     19 
     20   <!-- 配置映射媒體類型的策略 -->
     21   <bean name="mvcContentNegotiationManager"
     22         class="org.springframework.web.accept.ContentNegotiationManager">
     23     <constructor-arg>
     24       <list>
     25         <ref bean="pathExtensionContentNegotiationStrategy" />
     26       </list>
     27     </constructor-arg>
     28   </bean>
     29 
     30   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
     31     <property name="order" value="0"/>
     32     <property name="removeSemicolonContent" value="false"/>
     33     <property name="contentNegotiationManager" ref="mvcContentNegotiationManager"/>
     34   </bean>
     35 
     36   <!-- 配置數(shù)據(jù)轉(zhuǎn)換服務(wù),默認(rèn)使用格式化數(shù)據(jù)轉(zhuǎn)換服務(wù),可以對(duì)日期和數(shù)字進(jìn)行格式化 -->
     37   <bean name="conversionService"
     38         class="org.springframework.format.support.DefaultFormattingConversionService">
     39     <constructor-arg index="0">
     40       <null/>
     41     </constructor-arg>
     42     <constructor-arg index="1" value="true"/>
     43   </bean>
     44 
     45   <bean name="validator"
     46         class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
     47 
     48   <!-- 配置數(shù)據(jù)綁定,通過(guò)轉(zhuǎn)換服務(wù)實(shí)現(xiàn)綁定,如果包含jsr303實(shí)現(xiàn)還將進(jìn)行校驗(yàn) -->
     49   <bean name="webBindingInitializer"
     50         class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
     51     <property name="conversionService" ref="conversionService" />
     52     <!-- if jsr303Present -->
     53     <property name="validator" ref="validator" />
     54     <!-- endif -->
     55   </bean>
     56 
     57   <bean name="byteArrayHttpMessageConverter"
     58         class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
     59 
     60   <bean name="stringHttpMessageConverter"
     61         class="org.springframework.http.converter.StringHttpMessageConverter">
     62     <property name="writeAcceptCharset" value="false" />
     63   </bean>
     64 
     65   <bean name="resourceHttpMessageConverter"
     66         class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
     67   <bean name="sourceHttpMessageConverter"
     68         class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
     69   <bean name="allEncompassingFormHttpMessageConverter"
     70         class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/>
     71   <bean name="atomFeedHttpMessageConverter"
     72         class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter"/>
     73   <bean name="rssChannelHttpMessageConverter"
     74         class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter"/>
     75   <bean name="jaxb2RootElementHttpMessageConverter"
     76         class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
     77   <bean name="mappingJacksonHttpMessageConverter"
     78         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
     79 
     80   <!-- 配置@RequestBody,@ResponseBody注解可用的轉(zhuǎn)換器 -->
     81   <util:list id="messageConverters"
     82              list-class="org.springframework.beans.factory.support.ManagedList">
     83     <ref bean="byteArrayHttpMessageConverter" />
     84     <ref bean="stringHttpMessageConverter" />
     85     <ref bean="resourceHttpMessageConverter" />
     86     <ref bean="sourceHttpMessageConverter" />
     87     <ref bean="allEncompassingFormHttpMessageConverter" />
     88     <!-- if romePresent -->
     89     <ref bean="atomFeedHttpMessageConverter" />
     90     <ref bean="rssChannelHttpMessageConverter" />
     91     <!-- endif -->
     92     <!-- if jaxb2Present -->
     93     <ref bean="jaxb2RootElementHttpMessageConverter" />
     94     <!-- endif -->
     95     <!-- if jacksonPresent -->
     96     <ref bean="mappingJacksonHttpMessageConverter" />
     97     <!-- endif -->
     98   </util:list>
     99 
    100   <!-- 將任意類型的Controller適配為Handler -->
    101   <bean name="requestMappingHandlerAdapter"
    102         class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    103     <property name="contentNegotiationManager" ref="mvcContentNegotiationManager" />
    104     <property name="webBindingInitializer" ref="webBindingInitializer" />
    105     <property name="messageConverters" ref="messageConverters" />
    106   </bean>
    107 
    108   <!-- 這個(gè)攔截器暴露轉(zhuǎn)換器服務(wù)讓spring:bind和spring:eval標(biāo)簽可用 -->
    109   <bean name="csInterceptor"
    110         class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor">
    111     <constructor-arg index="0" ref="conversionService"/>
    112   </bean>
    113 
    114   <!-- 現(xiàn)在所有攔截器都必須設(shè)定響應(yīng)的路徑映射 -->
    115   <bean name="mappedCsInterceptor"
    116         class="org.springframework.web.servlet.handler.MappedInterceptor">
    117     <constructor-arg index="0">
    118       <null/>
    119     </constructor-arg>
    120     <constructor-arg index="1" ref="csInterceptor"/>
    121   </bean>
    122 
    123   <!-- 使用@ExceptionHandler注解的方法來(lái)處理Exception,優(yōu)先級(jí)為0(最高) -->
    124   <bean name="exceptionHandlerExceptionResolver"
    125         class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
    126     <property name="contentNegotiationManager" ref="mvcContentNegotiationManager" />
    127     <property name="messageConverters" ref="messageConverters" />
    128     <property name="order" value="0" />
    129   </bean>
    130 
    131   <!-- 如果拋出的Exception類帶有@ResponseStatus注解,響應(yīng)返回該注解的Http狀態(tài)碼,優(yōu)先級(jí)為1 -->
    132   <bean name="responseStatusExceptionResolver"
    133         class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver">
    134     <property name="order" value="1" />
    135   </bean>
    136 
    137   <!-- SpringMvc內(nèi)部異常處理 -->
    138   <bean name="defaultExceptionResolver"
    139         class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver">
    140     <property name="order" value="2" />
    141   </bean>
    142 
    posted @ 2014-08-03 22:35 hellxoul 閱讀(2901) | 評(píng)論 (1)編輯 收藏
    HeadFirst Servlet/JSP 學(xué)習(xí)筆記
    1.容器加載類,調(diào)用servlet的無(wú)參構(gòu)造方法,并調(diào)用servlet的init()方法,從而初始化servlet。
    2.init()在servlet一生中只調(diào)用一次,往往在servlet為客戶請(qǐng)求提供服務(wù)之前調(diào)用。
    3.init()方法使servlet可以訪問(wèn)ServletConfig和ServletContext對(duì)象,servlet需要從這些對(duì)象得到有關(guān)servlet配置和web應(yīng)用的信息。
    4.容器通過(guò)調(diào)用servlet的destroy()方法來(lái)結(jié)束servlet的生命
    5.servlet一生的大多時(shí)間都是在為某個(gè)客戶端請(qǐng)求運(yùn)行service()方法
    6.對(duì)servlet的每個(gè)請(qǐng)求都在一個(gè)單獨(dú)的線程中運(yùn)行,任何特定servlet類都只有一個(gè)實(shí)例。
    posted @ 2014-07-05 15:21 hellxoul 閱讀(272) | 評(píng)論 (0)編輯 收藏
    轉(zhuǎn)自:http://www.cnblogs.com/peida/p/Guava_Ordering.html

    Ordering是Guava類庫(kù)提供的一個(gè)犀利強(qiáng)大的比較器工具,Guava的Ordering和JDK Comparator相比功能更強(qiáng)。它非常容易擴(kuò)展,可以輕松構(gòu)造復(fù)雜的comparator,然后用在容器的比較、排序等操作中。

      本質(zhì)上來(lái)說(shuō),Ordering 實(shí)例無(wú)非就是一個(gè)特殊的Comparator 實(shí)例。Ordering只是需要依賴于一個(gè)比較器(例如,Collections.max)的方法,并使其可作為實(shí)例方法。另外,Ordering提供了鏈?zhǔn)椒椒ㄕ{(diào)用和加強(qiáng)現(xiàn)有的比較器。

      下面我們看看Ordering中的一些具體方法和簡(jiǎn)單的使用實(shí)例。

      常見的靜態(tài)方法:

      natural():使用Comparable類型的自然順序, 例如:整數(shù)從小到大,字符串是按字典順序;
      usingToString() :使用toString()返回的字符串按字典順序進(jìn)行排序;
      arbitrary() :返回一個(gè)所有對(duì)象的任意順序, 即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是沒(méi)有任何含義, 但是在VM的生命周期是一個(gè)常量。

      簡(jiǎn)單實(shí)例:

    復(fù)制代碼
    import java.util.List;
    import org.junit.Test;
    import com.google.common.collect.Lists;
    import com.google.common.collect.Ordering;
    
    public class OrderingTest {
    
        @Test
        public void testStaticOrdering(){
            List<String> list = Lists.newArrayList();
            list.add("peida");
            list.add("jerry");
            list.add("harry");
            list.add("eva");
            list.add("jhon");
            list.add("neron");
            
            System.out.println("list:"+ list);
    Ordering
    <String> naturalOrdering = Ordering.natural(); Ordering<Object> usingToStringOrdering = Ordering.usingToString(); Ordering<Object> arbitraryOrdering = Ordering.arbitrary(); System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list)); System.out.println("usingToStringOrdering:"+ usingToStringOrdering.sortedCopy(list)); System.out.println("arbitraryOrdering:"+ arbitraryOrdering.sortedCopy(list)); } }
    復(fù)制代碼

      輸出:

    list:[peida, jerry, harry, eva, jhon, neron]
    naturalOrdering:[eva, harry, jerry, jhon, neron, peida]
    usingToStringOrdering:[eva, harry, jerry, jhon, neron, peida]
    arbitraryOrdering:[neron, harry, eva, jerry, peida, jhon]

      操作方法:

      reverse(): 返回與當(dāng)前Ordering相反的排序:
      nullsFirst(): 返回一個(gè)將null放在non-null元素之前的Ordering,其他的和原始的Ordering一樣;
      nullsLast():返回一個(gè)將null放在non-null元素之后的Ordering,其他的和原始的Ordering一樣;
      compound(Comparator):返回一個(gè)使用Comparator的Ordering,Comparator作為第二排序元素,例如對(duì)bug列表進(jìn)行排序,先根據(jù)bug的級(jí)別,再根據(jù)優(yōu)先級(jí)進(jìn)行排序;
      lexicographical():返回一個(gè)按照字典元素迭代的Ordering;
      onResultOf(Function):將function應(yīng)用在各個(gè)元素上之后, 在使用原始o(jì)rdering進(jìn)行排序;
      greatestOf(Iterable iterable, int k):返回指定的第k個(gè)可迭代的最大的元素,按照這個(gè)從最大到最小的順序。是不穩(wěn)定的。
      leastOf(Iterable<E> iterable,int k):返回指定的第k個(gè)可迭代的最小的元素,按照這個(gè)從最小到最大的順序。是不穩(wěn)定的。
      isOrdered(Iterable):是否有序,Iterable不能少于2個(gè)元素。
      isStrictlyOrdered(Iterable):是否嚴(yán)格有序。請(qǐng)注意,Iterable不能少于兩個(gè)元素。
      sortedCopy(Iterable):返回指定的元素作為一個(gè)列表的排序副本。

    復(fù)制代碼
    package com.peidasoft.guava.base;
    
    import java.util.List;
    
    import org.junit.Test;
    
    import com.google.common.collect.ImmutableList;
    import com.google.common.collect.Lists;
    import com.google.common.collect.Ordering;
    
    public class OrderingTest {
        
        @Test
        public void testOrdering(){
            List<String> list = Lists.newArrayList();
            list.add("peida");
            list.add("jerry");
            list.add("harry");
            list.add("eva");
            list.add("jhon");
            list.add("neron");
            
            System.out.println("list:"+ list);
            
            Ordering<String> naturalOrdering = Ordering.natural();
            System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list));    
    
            List<Integer> listReduce= Lists.newArrayList();
            for(int i=9;i>0;i--){
                listReduce.add(i);
            }
            
            List<Integer> listtest= Lists.newArrayList();
            listtest.add(1);
            listtest.add(1);
            listtest.add(1);
            listtest.add(2);
            
            
            Ordering<Integer> naturalIntReduceOrdering = Ordering.natural();
            
            System.out.println("listtest:"+ listtest);
            System.out.println(naturalIntReduceOrdering.isOrdered(listtest));
            System.out.println(naturalIntReduceOrdering.isStrictlyOrdered(listtest));
            
            
            System.out.println("naturalIntReduceOrdering:"+ naturalIntReduceOrdering.sortedCopy(listReduce));
            System.out.println("listReduce:"+ listReduce);
            
            
            System.out.println(naturalIntReduceOrdering.isOrdered(naturalIntReduceOrdering.sortedCopy(listReduce)));
            System.out.println(naturalIntReduceOrdering.isStrictlyOrdered(naturalIntReduceOrdering.sortedCopy(listReduce)));
            
    
            Ordering<String> natural = Ordering.natural();
                  
            List<String> abc = ImmutableList.of("a", "b", "c");
            System.out.println(natural.isOrdered(abc));
            System.out.println(natural.isStrictlyOrdered(abc));
            
            System.out.println("isOrdered reverse :"+ natural.reverse().isOrdered(abc));
     
            List<String> cba = ImmutableList.of("c", "b", "a");
            System.out.println(natural.isOrdered(cba));
            System.out.println(natural.isStrictlyOrdered(cba));
            System.out.println(cba = natural.sortedCopy(cba));
            
            System.out.println("max:"+natural.max(cba));
            System.out.println("min:"+natural.min(cba));
            
            System.out.println("leastOf:"+natural.leastOf(cba, 2));
            System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list));    
            System.out.println("leastOf list:"+naturalOrdering.leastOf(list, 3));
            System.out.println("greatestOf:"+naturalOrdering.greatestOf(list, 3));
            System.out.println("reverse list :"+ naturalOrdering.reverse().sortedCopy(list));    
            System.out.println("isOrdered list :"+ naturalOrdering.isOrdered(list));
            System.out.println("isOrdered list :"+ naturalOrdering.reverse().isOrdered(list));
            list.add(null);
            System.out.println(" add null list:"+list);
            System.out.println("nullsFirst list :"+ naturalOrdering.nullsFirst().sortedCopy(list));
            System.out.println("nullsLast list :"+ naturalOrdering.nullsLast().sortedCopy(list));
        }
    
    }
    
    //============輸出==============
    list:[peida, jerry, harry, eva, jhon, neron]
    naturalOrdering:[eva, harry, jerry, jhon, neron, peida]
    listtest:[1, 1, 1, 2]
    true
    false
    naturalIntReduceOrdering:[1, 2, 3, 4, 5, 6, 7, 8, 9]
    listReduce:[9, 8, 7, 6, 5, 4, 3, 2, 1]
    true
    true
    true
    true
    isOrdered reverse :false
    false
    false
    [a, b, c]
    max:c
    min:a
    leastOf:[a, b]
    naturalOrdering:[eva, harry, jerry, jhon, neron, peida]
    leastOf list:[eva, harry, jerry]
    greatestOf:[peida, neron, jhon]
    reverse list :[peida, neron, jhon, jerry, harry, eva]
    isOrdered list :false
    isOrdered list :false
     add null list:[peida, jerry, harry, eva, jhon, neron, null]
    nullsFirst list :[null, eva, harry, jerry, jhon, neron, peida]
    nullsLast list :[eva, harry, jerry, jhon, neron, peida, null]
    復(fù)制代碼

    posted @ 2014-07-03 10:48 hellxoul 閱讀(396) | 評(píng)論 (0)編輯 收藏
         摘要: centos 6.5 安裝rabbitmq  閱讀全文
    posted @ 2014-06-25 22:23 hellxoul 閱讀(2262) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)自:http://singo107.iteye.com/blog/1175084

    數(shù)據(jù)庫(kù)事務(wù)的隔離級(jí)別有4個(gè),由低到高依次為Read uncommitted 、Read committed 、Repeatable read 、Serializable ,這四個(gè)級(jí)別可以逐個(gè)解決臟讀 、不可重復(fù)讀 、幻讀 這幾類問(wèn)題。


    √: 可能出現(xiàn)    ×: 不會(huì)出現(xiàn)

    臟讀不可重復(fù)讀幻讀
    Read uncommitted
    Read committed×
    Repeatable read××
    Serializable×××

     

    注意:我們討論隔離級(jí)別的場(chǎng)景,主要是在多個(gè)事務(wù)并發(fā) 的情況下,因此,接下來(lái)的講解都圍繞事務(wù)并發(fā)。

    Read uncommitted 讀未提交

    公司發(fā)工資了,領(lǐng)導(dǎo)把5000元打到singo的賬號(hào)上,但是該事務(wù)并未提交,而singo正好去查看賬戶,發(fā)現(xiàn)工資已經(jīng)到賬,是5000元整,非常高 興。可是不幸的是,領(lǐng)導(dǎo)發(fā)現(xiàn)發(fā)給singo的工資金額不對(duì),是2000元,于是迅速回滾了事務(wù),修改金額后,將事務(wù)提交,最后singo實(shí)際的工資只有 2000元,singo空歡喜一場(chǎng)。


     

    出現(xiàn)上述情況,即我們所說(shuō)的臟讀 ,兩個(gè)并發(fā)的事務(wù),“事務(wù)A:領(lǐng)導(dǎo)給singo發(fā)工資”、“事務(wù)B:singo查詢工資賬戶”,事務(wù)B讀取了事務(wù)A尚未提交的數(shù)據(jù)。

    當(dāng)隔離級(jí)別設(shè)置為Read uncommitted 時(shí),就可能出現(xiàn)臟讀,如何避免臟讀,請(qǐng)看下一個(gè)隔離級(jí)別。

    Read committed 讀提交

    singo拿著工資卡去消費(fèi),系統(tǒng)讀取到卡里確實(shí)有2000元,而此時(shí)她的老婆也正好在網(wǎng)上轉(zhuǎn)賬,把singo工資卡的2000元轉(zhuǎn)到另一賬戶,并在 singo之前提交了事務(wù),當(dāng)singo扣款時(shí),系統(tǒng)檢查到singo的工資卡已經(jīng)沒(méi)有錢,扣款失敗,singo十分納悶,明明卡里有錢,為 何......

    出現(xiàn)上述情況,即我們所說(shuō)的不可重復(fù)讀 ,兩個(gè)并發(fā)的事務(wù),“事務(wù)A:singo消費(fèi)”、“事務(wù)B:singo的老婆網(wǎng)上轉(zhuǎn)賬”,事務(wù)A事先讀取了數(shù)據(jù),事務(wù)B緊接了更新了數(shù)據(jù),并提交了事務(wù),而事務(wù)A再次讀取該數(shù)據(jù)時(shí),數(shù)據(jù)已經(jīng)發(fā)生了改變。

    當(dāng)隔離級(jí)別設(shè)置為Read committed 時(shí),避免了臟讀,但是可能會(huì)造成不可重復(fù)讀。

    大多數(shù)數(shù)據(jù)庫(kù)的默認(rèn)級(jí)別就是Read committed,比如Sql Server , Oracle。如何解決不可重復(fù)讀這一問(wèn)題,請(qǐng)看下一個(gè)隔離級(jí)別。

    Repeatable read 重復(fù)讀

    當(dāng)隔離級(jí)別設(shè)置為Repeatable read 時(shí),可以避免不可重復(fù)讀。當(dāng)singo拿著工資卡去消費(fèi)時(shí),一旦系統(tǒng)開始讀取工資卡信息(即事務(wù)開始),singo的老婆就不可能對(duì)該記錄進(jìn)行修改,也就是singo的老婆不能在此時(shí)轉(zhuǎn)賬。

    雖然Repeatable read避免了不可重復(fù)讀,但還有可能出現(xiàn)幻讀 。

    singo的老婆工作在銀行部門,她時(shí)常通過(guò)銀行內(nèi)部系統(tǒng)查看singo的信用卡消費(fèi)記錄。有一天,她正在查詢到singo當(dāng)月信用卡的總消費(fèi)金額 (select sum(amount) from transaction where month = 本月)為80元,而singo此時(shí)正好在外面胡吃海塞后在收銀臺(tái)買單,消費(fèi)1000元,即新增了一條1000元的消費(fèi)記錄(insert transaction ... ),并提交了事務(wù),隨后singo的老婆將singo當(dāng)月信用卡消費(fèi)的明細(xì)打印到A4紙上,卻發(fā)現(xiàn)消費(fèi)總額為1080元,singo的老婆很詫異,以為出 現(xiàn)了幻覺(jué),幻讀就這樣產(chǎn)生了。

    注:Mysql的默認(rèn)隔離級(jí)別就是Repeatable read。

    Serializable 序列化

    Serializable 是最高的事務(wù)隔離級(jí)別,同時(shí)代價(jià)也花費(fèi)最高,性能很低,一般很少使用,在該級(jí)別下,事務(wù)順序執(zhí)行,不僅可以避免臟讀、不可重復(fù)讀,還避免了幻像讀。

    posted @ 2014-06-15 15:15 hellxoul 閱讀(238) | 評(píng)論 (0)編輯 收藏
    在上一篇文章中提到過(guò),我已經(jīng)不在Google工作了。我還沒(méi)有想清楚應(yīng)該去哪里—有兩三個(gè)非常好的工作機(jī)會(huì)擺在我面前。因?yàn)樵谶@段做決定時(shí)間里,我不再受雇于任何人,我想可以寫一些專業(yè)性的東西,一些很有趣,但也會(huì)在同事和管理工作中導(dǎo)致關(guān)系緊張的東西。

    Google是一個(gè)非常優(yōu)秀的公司。他們做出了很多令人稱贊的東西—既是公司外部,人們可以看到的東西,也是公司內(nèi)部。有一些在公司內(nèi)部并不屬于保密的事情,在外部并沒(méi)有給予足夠廣泛的討論。這就是我今天要說(shuō)的。

    讓Google的程序如此優(yōu)秀的一個(gè)最重要的事情看起來(lái)是非常的簡(jiǎn)單:代碼審查。并不是只有Google做這個(gè)事情—代碼審查已經(jīng)被廣泛的認(rèn)可為一種非常好的做法,很多人都在這樣做。但我還沒(méi)有看到第二家這樣大的公司能把這種事情運(yùn)用的如此普遍。在Google,沒(méi)有程序,任何產(chǎn)品、任何項(xiàng)目的程序代碼,可以在沒(méi)有經(jīng)過(guò)有效的代碼審查前提交到代碼庫(kù)里的。

    所有人都要經(jīng)過(guò)代碼審查。并且很正規(guī)的:這種事情應(yīng)該成為任何重要的軟件開發(fā)工作中一個(gè)基本制度。并不單指產(chǎn)品程序——所有東西。它不需要很多的工作,但它的效果是巨大的。

    從代碼審查里能得到什么?

    很顯然:在代碼提交前,用第二群眼睛檢查一遍,防止bug混入。這是對(duì)其最常見的理解,是對(duì)代碼審查的好處的最廣泛的認(rèn)識(shí)。但是,依我的經(jīng)驗(yàn)來(lái)看,這反倒是它最不重要的一點(diǎn)。人們確實(shí)在代碼審查中找到了bug。可是,這些在代碼審查中能發(fā)現(xiàn)的絕大部分bug,很顯然,都是微不足道的bug,程序的作者花幾分鐘的時(shí)間就能發(fā)現(xiàn)它們。真正需要花時(shí)間去發(fā)現(xiàn)的bug不是在代碼審查里能找到的。

    代碼審查的最大的功用是純社會(huì)性的。如果你在編程,而且知道將會(huì)有同事檢查你的代碼,你編程態(tài)度就完全不一樣了。你寫出的代碼將更加整潔,有更好的注釋,更好的程序結(jié)構(gòu)——因?yàn)槟?strong style="border: 0px; margin: 0px; padding: 0px; vertical-align: baseline; background: transparent;">知道,那個(gè)你很在意的人將會(huì)查看你的程序。沒(méi)有代碼審查,你知道人們最終還是會(huì)看你的程序。但這種事情不是立即發(fā)生的事,它不會(huì)給你帶來(lái)同等的緊迫感,它不會(huì)給你相同的個(gè)人評(píng)判的那種感受。

    還有一個(gè)非常重要的好處。代碼審查能傳播知識(shí)。在很多的開發(fā)團(tuán)隊(duì)里,經(jīng)常每一個(gè)人負(fù)責(zé)一個(gè)核心模塊,每個(gè)人都只關(guān)注他自己的那個(gè)模塊。除非是同事的模塊影響了自己的程序,他們從不相互交流。這種情況的后果是,每個(gè)模塊只有一個(gè)人熟悉里面的代碼。如果這個(gè)人休假或——但愿不是——辭職了,其他人則束手無(wú)策。通過(guò)代碼審查,至少會(huì)有兩個(gè)人熟悉這些程序——作者,以及審查者。審查者并不能像程序的作者一樣對(duì)程序十分了解——但他會(huì)熟悉程序的設(shè)計(jì)和架構(gòu),這是極其重要的。

    當(dāng)然,沒(méi)有什么事情能簡(jiǎn)單的做下來(lái)的。依我的經(jīng)驗(yàn),在你能正確的進(jìn)行代碼審查前,你需要花時(shí)間鍛煉學(xué)習(xí)。我發(fā)現(xiàn)人們?cè)诖a審查時(shí)經(jīng)常會(huì)犯一些錯(cuò)誤,導(dǎo)致不少麻煩——尤其在一些缺乏經(jīng)驗(yàn)的審查者中經(jīng)常的出現(xiàn),他們給了人們一個(gè)很遭的代碼審查的體驗(yàn),成為了人們接受代碼審查制度的一個(gè)障礙。

    最重要的一個(gè)原則:代碼審查用意是在代碼提交前找到其中的問(wèn)題——你要發(fā)現(xiàn)是它的正確。在代碼審查中最常犯的錯(cuò)誤——幾乎每個(gè)新手都會(huì)犯的錯(cuò)誤——是,審查者根據(jù)自己的編程習(xí)慣來(lái)評(píng)判別人的代碼。

    對(duì)于一個(gè)問(wèn)題,通常我們能找出十幾種方法去解決。對(duì)于一種解決方案,我們能有百萬(wàn)種編碼方案來(lái)實(shí)現(xiàn)它。作為一個(gè)審查者,你的任務(wù)不是來(lái)確保被審查的代碼都采用的是你的編碼風(fēng)格——因?yàn)樗豢赡芨銓懙囊粯印W鳛橐欢未a的審查者的任務(wù)是確保由作者自己寫出的代碼是正確的。一旦這個(gè)原則被打破,你最終將會(huì)倍感折磨,深受挫折——這可不是我們想要的結(jié)果。

    問(wèn)題在于,這種錯(cuò)誤是如此的普遍而易犯。如果你是個(gè)程序員,當(dāng)你遇到一個(gè)問(wèn)題,你能想到一種解決方案——你就把你想到的方案作為標(biāo)準(zhǔn)答案。但事情不是這樣的——作為一個(gè)好的審查者,你需要明白這個(gè)道理。

    代碼審查的第二個(gè)易犯的毛病是,人們覺(jué)得有壓力,感覺(jué)非要說(shuō)點(diǎn)什么才好。你知道作者用了大量的時(shí)間和精力來(lái)實(shí)現(xiàn)這些程序——不該說(shuō)點(diǎn)什么嗎?

    不,你不需要。

    只說(shuō)一句“哇,不錯(cuò)呀”,任何時(shí)候都不會(huì)不合適。如果你總是力圖找出一點(diǎn)什么東西來(lái)批評(píng),你這樣做的結(jié)果只會(huì)損害自己的威望。當(dāng)你不厭其煩的找出一些東西來(lái),只是為了說(shuō)些什么,被審查人就會(huì)知道,你說(shuō)這些話只是為了填補(bǔ)寂靜。你的評(píng)論將不再被人重視。

    第三是速度。你不能匆匆忙忙的進(jìn)行一次代碼審查——但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多時(shí)間進(jìn)行代碼復(fù)查,你們很快的完成,那被審查者會(huì)覺(jué)得很沮喪,這種代碼審查帶來(lái)的只有失望的感覺(jué)。就好象是打攪了大家,使大家放下手頭的工作來(lái)進(jìn)行審查。事情不該是這樣。你并不需要推掉手頭上的任何事情來(lái)做代碼審查。但如果中途耽誤了幾個(gè)小時(shí),你中間還要休息一會(huì),喝杯茶,沖個(gè)澡,或談會(huì)兒閑話。當(dāng)你回到審查現(xiàn)場(chǎng),你可以繼續(xù)下去,把事情做完。如果你真是這樣,我想沒(méi)有人愿意在那干等著你。

    [英文原文:Things Everyone Should Do: Code Review ]
    posted @ 2014-06-06 10:04 hellxoul 閱讀(221) | 評(píng)論 (0)編輯 收藏
    wps只有32位的,因此要安裝wps必須安裝32位的支持庫(kù),按照網(wǎng)上的教程先安裝32位的一些依賴庫(kù)
    因?yàn)橐呀?jīng)安裝了libfreetype,網(wǎng)上也說(shuō)64位的安裝32位的libfreetype 會(huì)有問(wèn)題,同時(shí),自己系統(tǒng)也裝不上32位的libfreetype 總是提示沖突。
    沒(méi)辦法強(qiáng)制安裝
    sudo dpkg -i --force-all --ignore-depends=libfreetype6:i386 --ignore-depends=libfontconfig1:i386 wps-office_8.1.0.3724~b1p2_i386.deb
    搞定
    posted @ 2014-04-20 21:40 hellxoul 閱讀(1498) | 評(píng)論 (0)編輯 收藏
    使用win8.1系統(tǒng)盤啟動(dòng),進(jìn)入系統(tǒng)修復(fù)-高級(jí)-命令行,使用bcdboot 命令復(fù)制啟動(dòng)盤的啟動(dòng)到現(xiàn)有系統(tǒng)中去
    bcdboot h:\windows \s c:
    h:為系統(tǒng)啟動(dòng)盤所在的盤符
    posted @ 2014-04-19 20:41 hellxoul 閱讀(218) | 評(píng)論 (0)編輯 收藏

    基于云的應(yīng)用與運(yùn)行在私有數(shù)據(jù)中心的應(yīng)用之間最大的差別就是可擴(kuò)展性。云提供了按需擴(kuò)展的能力,能夠根據(jù)負(fù)載的波動(dòng)對(duì)應(yīng)用進(jìn)行擴(kuò)展和收縮。但是傳統(tǒng)應(yīng)用要充分發(fā)揮云的優(yōu)勢(shì),并不是簡(jiǎn)單地將應(yīng)用部署到云上就萬(wàn)事大吉,而是需要根據(jù)云的特點(diǎn)圍繞可擴(kuò)展性重新進(jìn)行架構(gòu)設(shè)計(jì),近日AppDynamics的開發(fā)布道者Dustin.Whittle撰文闡述了適合云端部署的應(yīng)用架構(gòu),對(duì)我們傳統(tǒng)應(yīng)用往云端部署有很大的啟發(fā)和借鑒意義。

    應(yīng)用的架構(gòu)

    Dustin.Whittle給出了云應(yīng)用的示例架構(gòu),它具有高度的可擴(kuò)展性,如下圖所示:

    在這個(gè)圖中,應(yīng)用按照分層的理念進(jìn)行了拆分,分別介紹如下:

    客戶端層:客戶端層包含了針對(duì)目標(biāo)平臺(tái)的用戶界面,可能會(huì)包括基于Web的、移動(dòng)端的甚至是胖客戶端的用戶界面。一般來(lái)講,這可能會(huì)是Web應(yīng)用,包含諸如用戶管理、會(huì)話管理、頁(yè)面構(gòu)建等功能,但是其他客戶端所發(fā)起的交互都需要以RESTful服務(wù)的形式調(diào)用服務(wù)器。

    服務(wù):服務(wù)器包含了緩存服務(wù)以及聚合(aggregate)服務(wù),其中緩存服務(wù)中持有記錄系統(tǒng)(system of record)中最新的已知狀態(tài),而聚集服務(wù)會(huì)直接與記錄系統(tǒng)交互,并且會(huì)執(zhí)行一些破壞性的操作(會(huì)改變記錄系統(tǒng)中的狀態(tài))。

    記錄系統(tǒng):記錄系統(tǒng)是領(lǐng)域特定的服務(wù)端,它會(huì)驅(qū)動(dòng)業(yè)務(wù)功能,可能會(huì)包括客戶管理系統(tǒng)、采購(gòu)系統(tǒng)、預(yù)定系統(tǒng)等等,這些很可能是遺留系統(tǒng),你的應(yīng)用需要與其進(jìn)行交互。聚集服務(wù)要負(fù)責(zé)將你的應(yīng)用從這些特有的記錄系統(tǒng)中抽象出來(lái),并為你的應(yīng)用提供一致的前端接口。

    ESB當(dāng)記錄系統(tǒng)發(fā)生數(shù)據(jù)變化的時(shí)候,它需要觸發(fā)到指定主題(topic)的事件,這就是事件驅(qū)動(dòng)架構(gòu)(event-driven architecture,EDA)能夠影響應(yīng)用的地方了:當(dāng)記錄系統(tǒng)進(jìn)行了一項(xiàng)其他系統(tǒng)可能感興趣的變更時(shí),它會(huì)觸發(fā)一個(gè)事件,任何關(guān)注記錄系統(tǒng)的其他系統(tǒng)會(huì)監(jiān)聽到這個(gè)事件,并作出對(duì)應(yīng)的響應(yīng)。這也是使用使用主題(topic)而不是隊(duì)列(queue)的原因:隊(duì)列支持點(diǎn)對(duì)點(diǎn)(point-to-point)的消息,而主題支持發(fā)布-訂閱(publish-subscribe)的消息或事件。當(dāng)與遺留系統(tǒng)進(jìn)行集成時(shí),我們很期望這些遺留的系統(tǒng)能夠免遭負(fù)載的影響。因此,我們實(shí)現(xiàn)了一個(gè)緩存系統(tǒng),這個(gè)緩存系統(tǒng)維持了記錄系統(tǒng)中所有最新的已知狀態(tài)。緩存系統(tǒng)會(huì)使用EDA的規(guī)則監(jiān)聽記錄系統(tǒng)的變化,它會(huì)更新自己所保存數(shù)據(jù)的版本,從而保證與記錄系統(tǒng)中的數(shù)據(jù)相匹配。這是一個(gè)很強(qiáng)大的策略,不過(guò)會(huì)將一致性模型變?yōu)樽罱K一致性,也就是說(shuō)如果你在社交媒體上發(fā)布一條狀態(tài)的話,你的朋友可能在幾秒鐘甚至幾分鐘之后才能看到,數(shù)據(jù)最終是一致的,但有時(shí)你所看到的與你的朋友所看到的并不一致。如果能接受這種一致性的話,就能在很大程度上實(shí)現(xiàn)可擴(kuò)展性的收益。

    NoSQL在數(shù)據(jù)存儲(chǔ)方面,有很多的可選方案,但如果要存儲(chǔ)大量數(shù)據(jù)的話,使用NoSQL存儲(chǔ)能夠更容易地?cái)U(kuò)展。有多種NoSQL存儲(chǔ)可供選擇,不過(guò)這要匹配所存儲(chǔ)數(shù)據(jù)的特點(diǎn),如MongoDB適合存儲(chǔ)可搜索的數(shù)據(jù),Neo4j適合存儲(chǔ)高度互相關(guān)聯(lián)的數(shù)據(jù),而Cassandra適合存儲(chǔ)鍵/值對(duì),像Solr這樣的搜索索引有利于加速對(duì)經(jīng)常訪問(wèn)數(shù)據(jù)的查詢。

    將應(yīng)用拆分為多個(gè)層的時(shí)候,最好的模式就是使用面向服務(wù)架構(gòu)(service-oriented architecture,SOA)。要實(shí)現(xiàn)這一點(diǎn),可以使用SOAP,也可以使用REST,但是REST更為合適,因?yàn)樗蓴U(kuò)展性更強(qiáng)。作者接下來(lái)對(duì)REST的理念進(jìn)行了深入的闡述,InfoQ上關(guān)于REST已有很多相關(guān)的文章,如這里這里,甚至包括Roy Fielding經(jīng)典博士論文中譯本,所以這里不再贅述。不過(guò),作者在這里特別強(qiáng)調(diào)了RESTful Web服務(wù)能夠保持無(wú)狀態(tài)性(stateless)。無(wú)狀態(tài)是實(shí)現(xiàn)可擴(kuò)展性的關(guān)鍵需求,因?yàn)闊o(wú)狀態(tài),所以請(qǐng)求可以由任何一個(gè)服務(wù)器響應(yīng)。如果你在服務(wù)層上需要更多的容量時(shí),只需要為該層添加虛擬機(jī)即可,而不需關(guān)注客戶端狀態(tài)保持的問(wèn)題,負(fù)載可以很容易地重新分配。

    部署到云端

    前面介紹了基于云的應(yīng)用架構(gòu),接下來(lái)作者闡述了這樣的應(yīng)用該如何部署到云端。

    RESTful Web服務(wù)要部署到Web容器中,并且要位于數(shù)據(jù)存儲(chǔ)之前。這些Web服務(wù)是沒(méi)有狀態(tài)的,只會(huì)反映其暴露的底層數(shù)據(jù)的狀態(tài),因此可以根據(jù)需要部署任意數(shù)量的服務(wù)器。在基于云的部署中,開始時(shí)可以開啟足夠的實(shí)例以應(yīng)對(duì)日常的需求,然后配置彈性策略,從而根據(jù)負(fù)載增加或減少服務(wù)器的數(shù)量。衡量飽和度的最好指標(biāo)就是服務(wù)的響應(yīng)時(shí)間。另外還需要考慮這些服務(wù)所使用的底層數(shù)據(jù)存儲(chǔ)的性能。示例的部署圖如下所示:

    如果在云部署時(shí)有EDA的需求,那么就需要部署ESB,作者給出的建議是根據(jù)功能對(duì)ESB進(jìn)行分區(qū)(partitioning),這樣一個(gè)segment的過(guò)大負(fù)載不會(huì)影響到其他的segment。如下圖所示:

    這種分離使System 1的負(fù)載與System 2的負(fù)載實(shí)現(xiàn)了隔離。如果System 1產(chǎn)生的負(fù)載拖慢了ESB,它只會(huì)影響到自己的segment,并不會(huì)影響到System 2的segment,因?yàn)樗渴鹪谄渌布稀H绻鸈SB產(chǎn)品支持的話,我們還可以給指定的segment添加服務(wù)器來(lái)實(shí)現(xiàn)擴(kuò)展。

    基于云的應(yīng)用與傳統(tǒng)應(yīng)用有著很大的差別,因?yàn)樗兄煌臄U(kuò)展性需求。基于云的應(yīng)用必須有足夠的彈性以應(yīng)對(duì)服務(wù)器的添加與移除,必須松耦合,必須盡可能的無(wú)狀態(tài),必須預(yù)先規(guī)劃失敗的情況,并且必須能夠從幾臺(tái)服務(wù)器擴(kuò)展到成千上萬(wàn)臺(tái)服務(wù)器。

    針對(duì)云應(yīng)用并沒(méi)有唯一正確的架構(gòu),但是本文所闡述的RESTful服務(wù)以及事件驅(qū)動(dòng)架構(gòu)卻是經(jīng)過(guò)實(shí)踐檢驗(yàn)有效的架構(gòu)。作者認(rèn)為REST和EDA是實(shí)現(xiàn)云端可擴(kuò)展應(yīng)用的基本工具。

    目前,國(guó)內(nèi)許多傳統(tǒng)的軟件廠商正在逐漸往云端遷移,希望本文所闡述的架構(gòu)理念能夠?yàn)樽x者提供一些借鑒。

    posted @ 2014-03-25 09:18 hellxoul 閱讀(370) | 評(píng)論 (0)編輯 收藏
    from:http://www.douban.com/group/topic/35067110/
    收集帖: 

    node.js 中文api (開放版) :http://nodeapi.ucdok.com/ 
    node.js 中文api :http://jsfuns.com/ebook/#30d25070-118c-11e3-bc83-47c9e4e1d529 
    node.js入門中文版: http://nodebeginner.org/index-zh-cn.html 

    express3.*中文API: http://expressjs.jser.us/ 
    koa 中文文檔:https://github.com/turingou/koa-guide //Express 原班人馬打造的 比express更輕更富有表現(xiàn)力的web框架 

    深入理解Express: http://xvfeng.me/posts/understanding-expressjs/ 
    meteor中文文檔:http://d0cs.meteor.com/ 
    NodeJS 和 Socket.io 中文入門教程:http://t.cn/zOMwxCg 
    jade中文文檔: http://expressjs.jser.us/jade.html 
    Juicer 中文文檔:http://juicer.name/docs/docs_zh_cn.html 
    Mongoose 基本功能使用:http://t.cn/zOIKPeB 

    以下是一些blog教程系列: 

    讓我們基于Node.js創(chuàng)建一個(gè)Web應(yīng)用系列(5篇):http://t.cn/z8JnzkA 
    一周node.js系列(7篇) :http://t.cn/zOKuc9D 
    從零開始nodejs系列: http://blog.fens.me/series-nodejs/ 
    一起學(xué)node.js (薦): http://t.cn/zHxNXXt 
    Node.js高級(jí)編程(薦): http://t.cn/zYmuqaH 
    深入淺出Node.js http://www.infoq.com/cn/master-nodejs 
    Node.js零起點(diǎn)開發(fā):http://blog.csdn.net/kaosini/article/details/8084268 
    node.js入門(共13篇)http://www.cnblogs.com/softlover/category/406516.html 
    snoopyxdy的博客(大量node及express api的解讀及進(jìn)階內(nèi)容):http://t.cn/zQuKMKH 
    用node.js寫web框架系列:http://my.oschina.net/Jeky/blog?catalog=262655 
    Luics的node.js系列: http://t.cn/zjATQlf 
    使用node.js建博客:http://witcheryne.iteye.com/blog/1172069 


    nodejs相關(guān): 
    用socket.io 搭建聊天室: https://github.com/nswbmw/N-chat/wiki/_pages 

    nodejs實(shí)體中文圖書: 

    了不起的node.js: http://book.douban.com/subject/25767596/ 2014年1月 
    node.js高級(jí)編程: http://book.douban.com/subject/25799431/ 2013年12月 
    深入淺出nodejs: http://book.douban.com/subject/25768396/ 2013年12月 
    node.js入門經(jīng)典: http://book.douban.com/subject/23780706/ 2013年4月 
    node.js開發(fā)指南: http://book.douban.com/subject/10789820/ 2012年7月 
    Node Web開發(fā): http://book.douban.com/subject/10586326/ 2012年4月 
    posted @ 2014-02-25 15:13 hellxoul 閱讀(1100) | 評(píng)論 (0)編輯 收藏

    mosquito 是一個(gè)MQTT 服務(wù)器。MQTT協(xié)議可用來(lái)做Android消息推送,服務(wù)器端采用mosquito+PhpMQTTClient(這個(gè)php用來(lái)做實(shí)驗(yàn))

    自己不會(huì)java,不會(huì)Android開發(fā),推送的開發(fā)部分是同事做的。使用情況表明,單臺(tái)服務(wù)器能滿足幾萬(wàn)的穩(wěn)定的連接數(shù),擴(kuò)展起來(lái)也不難,加機(jī)器即可。

    下載最新版的mosquitto
    cd /usr/local/src
    wget http://mosquitto.org/files/source/mosquitto-1.1.2.tar.gz
    tar zxvf mosquitto-1.1.2.tar.gz
    cd mosquitto-1.1.2
    如果當(dāng)前openssl版本低于1.0,修改config.mk中的WITH_TLS_PSK:=no
    make
    make install prefix=/usr/local/mosquitto
    為方便管理,添加下面至/etc/profile
    export PATH=”$PATH:/usr/local/mosquitto/bin”
    export PATH=”$PATH:/usr/local/mosquitto/sbin”

    source /etc/profile
    [root@mysql230 mosquitto]# mosquitto #tab補(bǔ)全,四個(gè)命令
    mosquitto mosquitto_passwd mosquitto_pub mosquitto_sub

    mosquitto服務(wù)器主程序,實(shí)現(xiàn)了MQTT協(xié)議
    mosquitto_pub mosquitto發(fā)布消息的命令行程序
    mosquitto_sub mosquitto訂閱消息的命令行程序
    默認(rèn)的配置文件在 /etc/mosquitto/里

    將/usr/local/mosquitto/lib/添加至/etc/ld.so.conf
    執(zhí)行 ldconfig -f /etc/ld.so.conf 可能需要等待數(shù)秒

    啟動(dòng)
    mosquitto (-d后臺(tái)啟動(dòng))
    可能提示沒(méi)有用戶 mosquitto,useradd mosquitto
    終端測(cè)試
    客戶端 mosquitto_sub -h 192.168.1.230 -t test
    另起命令行mosquitto_pub -t test -m ’123′
    PhpMQTTClient安裝
    去https://github.com/tokudu/PhpMQTTClient 下載程序包,放置到服務(wù)器目錄
    可能需要結(jié)合實(shí)際情況,要修改的地方
    index.php
    $result = $conn->connect(SAM_MQTT, array(‘SAM_HOST’ => ’127.0.0.1′, ‘SAM_PORT’ => 1883));

    SAM/MQTT/sam_mqtt.php
    $this->port = 1883;

    啟動(dòng)mosquitto在前臺(tái)運(yùn)行,以方便獲取連接客戶端的信息
    mosquitto
    在服務(wù)器另外一終端上啟動(dòng)訂閱消息的進(jìn)程,訂閱所有tokudu開頭topic
    mosquitto_sub –t tokudu /+
    注意,此處之所以要使用tokudu,可以看index.php的182行 var target = ‘tokudu/’ + $(‘#messageTarget’).val();
    在mosquitto的終端獲得mosquitto_sub客戶端的id
    1350006978: New client connected from 127.0.0.1 as mosqsub/8491-localhost..

    訪問(wèn)http://host:port/ ,push notification target字段填寫8491-localhost,push notification text填寫需要推送的測(cè)試消息
    在mosquitto的終端查看是否收到了推送的消息,如果收到,說(shuō)明phpmqttclient已經(jīng)安裝配置成功

    解決mosquitto占有cpu進(jìn)程過(guò)高的問(wèn)題 https://answers.launchpad.net/mosquitto/+question/189612
    ulimit -u 4096
    ulimit -n 4096

    附:
    配置文件
    # =================================================================
    # General configuration
    # =================================================================

    # 客戶端心跳的間隔時(shí)間
    #retry_interval 20

    # 系統(tǒng)狀態(tài)的刷新時(shí)間
    #sys_interval 10

    # 系統(tǒng)資源的回收時(shí)間,0表示盡快處理
    #store_clean_interval 10

    # 服務(wù)進(jìn)程的PID
    #pid_file /var/run/mosquitto.pid

    # 服務(wù)進(jìn)程的系統(tǒng)用戶
    #user mosquitto

    # 客戶端心跳消息的最大并發(fā)數(shù)
    #max_inflight_messages 10

    # 客戶端心跳消息緩存隊(duì)列
    #max_queued_messages 100

    # 用于設(shè)置客戶端長(zhǎng)連接的過(guò)期時(shí)間,默認(rèn)永不過(guò)期
    #persistent_client_expiration

    # =================================================================
    # Default listener
    # =================================================================

    # 服務(wù)綁定的IP地址
    #bind_address

    # 服務(wù)綁定的端口號(hào)
    #port 1883

    # 允許的最大連接數(shù),-1表示沒(méi)有限制
    #max_connections -1

    # cafile:CA證書文件
    # capath:CA證書目錄
    # certfile:PEM證書文件
    # keyfile:PEM密鑰文件
    #cafile
    #capath
    #certfile
    #keyfile

    # 必須提供證書以保證數(shù)據(jù)安全性
    #require_certificate false

    # 若require_certificate值為true,use_identity_as_username也必須為true
    #use_identity_as_username false

    # 啟用PSK(Pre-shared-key)支持
    #psk_hint

    # SSL/TSL加密算法,可以使用“openssl ciphers”命令獲取
    # as the output of that command.
    #ciphers

    # =================================================================
    # Persistence
    # =================================================================

    # 消息自動(dòng)保存的間隔時(shí)間
    #autosave_interval 1800

    # 消息自動(dòng)保存功能的開關(guān)
    #autosave_on_changes false

    # 持久化功能的開關(guān)
    persistence true

    # 持久化DB文件
    #persistence_file mosquitto.db

    # 持久化DB文件目錄
    #persistence_location /var/lib/mosquitto/

    # =================================================================
    # Logging
    # =================================================================

    # 4種日志模式:stdout、stderr、syslog、topic
    # none 則表示不記日志,此配置可以提升些許性能
    log_dest none

    # 選擇日志的級(jí)別(可設(shè)置多項(xiàng))
    #log_type error
    #log_type warning
    #log_type notice
    #log_type information

    # 是否記錄客戶端連接信息
    #connection_messages true

    # 是否記錄日志時(shí)間
    #log_timestamp true

    # =================================================================
    # Security
    # =================================================================

    # 客戶端ID的前綴限制,可用于保證安全性
    #clientid_prefixes

    # 允許匿名用戶
    #allow_anonymous true

    # 用戶/密碼文件,默認(rèn)格式:username:password
    #password_file

    # PSK格式密碼文件,默認(rèn)格式:identity:key
    #psk_file

    # pattern write sensor/%u/data
    # ACL權(quán)限配置,常用語(yǔ)法如下:
    # 用戶限制:user <username>
    # 話題限制:topic [read|write] <topic>
    # 正則限制:pattern write sensor/%u/data
    #acl_file

    # =================================================================
    # Bridges
    # =================================================================

    # 允許服務(wù)之間使用“橋接”模式(可用于分布式部署)
    #connection <name>
    #address <host>[:<port>]
    #topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]

    # 設(shè)置橋接的客戶端ID
    #clientid

    # 橋接斷開時(shí),是否清除遠(yuǎn)程服務(wù)器中的消息
    #cleansession false

    # 是否發(fā)布橋接的狀態(tài)信息
    #notifications true

    # 設(shè)置橋接模式下,消息將會(huì)發(fā)布到的話題地址
    # $SYS/broker/connection/<clientid>/state
    #notification_topic

    # 設(shè)置橋接的keepalive數(shù)值
    #keepalive_interval 60

    # 橋接模式,目前有三種:automatic、lazy、once
    #start_type automatic

    # 橋接模式automatic的超時(shí)時(shí)間
    #restart_timeout 30

    # 橋接模式lazy的超時(shí)時(shí)間
    #idle_timeout 60

    # 橋接客戶端的用戶名
    #username

    # 橋接客戶端的密碼
    #password

    # bridge_cafile:橋接客戶端的CA證書文件
    # bridge_capath:橋接客戶端的CA證書目錄
    # bridge_certfile:橋接客戶端的PEM證書文件
    # bridge_keyfile:橋接客戶端的PEM密鑰文件
    #bridge_cafile
    #bridge_capath
    #bridge_certfile
    #bridge_keyfile

    # 自己的配置可以放到以下目錄中
    include_dir /etc/mosquitto/conf.d


    本文出自 “Cooke Chen 我愛(ài)小貝” 博客,請(qǐng)務(wù)必保留此出處http://cswei.blog.51cto.com/3443978/1225617

    posted @ 2013-12-12 21:54 hellxoul 閱讀(8970) | 評(píng)論 (0)編輯 收藏
    Sublime Text 2
    ---------------
    非常好用的文本編輯器,雖是收費(fèi)的,但是現(xiàn)在可以免費(fèi)不限時(shí)間試用。

    Shell代碼  收藏代碼
    1. sudo add-apt-repository ppa:webupd8team/sublime-text-2   
    2. sudo apt-get update  
    3. sudo apt-get install sublime-text-2  

    將 sublime 作為默認(rèn)的文本編輯器
    sudo subl /usr/share/applications/defaults.list
    把所有的 gedit.desktop 替換為 sublime-text-2.desktop

    Jupiter
    ----------------
    據(jù)說(shuō)可以讓 Ubuntu 不那么耗電.... 我的本子跑的時(shí)候比較燙,權(quán)且相信了。這個(gè)工具還可以關(guān)閉觸摸屏,這點(diǎn)比較實(shí)用。
    Shell代碼  收藏代碼
    1. sudo add-apt-repository ppa:webupd8team/jupiter  
    2. sudo apt-get update  
    3. sudo apt-get install jupiter  



    Tweak
    ----------------
    使用過(guò)后才發(fā)現(xiàn)確實(shí)比 MyUnity 要好用,功能也更多。
    去官方網(wǎng)站下載吧:
    網(wǎng)址代碼  收藏代碼
    1. http://ubuntu-tweak.com/  



    MyUnity
    ----------------
    自 Ubuntu 轉(zhuǎn)用 Unity 后就一直褒貶不一,我個(gè)人還是比較喜歡這種設(shè)計(jì)的,比較前衛(wèi),很漂亮;還把菜單欄和頂部欄合為一體,比較節(jié)省本子本來(lái)已經(jīng)很小的垂直視野;但是也有些東西 很惱人,比如左側(cè)欄總是會(huì)彈出,非常影響體驗(yàn)。有了這個(gè)工具就可以很方便的定制界面了。比如我就把左側(cè)欄縮小到 40,然后固定,還是比較 Nice 的。
    Shell代碼  收藏代碼
    1. sudo add-apt-repository ppa:myunity/ppa  
    2. sudo apt-get update  
    3. sudo apt-get install myunity  



    Guake
    ----------------------------------
    非常好用的 Terminator,可以在 Ubuntu 軟件中心安裝。


    Fish (Friendly Interactive Shell)
    -----------------------------------
    正如其名字,比默認(rèn)的 shell terminate 更加友好,更加方便使用。添加的語(yǔ)法高亮,用下劃線標(biāo)出存在的地址,等等。
    Shell代碼  收藏代碼
    1. sudo apt-get install fish  

    如果你和我一樣喜歡把他作為默認(rèn)的 shell 的話,可以按下面方法做:
    1. 確定 fish 安裝路徑:
    Shell代碼  收藏代碼
    1. whereis fish  

    2. 添加為默認(rèn):
    Shell代碼  收藏代碼
    1. chsh -s /usr/local/bin/fish(注,這個(gè)地址由上面的命令得到)  



    dnsmasq
    -------------------------
    DNS 緩存,加速訪問(wèn)網(wǎng)站
    1. 安裝
    Shell代碼  收藏代碼
    1. sudo apt-get install dnsmasq  

    2. 配置 dnsmasq.conf
    Shell代碼  收藏代碼
    1. sudo vim /etc/dnsmasq.conf  
    2. 查找   #listen-address=  
    3. 修改為 listen-address=127.0.0.1  

    3. 配置 dhclient.conf
    有些網(wǎng)站修改的是 /etc/dhcp3/dhclient.conf,我用的是 ubuntu 11.10,沒(méi)有找到這個(gè)文件,修改的是 /etc/dhcp/dhclient.conf
    Shell代碼  收藏代碼
    1. sudo vim /etc/dhcp/dhclient.conf  
    2. 查找  #prepend domain-name-servers 127.0.0.1;  
    3. 刪除注釋符號(hào) #  
    4. 變成  prepend domain-name-servers 127.0.0.1;  

    4. 配置 resolv.conf
    Shell代碼  收藏代碼
    1. sudo vim /etc/resolv.conf  
    2. 修改為:  
    3. # Local Cached DNS  
    4. nameserver 127.0.0.1  
    5. # Google DNS  
    6. nameserver 8.8.8.8  
    7. nameserver 8.8.4.4  
    8. # OpenDNS  
    9. nameserver 208.67.220.220  
    10. nameserver 208.67.222.222  

    5. 重啟 dnsmasq
    Shell代碼  收藏代碼
    1. sudo /etc/init.d/networking restart 
    posted @ 2013-11-19 20:53 hellxoul 閱讀(249) | 評(píng)論 (0)編輯 收藏
         摘要: 【51CTO精選譯文】Rsnapshot是一款開源本地/遠(yuǎn)程文件系統(tǒng)備份實(shí)用工具,它采用Perl語(yǔ)言編寫而成,充分利用了Rsync和SSH程序的功能,可以針對(duì)Linux/Unix文件系統(tǒng)創(chuàng)建預(yù)定的增量備份,同時(shí)只占用了一套單個(gè)完全備份的空間(外加變化的數(shù)據(jù)),并將本地驅(qū)動(dòng)器上的那些備份存放到不同的硬盤驅(qū)動(dòng)器、外置USB驅(qū)動(dòng)器、NFS掛載驅(qū)動(dòng)器上,或者干脆經(jīng)由SSH,通過(guò)網(wǎng)絡(luò)存放到另一臺(tái)機(jī)器上。安裝...  閱讀全文
    posted @ 2013-11-15 09:34 hellxoul 閱讀(644) | 評(píng)論 (0)編輯 收藏

    TDDL動(dòng)態(tài)數(shù)據(jù)源基本說(shuō)明

    總體描述

    TDDL動(dòng)態(tài)數(shù)據(jù)源主要分為2層,每一層都實(shí)現(xiàn)了jdbc規(guī)范,以方便地集成到各種orm框架或者直接使用.每一層都各司其職.

     

    整體結(jié)構(gòu)如上圖,TGroupDataSource(tddl group ds)默認(rèn)情況下依賴TAtomDataSource(tddl atom ds),但是可以擴(kuò)展依賴普通數(shù)據(jù)源.這一層主要的職責(zé)是解決讀寫分離以及主備切換的問(wèn)題,當(dāng)然是在線執(zhí)行這些動(dòng)作,無(wú)需重啟.一個(gè)TGroupDataSource底下會(huì)掛多個(gè)TAtomDataSource,每個(gè)TAtomDataSource都有相對(duì)應(yīng)的讀寫權(quán)重.

    TAtomDataSource(tddl atom ds)這一層并沒(méi)有實(shí)現(xiàn)真正的數(shù)據(jù)源邏輯,而是依賴了一個(gè)近似第三方的包-我們jboss剝離出來(lái)的datasource,這一層的職責(zé)主要是將單個(gè)數(shù)據(jù)源的配置放置到diamond服務(wù)器中,實(shí)現(xiàn)數(shù)據(jù)源配置的集中管理和動(dòng)態(tài)變更.減少運(yùn)維成本. TAtomDataSource實(shí)際對(duì)應(yīng)了一個(gè)真正的數(shù)據(jù)源.

    Tddl動(dòng)態(tài)數(shù)據(jù)源暫時(shí)支持mysql和oracle ,但是因?yàn)槊恳粚佣际莏dbc的實(shí)現(xiàn),所以很容易擴(kuò)展支持其他實(shí)現(xiàn)jdbc規(guī)范的數(shù)據(jù)源.

    TGroupDataSource

    1. 基本功能

    (1)     主備數(shù)據(jù)庫(kù)動(dòng)態(tài)容災(zāi)切換

    支持進(jìn)行主備的對(duì)調(diào)切換,狀態(tài)對(duì)調(diào)后備庫(kù)變?yōu)橹鲙?kù),主庫(kù)變?yōu)閭鋷?kù)

    (2)     相同數(shù)據(jù)分片讀寫分離

    針對(duì)mysql replication機(jī)制進(jìn)行的數(shù)據(jù)主備復(fù)制,可以直接使用group datasource來(lái)支持讀寫分離。讀寫分離支持權(quán)重設(shè)置,允許對(duì)不同庫(kù)使用不同的權(quán)重。

    (3)     讀重試

    一臺(tái)數(shù)據(jù)庫(kù)掛掉后,如果是個(gè)fatal exception(有定義),那么會(huì)進(jìn)入讀重試,以確保盡可能多的數(shù)據(jù)訪問(wèn)可以在正常數(shù)據(jù)庫(kù)中訪問(wèn)。

    (4)     數(shù)據(jù)庫(kù)掛掉排除,單線程重試

    使用try – lock機(jī)制來(lái)進(jìn)行線程保護(hù),在第一次捕捉到fatal exception以后,只允許一個(gè)線程進(jìn)入數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)訪問(wèn),直到數(shù)據(jù)庫(kù)可以正常的工作為止

    (5)     流量控制,數(shù)據(jù)庫(kù)保護(hù)

    1. 延展性功能

    (1)     指定數(shù)據(jù)庫(kù)訪問(wèn)(ThreadLocal)

    一組對(duì)等數(shù)據(jù)庫(kù)中,寫庫(kù)一般只配置一個(gè),其余數(shù)據(jù)庫(kù)都為備庫(kù),因?yàn)橥ㄟ^(guò)復(fù)制機(jī)制,所以主備主鍵有延遲,對(duì)于各種類型的讀(實(shí)時(shí)讀和延遲讀),可以使用GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(int dataSourceIndex)指定需要訪問(wèn)的數(shù)據(jù)庫(kù).

    (2)     指定數(shù)據(jù)庫(kù)訪問(wèn)(Hint)

    這是指定數(shù)據(jù)庫(kù)訪問(wèn)的另外一種方式. 這種方式是在sql之前加注釋,告知tddl動(dòng)態(tài)數(shù)據(jù)源該選擇第幾個(gè)數(shù)據(jù)庫(kù).類似: /*+TDDL_GROUP({groupIndex:0})*/select * from normaltbl_0001 where pk = ? 變幻groupIndex的數(shù)字即可指定具體的第幾個(gè)庫(kù),從0開始.

    TAtomDataSource

    1. 基本功能

    (1)     數(shù)據(jù)源配置集中管控

    (2)     定期密碼變更

    (3)     Jboss數(shù)據(jù)源連接池的配置管理和推送

    1. 延展性功能

    (1)  動(dòng)態(tài)創(chuàng)建,添加,減少數(shù)據(jù)源

    (2)  數(shù)據(jù)庫(kù)R,W,NA狀態(tài)通知,以及讀寫訪問(wèn)控制,如置為NA則數(shù)據(jù)庫(kù)所有訪問(wèn)會(huì)直接拋出SQLException

    (3)  數(shù)據(jù)庫(kù)保護(hù)

    Diamond中配置說(shuō)明.

    Tddl的動(dòng)態(tài)數(shù)據(jù)源配置都放置在diamond配置中心,而一條diamond配置包括一個(gè)全局唯一的dataId和GROUP, tddl的配置數(shù)據(jù)也不例外,以下主要說(shuō)明tddl動(dòng)態(tài)數(shù)據(jù)源的dataId拼寫以及每一個(gè)dataId下數(shù)據(jù)的內(nèi)容.(詳細(xì)示例請(qǐng)參考示例使用說(shuō)明文檔)

    1. 1.       TGroupDataSource的配置

    Group中的配置主要是配置一組對(duì)等的數(shù)據(jù)的讀寫權(quán)重

    dataId組成規(guī)范:“com.taobao.tddl.jdbc.group_V2.4.1_”+dbGroupKey

    配置內(nèi)容(示例):tddl_sample_0:r10w10p0,tddl_sample_0_bac:r10w0p0

    其中tddl_sample_0和tddl_sample_0_bak就是下一層需要的dbKey,后面r為讀權(quán)重,w為寫權(quán)重

    1. 2.       TAtomDataSource的配置

    atom ds中的配置分為了3部分(global,app,user),配置內(nèi)容全部為java的properties格式

    Global

    dataId組成規(guī)范: “com.taobao.tddl.atom.global.”+dbKey

    配置內(nèi)容:

    屬性key說(shuō)明
    ip數(shù)據(jù)實(shí)例的ip
    port數(shù)據(jù)實(shí)例的端口
    dbname數(shù)據(jù)庫(kù)名稱
    dbTypeMYSQL,ORACLE
    dbStatusRW,NA

    App

    dataId組成規(guī)范: “com.taobao.tddl.atom.app.”+appName+”.”+dbKey

    配置內(nèi)容:

    屬性key說(shuō)明
    username該應(yīng)用使用的用戶名
    oracleConTypeoci,thin,如果db為mysql,則不用理會(huì)
    minPoolSize最小連接池
    maxPoolSize最大連接池
    idleTimeout連接的最大空閑時(shí)間
    blockingTimeout等待連接的最大時(shí)間
    preparedStatementCacheSizeOracle專用
    writeRestrictTimes單位timeSliceInMillis寫限制,默認(rèn)空不限制
    readRestrictTimes單位timeSliceInMillis讀限制,默認(rèn)空不限制
    threadCountRestrict并發(fā)線程限制,默認(rèn)空不限制
    timeSliceInMillis限制的時(shí)間單位
    connectionProperties連接參數(shù)

    User

    dataId組成規(guī)范: “com.taobao.tddl.atom.passwd.”+dbName+”.”+dbType+”.”+userName

    配置內(nèi)容:

    屬性key說(shuō)明
    encPasswd密碼
    encKey密鑰
    posted @ 2013-11-10 11:13 hellxoul 閱讀(1737) | 評(píng)論 (0)編輯 收藏

    Facebook 正式宣布開源 Presto —— 數(shù)據(jù)查詢引擎,可對(duì)250PB以上的數(shù)據(jù)進(jìn)行快速地交互式分析。該項(xiàng)目始于 2012 年秋季開始開發(fā),目前該項(xiàng)目已經(jīng)在超過(guò) 1000 名 Facebook 雇員中使用,運(yùn)行超過(guò) 30000 個(gè)查詢,每日數(shù)據(jù)在 1PB 級(jí)別。Facebook 稱 Presto 的性能比諸如 Hive 和 Map*Reduce 要好上 10 倍有多。

    Presto 當(dāng)前支持 ANSI SQL 的大多數(shù)特效,包括聯(lián)合查詢、左右聯(lián)接、子查詢以及一些聚合和計(jì)算函數(shù);支持近似截然不同的計(jì)數(shù)(DISTINCT COUNT)等。

    你可以通過(guò)下面地址了解該項(xiàng)目詳情和獲取代碼:

    Documentation | Code

    原文鏈接:http://www.oschina.net/news/45706/facebook-open-sources-presto-homegrown-sql-query-engine

    posted @ 2013-11-07 23:15 hellxoul 閱讀(377) | 評(píng)論 (1)編輯 收藏
         摘要: 一款功能強(qiáng)大且實(shí)用的開發(fā)工具可以為開發(fā)者簡(jiǎn)化開發(fā)流程,提高工作效率,允許開發(fā)者在應(yīng)用開發(fā)本身投入更多的時(shí)間和精力,從而提高作品質(zhì)量。本文就為大家分享4款實(shí)用的Android應(yīng)用架構(gòu)工具。  閱讀全文
    posted @ 2013-11-07 23:09 hellxoul 閱讀(277) | 評(píng)論 (0)編輯 收藏
         摘要: 首先先介紹一款知名的網(wǎng)站壓力測(cè)試工具:webbench.Webbench能測(cè)試處在相同硬件上,不同服務(wù)的性能以及不同硬件上同一個(gè)服務(wù)的運(yùn)行狀況。webbench的標(biāo)準(zhǔn)測(cè)試可以向我們展示服務(wù)器的兩項(xiàng)內(nèi)容:每分鐘相應(yīng)請(qǐng)求數(shù)和每秒鐘傳輸數(shù)據(jù)量。webbench不但能具有便準(zhǔn)靜態(tài)頁(yè)面的測(cè)試能力,還能對(duì)動(dòng)態(tài)頁(yè)面(ASP,PHP,JAVA,CGI)進(jìn) 行測(cè)試的能力。還有就是他支持對(duì)含有SSL的安全網(wǎng)站例如電子...  閱讀全文
    posted @ 2013-11-07 23:06 hellxoul 閱讀(3521) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)自:http://elf8848.iteye.com/blog/455676

    如何修改Centos yum源

    --------------------------------------
    國(guó)內(nèi)yum源: 163和搜狐的yum源。
    本文章介紹的yum源支持的版本是CentOS 5系列,理論上支持RHEL5系列。

    更新方法如下:

    先進(jìn)入yum源配置目錄
    cd /etc/yum.repos.d

    備份系統(tǒng)自帶的yum源
    mv CentOS-Base.repo CentOS-Base.repo.save

    下載其他更快的yum源
    中科大的yum源:(現(xiàn)在打不開了 )
    wget http://centos.ustc.edu.cn/CentOS-Base.repo

    163的yum源:
    wget http://mirrors.163.com/.help/CentOS-Base-163.repo
    修改CentOS-Base.repo (不修改會(huì)報(bào)錯(cuò)),下載到本地把“$releasever”,替換成“5”

    sohu的yum源
    wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo

    更新玩yum源后,建議更新一下,使操作立即生效
    yum makecache




    RedHat5.6使用CentOS yum源更新的方法
    ================================================================================

    由于RedHat的yum在線更新是收費(fèi)的,我們的RedHat沒(méi)有注冊(cè),不能在線更新下載rpm包。
    需將RedHat的yum卸載后,重啟安裝Centos的yum,再配置其他yum源。



    一、確認(rèn)RedHat的版本
    cat /etc/redhat-release
    uname -m

    二、刪除redhat原有的yum源
    rpm -aq|grep yum|xargs rpm -e --nodeps

    三、下載CentOS的yum安裝包(163源) (可以在這里手工找rpm包:http://mirrors.163.com/centos/)
    32位系統(tǒng):
    wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
    wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-3.2.22-39.el5.centos.noarch.rpm
    wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
    64位系統(tǒng):
    wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm
    wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-3.2.22-39.el5.centos.noarch.rpm
    wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm

    還依賴python-iniparse-0.2.3-4.el5.noarch.rpm,
    但我的系統(tǒng)里已安裝了,是系統(tǒng)默認(rèn)Python2.4中自帶的。
    如果你的系統(tǒng)沒(méi)有安裝,請(qǐng)安裝吧。

    四、安裝yum軟件包
    32位系統(tǒng):
    rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
    rpm -ivh yum-3.2.22-39.el5.centos.noarch.rpm yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
    注意:最后兩個(gè)安裝包要放在一起同時(shí)安裝,否則會(huì)提示相互依賴,安裝失敗。

    64位系統(tǒng):
    rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm
    rpm -ivh yum-3.2.22-39.el5.centos.noarch.rpm yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
    注意:最后兩個(gè)安裝包要放在一起同時(shí)安裝,否則會(huì)提示相互依賴,安裝失敗。


    五、更改yum源 #我們使用網(wǎng)易的CentOS鏡像源
    cd /etc/yum.repos.d/
    vi CentOS6-Base-163.repo
    # CentOS-Base.repo
    #
    # The mirror system uses the connecting IP address of the client and the
    # update status of each mirror to pick mirrors that are updated to and
    # geographically close to the client. You should use this for CentOS updates
    # unless you are manually picking other mirrors.
    #
    # If the mirrorlist= does not work for you, as a fall back you can try the
    # remarked out baseurl= line instead.
    #
    #

    [base]
    name=CentOS-5 - Base - 163.com
    mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=os
    baseurl=http://mirrors.163.com/centos/5/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    #released updates
    [updates]
    name=CentOS-5 - Updates - 163.com
    mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=updates
    baseurl=http://mirrors.163.com/centos/5/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    #packages used/produced in the build but not released
    [addons]
    name=CentOS-5 - Addons - 163.com
    mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=addons
    baseurl=http://mirrors.163.com/centos/5/addons/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    #additional packages that may be useful
    [extras]
    name=CentOS-5 - Extras - 163.com
    mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=extras
    baseurl=http://mirrors.163.com/centos/5/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-5 - Plus - 163.com
    mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=centosplus
    baseurl=http://mirrors.163.com/centos/5/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-5 - Contrib - 163.com
    mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=contrib
    baseurl=http://mirrors.163.com/centos/5/contrib/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5



    六、清理
    yum clean all
    yum makecache

    如果報(bào)錯(cuò):imary.sqlite.bz2 from base: [Errno 256] No more mirrors to try.
    執(zhí)行:yum makecache







    七、更新

    cd /etc/pki/rpm-gpg
    wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

    yum update



    很長(zhǎng)時(shí)間的下載后,報(bào)錯(cuò):

    warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
    GPG key retrieval failed: [Errno 5] OSError: [Errno 2] No such file or directory: '/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5'
    這是因?yàn)椋褐付ǖ奈募?etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5在本地不存在導(dǎo)致的。

    解決:
    去官網(wǎng)http://mirror.centos.org/centos/下載相應(yīng)文件
    cd /etc/pki/rpm-gpg
    wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

    ================================================================================




    RedHat6.0使用CentOS yum源更新的方法
    --------------------------------------------------------------------

    由于RedHat的yum在線更新是收費(fèi)的,我們的RedHat沒(méi)有注冊(cè),不能在線更新下載rpm包。
    需將RedHat的yum卸載后,重啟安裝Centos的yum,再配置其他yum源。


    一、確認(rèn)RedHat的版本
    cat /etc/redhat-release
    uname -m

    二、刪除redhat原有的yum源
    rpm -aq|grep yum|xargs rpm -e --nodeps

    三、下載CentOS的yum安裝包(163源)
    32位系統(tǒng) :
    wget http://mirrors.163.com/centos/6/os/i386/Packages/yum-3.2.29-22.el6.centos.noarch.rpm
    wget http://mirrors.163.com/centos/6/os/i386/Packages/yum-metadata-parser-1.1.2-16.el6.i686.rpm
    wget http://mirrors.163.com/centos/6/os/i386/Packages/yum-plugin-fastestmirror-1.1.30-10.el6.noarch.rpm
    wget http://mirrors.163.com/centos/6/os/i386/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm

    四、安裝yum軟件包
    rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
    rpm -ivh yum-metadata-parser-1.1.2-16.el6.i686.rpm
    rpm -ivh yum-3.2.29-22.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.30-10.el6.noarch.rpm
    注意:最后兩個(gè)安裝包要放在一起同時(shí)安裝,否則會(huì)提示相互依賴,安裝失敗。

    五、更改yum源 #我們使用網(wǎng)易的CentOS鏡像源
    cd /etc/yum.repos.d/
    vi CentOS6-Base-163.repo
    # CentOS-Base.repo
    #
    # The mirror system uses the connecting IP address of the client and the
    # update status of each mirror to pick mirrors that are updated to and
    # geographically close to the client.&nbsp; You should use this for CentOS updates
    # unless you are manually picking other mirrors.
    #
    # If the mirrorlist= does not work for you, as a fall back you can try the
    # remarked out baseurl= line instead.
    #
    #

    [base]
    name=CentOS-6 - Base - 163.com
    baseurl=http://mirrors.163.com/centos/6/os/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=os
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

    #released updates
    [updates]
    name=CentOS-6 - Updates - 163.com
    baseurl=http://mirrors.163.com/centos/6/updates/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=updates
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

    #additional packages that may be useful
    [extras]
    name=CentOS-6 - Extras - 163.com
    baseurl=http://mirrors.163.com/centos/6/extras/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=extras
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-6 - Plus - 163.com
    baseurl=http://mirrors.163.com/centos/6/centosplus/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=centosplus
    gpgcheck=1
    enabled=0
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-6 - Contrib - 163.com
    baseurl=http://mirrors.163.com/centos/6/contrib/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=contrib
    gpgcheck=1
    enabled=0
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6


    六、清理
    yum clean all
    yum makecache

    如果報(bào)錯(cuò):imary.sqlite.bz2 from base: [Errno 256] No more mirrors to try.
    執(zhí)行:yum makecache

    至此,Redhat6可以使用CentOS的yum源在線安裝軟件了!
    posted @ 2013-10-23 13:39 hellxoul 閱讀(1009) | 評(píng)論 (0)編輯 收藏

    one js validation framework

    http://niceue.com/validator/demo/twitter-js.php?theme=yellow_right_effect

    posted @ 2013-10-10 10:37 hellxoul 閱讀(359) | 評(píng)論 (0)編輯 收藏
    Linux操作系統(tǒng):CentOS 6.3
    1:下載:當(dāng)前mysql版本到了5.6.10
      
     下載地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads
      
     選擇“Source Code”
      
    在此之前最好注冊(cè)一個(gè)Oracle賬號(hào)
      
     2:必要軟件包
    yum -y install  gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake 
    3:編譯安裝
    [root@server182 ~]# groupadd mysql 
    [root@server182 ~]# useradd -r -g mysql mysql 
    [root@server182 ~]# tar -zxvf mysql-5.6.10.tar.gz 
    [root@server182 ~]# cd mysql-5.6.10 
    [root@server182 mysql-5.6.10]# cmake . 
    [root@server182 mysql-5.6.10]# make && make install 
    -------------------------默認(rèn)情況下是安裝在/usr/local/mysql 
    [root@server182 ~]# chown -R mysql.mysql /usr/local/mysql 
    [root@server182 ~]# cd /usr/local/mysql/scripts 
    [root@server182 ~]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 
    [root@server182 ~]# cd /usr/local/mysql/support-files 
    [root@server182 support-files]# cp mysql.server /etc/rc.d/init.d/mysql 
    [root@server182 support-files]# cp my-default.cnf /etc/my.cnf 
    [root@server182 ~]# chkconfig -add mysql 
    [root@server182 ~]# chkconfig mysql on 
    [root@server182 ~]# service mysql start 
    Starting MySQL SUCCESS!  
    [root@server182 support-files]# mysql 
    Welcome to the MySQL monitor.  Commands end with ; or \g. 
    Your MySQL connection id is 1 
    Server version: 5.6.10 Source distribution 
    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 
      
    Oracle is a registered trademark of Oracle Corporation and/or its 
    affiliates. Other names may be trademarks of their respective 
    owners. 
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
     
    mysql>  
    mysql> status; 
    -------------- 
    mysql  Ver 14.14 Distrib 5.6.10, for Linux (i686) using  EditLine wrapper 
    Connection id:  1 
    Current database:  
    Current user:  root@localhost 
    SSL:    Not in use 
    Current pager:  stdout 
    Using outfile:  '' 
    Using delimiter:  ; 
    Server version:  5.6.10 Source distribution 
    Protocol version:  10 
    Connection:  Localhost via UNIX socket 
    Server characterset:  utf8 
    Db    characterset:  utf8 
    Client characterset:  utf8 
    Conn.  characterset:  utf8 
    UNIX socket:  /tmp/mysql.sock 
    Uptime:    5 min 45 sec 
      
    Threads: 1  Questions: 5  Slow queries: 0  Opens: 70  Flush tables: 1  Open tables: 63  Queries per second avg: 0.014 
    ------------- 
    mysql>  
    安裝完畢。
    原文鏈接:http://www.linuxidc.com/Linux/2013-02/79791.htm
    posted @ 2013-05-17 15:20 hellxoul 閱讀(260) | 評(píng)論 (0)編輯 收藏
    MySQL 5.6正式版發(fā)布了,相對(duì)于5.5版本作出了不少改進(jìn),其源碼安裝配置方式也有所變化,本文根據(jù)實(shí)際操作,不斷嘗試,精確還原了安裝的具體步驟。

    環(huán)境:CentOS 6.3/6.4 最小化缺省安裝,配置好網(wǎng)卡。

    安裝MySQL前,確認(rèn)Internet連接正常,以便下載安裝文件。

    先使用 yum -y update 指令升級(jí)系統(tǒng)到最新版本。

    本安裝將MySQL的數(shù)據(jù)文件與執(zhí)行文件分離,如果你打算設(shè)置到不同的路徑,注意修改對(duì)應(yīng)的執(zhí)行命令和數(shù)據(jù)庫(kù)初始化腳本。

    # 修改防火墻設(shè)置,打開3306端口
    vi /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

    # 重啟防火墻使新設(shè)置生效
    service iptables restart

    # 新增用戶組
    groupadd mysql

    # 新增用戶
    useradd mysql -g mysql

    # 新建數(shù)據(jù)庫(kù)執(zhí)行文件目錄
    mkdir -p /usr/local/mysql

    # 新建數(shù)據(jù)庫(kù)數(shù)據(jù)文件目錄
    mkdir -p /db/mysql/data

    # 編輯PATH搜索路徑
    vi /etc/profile
    Append these 2 lines to the end of the file:
    PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
    export PATH

    # 生效PATH搜索路徑
    source /etc/profile

    # 編輯hosts文件,加入本機(jī)IP和主機(jī)名
    vi /etc/hosts
    192.168.211.100      centhost.centdomain

    # 安裝編譯源碼所需的工具和庫(kù)
    yum -y install wget gcc-c++ ncurses-devel cmake make perl

    # 進(jìn)入源碼壓縮包下載目錄
    cd /usr/local/src

    # 下載源碼壓縮包,下載包34M大小,有點(diǎn)慢,等吧。
    wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz/from/http://cdn.mysql.com/

    # 解壓縮源碼包
    tar -zxvf mysql-5.6.10.tar.gz

    # 進(jìn)入解壓縮源碼目錄
    cd mysql-5.6.10

    # 從mysql5.5起,mysql源碼安裝開始使用cmake了,執(zhí)行源碼編譯配置腳本。

    cmake \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_MEMORY_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 \
    -DENABLED_LOCAL_INFILE=1 \
    -DMYSQL_DATADIR=/db/mysql/data \
    -DMYSQL_USER=mysql \
    -DMYSQL_TCP_PORT=3306

    # 編譯源碼,這一步時(shí)間會(huì)較長(zhǎng),耐心等待。
    make

    # 安裝
    make install

    # 清除安裝臨時(shí)文件
    make clean

    # 修改目錄擁有者
    chown -R mysql:mysql /usr/local/mysql
    chown -R mysql:mysql /db/mysql/data

    # 進(jìn)入安裝路徑
    cd /usr/local/mysql

    # 執(zhí)行初始化配置腳本,創(chuàng)建系統(tǒng)自帶的數(shù)據(jù)庫(kù)和表。
    scripts/mysql_install_db --user=mysql --datadir=/db/mysql/data
    初始化腳本在 /usr/local/mysql/my.cnf 生成了配置文件。需要更改該配置文件的所有者:
    chown -R mysql:mysql /usr/local/mysql
    多說(shuō)兩句:在啟動(dòng)MySQL服務(wù)時(shí),會(huì)按照一定次序搜索my.cnf,先在/etc目錄下找,找不到則會(huì)搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認(rèn)位置!注意:在CentOS 6.4版操作系統(tǒng)的最小安裝完成后,在/etc目錄下會(huì)存在一個(gè)my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會(huì)干擾源碼安裝的MySQL的正確配置,造成無(wú)法啟動(dòng)。

    # 復(fù)制服務(wù)啟動(dòng)腳本
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

    # 啟動(dòng)MySQL服務(wù)
    service mysql start

    # 設(shè)置開機(jī)自動(dòng)啟動(dòng)服務(wù)
    chkconfig mysql on

    # 修改MySQL用戶root的密碼
    mysql -u root

    mysql>use mysql;
    mysql>GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";
    mysql>update user set Password = password('123456') where User='root';
    mysql>flush privileges;
    mysql>exit;

    # 可選:運(yùn)行安全設(shè)置腳本,修改MySQL用戶root(不是系統(tǒng)的root!)的密碼,禁止root遠(yuǎn)程連接(防止破解密碼),移除test數(shù)據(jù)庫(kù)和匿名用戶,強(qiáng)烈建議生產(chǎn)服務(wù)器使用:

    /usr/local/mysql/bin/mysql_secure_installation

     

    后記:

    2013年3月18日更新:
    如果要使Windows平臺(tái)下的MySQL和Linux平臺(tái)下的MySQL協(xié)同工作,你需要設(shè)置Linux平臺(tái)下的全局變量lower_case_table_names=1,強(qiáng)制將數(shù)據(jù)表名稱轉(zhuǎn)換為小寫(大小寫不敏感)。參考我另一篇博文:http://www.cnblogs.com/jlzhou/archive/2013/03/18/2966106.html

     

     
    >>>>> 版權(quán)沒(méi)有 >>>>> 歡迎轉(zhuǎn)載 >>>>> 原文地址 >>>>> http://www.cnblogs.com/jlzhou >>>>> 雄鷹在雞窩里長(zhǎng)大,就會(huì)失去飛翔的本領(lǐng),野狼在羊群里成長(zhǎng),也會(huì)愛(ài)上羊而喪失狼性。人生的奧妙就在于與人相處。生活的美好則在于送人玫瑰。和聰明的人在一起,你才會(huì)更加睿智。和優(yōu)秀的人在一起,你才會(huì)出類拔萃。所以,你是誰(shuí)并不重要,重要的是,你和誰(shuí)在一起。
    posted @ 2013-05-17 15:18 hellxoul 閱讀(282) | 評(píng)論 (0)編輯 收藏
         摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->   1 <project xmlns="http://maven.apache.org/POM/4.0.0 " &...  閱讀全文
    posted @ 2013-05-16 11:26 hellxoul 閱讀(14005) | 評(píng)論 (0)編輯 收藏
    生成javadoc時(shí),亂碼問(wèn)題要注意兩個(gè)參數(shù)的設(shè)置

    -encoding utf-8 -charset utf-8

    前面的是文件編碼,后面的是生成的javadoc的編碼



    例如用IntelliJ IDEA 6.0.1 生成javadoc時(shí),在"Tools->Gerenate JavaDoc"面版的

    "Other command line arguments:"欄里輸入"-encoding utf-8 -charset utf-8",

    就是以u(píng)tf-8編碼讀取文件和生成javadoc
    posted @ 2013-05-01 12:24 hellxoul 閱讀(505) | 評(píng)論 (0)編輯 收藏
    CREATE TABLE `config_info` (
     `id` 
    BIGINT(64) UNSIGNED NOT NULL AUTO_INCREMENT,
     `data_id` 
    VARCHAR(255NOT NULL DEFAULT '',
     `group_id` 
    VARCHAR(128NOT NULL DEFAULT '',
     `content` LONGTEXT 
    NOT NULL,
     `md5` 
    VARCHAR(32NOT NULL DEFAULT '',
     `gmt_create` 
    DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00',
     `gmt_modified` 
    DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00',
     
    PRIMARY KEY (`id`),
     
    UNIQUE KEY `uk_config_datagroup` (`data_id`,`group_id`)
     );
    posted @ 2013-04-25 14:43 hellxoul 閱讀(334) | 評(píng)論 (0)編輯 收藏
    通過(guò)java client鏈接server@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
    1. 通過(guò)設(shè)置參數(shù)
    1 ConnectionFactory factory = new ConnectionFactory();
    2 factory.setUsername(userName);
    3 factory.setPassword(password);
    4 factory.setVirtualHost(virtualHost);
    5 factory.setHost(hostName);
    6 factory.setPort(portNumber);
    7 Connection conn = factory.newConnection();
    2.通過(guò)
     AMQP URIs
    1 ConnectionFactory factory = new ConnectionFactory();
    2 factory.setUri("amqp://userName:password@hostName:portNumber/virtualHost");
    3 Connection conn = factory.newConnection();
    3.多地址
    1 Address[] addrArr = new Address[]{ new Address(hostname1, portnumber1)
    2                                  , new Address(hostname2, portnumber2)};
    3 Connection conn = factory.newConnection(addrArr);





    posted @ 2013-04-11 10:27 hellxoul 閱讀(371) | 評(píng)論 (0)編輯 收藏
    在CentOS下,源碼安裝Erlang: 

    下載Erlang源碼 

    安裝:官網(wǎng)地址,http://www.erlang.org 

    Java代碼  
    # cd /opt/  
    # wget http://www.erlang.org/download/otp_src_R15B01.tar.gz  


    解壓: 
    Java代碼  
    # tar -zxvf otp_src_R15B01.tar.gz  
    # cd otp_src_R15B01  


    安裝依賴: 
    Java代碼  
    # yum install build-essential m4  
    # yum install openssl  
    # yum install openssl-devel  
    # yum install unixODBC  
    # yum install unixODBC-devel  
    # yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel  


    配置configure 
    Java代碼  
    # ./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll  
      
    make  
      
    make install  


    完成之后,設(shè)置環(huán)境變量 

    Java代碼  
    vim /etc/profile   
      
    ERL_HOME=/usr/local/erlang  
    PATH=$ERL_HOME/bin:$PATH  
    export ERL_HOME PATH  


    完成后保存 

    Java代碼  
    source /etc/profile   


    讓環(huán)境變量立即生效 

    然后輸入erl,出現(xiàn)erlang shell,如下: 
    Java代碼  
    Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]  
      
    Eshell V5.9.1  (abort with ^G)  
    1>  


    hipe:支持Erlang編譯成本地代碼。好處:提高Erlang虛擬機(jī)執(zhí)行代碼性能。 

    參考文獻(xiàn): 
    [1] http://jinghong.iteye.com/blog/1075165 
    [2] http://my.oschina.net/hanyu363/blog/29727 
    [3] http://www.linuxidc.com/Linux/2011-07/39156.htm

    rabbitmq啟動(dòng):

        sbin/rabbitmq-server

        rabbitmq-server -detached

    停止 rabbitmqctl stop 
    查看狀態(tài):rabbitmqctl status

    插件安裝rabbitmq-plugins enable rabbitmq_management 監(jiān)控使用
    http://www.rabbitmq.com/management.html




    @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
    posted @ 2013-04-09 15:20 hellxoul 閱讀(259) | 評(píng)論 (0)編輯 收藏
        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文
    posted @ 2013-04-02 14:28 hellxoul| 編輯 收藏
    1.下載MySQL
    我下載的版本:mysql-5.5.22.tar.gz

    2.安裝之前先卸載CentOS自帶的MySQL
    [root@localhost ~]# yum remove mysql

    3.編譯安裝Cmake
    下載cmake源碼包:http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz

    從共享目錄移至usr目錄
    [root@localhost ~]# mv /mnt/hgfs/Share-CentOS/cmake-2.8.4.tar.gz /usr/cmake-2.8.4.tar.gz
    [root@localhost ~]# cd /usr

    解壓并安裝cmake
    [root@localhost usr]# tar xzvf cmake-2.8.4.tar.gz
    [root@localhost usr]# cd cmake-2.8.4
    [root@localhost cmake-2.8.4]# ./bootstrap

    ---------------------------------------------
    CMake 2.8.4, Copyright 2000-2009 Kitware, Inc.
    ---------------------------------------------
    Error when bootstrapping CMake:
    Cannot find appropriate C compiler on this system.
    Please specify one using environment variable CC.
    See cmake_bootstrap.log for compilers attempted.

    ---------------------------------------------
    Log of errors: /usr/local/src/cmake-2.8.4/Bootstrap.cmk/cmake_bootstrap.log
    ---------------------------------------------
    報(bào)錯(cuò):缺少C的編譯器
    解決辦法:安裝gcc編譯器
    [root@localhost ~]# yum install gcc

    繼續(xù)安裝Cmake
    [root@localhost cmake-2.8.4]# ./bootstrap

    ---------------------------------------------
    CMake 2.8.4, Copyright 2000-2009 Kitware, Inc.
    C compiler on this system is: cc
    ---------------------------------------------
    Error when bootstrapping CMake:
    Cannot find appropriate C++ compiler on this system.
    Please specify one using environment variable CXX.
    See cmake_bootstrap.log for compilers attempted.
    ---------------------------------------------
    Log of errors: /usr/local/src/cmake-2.8.4/Bootstrap.cmk/cmake_bootstrap.log
    ---------------------------------------------
    報(bào)錯(cuò):缺少C++編譯器
    解決辦法:安裝gcc-c++編譯器
    [root@localhost ~]# yum install gcc-c++

    再次安裝
    [root@localhost cmake-2.8.4]# ./bootstrap
    沒(méi)有報(bào)錯(cuò),編譯安裝
    [root@localhost cmake-2.8.4]# gmake
    [root@localhost cmake-2.8.4]# gmake install

    4.正式開始安裝MySQL
    添加MySQL用戶和用戶組
    [root@localhost ~]# groupadd mysql
    [root@localhost ~]# useradd -g mysql mysql

    MySQL源碼包從共享文件夾移至/usr并解壓
    [root@localhost ~]mv /mnt/hgfs/Share-CentOS/mysql-5.5.22.tar.gz /usr/mysql-5.5.22.tar.gz
    [root@localhost usr]# tar xzvf mysql-5.5.22.tar.gz
    [root@localhost usr]# cd mysql-5.5.22

    Cmake運(yùn)行
    [root@localhost mysql-5.5.22]# cmake .

    開始編譯安裝
    [root@localhost mysql-5.5.22]# make && make install

    進(jìn)入安裝目錄,將程序二進(jìn)制的所有權(quán)改為root,數(shù)據(jù)目錄的說(shuō)有權(quán)改為mysql用戶,更新授權(quán)表
    [root@localhost mysql-5.5.22]# cd /usr/local/mysql/
    [root@localhost mysql]# chown -R root .
    [root@localhost mysql]# chown -R mysql .
    [root@localhost mysql]# chgrp -R mysql .
    [root@localhost mysql]# scripts/mysql_install_db --user=mysql

    安全啟動(dòng)MySQL(默認(rèn)密碼為空)
    [root@localhost mysql]#./bin/mysqld_safe --user=mysql&

    報(bào)錯(cuò):

    120908 00:16:25 mysqld_safe Logging to '/usr/local/mysql/data/CentOS.err'.
    120908 00:16:26 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

    解決方法:
    [root@CentOS ~]# cd /usr/local/mysql/data

    [root@CentOS data]# ls -l
    總用量 29744
    -rw-rw---- 1 mysql root 1585 9月 8 00:16 CentOS.err
    -rw-rw---- 1 mysql mysql 6 9月 8 00:16 CentOS.pid
    -rw-rw---- 1 mysql mysql 18874368 9月 8 00:16 ibdata1
    -rw-rw---- 1 mysql mysql 5242880 9月 8 00:16 ib_logfile0
    -rw-rw---- 1 mysql mysql 5242880 9月 8 00:16 ib_logfile1
    drwxr-xr-x 2 mysql mysql 4096 9月 8 00:14 mysql
    -rw-rw---- 1 mysql mysql 27293 9月 8 00:14 mysql-bin.000001
    -rw-rw---- 1 mysql mysql 1031892 9月 8 00:14 mysql-bin.000002
    -rw-rw---- 1 mysql mysql 107 9月 8 00:16 mysql-bin.000003
    -rw-rw---- 1 mysql mysql 57 9月 8 00:16 mysql-bin.index
    drwx------ 2 mysql mysql 4096 9月 8 00:14 performance_schema
    drwxr-xr-x 2 mysql mysql 4096 9月 8 00:08 test
    [root@CentOS data]# chgrp -R mysql CentOS.err
    [root@CentOS data]# ls -l
    總用量 29736
    -rw-rw---- 1 mysql mysql 1585 9月 8 00:16 CentOS.err
    -rw-rw---- 1 mysql mysql 6 9月 8 00:16 CentOS.pid
    -rw-rw---- 1 mysql mysql 18874368 9月 8 00:16 ibdata1
    -rw-rw---- 1 mysql mysql 5242880 9月 8 00:16 ib_logfile0
    -rw-rw---- 1 mysql mysql 5242880 9月 8 00:16 ib_logfile1
    drwxr-xr-x 2 mysql mysql 4096 9月 8 00:14 mysql
    -rw-rw---- 1 mysql mysql 27293 9月 8 00:14 mysql-bin.000001
    -rw-rw---- 1 mysql mysql 1031892 9月 8 00:14 mysql-bin.000002
    -rw-rw---- 1 mysql mysql 107 9月 8 00:16 mysql-bin.000003
    -rw-rw---- 1 mysql mysql 57 9月 8 00:16 mysql-bin.index
    drwx------ 2 mysql mysql 4096 9月 8 00:14 performance_schema
    drwxr-xr-x 2 mysql mysql 4096 9月 8 00:08 test

    連接本機(jī)MySQL
    [root@localhost mysql]#mysql –u root –p
    提示輸入password,默認(rèn)為空,按Enter即可

    斷開連接
    mysql>exit;

    為root賬戶設(shè)置密碼
    [root@localhost ~]# cd /usr/local/mysql/bin
    [root@localhost mysql]# ./bin/mysqladmin -u root password 123456
    Enter Password:123456

    設(shè)置選項(xiàng)文件,將配置文件拷貝到/etc下
    [root@localhost mysql]# cp support-files/my-medium.cnf /etc/mysql.cnf

    設(shè)置開機(jī)自啟動(dòng)
    [root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysql
    [root@localhost mysql]# chmod +x /etc/init.d/mysql

    [root@localhost mysql]# chkconfig mysql on
     


    通過(guò)服務(wù)來(lái)啟動(dòng)和關(guān)閉Mysql
    [root@localhost ~]# service mysql start
    [root@localhost ~]# service mysql stop

    5.安裝設(shè)置完畢,之后使用只需啟動(dòng)-連接-斷開-關(guān)閉,命令如下:
    [root@CentOS mysql]# service mysql start
    Starting MySQL.. [確定]
    [root@CentOS mysql]# mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 5.5.22 Source distribution

    Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | test |
    +--------------------+
    4 rows in set (0.07 sec)

    mysql> exit;
    Bye
    [root@CentOS mysql]# service mysql stop
    Shutting down MySQL. [確定]

    6.其它:
    查看進(jìn)程命令 ps –ef|grep mysqld
    kill進(jìn)程命令 kill –9 進(jìn)程號(hào)
    posted @ 2013-02-24 00:31 hellxoul 閱讀(5504) | 評(píng)論 (1)編輯 收藏
    主站蜘蛛池模板: 中文字幕无码不卡免费视频| 国产精品亚洲片在线| 亚洲私人无码综合久久网| av大片在线无码免费| 91亚洲国产在人线播放午夜| 无码精品一区二区三区免费视频 | 久久丫精品国产亚洲av| 国产精品免费观看调教网| 国产亚洲精AA在线观看SEE| 国产午夜成人免费看片无遮挡 | 精品在线视频免费| 全黄a免费一级毛片人人爱| 处破女第一次亚洲18分钟| 免费在线观看毛片| 一级毛片免费毛片毛片| 不卡精品国产_亚洲人成在线| jizz免费在线观看| 亚洲国产另类久久久精品小说| 91视频精品全国免费观看| 亚洲AV无码专区国产乱码电影 | 亚洲性色成人av天堂| 免费精品国产自产拍在线观看图片 | 亚洲AV本道一区二区三区四区| 四虎影视在线影院在线观看免费视频| 亚洲人成网www| h视频在线观看免费完整版| 亚洲av无码国产综合专区| 免费鲁丝片一级在线观看| 国产AV无码专区亚洲AV琪琪| 亚洲精品97久久中文字幕无码| 皇色在线免费视频| 久久久久久亚洲精品中文字幕| 蜜桃AV无码免费看永久| 亚洲卡一卡二卡乱码新区| 国产精品99久久免费| 国产黄在线播放免费观看| 亚洲国产人成网站在线电影动漫| 1000部拍拍拍18勿入免费视频软件| 亚洲中文字幕无码mv| 亚洲а∨天堂久久精品| a视频在线免费观看|