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

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

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

    軟件是對(duì)質(zhì)量的不懈追求

    2010年5月12日 #

    linux du 查看文件夾占用空間


    du -sh *

    posted @ 2011-04-15 08:39 BlakeSu 閱讀(281) | 評(píng)論 (0)編輯 收藏

    Building Standalone Application with Maven2

    If you are building standalone application in Java, Maven is your friend when packing your application,
    There are two way to let Maven package your application, either as a single jar with all your dependencies jar.


     <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
       <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
       </descriptorRefs>
      </configuration>
     </plugin>



    One advantage if you choose to do this way is if you need to sign your application jar.
    This is needed if you are building a Java Web Start client and you need more access than connecting back to the server.
    To read more about have Maven signing your jar read http://maven.apache.org/plugins/maven-jar-plugin/usage.html.
    But if you choose to go this way, make sure that all license agreement are shipped with your one single jar.

    Another way is to let Maven package your source code only and then referring the dependent jar file from the MANIFEST file.


     <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
       <archive>
        <manifest>
         <addClasspath>true</addClasspath>
         <mainClass>se.msc.adapter.Main</mainClass>
         <classpathPrefix>lib/</classpathPrefix>
        </manifest>
       </archive>
      </configuration>
     </plugin>

    posted @ 2011-02-24 13:03 BlakeSu 閱讀(330) | 評(píng)論 (0)編輯 收藏

    eclipse 終于有了列編輯功能

    eclipse 3.5之后終于有了列編輯,快捷鍵是alt+shift+a,再次按此快捷鍵返回常規(guī)編輯狀態(tài)。


    posted @ 2010-10-15 11:33 BlakeSu 閱讀(1484) | 評(píng)論 (0)編輯 收藏

    LineNumberReader 指定文件編碼


    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.LineNumberReader;


    public class Main {
        
        
    public static void main(String[] args) throws IOException {

            InputStreamReader isr 
    = new InputStreamReader(new FileInputStream("15370720.pdf4"), "utf-16");
            LineNumberReader lnr
    =new LineNumberReader(isr);
            String line 
    = null;
            
    while((line=lnr.readLine())!=null){  
               System.out.println(lnr.getLineNumber()
    +"\t"+line);
            }
       }
    }

    posted @ 2010-08-05 09:13 BlakeSu 閱讀(1050) | 評(píng)論 (0)編輯 收藏

    Class.getResourceAsStream 和 ClassLoader.getResourceAsStream

    兩個(gè)方法的區(qū)別是資源的定義不同, 一個(gè)主要用于相對(duì)與一個(gè)object取資源,而另一個(gè)用于取相對(duì)于classpath的
    資源,用的是絕對(duì)路徑。

    在使用Class.getResourceAsStream 時(shí), 資源路徑有兩種方式, 一種以 / 開頭,則這樣的路徑是指定絕對(duì)
    路徑, 如果不以 / 開頭, 則路徑是相對(duì)與這個(gè)class所在的包的。

    在使用ClassLoader.getResourceAsStream時(shí), 路徑直接使用相對(duì)于classpath的絕對(duì)路徑。

    舉例,下面的三個(gè)語(yǔ)句,實(shí)際結(jié)果是一樣的:
       com.explorers.Test.class.getResourceAsStream("abc.jpg")
    = com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
    = ClassLoader.getResourceAsStream("com/explorers/abc.jpg")

    posted @ 2010-07-28 16:31 BlakeSu 閱讀(295) | 評(píng)論 (0)編輯 收藏

    Standalone Java CAS Client

    There's a variety of clients for CAS. The Java-based clients (JA-SIG, Yale, see JA-SIG website) typically handle the browser-based client interaction with CAS very well through ServletFilter implementations.

    Now what about programmatic authentication, i.e. achieving authentication through non-browser based applications? There exists a CAS .NET client but I did not manage to find the appropriate Java implementation. So here goes - it is based on the Apache HttpClient.

    In case I missed any existing implementation achieving the same purpose, let's look at the bright side: at least now I understand the CAS protocol :-)

    My CAS client works within any application. It uses the HttpClient and behaves like a browser client as CAS requires cookie support.

    Here's the code:
    import org.apache.commons.httpclient.Header;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpMethod;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.log4j.Logger;

    /**
    * The CasClient allows users to programmatically login
    * to CAS protected services based on the CAS 2 protocol.
    * This client behaves like a browser-client in terms of
    * cookie handling.<br>
    *
    @author Mathias Richter
    */
    public class CasClient
    {
      
       
    public static Logger LOG = Logger.getLogger( CasClient.class  );

       
    public static final String LOGIN_URL_PART = "login";
       
    public static final String SERVICE_VALIDATE_URL_PART = "serviceValidate";
       
    public static final String TICKET_BEGIN = "ticket=";
       
    private static final String LT_BEGIN = "name="lt" value="";
       public static final String CAS_USER_BEGIN = "<cas:user>";
       
    public static final String CAS_USER_END = "</cas:user>";
      
       
    private HttpClient fClient;
       
    private String fCasUrl;
      
       
    /**
        * Construct a new CasClient.
        *
        * 
    @param casUrl The base URL of the CAS service to be used.
        
    */
       
    public CasClient( String casBaseUrl )
       {
           
    thisnew HttpClient(), casBaseUrl );
       }
      
       
    /**
        * Construct a new CasClient which uses the specified HttpClient
        * for its HTTP calls.
        *
        * 
    @param client
        * 
    @param casBaseUrl
        
    */
       
    public CasClient( HttpClient client, String casBaseUrl )
       {
           fClient 
    = client;
           fCasUrl 
    = casBaseUrl;
       }
      
       
    /**
        * Authenticate the specified username with the specified password.
        * This will not yield any ticket, as no service is authenticated
        * against. This wil just set the CAS cookie in this client upon
        * successful authentication.
        *
        * 
    @param username
        * 
    @param password
        
    */
       
    public void authenticate( String username, String password )
       {
           authenticate( 
    null, username, password );
       }
      
       
    /**
        * Validate the specified service ticket against the specified service.
        * If the ticket is valid, this will yield the clear text user name
        * of the autenticated user.<br>
        * Note that each service ticket issued by CAS can be used exactly once
        * to validate.
        *
        * 
    @param serviceUrl
        * 
    @param serviceTicket
        *
        * 
    @return Clear text username of the authenticated user.
        
    */
       
    public String validate( String serviceUrl, String serviceTicket )
       {
           String result 
    = null;
           PostMethod method 
    = new PostMethod( fCasUrl + SERVICE_VALIDATE_URL_PART );
           method.setParameter( 
    "service", serviceUrl );
           method.setParameter( 
    "ticket", serviceTicket );
           
    try
           {
               
    int statusCode = fClient.executeMethod(method);
               
    if (statusCode != HttpStatus.SC_OK)
               {
                   LOG.error( 
    "Could not validate: " + method.getStatusLine() );
                   method.releaseConnection();
               } 
    else
               {   
                   result 
    = extractUser( new String( method.getResponseBody() ) );
               }
           } 
    catch ( Exception x )
           {
               LOG.error( 
    "Could not validate: " + x.toString () );
               x.printStackTrace();
           }
           method.releaseConnection();
           
    return result;
       }
      
       
    /**
        * Authenticate the specified user with the specified password against the
        * specified service.
        *
        * 
    @param serviceUrl May be null. If a url is specified, the authentication will happen against this service, yielding a service ticket which can be validated.
        * 
    @param username
        * 
    @param password
        * 
    @return A valid service ticket, if and only if the specified service URL is not null.
        
    */
       
    public String authenticate( String serviceUrl, String username, String password )
       {
           String lt 
    = getLt( serviceUrl );
           
    if ( lt == null )
           {
               LOG.error( 
    "Cannot retrieve LT from CAS. Aborting authentication for '" + username + "'" );
               
    return null;
           }
           String result 
    = null;
           PostMethod method 
    = new PostMethod( fCasUrl + LOGIN_URL_PART );
           
    if ( serviceUrl != null ) // optional
               method.setParameter( "service", serviceUrl );
           method.setParameter( 
    "_eventId""submit" );
           method.setParameter(
    "username", username );
           method.setParameter(
    "password", password );
           method.setParameter(
    "lt", lt );
           method.setParameter( 
    "gateway""true" );
           
    try
           {
               fClient.executeMethod(method);
               
    if ( serviceUrl == null )
               {
                   
    if ( extractLt( new String( method.getResponseBody() ) ) != null ) // if CAS does not return a login page with an LT authentication was successful
                   {
                       LOG.error( 
    "Authentication for '" +  username + "' unsuccessful" );
                       
    if ( LOG.isDebugEnabled() )
                           LOG.debug( 
    "Authentication for '" + username + "' unsuccessful." );
                   } 
    else
                   {
                       
    if ( LOG.isDebugEnabled() )
                           LOG.debug( 
    "Authentication for '" + username + "' unsuccessful." );
                   }
               } 
    else
               {
                   Header h 
    = method.getResponseHeader( "Location" );
                   
    if ( h != null )
                       result 
    = extractServiceTicket( h.getValue() );
                   
    if ( result == null )
                       LOG.error( 
    "Authentication for '" + username + "' unsuccessful." );
               }
           } 
    catch ( Exception x )
           {
               LOG.error( 
    "Could not authenticate'" + username + "':" + x.toString () );
           }
           method.releaseConnection();
           
    return result;
       }
      
       
    /**
        * Helper method to extract the user name from a "service validate" call to CAS.
        *
        * 
    @param data Response data.
        * 
    @return The clear text username, if it could be extracted, null otherwise.
        
    */
       
    protected String extractUser( String data )
       {
           String user 
    = null;
           
    int start = data.indexOf( CAS_USER_BEGIN  );
           
    if ( start >= 0 )
           {
               start 
    += CAS_USER_BEGIN.length();
               
    int end = data.indexOf( CAS_USER_END );
               
    if ( end > start )
                   user 
    = data.substring( start, end );
               
    else
                   LOG.warn( 
    "Could not extract username from CAS validation response. Raw data is: '" + data + "'" );
           } 
    else
           {
               LOG.warn( 
    "Could not extract username from CAS validation response. Raw data is: '" + data + "'" );
           }
           
    return user;
       }
      
       
    /**
        * Helper method to extract the service ticket from a login call to CAS.
        *
        * 
    @param data Response data.
        * 
    @return The service ticket, if it could be extracted, null otherwise.
        
    */
       
    protected String extractServiceTicket( String data )
       {
           String serviceTicket 
    = null;
           
    int start = data.indexOf( TICKET_BEGIN  );
           
    if ( start > 0 )
           {
               start 
    += TICKET_BEGIN.length();
               serviceTicket 
    = data.substring( start );
           }
           
    return serviceTicket;
       }
      
       
    /**
        * Helper method to extract the LT from a login form from CAS.
        *
        * 
    @param data Response data.
        * 
    @return The LT, if it could be extracted, null otherwise.
        
    */
       
    protected String extractLt( String data )
       {
           String token 
    = null;
           
    int start = data.indexOf( LT_BEGIN  );
           
    if ( start < 0 )
           {
               LOG.error( 
    "Could not obtain LT token from CAS: LT Token not found in response." );
           } 
    else
           {
               start 
    += LT_BEGIN.length();
               
    int end = data.indexOf( """, start );
               token = data.substring( start, end );
           }       
           
    return token;
       }
      
       
    /**
        * This method requests the original login form from CAS.
        * This form contains an LT, an initial token that must be
        * presented to CAS upon sending it an authentication request
        * with credentials.<br>
        * If a service URL is provided (which is optional), this method
        * will post the URL such that CAS authenticates against the
        * specified service when a subsequent authentication request is
        * sent.
        *
        * 
    @param serviceUrl
        * 
    @return The LT token if it could be extracted from the CAS response.
        
    */
       
    protected String getLt( String serviceUrl )
       {
           String lt 
    = null;
           HttpMethod method 
    = null;
           
    if ( serviceUrl == null )
               method 
    = new GetMethod( fCasUrl + LOGIN_URL_PART );
           
    else
           {
               method 
    = new PostMethod( fCasUrl + LOGIN_URL_PART );
               ( ( PostMethod ) method ).setParameter( 
    "service", serviceUrl );
           }
           
    try
           {
               
    int statusCode = fClient.executeMethod(method);
               
    if (statusCode != HttpStatus.SC_OK)
               {
                   LOG.error( 
    "Could not obtain LT token from CAS: " + method.getStatusLine() );
                   method.releaseConnection();
               } 
    else
               {
                   Object o 
    = method.getResponseHeaders() ;
                   
    return extractLt( new String( method.getResponseBody() ) );
               }
           } 
    catch ( Exception x )
           {
               LOG.error( 
    "Could not obtain LT token from CAS: " + x.toString () );
           }
           method.releaseConnection();
           
    return lt;
       }
      
    }

    posted @ 2010-07-15 17:59 BlakeSu 閱讀(416) | 評(píng)論 (0)編輯 收藏

    java取文件換行符

    System.getProperty("line.separator")

    posted @ 2010-06-30 15:45 BlakeSu 閱讀(312) | 評(píng)論 (0)編輯 收藏

    禁止瀏覽器緩存

    html
      <meta http-equiv="pragma" content="no-cache">
      
    <meta http-equiv="cache-control" content="no-cache">
      
    <meta http-equiv="expires" content="0">


    servlet
              response.setHeader("pragma","no-cache");
              response.setHeader(
    "cache-control","no-cache");
              response.setDateHeader(
    "expires"0);


    posted @ 2010-06-25 09:06 BlakeSu 閱讀(254) | 評(píng)論 (0)編輯 收藏

    frame 中跨域訪問(wèn)cookie(java)

    response.addHeader("P3P","CP=CAO PSA OUR");

    posted @ 2010-06-25 09:04 BlakeSu 閱讀(416) | 評(píng)論 (0)編輯 收藏

    vim的復(fù)制粘貼小結(jié)

    原文地址 http://lsong17.spaces.live.com/blog/cns!556C21919D77FB59!603.trak


    用vim這么久 了,始終也不知道怎么在vim中使用系統(tǒng)粘貼板,通常要在網(wǎng)上復(fù)制一段代碼都是先gedit打開文件,中鍵粘貼后關(guān)閉,然后再用vim打開編輯,真的不 爽;上次論壇上有人問(wèn)到了怎么在vim中使用系統(tǒng)粘貼板,印象里回復(fù)很多,有好幾頁(yè)的回復(fù)卻沒有解決問(wèn)題,今天實(shí)在受不了了又在網(wǎng)上找辦法,竟意外地找到 了,貼出來(lái)分享一下。

    如果只是想使用系統(tǒng)粘貼板的話直接在輸入模式按Shift+Inset就可以了,下面講一下vim的粘貼板的基礎(chǔ)知識(shí),有興趣的可以看看, 應(yīng)該會(huì)有所收獲的。
    vim幫助文檔里與粘貼板有關(guān)的內(nèi)容如下:

    1. vim有12個(gè)粘貼板,分別是0、1、2、...、9、a、“、+;用:reg命令可以查看各個(gè)粘貼板里的內(nèi)容。在vim中簡(jiǎn)單用y只是復(fù)制到 “(雙引號(hào))粘貼板里,同樣用p粘貼的也是這個(gè)粘貼板里的內(nèi)容;

    2. 要將vim的內(nèi)容復(fù)制到某個(gè)粘貼板,需要退出編輯模式,進(jìn)入正常模式后,選擇要復(fù)制的內(nèi)容,然后按"Ny完成復(fù)制,其中N為粘 貼板號(hào)(注意是按一下雙引號(hào)然后按粘貼板號(hào)最后按y),例如要把內(nèi)容復(fù)制到粘貼板a,選中內(nèi)容后按"ay就可以了,有兩點(diǎn)需要說(shuō)明一下:
      • “號(hào)粘貼板(臨時(shí)粘貼板)比較特殊,直接按y就復(fù)制到這個(gè)粘貼板中了,直接按p就粘貼這個(gè)粘貼板中的內(nèi)容;
      • +號(hào)粘貼板是系統(tǒng)粘貼板,用"+y將內(nèi)容復(fù)制到該粘貼板后可以使用Ctrl+V將其粘貼到其他文檔(如firefox、gedit) 中,同理,要把在其他地方用Ctrl+C或右鍵復(fù)制的內(nèi)容復(fù)制到vim中,需要在正常模式下按"+p;

    3. 要將vim某個(gè)粘貼板里的內(nèi)容粘貼進(jìn)來(lái),需要退出編輯模式,在正常模式按"Np,其中N為粘貼板號(hào),如上所述,可以按"5p將 5號(hào)粘貼板里的內(nèi)容粘貼進(jìn)來(lái),也可以按"+p將系統(tǒng)全局粘貼板里的內(nèi)容粘貼進(jìn)來(lái)。

    注意:在我這里,只有vim.gtk或vim.gnome才能使用系統(tǒng)全局粘貼板,默認(rèn)的 vim.basic看不到+號(hào)寄存器。

    posted @ 2010-06-18 14:21 BlakeSu 閱讀(265) | 評(píng)論 (0)編輯 收藏

    Linux下mail使用技巧

    登錄LINUX系統(tǒng)后,經(jīng)常會(huì)看到"you have mail",卻苦于不知道如何查看,相信菜鳥們都遇到過(guò),偶在網(wǎng)上用“linux mail"找了很久,但大都是介紹mail服務(wù)器的,黃天總算沒負(fù)有心人,在洪恩在找到一篇介紹基礎(chǔ)的文章,不敢獨(dú)享。
     
    系統(tǒng)提供了用戶 之間通信的郵件系統(tǒng),當(dāng)用戶打開終端注冊(cè)登錄時(shí)發(fā)現(xiàn)系統(tǒng)給出如下信息:
        you have mail.

        這時(shí)用戶可通過(guò)鍵入mail命令讀取信件:

        $ mail

        mail程序?qū)⒅饌€(gè)顯示用戶的信件,并依照時(shí)間順序,顯示最新的信件。每顯示一段信件,mail都詢問(wèn)用戶是否要對(duì)該信件作些處理。若用戶回答d,則表示 刪除信件;若僅按回車鍵,表示對(duì)信件不作任何改動(dòng)(信件仍舊保存,下次還可讀這一信件);若回答p,則要求重復(fù)顯示信件;s filename表示要把信件存入所命名的文件;若回答q,表示要從mail退出。

        我們?cè)诒菊碌牡谝粋€(gè)例子中演示了如何寫一封信,作為練習(xí),你可送信件給自己,然后鍵入mail讀取自己發(fā)的信件,看看會(huì)有什么效果。(發(fā)信給自己是一種設(shè) 置備忘錄的方法)。

        $mail frank 給自己寫信

        subject: test

        This is a mail test

        CRL-d

        EOT

        $

        $mail 查看信件

        “/var/spool/mail/frank:”1 message 1 new

        >Nfrank@xteam.xteamlinux.comThu Mar 25 11:00 13/403 “test”

        &

        Message 1:

        From frank Thu Mar 25 11:00:25 1999/3/25

        Received: (fromfrank@localhost)

        by xteam.xteamlinux.com(8.8.4/8.8.4)

        id LAA05170 for frank;Thu 25 Mar 1999 11:00:25 GMT

        Date: Thu,25 Mar 1999 11:00:25 GMT

        From:RHS Linux User <frank@xteam.xteamlinux.com>

        Message-Id:<199903251142.LAA05170@xteam.xteamlinux.com>

        To:frank@xteam.xteamlinux.com

        Subject:test

        Status:R

        This is a mail test

        &

        mail命令還有很多其它用法,例如發(fā)送事先準(zhǔn)備好的信件,或一次送信給若干人。還可以用其它方法送信件。

    posted @ 2010-06-18 11:05 BlakeSu 閱讀(190) | 評(píng)論 (0)編輯 收藏

    Mysql中l(wèi)imit的用法詳解

        Mysql中l(wèi)imit的用法:在我們使用查詢語(yǔ)句的時(shí)候,經(jīng)常要返回前幾條或者中間某幾行數(shù)據(jù),這個(gè)時(shí)候怎么辦呢?
      不用擔(dān)心,mysql已經(jīng)為我們提供了這樣一個(gè)功能。

      SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

    LIMIT 子句可以被用于強(qiáng)制 SELECT 語(yǔ)句返回指定的記錄數(shù)。LIMIT 接受一個(gè)或兩個(gè)數(shù)字參數(shù)。參數(shù)必須是一個(gè)整數(shù)常量。
      如果給定兩個(gè)參數(shù),第一個(gè)參數(shù)指定第一個(gè)返回記錄行的偏移量,第二個(gè)參數(shù)指定返回記錄行的最大數(shù)目。初始記錄行的偏移量是 0(而不是 1):
      為了與 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

    mysql> SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15

    //為了檢索從某一個(gè)偏移量到記錄集的結(jié)束所有的記錄行,可以指定第二個(gè)參數(shù)為 -1:

    mysql> SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last.

    //如果只給定一個(gè)參數(shù),它表示返回最大的記錄行數(shù)目:

    mysql> SELECT * FROM table LIMIT 5; //檢索前 5 個(gè)記錄行

    //換句話說(shuō),LIMIT n 等價(jià)于 LIMIT 0,n。

    注意limit 10和limit 9,1的不同:

    例如:

    1.Select * From cyclopedia Where ID>=(
        Select Max(ID) From (
          Select ID From cyclopedia Order By ID limit 90001
        ) As tmp
      ) limit 100;

    2.Select * From cyclopedia Where ID>=(
        Select Max(ID) From (
          Select ID From cyclopedia Order By ID limit 90000,1
        ) As tmp
      ) limit 100;

     

        第1句是先取了前90001條記錄,取其中最大一個(gè)ID值作為起始標(biāo)識(shí),然后利用它可以快速定位下100條記錄

    第2句擇是僅僅取90000條記錄后1條,然后取ID值作起始標(biāo)識(shí)定位下100條記錄

    第1句執(zhí)行結(jié)果.100 rows in set (0.23) sec

    第2句執(zhí)行結(jié)果.100 rows in set (0.19) sec

    其實(shí)第2句完全可以簡(jiǎn)化成:
        Select * From cyclopedia Where ID>=(
       Select ID From cyclopedia limit 90000,1
    )limit 100;

    直接利用第90000條記錄的ID,不用經(jīng)過(guò)Max運(yùn)算,這樣做理論上效率因該高一些,但在實(shí)際使用中幾乎看不到效果,
       因?yàn)楸旧矶ㄎ籌D返回的就是1條記錄,Max幾乎不用運(yùn)作就能得到結(jié)果,但這樣寫更清淅明朗,省去了畫蛇那一足.


    Select Top 100 * From cyclopedia Where ID>=(
    Select Top 90001 Max(ID) From (
    Select ID From cyclopedia Order By ID
    ) As tmp
    )

    但不管是實(shí)現(xiàn)方式是存貯過(guò)程還是直接代碼中,瓶頸始終在于MS-SQL的TOP總是要返回前N個(gè)記錄,這種情況在數(shù)據(jù)量不大時(shí)感受不深,
       但如果成百上千萬(wàn),效率肯定會(huì)低下的.相比之下MySQL的limit就有優(yōu)勢(shì)的多,執(zhí)行:


    Select ID From cyclopedia limit 90000
    Select ID From cyclopedia limit 90000,1

    的結(jié)果分別是:


    90000 rows in set (0.36) sec
    1 row in set (0.06) sec

    而MS-SQL只能用Select Top 90000 ID From cyclopedia 執(zhí)行時(shí)間是390ms,執(zhí)行同樣的操作時(shí)間也不及MySQL的360ms.

    limit的offset(偏移量)用于記錄較多的時(shí)候,記錄較少時(shí),偏移offset較小,直接使用limit較優(yōu)。offset越大,后者越優(yōu)。
     

    1、offset比較小的時(shí)候。

    select * from yanxue8_visit limit 10,10

    多次運(yùn)行,時(shí)間保持在0.0004-0.0005之間


    Select * From yanxue8_visit Where vid >=(
      Select vid From yanxue8_visit Order By vid limit 10,1
    ) limit 10

    多次運(yùn)行,時(shí)間保持在0.0005-0.0006之間,主要是0.0006

    結(jié)論:偏移offset較小的時(shí)候,直接使用limit較優(yōu)。這個(gè)顯示是子查詢的原因。

    2、offset大的時(shí)候。

    select * from yanxue8_visit limit 10000,10

    多次運(yùn)行,時(shí)間保持在0.0187左右

    Select * From yanxue8_visit Where vid >=(
      Select vid From yanxue8_visit Order By vid limit 10000,1
    ) limit 10

    多次運(yùn)行,時(shí)間保持在0.0061左右,只有前者的1/3。可以預(yù)先offset越大,后者越優(yōu)。

    mysql> SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last.

    //如果只給定一個(gè)參數(shù),它表示返回最大的記錄行數(shù)目.

    posted @ 2010-06-02 14:43 BlakeSu 閱讀(451) | 評(píng)論 (0)編輯 收藏

    枚舉類型enum示例




    public enum OrderStatus {
        A(
    1), B(2), C(3), D(4), F(5), INCOMPLETE(6);
        
        
    private final int value;
        
    /**
         * Constructor.
         
    */
        
    private OrderStatus(int value) {
            
    this.value = value;
        }
        
        
    /**
         * Get the value.
         * 
    @return the value
         
    */
        
    public int getValue() {
            
    return value;
        }

    }


    posted @ 2010-06-02 13:33 BlakeSu 閱讀(147) | 評(píng)論 (0)編輯 收藏

    JS try.....catch的使用

    <script language="javascript">
    try
    {
    throw new Error(10,"asdasdasd")
    }
    catch (e)
    {
    alert(e.message);
    alert(e.description)
    alert(e.number)
    alert(e.name)
    throw new Error(10,"asdasdasd")
    }

    </script>  

    在JavaScript可以使用try...catch來(lái)進(jìn)行異常處理。例如:  

     

    try {
    foo.bar();
    } catch (e) {
    alert(e.name + ": " + e.message);
    }

    目前我們可能得到的系統(tǒng)異常主要包含以下6種:

    • EvalError: raised when an error occurs executing code in eval()  
    • RangeError: raised when a numeric variable or parameter is outside of its valid range  
    • ReferenceError: raised when de-referencing an invalid reference  
    • SyntaxError: raised when a syntax error occurs while parsing code in eval()  
    • TypeError: raised when a variable or parameter is not a valid type  
    • URIError: raised when encodeURI() or decodeURI() are passed invalid parameters  

    上面的六種異常對(duì)象都繼承自Error對(duì)象。他們都支持以下兩種構(gòu)造方法:

     

    new Error();
    new Error("異常信息");

    手工拋出異常的方法如下:

     

    try {
    throw new Error("Whoops!");
    } catch (e) {
    alert(e.name + ": " + e.message);
    }

    如要判斷異常信息的類型,可在catch中進(jìn)行判斷:

     

    try {
    foo.bar();
    } catch (e) {
    if (e instanceof EvalError) {
       alert(e.name + ":" + e.message);
    }
    else if (e instanceof RangeError) {
       alert(e.name + ": " + e.message);
    }
    // etc
    }

    Error具有下面一些主要屬性:

    • description: 錯(cuò)誤描述 (僅IE可用).  
    • fileName: 出錯(cuò)的文件名 (僅Mozilla可用).  
    • lineNumber: 出錯(cuò)的行數(shù) (僅Mozilla可用).  
    • message: 錯(cuò)誤信息 (在IE下同description)  
    • name: 錯(cuò)誤類型.  
    • number: 錯(cuò)誤代碼 (僅IE可用).  
    • stack: 像Java中的Stack Trace一樣的錯(cuò)誤堆棧信息 (僅Mozilla可用).  

    因此為了更好的了解錯(cuò)誤信息我們可以將catch部分改為如下形式:  

     

    try {
    foo.bar();
    } catch (e) {
    if (browserType != BROWSER_IE) {                            
       alert("name: " + e.name +
        "message: " + e.message +
        "lineNumber: " + e.lineNumber +
        "fileName: " + e.fileName +
        "stack: " + e.stack);        
    }
    else {                    
       alert("name: " + e.name +     
        "errorNumber: " + (e.number & 0xFFFF ) +
        "message: " + e.message");        
    }
    }

    JavaScript中的throw命令事實(shí)上可以拋出任何對(duì)象,并且我們可以在catch接受到此對(duì)象。例 如:

     

    try {
    throw new Date(); // 拋出當(dāng)前時(shí)間對(duì)象
    } catch (e) {
    alert(e.toLocaleString()); // 使用本地格式顯示當(dāng)前時(shí)間
    }

    posted @ 2010-06-02 10:38 BlakeSu 閱讀(330) | 評(píng)論 (0)編輯 收藏

    深拷貝

    import java.io.*;

    public class ObjectCloner
    {
       
    // so that nobody can accidentally create an ObjectCloner object
       private ObjectCloner(){}
       
    // returns a deep copy of an object
       static public Object deepCopy(Object oldObj) throws Exception
       {
          ObjectOutputStream oos 
    = null;
          ObjectInputStream ois 
    = null;
          
    try
          {
             ByteArrayOutputStream bos 
    = new ByteArrayOutputStream(); 
             oos 
    = new ObjectOutputStream(bos); 
             
    // serialize and pass the object
             oos.writeObject(oldObj);   
             oos.flush();               
             ByteArrayInputStream bin 
    = new ByteArrayInputStream(bos.toByteArray()); 
             ois 
    = new ObjectInputStream(bin);
             
    // return the new object
             return ois.readObject();
          }
          
    catch(Exception e)
          {
             System.out.println(
    "Exception in ObjectCloner = " + e);
             
    throw(e);
          }
          
    finally
          {
             oos.close();
             ois.close();
          }
       }
       
    }

    posted @ 2010-05-25 09:30 BlakeSu 閱讀(176) | 評(píng)論 (0)編輯 收藏

    mysql convert int to char/varchar

    select cast(1 as char)

    char 不能換成varchar,否則會(huì)報(bào)錯(cuò)。

    posted @ 2010-05-12 17:12 BlakeSu 閱讀(2894) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: a级大片免费观看| 九九全国免费视频| 综合偷自拍亚洲乱中文字幕| 日韩色日韩视频亚洲网站| 免费一级毛suv好看的国产网站 | 亚洲香蕉久久一区二区三区四区| 亚洲中文字幕无码久久| 羞羞视频免费网站含羞草| 国产真人无码作爱免费视频| 亚洲视频免费播放| 成人永久福利免费观看| 亚洲宅男天堂在线观看无病毒| 亚洲综合自拍成人| 久久久久久亚洲精品影院| 免费无码国产V片在线观看| 男女午夜24式免费视频| 国产桃色在线成免费视频| 亚洲AV伊人久久青青草原| 亚洲一区二区在线免费观看| 亚洲日韩乱码中文字幕| 黄色网址免费在线观看| 国产2021精品视频免费播放| 国产免费私拍一区二区三区| 国产成人亚洲综合无码精品| 国产亚洲精品bv在线观看| 免费一级特黄特色大片| 最近中文字幕mv免费高清视频8| 国产伦一区二区三区免费| 亚洲AV无码久久精品成人| 亚洲av无码一区二区三区人妖| 国产在线播放线91免费| 欧美a级成人网站免费| 亚洲深深色噜噜狠狠爱网站| 亚洲人成网男女大片在线播放| av电影在线免费看| av无码免费一区二区三区| 久久乐国产精品亚洲综合| 亚洲第一男人天堂| 嫩草在线视频www免费观看 | 2021国内精品久久久久精免费| 在线成人a毛片免费播放 |