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

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

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

    Javaphua Blog

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      46 Posts :: 5 Stories :: 46 Comments :: 0 Trackbacks

    2007年8月19日 #

    一:一個目標

    一艘沒有航行目標的船,任何方向的風都是逆風

    1、你為什么是窮人,第一點就是你沒有立下成為富人的目標

    2、你的人生核心目標是什么?

    杰出人士與平庸之輩的根本差別并不是天賦、機遇,而在于有無目標。

    3、起跑領先一步,人生領先一大步:成功從選定目標開始

    4、賈金斯式的人永遠不會成功

    為什么大多數(shù)人沒有成功?真正能完成自己計劃的人只有5%,大多數(shù)人不是將自己的目標舍棄,就是淪為缺乏行動的空想

    5、如果你想在35歲以前成功,你一定在25至30歲之間確立好你的人生目標

    6、每日、每月、每年都要問自己:我是否達到了自己定下的目標

    二:兩個成功基點

    好位置,調(diào)正心態(tài),努力沖刺,35歲以前成功

    (一)人生定位

    1、人怕入錯行:你的核心競爭力是什么?

    2、成功者找方法,失敗者找借口

    3、從三百六十行中選擇你的最愛

    人人都可以創(chuàng)業(yè),但卻不是人人都能創(chuàng)業(yè)成功

    4、尋找自己的黃金寶地

    (二)永恒的真理:心態(tài)決定命運,35歲以前的心態(tài)決定你一生的命運

    1、不滿現(xiàn)狀的人才能成為富翁

    2、敢于夢想,勇于夢想,這個世界永遠屬于追夢的人

    3、 35歲以前不要怕,35歲以后不要悔

    4、出身貧民,并非一輩子是貧民,只要你永遠保持那顆進取的心。中國成功人士大多來自小地方

    5、做一個積極的思維者

    6、不要敗給悲觀的自己

    有的人比你富有一千倍,他們也會比你聰明一千倍么?不會,他們只是年輕時心氣比你高一千倍。

    人生的好多次失敗,最后并不是敗給別人,而是敗給了悲觀的自己。

    7、成功者不過是爬起來比倒下去多一次

    8、寧可去碰壁,也不要在家里面壁

    克服你的失敗、消極的心態(tài)

    (1)找個地方喝點酒

    (2)找個迪廳跳跳舞

    (3)找?guī)团笥奄┵┥?

    (4)積極行動起來

    三:三大技巧

    1、管理時間:你的時間在哪里,你的成就就在哪里。

    把一小時看成60分鐘的人,比看作一小時的人多60倍

    2、你不理財,財不理你

    3、自我管理,游刃有余

    (1)創(chuàng)業(yè)不怕本小,腦子一定要好

    (2)可以開家特色店

    (3)做別人不愿做的生意

    四:四項安身立命的理念

    35歲以前一定要形成個人風格

    1、做人優(yōu)于做事

    做事失敗可以重來,做人失敗卻不能重來

    (1)做人要講義氣

    (2)永不氣餒

    2、豁達的男人有財運,豁達的女人有幫夫運

    35歲以前搞定婚姻生活

    3、忠誠的原則:35歲以前你還沒有建立起忠誠美譽,這一缺點將要困擾你的一生

    4、把小事做細,但不要耍小聰明

    中國人想做大事的人太多,而愿把小事做完美的人太少

    五:五分運氣

    比爾·蓋茨說:人生是不公平的,習慣去接受它吧

    1、人生的確有很多運氣的成人:謀事在人,成事在天:中國的古訓說明各占一半

    2、機會時常意外地降臨,但屬于那些不應決不放棄的人

    3、抓住人生的每一次機會

    機會就像一只小鳥,如果你不抓住,它就會飛得無影無蹤

    4、者早一步,愚者晚一步

    六:六項要求

    1、智慧

    (1)別人可你以拿走你的一切,但拿不走你的智慧

    (2)巧妙運用自己的智慧

    (3)智者與愚者的區(qū)別

    2、勇氣

    (1)勇氣的力量有時會讓你成為“超人”

    (2)敢于放棄,敢于“舍得”

    3、培養(yǎng)自己的“領導才能、領袖氣質(zhì)”

    (1)激情感染別人

    (2)“三·七法則”實現(xiàn)領袖氣質(zhì)

    (3)拍板決斷能力

    (4)人格魅力

    4、創(chuàng)造性:不要做循規(guī)蹈矩的人

    25-35歲是人生最有創(chuàng)造性的階段,很多成功人士也都產(chǎn)生在這一階段

    5、明智

    (1)知道自己的長處、短處,定向聚焦

    (2)盡量在自己的熟悉的領域努力

    6、持之以恒的行動力:在你選定行業(yè)堅持十年,你一定會成為大贏家

    七:七分學習

    1、知識改變命運

    2、35歲以前學會你行業(yè)中必要的一切知識

    a)每天淘汰你自己

    b)在商言商

    3、太相信的書人,只能成為打工仔

    4、思考、實踐、再思考、再實踐

    八:八分交際

    朋友多了路好走

    1、智商很重要,情商更重要:35歲以前建立起人際關系網(wǎng)

    2、人脈即財脈:如何搞好人際關系

    3、交友有原則

    4、善于溝通:35歲以前要鍛煉出自己的演講才能

    九:九分習慣

    習慣的力量是驚人的,35歲以前養(yǎng)成的習慣決定著你的成功的大小

    1、積極思維的好習慣

    2、養(yǎng)成高效工作的好習慣

    (1)辦公

    (2)生活可以不拘小節(jié),但要把工作做細

    (3)學習聆聽,不打斷別人說話

    3、養(yǎng)成鍛煉身體的好習慣

    4、廣泛愛好的好習慣

    5、快速行動的好習慣

    十:十分自信

    1、自信是成功的精神支柱

    2、自信方能贏得別人的信任

    3、把自信建立在創(chuàng)造價值的基礎上

    4、如何建立自信

    (1)為自己確立目標

    (2)發(fā)揮自己的長處

    (3)做事要有計劃

    (4)做事不拖拉

    (5)輕易不要放棄

    (6)學會自我激勵

    (7)不要讓自己成為別人 十一: 11個需要避開的成功陷阱

    1、只有功勞,沒有苦勞

    2、不要“懷才不遇“,而要尋找機遇

    3、不要想發(fā)橫財

    4、不要為錢而工作,而讓錢為你工作

    5、盲目跟風,人云亦云,人做我也做

    6、小富即安,不思進取,知足常樂

    7、承認錯誤而非掩飾錯誤

    8、腳踏實地而非想入非非

    9、野心太大而不是信心十足

    10、反復跳槽不可取

    11、眼高手低

    12、不擇手段

    十二:十二分努力

    沒有人能隨隨便便成功

    1、小不是成功,大不是成功,由小變大才是成功

    2、中國社會進入微利時代:巧干+敢干+實干=成功

    3、努力嘗試就有成功的可能

    4、做任何事情,盡最大努力

    5、把事情當成事業(yè)來做

    6、我看打工者

    7、祝你早日掘到第一桶金來源

    posted @ 2007-08-19 00:36 Javaphua 閱讀(576) | 評論 (0)編輯 收藏

    2007年8月13日 #

    Ajax 基礎和例子

    Ajax -- Asynchronous JavaScript and XML Ajax 使用的是JavaScript + DOM + CSS + XMLHttpRequest的技術,是目前Web2.0更加流行的技術.

    與傳統(tǒng)網(wǎng)絡應用相比,Ajax具備更加直觀和方便的用戶交互. 為什么呢? 比如, 我們需要點擊鏈接或按鈕來激發(fā)事件,而使用Ajax只要移動鼠標或者在一個輸入框輸入字母已經(jīng)可以觸發(fā)事件. 傳統(tǒng)的網(wǎng)絡應用是基于page-driven的模式, 使用的是'click, wait a refresh the whole page' 模式, 而Ajax是通過data-driven的模式來提供網(wǎng)絡頁面的, 采用的是部分頁面更新的模式, 頁面中只更新有新數(shù)據(jù)的部分,其它的部分依然不變,所以依然可以操作.

    Ajax就象它的名字一樣, 可以異步地在瀏覽器和服務器之間進行交流, 當服務器端處理submit過來的數(shù)據(jù)的同時, 客戶依然可以正常地處理瀏覽器端同一頁面的其他功能.

    那么Ajax和傳統(tǒng)網(wǎng)絡應用相比是怎樣工作的呢?下面這張圖可以讓你了解清楚.

    傳統(tǒng)的網(wǎng)絡應用在瀏覽器和服務器之間的交流是直來直去的, 而Ajax的網(wǎng)絡應用在瀏覽器中有一個Ajax引擎,這個引擎實際上就是一個Javascript的對象XMLHttpRequest, 而XMLHttpRequest負責瀏覽器和服務器的異步交流.

    XMLHttpRequest既然是Javascript的對象, 當然需要一些Javascript的代碼來生成, 它目前支持大部分的瀏覽器,包括了Mozilla, Firefox等等.

    服務器端依然可以使用傳統(tǒng)的技術如servlet, JSP, JSF,Struts等等,但會有一些小的限制,比如客戶端會發(fā)更頻繁的請求,而響應這些請求的類型包括text/xml, text/plain, text/json, text/javascript.

    整個Ajax的操作過程分為七步:

    1.A client event occurs

    2.An XMLHttpRequest object is created

    3.The XMLHttpRequest object is configured

    4.The XMLHttpRequest object makes an async. request

    5.The ValidateServlet returns an XML document containing the result

    6.The XMLHttpRequest object calls the callback() function and processes the result

    7.The HTML DOM is updated

    我們分別來看看這七個步驟是怎么做的: 1. A client event occurs,

    <input type="text"
    size="20"
    id="userid"
    name="id"
    onkeyup="validateUserId();">

    比如我們手頭上有這樣一段Javascript的代碼:  這是一個ID為userid的文本框,里面包含了一個Javascript的函數(shù),當我們在文本框里打入一個英文字母時,會激發(fā)onkeyup的事件,從而激發(fā)validateUserId的Javascript的函數(shù).

    2.An XMLHttpRequest object is created

    var req;
    function initRequest() {
    if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    isIE = true;
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    function validateUserId() {
    initRequest();
    req.onreadystatechange = processRequest;
    if (!target) target = document.getElementById("userid");
    var url = "validate?id=" + escape(target.value);
    req.open("GET", url, true);
    req.send(null);
    }

    validateUserId的Javascript的函數(shù)調(diào)用initRequest函數(shù)生成XMLHttpRequest對象, 大家注意到在initRequest函數(shù)里面有兩種生成XMLHttpRequest的方法,這是針對不同的瀏覽器的做法,對于Mozilla,我們可以直接使用"new XMLHttpRequest()”, 而對于IE,我們需要生成ActiveX對象.

    3.The XMLHttpRequest object is configured

    rvalidateUserId的Javascript的函數(shù)包含一句req.onreadystatechange = processRequest; 這是通過設定XMLHttpRequest對象里面的onreadystatechange特性為回調(diào)函數(shù).

    4.The XMLHttpRequest object makes an async. request

    if (!target) target = document.getElementById("userid");
    var url = "validate?id=" + escape(target.value);
    req.open("GET", url, true);
    req.send(null);

    然后XMLHttpRequest調(diào)用open方法和服務器交流, open方法有三個參數(shù), HTTP方法是Get還是Post, 服務器端的URL, 方式采取異步還是同步.

    5.The ValidateServlet returns an XML document containing the result

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
    String targetId = request.getParameter("id");
    if ((targetId != null) && !accounts.containsKey(targetId.trim())) {
    response.setContentType("text/xml ");
    response.setHeader("Cache-Control", "no-cache");
    response.getWriter().write("<valid>true</valid>");
    } else {
    response.setContentType("text/xml ");
    response.setHeader("Cache-Control", "no-cache");
    response.getWriter().write("<valid>false</valid>");
    }
    }

    然后是服務器端ValidateServlet的響應,首先Content type設為text/xml, Cache-Control設為no-cache, 最后會返回true或者false的xml格式響應.

    6.The XMLHttpRequest object calls the callback() function and processes the result

    function processRequest() {
    if (req.readyState == 4) {
    if (req.status == 200) {
    var message = ...;

    現(xiàn)在控制交回給客戶端, 由于我們設定了回調(diào)函數(shù)為processRequest, 那么當響應從服務器端回到客戶端瀏覽器,就激發(fā)了processRequest函數(shù), 我們在processRequest函數(shù)中檢查XMLHttpRequest對象的readyState狀態(tài)是否為4和status狀態(tài)是否為200,如果兩者同時成立,就代表服務器端的數(shù)據(jù)已經(jīng)成功返回給客戶端,那么就可以執(zhí)行下面的處理.

     7.The HTML DOM is updated.

    接收完服務器端傳回來的數(shù)據(jù)后,瀏覽器開始著手顯示接收回的數(shù)據(jù).

    我們通過頁面里面的<div>元素來唯一的表示一個對象給DOM的API使用. 比如確定html頁面某一處的需要顯示的信息文本對象,我們可以使用userIdMessage唯一的標簽來做引用給DOM的API使用. 如下面這段代碼:

    23.<body>
    24. <div id="userIdMessage"></div>
    25.</body>

    一但你有了唯一確定的引用,你就可以使用DOM的API對其進行隨心所欲的操作,如屬性的修改等等,比如下面這段代碼:

    1. <script type="text/javascript">
    2. function setMessageUsingDOM(message) {
    3. var userMessageElement = document.getElementById("userIdMessage");
    4. var messageText;
    5. if (message == "false") {
    6. userMessageElement.style.color = "red";
    7. messageText = "Invalid User Id";
    8. } else {
    9. userMessageElement.style.color = "green";
    10. messageText = "Valid User Id";
    11. }
    12. var messageBody = document.createTextNode(messageText);
    13. // if the messageBody element has been created simple replace it otherwise
    14. // append the new element
    15. if (userMessageElement.childNodes[0]) {
    16. userMessageElement.replaceChild(messageBody,
    17. userMessageElement.childNodes[0]);
    18. } else {
    19. userMessageElement.appendChild(messageBody);
    20. }
    21.}
    22.</script>
    23.<body>
    24. <div id="userIdMessage"></div>
    25.</body>

    在這里javascript通過了getElementById方法得到了userIdMessage對象,然后對服務器端返回的數(shù)據(jù)進行對比,如果值是true,在userIdMessage里添加文本"Valid User Id", 如果值是false,則在userIdMessage里添加文本"Invalid User Id".

    大概就是這樣的一個狀況,那么在Ajax里面的XMLHttpRequest還有很多方法和屬性, 包括:

    方法:


    • open(“HTTP method”, “URL”, syn/asyn)
    > Assigns HTTP method, destination URL, mode
    • send(content)
    > Sends request including string or DOM object data
    • abort()
    > Terminates current request
    • getAllResponseHeaders()
    > Returns headers (labels + values) as a string
    • getResponseHeader(“header”)
    > Returns value of a given header
    • setRequestHeader(“label”,”value”)
    > Sets Request Headers before sending

    屬性:

    • onreadystatechange
    > Set with an JavaScript event handler that fires at each
    change
    • readyState – current status of request
    > 0 = uninitialized
    > 1 = loading
    > 2 = loaded
    > 3 = interactive (some data has been returned)
    > 4 = complete
    • status
    > HTTP Status returned from server: 200 = OK

    • responseText
    > String version of data returned from the server
    • responseXML
    > XML document of data returned from the server
    • statusText
    > Status text returned from server

     

    posted @ 2007-08-13 09:31 Javaphua 閱讀(407) | 評論 (0)編輯 收藏

    2007年7月20日 #

    tomcat5.5.x 配置記錄。
     
    1.下載:
    http://www.eu.apache.org/dist/jakarta/tomcat-5/
    http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-admin.zip
    http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-compat.zip
    http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x.zip
    http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-deployer.zip
    jakarta-tomcat-5.5.x.zip
    jakarta-tomcat-5.5.x-compat.zip
    jakarta-tomcat-5.5.x-admin.zip
    (Tomcat 默認是沒有內(nèi)置admin模塊了
    Tomcat's administration web application is no longer installed by default. Download and install the "admin" package to use it. )
    都解壓到同一個目錄下面。比如:D:\jakarta-tomcat-5.5.x\
    (如果使用jdk1.4,才需要compat.zip用jdk1.5就可以免了這個。)
     
    2.修改jakarta-tomcat-5.5.x\conf\tomcat-users.xml.
    添加管理員賬號lizongbo,密碼為lizongbopass.
    新xml如下:
    <?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
      <role rolename="tomcat"/>
      <role rolename="role1"/>
      <role rolename="manager"/>
      <role rolename="admin"/>
      <user username="tomcat" password="tomcat" roles="tomcat"/>
      <user username="role1" password="tomcat" roles="role1"/>
      <user username="both" password="tomcat" roles="tomcat,role1"/>
      <user username="lizongbo" password="lizongbopass" roles="admin,manager"/>
    </tomcat-users>
     
    3.修改jakarta-tomcat-5.5.x\conf\server.xml來解決編碼問題。
    (給Connector 添加URIEncoding參數(shù),參考http://blog.csdn.net/darkxie/archive/2004/10/25/TOMCATAPP.aspx)
    (可以設置成GB18030)
        <Connector port="8080"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="200"
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"
                   compression="on" compressionMinSize="2048"
          noCompressionUserAgents="gozilla, traviata"
          compressableMimeType="text/html,text/xml"/>
     
        <Connector port="8009"
                   enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="GBK"/>
     

    4.啟用支持gzip壓縮.
    (http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&i=81169)
    添加下列屬性
     compression="on"
          compressionMinSize="2048"
          noCompressionUserAgents="gozilla, traviata"
          compressableMimeType="text/html,text/xml"
     
    5.設置虛擬主機。
    在jakarta-tomcat-5.5.x\下建立文件夾vhost\www.mydomain.com。
    然后修改jakarta-tomcat-5.5.x\conf\server.xml
     
    <Engine defaultHost="localhost" name="Catalina">
          <Host appBase="vhost/www.mydomain.com" name="www.mydomain.com">
          </Host>
          <Host appBase="webapps" name="localhost">
          </Host>
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
        </Engine>
     
    6.添加數(shù)據(jù)庫驅(qū)動,更新mail.jar和actiovation.jar
    復制mysql-connector-java-3.0.16-ga-bin.jar,pg74.215.jdbc3.jar到 jakarta-tomcat-5.5.x\common\lib\
    還有javamail 1.3.2的mail.jar,jaf-1_0_2的 activation.jar
    msSQl 2000 JDBC sp3,msbase.jar,msutil,jar,mssqlserver.jar
     
     
    7.配置SSL
    參考 http://jakarta.apache.org/tomcat/tomcat-5.5-doc/ssl-howto.html
    D:\j2sdk1.4.2_06\bin>%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
    輸入keystore密碼:  lizongbossl
    您的名字與姓氏是什么?
      [tomcat5.5.x]:  tomcat5.5.x
    您的組織單位名稱是什么?
      [jakarta]:  jakarta
    您的組織名稱是什么?
      [apache]:  apache
    您所在的城市或區(qū)域名稱是什么?
      [hzcity]:  hzcity
    您所在的州或省份名稱是什么?
      [gdp]:  gdp
    該單位的兩字母國家代碼是什么
      [CN]:  CN
    CN=tomcat5.5.x, OU=jakarta, O=apache, L=hzcity, ST=gdp, C=CN 正確嗎?
      [否]:  y
     
    輸入<tomcat>的主密碼
            (如果和 keystore 密碼相同,按回車):
    (必須密碼一致,因此直接回車)
    然后再把userhome(例如:C:\Documents and Settings\lizongbo\)下的.keystore復制到
    tomcat的conf\目錄下。
     (例如:D:\jakarta-tomcat-5.5.x\conf\.keystore )
    配置jakarta-tomcat-5.5.x\conf\server.xml
    加上
        <Connector port="8443"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" disableUploadTimeout="true"
                   acceptCount="100" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLS"
               keystoreFile="conf/.keystore"
               keystorePass="lizongbossl"> <!--與先前設置的密碼一致-->
        </Connector>
    8.禁止文件目錄列表,
    修改jakarta-tomcat-5.5.x\conf\web.xml,把listing設置為false
     
        <servlet>
            <servlet-name>default</servlet-name>
            <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
            </init-param>
            <init-param>
                <param-name>listings</param-name>
                <param-value>true</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
     9.指定了自己的javaEncoding
    (參考 http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-webapp/ch6/ch6-4.html )

        <servlet>
            <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
            <init-param>
                <param-name>fork</param-name>
                <param-value>false</param-value>
            </init-param>
                    <init-param>
                <param-name>javaEncoding</param-name>
                <param-value>GB18030</param-value>
            </init-param>
            <init-param>
                <param-name>xpoweredBy</param-name>
                <param-value>true</param-value>
            </init-param>
            <load-on-startup>3</load-on-startup>
        </servlet>
     10.添加rar,iso等的mime-type映射
    避免在瀏覽器里直接打開。
    <mime-mapping>
    <extension>mht</extension>
    <mime-type>text/x-mht</mime-type>
    </mime-mapping>
    <mime-mapping>
            <extension>rar</extension>
            <mime-type>application/octet-stream</mime-type>
        </mime-mapping>
        <mime-mapping>
            <extension>iso</extension>
            <mime-type>application/octet-stream</mime-type>
        </mime-mapping>
        <mime-mapping>
            <extension>ape</extension>
            <mime-type>application/octet-stream</mime-type>
        </mime-mapping>
        <mime-mapping>
            <extension>rmvb</extension>
            <mime-type>application/octet-stream</mime-type>
        </mime-mapping>
        <mime-mapping>
            <extension>ico</extension>
            <mime-type>image/x-icon</mime-type>
        </mime-mapping>
    10.1對html靜態(tài)頁面設置編碼
    <!--  修改下面兩行以支持靜態(tài)超文本的自動編碼 
      -->
     
     <mime-mapping>
      <extension>htm</extension> 
      <mime-type>text/html;charset=gb2312</mime-type> 
      </mime-mapping>
     <mime-mapping>
      <extension>html</extension> 
      <mime-type>text/html;charset=gb2312</mime-type> 
      </mime-mapping>
      </web-app>
     
    11.添加welcome-file-list,并調(diào)整順序。
     <welcome-file-list>   
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>

    posted @ 2007-07-20 16:07 Javaphua 閱讀(797) | 評論 (0)編輯 收藏

    2007年6月5日 #

     

     java中判斷字符串是否為數(shù)字的三種方法
    1用JAVA自帶的函數(shù)
    public static boolean isNumeric(String str){
      
    for (int i = str.length();--i>=0;){   
       
    if (!Character.isDigit(str.charAt(i))){
        
    return false;
       }
      }
      
    return true;
     }

    2用正則表達式
    public static boolean isNumeric(String str){
        Pattern pattern = Pattern.compile("[0-9]*");
        return pattern.matcher(str).matches();   
     }

    3用ascii碼

    public static boolean isNumeric(String str){
       for(int i=str.length();--i>=0;){
          int chr=str.charAt(i);
          if(chr<48 || chr>57)
             return false;
       }
       return true;
    }
    posted @ 2007-06-05 14:17 Javaphua 閱讀(121544) | 評論 (23)編輯 收藏

    2007年5月17日 #

    windows中大家都知道,JAVA程序啟動時都會JVM都會分配一個初始內(nèi)存和最大內(nèi)存給這個應用程序。這個初始內(nèi)存和最大內(nèi)存在一定程度都會影響程序的性能。比如說在應用程序用到最大內(nèi)存的時候,JVM是要先去做垃圾回收的動作,釋放被占用的一些內(nèi)存。
    所以想調(diào)整Tomcat的啟動時初始內(nèi)存和最大內(nèi)存就需要向JVM聲明,一般的JAVA程序在運行都可以通過中-Xms -Xmx來調(diào)整應用程序的初始內(nèi)存和最大內(nèi)存:
    如:java -Xms64m -Xmx128m a.jar.
    tomcat
    的啟動程序是包裝過的,不能直接使用java -X..... tomcat.*來改變內(nèi)存的設置。在Tomcat在改變這個設置
    有兩種方法:
    1.
    就需要在環(huán)境變量中加上TOMCAT_OPTS, CATALINA_OPTS兩個屬性,
    SET CATALINA_OPTS= -Xms64m -Xmx512m;
    ms
    是最小的,mx是最大,64m, 512m分別是指內(nèi)存的容量.
    2.
    修改Catalina.bat文件
    166“rem Execute Java with the applicable properties ”以下每行
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    中的%CATALINA_OPTS% 替換成-Xms64m -Xmx512m(把四行內(nèi)的%CATALINA_OPTS%都替換掉,包括兩邊的%

    3.啟動%tomcat%\bin\tomcat5w.exe,在java項中設置初始化內(nèi)存的大小

    測試tomcat大小,jsp頁面
    <%
    Runtime lRuntime = Runtime.getRuntime();
    out.println("*** BEGIN MEMORY STATISTICS ***<br/>");
    out.println("Free  Memory: "+lRuntime.freeMemory()+"<br/>");
    out.println("Max   Memory: "+lRuntime.maxMemory()+"<br/>");
    out.println("Total Memory: "+lRuntime.totalMemory()+"<br/>");
    out.println("Available Processors : "+lRuntime.availableProcessors()+"<br/>");
    out.println("*** END MEMORY STATISTICS ***");
    %>
    posted @ 2007-05-17 12:59 Javaphua 閱讀(7220) | 評論 (1)編輯 收藏

    2007年5月10日 #

          oracle 10.2.0 在不插網(wǎng)線安裝時,網(wǎng)絡由用戶驗證,安裝完畢后重啟機子,插網(wǎng)線啟動oracle服務時,總是出現(xiàn)監(jiān)聽失敗,這時可進行如下修改:打開oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = D:\soft\oracle\product\10.2.0\db_1)
          (PROGRAM = extproc)
        )
      )

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
      )
    中紅色標識的localhost改為機器名,如:mycoputer

    posted @ 2007-05-10 14:11 Javaphua 閱讀(774) | 評論 (1)編輯 收藏

    2007年4月3日 #

    最新整理apache-2.0.43和tomcat-4.1.12集成

    ---------------------------------------------------------------------------­-----
    作者:luyongshou 2005-02-02 15:04:45 來自:Linux先生  在此介紹一下我在RedHat Linux 7.2下裝Apache與Tomcat4整合的過程,重點講述mod_webapp.so的制作方法,
      以及在虛擬主機環(huán)境下的配置、管理和應用,經(jīng)測試已經(jīng)成功。希望對各位有所幫助,如有錯誤也請指正。

    一、正確安裝Tomcat4
      必要軟件的安裝,如下:
      1、Java SDK
      版本1.3.1或1.4,建議安裝在/usr/java下,并做一個jdk的軟鏈接。
      如果在裝版本1.3.1的SDK出現(xiàn)問題,請閱讀文檔:http://java.sun.com/j2se/1.3/install-linux-sdk.html
      2、Tomcat4
      建議安裝最新release版本的二進制文件安裝包。當前最新的tomcat版本是4.1.12。
      下載地址:
      http://jakarta.apache.org/builds/ja...t-4.1.12.tar.gz
      下載后接壓到一個目錄 "tar xvzf jakarta-tomcat-4.1.12.tar.gz"
    本例將tomcat安裝在/opt目錄下,并做了個tomcat的軟鏈接。
      設置如下環(huán)境變量并啟用:
      PATH=$PATH:/usr/java/jdk/bin:/usr/java/jdk/jre/bin
      JAVA_HOME=/usr/java/jdk
      export JAVA_HOME
      CLASSPATH="./:/usr/java/jdk/lib:/usr/java/jdk/jre/lib"
      export CLASSPATH
      CATALINA_HOME=/opt/tomcat
      export CATALINA_HOME

      建議單建一個用戶tomcat,將其設成/opt/tomcat以下所有目錄文件的屬主,并由它啟動tomcat:
      # useradd tomcat
      # chown -R tomcat:tomcat /opt/tomcat
      # su - tomcat -c "/opt/tomcat/bin/startup.sh"

      訪問http://localhost:8080/ 應能看到tomcat安裝成功的頁面。

    ===================================================================
    如果想和apache集成需要修改tomcat/conf/server.xml這個文件的

    <!-- Define an Apache-Connector Service -->

    <Service name="Tomcat-Apache">
    <!--
    <Connector className="org.apache.catalina.connector.warp.WarpConnector"
    port="8008" minProcessors="5" maxProcessors="75"
    enableLookups="true" appBase="webapps"
    acceptCount="10" debug="0"/>

    <Engine className="org.apache.catalina.connector.warp.WarpEngine"
    name="Apache" debug="0">

    <Logger className="org.apache.catalina.logger.FileLogger"
    prefix="apache_log." suffix=".txt"
    timestamp="true"/>

    <Realm className="org.apache.catalina.realm.MemoryRealm" />

    </Engine>

    </Service>
    -->
    </Server>

    中的"<!--"和"-->"刪掉,其實就是解除注釋,因為這個網(wǎng)站是專門用來和apache的集成的。

    二、Apache與Tomcat4的整合

      1、首先安裝Apache,
      請注意Apache必須安裝DSO模式,即在執(zhí)行./configure時須加上 --enable-module=so

      默認安裝到/usr/local/apache目錄下。本例安裝的apache的版本是2.0.43系列的。

      2、制作mod_webapp.so
      需要以下軟件包:
      jakarta-tomcat-connectors-4.x.xx-src.tar.gz
      下載地址在tomcat對應版本的src目錄下。例如,我安裝的tomcat版本是4.1.12,則現(xiàn)在所需要的軟件包的位置是:
      http://jakarta.apache.org/builds/ja...1.12-src.tar.gz
      apr-0.9.1.tar.gz
      下載地址:http://www.apache.org/dist/apr/apr-0.9.1.tar.gz
      autoconf-2.52-ximian.1.i386.rpm
      下載地址:http://rpmfind.net/linux/RPM/helix/...ian.1.i386.html
      先用rpm安裝autoconf-2.52,因為下面的安裝將要用到;
      然后解開jakarta-tomcat-connectors-4.1.12-src.tar.gz,生成jakarta-tomcat-connectors­-4.1.12-src目錄,
      進入jakarta-tomcat-connectors-4.1.12-src/webapp的目錄里,再把apr-0.9.1.tar.gz解到這個目錄下­,
      并把剛生成的目錄apr-0.9.1的目錄名改成apr。
      還是在webapp目錄,運行以下命令:
      # support/buildconf.sh
      此時如果autoconf的版本低于2.52的話會報錯退出,所以必須先安裝autoconf-2.52。
      當命令成功結束后會在當前目錄下生成configure文件。
      依次運行以下命令:

      # ./configure --with-apxs=/usr/local/apache/bin/apxs
      # make
      # cp apache-2.0/mod_webapp.so /usr/local/apache/modules

      現(xiàn)在mod_webapp.so已經(jīng)制作好了,并已經(jīng)拷貝到apache的modules目錄下。
      編輯apache的配置文件,在最后加上如下幾行:
     ?。剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑?
      LoadModule webapp_module modules/mod_webapp.so
      WebAppConnection Connector warp localhost:8008
      WebAppDeploy examples Connector /examples
     ?。剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑?

      運行以下命令:
      # /usr/local/apache/bin/apachectl configtest

    如果出現(xiàn)錯誤說你的apache的httpd.conf有問題后面的錯誤是"inviad virual host"

    就說明你的httpd.conf的ServerName沒有設,把ServerName前面的"#"去掉就可以了?。ㄟ@是差了好多資料才得到的答案,我也是在這­兒困惑了好多天了)

      只要出現(xiàn)“Syntax OK”就表明mod_webapp.so已經(jīng)安裝成功了。
      啟動apache
      # /usr/local/apache/bin/apachectl start
      訪問http://localhost/examples 就可以看到tomcat的例子程序了。

    注意:一定要先啟動tomcat 然后再重新啟動apache!

    三、虛擬主機下的配置、管理和應用

      下面以一個例子來說明虛擬主機如何同時使用Apache與Tomcat4

      虛擬主機host1的目錄結構如下所示:

      /www               
       |---host1  虛擬主機host1的主目錄
       |  |--htdocs  普通根目錄:用于顯示靜態(tài)頁面或php程序
       |  |----logs  apache訪問日志
       |  |----webapps java應用目錄(新加,與tomcat的webapps目錄無任何關聯(lián))
       |     |--ROOT jsp根目錄:用于顯示jsp頁面程序
       |     |----jive 一套java應用實例
       |---host2   虛擬主機host2的主目錄
      ............

      原來的apache的配置文件是這樣配置的:

      =====================================
      NameVirtualHost xxx.xxx.xxx.xxx

      < VirtualHost xxx.xxx.xxx.xxx >
      ServerName host1.mydomain.com
       ServerAdmin webmas...@mydomain.com
       DocumentRoot /www/host1/htdocs
       ErrorLog /www/host1/logs/error_log
      CustomLog /www/host1/logs/access_log common
      < /VirtualHost >
      .............

     ?。剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑?

      現(xiàn)在要讓虛擬主機host1能同時使用Apache與Tomcat4,需要做如下配置:

      1、編輯tomcat的配置文件server.xml,在最后的部分做如下修改:

      =====================================
      < !-- Define an Apache-Connector Service -- >

      < Service name="Tomcat-Apache" >

      < Connector className="org.apache.catalina.connector.warp.WarpConnector"
      port="8008" minProcessors="5" maxProcessors="75"
      enableLookups="true" appBase="webapps"
      acceptCount="10" debug="0"/ >

    < Engine className="org.apache.catalina.connector.warp.WarpEngine"
      name="Apache" debug="0" >

      < Logger className="org.apache.catalina.logger.FileLogger"
      prefix="apache_log." suffix=".txt"
    timestamp="true"/ >

      < Realm className="org.apache.catalina.realm.MemoryRealm" / >

    < !-- 下面是新加的內(nèi)容 -- >

      < Host name="host1.mydomain.com" debug="0" appBase="/www/host1/webapps"
    uppackWars="true" autoDeploy="true" >
      < Context path="" docBase="ROOT" debug="0"/ >
    < !-- 下面套用的是tomcat自帶的管理頁面,在虛擬主機下也可使用 -- >
    < Context path="/manager" debug="0" privileged="true"
      docBase="/opt/tomcat/server/webapps/manager"/ >
      < Context path="/jive" docBase="jive" debug="0"
    reloadable="true" crossContext="true"/ >
      < Logger className="org.apache.catalina.logger.FileLogger"
    prefix="host1_log." suffix=".txt"
      timestamp="true"/ >
      < /Host >

    < !-- 新加內(nèi)容結束 -- >

    < /Engine >

      < /Service >
      =====================================
      2、編輯tomcat的管理權限文件tomcat-users.xml,在中間加一行:
    < user username="myname" password="mypasswd" roles="standard,manager"/ >
      3、編輯apache的配置文件,做如下修改
     ?。剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑?
      LoadModule webapp_module libexec/mod_webapp.so
      AddModule mod_webapp.c
      WebAppConnection warpConnection warp localhost:8008
      NameVirtualHost xxx.xxx.xxx.xxx
      < VirtualHost xxx.xxx.xxx.xxx >
      ServerName host1.mydomain.com
       ServerAdmin webmas...@mydomain.com
       DocumentRoot /www/host1/htdocs
       ErrorLog /www/host1/logs/error_log
       CustomLog /www/host1/logs/access_log common

       WebAppDeploy ROOT warpConnection /

      #注:此行的作用是把ROOT目錄作為虛擬主機URL的根,并使前面定義的根htdocs失效。
      #但如果不想整個虛擬主機都使用jsp頁面程序,而想使用大量靜態(tài)頁面或php程序的話,
      #就要使用下面這行,并把所有的靜態(tài)頁面和php程序放在htdocs目錄下。
      # WebAppDeploy ROOT warpConnection /jsp

       WebAppDeploy manager warpConnection /manager
      WebAppDeploy jive warpConnection /jive
      #在server.xml里每定義一個都要在這里加一條WebAppDeploy。

      < /VirtualHost >
     ?。剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑?

      4、將tomcat用戶設成/www/host1/webapps以下所有目錄文件的屬主。

      要注意的是,以后如果想上傳或改動該目錄以下的文件,都要將其屬主改成tomcat。
     ?。ㄈ绻恢笔且詒oot身份運行tomcat,這步可以省略。)

      # chown -R tomcat:tomcat /www/host1/webapps
      5、重起tomcat:
      # su - tomcat -c "/opt/tomcat/bin/shutdown.sh"
      # su - tomcat -c "/opt/tomcat/bin/startup.sh"
      6、重起apache:
      /usr/local/apache/bin/apachectl restart

      此時訪問http://host1.mydomain.com/manager/html 會提示輸入密碼,在輸入正確的 myname和mypasswd后,就會看到“Tomcat Web Application Manager”的頁面,里面的 Application Path已經(jīng)是虛擬主機里配置的信息了,并可以對其進行管理。
      到此虛擬主機下的配置和管理就全部完成,剩下的事情就是測試和應用了。在上面的例子
      里我們已經(jīng)安裝了jive,經(jīng)測試已經(jīng)可以正常運行

    posted @ 2007-04-03 11:42 Javaphua 閱讀(503) | 評論 (0)編輯 收藏

    2007年3月21日 #

    Java源碼分析:深入探討Iterator模式


    作者:廖雪峰

    作者簡介


    廖雪峰,軟件工程師,現(xiàn)從事J2EE開發(fā),您可以通過asklxf@163.com與他聯(lián)系。

    正文


    java.util包中包含了一系列重要的集合類。本文將從分析源碼入手,深入研究一個集合類的內(nèi)部結構,以及遍歷集合的迭代模式的源碼實現(xiàn)內(nèi)幕。

    下面我們先簡單討論一個根接口Collection,然后分析一個抽象類AbstractList和它的對應Iterator接口,并仔細研究迭代子模式的實現(xiàn)原理。

    本文討論的源代碼版本是JDK 1.4.2,因為JDK 1.5在java.util中使用了很多泛型代碼,為了簡化問題,所以我們還是討論1.4版本的代碼。

    集合類的根接口Collection


    Collection接口是所有集合類的根類型。它的一個主要的接口方法是:

        boolean add(Object c)
    

    add()方法將添加一個新元素。注意這個方法會返回一個boolean,但是返回值不是表示添加成功與否。仔細閱讀doc可以看到,Collection規(guī)定:如果一個集合拒絕添加這個元素,無論任何原因,都必須拋出異常。這個返回值表示的意義是add()方法執(zhí)行后,集合的內(nèi)容是否改變了(就是元素有無數(shù)量,位置等變化),這是由具體類實現(xiàn)的。即:如果方法出錯,總會拋出異常;返回值僅僅表示該方法執(zhí)行后這個Collection的內(nèi)容有無變化。

    類似的還有:

        boolean addAll(Collection c);
        boolean remove(Object o);
        boolean removeAll(Collection c);
        boolean remainAll(Collection c);
    

    Object[] toArray()方法很簡單,把集合轉換成數(shù)組返回。Object[] toArray(Object[] a)方法就有點復雜了,首先,返回的Object[]仍然是把集合的所有元素變成的數(shù)組,但是類型和參數(shù)a的類型是相同的,比如執(zhí)行:

        String[] o = (String[])c.toArray(new String[0]);
    

    得到的o實際類型是String[]。

    其次,如果參數(shù)a的大小裝不下集合的所有元素,返回的將是一個新的數(shù)組。如果參數(shù)a的大小能裝下集合的所有元素,則返回的還是a,但a的內(nèi)容用集合的元素來填充。尤其要注意的是,如果a的大小比集合元素的個數(shù)還多,a后面的部分全部被置為null。

    最后一個最重要的方法是iterator(),返回一個Iterator(迭代子),用于遍歷集合的所有元素。

    用Iterator模式實現(xiàn)遍歷集合


    Iterator模式是用于遍歷集合類的標準訪問方法。它可以把訪問邏輯從不同類型的集合類中抽象出來,從而避免向客戶端暴露集合的內(nèi)部結構。

    例如,如果沒有使用Iterator,遍歷一個數(shù)組的方法是使用索引:

        for(int i=0; i<array.size(); i++) { ... get(i) ... }
    

    而訪問一個鏈表(LinkedList)又必須使用while循環(huán):

        while((e=e.next())!=null) { ... e.data() ... }
    

    以上兩種方法客戶端都必須事先知道集合的內(nèi)部結構,訪問代碼和集合本身是緊耦合,無法將訪問邏輯從集合類和客戶端代碼中分離出來,每一種集合對應一種遍歷方法,客戶端代碼無法復用。

    更恐怖的是,如果以后需要把ArrayList更換為LinkedList,則原來的客戶端代碼必須全部重寫。

    為解決以上問題,Iterator模式總是用同一種邏輯來遍歷集合:

        for(Iterator it = c.iterater(); it.hasNext(); ) { ... }
    

    奧秘在于客戶端自身不維護遍歷集合的"指針",所有的內(nèi)部狀態(tài)(如當前元素位置,是否有下一個元素)都由Iterator來維護,而這個Iterator由集合類通過工廠方法生成,因此,它知道如何遍歷整個集合。

    客戶端從不直接和集合類打交道,它總是控制Iterator,向它發(fā)送"向前","向后","取當前元素"的命令,就可以間接遍歷整個集合。

    首先看看java.util.Iterator接口的定義:

        public interface Iterator {
            boolean hasNext();
            Object next();
            void remove();
        }
    

    依賴前兩個方法就能完成遍歷,典型的代碼如下:

        for(Iterator it = c.iterator(); it.hasNext(); ) {
            Object o = it.next();
            // 對o的操作...
        }
    

    在JDK1.5中,還對上面的代碼在語法上作了簡化:

        // Type是具體的類型,如String。
        for(Type t : c) {
            // 對t的操作...
        }
    

    每一種集合類返回的Iterator具體類型可能不同,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree可能返回TreeIterator,但是它們都實現(xiàn)了Iterator接口,因此,客戶端不關心到底是哪種Iterator,它只需要獲得這個Iterator接口即可,這就是面向?qū)ο蟮耐Α?/p>

    Iterator源碼剖析


    讓我們來看看AbstracyList如何創(chuàng)建Iterator。首先AbstractList定義了一個內(nèi)部類(inner class):

        private class Itr implements Iterator {
            ...
        }
    

    而iterator()方法的定義是:

        public Iterator iterator() {
            return new Itr();
        }
    

    因此客戶端不知道它通過Iterator it = a.iterator();所獲得的Iterator的真正類型。

    現(xiàn)在我們關心的是這個申明為private的Itr類是如何實現(xiàn)遍歷AbstractList的:

        private class Itr implements Iterator {
            int cursor = 0;
            int lastRet = -1;
            int expectedModCount = modCount;
        }
    

    Itr類依靠3個int變量(還有一個隱含的AbstractList的引用)來實現(xiàn)遍歷,cursor是下一次next()調(diào)用時元素的位置,第一次調(diào)用next()將返回索引為0的元素。lastRet記錄上一次游標所在位置,因此它總是比cursor少1。

    變量cursor和集合的元素個數(shù)決定hasNext():

        public boolean hasNext() {
            return cursor != size();
        }
    

    方法next()返回的是索引為cursor的元素,然后修改cursor和lastRet的值:

        public Object next() {
            checkForComodification();
            try {
                Object next = get(cursor);
                lastRet = cursor++;
                return next;
            } catch(IndexOutOfBoundsException e) {
                checkForComodification();
                throw new NoSuchElementException();
            }
        }
    

    expectedModCount表示期待的modCount值,用來判斷在遍歷過程中集合是否被修改過。AbstractList包含一個modCount變量,它的初始值是0,當集合每被修改一次時(調(diào)用add,remove等方法),modCount加1。因此,modCount如果不變,表示集合內(nèi)容未被修改。

    Itr初始化時用expectedModCount記錄集合的modCount變量,此后在必要的地方它會檢測modCount的值:

        final void checkForComodification() {
            if (modCount != expectedModCount)
                throw new ConcurrentModificationException();
        }
    

    如果modCount與一開始記錄在expectedModeCount中的值不等,說明集合內(nèi)容被修改過,此時會拋出ConcurrentModificationException。

    這個ConcurrentModificationException是RuntimeException,不要在客戶端捕獲它。如果發(fā)生此異常,說明程序代碼的編寫有問題,應該仔細檢查代碼而不是在catch中忽略它。

    但是調(diào)用Iterator自身的remove()方法刪除當前元素是完全沒有問題的,因為在這個方法中會自動同步expectedModCount和modCount的值:

        public void remove() {
            ...
            AbstractList.this.remove(lastRet);
            ...
            // 在調(diào)用了集合的remove()方法之后重新設置了expectedModCount:
            expectedModCount = modCount;
            ...
        }
    

    要確保遍歷過程順利完成,必須保證遍歷過程中不更改集合的內(nèi)容(Iterator的remove()方法除外),因此,確保遍歷可靠的原則是只在一個線程中使用這個集合,或者在多線程中對遍歷代碼進行同步。

    最后給個完整的示例:

        Collection c = new ArrayList();
        c.add("abc");
        c.add("xyz");
        for(Iterator it = c.iterator(); it.hasNext(); ) {
            String s = (String)it.next();
            System.out.println(s);
        }
    

    如果你把第一行代碼的ArrayList換成LinkedList或Vector,剩下的代碼不用改動一行就能編譯,而且功能不變,這就是針對抽象編程的原則:對具體類的依賴性最小。

    posted @ 2007-03-21 15:54 Javaphua 閱讀(604) | 評論 (0)編輯 收藏

    2007年1月5日 #

    ??????? 今天很郁悶,昨天剛裝的orage 10g,當時啟動OracleDBConsoleoradb服務沒有什么問題,可是今天早上就無法啟動起來,查看windows事件日志,發(fā)現(xiàn)啟動報錯,錯誤描述“An error occured while trying to initialize the service.”。
    ?????????啟動N次也無法啟動,重啟操作系統(tǒng),也是一樣的錯誤,很惱火,拔掉網(wǎng)線一試,成功啟動了,不知為什么,特向高手們請教?(oracle 10g是在不聯(lián)網(wǎng)的狀態(tài)下安裝的,會不會跟安裝有問題?)。
    posted @ 2007-01-05 12:56 Javaphua 閱讀(1062) | 評論 (3)編輯 收藏

    2006年12月30日 #

    一個程序員的成長的六個階段

    本文轉自csai,挺有意思



    第一階段

    此階段主要是能熟練地使用某種語言。這就相當于練武中的套路和架式這些表面的東西。

    第二階段

    此階段能精通基于某種平臺的接口(例如我們現(xiàn)在常用的Win 32的API函數(shù))以及所對應語言的自身的庫函數(shù)。到達這個階段后,也就相當于可以進行真實散打?qū)毩?,可以真正地在實踐中做些應用。

    第三階段

    此階段能深入地了解某個平臺系統(tǒng)的底層,已經(jīng)具有了初級的內(nèi)功的能力,也就是“手中有劍,心中無劍”。

    第四階級

    此階段能直接在平臺上進行比較深層次的開發(fā)?;旧希苓_到這個層次就可以說是進入了高層次。這時進入了高級內(nèi)功的修煉。比如能進行VxD或操作系統(tǒng)的內(nèi)核的修改。

    這時已經(jīng)不再有語言的束縛,語言只是一種工具,即使要用自己不會的語言進行開發(fā),也只是簡單地熟悉一下,就手到擒來,完全不像是第一階段的時候?qū)W習語言的那種情況。一般來說,從第三階段過渡到第四階段是比較困難的。為什么會難呢?這就是因為很多人的思想變不過來。

    第五階級

    此階段就已經(jīng)不再局限于簡單的技術上的問題了,而是能從全局上把握和設計一個比較大的系統(tǒng)體系結構,從內(nèi)核到外層界面。可以說是“手中無劍,心中有劍”。到了這個階段以后,能對市面上的任何軟件進行剖析,并能按自己的要求進行設計,就算是MS Word這樣的大型軟件,只要有充足的時間,也一定會設計出來。

    第六階級

    此階段也是最高的境界,達到“無招勝有招”。這時候,任何問題就純粹變成了一個思路的問題,不是用什么代碼就能表示的。也就是“手中無劍,心中也無劍”。

    此時,對于練功的人來說,他已不用再去學什么少林拳,只是在旁看一下少林拳的對戰(zhàn),就能把此拳拿來就用。這就是真正的大師級的人物。這時,Win 32或Linux在你眼里是沒有什么差別的。

    每一個階段再向上發(fā)展時都要按一定的方法。第一、第二個階段通過自學就可以完成,只要多用心去研究,耐心地去學習。

    要想從第二個階段過渡到第三個階段,就要有一個好的學習環(huán)境。例如有一個高手帶領或公司里有一個好的練手環(huán)境。經(jīng)過二、三年的積累就能達到第三個階段。但是,有些人到達第三個階段后,常常就很難有境界上的突破了。他們這時會產(chǎn)生一種觀念,認為軟件無非如此,認為自己已無所不能。其實,這時如果遇到大的或難些的軟件,他們往往還是無從下手。

    現(xiàn)在我們國家大部分程序員都是在第二、三級之間。他們大多都是通過自學成才的,不過這樣的程序員一般在軟件公司也能獨當一面,完成一些軟件的模塊。

    但是,也還有一大堆處在第一階段的程序員,他們一般就能玩玩VB,做程序時,去找一堆控件集成一個軟件。
    posted @ 2006-12-30 13:55 Javaphua 閱讀(436) | 評論 (0)編輯 收藏

    僅列出標題  下一頁
    主站蜘蛛池模板: 亚洲无限乱码一二三四区| 黄网站色视频免费观看45分钟| 免费精品国产日韩热久久| 亚洲风情亚Aⅴ在线发布| 国产精品亚洲综合一区| 久久精品免费电影| 亚洲日韩乱码中文字幕| 怡红院亚洲怡红院首页| 免费看h片的网站| 国产V片在线播放免费无码| 亚洲视频一区网站| 免费国产综合视频在线看| 久久久久成人精品免费播放动漫| tom影院亚洲国产一区二区| 久久青青草原亚洲av无码| 无码日韩精品一区二区免费| 国产精品免费在线播放| 亚洲精品第一国产综合野| 亚洲色偷偷综合亚洲AVYP| 最新猫咪www免费人成| 四虎国产精品免费永久在线| 亚洲中文字幕久久精品无码VA| 亚洲国产一成人久久精品| 日本人护士免费xxxx视频| 在线观看永久免费| 久久不见久久见免费影院www日本| 亚洲欧洲另类春色校园网站| 日本亚洲欧洲免费天堂午夜看片女人员| 最近中文字幕mv手机免费高清| 久久精品乱子伦免费| 无码 免费 国产在线观看91| 亚洲一区二区三区免费观看| 久久久久久久久亚洲 | 亚洲福利精品一区二区三区| 亚洲美女免费视频| 久久成人18免费网站 | 国产真人无码作爱视频免费 | 国产av无码专区亚洲av毛片搜| 亚洲成a人片在线观看中文app| 亚洲日产无码中文字幕| 亚洲 综合 国产 欧洲 丝袜 |