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

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

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

    如何學好java

    如何學好java,其實很簡單,只要用心體會,慢慢積累!
    posts - 106, comments - 7, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    二叉樹


    posted @ 2011-04-29 12:04 哈希 閱讀(131) | 評論 (0)編輯 收藏

    一、oop唯一關(guān)心的是接口是什么,就像就像汽車銷售商不需要管他是怎么制造的,只要關(guān)心他能不能燃燒燃料開動起來,只要知道(can or not)不要關(guān)心(how and      why):
    1、多態(tài)性:(java對象多態(tài),java中不支持多重繼承)
         允許不同類的對象最統(tǒng)一消息做出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)和包含性多態(tài)性,多態(tài)性語言具有靈活抽象,行為共享的優(yōu)勢,很好解決了應(yīng)用函數(shù)同名問題.
    2、封裝:(隱藏細節(jié))
         就是把把數(shù)據(jù)和行為結(jié)合在一起,并對對象使用者隱藏隱藏數(shù)據(jù)的實現(xiàn)過程,一個對象中的數(shù)據(jù)稱為它的實例字段(instance);
    3、繼承:(擴展一個類)
        允許在已經(jīng)存在的類上構(gòu)建新的類,當你繼承一個已經(jīng)存在的類時候那么你就 復用了這個類的方法和字段,同時你可以在新類中添加心得方法和字段;
    ?4、class(oop最重要的思想,類中構(gòu)建一個對象,即創(chuàng)建這個類的一個實例)
        為編寫可動態(tài)操縱java代碼的程序提供了強大的功能反射,這項功能為javaBeans特別所有,能夠分析類能力的程序角反射器,java中提供的功能包叫java.lang.reflect反射機制十分強大。
    5、接口:(不是一個類,對符合接口要求的類的一套規(guī)范)
        實現(xiàn)接口兩個步驟:1、聲明類需要實現(xiàn)的指定接口;
                          2、提供接口中所有接口的定義;
        接口是一個收集方法和常數(shù)的契約,當類執(zhí)行一個接口,他就許諾在那個接口中聲明的所有方法。接口是一個設(shè)備或者一個系統(tǒng),它是用于交互的無關(guān)實體。根據(jù)這個定義,遠程控制是一個你和電視的接口,而英語是兩個人之間的接口。在java語言中接口是一種設(shè)備,它是用來與其他對象交互的設(shè)備。一個接口可能對一個協(xié)議是類似的,實際上其他語言也有接口,但是它們調(diào)用它的接口協(xié)議。
    6、動態(tài)綁定調(diào)用對象方法的機制
        (1)編譯器檢查對象聲明的類型和方法名;(2)編譯器檢查方法調(diào)用的參數(shù)類型;(3)靜態(tài)綁定:若方法類型為private static final編譯器會準確知道調(diào)用哪個方法;(4)程序需要調(diào)動一個方法時,那么虛擬機必須調(diào)用參數(shù)所指向的對象的實際類型相匹配的方法。
    7、構(gòu)造器(特殊的方法,構(gòu)造對象并將其初始化)
       構(gòu)造器可以有0個,一個或多個,構(gòu)造器和類有相同的名字,一個類可以右多個構(gòu)造器,構(gòu)造器沒有返回值,構(gòu)造器總是和new字符一起運行的。
    8、final類(系統(tǒng)級的類,不可擴展)
       防止派生新類
    9、equal(判斷兩個對象是否相等)
    10、toString()返回一個代表該對象的字符串,幾乎每一個類都會重載該方法,返回當前狀態(tài)的正確表示;
    11、通用編程:
          任何類型的所有值都可以都可以用Object類型的變量來代替;
    12、內(nèi)部類:(定義在一個類的內(nèi)部的類)
           1、一個內(nèi)部類的對象能夠訪問創(chuàng)建它的對象的實現(xiàn),包括私有數(shù)據(jù);
           2、對于同一個包中的類,呢不累可以隱藏起來;
           3、匿名內(nèi)部類可以很方便的進行回調(diào);
           4、使用內(nèi)部類可以很方便的編寫事件驅(qū)動程序;
    13、代理類:(proxy)
         A、指定接口要求所有代碼;
         B、Object類定義的所有方法(equals,toString());

      


    posted @ 2011-04-29 11:32 哈希 閱讀(299) | 評論 (0)編輯 收藏

    Java基礎(chǔ)面試題系列一

    dev.firnow.com    時間 : 2008-02-19  作者:佚名   編輯:本站 點擊:  1796 [ 評論 ]

    1、作用域public,private,protected,以及不寫時的區(qū)別
    答:區(qū)別如下:
    作用域    當前類       同一package    子孫類       其他package
    public     √          √             √             √
    protected  √          √             √             ×
    friendly   √          √             ×             ×
    private    √          ×             ×             ×
    不寫時默認為friendly


    2Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實現(xiàn))interface(接口)
    答:匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個內(nèi)部類可以作為一個接口,由另一個內(nèi)部類實現(xiàn)



    3Static Nested Class Inner Class的不同
    答:Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。注: 靜態(tài)內(nèi)部類(Inner Class)意味著1創(chuàng)建一個static內(nèi)部類的對象,不需要一個外部類對象,2不能從一個static內(nèi)部類的一個對象訪問一個外部類對象


    4&&&的區(qū)別
    答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)


    5Collection Collections的區(qū)別
    答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
    Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作


    6、什么時候用assert
    答:assertion(斷 言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機制。在實現(xiàn)中,assertion就是在程序中的一條語句,它對一個boolean表 達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或 退出。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布 后,assertion檢查通常是關(guān)閉的



    7String s = new String("xyz");創(chuàng)建了幾個String Object
    答:兩個,一個字符對象,一個字符對象引用對象



    8Math.round(11.5)等於多少? Math.round(-11.5)等於多少
    :  Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor


    9short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯
    答:short s1 = 1; s1 = s1 + 1; (s1+1運算結(jié)果是int型,需要強制轉(zhuǎn)換類型)short s1 = 1; s1 += 1;(可以正確編譯)


    10Java有沒有goto
    答:java中的保留字,現(xiàn)在沒有在java中使用



    11、數(shù)組有沒有length()這個方法? String有沒有length()這個方法
    答:數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength的屬性。String有有l(wèi)ength()這個方法


    12OverloadOverride的區(qū)別。Overloaded的方法是否可以改變返回值的類型
    答:方 法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重 載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重 寫 (Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名 的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型


    13Set里的元素是不能重復的,那么用什么方法來區(qū)分重復與否呢? 是用==還是equals()? 它們有何區(qū)別
    答:Set里的元素是不能重復的,那么用iterator()方法來區(qū)分重復與否。equals()是判讀兩個Set是否相等
        equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內(nèi)容和類型相配的話,返回真值



    14、給我一個你最常見到的runtime exception
    答:常 見的運行時異常有如下這些 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException



    15errorexception有什么區(qū)別
    答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況
        exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生的情況



    16List, Set, Map是否繼承自Collection接口
    答: List,Set是,Map不是


    17abstract classinterface有什么區(qū)別
    答:聲 明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中 實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)或 抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它 類可以在類中實現(xiàn)這些方法
    接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口 中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承 行為。當類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它 允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運算符可以用來決定某對象的 類是否實現(xiàn)了接口



    18abstractmethod是否可同時是static,是否可同時是native,是否可同時是synchronized
    都不能

     
    19、接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類(concrete class)
    答:接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構(gòu)造函數(shù)


    20、構(gòu)造器Constructor是否可被override
    答:構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading


    21、是否可以繼承String
    答:String類是final類故不可以繼承


    22try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后
    答:會執(zhí)行,在return前執(zhí)行


    23、用最有效率的方法算出2乘以8等於幾
    答:2 << 3


    24、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
    答:不對,有相同的hash code


    25、當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞
    答:是值傳遞。Java 編程語言只有值傳遞參數(shù)。當一個對象實例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠不會改變的


    26swtich是否能作用在byte上,是否能作用在long上,是否能作用在String
    答:witch(expr1)中,expr1是一個整數(shù)表達式。因此傳遞給 switch 和 case 語句的參數(shù)應(yīng)該是 int、 short、 char 或者 byte。long,string 都不能作用于swtich


    27ArrayListVector的區(qū)別,HashMapHashtable的區(qū)別
    答:就ArrayList與Vector主要從二方面來說.
    一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
    二.數(shù)據(jù)增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
    就HashMap與HashTable主要從三方面來說。
    一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現(xiàn)
    二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
    三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

    28char型變量中能不能存貯一個中文漢字?為什么?
    答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節(jié),所以放一個中文是沒問題的


    29GC是什么為什么要有GC
    答:GC 是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導致程序或系統(tǒng)的不穩(wěn)定甚至 崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。


    30floatfloat f=3.4是否正確?
    :不正確。精度不準確,應(yīng)該用強制類型轉(zhuǎn)換,如下所示:float f=(float)3.4
     

    posted @ 2011-04-28 18:02 哈希 閱讀(165) | 評論 (0)編輯 收藏

    3.求子數(shù)組的最大和
    題目:
    輸入一個整形數(shù)組,數(shù)組里有正數(shù)也有負數(shù)。
    數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和。
    求所有子數(shù)組的和的最大值。要求時間復雜度為O(n)。

    例如輸入的數(shù)組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數(shù)組為3, 10, -4, 7, 2,
    因此輸出為該子數(shù)組的和18。


    第10題
    翻轉(zhuǎn)句子中單詞的順序。
    題目:輸入一個英文句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變。

    句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。
    例如輸入“I am a student.”,則輸出“student. a am I”。


    第14題:
    題目:輸入一個已經(jīng)按升序排序過的數(shù)組和一個數(shù)字,
    在數(shù)組中查找兩個數(shù),使得它們的和正好是輸入的那個數(shù)字。
    要求時間復雜度是O(n)。如果有多對數(shù)字的和等于輸入的數(shù)字,輸出任意一對即可。
    例如輸入數(shù)組1、2、4、7、11、15和數(shù)字15。由于4+11=15,因此輸出4和11。

     

    第17題:
    題目:在一個字符串中找到第一個只出現(xiàn)一次的字符。如輸入abaccdeff,則輸出b。 
    分析:這道題是2006年google的一道筆試題。

     

    第20題:
    題目:輸入一個表示整數(shù)的字符串,把該字符串轉(zhuǎn)換成整數(shù)并輸出。
    例如輸入字符串"345",則輸出整數(shù)345。

     

    第25題:
    寫一個函數(shù),它的原形是int continumax(char *outputstr,char *intputstr)
    功能:
    在字符串中找出連續(xù)最長的數(shù)字串,并把這個串的長度返回,
    并把這個最長數(shù)字串付給其中一個函數(shù)參數(shù)outputstr所指內(nèi)存。
    例如:"abcd12345ed125ss123456789"的首地址傳給intputstr后,函數(shù)將返回9,
    outputstr所指的值為123456789


    26.左旋轉(zhuǎn)字符串

    題目:
    定義字符串的左旋轉(zhuǎn)操作:把字符串前面的若干個字符移動到字符串的尾部。

    如把字符串a(chǎn)bcdef左旋轉(zhuǎn)2位得到字符串cdefab。請實現(xiàn)字符串左旋轉(zhuǎn)的函數(shù)。
    要求時間對長度為n的字符串操作的復雜度為O(n),輔助內(nèi)存為O(1)。


    37.
    有n個長為m+1的字符串,
    如果某個字符串的最后m個字符與某個字符串的前m個字符匹配,則兩個字符串可以聯(lián)接,
    問這n個字符串最多可以連成一個多長的字符串,如果出現(xiàn)循環(huán),則返回錯誤。

     

    45.雅虎:
    1.對于一個整數(shù)矩陣,存在一種運算,對矩陣中任意元素加一時,需要其相鄰(上下左右)
    某一個元素也加一,現(xiàn)給出一正數(shù)矩陣,判斷其是否能夠由一個全零矩陣經(jīng)過上述運算得到。

    2.一個整數(shù)數(shù)組,長度為n,將其分為m份,使各份的和相等,求m的最大值
      比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
      {3,6}{2,4,3} m=2
      {3,3}{2,4}{6} m=3 所以m的最大值為3


    48.微軟:
    一個數(shù)組是由一個遞減數(shù)列左移若干位形成的,比如{4,3,2,1,6,5}
    是由{6,5,4,3,2,1}左移兩位形成的,在這種數(shù)組中查找某一個數(shù)。


    51.和為n連續(xù)正數(shù)序列。
    題目:輸入一個正數(shù)n,輸出所有和為n連續(xù)正數(shù)序列。

    例如輸入15,由于1+2+3+4+5=4+5+6=7+8=15,所以輸出3個連續(xù)序列1-5、4-6和7-8。
    分析:這是網(wǎng)易的一道面試題。


    53.字符串的排列。
    題目:輸入一個字符串,打印出該字符串中字符的所有排列。
    例如輸入字符串a(chǎn)bc,則輸出由字符a、b、c所能排列出來的所有字符串
    abc、acb、bac、bca、cab和cba。

    分析:這是一道很好的考查對遞歸理解的編程題,
    因此在過去一年中頻繁出現(xiàn)在各大公司的面試、筆試題中。

     

    54.調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面。

    題目:輸入一個整數(shù)數(shù)組,調(diào)整數(shù)組中數(shù)字的順序,使得所有奇數(shù)位于數(shù)組的前半部分,
    所有偶數(shù)位于數(shù)組的后半部分。要求時間復雜度為O(n)。


    56.最長公共字串。
    題目:如果字符串一的所有字符按其在字符串中的順序出現(xiàn)在另外一個字符串二中,

    則字符串一稱之為字符串二的子串。

    注意,并不要求子串(字符串一)的字符必須連續(xù)出現(xiàn)在字符串二中。
    請編寫一個函數(shù),輸入兩個字符串,求它們的最長公共子串,并打印出最長公共子串。

    例如:輸入兩個字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它們的最長公共子串,
    則輸出它們的長度4,并打印任意一個子串。

    分析:求最長公共子串(Longest Common Subsequence, LCS)是一道非常經(jīng)典的動態(tài)規(guī)劃題,
    因此一些重視算法的公司像MicroStrategy都把它當作面試題。


    63.在字符串中刪除特定的字符。
    題目:輸入兩個字符串,從第一字符串中刪除第二個字符串中所有的字符。

    例如,輸入”They are students.”和”aeiou”,

    則刪除之后的第一個字符串變成”Thy r stdnts.”。

    分析:這是一道微軟面試題。在微軟的常見面試題中,與字符串相關(guān)的題目占了很大的一部分,
    因為寫程序操作字符串能很好的反映我們的編程基本功。

     

    69.旋轉(zhuǎn)數(shù)組中的最小元素。
    題目:把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。輸入一個排好序的數(shù)組的一個旋轉(zhuǎn),

    輸出旋轉(zhuǎn)數(shù)組的最小元素。例如數(shù)組{3, 4, 5, 1, 2}為{1, 2, 3, 4, 5}的一個旋轉(zhuǎn),該數(shù)組的最小值為1。

        分析:這道題最直觀的解法并不難。從頭到尾遍歷數(shù)組一次,就能找出最小的元素,
    時間復雜度顯然是O(N)。但這個思路沒有利用輸入數(shù)組的特性,我們應(yīng)該能找到更好的解法。

     

    73.對策字符串的最大長度。
    題目:輸入一個字符串,輸出該字符串中對稱的子字符串的最大長度。
    比如輸入字符串“google”,由于該字符串里最長的對稱子字符串是“goog”,因此輸出4。

    分析:可能很多人都寫過判斷一個字符串是不是對稱的函數(shù),這個題目可以看成是該函數(shù)的加強版。

     

    85.又見字符串的問題
    1.給出一個函數(shù)來復制兩個字符串A和B。
    字符串A的后幾個字節(jié)和字符串B的前幾個字節(jié)重疊。
    分析:記住,這種題目往往就是考你對邊界的考慮情況。
    2.已知一個字符串,比如asderwsde,尋找其中的一個子字符串比如sde的個數(shù),
    如果沒有返回0,有的話返回子字符串的個數(shù)。


    88.2005年11月金山筆試題。編碼完成下面的處理函數(shù)。
    函數(shù)將字符串中的字符'*'移到串的前部分,

    前面的非'*'字符后移,但不能改變非'*'字符的先后順序,函數(shù)返回串中字符'*'的數(shù)量。
    如原始串為:ab**cd**e*12,
    處理后為*****abcde12,函數(shù)并返回值為5。(要求使用盡量少的時間和輔助空間)

     

    93.在一個int數(shù)組里查找這樣的數(shù),它大于等于左側(cè)所有數(shù),小于等于右側(cè)所有數(shù)。
    直觀想法是用兩個數(shù)組a、b。a[i]、b[i]分別保存從前到i的最大的數(shù)和從后到i的最小的數(shù),

    一個解答:這需要兩次遍歷,然后再遍歷一次原數(shù)組,
    將所有data[i]>=a[i-1]&&data[i]<=b[i]的data[i]找出即可。

    給出這個解答后,面試官有要求只能用一個輔助數(shù)組,且要求少遍歷一次。


    94.微軟筆試題
    求隨機數(shù)構(gòu)成的數(shù)組中找到長度大于=3的最長的等差數(shù)列9 d- x' W) w9 ?" o3 b0 R
    輸出等差數(shù)列由小到大:
    如果沒有符合條件的就輸出
    格式:
    輸入[1,3,0,5,-1,6]
    輸出[-1,1,3,5]
    要求時間復雜度,空間復雜度盡量小


    96.08年中興校園招聘筆試題
    1.編寫strcpy 函數(shù)
    已知strcpy 函數(shù)的原型是
    char *strcpy(char *strDest, const char *strSrc);
    其中strDest 是目的字符串,strSrc 是源字符串。
    不調(diào)用C++/C 的字符串庫函數(shù),請編寫函數(shù) strcpy。

     

    ----------------

    1.關(guān)于本微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法面試100題系列V0.1版的鄭重聲明
    http://blog.csdn.net/v_JULY_v/archive/2010/12/02/6050133.aspx
    2.完整100題,請參見,
    [珍藏版]微軟等數(shù)據(jù)結(jié)構(gòu)+算法面試100題全部出爐[100題首次完整亮相]
    http://blog.csdn.net/v_JULY_v/archive/2010/12/06/6057286.aspx
    3.更多詳情,請參見,本人博客:
    My Blog:
    http://blog.csdn.net/v_JULY_v
    4.所有的資源(題目+答案)下載地址:
    http://v_july_v.download.csdn.net/
    5.本微軟等100題系列V0.1版,永久維護(網(wǎng)友,思路回復)地址:
    http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

    posted @ 2011-04-28 17:56 哈希 閱讀(1314) | 評論 (0)編輯 收藏

    目: 編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。   但是要保證漢字不被截半個,如“我ABC”4,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”。
    1. package com.sw.suanfa.first.ten;  
    2. /** 
    3.  * 編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。   
    4.  *  但是要保證漢字不被截半個, 
    5.  *  如“我ABC”4,應(yīng)該截為“我AB”, 
    6.  *  輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”。  
    7.  * @author songwei 
    8.  * 
    9.  *我的處理方式:截取字符串的一個字符,加入StringBuffer中,并取其字節(jié)數(shù),并入當前獲取字符的總長度中, 
    10.  *如果總長度大于等于輸入的長度,則返回StringBuffer的toString值。 
    11.  *getSubString方法傳入encoding值。UTF-8中文占3個字節(jié),GBK占2個。結(jié)果有所不同,所以還是傳入較好。 
    12.  *沒有通過判斷charAt的值來判定是否為中文等特殊字符。 
    13.  *不知道我這種方式是否正確。【未經(jīng)過詳細測試】 
    14.  */ 
       public class SubStringWithChina {  
              
      public static void main(String[] args) throws Exception{  
                    
                  String a 
      = "我ABC漢DEF" ;  
                  
      int len = 6 ;  
                  String encoding 
      = "UTF-8" ;  
                    
                  System.out.println( getSubString(a, len,encoding) );  
                  a 
      = "我ABC";  
                  len 
      = 4 ;  
                  encoding 
      = "gbk" ;  
                  System.out.println( getSubString(a, len,encoding) );  
              }  
                
              
      /** 
               *  
               * 
      @param str 傳入字符串 
               * 
      @param len 截取字節(jié)數(shù) 
               * 
      @param encoding 編碼方式 
               * 
      @return 返回截取后的字符串 
               * 
      @throws Exception 
               
      */  
              
      public static String getSubString(String str,int len,String encoding) throws Exception{  
                  
      if(str == null || str.length()<1return null ;  
                  
      if(len<1return null ;  
                  StringBuffer sb 
      = new StringBuffer();  
                  
      int all = 0 ;  
                  
      for(int i=0;i<str.length();i++){  
                      String tmp 
      = str.substring(i,i+1);  
                      sb.append(tmp);  
                      
      byte[] tmpB = tmp.getBytes(encoding);  
                      all 
      +=tmpB.length ;  
                      
      if(all>=len){  
                          
      break ;  
                      }  
                  }  
                  
      return sb.toString() ;  
              }  
          }
    15. 判斷字符串中是否含有漢字:

       String str = "test中文漢字";
      String regEx = "[\\u4e00-\\u9fa5]";

      /**
      * 判斷有沒有中文
      */
      if (str.getBytes().length == str.length()) {
       System.out.println("無漢字");
      } else {
       System.out.println("有漢字");
      }

      /**
      * 如果有則打印出來
      */
      Pattern p = Pattern.compile(regEx);
      Matcher m = p.matcher(str);
      while (m.find()) {
       System.out.print(m.group(0) + "");
      }

      如題

    posted @ 2011-04-28 16:31 哈希 閱讀(365) | 評論 (0)編輯 收藏

         摘要: 以前的收藏,估計很少有這么全的面試題集了 ^_^ 基礎(chǔ)知識: 1.C++或Java中的異常處理機制的簡單原理和應(yīng)用。   當JAVA程序違反了JAVA的語義規(guī)則時,JAVA虛擬機就會將發(fā)生的錯誤表示為一個異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi) 置的語義檢查。例如數(shù)組下標越界,會引發(fā)IndexOutOfBoundsException;訪問null的對象時會引發(fā) ...  閱讀全文

    posted @ 2011-04-28 15:20 哈希 閱讀(84) | 評論 (0)編輯 收藏

    如下分成5個步驟
    1,建立xml文件
    2,建立bean的接口
    3,建立bean
    4,寫測試程序
    5,測試

    準備工作
    環(huán)境配置如下,需要spring.jar和common-logging.jar兩個jar文件

    開始
    1,建立xml文件
    文件名:beans.xml
    文件位置:src目錄下
    文件內(nèi)容:
    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

      <!-- the application context definition for the springapp DispatcherServlet -->

      <bean id="sayhello" class="test.service.impl.HelloBean"/>
       
    </beans>

    2,建立bean的接口
    文件名:Hello.java
    文件內(nèi)容:
    package test.service;

    public interface Hello {

        public void sayHello();

    }

    3,建立bean
    文件名:HelloBean.java
    文件內(nèi)容:
    package test.service.impl;

    import test.service.Hello;

    public class HelloBean implements Hello {
       
        /* (non-Javadoc)
         * @see test.service.impl.Hello#sayHello()
         */
        public void sayHello() {
            System.out.println("這是一個測試程序");
        }

    }

    4,寫測試程序
    文件名:FirstSpring.java
    文件內(nèi)容:
    package test.spring;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import test.service.Hello;

    public class FirstSpring {
       
        public static void main(String[] args) {
            testHello();
        }
       
        public static void testHello() {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
            Hello hello =(Hello) applicationContext.getBean("sayhello");
            hello.sayHello();
           
        }
    }

    5,測試
    運行FirstSpring.java文件,得到輸出結(jié)果如下:
    2009-6-30 3:33:58 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [beans.xml]
    2009-6-30 3:33:59 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
    信 息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@7259da]: org.springframework.beans.factory.support.DefaultListableBeanFactory@2e7820
    2009-6-30 3:33:59 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信 息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2e7820: defining beans [sayhello]; root of factory hierarchy
    這是一個測試程序

    上面紅字是spring輸出的調(diào)試信息,藍字是hellobean實際輸入的內(nèi)容。

    簡單總結(jié):
    1,環(huán)境配置中不要忘記了common-logging.jar文件,我最開始忘記了,還是用junit測試的,結(jié)果就是不通過。出錯的原因也不明白。后來直接改成普通的main方法測試,才明白原因。

    2,bean的接口和實現(xiàn)的分離在spring中被貫徹執(zhí)行。同時理解一下IOC(控制反轉(zhuǎn))的概念。
    3,spring中的bean,應(yīng)該指的是執(zhí)行各種業(yè)務(wù)的業(yè)務(wù)bean才是。不同于strut的formbean和對應(yīng)db表對象的valuebean。

    posted @ 2011-04-28 12:19 哈希 閱讀(174) | 評論 (0)編輯 收藏


    MyEclipse 怎樣手動編譯整個項目

    作者 Neot 寫于 2008-12-31 | 3,737 次瀏覽

    MyEclipse 菜單 Project->Build Automatically 選中后,項目的文件會被自動編輯。要想手動編譯整個項目,可使用菜單 Project->Build All 或 Project->Build Project。還有個比較笨的方法,就是運行整個項目。運行項目時,MyEclipse 會先對項目進行編譯。

    但是有個問題,Build All、Build Project 菜單項常常是恢掉的,不可執(zhí)行。其實,這是因為我們勾選了 Project->Build Automatically 項。取消掉 Project->Build Automatically 后,Build All 和 Build Project 菜單項就可以用了。

    [ 標簽: myeclipse, 編譯 ]
    [ 固定鏈接:http://blog.tanggaowei.com/2008/12/myeclipse-2.html ]

    為什么取消 MyEclipse 驗證后還是有許多紅叉叉

    作者 Neot 寫于 2008-12-31 | 2,610 次瀏覽

    在 MyEclipse 的 windows–>perferences–>myeclipse–>validation 下,把除了manual 下面的全部點掉,build下只留 classpath dependency Validator,這樣設(shè)置后,MyEclipse就不會老是驗證 xml、jsp、html 等文件了。參考如下文章:

    Eclipse+MyEclipse的優(yōu)化

    但是,我設(shè)置好了,在 Package Explorer 窗口卻還是有許多的紅叉叉。翻來覆去弄了好幾次,情況都一樣。最后,終于發(fā)現(xiàn),在 Package Explorer 窗口 對項目點擊右鍵,在出現(xiàn)的菜單中執(zhí)行“MyEclipse->Remove All Validation Markers”,所有的紅叉叉就都不見了。

    [ 標簽: myeclipse, 優(yōu)化, 驗證 ]
    [ 固定鏈接:http://blog.tanggaowei.com/2008/12/myeclipse.html ]

    Eclipse 中怎樣添加 Subversion 插件

    作者 Neot 寫于 2008-10-30 | 3,280 次瀏覽

    Eclipse 中可以從菜單添加插件:[菜單]Help / Software Updates / Find and Install。在出現(xiàn)的 Install 窗口,選擇“Search for new features to install”項,點擊“Next”進入下一頁。然后點擊右側(cè)的“New Remote Site”按鈕,在出現(xiàn)的窗口中,設(shè)置“Name”項為“Subversion”,“URL”項為“http://subclipse.tigris.org/update/”,點擊“OK”按鈕。再點擊“Finish”按鈕,Ecplise 就會開始自動下載 Subversion 插件,并安裝了。

    像 MyEclipse、Carbide 這些基于 Eclipse 的開發(fā)工具,同樣適用這個方法。

    [ 標簽: Carbide, eclipse, myeclipse, subversion ]
    [ 固定鏈接:http://blog.tanggaowei.com/2008/10/eclipse-subversion.html ]

    MyEclipse開發(fā)SSH(Struts+Spring+Hibernate)入門

    作者 Neot 寫于 2007-12-13 | 16,744 次瀏覽

    (本文參考自 oksonic 的“Struts+Spring+Hibernate練習(完整)”)

    源碼下載:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2857703

    1. 準備

    工具:MyEclipse 6.0.1 GAmysql-connector-java-5.0.4-bin.jarMySql GUI Tools 5.0(便于管理MySql數(shù)據(jù)庫,不是必須)

    環(huán)境:Tomcat 5.5MySql 5.0

    1.1. 新建工程

    操作:[Menu] File/New/Web Project

    工程名:login

    2. Struts 部分


    2.1. 添加 Struts 功能支持

    操作:[Menu] MyEclipse/Project Capabilities/Add Struts Capabilities

    將 “yourcompany” 替換成 “login”。

    2.2. 創(chuàng)建 ActionForm 類

    操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Form

    類名:LoginForm

    在 “Use case” 里輸入 “Login” 后,Name、Form type 等會自動填充。

    在 “Form Properties” 選項卡為 loginForm 新增兩個屬性:username、password,”Type” 和 “JSP input type” 分別保持默認的 “java.lang.String” 和 “text”;

    在 “JSP” 選項卡鉤選 “Create JSP form” 選項,將新建路徑改為 “/login.jsp”(login.jsp文件將被自動創(chuàng)建)。

    2.3. 創(chuàng)建 Action 類

    操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Action

    類名:LoginAction

    在 “Form” 選項卡的 “Name” 項選擇 “loginForm”,”Input Source” 項輸入 “/login.jsp”。

    2.4. 創(chuàng)建 index.jsp 文件

    如果沒有,創(chuàng)建 index.jsp 文件,并添加一個指向 login.jsp 的鏈接:<a href = “login.jsp”>Login</a>

    2.5. 創(chuàng)建Forword類

    操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Forword

    類名:indexForword

    “Name” 項輸入 “indexForword” ,”Path” 項選擇 “/index.jsp” 。

    2.6. 修改 LoginAction.java 文件

    修改 LoginAction 類的 execute 方法:

    public class LoginAction extends Action {

    public ActionForward execute ( ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response ) {
    LoginForm loginForm = ( LoginForm ) form;

    String username = loginForm.getUsername();
    String password = loginForm.getPassword();

    if ( username.equals ( “test” ) && password.equals ( “test” ) ) {
    return mapping.findForward ( “indexForword” );
    } else {
    return mapping.getInputForward();
    }
    }
    }

    2.7. 修改 login.jsp 文件

    修改 <html:form> 標簽:<html:form action=”/login”>

    2.8. 測試

    操作:[Menu] Run/Run,選擇 MyEclipse Server Application 方式運行

    要正常執(zhí)行Run操作,需先安裝 Tomcat5.5 。

    點擊 index.jsp 頁面的 “Login” 鏈接,跳轉(zhuǎn)到 login.jsp 頁面。在 login.jsp 頁面輸入 “test/test”,應(yīng)該會登錄成功,然后跳轉(zhuǎn)到 index.jsp 頁面;輸入 “test/123″ ,應(yīng)該保持在 login.jsp 頁面。

    如果測試成功,證明 Structs 運行正常。

    如果運行出錯,請參考文章最后的“5. 問題集”。

    3. Spring 部分


    3.1. 添加 Spring 功能支持

    操作:[Menu] MyEclipse/Project Capabilities/Add Spring Capabilities

    Spring 版本( Spring version )選擇 “Spring 1″;

    開發(fā)包(libraries)選擇 “Spring 1.2 AOP Libraries、Spring 1.2 Core Libraries、Spring 1.2 Persistence Core Libraries、Spring 1.2 Persistence JDBC Libraries” 四項;

    JAR Library Installation 選擇 “copy checked…” ,”Library Folder” 項選擇 “/WebRoot/WEB-INF/lib”(這樣的話所需的類庫都將拷貝到項目目錄,方便以后的布署)。

    點擊 “下一步(Next)” 創(chuàng)建配置文件,修改文件路徑(Folder)到 “WebRoot/WEB-INF” 目錄(以便和Struts配置文件一起管理),文件名稱為默認的”applicationContext.xml”。

    點擊 “完成(Finish)” 。

    3.2. 配置 struts-config.xml 文件

    添加 Spring 插件(在 <message-resources> 標簽后面添加):

    <plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
    <set-property property=”contextConfigLocation” value=”/WEB-INF/applicationContext.xml” />
    </plug-in>

    修改 LoginAction 的配置(只需修改 type 屬性):

    <action-mappings >
    <action
    attribute=”loginForm”
    input=”/login.jsp”
    name=”loginForm”
    path=”/login”
    scope=”request”
    type=”org.springframework.web.struts.DelegatingActionProxy” />

    </action-mappings>

    綠色字體部份為被修改過的內(nèi)容,這里將使用 spring 的代理器 DelegatingActionProxy 來對 Action 進行控制。

    3.3. 修改 Spring 配置文件 applicationContext.xml

    <?xml version=”1.0″ encoding=”UTF-8″?>
    <!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”>

    <beans>
    <bean name=”/login” class=”com.login.struts.action.LoginAction” singleton=”false”></bean>
    </beans>

    綠色字體是關(guān)于接受和處理 Action 控制權(quán)的配置內(nèi)容,”com.login.struts.action.LoginAction” 即為原 struts 里的配置。

    3.4. 測試

    同上一次測試。測試成功證明 Spring 運行正常。

    如果運行出錯,請參考文章最后的“5. 問題集”。

    4. Hibernate 部分

    下面開始 Hibernate 部分,將原例修改為使用數(shù)據(jù)庫進行用戶名/密碼驗證。

    4.1. 創(chuàng)建 mysql 數(shù)據(jù)庫和表

    添加表的代碼如下:

    CREATE TABLE user_table(
    ID int NOT NULL auto_increment,
    USERNAME varchar(45) NOT NULL default ”,
    PASSWORD varchar(45) NOT NULL default ”,
    PRIMARY KEY (ID)
    )

    再添加一條記錄:

    insert into user_table (USERNAME,PASSWORD) values (‘test’,'test’)

    4.2. 創(chuàng)建 MyEclipse 數(shù)據(jù)庫驅(qū)動(DB Driver)

    操作:[Menu] MyEclipse/Prefrences/MyEclipse/Database Explorer/Database Driver/DB Brower

    在 DB Brower 的菜單中選擇 “New” ,”Driver Name” 項輸入 “login-conn” ,”Connection URL” 項輸入 “jdbc:mysql://localhost:3306/test” ,然后輸入 MySql 的用戶名(User Name)和密碼(Password),按實際情況輸入;

    在 “Driver JARs” 項添加 “mysql-connector-java-5.0.4-bin.jar” (可從網(wǎng)上下載),在 “Driver classname” 里選擇 “com.mysql.jdbc.Driver” ,其它自選。

    點擊 “完成(Finish)”。

    4.3. 添加 Hibernate 功能支持

    操作:[Menu] MyEclipse/Project Capabilities/Add Hibernate Capabilities

    Hibernate 版本(Hibernate Specification)選擇 “Hibernate 3.1″ ,開發(fā)包(libraries)選擇 Hibernate 3.1 Core Libraries 一項;

    JAR Library Installation 選擇 “copy checked…” ,”Library Folder” 選擇 “/WebRoot/WEB-INF/lib” 。

    點擊 “下一步(Next)” 設(shè)置配置文件:

    選擇 “Spring configuration file (applicationContext.xml)” 。

    “下一步(Next)” 設(shè)置 Spring-Hibernate:

    選擇 “Existing Spring configuration file” ,”SessionFactory ID” 項輸入 “sessionFactory” 。

    “下一步(Next)” 創(chuàng)建數(shù)據(jù)源對象:

    在 Bean Id 中輸入 dataSource,”DataSource” 項選擇 “Use JDBC Dirver” ,DB Driver 項選擇 “login-conn” ,其余項會自動填充。

    記得選中 “Copy DB driver jar(s) to project and add to buidpath” 項,以便將數(shù)據(jù)連接的庫文件復制到項目,方便以后的布署。

    “下一步(Next)” 創(chuàng)建 SessionFactory 類:

    “Java package” 項設(shè)置為 “com.login.Hibernate” (如果沒有,點擊 “New” 按鈕添加),”Class name” 項修改為 “SessionFactory” ,Java Compliance Level 選擇和創(chuàng)建項目時選擇的 Java 版本。(本例中并沒有用到 SessionFactory 類,留作今后擴展)

    點擊 “完成(Finish)”。

    4.4. 創(chuàng)建對象關(guān)系映射(ORM)的相關(guān)文件

    操作:[Menu] Window/Open Perspective/MyEclipse Database Explorer

    選中 user_table 表,點擊右鍵,在出現(xiàn)的菜單中選擇 “Hibernate Reverse Engnieering” 。

    在彈出的窗口中保持 “Java package” 項為 “com.login” ;

    選中 “Hibernate mapping file (*.hbm.xml) for each databases table” ,并保持 “Update hibernate…” 項選中;

    選中 “Java Data Object” 項,并保持 “Create abstract class” 選中;

    “Base persistent class” 項留空;

    取消 “Java Data Access Object…” 項和 “Use custom templates” 項。

    點擊 “下一步(Next)” ,再點擊 “下一步(Next)” ,在 “Configure reverse engineering details” 頁選中 “user_table” 表,在右邊出現(xiàn)的 “Class Name” 項中輸入 “com.login.User”,其它不變。

    點擊 “完成(Finish)”。

    完成此操作,會在 “com.login” 包下創(chuàng)建三個文件:AbstractUser.java、User.java、User.hbm.xml。

    4.5. 創(chuàng)建 UserDAO.java 接口

    操作:[Ctrl+N] Interface,點擊 “下一步( Next )”

    在出現(xiàn)的 “New Java Interface” 窗口中,將 “Source Folder” 設(shè)置為 “login/src”,將 “Package” 設(shè)置為 “com.login”, 將 “Name”  項設(shè)為 “UserDAO”,然后點擊 “完成( Finish )” 按鈕。

    UserDAO.java 內(nèi)容如下:

    package com.login;

    public interface UserDAO {
    public abstract boolean isValidUser( String username, String password );
    }

    4.6. 創(chuàng)建 UserDAOImpl.java 類

    操作:[Ctrl+N] Class,點擊 “下一步( Next )”

    在出現(xiàn)的 “New Java Class” 窗口中,將 “Source Folder” 設(shè)置為 “login/src”,將 “Package” 設(shè)置為 “com.login”, 將 “Name”  項設(shè)為 “UserDAOImpl”,在 “Supperclass” 項輸入 “org.springframework.orm.hibernate3.support.HibernateDaoSupport”,在 “Interface” 項中添加 “com.login.UserDAO” 接口,然后點擊 “完成( Finish )” 按鈕。

    UserDAOImpl 通過 Hibernate 訪問數(shù)據(jù)庫,做用戶驗證。

    UserDAOImpl.java 內(nèi)容如下:

    package com.login;

    import java.util.List;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
    private static String hql = “from User u where u.username=? “;

    public boolean isValidUser( String username, String password ) {
    // 驗證用戶
    List userList = this.getHibernateTemplate().find( hql, username );
    if ( userList.size() > 0 ) {
    return true;
    }
    return false;
    }
    }

    4.7. 修改 LoginAction.java 文件

    使用 UseDAO 對象來驗證:

    package com.login.struts.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import com.login.struts.form.LoginForm;
    import com.login.UserDAO;

    public class LoginAction extends Action {
    private UserDAO userDAO;

    public UserDAO getUserDAO() {
    return userDAO;
    }

    public void setUserDAO(UserDAO userDAO) {
    this.userDAO = userDAO;
    }

    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {

    LoginForm loginForm = (LoginForm) form;
    String username=loginForm.getUsername();
    String password=loginForm.getPassword();

    if( userDAO.isValidUser( username, password ) ){
    return mapping.findForward( “indexForword” );
    }else{
    return mapping.getInputForward();
    }
    }
    }

    綠色字體為修改部分。

    4.8. Spring 的最終配制文件 applicationContext.xml

    <?xml version=”1.0″ encoding=”UTF-8″?>
    <!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “
    http://www.springframework.org/dtd/spring-beans.dtd”>

    <beans>

    <bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
    <property name=”driverClassName” value=”com.mysql.jdbc.Driver”></property>
    <property name=”url” value=”jdbc:mysql://localhost:3306/test”></property>
    <property name=”username” value=”root”></property>
    <property name=”password” value=”root”></property>
    </bean>

    <!– 配置sessionFactory, 注意這里引入的包的不同 –>
    <bean id=”sessionFactory” class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
    <property name=”dataSource”>
    <ref local=”dataSource” />
    </property>
    <property name=”mappingResources”>
    <list>
    <value>com/login/User.hbm.xml</value>
    </list>
    </property>
    <property name=”hibernateProperties”>
    <props>
    <prop key=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</prop>
    <prop key=”hibernate.show_sql”>true</prop>
    </props>
    </property>
    </bean>

    <bean id=”transactionManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>
    <property name=”sessionFactory”>
    <ref local=”sessionFactory” />
    </property>
    </bean>

    <bean id=”userDAO” class=”com.login.UserDAOImpl”>
    <property name=”sessionFactory”>
    <ref local=”sessionFactory” />
    </property>
    </bean>

    <bean id=”userDAOProxy” class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”>
    <property name=”transactionManager”>
    <ref bean=”transactionManager” />
    </property>
    <property name=”target”>
    <ref local=”userDAO” />
    </property>
    <property name=”transactionAttributes”>
    <props>
    <prop key=”insert*”>PROPAGATION_REQUIRED</prop>
    <prop key=”get*”>PROPAGATION_REQUIRED,readOnly</prop>
    <prop key=”is*”>PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean>

    <bean name=”/login” class=”com.login.struts.action.LoginAction” singleton=”false”>
    <property name=”userDAO”>
    <ref bean=”userDAOProxy” />
    </property>
    </bean>

    </beans>

    4.9. 測試

    同第一次測試。

    如果運行出錯,請參考文章最后的“5. 問題集”。

    5. 問題集

    5.1. Console 錯誤信息: java.net.BindException: Address already in use: JVM_Bind:8080

    • 原因:有其它進程占用了 8080 端口,導致綁定失敗。
    • 解決:如果是有 Tomcat 啟動了,將其關(guān)閉,MyEclipse 會自己啟動 Tomcat。

    5.2. HTTP 錯誤信息:message Servlet action is not available

    • 原因:找不到相關(guān)類。可能配置文件中的某些類或文件的路徑填寫錯誤,或是缺少 jar 包。
    • 解決:如果是在添加 Spring 特性后產(chǎn)生的,可能是 /WEB-INF/lib/ 中缺少 spring.jar 包。從 MyEclipse 目錄搜索出 1.2 版的 spring.jar,并將其復制到項目的 /WEB-INF/lib/ 目錄下。

    5.3. Console 錯誤信息:java.sql.SQLException: Access denied for user: ‘root@localhost’ (Using password: YES)

    • 原因:數(shù)據(jù)庫訪問被拒絕。可能由于 MySQL 密碼被設(shè)置成空,而 MyEclipse 又不支持空密碼。
    • 解決:將 MySQL 的 root 用戶密碼設(shè)置成非空,如 “root”,然后修改 MyEclipse 中剛才添加的 login-conn 數(shù)據(jù)源信息的密碼項。
    [ 標簽: hibernate, j2ee, myeclipse, spring, struts ]
    [ 固定鏈接:http://blog.tanggaowei.com/2007/12/myeclipsesshstrutsspringhibernate.html ]

    訂閱

     

    手機訪問

    http://blog.tanggaowei.com/wap/
    ?
    Google
     

    posted @ 2011-04-28 09:39 哈希 閱讀(196) | 評論 (0)編輯 收藏

    public class TestClass {

        
    public TestClass() {
            System.out.println(
    "wll");
        }
         
         
        
        
    public static void main(String[] args) {
            TestClass tc
    =new TestClass();
        }
        
        
        
    }

    繼承



    排序




    posted @ 2011-04-27 14:48 哈希 閱讀(158) | 評論 (0)編輯 收藏


    區(qū)別一:

      重定向時瀏覽器上的網(wǎng)址改變

      轉(zhuǎn)發(fā)是瀏覽器上的網(wǎng)址不變

    區(qū)別二:

      重定向?qū)嶋H上產(chǎn)生了兩次請求

    轉(zhuǎn)發(fā)只有一次請求 

    重定向: 

      發(fā)送請求 -->服務(wù)器運行-->響應(yīng)請求,返回給瀏覽器一個新的地址與響應(yīng)碼-->瀏覽器根據(jù)響應(yīng)碼,判定該響應(yīng)為重定向,自動發(fā)送一個新的請求給服務(wù)器,請求地址為之前返回的地址-->服務(wù)器運行-->響應(yīng)請求給瀏覽器 

    轉(zhuǎn)發(fā): 

      發(fā)送請求 -->服務(wù)器運行-->進行請求的重新設(shè)置,例如通過request.setAttribute(name,value)-->根據(jù)轉(zhuǎn)發(fā)的地址,獲取該地址的網(wǎng)頁-->響應(yīng)請求給瀏覽器 

    區(qū)別三:

      重定向時的網(wǎng)址可以是任何網(wǎng)址

      轉(zhuǎn)發(fā)的網(wǎng)址必須是本站點的網(wǎng)址

    詳解:

      重定向:以前的request中存放的變量全部失效,并進入一個新的request作用域。
    轉(zhuǎn)發(fā):以前的request中存放的變量不會失效,就像把兩個頁面拼到了一起。

    正文開始: 

      先是看上去不同,他們的調(diào)用分別如下:
    request.getRequestDispatcher("apage.jsp").forward(request, response);//轉(zhuǎn)發(fā)到apage.jsp
    response.sendRedirect("apage.jsp");//重定向到apage.jsp
    在jsp頁面中你也會看到通過下面的方式實現(xiàn)轉(zhuǎn)發(fā):
    <jsp:forward page="apage.jsp" />
    我在初學jsp的時候,對這兩個概念非常模糊,看別人的例子的時候,也是一頭霧水,不知道什么時候該用哪個。希望下面的解說能對你有所幫助。
    提到轉(zhuǎn)發(fā)和重定向就不得不提到request作用域。很多初學者都知道當我們提交一個表單時,就創(chuàng)建了一個新的請求。實際上,當我們點擊一個鏈接時,也創(chuàng)建了一個新的請求。那么一個請求的作用于到底有多大呢?例如:
    在頁面a.jsp中有一個鏈接<a href="b.jsp?id=1">這是指向b的一個鏈接,而且還帶了一個參數(shù)</a>。當我們點擊這個連接的時候,就產(chǎn)生了一個請求,為了明確起見,我們把它叫做requestA->B。現(xiàn)在,在b.jsp頁面中我們就可以從這個請求中獲取信息了。在b.jsp中你可以寫入out.println(request.getParameter("id"))進行測試。下面更復雜一點,我們在b.jsp頁面中增加下面的語句:
    request.setAttribute("name","funcreal");
    out.println(request.getAttriblute("name"));//成功顯示了name變量的值。
    現(xiàn)在在b.jsp中再增加一個鏈接:<a href="c.jsp?age=23">這是指向c的一個鏈接,而且還帶了一個參數(shù)</a>,當我們點擊這個連接的時候,將產(chǎn)生一個新的請求,這時requestA-B也就安息了,新的請求叫做requestB-C。同樣的道理,在c.jsp中,我們可以訪問到的變量只有age,因為id,name這兩個變量都屬于requestA-B,此時他已經(jīng)不存在了。下面是源代碼:
    a.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    <a href="b.jsp?id=1">指向b.jsp,而且還帶了一個參數(shù)id=1。requestA-B現(xiàn)在誕生了</a>
    </body>
    </html> 

    b.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    <%
    out.println("id=" + request.getParameter("id"));
    request.setAttribute("name","Func Real");
    out.println("name=" + request.getAttribute("name"));
    %>
    <a href="c.jsp?age=23">requestA-B已經(jīng)結(jié)束了。指向c.jsp,而且還帶了一個參數(shù)age=23</a>
    </body>
    </html> 

    c.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    <%
    out.println("id=" + request.getParameter("id"));
    out.println("name=" + request.getAttribute("name"));
    out.println("age=" + request.getParameter("age"));
    %>
    </body>
    </html> 

      那么轉(zhuǎn)發(fā)又是怎么回事呢?現(xiàn)在增加一個頁面叫做d.jsp,并且在c.jsp中</body>前面增加一句<jsp:forward page="d.jsp"/>
    d.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    requestB-C的魔爪已經(jīng)伸到了d.jsp頁面
    <%
    out.println("age=" + request.getParameter("age"));
    %>
    </body>
    </html>
    運行程序,你會發(fā)現(xiàn)c頁面中的內(nèi)容沒有顯示出來,因為forward是自動執(zhí)行的,地址欄中雖然是c.jsp但實際上,但瀏覽器中顯示的已經(jīng)是d.jsp的內(nèi)容了,而且看到了從b.jsp傳過來的參數(shù)。你可以簡單得這樣理解:轉(zhuǎn)發(fā),就是延長了requestB-C的作用域,<jsp:forward page="d.jsp"/>,這一句話實際上是把c.jsp和d.jsp粘到了一起,他們就像是在一個頁面中。
    如果你用過struts,那么你就知道為什么在Action中,最后一句幾乎總是mapping.findForward("xxx");了。因為我們在這個Action中設(shè)置的請求作用域的變量都將會在下一個頁面(也許是另一個Action)中用到,所以要用轉(zhuǎn)發(fā)。 

    總結(jié):
    用重定向和轉(zhuǎn)發(fā)不是一個習慣問題。而是什么情況下必須用什么的問題。

    posted @ 2011-04-26 23:13 哈希 閱讀(178) | 評論 (0)編輯 收藏

    僅列出標題
    共11頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 
    主站蜘蛛池模板: 在线免费观看国产| 亚洲AV永久无码精品放毛片| 一级毛片免费播放男男| 无码视频免费一区二三区| 亚洲国产午夜电影在线入口| 日韩插啊免费视频在线观看| 亚洲av中文无码乱人伦在线咪咕| 一级毛片免费一级直接观看| 狠狠综合久久综合88亚洲| 大妹子影视剧在线观看全集免费| 亚洲欧洲日产国码无码久久99| 999zyz**站免费毛片| 久久精品亚洲日本佐佐木明希| 日韩人妻无码精品久久免费一 | 久久亚洲国产最新网站| 一级女人18毛片免费| 亚洲色偷精品一区二区三区| 国产在线观看免费完整版中文版| 精品亚洲成A人在线观看青青| 亚洲精品国产高清嫩草影院| 你是我的城池营垒免费观看完整版 | 国产精品亚洲一区二区无码| 亚洲AV成人潮喷综合网| 好猛好深好爽好硬免费视频| 亚洲精品天堂在线观看| 免费看大美女大黄大色| 特级毛片全部免费播放a一级| 在线日韩日本国产亚洲| 中文字幕视频免费| 亚洲sm另类一区二区三区| 日本亚洲国产一区二区三区| www视频免费看| 添bbb免费观看高清视频| 国产av无码专区亚洲av桃花庵| 成人免费黄色网址| 小说专区亚洲春色校园| 亚洲s色大片在线观看| 成人性生交大片免费看午夜a | 99视频在线观看免费| 亚洲欧洲日本精品| 亚洲AⅤ永久无码精品AA|