qqjianyue代碼工

          砌java代碼
          posts - 62, comments - 9, trackbacks - 0, articles - 10
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2008年9月16日

          1. Change to aliyun repository

          2. Chinese input method
          sudo apt-get install ibus-pinyin
          #remmeber to logout and re-logon to change system 'Region&Language' setting

          3. Shadowsocks and genpac
          sudo apt install -y shadowsocks-libev
          #sudo vi /etc/shadowsocks-libev/shadowsock.json
          {
              
          "server":"x.x.x.x",
              
          "server_port":xx,
              
          "local_port":1080,
              
          "password":"xxxxx",
              
          "timeout":60,
              
          "method":"aes-256-cfb"
          }

          nohup ss-local -c /etc/shadowsocks-libev/shadowsock.json >/dev/null 2>&1 &

          sudo apt install phython-pip
          sudo -H
          pip install genpac


          如果pip error "TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'"
          sudo python -m pip install --upgrade --force pip

          mkdir pac
          cd pac
          touch user-rules.txt
          genpac --pac-proxy "SOCKS5 127.0.0.1:1080" --gfwlist-proxy="SOCKS5 127.0.0.1:1080" --output="autoproxy.pac" --gfwlist-url="https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt" --user-rule-from="user-rules.txt"

          配置系統(tǒng)自動代理為:
          /home/xxx/pac/autoproxy.pac

          4. JDK8
          https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
          download and setup environment variable manually


          5.gcloud
          http://ubuntuhandbook.org/index.php/2014/10/google-cloud-sdk-made-into-canonical-partners-repository/

          posted @ 2018-11-03 08:39 Qzi 閱讀(204) | 評論 (0)編輯 收藏

          官方說明:http://source.android.com/source/initializing.html
          環(huán)境:
          Ubuntu 12.04 64bit
          JDK6(installation: http://www.gaggl.com/2012/04/installing-java6-jdk-on-ubuntu-12-04/)

          $ make -v
          GNU Make 3.81
          Copyright (C) 2006  Free Software Foundation, Inc.
          This is free software; see the source for copying conditions.
          There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
          PARTICULAR PURPOSE.
          This program built for x86_64-pc-linux-gnu
          $ python -V
          Python 2.7.3
          android 當(dāng)前 mainfest version: 4.2


          按照官方說明從下載到運(yùn)行emulator,沒有nexus,所以沒做實際機(jī)器燒錄。步驟請根據(jù)官方說明做,以下只列出過程遇到的問題:
          1.repo sync
          經(jīng)常出現(xiàn)斷線,網(wǎng)上有很多參考辦法,我是每次忽略這些錯誤,直到運(yùn)行完畢退出,我再重新運(yùn)行:
          repo sync -f
          知道所有代碼下載完畢(4.2的有16G)
          2.每次跑emulator都要cd到代碼目錄先進(jìn)行環(huán)境初始化
          source build/envsetup.sh
          lunch full-eng
          3.emulator出錯
          $ emulator
          emulator: WARNING: system partition size adjusted to match image file (229 MB > 200 MB)
          Segmentation fault (core dumped)
          改成用emulator-arm -partition-size 1024
          full long command reference:
          http://stackoverflow.com/questions/9022750/running-emulator-after-building-android-from-source

          posted @ 2013-04-20 10:57 Qzi 閱讀(306) | 評論 (0)編輯 收藏

          Spring 聲明式事務(wù)讓我們從復(fù)雜的事務(wù)處理中得到解脫。使得我們再也無需要去處理獲得連接、關(guān)閉連接、事務(wù)提交和回滾等這些操作。再也無需要我們在與事務(wù)相關(guān)的方法中處理大量的 try catch  finally 代碼。 我們在使用 Spring 聲明式事務(wù)時,有一個非常重要的概念就是事務(wù)屬性。事務(wù)屬性通常由事務(wù)的傳播行為,事務(wù)的隔離級別,事務(wù)的超時值和事務(wù)只讀標(biāo)志組成。我們在進(jìn)行事務(wù)劃分時,需要進(jìn)行事務(wù)定義,也就是配置事務(wù)的屬性。

           

          Spring  TransactionDefinition 接口中定義這些屬性 , 以供 PlatfromTransactionManager 使用 , PlatfromTransactionManager  spring 事務(wù)管理的核心接口。

           

          l         getTimeout() 方法,它返回事務(wù)必須在多少秒內(nèi)完成。

          l         isReadOnly() , 事務(wù)是否只讀,事務(wù)管理器能夠根據(jù)這個返回值進(jìn)行優(yōu)化,確保事務(wù)是只讀的。

          l         getIsolationLevel() 方法返回事務(wù)的隔離級別,事務(wù)管理器根據(jù)它來控制另外一個事務(wù)可以看到本事務(wù)內(nèi)的哪些數(shù)據(jù)。

           

           TransactionDefinition 接口中定義了五個不同的事務(wù)隔離級別:

           

          l         ISOLATION_DEFAULT 這是一個 PlatfromTransactionManager 默認(rèn)的隔離級別,使用數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級別 . 另外四個與 JDBC 的隔離級別相對應(yīng)

          l         ISOLATION_READ_UNCOMMITTED 這是事務(wù)最低的隔離級別,它充許別外一個事務(wù)可以看到這個事務(wù)未提交的數(shù)據(jù)。這種隔離級別會產(chǎn)生臟讀,不可重復(fù)讀和幻像讀。 例如 : Mary的原工資為 1000, 財務(wù)人員將 Mary 的工資改為了 8000 ,但未提交事務(wù) 與此同時, Mary正在讀取自己的工資 Mary 發(fā)現(xiàn)自己的工資變?yōu)榱?/span> 8000 ,歡天喜地! 而財務(wù)發(fā)現(xiàn)操作有誤,而回滾了事務(wù) ,Mary 的工資又變?yōu)榱?/span> 1000. 像這樣 ,Mary 記取的工資數(shù) 8000 是一個臟數(shù)據(jù)。

          l         ISOLATION_READ_COMMITTED 保證一個事務(wù)修改的數(shù)據(jù)提交后才能被另外一個事務(wù)讀取。另外一個事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級別可以避免臟讀出現(xiàn),但是可能會出現(xiàn)不可重復(fù)讀和幻像讀。

          l         ISOLATION_REPEATABLE_READ 這種事務(wù)隔離級別可以防止臟讀,不可重復(fù)讀。但是可能出現(xiàn)幻像讀。它除了保證一個事務(wù)不能讀取另一個事務(wù)未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生 ( 不可重復(fù)讀 )  在事務(wù) 1 中, Mary 讀取了自己的工資為 1000, 操作并沒有完成 在事務(wù) 2 中,這時財務(wù)人員修改了 Mary 的工資為 2000, 并提交了事務(wù) . 在事務(wù) 1 中,Mary 再次讀取自己的工資時,工資變?yōu)榱?/span> 2000 在一個事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀。 使用 ISOLATION_REPEATABLE_READ 可以避免這種情況發(fā)生。

          l         ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務(wù)隔離級別。事務(wù)被處理為順序執(zhí)行。除了防止臟讀,不可重復(fù)讀外,還避免了幻像讀。 目前工資為 1000 的員工有 10人。 事務(wù) 1, 讀取所有工資為 1000 的員工。 共讀取 10 條記錄 這時另一個事務(wù)向 employee表插入了一條員工記錄,工資也為 1000 事務(wù) 1 再次讀取所有工資為 1000 的員工 共讀取到了 11 條記錄,這就產(chǎn)生了幻像讀。 ISOLATION_SERIALIZABLE 能避免這樣的情況發(fā)生。但是這樣也耗費了最大的資源。

           

           

          getPropagationBehavior () 返回事務(wù)的傳播行為,由是否有一個活動的事務(wù)來決定一個事務(wù)調(diào)用。  TransactionDefinition 接口中定義了七個事務(wù)傳播行為:

           

          l         PROPAGATION_REQUIRED 如果存在一個事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟一個新的事務(wù)。 使用 spring 聲明式事務(wù), spring 使用 AOP 來支持聲明式事務(wù),會根據(jù)事務(wù)屬性,自動在方法調(diào)用之前決定是否開啟一個事務(wù),并在方法執(zhí)行之后決定事務(wù)提交或回滾事務(wù)。 單獨調(diào)用 methodB 方法 相當(dāng)于 Spring 保證在 methodB 方法中所有的調(diào)用都獲得到一個相同的連接。在調(diào)用 methodB 時,沒有一個存在的事務(wù),所以獲得一個新的連接,開啟了一個新的事務(wù)。 單獨調(diào)用 MethodA 時,在 MethodA 內(nèi)又會調(diào)用 MethodB. 執(zhí)行效果相當(dāng)于 調(diào)用 MethodA 時,環(huán)境中沒有事務(wù),所以開啟一個新的事務(wù) . 當(dāng)在 MethodA 中調(diào)用MethodB 時,環(huán)境中已經(jīng)有了一個事務(wù),所以 methodB 就加入當(dāng)前事務(wù)。

          l         PROPAGATION_SUPPORTS 如果存在一個事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。但是對于事務(wù)同步的事務(wù)管理器, PROPAGATION_SUPPORTS 與不使用事務(wù)有少許不同。 單純的調(diào)用 methodB 時, methodB 方法是非事務(wù)的執(zhí)行的。 當(dāng)調(diào)用 methdA ,methodB 則加入了 methodA 的事務(wù)中 , 事務(wù)地執(zhí)行。

          l         PROPAGATION_MANDATORY 如果已經(jīng)存在一個事務(wù),支持當(dāng)前事務(wù)。如果沒有一個活動的事務(wù),則拋出異常。 當(dāng)單獨調(diào)用 methodB 時,因為當(dāng)前沒有一個活動的事務(wù),則會拋出異常 throw new IllegalTransactionStateException("Transaction propagation ''mandatory'' but no existing transaction found"); 當(dāng)調(diào)用 methodA 時, methodB 則加入到 methodA 的事務(wù)中,事務(wù)地執(zhí)行。

          l         PROPAGATION_REQUIRES_NEW 總是開啟一個新的事務(wù)。如果一個事務(wù)已經(jīng)存在,則將這個存在的事務(wù)掛起。 當(dāng)單獨調(diào)用 methodB 時,相當(dāng)于把 methodb 聲明為 REQUIRED 。開啟一個新的事務(wù),事務(wù)地執(zhí)行。 當(dāng)調(diào)用 methodA  情況有些大不一樣 . 相當(dāng)于下面的效果。 在這里,我把 ts1 稱為外層事務(wù), ts2 稱為內(nèi)層事務(wù)。從上面的代碼可以看出, ts2 ts1 是兩個獨立的事務(wù),互不相干。 Ts2 是否成功并不依賴于 ts1 。如果 methodA 方法在調(diào)用 methodB 方法后的 doSomeThingB 方法失敗了,而 methodB 方法所做的結(jié)果依然被提交。而除了 methodB 之外的其它代碼導(dǎo)致的結(jié)果卻被回滾了。 使用PROPAGATION_REQUIRES_NEW, 需要使用 JtaTransactionManager 作為事務(wù)管理器。

          l         PROPAGATION_NOT_SUPPORTED 總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù)。 當(dāng)單獨調(diào)用 methodB 時,不啟用任何事務(wù)機(jī)制,非事務(wù)地執(zhí)行。 當(dāng)調(diào)用 methodA 時,相當(dāng)于下面的效果 使用 PROPAGATION_NOT_SUPPORTED, 也需要使用 JtaTransactionManager 作為事務(wù)管理器。

          l         PROPAGATION_NEVER 總是非事務(wù)地執(zhí)行,如果存在一個活動事務(wù),則拋出異常 單獨調(diào)用methodB ,則非事務(wù)的執(zhí)行。 調(diào)用 methodA 則會拋出異常

          l         PROPAGATION_NESTED 如果一個活動的事務(wù)存在,則運(yùn)行在一個嵌套的事務(wù)中 . 如果沒有活動事務(wù) , 則按 TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行 這是一個嵌套事務(wù) , 使用 JDBC 3.0 驅(qū)動時 , 僅僅支持 DataSourceTransactionManager 作為事務(wù)管理器。需要 JDBC 驅(qū)動的 java.sql.Savepoint 類。有一些 JTA 的事務(wù)管理器實現(xiàn)可能也提供了同樣的功能。 使用 PROPAGATION_NESTED ,還需要把 PlatformTransactionManager nestedTransactionAllowed 屬性設(shè)為 true;  nestedTransactionAllowed 屬性值默認(rèn)為false; 如果單獨調(diào)用 methodB 方法,則按 REQUIRED 屬性執(zhí)行。 如果調(diào)用 methodA 方法,相當(dāng)于下面的效果 當(dāng) methodB 方法調(diào)用之前,調(diào)用 setSavepoint 方法,保存當(dāng)前的狀態(tài)到 savepoint 。如果 methodB 方法調(diào)用失敗,則恢復(fù)到之前保存的狀態(tài)。但是需要注意的是,這時的事務(wù)并沒有進(jìn)行提交,如果后續(xù)的代碼 (doSomeThingB() 方法 ) 調(diào)用失敗,則回滾包括 methodB 方法的所有操作。 嵌套事務(wù)一個非常重要的概念就是內(nèi)層事務(wù)依賴于外層事務(wù)。外層事務(wù)失敗時,會回滾內(nèi)層事務(wù)所做的動作。而內(nèi)層事務(wù)操作失敗并不會引起外層事務(wù)的回滾。

           

           

          PROPAGATION_NESTED  PROPAGATION_REQUIRES_NEW 的區(qū)別:

           

          它們非常類似 , 都像一個嵌套事務(wù),如果不存在一個活動的事務(wù),都會開啟一個新的事務(wù)。使用PROPAGATION_REQUIRES_NEW 時,內(nèi)層事務(wù)與外層事務(wù)就像兩個獨立的事務(wù)一樣,一旦內(nèi)層事務(wù)進(jìn)行了提交后,外層事務(wù)不能對其進(jìn)行回滾。兩個事務(wù)互不影響。兩個事務(wù)這是一個真正的嵌套事務(wù)。同時它需要 JTA 事務(wù)管理器的支持。 使用 PROPAGATION_NESTED 時,外層事務(wù)的回滾可以引起內(nèi)層事務(wù)的回滾。而內(nèi)層事務(wù)的異常并不會導(dǎo)致外層事務(wù)的回滾,它是一個真正的嵌套事務(wù)。 DataSourceTransactionManager 使用 savepoint 支持PROPAGATION_NESTED 時,需要 JDBC 3.0 以上驅(qū)動及 1.4 以上的 JDK 版本支持。其它的JTA TrasactionManager 實現(xiàn)可能有不同的支持方式。 PROPAGATION_REQUIRED 應(yīng)該是我們首先的事務(wù)傳播行為。它能夠滿足我們大多數(shù)的事務(wù)需求。

          posted @ 2011-11-29 10:25 Qzi 閱讀(242) | 評論 (0)編輯 收藏

          參考這篇文章:http://blog.csdn.net/bluishglc/article/details/6632280 
          一。Maven的執(zhí)行方式
          maven對構(gòu)建(build)的過程進(jìn)行了抽象和定義,這個過程被稱為構(gòu)建的生命周期(lifecycle)。生命周期(lifecycle)由多個階段(phase)組成,每個階段(phase)會掛接一到多個goal。goal是maven里定義任務(wù)的最小單元,goal分為兩類,一類是綁定phase的,就是執(zhí)行到某個phase,那么這個goal就會觸發(fā),另外一類不綁定,就是單獨任務(wù),這就相當(dāng)于ant里的target。
          1。以phase來構(gòu)建
          例如:
          mvn clean
          mvn compile
          mvn test
          mvn package
          表明maven會執(zhí)行到某個生命周期(lifecycle)的某個階段(phase)
          這個phase以及它前面所有phase綁定的目標(biāo)(goal)都會執(zhí)行, 每個phase都會邦定maven默認(rèn)的goal或者沒有g(shù)oal, 或者自定義的goal。
          也可以通過傳入?yún)?shù)跳過(skip)某些phase,例如:
          mvn install -Dmaven.test.skip=true

          1。以goal來構(gòu)建
          這類就是沒有綁定phase的goal,但是這類goal卻通常會有個執(zhí)行前提,就是project必須執(zhí)行到某個phase,
          那么執(zhí)行這個goal,其實也會觸發(fā)maven執(zhí)行到前提要求的phase。
          例如jetty:run是個非綁定phase的goal,它的前提是test-compile,這個前提是由plugin的代碼邏輯制定的

          /**
           * @goal run
           * @requiresDependencyResolution runtime
           * @execute phase="test-compile"
           * @description Runs jetty6 directly from a maven project
           */
          public class Jetty6RunMojo extends AbstractJettyRunMojo
          {
              ...
          }
          二。Maven lifecycle, phase概覽
          Maven預(yù)設(shè)了三個Lifecycle ,各包含了下列Phases.
          1. Clean Lifecycle
            • pre-clean
            • clean
            • post-clean
          2. Default Lifecycle
            • validate
            • initialize
            • generate-sources
            • process-sources
            • generate-resources
            • process-resources
            • compile
            • process-classes
            • generate-test-sources
            • process-test-sources
            • process-test-resources
            • test-compile
            • process-test-classes
            • test
            • prepare-package
            • package
            • pre-integration-test
            • integration-test
            • post-integration-test
            • verify
            • install
            • deploy
          3. Site Lifecycle
            • pre-site
            • site
            • post-site
            • site-deploy

          posted @ 2011-09-22 10:01 Qzi 閱讀(9288) | 評論 (0)編輯 收藏

          1.Window
          • java -classpath .;jar1;jar2 MainClass
            注意: -classpath參數(shù)必須放于前面。
          • java -jar jar1
            jar包的MANIFEST.MF文件:
            Manifest-Version: 1.0
            Main-Class: com.Main1
            Class-Path: jar1.jar;jar2.jar

            注意: 使用-jar參數(shù),那么主jar包必須含有MANIFEST.MF信息,并且指定Main-Class & Class-Path。命令行的-classpath參數(shù)將被忽略
          2.Linux
          區(qū)別:
          目錄分隔符由\變成/
          jar包分隔符由;變成:

          Window測試環(huán)境是Sun java version "1.6.0_14"
          其他版本沒有驗證

          posted @ 2011-09-16 17:10 Qzi 閱讀(330) | 評論 (0)編輯 收藏

          posted @ 2011-09-16 16:59 Qzi 閱讀(267) | 評論 (0)編輯 收藏

          1.綁定本地接口,自動生成代理對象
          復(fù)制下面鏈接代碼
          // Endpoint Address
          String endpointAddress = "http://localhost:8111/helloWorld";
          // Add a port to the Service
          service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
          HelloService hw = service.getPort(HelloService.class);

          posted @ 2011-09-16 16:58 Qzi 閱讀(621) | 評論 (0)編輯 收藏

          java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888

          posted @ 2011-09-16 16:58 Qzi 閱讀(520) | 評論 (0)編輯 收藏

          Java Keytool Commands for Creating and Importing

          These commands allow you to generate a new Java Keytool keystore file, create a CSR, and import certificates. Any root or intermediate certificates will need to be imported before importing the primary certificate for your domain.

          • Generate a Java keystore and key pair

            keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048

          • Generate a certificate signing request (CSR) for an existing Java keystore

            keytool -certreq -alias mydomain -keystore keystore.jks -file mydomain.csr

          • Import a root or intermediate CA certificate to an existing Java keystore

            keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks

          • Import a signed primary certificate to an existing Java keystore

            keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks

          • Generate a keystore and self-signed certificate (see How to Create a Self Signed Certificate using Java Keytool for more info)

            keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048

          Java Keytool Commands for Checking

          If you need to check the information within a certificate, or Java keystore, use these commands.

          • Check a stand-alone certificate

            keytool -printcert -v -file mydomain.crt

          • Check which certificates are in a Java keystore

            keytool -list -v -keystore keystore.jks

          • Check a particular keystore entry using an alias

            keytool -list -v -keystore keystore.jks -alias mydomain

          Other Java Keytool Commands

          • Delete a certificate from a Java Keytool keystore

            keytool -delete -alias mydomain -keystore keystore.jks

          • Change a Java keystore password

            keytool -storepasswd -new new_storepass -keystore keystore.jks

          • Export a certificate from a keystore

            keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks

          • List Trusted CA Certs

            keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts

          • Import New CA into Trusted Certs

            keytool -import -trustcacerts -file /path/to/ca/ca.pem -alias CA_ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts

          posted @ 2011-09-16 16:24 Qzi 閱讀(393) | 評論 (0)編輯 收藏

          第一種方式:適合于全部HTML標(biāo)簽
          <acronym title="World Wide Web">
          WWW
          </acronym>

          第二種方式:IMG之類的標(biāo)簽例如:
          <img src="#" alt="鼠標(biāo)移動到上方會顯示并且未加載圖片時也會顯示">

          第三種方式:input之類的標(biāo)簽例如:
          <input type="button" value="確定" title="鼠標(biāo)移動到上方會顯示并且未加載圖片時也會顯示">

          posted @ 2010-05-28 16:31 Qzi 閱讀(230) | 評論 (0)編輯 收藏

          第一:簡單的使用axis2包自己實現(xiàn)調(diào)用

          package common;

          import javax.xml.namespace.QName;
          import org.apache.axis2.AxisFault;
          import org.apache.axis2.addressing.EndpointReference;
          import org.apache.axis2.client.Options;
          import org.apache.axis2.rpc.client.RPCServiceClient;

          public class WebServiceUtils
          {
           // ----------------------------------------------------- Properties
           public static int TIMEOUT = 100000;

           // ----------------------------------------------------- Constructors

           // ----------------------------------------------------- Methods
           /**
            *
            * 調(diào)用axis2的webservice的方法
            *
            * @return
            */
           @SuppressWarnings("unchecked")
           static public Object[] invokeWebService( String url, String nameSpace, String method, Object[] args, Class[] returnTypes )
             throws AxisFault
           {
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            EndpointReference targetEPR = new EndpointReference( url );
            options.setTo( targetEPR );
            options.setTimeOutInMilliSeconds( TIMEOUT );
            QName opName = new QName( nameSpace, method );
            Object[] results = serviceClient.invokeBlocking( opName, args, returnTypes );
            return results;
           }
          }


          第二:

          public static OMElement getEchoOMElement() {
                  OMFactory fac = OMAbstractFactory.getOMFactory();
                  OMNamespace omNs = fac.createOMNamespace(
                          "http://example1.org/example1", "example1");
                  OMElement method = fac.createOMElement("echo", omNs);
                  OMElement value = fac.createOMElement("Text", omNs);
                  value.addChild(fac.createOMText(value, "Axis2 Echo String "));
                  method.addChild(value);

                  return method;
              }

           public static void main(String[] args) {
                  try {
                     OMElement payload = ClientUtil.getEchoOMElement();
                      Options options = new Options();
                    
                      options.setTo(targetEPR);
                      options.setAction("urn:echo");

                      //Blocking invocation
                      ServiceClient sender = new ServiceClient();
                      sender.setOptions(options);
                      OMElement result = sender.sendReceive(payload);

                      System.out.println(result);
                    
                      System.out.println(options.getTo());

                  } catch (AxisFault axisFault) {
                      axisFault.printStackTrace();
                  }
              }

           
          第三:

          利用插件生成客戶端
          private static String URL="http://localhost:8080/axis2/services/WeatherService"; 
              public static void main(String[] args) throws RemoteException {
                  try {
                      WeatherServiceStub stub;
                      if (args != null && args.length != 0) {
                          stub = new WeatherServiceStub(args[0]);
                        
                      } else {
                          stub = new WeatherServiceStub(URL);
                      }
                      WeatherServiceStub.SetWeather setWether = new WeatherServiceStub.SetWeather();
                      WeatherServiceStub.Weather wether = new WeatherServiceStub.Weather();
                    
                      wether.setForecast("east");
                      wether.setRain(true);
                      wether.setTemperature(12.3f);
                      wether.setForecast("big");
                    
                      setWether.setWeather(wether);
                      stub.setWeather(setWether);
                    
                      WeatherServiceStub.GetWeatherResponse gw = new WeatherServiceStub.GetWeatherResponse();
                      System.out.println(gw.get_return());       
                    
                  } catch (AxisFault e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }


          本文部分來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/yhhah/archive/2009/05/07/4158487.aspx

          posted @ 2010-01-20 23:16 Qzi 閱讀(10507) | 評論 (0)編輯 收藏

          IE的 script 元素支持onreadystatechange事件,不支持onload事件。
          FF的script 元素不支持onreadystatechange事件,只支持onload事件。
          如果要在一個<script src="xx.js"> 加載完成執(zhí)行一個操作,F(xiàn)F使用onload事件就行了,IE下則要結(jié)合onreadystatechange事件和this.readyState
          var loadScript = function(fileName,callback) {
           var scriptTag = document.createElement("script");
            scriptTag.src = fileName;
            document.body.appendChild(scriptTag);
            if (callback) {
             scriptTag.onload = callback;//ff
             scriptTag.onreadystatechange = function()//ie
             {
              if (scriptTag.readyState == "loaded") {
              callback();
             }
            }
           }
          }

          posted @ 2009-12-11 18:57 Qzi 閱讀(478) | 評論 (0)編輯 收藏

          關(guān)鍵是查詢v$locked_object

          select sess.sid,
              sess.serial#,
              lo.oracle_username,
              lo.os_user_name,
              ao.object_name,
              lo.locked_mode
              from v$locked_object lo,
              dba_objects ao,
              v$session sess
          where ao.object_id = lo.object_id and lo.session_id = sess.sid;


          或者

          select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;

          殺掉進(jìn)程:
          alter system kill session 'sid,serial#';

          posted @ 2009-09-21 14:09 Qzi 閱讀(243) | 評論 (0)編輯 收藏

          --創(chuàng)建臨時表空間
          create temporary tablespace dbuser_temp
          tempfile 'D:\oracle\product\10.1.0\oradata\btx\dbuser_temp01.dbf'
          size 32m
          autoextend on
          next 32m maxsize 2048m
          extent management local;

          --創(chuàng)建數(shù)據(jù)表空間

          create tablespace dbuser_data
          logging
          datafile 'D:\oracle\product\10.1.0\oradata\btx\dbuser_data01.dbf'
          size 32m
          autoextend on
          next 32m maxsize 2048m
          extent management local;
          --或者自己控制增長規(guī)則
          --pctincreate表示下一次增長是前一次增長的110%
          create tablespace dbuser_data logging datafile 'D:/oracle/product/10.1.0/oradata/btx/DBUSER_DATA01.DBF' size 32m autoextend on next 5m maxsize unlimited default storage (initial 32m next 5m pctincrease 10);

          --修改表空間
          alter tablespace dbuser_data add datafile 'D:/oracle/product/10.1.0/oradata/btx/DBUSER_DATA02.DBF'  size 32m autoextend on next 5m maxsize unlimited;

          --創(chuàng)建用戶與指定默認(rèn)數(shù)據(jù)表空間與默認(rèn)臨時表空間
          create user dbuser identified by dbuser
          default tablespace dbuser_data
          temporary tablespace dbuser_temp;
          --修改用戶表空間
          alter user dbuser default tablespace dbuser_data temporary tablespace dbuser_temp;

          --為用戶賦權(quán)

          grant connect,resource to dbuser;

          修改表空間


          查詢oracle表空間使用狀況
          SELECT b.tablespace_name "表空間名",total 表空間大小,free 表空間剩余大小,
          (total-free) 表空間使用大小,
          ROUND((total-free)/total,4)*100 "使用率 %"
          FROM  (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE
          GROUP BY tablespace_name ) a,
          (SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES
          GROUP BY tablespace_name) b
          WHERE a.tablespace_name=b.tablespace_name ;

          posted @ 2009-08-16 11:24 Qzi 閱讀(1033) | 評論 (0)編輯 收藏

          恢復(fù)表數(shù)據(jù):
          alter table 表名 enable row movement;
          flashback table 表名 TO TIMESTAMP to_timestamp('2009-08-07 18:34:00','yyyy-mm-dd hh24:mi:ss');

          恢復(fù)存儲過程:
          select text from dba_source as of timestamp to_timestamp('2009-03-06 09:45:00', 'YYYY-MM-DD HH24:MI:SS') where owner='IPRA' and name= 'P_IPACCHECK_NC' order by line;
          需要sys用戶
          否則不夠權(quán)限
          或者登錄數(shù)據(jù)庫所在主機(jī),使用數(shù)據(jù)庫管理者的系統(tǒng)用戶登錄

          posted @ 2009-08-07 22:07 Qzi 閱讀(208) | 評論 (0)編輯 收藏

          視圖:(受權(quán)限過濾了)
          all_tables 所有表
          all_indexs 所有索引
          all_tab_columns  所有列,可以查看列的類型

          (dba權(quán)限包括所有)
          dba_tables
          dba_tab_columns
          dba_free_space 各對象的剩余空間
          dba_data_files  各數(shù)據(jù)空間的文件信息
          dba_tablespaces  表空間信息

          posted @ 2009-07-21 13:35 Qzi 閱讀(256) | 評論 (0)編輯 收藏

           

          常用字符函數(shù)

          函數(shù)

          描述

          LOWER(char)

          將字符串表達(dá)式char中的所有大寫字母轉(zhuǎn)換為小寫字母

          UPPER(char)

          將字符串表達(dá)式char中的所有小寫字母轉(zhuǎn)換為大寫字母

          INITCAP(char)

          首字母轉(zhuǎn)換成大寫

          SUBSTR(char,start,length)

          返回字符串表達(dá)式char中從第start開始的length個字符

          LENGTH(char)

          返回字符串表達(dá)式char的長度

          LTRIM(char)

          去掉字符串表達(dá)式char后面的空格

          ASCII(char)

          charASCII

          CHAR(number)

          numberASCII

          REPLACE(char,str1,str2)

          將字符串中所有str1換成str2

          INSTR(char1,char2,start,times)

          char1字符串中搜索char2字符串,start為執(zhí)行搜索操作的起始位置,times為搜索次數(shù)

           

          常用日期函數(shù)

          函數(shù)

          描述

          SYSDATE

          返回系統(tǒng)當(dāng)前日期和時間

          NEXT_DAY(day,char)

          返回day指定的日期之后并滿足char指定條件的第一個日期,char所指條件只能為星期幾

          LAST_DAY(day)

          返回day日期所指定月份中最后一天所對應(yīng)的日期

          ADD_MONTH(day,n)

          返回day日期在n個月后(n為正數(shù))或前(n為負(fù)數(shù))的日期

          MONTH_BETWEEN(day1,day2)

          返回day1日期和day2日期之間相差得月份

          ROUND(day[,fmt])

          按照fmt指定格式對日期數(shù)據(jù)day做舍入處理,默認(rèn)舍入到日

          TRUNC(day,[,fmt])

          按照fmt指定格式對日期數(shù)據(jù)day做舍入處理,默認(rèn)截斷到日

           

          數(shù)據(jù)類型轉(zhuǎn)換函數(shù)

          函數(shù)

          描述

          TO_CHAR

          將一個數(shù)字或日期轉(zhuǎn)換成字符串

          TO_NUMBER

          將字符型數(shù)據(jù)轉(zhuǎn)換成數(shù)字型數(shù)據(jù)

          TO_DATE

          將字符型數(shù)據(jù)轉(zhuǎn)換為日期型數(shù)據(jù)

          CONVERT

          將一個字符串從一個字符集轉(zhuǎn)換為另一種字符集

          CHARTORowid

          將一個字符串轉(zhuǎn)換為Rowid數(shù)據(jù)類型

          RowIDTOCHAR

          將一個Rowid數(shù)據(jù)類型轉(zhuǎn)換為字符串

          NEXTTORAW

          將一個十六進(jìn)制字符串轉(zhuǎn)換為RAW數(shù)據(jù)類型

          RAWTOHEX

          將一個RAW類型的二進(jìn)制數(shù)據(jù)類型轉(zhuǎn)換為一個十六進(jìn)制表達(dá)的字符串

          TO_MULTI_BYTE

          將一個單字節(jié)字符串轉(zhuǎn)換為多字節(jié)字符串

          TO_SINGLE_BYTE

          將一個多字節(jié)字符串轉(zhuǎn)換為單字節(jié)字符串

           

           

           

          集合函數(shù)

          函數(shù)

          描述

          AVG

          計算一列值的平均值

          COUNT

          統(tǒng)計一列中值的個數(shù)

          MAX

          求一列值中的最大值

          MIN

          求一列值中的最小值

          SUM

          計算一列值的總和

          STDDEV

          計算一列值的標(biāo)準(zhǔn)差

          VARIANCE

          計算一列值的方差

          posted @ 2009-07-16 21:26 Qzi 閱讀(528) | 評論 (0)編輯 收藏

          1、
            encodeURIComponent(”[string]“)
            decodeURIComponent(”[encodedString]“)

          2、
            encodeURI(”[string]“)
            decodeURI(”[encodedString]“)

          3、
            escape(”[string]“)
            unescape(”[encodedString]“)


          1、對每個字節(jié)進(jìn)行編碼;
          2、空格轉(zhuǎn)為”+”號;
          3、安全字符不編碼。安全字符:大小寫英文字母(a-z以及A-Z) 阿拉伯?dāng)?shù)字(0-9) \’ ( ) * - . _ !
          4、其他字節(jié)以十六進(jìn)制顯示并加”%”前綴,例如用%25代表%號。

          posted @ 2009-07-15 21:29 Qzi 閱讀(164) | 評論 (0)編輯 收藏

          設(shè)置客戶端字符集:
          # 常用中文字符集
          set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
          # 常用unicode字符集
          set NLS_LANG=american_america.AL32UTF8

          exp 用戶名/密碼@主機(jī) file=導(dǎo)出文件的文件名 tables=(逗號分割表名)  log=aibsm.log feedback=200

          posted @ 2009-07-06 13:21 Qzi 閱讀(208) | 評論 (0)編輯 收藏

          1.Json的對象形式
          {
          property0 : true,                    //property0是一個布爾型的值
          property1 : 0,                        //property1是一個數(shù)值型的值
          property2 : "123",                 //property2是一個字符串型的值
          property3 : function(){...}     //property3是一個函數(shù)
          }
          使用key-value對構(gòu)造json對象,注意屬性的key和value使用“:”分開,屬性之間使用“,”分開,注意最后的屬性沒有“,”,什么符號都不要有。將此結(jié)構(gòu)直接賦值給js的對象,則可以使用這個對象調(diào)用這些屬性。
          例如:var obj1 = {
          property0 : true,                    //property0是一個布爾型的值
          property1 : 0,                        //property1是一個數(shù)值型的值
          property2 : "123",                 //property2是一個字符串型的值
          property3 : function(){...},     //property3是一個函數(shù)
          property4 : { p1 : p1Value, p2 : p2Value }    //property4本身又是一個對象
          }
          那么可以調(diào)用
          alert(obj1.property0);
          obj1.property3();
          ……
          在Java Web開發(fā)中,服務(wù)端負(fù)責(zé)輸出這串字符到j(luò)sp頁面的js,就可以使用了。

          關(guān)鍵的是,字符串中可能具有js需要避免的特殊字符,建議查看一下spring的JavascriptUtils的javaScriptEscape方法就知道如何做啦
          如果是Ajax調(diào)用的話,就是用prototype庫的方法,將字符串轉(zhuǎn)換為json對象
          new Ajax.Request("http://url/", { 
            method: "get", 
            onSuccess: function(transport) { 
              var json = transport.responseText.evalJSON(); 
              // TODO: document.write(json.xxx); 
            } 
          prototype庫的官網(wǎng):    http://prototypejs.org/
           }); 
          2.    Json的數(shù)組形式
          其實js中的數(shù)組更像是一個Map對象,因為它的key不只是整數(shù),還可以是字符串。
          var array;
          array["key0"] = key0Value;
          array["key1"] = key1Value;

          posted @ 2009-06-01 13:33 Qzi 閱讀(357) | 評論 (0)編輯 收藏

               摘要: 基本javascript事件的列表介紹  閱讀全文

          posted @ 2009-05-22 15:51 Qzi 閱讀(375) | 評論 (0)編輯 收藏

               摘要: 首先介紹一個網(wǎng)站,我很多書本都是在上面下載的,很好。http://www.freebookspot.in/
          我現(xiàn)在學(xué)習(xí)的書本是:Pro Javascript Design Pattern

          首先簡單地為優(yōu)雅的Javascript代碼開個頭

          運(yùn)用設(shè)計模式的三大原因:
          可維護(hù)性
          溝通交流性
          性能追求
          不使用設(shè)計模式的兩大原因:
          復(fù)雜性
          性能追求
            閱讀全文

          posted @ 2009-05-16 10:36 Qzi 閱讀(1825) | 評論 (2)編輯 收藏

          函數(shù):
          import導(dǎo)入文件的路徑、類型、和title,title用來標(biāo)識你是否已導(dǎo)入這個文件用。
          setStyle用于使導(dǎo)入的css有效,根據(jù)不同的瀏覽器,可能css生效的條件不同,反復(fù)無效與有效間切換,可以使得最后有效。
           1function $import(path, type, title) {
           2    var s, i;
           3    if (type == "js"{
           4        var ss = document.getElementsByTagName("script");
           5        for (i = 0; i < ss.length; i++{
           6            if (ss[i].src && ss[i].src.indexOf(path) != -1{
           7                return;
           8            }

           9        }

          10        s = document.createElement("script");
          11        s.type = "text/javascript";
          12        s.src = path;
          13    }
           else {
          14        if (type == "css"{
          15            var ls = document.getElementsByTagName("link");
          16            for (i = 0; i < ls.length; i++{
          17                if (ls[i].href && ls[i].href.indexOf(path) != -1{
          18                    return;
          19                }

          20            }

          21            s = document.createElement("link");
          22            s.rel = "alternate stylesheet";
          23            s.type = "text/css";
          24            s.href = path;
          25            s.title = title;
          26            s.disabled = false;
          27        }
           else {
          28            return;
          29        }

          30    }

          31    var head = document.getElementsByTagName("head")[0];
          32    head.appendChild(s);
          33}

          34
          35function setStyle(title) {
          36    var i, links, eflag = false;
          37    links = document.getElementsByTagName("link");
          38    for (i = 0; links[i]; i++{
          39        if (links[i].getAttribute("rel").indexOf("style"!= -1 && links[i].getAttribute("title")) {
          40            links[i].disabled = true;
          41            if (links[i].getAttribute("title").indexOf(title) != -1{
          42                links[i].disabled = false;
          43                eflag = true;
          44            }

          45        }

          46    }

          47    if (!eflag) {
          48        $import("skin/" + title + "/default.css""css", title);
          49        setStyle(title);
          50    }

          51}

          posted @ 2009-02-18 12:43 Qzi 閱讀(973) | 評論 (0)編輯 收藏

          最大公約數(shù):使用輪轉(zhuǎn)相除法,它的原理是:(n1>n2)n1與n2的最大公約數(shù)等于n2與n1%n2的最大公約數(shù),即
          gcd(n1, n2)=gcd(n2, n1%n2)
          最大公約數(shù)

          素數(shù)篩選法:原理是:
          1)0與1不是素數(shù);
          2)素數(shù)的2倍以上倍數(shù)不是素數(shù)
          所以剔除這些剩下的就是素數(shù)了
          素數(shù)篩選法


          posted @ 2008-11-29 21:58 Qzi 閱讀(430) | 評論 (0)編輯 收藏

          http://wiki.ubuntu.org.cn/Tomcat%E8%AE%BE%E7%BD%AEJSP%E7%8E%AF%E5%A2%83

          posted @ 2008-11-28 22:37 Qzi 閱讀(302) | 評論 (0)編輯 收藏

          jms:
          (Java   Message   Service)    
            JMS定義了Java中訪問消息中間件的接口。    
             
            JMS只是接口,并沒有給予實現(xiàn),實現(xiàn)JMS接口的消息中間件叫JMS   Provider,這樣的消息中間件可以從Java里通過JMS接口進(jìn)行調(diào)用。    
             
            JMS   消息模型    
            JMS消息由兩部分構(gòu)成:header和body。header包含消息的識別信息和路由信息,body包含消息的實際數(shù)據(jù)。    
             
            根據(jù)數(shù)據(jù)格式,JMS消息可分為以下五種:    
             
            BytesMessage   消息是字節(jié)流。    
            MapMessage   消息是一系列的命名和值的對應(yīng)組合。    
            ObjectMessage   消息是一個流化的Java對象。    
            StreamMessage   消息是Java中的輸入輸出流。    
            TextMessage   消息是一個字符串,這種類型將會廣泛用于XML格式的數(shù)據(jù)。

          cms:
          Content Management System,CMS其實就是內(nèi)容管理系統(tǒng),,,可以理解為,CMS幫你把一個網(wǎng)站的程序部分的事全做完了 你要做的只是一個網(wǎng)站里面美工的部份,搞幾個靜態(tài)網(wǎng)頁模板,一個門戶級的網(wǎng)站就出來了!

          CMS,大概2004以前,如果想進(jìn)行網(wǎng)站內(nèi)容管理,基本上都是靠手工維護(hù),但千變?nèi)f化的信息流,但沒有好的程序支持,還繼續(xù)靠手工完成是不可能的事,如果有一個好的系統(tǒng)來支撐你的網(wǎng)站,那將節(jié)省大量的人力物力,開發(fā)者就可能給客戶一個軟件包,可以用它定期人工修改網(wǎng)站。只要你配置安裝好,你的編輯,在線記者,更新員只要定期更新數(shù)據(jù),剩下的事就交給CMS去處理

          posted @ 2008-11-14 08:14 Qzi 閱讀(200) | 評論 (0)編輯 收藏

          基本類型:
          布爾類型:boolean不能夠自動也不能強(qiáng)制轉(zhuǎn)換成其他類型,但是可以進(jìn)行&,&&,|,||運(yùn)算
          字符類型:char(16)其他基本類型不能夠自動轉(zhuǎn)變?yōu)樽址愋停梢詮?qiáng)制轉(zhuǎn)換為char,但是可以有截斷現(xiàn)象
          整形類型:byte(8),short(16),int(32),long(64)初始化的時候都是使用整數(shù)字面量直接賦值,但是byte與byte,short與short變量相加,默認(rèn)都得到int的值,所以必須強(qiáng)制轉(zhuǎn)換才能夠返回原來類型的值(例如:(byte)(b1+b2))
          浮點類型:float(32),double(64)浮點數(shù)的字面量默認(rèn)都是double類型,所以需要強(qiáng)制轉(zhuǎn)換成float才能夠初始化float,或者加上f或F后綴。(例如float f1 = 1.4F或者float f1 = (float)1.4

          整形還可以使用八進(jìn)制(以0開頭的整形數(shù)字字面量)、十六進(jìn)制(以0x開頭的整形字面量)初始化;
          浮點型:字面量不可以是八進(jìn)制十六進(jìn)制,但int可以自動轉(zhuǎn)化為浮點,所以仍然可以使用8進(jìn)制16進(jìn)制初始化,但是可以使用浮點計數(shù)法初始化,同樣可以加上f或d后綴,例1.23e+33F等
          字符型char可以直接使用

          unicode轉(zhuǎn)義符:
          \uXXXX 四個16進(jìn)制的數(shù),在文本里面就是代表著某個字符,所以可以'\uXXXX'初始化一個char,可以\u0022\uXXXX\u0022初始化一個String,因為剛好\u0022代表雙引號。當(dāng)然\uXXXX不能是雙引號,否則就編譯出錯了。

          自動類型轉(zhuǎn)換:byte---short---int---long---float---double
          但是short與char不能夠相互自動轉(zhuǎn)換,但是可以相互強(qiáng)制轉(zhuǎn)換
          整型字面量可以初始化char,只要不超過65535的范圍,也就是也能夠使用8進(jìn)制16進(jìn)制初始化,但是整型變量不能夠賦值給char;
          char可以自動轉(zhuǎn)換成int及以上

          變量聲明與定義:
          int[] intArray;    //OK
          int intArray[];    //OK
          前面的加上 “= new int[變量or常量]” 都是可以的,但是“= new int(5)”是錯誤的
          int[] intArray[];  //OK,但是代表的是數(shù)組的數(shù)組
          int[5] intArray;  //False
          int intArray[5];  //False

          三目運(yùn)算符:
          ?:返回不同類型問題,跟C++稍微不同,無論返回值在第一表達(dá)式還是第二表達(dá)式,返回值都是根據(jù)高階類型返回,例子:
          true ? 'a' : 9          返回結(jié)果是字符類型,所以字符類型是高階類型
          true ? 'a' : 9.0       返回結(jié)果是浮點類型(對于double和float都是),所以浮點比字符類型高階
          ture ? 9 : 9.0        返回結(jié)果是浮點類型,明顯
          true ? "abc" : 9     返回結(jié)果是字符串類型,因為字符類型較高階
          true ? 對象1實例 : 對象2實例      返回結(jié)果是最大共同父類,所以如果其中一個是另外一個的子類,那么就返回父類,如果互不繼承關(guān)系,則返回Object。

          String總結(jié):
          首先聲明,==判斷是判斷對象引用的實例是否相同,即實例是否真正在相同的位置
          Object默認(rèn)的equals方法與==是一樣的(就是引用相同實例),String類重寫equals方法和hashCode方法,只要內(nèi)容相同就返回ture(一般自己寫的類也建議重寫equals方法和hashCode方法)。所以這時候==與equals就具有不相同意義了。
          http://www.javaeye.com/topic/122206
          1. 首先String不屬于8種基本數(shù)據(jù)類型,String是一個對象。
           因為對象的默認(rèn)值是null,所以String的默認(rèn)值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性。
          2. new String()和new String("")都是申明一個新的空字符串,是空串不是null;
          3. String str="string";
          String str1="string";
          String str2=new String ("string");
          String str3="str" + new String("ing");
          關(guān)于常量池概念,java虛擬機(jī)在常量池中只維持一個字符串的示例,所以str與str1引用都是引用常量池里面的共同實例,關(guān)鍵的是只有常量池里面的String才是唯一的,new空間里面的并不是。
          但是str2,str3(而且str2與str3的空間地址也肯定不一樣的,引用的是新建空間堆里的實例,所以str==str1,str!=str2,str1!=str2,str1!=str3,str2!=str3
          但是它們幾個使用equals都是返回true的,因為String類的hashCode函數(shù)根據(jù)內(nèi)容返回hashCode碼,這個碼相同,則equals就返回true了,具體的equals與hashCode解釋可以參照《java核心技術(shù) 卷1 基礎(chǔ)知識》
          注意:成員函數(shù)intern() :
          當(dāng)一個String實例str調(diào)用intern()方法時,Java查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等于str的字符串并返回它的引用;
          所以:
          String str1="string";
          String str2=new String ("string");
          str1==str2.intern()          返回true

          posted @ 2008-11-09 10:26 Qzi 閱讀(329) | 評論 (0)編輯 收藏

          參考java core總結(jié),java 5與之前的不同包括:

          1.泛型編程

          2.包裝類的自動打包拆包

          3.格式化輸出:增加printf函數(shù)

          4.StringBuilder類:非線程安全的StringBuffer

          5.可變參數(shù)列表:聲明方式public void mymethod(String arg1,Object… args),記住...

          6.增強(qiáng)的for循環(huán):for(type variable:數(shù)組或數(shù)組列表)

          7.靜態(tài)導(dǎo)入:import static 導(dǎo)入類 就可以使用本地方法一樣使用導(dǎo)入類的靜態(tài)方法

          8.協(xié)變的返回類型,即override的函數(shù)可以返回原函數(shù)返回類型的子類型,而不是要求相同返回類型

          9.控制臺輸入

          10.內(nèi)容窗格授權(quán):JframeJDialogJApplet可以使用addsetLayout函數(shù),以前需要getContentPane().add(component)getContentPane().setLayout(manager);

          posted @ 2008-10-21 20:45 Qzi 閱讀(248) | 評論 (0)編輯 收藏

           

          測試:定義為在受控的條件下對應(yīng)用程序進(jìn)行操作,以對程序質(zhì)量進(jìn)行評估

           

          質(zhì)量:可以定義為產(chǎn)品的優(yōu)點(特性)減去其中存在的問題(bug

           

          測試的重要性:測試的反面是不測試,即把程序驗證工作都丟到軟件開發(fā)完畢或者交付給客戶。辯駁觀點是:越遲發(fā)現(xiàn)程序的問題,修復(fù)其的成本越高。

           

          測試人員做什么:保證程序的bug是影響最小的bug,將程序的bug降到最小風(fēng)險。

           

          測試與QAQuality Assurance)的區(qū)別:QA關(guān)注軟件工程的過程,通過改善過程提高軟件的質(zhì)量,他不對軟件進(jìn)行剖析以找出問題,而只是驗證軟件是否滿足一套已定義的質(zhì)量標(biāo)準(zhǔn)和用戶協(xié)議。

          測試更關(guān)心的是剖析軟件,觀察軟件的運(yùn)行,并在質(zhì)量內(nèi)部層次進(jìn)行報告,發(fā)現(xiàn)軟件的bug

           

          測試人員素質(zhì):驗證、檢測、防范、反映。

           

          bug:是沒有預(yù)料到的行為,軟件做了某些認(rèn)為是錯誤的事情。

           

          自動化測試:使用軟件工具來代替手工進(jìn)行的一系列動作,通常使用腳本或者代碼驅(qū)動應(yīng)用程序,可以通過可視用戶界面完成,或者直接命令模擬客戶端功能。

          構(gòu)建版本驗證測試(Build verification test, BVT)針對軟件最新版本而做的一些列自動化測試;回歸測試(Regression testing)測試以前曾經(jīng)正常工作的場景,確保代碼修改后沒有打破原來的功能或者產(chǎn)生其他方面的副作用。

          posted @ 2008-10-21 20:43 Qzi 閱讀(231) | 評論 (0)編輯 收藏

          線程生命周期:新建線程、排隊、運(yùn)行、等待、死亡,明顯包含了下面線程生存期的三種狀態(tài)。

          線程生存期三種狀態(tài):就緒、運(yùn)行、等待(掛起)

          與線程相關(guān)的一些函數(shù)區(qū)別:

          線程暫停或者停止:stopsuspendsleepwait

          成員方法stop會解除由線程獲得的所有鎖定,并且使線程進(jìn)入死亡狀態(tài),相當(dāng)于run方法的被強(qiáng)制中斷;

          成員方法suspend仍然持有線程之前的所有鎖定,并且使線程進(jìn)入等待狀態(tài),需要使用resume重激活;

          靜態(tài)方法 sleep不釋放對象鎖,可以指定暫停線程的mini Seconds數(shù),暫停當(dāng)前線程;

          成員方法wait導(dǎo)致本線程放棄對象鎖,進(jìn)入掛起狀態(tài),并且需要通過notify或者notifyAll來使線程進(jìn)入就緒狀態(tài);

           

          線程池機(jī)制:

          線程池管理器:創(chuàng)建銷毀線程池、將工作線程放入線程池

          工作線程:執(zhí)行任務(wù)(即任務(wù)接口)的線程,在沒有任務(wù)時候等待

          任務(wù)隊列:提供線程申請緩沖機(jī)制

          任務(wù)接口:規(guī)定任務(wù)的入口、任務(wù)執(zhí)行完后的收尾工作、任務(wù)的執(zhí)行狀態(tài)

          posted @ 2008-10-21 20:43 Qzi 閱讀(270) | 評論 (0)編輯 收藏

          ZIP壓縮IO涉及類(包括操作文件夾壓縮)

          ZipEntry標(biāo)識zip文件中單個文件的入口,它也支持路徑加文件名,所以通過配置它,可以建立目錄層次的zip文件(見下例子)

          ZipOutputStreamwrite數(shù)據(jù)到zip文件的對象

          ZipInputStream,從zip文件中read數(shù)據(jù)的對象,其實基本上這個沒有作用

          ZipFile,獲取zip文件里面單個文件入口,getInputStream()等信息的對象,初始化ZipFile zf = new ZipFile(zip壓縮文件的File對象);

                     Enumeration entries = =zf.entries()可以獲得所有的zip文件里面的文件入口。

          原理就是:entry指定單個文件相對zip壓縮文件內(nèi)部根目錄的位置,Stream操作輸出輸入,ZipFile代表的就是整個zip文件


          示例代碼

          JAR壓縮類與ZIP是幾乎一模一樣對應(yīng)的分別為:JarEntry JarFile JarInputStream JarOutputStream

          GZIP格式,只提供GZIPInputStream和GZIPOutputStream類,因為其作用是單純的壓縮與解壓,不維護(hù)文件結(jié)構(gòu)。多數(shù)用于基于流的數(shù)據(jù)傳送過程實現(xiàn)數(shù)據(jù)壓縮。用法就如Bufer Stream一樣,是stream之間的又一個過濾類,只是Buffer提供緩沖,而GZIP提供壓縮。
          例如需要網(wǎng)絡(luò)傳送壓縮就可以這樣做:
          客戶端:
          Socket socket = new Socket(服務(wù)器地址字符串, 服務(wù)器端口);
          BufferOutputStream out = new BufferOutPutStream(new GZIPOutputStream(socket.getOutputStream()));
          然后就可以操作數(shù)據(jù)輸出了
          服務(wù)器端:
          ServerSocket sSocket =   new ServerSocket(服務(wù)器端口);
          Socket socket = sSocket.accept();
          BufferInputStream in = new BufferInputStream(new GZIPInputStream(socket.getInputStream()));
          然后就可以讀入數(shù)據(jù)了。
          明顯網(wǎng)絡(luò)數(shù)據(jù)傳送就加了一個壓縮,性能就可以提高了。

          posted @ 2008-10-07 14:15 Qzi 閱讀(1725) | 評論 (0)編輯 收藏

               摘要: 元字符

          \w 匹配字母或數(shù)字或下劃線或漢字等。等效于Unicode字符類別 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用ECMAScript選項指定了符合 ECMAScript的行為,則\w只等效于[a-zA-Z_0-9]。

          \b 單詞的開頭或結(jié)尾,如果需要更精確的說法,\b匹配這樣的位置:它的前一個字符和后一個字符不全是\w

          . 除換行符以外的所有字符

          * 表示數(shù)量,任意數(shù)量,所以 .* 加起來就表示除換行符以外的任意數(shù)量字符,\w*表示任意字符

          + 是和*類似的元字符,不同的是*匹配重復(fù)任意次(可能是0次),而+則匹配重復(fù)1次或更多次。

          \d 單個數(shù)字

          \s 匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。

          ^ 匹配你要用來查找的字符串的開頭,$匹配結(jié)尾。和忽略大小寫的選項類似,有些正則表達(dá)式處理工具還有一個處理多行的選項。如果選中了這個選項,^和$的意義就變成了匹配  閱讀全文

          posted @ 2008-10-04 20:00 Qzi 閱讀(811) | 評論 (0)編輯 收藏

          Pattern類:
          例子:
                  Pattern pattern = Pattern.compile("[,\\s]+");
                  String[] result = pattern.split("one two three,four,five, six");
                  for(int i = 0; i<result.length; i++){
                      System.out.println(result[i]);
                  }
          輸出結(jié)果是:
          one
          two
          three
          four
          five
          six
          Pattern類的靜態(tài)方法compile用來編譯正則表達(dá)式,在此[,\\s]+表示若干個","或者若干個空格匹配
          split方法使用正則匹配將字符串切割成各子串并且返回

          Matcher類:
          注意,Matcher的獲得是通過Pattern.matcher(CharSequence charSequence);輸入必須是實現(xiàn)了CharSequence接口的類
          常用方法:
          matches()判斷整個輸入串是否匹配,整個匹配則返回true
          例如下面會輸出true
                  String str1 = "hello";
                  Pattern pattern1 = Pattern.compile("hello");
                  Matcher matcher1 = pattern1.matcher(str1);
                  System.out.println(matcher1.matches());

          lookingAt()從頭開始尋找,找到匹配則返回true
          例如下面會輸出true
                  String str2 = "hello yangfan!";
                  Pattern pattern2 = Pattern.compile("hello");
                  Matcher matcher2 = pattern2.matcher(str2);
                  System.out.println(matcher2.lookingAt());

          find()掃描輸入串,尋找下一個匹配子串,存在則返回true
          例如下面將會將所有no替換成yes
                  Pattern pattern = Pattern.compile("no");
                  Matcher matcher = pattern.matcher("Does jianyue love yangfan? no;" +
                          "Does jianyue love yangfan? no;Does jianyue love yangfan? no;");
                  StringBuffer sb = new StringBuffer();
                  boolean find = matcher.find();
                  while(find){
                      matcher.appendReplacement(sb, "yes");
                      find = matcher.find();
                  }
                  matcher.appendTail(sb);
                  System.out.println(sb.toString());

          posted @ 2008-10-04 19:50 Qzi 閱讀(1053) | 評論 (0)編輯 收藏

          初始化:
          StringTokenizer st = new StringTokenizer(String str);
          默認(rèn)的分隔符,即空白符(空格、制表符、回車)
          或者
          StringTokenizer st = new StringTokenizer(String str, String token);
          使用token作為分隔符

          常用函數(shù):
          st.countTokens()返回token的數(shù)量
          st.hasMOreTokens()判斷時候當(dāng)前位置之后是否還有token
          st.nextToken()返回當(dāng)前位置到下一個token之前或者字符串結(jié)束之前的字符串

          簡單示例:
                  String str = "wo shi li jian yue, what your name? yangfan?";
                  String[] stringArray = new String[100];
                  StringTokenizer st = new StringTokenizer(str, ",");
                  int i;
                  for(i = 0; st.hasMoreTokens(); i++){
                      stringArray[i] = st.nextToken();
                  }
                  for(int j = 0; j<i; j++){
                      System.out.println(stringArray[j]);
                  }
          以","為分隔符,將會輸出","之前和之后的兩行字符串

          posted @ 2008-10-04 18:01 Qzi 閱讀(266) | 評論 (0)編輯 收藏

           

          創(chuàng)建 Filter(過濾器)

           實際開發(fā)中都需要開發(fā)一些很有用的過濾器,來解決中文表單提交問題啊,給請求和響

          應(yīng)加入 GZIP壓縮功能啊,用戶權(quán)限控制啊,等等,然而遺憾的 MyEclipse不支持直接創(chuàng)建

          過濾器。在這里只好手工創(chuàng)建一個解決 Tomcat表單提交中文問題的過濾器。

           選擇菜單 File > New > Class,來創(chuàng)建一個名為 TomcatFormFilter 的類,包名為

          filters。然后把類的代碼修改為如下所示:

          package filters;

          import java.io.IOException;

          import javax.servlet.Filter;

          import javax.servlet.FilterChain;

          import javax.servlet.FilterConfig;

          import javax.servlet.ServletException;

          import javax.servlet.ServletRequest;

          import javax.servlet.ServletResponse;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletRequestWrapper;

          public class TomcatFormFilter implements Filter {

           /**

             * Request.java

             * HttpServletRequestWrapper 進(jìn)行擴(kuò)充, 不影響原來的功能并能提供所

          有的 HttpServletRequest

             * 接口中的功能. 它可以統(tǒng)一的對 Tomcat 默認(rèn)設(shè)置下的中文問題進(jìn)行解決而只

          需要用新的 Request 對象替換頁面中的

             * request 對象即可.

             */

           class Request extends HttpServletRequestWrapper

           {

                public Request(HttpServletRequest request) {

                  super(request);

                }

             /**

             * 轉(zhuǎn)換由表單讀取的數(shù)據(jù)的內(nèi)碼.

             * ISO 字符轉(zhuǎn)到 GBK.

             */

             public String toChi(String input) {

                try {

                    byte[] bytes = input.getBytes("ISO8859-1");

                    return new String(bytes, "GBK");

                  }

                catch (Exception ex) {

                  }

                return null;

           }

                /**

                 * Return the HttpServletRequest holded by this object.

                 */

                private HttpServletRequest getHttpServletRequest()

                {

                    return (HttpServletRequest)super.getRequest();

                }

             /**

             * 讀取參數(shù) -- 修正了中文問題.

             */

                public String getParameter(String name)

                {

                  return

          toChi(getHttpServletRequest().getParameter(name));

                }

             /**

             * 讀取參數(shù)列表 - 修正了中文問題.

             */

                public String[] getParameterValues(String name)

                {

                    String values[] =

          getHttpServletRequest().getParameterValues(name);

                    if (values != null) {

                      for (int i = 0; i < values.length; i++) {

                        values[i] = toChi(values[i]);

                      }

                    }

                    return values;

                }

           }

           public void destroy() {

           }

           public void doFilter(ServletRequest request, ServletResponse

          response,

             FilterChain chain) throws IOException, ServletException {

              HttpServletRequest httpreq = (HttpServletRequest)request;

             if(httpreq.getMethod().equals("POST")) {

             request.setCharacterEncoding("GBK");

           } else {

             request = new Request(httpreq);

           }

           chain.doFilter(request, response);

           }

           public void init(FilterConfig filterConfig) throws

          ServletException {

           }

          }

          清單 8.5 過濾器代碼

          然后修改 web.xml 加入 Servlet 定義,修改后的代碼清單如下所示:

          <?xml version="1.0" encoding="UTF-8"?>

          <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

           <servlet>

             <description>

                This is the description of my J2EE component

             </description>

             <display-name>

                This is the display name of my J2EE component

             </display-name>

             <servlet-name>LoginServlet</servlet-name>

             <servlet-class>servlets.LoginServlet</servlet-class>

           </servlet>

           <filter>

             <filter-name>TomcatFormFilter</filter-name>

             <filter-class>filters.TomcatFormFilter</filter-class>

           </filter>

           <filter-mapping>

             <filter-name>TomcatFormFilter</filter-name>

             <url-pattern>/*</url-pattern>

           </filter-mapping>

           <servlet-mapping>

             <servlet-name>LoginServlet</servlet-name>

             <url-pattern>/login.aspx</url-pattern>

           </servlet-mapping>

           <welcome-file-list>

             <welcome-file>index.jsp</welcome-file>

           </welcome-file-list>

          </web-app>

          清單 8.6加入了過濾器的 web.xml 內(nèi)容

          清單中的粗斜體部分就是新加入的過濾器的映射信息。

          posted @ 2008-10-01 09:52 Qzi 閱讀(2487) | 評論 (1)編輯 收藏

          一.繼承關(guān)系和關(guān)聯(lián)聚集關(guān)系映射
          1.整個類層次使用一張表
          2.每個葉結(jié)點使用一張表,該表保存了該類自己的和所繼承的所有屬性
          3.每個類使用一張表,該表只保存OID以及對應(yīng)類自己的屬性(不含所繼承的屬性)

          1.“1對1”或“1對多”關(guān)系的映射,簡單地利用外鍵即可
          2.“多對多”關(guān)系的映射,引入一個新的表,專門記錄這種“多對多”關(guān)系

          二.編程步驟:事前準(zhǔn)備包括建立一個project并且加入外部庫
          新建一個Project HibernateSample,然后在Project上點右鍵,選擇Properties ? Java Build Path ? Libraries。選擇Add External JARs,然后將Hibernate目錄下的hibernate3.jar,以及Hibernate目錄下的lib文件夾中所有的jar文件添加進(jìn)來。
          另外我們還必須有MySQL的JDBC驅(qū)動,用上面的辦法同樣把mysql-connector-java-3.1.12-bin.jar添加進(jìn)我們的Build Path中。

          1.創(chuàng)建數(shù)據(jù)庫(例如User表)
          2.建立對應(yīng)數(shù)據(jù)庫的類的屬性與操作(例如User類)
          3.編寫映射數(shù)據(jù)庫表hibernate mapping,命名為***.hbm.xml(例如User.hbm.xml)
          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping>
           <class name="sample.User" table="user">
            <id name="id" column="id" type="java.lang.Integer">
             <generator class="native" />
            </id>
            <property name="name" column="name" type="java.lang.String" />
            <property name="age" column="age" type="java.lang.Integer" />
           </class>
          </hibernate-mapping>
          明顯可見關(guān)注點包括
          A)class中包中的類與數(shù)據(jù)庫中table的對應(yīng)
          B)property中 類中ID和屬性與table中字段的對應(yīng)

          4.編寫Hibernate配置文件hibernate configurarion file,通常命名:
          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
          <hibernate-configuration>
           <session-factory>
            <!-- 是否顯示實際操作數(shù)據(jù)庫時的SQL -->
            <property name="show_sql">true</property>
            <!-- SQL方言,這邊設(shè)定的是MySQL -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- JDBC驅(qū)動程序 -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- JDBC URL -->
            <property name="connection.url">jdbc:mysql://localhost/Sample</property>
            <!-- 數(shù)據(jù)庫用戶名 -->
            <property name="connection.username">root</property>
            <!-- 數(shù)據(jù)庫密碼 -->
            <property name="connection.password">123456</property>
            <!-- 以下設(shè)置對象與數(shù)據(jù)庫表格映像文件 -->
            <mapping resource="sample/User.hbm.xml"/>
           </session-factory>
          </hibernate-configuration>
          關(guān)注點包括:
          A)數(shù)據(jù)庫路徑, 數(shù)據(jù)庫用戶名, 數(shù)據(jù)庫密碼,
          B)還有就是指定數(shù)據(jù)庫映射文件mapping resource

          5.配置log4j.properties
          在src目錄下點右鍵,選擇import,然后選擇General ? File System,接著選擇Hibernate文件夾下的etc文件夾,再選擇log4j.properties文件,最后選擇Finish。
          關(guān)鍵配置文件:
          hbm是映射配置
          cfg是密碼,用戶,以及hbm指定配置
          properties是用于配置當(dāng)前數(shù)據(jù)庫連接的屬性配置

          6.編程操作數(shù)據(jù)庫過程
          使用對象增加數(shù)據(jù)項:
          A)Configuration配置Configuration config = new Configuration().configure();
          B)Session工廠獲得SessionFactory sessionFactory = config.buildSessionFactory();
          C)Session獲得Session session = sessionFactory.openSession();
          D)Transaction事務(wù)啟動Transaction tx = session.beginTransaction();
          E)建立映射數(shù)據(jù)的實體類(例如User的一個實例)
          F)session操作(例如session.save(user)插入到數(shù)據(jù)庫一個user的對象)
          G)關(guān)鍵的Transaction事務(wù)提交,tx.commit();
          H)清理包括Transaction對象,session對象,sessionFactory對象的有順序清理

          使用Criteria查詢數(shù)據(jù)
          A)配置Configuration,SessionFactory,Session與上面相同
          B)創(chuàng)建Criteria criteria=session.createCriteria(User.class);
          C)創(chuàng)建User列表List users = criteria.list();
          D)使用迭代器Iterator iterator = users.iterator();
          E)iterator.hasNext(),iterator.next()的使用
          F)criteria.add(Expression.eq("name","hibernateUser2"));加上查詢約束
          G)users = criteria.list();將會按照查詢約束得到列表.

          使用鼓勵的HQL的Query查詢
          A)創(chuàng)建Query例如Query query = session.createQuery("from User");
          B)獲得數(shù)據(jù)List uers = query.list();
          C)遍歷器使用Iterator iterator = users.iterator();又如iterator.hasNext();和iterator.next();
          D)使用過濾查詢
          query = session.createQuery("from User user where user.name like ?");
          query.setParameter(0, "hibernateUser2");Query的setParameter()方法第一個參數(shù)是指定 ? 出現(xiàn)的位置,從 0 開始,第二個參數(shù)則是設(shè)定查詢條件。
          然后再List uers = query.list();獲得的將是滿足username==hibernateUser2的條件的結(jié)果
          E)清除session和sessionFactory使用close方法.


          hibernate_rar

          posted @ 2008-10-01 09:49 Qzi 閱讀(348) | 評論 (0)編輯 收藏

          • validate: validate the project is correct and all necessary information is available
          • compile: compile the source code of the project
          • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
          • package: take the compiled code and package it in its distributable format, such as a JAR.
          • integration-test: process and deploy the package if necessary into an environment where integration tests can be run
          • verify: run any checks to verify the package is valid and meets quality criteria
          • install: install the package into the local repository, for use as a dependency in other projects locally
          • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

          There are two other Maven lifecycles of note beyond the default list above. They are

          • clean: cleans up artifacts created by prior builds
          • site: generates site documentation for this project

          官網(wǎng)文章:http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

          posted @ 2008-09-16 17:06 Qzi 閱讀(511) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 竹山县| 平凉市| 镇远县| 大新县| 石渠县| 章丘市| 琼海市| 临澧县| 镇远县| 西畴县| 昔阳县| 崇明县| 新沂市| 阿拉善盟| 宣恩县| 永春县| 茌平县| 清丰县| 万州区| 获嘉县| 沙河市| 佛山市| 郧西县| 合水县| 浦北县| 邵武市| 个旧市| 巴彦淖尔市| 从化市| 商洛市| 仙游县| 凌云县| 乌鲁木齐市| 驻马店市| 白银市| 手机| 阿拉善右旗| 新沂市| 南丰县| 天长市| 五大连池市|