飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
          JAVA相關基礎知識
          1、面向對象的特征有哪些方面???
          1.抽象:
          抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
          2.繼承:
          繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
          3.封裝:
          封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始于這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。
          4.?多態性:
          多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
          2、String是最基本的數據類型嗎?
          基本數據類型包括byte、int、char、long、float、double、boolean和short。
          java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
          3、int?和?Integer?有什么區別
          Java?提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
          原始類型封裝類
          booleanBoolean
          charCharacter
          byteByte
          shortShort
          intInteger
          longLong
          floatFloat
          doubleDouble
          引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值為?null,而原始類型實例變量的缺省值與它們的類型有關。
          4、String?和StringBuffer的區別
          JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據。
          5、運行時異常與一般異常有何異同?
          異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
          6、說出Servlet的生命周期,并說出Servlet和CGI的區別。
          Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
          與cgi的區別在于servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。
          7、說出ArrayList,Vector,?LinkedList的存儲性能和特性
          ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
          8、EJB是基于哪些技術實現的?并說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。
          ????EJB包括Session?Bean、Entity?Bean、Message?Driven?Bean,基于JNDI、RMI、JAT等技術實現。
          SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操作,例如訪問數據庫、調用其他EJB組件。EntityBean被用來代表應用系統中用到的數據。
          對于客戶機,SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。
          對于客戶機,EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。
          Session?Bean?還可以再細分為?Stateful?Session?Bean?與?Stateless?Session?Bean?,這兩種的?Session?Bean都可以將系統邏輯放在?method之中執行,不同的是?Stateful?Session?Bean?可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的?Stateful?Session?Bean?的實體。Stateless?Session?Bean?雖然也是邏輯組件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫?Stateless?Session?Bean?的時候,EJB?Container?并不會找尋特定的?Stateless?Session?Bean?的實體來執行這個?method。換言之,很可能數個使用者在執行某個?Stateless?Session?Bean?的?methods?時,會是同一個?Bean?的?Instance?在執行。從內存方面來看,?Stateful?Session?Bean?與?Stateless?Session?Bean?比較,?Stateful?Session?Bean?會消耗?J2EE?Server?較多的內存,然而?Stateful?Session?Bean?的優勢卻在于他可以維持使用者的狀態。
          9、Collection?和?Collections的區別。?
            Collection是集合類的上級接口,繼承與他的接口主要有Set?和List.
          Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。
          10、&和&&的區別。?
          ????&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
          11、HashMap和Hashtable的區別。?
          ????HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
          HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
          HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。?
          Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map?interface的一個實現。
          最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap?就必須為之提供外同步。?
          Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
          12、final,?finally,?finalize的區別。?
            final?用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
          finally是異常處理語句結構的一部分,表示總是執行。
          finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。
          13、sleep()?和?wait()?有什么區別??
          ????sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用sleep不會釋放對象鎖。
          wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
          14、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
          方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫?(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
          15、error和exception有什么區別?
          error?表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
          ????exception?表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
          16、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
          如果數據將在線程間共享。例如正在寫的數據以后可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那么這些數據就是共享數據,必須進行同步存取。
          當應用程序在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。
          17、abstract?class和interface有什么區別?
          聲明方法的存在而不去實現它的類被叫做抽象類(abstract?class),它用于要創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract?類的實例。然而可以創建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract?類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
          接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static?final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對象上調用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof?運算符可以用來決定某對象的類是否實現了接口。
          18、heap和stack有什么區別。
          棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進先出的方式進行處理。
          堆是棧的一個組成元素
          19、forward?和redirect的區別
          forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
          ????redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。?
          posted on 2006-06-09 11:06 天外飛仙 閱讀(244) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 宁都县| 深圳市| 许昌市| 奎屯市| 黄平县| 枣阳市| 滁州市| 旅游| 余庆县| 武川县| 阿城市| 建宁县| 甘孜县| 山阳县| 石嘴山市| 安新县| 屯留县| 卢湾区| 同江市| 宣化县| 涿鹿县| 孟连| 荔浦县| 镇平县| 林甸县| 刚察县| 金沙县| 建德市| 沿河| 上栗县| 永年县| 灵川县| 临漳县| 慈利县| 团风县| 玉田县| 沾化县| 新邵县| 阳江市| 三原县| 云林县|