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

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

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

    posts - 73,  comments - 55,  trackbacks - 0

    EJB 方面

    94 EJB2.0 有哪些內容 ? 分別用在什么場合 ? EJB2.0 EJB1.1 的區別 ?
    答: 規范內容包括 Bean 提供者,應用程序裝配者, EJB 容器, EJB 配置工具, EJB 服務提供者,系統管理員。這里面, EJB 容器是 EJB 之所以能夠運行的核心。 EJB 容器管理著 EJB 的創建,撤消,激活,去活,與數據庫的連接等等重要的核心工作。 JSP,Servlet,EJB,JNDI,JDBC,JMS.....
    95
    EJB JAVA BEAN 的區別?

    答: Java Bean 是可復用的組件,對 Java Bean 并沒有嚴格的規范,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java Bean 是被容器所創建(如 Tomcat) 的,所以 Java Bean 應具有一個無參的構造器,另外,通常 Java Bean 還要實現 Serializable 接口用于實現 Bean 的持久性。 Java Bean 實際上相當于微軟 COM 模型中的本地進程內 COM 組件,它是不能被跨進程訪問的。 Enterprise Java Bean 相當于 DCOM ,即分布式組件。它是基于 Java 的遠程方法調用( RMI )技術的,所以 EJB 可以被遠程訪問(跨進程、跨計算機)。但 EJB 必須被布署在諸如 Webspere WebLogic 這樣的容器中, EJB 客戶從不直接訪問真正的 EJB 組件,而是通過其容器訪問。 EJB 容器是 EJB 組件的代理, EJB 組件由容器所創建和管理。客戶通過容器來訪問真正的 EJB 組件。
    96
    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? 的優勢卻在于他可以維持使用者的狀態。
    97 EJB JAVA?BEAN 的區別?
    答: Java?Bean? 是可復用的組件,對 Java?Bean 并沒有嚴格的規范,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java?Bean 是被容器所創建(如 Tomcat )的,所以 Java?Bean 應具有一個無參的構造器,另外,通常 Java?Bean 還要實現 Serializable 接口用于實現 Bean 的持久性。 Java?Bean 實際上相當于微軟 COM 模型中的本地進程內 COM 組件,它是不能被跨進程訪問的。 Enterprise?Java?Bean? 相當于 DCOM ,即分布式組件。它是基于 Java 的遠程方法調用( RMI )技術的,所以 EJB 可以被遠程訪問(跨進程、跨計算機)。但 EJB 必須被布署在諸如 Webspere WebLogic 這樣的容器中, EJB 客戶從不直接訪問真正的 EJB 組件,而是通過其容器訪問。 EJB 容器是 EJB 組件的代理, EJB 組件由容器所創建和管理。客戶通過容器來訪問真正的 EJB 組件。
    EJB 包括( SessionBean,EntityBean )說出他們的生命周期,及如何管理事務的?
    SessionBean
    Stateless?Session?Bean? 的生命周期是由容器決定的,當客戶機發出請求要建立一個 Bean 的實例時, EJB 容器不一定要創建一個新的 Bean 的實例供客戶機調用,而是隨便找一個現有的實例提供給客戶機。當客戶機第一次調用一個 Stateful?Session?Bean? 時,容器必須立即在服務器中創建一個新的 Bean 實例,并關聯到客戶機上,以后此客戶機調用 Stateful?Session?Bean? 的方法時容器會把調用分派到與此客戶機相關聯的 Bean 實例。
    EntityBean
    Entity?Beans 能存活相對較長的時間,并且狀態是持續的。只要數據庫中的數據存在, Entity?beans 就一直存活。而不是按照應用程序或者服務進程來說的。即使 EJB 容器崩潰了, Entity?beans 也是存活的。 Entity?Beans 生命周期能夠被容器或者 ?Beans 自己管理。
    EJB
    通過以下技術管理實務:對象管理組織( OMG )的對象實務服務( OTS ), Sun?Microsystems Transaction?Service JTS )、 Java?Transaction?API JTA ),開發組( X/Open )的 XA 接口。
    98
    EJB 的角色和三個對象
    答: 一個完整的基于 EJB 的分布式計算結構由六個角色組成,這六個角色可以由不同的開發商提供,每個角色所作的工作必須遵循 Sun 公司提供的 EJB 規范,以保證彼此之間的兼容性。這六個角色分別是 EJB 組件開發者( Enterprise?Bean?Provider ? 、應用組合者( Application?Assembler )、部署者( Deployer )、 EJB? 服務器提供者( EJB?Server?Provider )、 EJB? 容器提供者( EJB?Container?Provider )、系統管理員( System?Administrator
    三個對象是 Remote Local )接口、 Home LocalHome )接口, Bean
    99
    EJB 容器提供的服務
    答: 主要提供聲明周期管理、代碼產生、持續性管理、安全、事務管理、鎖和并發行管理等服務。
    100
    EJB 規范規定 EJB 中禁止的操作有哪些? ?
    ? 答: 1. 不能操作線程和線程 API( 線程 API 指非線程對象的方法如 notify,wait ) 2. 不能操作 awt 3. 不能實現服務器功能, 4. 不能對靜態屬生存取, 5. 不能使用 IO 操作直接存取文件系統, 6. 不能加載本地庫 . 7. 不能將 this 作為變量和返回, 8. 不能循環調用。

    101
    remote 接口和 home 接口主要作用
    答: remote 接口定義了業務方法,用于 EJB 客戶端調用業務方法。
    home
    接口是 EJB 工廠用于創建和移除查找 EJB 實例
    102
    bean? 實例的生命周期
    答: 對于 Stateless?Session?Bean Entity?Bean Message?Driven?Bean 一般存在緩沖池管理,而對于 Entity?Bean Statefull?Session?Bean 存在 Cache 管理,通常包含創建實例,設置上下文、創建 EJB?Object create )、業務方法調用、 remove 等過程,對于存在緩沖池管理的 Bean ,在 create 之后實例并不從內存清除,而是采用緩沖池調度機制不斷重用實例,而對于存在 Cache 管理的 Bean 則通過激活和去激活機制保持 Bean 的狀態并限制內存中實例數量。
    103
    EJB 的激活機制
    答: Stateful?Session?Bean? 為例:其 Cache 大小決定了內存中可以同時存在的 Bean 實例的數量,根據 MRU NRU 算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個 EJB 實例業務方法時,如果對應 EJB?Object 發現自己沒有綁定對應的 Bean 實例則從其去激活 Bean 存儲中(通過序列化機制存儲實例)回復(激活)此實例。狀態變遷前會調用對應的 ejbActive ejbPassivate 方法。
    104
    EJB 的幾種類型
    答: 會話( Session Bean? ,實體( Entity Bean? 消息驅動的( Message?Driven Bean
    會話 Bean 又可分為有狀態( Stateful )和無狀態( Stateless )兩種

    實體 Bean 可分為 Bean 管理的持續性( BMP )和容器管理的持續性( CMP )兩種
    105
    、客服端調用 EJB 對象的幾個基本步驟
    答: 設置 JNDI 服務工廠以及 JNDI 服務地址系統屬性,查找 Home 接口,從 Home 接口調用 Create 方法創建 Remote 接口,通過 Remote 接口調用其業務方法。

    應用服務器方面

    106 、如何給 weblogic 指定大小的內存 ??
    答: 在啟動 Weblogic 的腳本中(位于所在 Domian 對應服務器目錄下的 startServerName ),增加 set?MEM_ARGS=-Xms32m?-Xmx200m ,可以調整最小內存為 32M ,最大
    200M
    EJB
    需直接實現它的業務接口或 Home 接口嗎,請簡述理由。

    遠程接口和 Home 接口不需要直接實現,他們的實現代碼是由服務器產生的,程序運行中對應實現類會作為對應接口類型的實例被使用。
    107 、應用服務器有那些?
    答: BEA?WebLogic?Server IBM?WebSphere?Application?Server Oracle9i?Application?Server jBoss Tomcat
    108
    、如何設定的 weblogic 的熱啟動模式 ( 開發模式 ) 與產品發布模式
    ?
    答: 可以在管理控制臺中修改對應服務器的啟動模式為開發或產品模式之一。或者修改服務的啟動文件或者 commenv 文件,增加 set?PRODUCTION_MODE=true

    109
    、如何啟動時不需輸入用戶名與密碼 ?
    答: 修改服務啟動文件,增加 ?WLS_USER WLS_PW 項。也可以在 boot.properties 文件中增加加密過的用戶名和密碼
    .
    110
    、在 weblogic 管理制臺中對一個應用域 ( 或者說是一個網站 ,Domain) 進行 jms ejb 或連接池等相關信息進行配置后 , 實際保存在什么文件中 ?

    答: 保存在此 Domain config.xml 文件中,它是服務器的核心配置文件。
    111
    、說說 weblogic 中一個 Domain 的缺省目錄結構 ? 比如要將一個簡單的 helloWorld.jsp 放入何目錄下 , 然的在瀏覽器上就可打入 http:// 主機 : 端口號 //helloword.jsp 就可以看到運行結果了 ? ? 又比如這其中用到了一個自己寫的 javaBean 該如何辦 ?
    答: Domain 目錄服務器目錄 applications ,將應用目錄放在此目錄下將可以作為應用訪問,如果是 Web 應用,應用目錄需要滿足 Web 應用目錄要求, jsp 文件可以直接放在應用目錄中, Javabean 需要放在應用目錄的 WEB-INF 目錄的 classes 目錄中,設置服務器的缺省應用將可以實現在瀏覽器上無需輸入應用名。

    112
    、在 weblogic 中發布 ejb 需涉及到哪些配置文件
    答: 不同類型的 EJB 涉及的配置文件不同,都涉及到的配置文件包括 ejb-jar.xml,weblogic-ejb-jar.xmlCMP 實體 Bean 一般還需要 weblogic-cmp-rdbms-jar.xml?
    86
    、如何在 weblogic 中進行 ssl 配置與客戶端的認證配置或說說 j2ee( 標準 ) 進行 ssl 的配置

    缺省安裝中使用 DemoIdentity.jks DemoTrust.jks??KeyStore 實現 SSL ,需要配置服務器使用 Enable?SSL ,配置其端口,在產品模式下需要從 CA 獲取私有密鑰和數字證書,創建 identity trust?keystore ,裝載獲得的密鑰和數字證書。可以配置此 SSL 連接是單向還是雙向的。
    113
    、如何查看在 weblogic 中已經發布的 EJB?
    答: 可以使用管理控制臺,在它的 Deployment 中可以查看所有已發布的
    EJB
    說說在 weblogic 中開發消息 Bean 時的 persistent non-persisten 的差別

    persistent
    方式的 MDB 可以保證消息傳遞的可靠性 , 也就是如果 EJB 容器出現問題而 JMS 服務器依然會將消息在此 MDB 可用的時候發送過來,而 non persistent 方式的消息將被丟棄。

    J2EE,MVC 方面

    114 MVC 的各個部分都有那些技術來實現 ? 如何實現 ?
    答: MVC Model View Controller 的簡寫。 "Model" 代表的是應用的業務邏輯(通過 JavaBean EJB 組件實現), "View" 是應用的表示面(由 JSP 頁面產生), "Controller" 是提供應用的處理過程控制(一般是一個 Servlet ),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。
    115
    J2EE 是什么?
    答: Je22 Sun 公司提出的多層 (multi-diered), 分布式 (distributed), 基于組件 (component-base) 的企業級應用模型 (enterpriese application model). 在這樣的一個應用系統中,可按照功能劃分為不同的組件,這些組件又可在不同計算機上,并且處于相應的層次 (tier) 中。所屬層次包括客戶層 (clietn tier) 組件 ,web 層和組件 ,Business 層和組件 , 企業信息系統 (EIS) 層。
    116
    WEB SERVICE 名詞解釋。 JSWDL 開發包的介紹。 JAXP JAXM 的解釋。 SOAP UDDI,WSDL 解釋。
    答: Web Service 描述語言 WSDL
    SOAP
    即簡單對象訪問協議 (Simple Object Access Protocol) ,它是用于交換 XML 編碼信息的輕量級協議。

    UDDI
    的目的是為電子商務建立標準; UDDI 是一套基于 Web 的、分布式的、為 Web Service 提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的 Web Service 注冊,以使別的企業能夠發現的訪問協議的實現標準。
    117
    J2EE 是技術還是平臺還是框架?
    答: J2EE 本身是一個標準,一個為企業分布式應用的開發提供的標準平臺。
    ?J2EE
    也是一個框架,包括 JDBC JNDI RMI JMS EJB JTA 等技術。
    118 STRUTS 的應用 ( STRUTS 架構 )
    答: Struts 是采用 Java Servlet/JavaServer Pages 技術,開發 Web 應用程序的開放源碼的 framework 采用 Struts 能開發出基于 MVC(Model-View-Controller) 設計模式的應用構架。 Struts 有如下的主要功能:
    . 包含一個 controller servlet ,能將用戶的請求發送到相應的 Action 對象。

    .JSP 自由 tag 庫,并且在 controller servlet 中提供關聯支持,幫助開發員創建交互式表單應用。

    . 提供了一系列實用對象: XML 處理、通過 Java reflection APIs 自動處理 JavaBeans 屬性、國際化的提示和消息。

    119 WEB?SERVICE 名詞解釋。 JSWDL 開發包的介紹。 JAXP JAXM 的解釋。 SOAP UDDI,WSDL 解釋。 ?
    答: Web?ServiceWeb?Service 是基于網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得 Web?Service 能與其他兼容的組件進行互操作。

    JAXP(Java?API?for?XML?Parsing)?
    定義了在 Java 中使用 DOM,?SAX,?XSLT 的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當你需要改變具體的實現時候也不需要修改代碼。
    JAXM(Java?API?for?XML?Messaging)?
    是為 SOAP 通信提供訪問方法和傳輸機制的 API
    WSDL
    是一種 ?XML? 格式,用于將網絡服務描述為一組端點,這些端點對包含面向文檔信息或面向過程信息的消息進行操作。這種格式首先對操作和消息進行抽象描述,然后將其綁定到具體的網絡協議和消息格式上以定義端點。相關的具體端點即組合成為抽象端點(服務)。
    SOAP
    即簡單對象訪問協議 (Simple?Object?Access?Protocol) ,它是用于交換 XML 編碼信息的輕量級協議。 ?
    UDDI?
    的目的是為電子商務建立標準; UDDI 是一套基于 Web 的、分布式的、為 Web?Service 提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的 Web?Service 注冊,以使別的企業能夠發現的訪問協議的實現標準。

    120
    C/S? ?B/S? 區別:
    答:
    有如下八個方面的不同:
    1.硬件環境不同 :?
       C/S? 一般建立在專用的網絡上 ,? 小范圍里的網絡環境 ,? 局域網之間再通過專門服務器提供連接和數據交換服務
    .
       B/S? 建立在廣域網之上的 ,? 不必是專門的網絡硬件環境 , 例與電話上網 ,? 租用設備 .? 信息自己管理 .? 有比 C/S 更強的適應范圍 ,? 一般只要有操作系統和瀏覽器就行
    ?
    2.對安全要求不同
    ?
       C/S? 一般面向相對固定的用戶群 ,? 對信息安全的控制能力很強 .? 一般高度機密的信息系統采用 C/S? 結構適宜 .? 可以通過 B/S 發布部分可公開信息
    .
       B/S? 建立在廣域網之上 ,? 對安全的控制能力相對弱 ,? 可能面向不可知的用戶。

    3.對程序架構不同 ?
       C/S? 程序可以更加注重流程 ,? 可以對權限多層次校驗 ,? 對系統運行速度可以較少考慮
    .
       B/S? 對安全以及訪問速度的多重的考慮 ,? 建立在需要更加優化的基礎之上 .? C/S 有更高的要求 ?B/S 結構的程序架構是發展的趨勢 ,? MS .Net 系列的 BizTalk?2000?Exchange?2000 ,? 全面支持網絡的構件搭建的系統 .?SUN? IBM 推的 JavaBean? 構件技術等 , 使 ?B/S 更加成熟
    .?
    4.軟件重用不同
    ?
       C/S? 程序可以不可避免的整體性考慮 ,? 構件的重用性不如在 B/S 要求下的構件的重用性好
    .
       B/S? 對的多重結構 , 要求構件相對獨立的功能 .? 能夠相對較好的重用 . 就入買來的餐桌可以再利用 , 而不是做在墻上的石頭桌子
    ?
    5.系統維護不同
    ??
       C/S? 程序由于整體性 ,? 必須整體考察 ,? 處理出現的問題以及系統升級 .? 升級難 .? 可能是再做一個全新的系統

       B/S? 構件組成 , 方面構件個別的更換 , 實現系統的無縫升級 .? 系統維護開銷減到最小 . 用戶從網上自己下載安裝就可以實現升級 .?
    6.處理問題不同
    ?
       C/S? 程序可以處理用戶面固定 ,? 并且在相同區域 ,? 安全要求高需求 ,? 與操作系統相關 .? 應該都是相同的系統

       B/S? 建立在廣域網上 ,? 面向不同的用戶群 ,? 分散地域 ,? 這是 C/S 無法作到的 .? 與操作系統平臺關系最小 .?
    7.用戶接口不同
    ?
       C/S? 多是建立的 Window 平臺上 , 表現方法有限 , 對程序員普遍要求較高

       B/S? 建立在瀏覽器上 ,? 有更加豐富和生動的表現方式與用戶交流 .? 并且大部分難度減低 , 減低開發成本 .?
    8.信息流不同
    ?
       C/S? 程序一般是典型的中央集權的機械式處理 ,? 交互性相對低

       B/S? 信息流向可變化 ,?B-B?B-C?B-G 等信息、流向的變化 ,? 更像交易中心。
    121 、什么是 web 容器
    答:
    給處于其中的應用程序組件( JSP SERVLET )提供一個環境,使 JSP,SERVLET 直接更容器中的環境變量接 ** 互,不必關注其它系統問題。主要有 WEB 服務器來實現。例如: TOMCAT,WEBLOGIC,WEBSPHERE 等。該容器提供的接口嚴格遵守 J2EE 規范中的 WEB?APPLICATION? 標準。我們把遵守以上標準的 WEB 服務器就叫做 J2EE 中的 WEB 容器。 122 、什么是 EJB 容器
    答:
    Enterprise?java?bean? 容器。更具有行業領域特色。他提供給運行在其中的組件 EJB 各種管理功能。只要滿足 J2EE 規范的 EJB 放入該容器,馬上就會被容器進行高效率的管理。并且可以通過現成的接口來獲得系統級別的服務。例如郵件服務、事務管理
    123 什么是 JNDI
    答:
    Java?Naming?&?Directory?Interface JAVA 命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應用程序的功能。
    124 、什么是 JMS
    答:
    Java?Message?Service JAVA 消息服務。主要實現各個應用程序之間的通訊。包括點對點和廣播。
    125 、什么是 JTA
    答:
    Java?Transaction?API JAVA 事務服務。提供各種分布式事務服務。應用程序只需調用其提供的接口即可。
    126 、什么是 JAF
    答:
    Java?Action?FrameWork JAVA 安全認證框架。提供一些安全控制方面的框架。讓開發者通過各種部署和自定義實現自己的個性安全控制策略。
    RMI/IIOP:
    Remote?Method?Invocation?/internet 對象請求中介協議)他們主要用于通過遠程調用服務。例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,我們可以在本地計算機上實現對其直接調用。當然這是要通過一定的規范才能在異構的系統之間進行通信。 RMI JAVA 特有的。
    127 MVC 的各個部分都有那些技術來實現 ? 如何實現 ??
    答:
    MVC Model View Controller 的簡寫。 "Model"? 代表的是應用的業務邏輯(通過 JavaBean EJB 組件實現), ?"View"? 是應用的表示面(由 JSP 頁面產生), "Controller"? 是提供應用的處理過程控制(一般是一個 Servlet ),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。

    設計模式方面

    128 、開發中都用到了那些設計模式 ? 用在什么場合 ?
    答: 每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作。主要用到了 MVC 的設計模式。用來開發 JSP/Servlet 或者 J2EE 的相關應用。簡單工廠模式等。
    129 、說說你所熟悉或聽說過的 j2ee 中的幾種常用模式 ? 及對設計模式的一些看法
    答: Session?Facade?Pattern :使用 SessionBean 訪問 EntityBean
    Message?Facade?Pattern
    :實現異步調用

    EJB?Command?Pattern
    :使用 Command?JavaBeans 取代 SessionBean ,實現輕量級訪問
    Data?Transfer?Object?Factory
    :通過 DTO?Factory 簡化 EntityBean 數據提供特性
    Generic?Attribute?Access
    :通過 AttibuteAccess 接口簡化 EntityBean 數據提供特性
    Business?Interface
    :通過遠程(本地)接口和 Bean 類實現相同接口規范業務邏輯一致性
    EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越復雜,項目隊伍越龐大則越能體現良好設計的重要性。
    130 j2ee 常用的設計模式?說明工廠模式。
    ? 答: Java 中的 23 種設計模式:
    Factory
    (工廠模式), ??????Builder (建造模式), ???????Factory?Method (工廠方法模式),
    Prototype
    (原始模型模式), Singleton (單例模式), ????Facade (門面模式),
    Adapter
    (適配器模式), ????Bridge (橋梁模式), ????????Composite (合成模式),
    Decorator
    (裝飾模式), ????Flyweight (享元模式), ?????Proxy (代理模式),
    Command
    (命令模式), ??????Interpreter (解釋器模式), ?Visitor (訪問者模式),
    Iterator
    (迭代子模式), ???Mediator (調停者模式), ????Memento (備忘錄模式),
    Observer
    (觀察者模式), ???State (狀態模式), ?????????Strategy (策略模式),
    Template?Method
    (模板方法模式), ?Chain?Of?Responsibleity (責任鏈模式)
    工 廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類并且 實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然后需要定義一個 工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例后,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。
    131 UML 方面
    答: 標準建模語言 UML 。用例圖 , 靜態圖 ( 包括類圖、對象圖和包圖 ), 行為圖 , 交互圖 ( 順序圖 , 合作圖 ), 實現圖 ,
    UML 方面 ?

    CORBA 方面

    132 CORBA 是什么 ? 用途是什么 ?
    答: CORBA 標準是公共對象請求代理結構 (Common Object Request Broker Architecture) ,由對象管理組織 (Object Management Group ,縮寫為 OMG) 標準化。它的組成是接口定義語言 (IDL), 語言綁定 (binding: 也譯為聯編 ) 和允許應用程序間互操作的協議。 其目的為:
    用不同的程序設計語言書寫
    在不同的進程中運行

    為不同的操作系統開發

    LINUX 方面

    133 LINUX 下線程, GDI 類的解釋。
    答: LINUX實現的就是基于核心輕量級進程的"一對一"線程模型,一個線程實體對應一個核心輕量級進程,而線程之間的管理在核外函數庫中實現。
    GDI類為圖像設備編程接口類庫。
    134 LINUX 下線程, GDI 類的解釋。

    LINUX 實現的就是基于核心輕量級進程的 " 一對一 " 線程模型,一個線程實體對應一個核心輕量級進程,而線程之間的管理在核外函數庫中實現。 ?
    GDI
    類為圖像設備編程接口類庫。

    代碼與編程題
    135
    、寫一個 Singleton 出來
    Singleton 模式主要作用是保證在 Java 應用程序中,一個類 Class 只有一個實例存在。
    一般 Singleton 模式通常有幾種種形式 :
    第一種形式 :? 定義一個類,它的構造函數為 private 的,它有一個 static private 的該類變量,在類初始化時實例話,通過一個 public getInstance 方法獲取對它的引用 , 繼而調用其中的方法。

    public?class?Singleton?{
    private?Singleton(){}
       ????// 在自己內部定義自己一個實例,是不是很奇怪?
       ????// 注意這是 private? 只供內部調用
       ????private?static?Singleton?instance?=?new?Singleton();
       ????// 這里提供了一個供外部訪問本 class 的靜態方法,可以直接訪問  

       ????public?static?Singleton?getInstance()?{
         ????return?instance;?   

       ????}?
    ????}?
    ????
    第二種形式
    :?
    public?class?Singleton?{?
      
    private?static?Singleton?instance?=?null;
      
    public?static?synchronized?Singleton?getInstance()?{
       // 這個方法比上面有所改進,不用每次都進行生成對象,只是第一次    ?  

       // 使用時生成實例,提高了效率!
       if?(instance==null)
         instance
    new?Singleton();
    return?instance;?
      
    }?
    }?
    其他形式
    :
    定義一個類,它的構造函數為 private 的,所有方法為 static 的。

    一般認為第一種形式要更加安全些 ?
    136 、繼承時候類的執行順序問題 , 一般都是選擇題 , 問你將會打印出什么 ?
    : 父類:
    package test;
    public class? FatherClass
    {
    ??? public FatherClass()
    ?{
    ??System.out.println("FatherClass Create");
    ?}
    }
    子類 :
    package test;
    import test.FatherClass;
    public class? ChildClass extends FatherClass
    {
    ?public ChildClass()
    ?{
    ??System.out.println("ChildClass Create");
    ?}
    ?public static void main(String[] args)
    ?{
    ??FatherClass fc = new FatherClass();
    ??ChildClass cc = new ChildClass();
    ?}
    }
    輸出結果:

    C:\>java test.ChildClass
    FatherClass Create
    FatherClass Create
    ChildClass Create

    137 、內部類的實現方式 ?
    答: 示例代碼如下:
    package test;
    public class? OuterClass
    {
    ?private class InterClass
    ?{
    ??public InterClass()
    ??{
    ???System.out.println("InterClass Create");
    ??}
    ?}
    ?public OuterClass()
    ?{
    ??InterClass ic = new InterClass();
    ??System.out.println("OuterClass Create");
    ?}
    ?public static void main(String[] args)
    ?{
    ??OuterClass oc = new OuterClass();
    ?}
    }
    輸出結果 :
    C:\>java test/OuterClass
    InterClass Create
    OuterClass Create
    再一個例題:

    public class OuterClass {
    ? private double d1 = 1.0;
    ??? //insert code here
    }
    You need to insert an inner class declaration at line 3. Which two inner class declarations are

    valid?(Choose two.)
    A. class InnerOne{
    ???? public static double methoda() {return d1;}
    ?? }
    B. public class InnerOne{
    ???? static double methoda() {return d1;}
    ?? }
    C. private class InnerOne{
    ???? double methoda() {return d1;}
    ?? }
    D. static class InnerOne{
    ???? protected double methoda() {return d1;}
    ?? }
    E. abstract class InnerOne{
    ???? public abstract double methoda();
    ?? }
    說明如下:

    . 靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。 A B
    . 靜態內部類的非靜態成員可以訪問外部類的靜態變量,而不可訪問外部類的非靜態變量; return d1 出錯。

    D
    . 非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。 C 正確
    . 答案為 C E

    138 Java 的通信編程,編程題 ( 或問答 ) ,用 JAVA SOCKET 編程,讀服務器幾個字符,再寫入本地顯示?
    : Server 端程序 :
    package test;
    import java.net.*;
    import java.io.*;

    public class Server
    {
    ?private ServerSocket ss;
    ?private Socket socket;
    ?private BufferedReader in;
    ?private PrintWriter out;
    ?public Server()
    ?{
    ??try
    ??{
    ???ss=new ServerSocket(10000);
    ???while(true)
    ???{
    ????socket = ss.accept();
    ????String RemoteIP = socket.getInetAddress().getHostAddress();
    ????String RemotePort = ":"+socket.getLocalPort();
    ????System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
    ????in = new BufferedReader(new

    InputStreamReader(socket.getInputStream()));
    ????String line = in.readLine();
    ????System.out.println("Cleint send is :" + line);
    ????out = new PrintWriter(socket.getOutputStream(),true);
    ????out.println("Your Message Received!");
    ????out.close();
    ????in.close();
    ????socket.close();
    ???}
    ??}catch (IOException e)
    ??{
    ???out.println("wrong");
    ??}
    ?}
    ?public static void main(String[] args)
    ?{
    ??new Server();
    ?}
    };
    Client
    端程序
    :
    package test;
    import java.io.*;
    import java.net.*;

    public class Client
    {
    ?Socket socket;
    ?BufferedReader in;
    ?PrintWriter out;
    ?public Client()
    ?{
    ??try
    ??{
    ???System.out.println("Try to Connect to 127.0.0.1:10000");
    ???socket = new Socket("127.0.0.1",10000);
    ???System.out.println("The Server Connected!");
    ???System.out.println("Please enter some Character:");
    ???BufferedReader line = new BufferedReader(new

    InputStreamReader(System.in));
    ???out = new PrintWriter(socket.getOutputStream(),true);
    ???out.println(line.readLine());
    ???in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    ???System.out.println(in.readLine());
    ???out.close();
    ???in.close();
    ???socket.close();
    ??}catch(IOException e)
    ??{
    ???out.println("Wrong");
    ??}
    ?}
    ?public static void main(String[] args)
    ?{
    ??new Client();
    ?}
    };

    139 、用 JAVA 實現一種排序, JAVA 類實現序列化的方法 ( 二種 ) 如在 COLLECTION 框架中,實現比較要實現什么樣的接口?
    : 用插入法進行排序代碼如下
    package test;
    import java.util.*;
    class? InsertSort
    {
    ?ArrayList al;
    ?public InsertSort(int num,int mod)
    ?{
    ??al = new ArrayList(num);
    ??Random rand = new Random();
    ??System.out.println("The ArrayList Sort Before:");
    ??for (int i=0;i<num ;i++ )
    ??{
    ???al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
    ???System.out.println("al["+i+"]="+al.get(i));
    ??}
    ?}
    ?public void SortIt()
    ?{
    ??Integer tempInt;
    ??int MaxSize=1;
    ??for(int i=1;i<al.size();i++)
    ??{
    ?????? tempInt = (Integer)al.remove(i);
    ????if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
    ????{
    ?????al.add(MaxSize,tempInt);
    ?????MaxSize++;
    ?????System.out.println(al.toString());
    ????} else {
    ?????for (int j=0;j<MaxSize ;j++ )
    ?????{
    ??????if

    (((Integer)al.get(j)).intValue()>=tempInt.intValue())
    ??????{
    ???????al.add(j,tempInt);
    ???????MaxSize++;
    ???????System.out.println(al.toString());
    ???????break;
    ??????}
    ?????}
    ????}
    ??}
    ??System.out.println("The ArrayList Sort After:");
    ??for(int i=0;i<al.size();i++)
    ??{
    ???System.out.println("al["+i+"]="+al.get(i));
    ??}
    ?}
    ?public static void main(String[] args)
    ?{
    ??InsertSort is = new InsertSort(10,100);
    ??is.SortIt();
    ?}
    }
    140
    、編程:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如 ABC”4 ,應該截為 AB” ,輸入 ABC DEF” 6 ,應該輸出為 ABC” 而不是 ABC+ 漢的半個

    答: 代碼如下:
    package test;

    class? SplitString
    {
    ?String SplitStr;
    ?int SplitByte;
    ?public SplitString(String str,int bytes)
    ?{
    ??SplitStr=str;
    ??SplitByte=bytes;
    ??System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte);
    ?}
    ?public void SplitIt()
    ?{
    ??int loopCount;
    ??

    loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/ Split

    Byte+1);
    ??System.out.println("Will Split into "+loopCount);
    ??for (int i=1;i<=loopCount ;i++ )
    ??{
    ???if (i==loopCount){
    ????

    System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
    ???} else {
    ????

    System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
    ???}
    ??}
    ?}
    ?public static void main(String[] args)
    ?{
    ??SplitString ss = new SplitString("test
    dd dsaf 中男大 3443n 中國 43 中國人

    0ewldfls=103",4);
    ??ss.SplitIt();
    ?}
    }

    141 JAVA 多線程編程。 JAVA 寫一個多線程程序,如寫四個線程,二個加 1 ,二個對一個變量減一,輸出。
    希望大家補上,謝謝

    142 、可能會讓你寫一段 Jdbc Oracle 的程序 , 并實現數據查詢 .
    : 程序如下:
    package hello.ant;
    import java.sql.*;
    public class? jdbc
    {
    ?String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    ?String theUser="admin";
    ?String thePw="manager";
    ?Connection c=null;
    ?Statement conn;
    ?ResultSet rs=null;
    ?public jdbc()
    ?{
    ??try{
    ??? Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    ????????? c = DriverManager.getConnection(dbUrl,theUser,thePw);
    ??? conn=c.createStatement();
    ??}catch(Exception e){
    ???e.printStackTrace();
    ??}
    ?}
    ?public boolean executeUpdate(String sql)
    ?{
    ???try
    ???{
    ?????conn.executeUpdate(sql);
    ?????return true;
    ???}
    ???catch (SQLException e)
    ???{
    ?????e.printStackTrace();
    ?????return false;
    ???}
    ?}
    ?public ResultSet executeQuery(String sql)
    ?{
    ???rs=null;
    ???try
    ???{
    ?????rs=conn.executeQuery(sql);
    ???}
    ???catch (SQLException e)
    ???{
    ?????e.printStackTrace();
    ???}
    ???return rs;
    ?}
    ?public void close()
    ?{
    ???try
    ???{
    ?????conn.close();
    ?????c.close();
    ???}
    ???catch (Exception e)
    ???{
    ?????e.printStackTrace();
    ???}
    ?}
    ?public static void main(String[] args)
    ?{
    ??ResultSet rs;
    ??jdbc conn = new jdbc();
    ??rs=conn.executeQuery("select * from test");
    ??try{
    ??while (rs.next())
    ??{
    ???System.out.println(rs.getString("id"));
    ???System.out.println(rs.getString("name"));
    ??}
    ??}catch(Exception e)
    ??{
    ???e.printStackTrace();
    ??}
    ?}
    }

    143 ORACLE 大數據量下的分頁解決方法。一般用截取 ID 方法,還有是三層嵌套方法。
    : 一種分頁方法
    <%
    ? int i=1;
    ? int numPages=14;
    ? String pages = request.getParameter("page") ;
    ? int currentPage = 1;
    ? currentPage=(pages==null)?(1):{Integer.parseInt(pages)}
    ? sql = "select count(*) from tables";
    ? ResultSet rs = DBLink.executeQuery(sql) ;
    ? while(rs.next()) i = rs.getInt(1) ;
    ? int intPageCount=1;
    ? intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);
    ? int nextPage ;
    ? int upPage;
    ? nextPage = currentPage+1;
    ? if (nextPage>=intPageCount) nextPage=intPageCount;
    ? upPage = currentPage-1;
    ? if (upPage<=1) upPage=1;
    ? rs.close();
    ? sql="select * from tables";
    ? rs=DBLink.executeQuery(sql);
    ? i=0;
    ? while((i<numPages*(currentPage-1))&&rs.next()){i++;}
    %>
    //
    輸出內容
    //
    輸出翻頁連接
    合計 :<%=currentPage%>/<%=intPageCount%><a href="List.jsp?page=1"> 第一頁 </a><a

    href="List.jsp?page=<%=upPage%>"> 上一頁 </a>
    <%
    ? for(int j=1;j<=intPageCount;j++){
    ? if(currentPage!=j){
    %>
    ? <a href="list.jsp?page=<%=j%>">[<%=j%>]</a>
    <%
    ? }else{
    ? out.println(j);
    ? }
    ? }
    %>
    <a href="List.jsp?page=<%=nextPage%>">
    下一頁 </a><a href="List.jsp?page=<%=intPageCount%>"> 最后頁

    </a>

    144 、用 jdom 解析 xml 文件時如何解決中文問題 ? 如何解析 ?
    : 看如下代碼 , 用編碼方式加以解決
    package test;
    import java.io.*;
    public class DOMTest
    {
    ?private String inFile = "c:\\people.xml";
    ?private String outFile = "c:\\people.xml";?
    ?public static void main(String args[])
    ?{
    ??? ?new DOMTest();
    ??? }
    ?public DOMTest()
    ?{
    ??try
    ???? {?
    ???? ?javax.xml.parsers.DocumentBuilder builder =
    ???? ??

    javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
    ???? ?org.w3c.dom.Document doc = builder.newDocument();
    ???? ?org.w3c.dom.Element root = doc.createElement("
    老師
    ");
    ???? ?org.w3c.dom.Element wang = doc.createElement("
    ");
    ???org.w3c.dom.Element liu = doc.createElement("
    ");
    ???? ?wang.appendChild(doc.createTextNode("
    我是王老師
    "));
    ???? ?root.appendChild(wang);
    ???? ?doc.appendChild(root);
    ???? ?javax.xml.transform.Transformer transformer =
    ???? ??javax.xml.transform.TransformerFactory.newInstance().newTransformer();
    ???? ?transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");
    ???? ?transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");??

    ? ?
    ???? ?transformer.transform(new javax.xml.transform.dom.DOMSource(doc),
    ???? ???????new

    javax.xml.transform.stream.StreamResult(outFile));
    ???? }
    ???? catch (Exception e)
    ???? {
    ???? ?System.out.println (e.getMessage());
    ???? }
    ??? }
    }

    145 、編程用 JAVA 解析 XML 的方式 .
    : SAX 方式解析 XML XML 文件如下:
    <?xml version="1.0" encoding="gb2312"?>
    <person>
    ? <name>
    王小明 </name>
    ? <college>
    信息學院
    </college>??
    ? <telephone>6258113</telephone>
    ? <notes>
    ,1955 年生 , 博士, 95 年調入海南大學
    </notes>
    ?</person>
    ?
    事件回調類
    SAXHandler.java
    ?import java.io.*;
    import java.util.Hashtable;
    import org.xml.sax.*;
    public class SAXHandler extends HandlerBase
    ? {
    ? private Hashtable table = new Hashtable();
    ? private String currentElement = null;
    ? private String currentValue = null;
    ? public void setTable(Hashtable table)
    ??? {
    ??? this.table = table;
    ??? }
    ? public Hashtable getTable()
    ??? {
    ??? return table;
    ??? }
    ? public void startElement(String tag, AttributeList attrs)
    ? throws SAXException
    ??? {
    ??? currentElement = tag;
    ??? }
    ? public void characters(char[] ch, int start, int length)
    ? throws SAXException
    ??? {
    ??? currentValue = new String(ch, start, length);
    ??? }
    ? public void endElement(String name) throws SAXException
    ??? {
    ??? if (currentElement.equals(name))
    ????? table.put(currentElement, currentValue);
    ??? }
    ? }
    JSP
    內容顯示源碼
    ,SaxXml.jsp:
    <HTML>
    <HEAD>
    <TITLE>
    剖析 XML 文件
    people.xml</TITLE>
    </HEAD>
    <BODY>
    <%@ page errorPage="ErrPage.jsp"
    contentType="text/html;charset=GB2312" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.util.Hashtable" %>
    <%@ page import="org.w3c.dom.*" %>
    <%@ page import="org.xml.sax.*" %>
    <%@ page import="javax.xml.parsers.SAXParserFactory" %>
    <%@ page import="javax.xml.parsers.SAXParser" %>
    <%@ page import="SAXHandler" %>
    <%
    File file = new File("c:\\people.xml");
    FileReader reader = new FileReader(file);
    Parser parser;
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
    SAXHandler handler = new SAXHandler();
    sp.parse(new InputSource(reader), handler);
    Hashtable hashTable = handler.getTable();
    out.println("<TABLE BORDER=2><CAPTION>
    教師信息表
    </CAPTION>");
    out.println("<TR><TD>
    姓名
    </TD>" + "<TD>" +
    ? (String)hashTable.get(new String("name")) + "</TD></TR>");
    out.println("<TR><TD>
    學院
    </TD>" + "<TD>" +
    ? (String)hashTable.get(new String("college"))+"</TD></TR>");
    out.println("<TR><TD>
    電話
    </TD>" + "<TD>" +
    ? (String)hashTable.get(new String("telephone")) + "</TD></TR>");
    out.println("<TR><TD>
    備注
    </TD>" + "<TD>" +
    ? (String)hashTable.get(new String("notes")) + "</TD></TR>");
    out.println("</TABLE>");
    %>
    </BODY>
    </HTML>

    146 EJB 的基本架構
    : 一個 EJB 包括三個部分 :
    ? Remote Interface
    接口的代碼

    ? package Beans;
    ? import javax.ejb.EJBObject;
    ? import java.rmi.RemoteException;
    ? public interface Add extends EJBObject
    ? {
    ?? //some method declare
    ? }
    ? Home Interface
    接口的代碼
    ? package Beans;
    ? import java.rmi.RemoteException;
    ? import jaax.ejb.CreateException;
    ? import javax.ejb.EJBHome;
    ? public interface AddHome extends EJBHome
    ? {
    ??? //some method declare
    ? }
    ? EJB
    類的代碼
    ? package Beans;
    ? import java.rmi.RemoteException;
    ? import javax.ejb.SessionBean;
    ? import javx.ejb.SessionContext;
    ? public class AddBean Implements SessionBean
    ? {
    ??? //some method declare
    ? }?

    147 、如何校驗數字型 ?
    var re=/^\d{1,8}$|\.\d{1,2}$/;
    var str=document.form1.all(i).value;
    var r=str.match(re);
    if (r==null)
    {
    ?? sign=-4;
    ?? break;
    }
    else{
    ?? document.form1.all(i).value=parseFloat(str);
    }

    148 將一個鍵盤輸入的數字轉化成中文輸出
    (例如:輸入:1234567?????輸出:一百二拾三萬四千五百六拾七)
    用java語言實現,,請編一段程序實現!
    ?public?class?Reader?{
    ??private?String?strNum;
    ??private?String?strNumChFormat;
    ??private?String?strNumTemp;
    ??private?int?intNumLen;
    ??private?String?strBegin;
    ??public?Reader(String?strNum)?{
    ????this.strNum?=?strNum;
    ??}
    ??public?boolean?check(String?strNum)?{
    ????boolean?valid?=?false;
    ????
    ????if?(strNum.substring(0,1).equals("0")){
    ?????this.strNum?=?strNum.substring(1);
    ????}
    ????try?{
    ??????new?Double(strNum);
    ??????valid?=?true;
    ????}
    ????catch?(NumberFormatException?ex)?{
    ??????System.out.println("Bad?number?format!");
    ????}
    ????return?valid;
    ??}
    ??public?void?init()?{
    ????strNumChFormat?=?"";
    ????intNumLen?=?strNum.length();
    ????strNumTemp?=?strNum;
    ????strNumTemp?=?strNumTemp.replace('1',?'一');
    ????strNumTemp?=?strNumTemp.replace('2',?'二');
    ????strNumTemp?=?strNumTemp.replace('3',?'三');
    ????strNumTemp?=?strNumTemp.replace('4',?'四');
    ????strNumTemp?=?strNumTemp.replace('5',?'五');
    ????strNumTemp?=?strNumTemp.replace('6',?'六');
    ????strNumTemp?=?strNumTemp.replace('7',?'七');
    ????strNumTemp?=?strNumTemp.replace('8',?'八');
    ????strNumTemp?=?strNumTemp.replace('9',?'九');
    ????strNumTemp?=?strNumTemp.replace('0',?'零');
    ????strNumTemp?=?strNumTemp.replace('.',?'點');
    ????strBegin?=?strNumTemp.substring(0,?1);
    ??}
    ??public?String?readNum()?{
    ????if?(check(strNum))?{
    ??????init();
    ??????try?{
    ????????for?(int?i?=?1,?j?=?1,?k?=?1;?i?<?intNumLen;?i++)?{
    ? ?????????if?(strNumTemp.charAt (intNumLen?-?1)?==?'零'?&&?i?= =?1)?{
    ????????????strNumChFormat?=?"位";
    ??????????}
    ? ?????????else?if?(strNumTemp.charAt (intNumLen?-?i)?==?'零'?&&?j?= =?1)?{
    ????????? ???strNumChFormat?=?"位"?+? strNumChFormat;
    ??????????}
    ? ?????????else?if?(strNumTemp.charAt (intNumLen?-?i)?==?'點')?{
    ????????????j?=?1;
    ????????????k?=?1;
    ????????????strNumChFormat?=?strNumTemp.charAt(intNumLen?-?i)?+?strNumChFormat;
    ????????????continue;
    ??????????}
    ??????????else?{
    ????????????strNumChFormat?=?strNumTemp.charAt(intNumLen?-?i)?+?strNumChFormat;
    ??????????}
    ? ?????????if?(strNumTemp.charAt (intNumLen?-?i?-?1)?!=?'位'?&&
    ? ????????????? strNumTemp.charAt(intNumLen?-?i?-?1)?!=?'零 ')?{
    ????????????if?(j?==?1?&&?i?<?intNumLen)?{
    ? ????????????? strNumChFormat?=?'拾'?+?strNumChFormat;
    ????????????}
    ????????????else?if?(j?==?2?&&?i?<?intNumLen)?{
    ? ????????????? strNumChFormat?=?'百'?+?strNumChFormat;
    ????????????}
    ????????????else?if?(j?==?3?&&?i?<?intNumLen)?{
    ? ????????????? strNumChFormat?=?'千'?+?strNumChFormat;
    ????????????}
    ??????????}
    ??????????if?(j?==?4?&&?i?<?intNumLen)?{
    ????????????j?=?0;
    ??????????}
    ??????????if?(k?==?4?&&?i?<?intNumLen)?{
    ? ???????????strNumChFormat? =?'萬'?+?strNumChFormat;
    ??????????}
    ??????????else?if?(k?==?8?&&?i?<?intNumLen)?{
    ????????????k?=?0;
    ? ???????????strNumChFormat? =?'億'?+?strNumChFormat;
    ??????????}
    ??????????j++;
    ??????????k++;
    ????????}
    ????????while?(strNumChFormat.indexOf("位")?!=?-1)?{
    ? ?????????strNumChFormat? =?strNumChFormat.replaceAll("位",?"?");
    ????????}
    ????????if?(strNumChFormat.substring(0,?2)?==?"一拾")?{
    ??????????strNumChFormat?=?strNumChFormat.substring(1,?strNumChFormat.length());
    ????????}
    ????????if?(strNumChFormat.indexOf("點")?>=?0)?{
    ??????????String?rebegin?=?strNumChFormat.substring(0,
    ??????????????strNumChFormat.indexOf("點"));
    ? ?????????String?relast? =?strNumChFormat.substring(strNumChFormat.indexOf("點"),
    ??????????????strNumChFormat.length());
    ??????????for?(int?i?=?1;?i?<=?relast.length();?i++)?{
    ????????????relast?=?relast.replaceAll("拾",?"");
    ????????????relast?=?relast.replaceAll("百",?"");
    ????????????relast?=?relast.replaceAll("千",?"");
    ????????????relast?=?relast.replaceAll("萬",?"");
    ????????????relast?=?relast.replaceAll("億",?"");
    ??????????}
    ??????????strNumChFormat?=?rebegin?+?relast;
    ????????}
    ??????}
    ??????catch?(ArrayIndexOutOfBoundsException?ex)?{
    ????????ex.printStackTrace();
    ??????}
    ??????catch?(Exception?ex)?{
    ????????ex.printStackTrace();
    ??????}
    ??????int?off?=?strNumChFormat.indexOf("點");
    ??????strNumChFormat?=?strBegin?+?strNumChFormat.substring(0);
    ????}
    ????else?{
    ??????strNumChFormat?=?"";
    ????}
    ????return?strNumChFormat;
    ??}
    ??public?static?void?main(String?args[])?{
    ????try?{
    ??????String?number?=?args[0].toString();
    ??????System.out.println("The?number?is:?"?+?number);
    ??????Reader?reader?=?new?Reader(number);
    ??????System.out.println("Output?String:?"?+?reader.readNum());
    ????}
    ????catch?(Exception?ex)?{
    ??????System.out.println("Please?input?like?that:?javac?Reader?<number>");
    ????}
    ??}
    }

    149 JAVA 代碼查錯
    1.
    abstract?class?Name?{
    ???private?String?name;
    ???public?abstract?boolean?isStupidName(String?name)?{}
    }
    大俠們,這有何錯誤
    ?
    答案 :? 錯。 abstract?method 必須以分號結尾,且不帶花括號。

    2.
    public?class?Something?{
    ???void?doSomething?()?{
    ???????private?String?s?=?"";
    ???????int?l?=?s.length();
    ???}
    }
    有錯嗎 ?
    答案 :? 錯。局部變量前不能放置任何訪問修飾符 ?(private public ,和 protected) final 可以用來修飾局部變量

    (final
    如同 abstract strictfp ,都是非訪問修飾符, strictfp 只能修飾 class method 而非 variable)
    3.
    abstract?class?Something?{
    ???private?abstract?String?doSomething?();
    }
    這好像沒什么錯吧 ?
    答案 :? 錯。 abstract methods 不能以 private 修飾。 abstract methods 就是讓子類 implement( 實現 ) 具體細節的,怎么可以用 private
    abstract
    method
    封鎖起來呢 ??( 同理, abstract?method 前不能加 final)

    4.
    public?class?Something?{
    ???public?int?addOne(final?int?x)?{
    ???????return?++x;
    ???}
    }
    這個比較明顯。
    答案 :? 錯。 int?x 被修飾成 final ,意味著 x 不能在 addOne?method 中被修改。
    5.
    public?class?Something?{
    ???public?static?void?main(String[]?args)?{
    ???????Other?o?=?new?Other();
    ???????new?Something().addOne(o);
    ???}
    ???public?void?addOne(final?Other?o)?{
    ???????o.i++;
    ???}
    }
    class?Other?{
    ???public?int?i;
    }
    和上面的很相似,都是關于 final 的問題,這有錯嗎 ?
    答案 :? 正確。在 addOne?method 中,參數 o 被修飾成 final 。如果在 addOne?method 里我們修改了 o
    reference
    (
    比如 :?o?=?new?Other();) ,那么如同上例這題也是錯的。但這里修改的是 o
    member?vairable
    (
    成員變量 ) ,而 o reference 并沒有改變。

    6.
    class?Something?{
    ????int?i;
    ????public?void?doSomething()?{
    ????????System.out.println("i?=?"?+?i);
    ????}
    }?
    有什么錯呢 ?? 看不出來啊。
    答案 :? 正確。輸出的是 "i?=?0" int?i 屬於 instant?variable?( 實例變量,或叫成員變量 ) instant?variable default?value int default?value 0
    7.
    class?Something?{
    ????final?int?i;
    ????public?void?doSomething()?{
    ????????System.out.println("i?=?"?+?i);
    ????}
    }
    和上面一題只有一個地方不同,就是多了一個 final 。這難道就錯了嗎 ?
    答案 :? 錯。 final?int?i 是個 final instant?variable?( 實例變量,或叫成員變量 ) final instant?variable 沒有 default?value ,必須在 constructor?( 構造器 ) 結束之前被賦予一個明確的值。可以修改為 "final?int?i?=?0;"

    8.
    public?class?Something?{
    ?????public?static?void?main(String[]?args)?{
    ????????Something?s?=?new?Something();
    ????????System.out.println("s.doSomething()?returns?"?+?doSomething());
    ????}
    ????public?String?doSomething()?{
    ????????return?"Do?something?...";
    ????}
    }
    ?
    看上去很完美。
    答案 :? 錯。看上去在 main call?doSomething 沒有什么問題,畢竟兩個 methods 都在同一個 class 里。但仔細看, main static 的。 static?method 不能直接 call?non-static?methods 。可改成 "System.out.println("s.doSomething()?returns?"?+?s.doSomething());" 。同理, static?method 不能訪問 non-static?instant?variable
    9.
    此處, Something 類的文件名叫 OtherThing.java
    class?Something?{
    ????private?static?void?main(String[]?something_to_do)?{????????
    ????????System.out.println("Do?something?...");
    ????}
    }
    ?
    這個好像很明顯。

    答案 :? 正確。從來沒有人說過 Java Class 名字必須和其文件名相同。但 public?class 的名字必須和文件名相同。
    10

    interface??A{
    ???int?x?=?0;
    }
    class?B{
    ???int?x?=1;
    }
    class?C?extends?B?implements?A?{
    ???public?void?pX(){
    ??????System.out.println(x);
    ???}
    ???public?static?void?main(String[]?args)?{
    ??????new?C().pX();
    ???}
    }
    答案:錯誤。在編譯時會發生錯誤 ( 錯誤描述不同的 JVM 有不同的信息,意思就是未明確的 x 調用,兩個 x 都匹配(就象在同時 import?java.util java.sql 兩個包時直接聲明 Date 一樣)。對于父類的變量 , 可以用 super.x 來明確,而接口的屬性默認隱含為 ?public?static?final. 所以可以通過 A.x 來明確。
    11.
    interface?Playable?{
    ????void?play();
    }
    interface?Bounceable?{
    ????void?play();
    }
    interface?Rollable?extends?Playable,?Bounceable?{
    ????Ball?ball?=?new?Ball("PingPang");
    }
    class?Ball?implements?Rollable?{
    ????private?String?name;
    ????public?String?getName()?{
    ????????return?name;
    ????}
    ????public?Ball(String?name)?{
    ????????this.name?=?name;????????
    ????}
    ???public?void?play()?{
    ????????ball?=?new?Ball("Football");
    ????????System.out.println(ball.getName());
    ????}
    }
    這個錯誤不容易發現。
    答案 :? 錯。 "interface?Rollable?extends?Playable,?Bounceable" 沒有問題。 interface 可繼承多個 interfaces ,所以這里沒錯。問題出在 interface?Rollable 里的 "Ball?ball?=?new?Ball("PingPang");" 。任何在 interface 里聲明的 interface?variable?( 接口變量,也可稱成員變量 ) ,默認為 public?static?final 。也就是說 "Ball?ball?=?new?Ball("PingPang");" 實際上是 "public?static?final?Ball?ball?=?new?Ball("PingPang");" 。在 Ball 類的 Play() 方法中, "ball?=?new?Ball("Football");" 改變了 ball reference ,而這里的 ball 來自 Rollable?interface Rollable?interface 里的 ball public?static?final 的, final object 是不能被改變 reference 的。因此編譯器將在 "ball?=?new?Ball("Football");" 這里顯示有錯。
    28 、設計 4 個線程,其中兩個線程每次對 j 增加 1 ,另外兩個線程對 j 每次減少 1 。寫出程序。
    以下程序使用內部類實現線程,對 j 增減的時候沒有考慮順序問題。
    public?class?ThreadTest1{
    ??private?int?j;
    ??public?static?void?main(String?args[]){
    ThreadTest1?tt=new?ThreadTest1();
    Inc?inc=tt.new?Inc();
    Dec?dec=tt.new?Dec();
    for(int?i=0;i<2;i++){
    Thread?t=new?Thread(inc);
    t.start();
    t=new?Thread(dec);
    t.start();
    }
    }
    ??private?synchronized?void?inc(){
    j++;
    System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    ??}
    ??private?synchronized?void?dec(){
    j--;
    System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    ??}
    ??class?Inc?implements?Runnable{
    public?void?run(){
    for(int?i=0;i<100;i++){
    inc();
    }
    }
    ??}
    ??class?Dec?implements?Runnable{
    public?void?run(){
    for(int?i=0;i<100;i++){
    dec();
    }
    ?}
    ??}
    }


    ?

    posted on 2006-08-16 10:09 保爾任 閱讀(166) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 91麻豆国产自产在线观看亚洲| 日本xxxx色视频在线观看免费| 久久精品国产亚洲AV未满十八| 中文字幕亚洲码在线| 亚洲一级免费视频| 亚洲女人18毛片水真多| 亚洲国产美女视频| 亚洲伊人久久大香线焦| 亚洲成人福利在线| 亚洲av无码一区二区三区天堂古代 | 一级毛片免费视频网站| 一本岛v免费不卡一二三区| 五月天婷婷精品免费视频| 一级女性全黄生活片免费看| 一级毛片视频免费| 国产婷婷成人久久Av免费高清| 免费视频一区二区| 69影院毛片免费观看视频在线| 18禁止看的免费污网站| 免费A级毛片无码无遮挡内射| 黄色成人网站免费无码av| 青草草在线视频永久免费| 免费欧洲毛片A级视频无风险| 亚洲国产成人VA在线观看| 国产AⅤ无码专区亚洲AV| 亚洲Av无码专区国产乱码DVD| 亚洲五月激情综合图片区| 亚洲一级视频在线观看| 亚洲色大成网站www永久网站| 美女被暴羞羞免费视频| 国产精品美女久久久免费 | 亚洲av综合av一区二区三区| 全部在线播放免费毛片| 精品四虎免费观看国产高清午夜| 2019中文字幕免费电影在线播放| 色窝窝免费一区二区三区| 国产成人在线免费观看| 亚洲成亚洲乱码一二三四区软件| 亚洲男人的天堂在线| 国产精品亚洲一区二区三区久久| 三年在线观看免费观看完整版中文 |