尚學堂Java面試題整理



 
1. super()與this()的差異? - 6 -  2. 做用域public,protected,private,以及不寫時的差異? - 6 -  3. 編程輸出例如如下圖形。 - 6 -  4. JAVA的事件託付機制和垃圾回收機制 - 6 -  5. 在JAVA中,怎樣跳出當前的多重嵌套循環? - 6 -  6. 什麼是java序列化,怎樣實現java序列化?(寫一個實例) - 6 -  7. 一個".java"源文件裏可否夠包含多個類(不是內部類)?有什麼限制? - 7 -  8. 排序都有哪幾種方法?請列舉。用JAVA實現一個高速排序? - 7 -  9. Overload和Override的差異。Overloaded的方法可否夠改變返回值的類型? - 7 -  10. Final類有什麼特色? - 7 -  11. 繼承時候類的運行順序問題,通常都是選擇題,問你將會打印出什麼? - 7 -  12. 內部類的實現方式? - 8 -  13. 用JAVA實現一種排序,JAVA類實現序列化的方法(二種)? - 8 -  14. 如在COLLECTION框架中,實現比較要實現什麼樣的接口? - 8 -  15. 用插入法進行排序代碼例如如下 - 8 -  16. 編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 但是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。 - 9 -  1五、Java編程,打印昨天的當前時刻 - 9 -  1六、文件讀寫,實現一個計數器 - 10 -  1七、指出如下程序的執行結果。 - 10 -  1八、抽象類和接口的差異? - 10 -  1九、什麼是類的返射機制? - 11 -  20、類的返射機制中的包及核心類? - 11 -  2一、獲得Class的三個過程是什麼? - 11 -  2二、怎樣喚起類中的一個方法? - 11 -  2三、怎樣將數值型字符轉換爲數字(Integer,Double)? - 11 -  2四、怎樣將數字轉換爲字符? - 11 -  2五、怎樣去小數點前兩位,並四捨五入。 - 11 -  2六、怎樣取得年月日,小時分秒? - 11 -  2七、怎樣取得從1970年到現在的毫秒數 - 11 -  2八、怎樣獲取某個日期是當月的最後一天? - 11 -  2九、怎樣格式化日期? - 12 -  30、編碼轉換,如何實現將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串。 - 12 -  3二、String s = new String("xyz");建立了幾個String Object? - 12 -  3三、float型float f=3.4是否正確? - 12 -  3五、說出一些常用的類,包,接口,請各舉5個 - 12 -  3六、java中會存在內存泄漏嗎,請簡單描寫敘述。 - 12 -  3七、java中實現多態的機制是什麼? - 13 -  3八、垃圾回收器的基本原理是什麼?垃圾回收器可以當即回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收? - 13 -  3九、靜態變量和實例變量的差異? - 13 -  4一、可否夠從一個static方法內部發出對非static方法的調用? - 13 -  4二、寫clone()方法時,一般都有一行代碼,是什麼? - 13 -  4三、JAVA語言怎樣進行異常處理,keyword:throws,throw,try,catch,finally分別表明什麼意義?在try塊中可以拋出異常嗎? - 13 -  4五、冒泡排序法 - 13 -  4六、String and StringBuffer的差異? - 14 -  4七、用java代碼編寫堆棧 - 14 -  4八、集合的做用是什麼? - 15 -  4九、集合的通用方法有那些?通用方法是什麼?(操做) - 15 -  50、說出ArrayList,Vector, LinkedList的存儲性能和特性HashMap和Hashtable的差異 - 15 -  5一、Collection 和 Collections的差異。 - 15 -  5二、Set裏的元素是不能反覆的,那麼用什麼方法來區分反覆與否呢? 是用==仍是equals()? 它們有何差異?用contains來區分是否有反覆的對象。仍是都不用。 - 15 -  5三、List, Set, Map是否繼承自Collection接口? - 16 -  5四、面向對象的特徵有哪些方面 - 16 -  5五、String是最主要的數據類型嗎? - 16 -  5六、int 和 Integer 有什麼差異? - 16 -  5七、執行時異常與通常異常有何異同? - 16 -  5八、&和&&的差異? - 16 -  5九、final, finally, finalize的差異? - 16 -  6二、heap和stack有什麼差異? - 16 -  6三、Static Nested Class 和 Inner Class的不一樣? - 16 -  6四、何時用assert? - 17 -  6五、GC是什麼? 爲何要有GC? - 17 -  6六、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? - 17 -  6七、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? - 17 -  6八、Java有沒有goto? - 17 -  6九、給我一個你最多見到的runtime exception - 17 -  70、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)? - 17 -  7一、abstract的method是否可同一時候是static,是否可同一時候是native,是否可同一時候是synchronized? - 17 -  7二、數組有沒有length()這種方法? String有沒有length()這種方法? - 18 -  7三、構造器Constructor是否可被override? - 18 -  7四、可否夠繼承String類? - 18 -  7五、swtich可否做用在byte上,可否做用在long上,可否做用在String上? - 18 -  7六、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被運行,何時被運行,在return前仍是後? - 18 -  7七、編程題: 用最有效率的方法算出2乘以8等於幾? - 18 -  7八、兩個對象值一樣(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不正確? - 18 -  7九、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞仍是引用傳遞? - 18 -  80、四種會話跟蹤技術 - 18 -  8一、編程題: 寫一個Singleton出來。 - 18 -  8三、Java中的異常處理機制的簡單原理和應用。 - 19 -  8四、垃圾回收的長處和原理。並考慮2種回收機制。 - 19 -  8五、描寫敘述一下JVM載入class文件的原理機制? - 19 -  8六、char型變量中能不能存貯一箇中文漢字?爲何? - 19 -  8八、寫一個程序,從文件(c:\test.txt)中查出字符串」mobnet」出現的次數? - 19 -  java基礎類庫(io流,集合類,線程,Socket,AWT,Swing,sql) - 20 -  一、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們各自是哪些類? - 20 -  二、啓動一個線程是用run()仍是start()? - 20 -  三、線程的基本概念、線程的基本狀態以及狀態之間的關係 - 20 -  四、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 用什麼keyword修飾同步方法? stop()和suspend()方法爲什麼不推薦使用? - 20 -  用synchoronized修飾同步方法。 - 20 -  五、集合框架有什麼? - 20 -  十二、設計4個線程,當中兩個線程每次對j添加1,另外兩個線程對j每次下降1。寫出程序 - 21 -  1三、同步和異步有和異同,在什麼狀況下分別使用他們?舉例說明。 - 21 -  1四、sleep() 和 wait() 有什麼差異? - 22 -  1五、當一個線程進入一個對象的一個synchronized方法後,其餘線程是否可進入此對象的其餘方法? - 22 -  1七、輸入輸出流的理解: - 22 -  1八、請寫一個程序的讀寫,要求用兩種方式一種是低層流還有一種是高層流。 - 22 -  1九、怎樣列出某個文件夾下的所有文件 - 23 -  Socket - 24 -  20、用socket通信寫出client和server端的通信,要求客戶發送數據後能夠回顯一樣的數據? - 24 -  2三、介紹JAVA中的Collection FrameWork(包含怎樣寫本身的數據結構)? - 25 -  2四、請說出你所知道的線程同步的方法 - 25 -  jdbc數據訪問技術 - 25 -  一、JDBC怎樣作事務處理? - 25 -  二、寫出幾個在Jdbc中常用的接口 - 25 -  三、簡述你對Statement,PreparedStatement,CallableStatement的理解 - 25 -  四、Java中訪問數據庫的步驟? - 26 -  五、JDBC中的核心類及其做用是什麼? - 26 -  六、運行存儲過程用那一個類,怎樣操做輸出參數?(操做) - 26 -  八、可能會讓你寫一段Jdbc連Oracle的程序. - 26 -  九、Class.forName的做用?爲何要用? - 26 -  十、Jdo是什麼? - 26 -  十一、在ORACLE大數據量下的分頁解決方法。通常用截取ID方法,還有是三層嵌套方法 - 27 -  Web編程Jsp&Servlet技術 - 27 -  一、簡單說說tomcat的配置? - 27 -  二、JSP中動態INCLUDE與靜態INCLUDE的差異? - 27 -  三、forward和redirect的差異? - 27 -  四、Servlet的體系結構是什麼? - 28 -  Servlet - 28 -  五、怎樣實現一個本身定義的servlet? - 28 -  六、Servlet的生命週期是什麼? - 28 -  七、jsp就是一個servlet是否正確? - 28 -  八、請羅列jsp中的腳本、指令及動做? - 28 -  九、JSP的內置對象及方法 - 28 -  十、說出在JSP頁面裏是怎麼分頁的? - 28 -  十一、include的兩種實現方式的差異? - 30 -  十二、jsp頁面中兩種跳轉方式各自是什麼?有什麼差異? - 30 -  1三、描寫敘述JSP和Servlet的差異、共同點、各自應用的範圍 - 30 -  1四、在JSP中怎樣讀取client的請求,怎樣肯定某個Jsp文件的真實路徑? - 30 -  1五、描寫敘述Cookie和Session的做用,差異和各自的應用範圍,Session工做原理。 - 30 -  1六、說明Jsp中errorPage的做用,應用範圍。 - 31 -  1七、介紹在Jsp中怎樣使用JavaBeans - 31 -  1九、簡介JSP的標記庫 - 31 -  20、Servlet中的核心類有那些,各有什麼特色? - 31 -  2一、Servlet中重要的包有那些,有什麼差異? - 31 -  2二、說出Servlet的生命週期,並說出Servlet和CGI的差異? - 31 -  2三、什麼狀況下調用doGet()和doPost()? - 31 -  2五、怎樣現實servlet的單線程模式 - 32 -  2七、Request對象的主要方法: - 32 -  2八、咱們在web應用開發過程當中經常遇到輸出某種編碼的字符,如iso8859-1等,怎樣輸出一個某種編碼的字符串? - 32 -  30、Servlet運行時通常實現哪幾個方法? - 32 -  5 Hibernate持久層技術 - 32 -  一、在myeclipse增長hibernate環境的全過程是什麼? - 32 -  二、hibernate的核心配置文件是什麼及其做用? - 33 -  三、hibernate的核心類是什麼,它們的相互關係是什麼?重要的方法是什麼? - 33 -  四、關聯: - 33 -  五、hibernate中的one-to-many或many-to-one中常用的方式是什麼? - 33 -  六、Criteria 的做用? - 33 -  七、DetachedCriteria的做用? - 33 -  八、Query - 34 -  九、繼承關係的實現 - 34 -  十、tomcat鏈接池:在容器中預先產生了n個鏈接實例,client不用又一次實例化,可以直接取。 - 34 -  十一、對象的三大狀態 - 35 -  十二、hibernate常見優化策略 - 36 -  6. iBatis持久層技術 - 36 -  用ibatis的緣由: - 36 -  jdbc、hibernate、ibatis的差異 - 36 -  ibatis的核心配置文件: - 36 -  ibatis的核心類: - 36 -  7 Structs界面控制層技術 - 37 -  一、請說出struts框架的幾大組件? - 37 -  三、struts的核心類有那些,在MVC模式中其相應的關係是什麼? - 37 -  四、Struts的處理請求的全過程是什麼? - 37 -  五、在struts中怎樣經過一個url找到一個action,它的核心配置文件是什麼? - 38 -  六、爲何使用MVC,其主要目的是什麼? - 38 -  七、對於MVC在action中相應有類有幾種,各有什麼做用? - 38 -  八、struts的標記有幾類,請列舉並說明其做用? - 38 -  九、怎樣在struts中配置數據源在,什麼文件?用什麼標籤?怎樣取出DataSource? - 38 -  十、怎樣在jbuilder中開發struts? - 38 -  十一、怎樣實現struts的validator框架? - 39 -  1三、怎樣實現國際化? - 39 -  國際化:不用改動代碼,就適用於不一樣的語言國家 - 39 -  8 JSF界面控制層技術 - 40 -  一、Jsf中的核心類用那些?有什麼做用? - 40 -  二、Jsf中的LiftCycle六大生命週期是什麼? - 40 -  三、怎樣管量web層中的Bean,用什麼標籤。怎樣經過jsp頁面與Bean綁定在一塊兒進行處理? - 40 -  四、Jsf中導航的標籤是什麼? - 40 -  五、jsf中用戶界面組件模型有幾類,各表明什麼? - 40 -  六、表格處理及取值 - 40 -  七、jsf的標籤庫有哪些? - 41 -  9 Spring 應用框架技術 - 41 -  一、Spring和Struts的差異? strusts:是一種基於MVC模式的一個web層的處理。 - 41 -  二、什麼是aop,aop的做用是什麼? - 41 -  三、aop中的關鍵名詞有些那些,相互關係是什麼? - 41 -  四、依賴注入的方式有幾種,各是什麼? - 41 -  五、spring中的核心類有那些,各有什麼做用? - 42 -  六、ApplicationContext的做用 - 42 -  七、怎樣實現資源管理 - 42 -  八、怎樣實現增長web框架中 - 42 -  九、怎樣實現事件處理 - 42 -  十、spring的ioc及di表明什麼意思? - 42 -  、怎樣在spring中實現國際化? - 42 -  十二、spring的配置的主要標籤是什麼?有什麼做用? - 43 -  1三、spring與ejb2.0的事務管理比較的優缺點? - 43 -  1四、spring的jdbc與傳統的jdbc有什麼差異,其核心類有那些? - 43 -  1五、在spring中有幾種事務管理,各自是什麼? - 43 -  1六、在spring中怎樣配代碼的事務管理? - 44 -  1七、在spring中怎樣配容器的事務管理,相關的類有那些? - 44 -  1八、假設spring與hibernate結合在一塊兒可以不需要hibernate.cfg.xml文件是否正確? - 44 -  1九、spring+hibernate的配置文件裏的主要類有那些?怎樣配置? - 44 -  20、spring+hibernate的代碼實現中,對於實現類必定繼承於一個類是那一個,它有什麼做用。 - 44 -  2一、怎樣配置spring+struts? - 44 -  2二、怎樣在web環境中配置applicationContext.xml文件? - 44 -  2四、Jsf和spring的差異? - 45 -  jsf:是一種基於MVC模式的一個web層的處理,粒度較struts較細。 - 45 -  Ejb技術 - 45 -  一、weblogic的熱公佈 - 45 -  二、在ejb中實現one-to-many - 45 -  三、ejb所用的技術: - 45 -  四、實現ejb幾個接口,幾個類? - 45 -  五、實現ejb相關的配置文件是什麼? - 45 -  六、ejb的分類?差異 - 46 -  七、本地接口與遠程接口的差異。 - 46 -  八、請求處理的過程? - 46 -  九、statefull的生命週期 - 46 -  十、stateless的生命週期 - 46 -  十一、entityBean的生命週期: - 46 -  十二、EJB需直接實現它的業務接口或Home接口嗎,請簡述理由。 - 47 -  1三、EJB的激活機制 - 47 -  1四、EJB是基於哪些技術實現的?並說 出SessionBean和EntityBean的差異, - 47 -  1五、EJB的分類是什麼?各有什麼特色? - 47 -  十、EJB中基本的配置文件及做用是什麼? - 47 -  1五、說出數據鏈接池的工做機制是什麼? - 48 -  1六、EJB2.0有哪些內容?分別用在什麼場合? EJB2.0和EJB1.1的差異? - 48 -  1八、EJB與JAVA BEAN的差異? - 48 -  1九、EJB的角色和三個對象 - 48 -  20、EJB容器提供的服務 - 48 -  2一、EJB規範規定EJB中禁止的操做有哪些? - 48 -  2六、EJB的基本架構 - 49 -  30、怎樣在weblogic中進行ssl配置與client的認證配置或說說j2ee(標準)進行ssl的配置 - 49 -  31怎樣查看在weblogic中已經公佈的EJB? - 49 -  WebService技術 - 49 -  一、什麼是Web Service? - 49 -  二、什麼是Web容器? - 50 -  三、應用server有那些? - 50 -  五、怎樣給weblogic指定大小的內存? - 50 -  六、怎樣設定的weblogic的熱啓動模式(開發模式)與產品公佈模式? - 50 -  七、怎樣啓動時不需輸入username與password? - 50 -  八、在weblogic管理制臺中對一個應用域(或者說是一個站點,Domain)進行jms及ejb或鏈接池等相關信息進行配置後,實際保存在什麼文件裏? - 50 -  九、說說weblogic中一個Domain的缺省文件夾結構?比方要將一個簡單的helloWorld.jsp放入何文件夾下,然的在瀏覽器上就可打入 http://主機:port號//helloword.jsp就可以看到執行結果了? 又比方這當中用到了一個本身寫的javaBean該怎樣辦? - 50 -  十二、CORBA是什麼?用途是什麼? - 50 -  1三、說說在weblogic中開發消息Bean時的persistent與non-persisten的區別 - 50 -  1四、WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。 - 50 -  j2ee模式(MVC模式、Model1,Model2) - 51 -  一、j2ee常用的設計模式?說明工廠模式。 - 51 -  二、說說你所熟悉或據說過的j2ee中的幾種常用模式?及對設計模式的一些見解 - 51 -  三、解釋如下關於J2EE的名詞 - 51 -  四、介紹J2EE、J2SE、J2ME的差異。 - 51 -  五、開發中都用到了那些設計模式?用在什麼場合? - 52 -  六、J2EE是什麼? - 52 -  七、J2EE是技術仍是平臺仍是框架? - 52 -  其它 - 52 -  一、當前主流的解析器有那些? - 52 -  二、Dom解析處理的過程是什麼? - 52 -  三、Sax解析處理的過程是什麼? - 53 -  四、Dom與Sax相比它們的優缺點是什麼? - 54 -  五、怎樣將Dom對象寫入到文件裏? - 54 -  六、用jdom解析xml文件時怎樣解決中文問題? - 54 -  七、XML文檔定義有幾種形式?它們之間有何本質差異?解析XML文檔有哪幾種方式? - 54 -  八、標準建模語言UML中的各類圖? - 54 -  九、BS與CS的聯繫與差異。 - 54 -  十、Uml的概念是什麼?基本的工具是什麼 - 55 -  Uml:統一建模語言 - 55 -  十一、Uml的概念中的九大圖形是什麼?最重的三個圖是什麼?各有什麼特色? - 55 -  1三、在類圖中怎樣找類? - 56 -  Java面試題整理  Java面向對象  super()與this()的差異?  This():當前類的對象,super父類對象。  Super():在子類訪問父類的成員和行爲,必須受類繼承規則的約束  而this他表明當前對象,固然所有的資源都可以訪問.  在構造函數中,假設第一行沒有寫super(),編譯器會本身主動插入.但是假設父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須增長對父類的實例化構造.而this就沒有這個要求,因爲它自己就進行實例化的構造.而在方法中super和this使用的方法就差點兒相同了.僅僅只是super 要考慮可否訪問其父類的資源.  做用域public,protected,private,以及不寫時的差異?  Public:不一樣包、同一包、類內均可用  Private:類內  Protected: 不一樣包的子類、同一包、類內均可用  不寫時:同一包內、類內  編程輸出例如如下圖形。  * * * * *  * * * *  * * *  * *  *  代碼例如如下:  public class Print {  public static void main(String[] args) {  for (int i = 0; i < 5; i++) {  for (int j = 5; j > i; j--) {  System.out.print("*");  }  System.out.println();  }  }  }  JAVA的事件託付機制和垃圾回收機制  java 事件託付機制的概念,一個源產生一個事件並將它送到一個或多個監聽器那裏。在這樣的方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,而後返回。  垃圾回收機制 垃圾收集是將分配給對象但再也不使用的內存回收或釋放的過程。假設一個對象沒有指向它的引用或者其賦值爲null,則次對象適合進行垃圾回收  在JAVA中,怎樣跳出當前的多重嵌套循環?  用break; return 方法。  什麼是java序列化,怎樣實現java序列化?(寫一個實例)  序列化:  可以將一個對象保存到一個文件,因此可以經過流的方式在網絡上傳輸,可以將文件的內容讀取,轉化爲一個對象。  處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。  序列化的實現:  將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable僅僅是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。  一個".java"源文件裏可否夠包含多個類(不是內部類)?有什麼限制?  可以。假設這個類的修飾符是public,其類名與文件名稱必須一樣。  排序都有哪幾種方法?請列舉。用JAVA實現一個高速排序?  排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、高速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)  高速排序的僞代碼。  Overload和Override的差異。Overloaded的方法可否夠改變返回值的類型?  方法的  重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的仍是子類的方法。  重載Overloading 一個類多個方法,名稱一樣,參數個數類型不一樣。  二者都是Java多態性的不一樣表現。  Overloaded的方法是可以改變返回值的類型。  1, public class Ctest()  {  Public static void main()  {  System.out.prinln(8+8+」88」+8+8);  }  }  168888  Final類有什麼特色?  屬性常量  方法不可以overridding  類不可以繼承  繼承時候類的運行順序問題,通常都是選擇題,問你將會打印出什麼?  答:父類:  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  內部類的實現方式?  答:演示樣例代碼例如如下:  package test;  public class OuterClass  {  private class InterClass  {  Public Interlass()  {  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  用JAVA實現一種排序,JAVA類實現序列化的方法(二種)?  如在COLLECTION框架中,實現比較要實現什麼樣的接口?  Collection框架中實現比較要實現Comparable 接口和 Comparator 接口  用插入法進行排序代碼例如如下  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();  }  }  JAVA類實現序例化的方法是實現java.io.Serializable接口  編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 但是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。  答:代碼例如如下:  public static void split(String source,int num) throws Exception  {  int k=0;  String temp="";  for (int i = 0; i <source.length(); i++)  { byte[] b=(source.charAt(i)+"").getBytes();  k=k+b.length;  if(k>num)  {  break;  }  temp=temp+source.charAt(i); } System.out.println(temp);  }  1五、Java編程,打印昨天的當前時刻  public class YesterdayCurrent{  public void main(String[] args){  Calendar cal = Calendar.getInstance();  cal.add(Calendar.DATE, -1);  System.out.println(cal.getTime());  }  }  1六、文件讀寫,實現一個計數器  public int getNum(){  int i = -1;  try{  String stri="";  BufferedReader in = new BufferedReader(new FileReader(f));  while((stri=in.readLine())!=null){  i = Integer.parseInt(stri.trim());  }  in.close();  }catch(Exception e){  e.printStackTrace();  }  return i;  }  public void setNum(){  int i = getNum();  i++;  try{  PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));  out.write(String.valueOf(i)); //多是編碼的緣由,假設直接寫入int的話,將出現java編碼和windows編碼的混亂,所以此處寫入的是String  out.close() ;  }catch(Exception e){  e.printStackTrace();  }  }  1七、指出如下程序的執行結果。  class A{  static{  System.out.print("1");  }  public A(){  System.out.print("2");  }  }  class B extends A{  static{  System.out.print("a");  }  public B(){  System.out.print("b");  }  }  public class Hello{  public static void main(String[] ars){  A ab = new B(); //運行到此處,結果: 1a2b  ab = new B(); //運行到此處,結果: 1a2b2b  }  }    注:類的static 代碼段,可以看做是類首次載入(被虛擬機載入)運行的代碼,而對於類的載入,首先要運行其基類的構造,再運行其自己的構造  1八、抽象類和接口的差異?  (1)接口可以被多重implements,抽象類僅僅能被單一extends  (2)接口僅僅有定義,抽象類可以有定義和實現  (3)接口的字段定義默以爲:public static final, 抽象類字段默認是"friendly"(本包可見)  當功能需要累積時用抽象類,不需要累積時用接口。  1九、什麼是類的返射機制?  經過類(Class對象),可以得出當前類的fields、method、construtor、interface、superClass、modified等,同是可以經過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是經過類的返射進行開發的。  20、類的返射機制中的包及核心類?   java.lang.Class   java.lang.refrection.Method   java.lang.refrection.Field   java.lang.refrection.Constructor   java.lang.refrection.Modifier   java.lang.refrection.Interface  2一、獲得Class的三個過程是什麼?  對象.getClass()  類.class或Integer.type(int)  Integer.class(java.lang.Integer)  Class.forName();  2二、怎樣喚起類中的一個方法?  產生一個Class數組,說明方法的參數  經過Class對象及方法參數獲得Method  經過method.invoke(實例,參數值數組)喚醒方法  2三、怎樣將數值型字符轉換爲數字(Integer,Double)?  Integer.parseInt(「1234」)  Double.parseDouble(「123.2」)  2四、怎樣將數字轉換爲字符?  1+」」  1.0+」」  2五、怎樣去小數點前兩位,並四捨五入。  double d=1256.22d;  d=d/100;  System.out.println(Math.round(d)*100);  2六、怎樣取得年月日,小時分秒?  Calendar c=Calendar.getInstance();  c.set(Calendar.YEAR,2004);  c.set(Calendar.MONTH,0);  c.set(Calendar.DAY_OF_MONTH,31);  System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));  2七、怎樣取得從1970年到現在的毫秒數  Java.util.Date dat=new Date();  long now=dat.getTime();  2八、怎樣獲取某個日期是當月的最後一天?  當前日期加一天,若當前日期與結果的月份不一樣樣,就是最後一天。  取下一個月的第一天,下一個月的第一天-1  public static void main(String[] args)  {  Calendar c=Calendar.getInstance();  c.set(Calendar.YEAR,2004);  c.set(Calendar.MONTH,0);  c.set(Calendar.DAY_OF_MONTH,30);  Calendar c1=(Calendar)c.clone();  System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));  c.add(Calendar.DAY_OF_MONTH,1);  if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))  {  System.out.println("是最後一天");  }  else  {  System.out.println("不是取後一天");  }  }  2九、怎樣格式化日期?  Import java.text. SimpleDateFormat;  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  Date dat=new Date();  //把日期轉化爲字符串  String str=sdf.format(dat);  System.out.println(str);  //將字符串轉化爲日期  Java.util.Date d1=sdf.parse(「yyyy-mm-dd」);  30、編碼轉換,如何實現將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串。  String a=new String("中".getBytes("gb2312"),"iso-8859-1");  String a=new String("中".getBytes("iso-8859-1"));  3二、String s = new String("xyz");建立了幾個String Object?  New了一個,」XYZ」原本又是一個  兩個  3三、float型float f=3.4是否正確?   報錯,應當是float f=3.4f   假設是float f=3(整數)正確  3五、說出一些常用的類,包,接口,請各舉5個  常用的類:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer  常用的包:java.lang  java.awt  java.io  java.util  java.sql javax.xml javax.sevlet javax.ejb.  java.net  javax.faces   常用的接口: List  Map  Document  NodeList EjbObject EjbHome SessionBean  EntityBean  3六、java中會存在內存泄漏嗎,請簡單描寫敘述。  會。如:int i,i2;  return (i-i2);   //when i爲足夠大的正數,i2爲足夠大的負數。結果會形成溢位,致使錯誤。  3七、java中實現多態的機制是什麼?  靜態的多態:方法名一樣,參數個數或類型不一樣樣。(overloading)  動態的多態:  子類覆蓋父類的方法,將子類的實例傳與父類的引用調用的是子類的方法  實現接口的實例傳與接口的引用調用的實現類的方法。 3八、垃圾回收器的基本原理是什麼?垃圾回收器可以當即回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?  動態內存  存放類實例  靜態內存  類自己  垃圾收集主要針對的是動態內存,通常當內存不夠用時會進行垃圾收集。  或經過System.gc()手動收集,但不保證必定運行。  3九、靜態變量和實例變量的差異?  static i = 10; //常量    class A a;  a.i =10;//可變  靜態方法可以調用靜態變量。  實現方法可以調用靜態變量、實例變量  4一、可否夠從一個static方法內部發出對非static方法的調用?  不可以,假設當中包括對象的method();不能保證對象初始化.  4二、寫clone()方法時,一般都有一行代碼,是什麼?  Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。  4三、JAVA語言怎樣進行異常處理,keyword:throws,throw,try,catch,finally分別表明什麼意義?在try塊中可以拋出異常嗎?  Try:運行部分,產生異常  Catch:捕捉異常  Finally:不管有沒有異常都運行  Throws:在方法聲明處聲明要拋出的異常,調用者必須對其進行處理。  Throw:拋出一個異常  在try中可以拋出異常,通常與聲明的異常一樣。  本身定義異常要繼承於Exception或Exception的子類  4五、冒泡排序法  //相鄰兩個數比較,將最小或最大的放到後面,最後面數的不參與比較  public class BubbleSort {  private static int al[] = new int[10];  public BubbleSort() {  al[0]=2;  al[1]=3;  al[2]=23;  al[3]=45;  al[4]=1;  al[5]=67;  al[6]=23;  al[7]=80;  al[8]=35;  al[9]=72;  }  public static void main(String[] args) {  BubbleSort bs = new BubbleSort();  System.out.println("排序前:");  display(al);  for(int i=0;i<al.length;i++) {  for (int j = 0; j < al.length-i-1; j++) {  if(al[j]>al[j+1]) {  swap(j,j+1);  }  }  }  System.out.println();  System.out.println("排序後:");  display(al);  }  private static void display(int[] al2) {  for (int i = 0; i < al2.length; i++) {  System.out.print(al2[i]+"  ");  }  }  private static void swap(int i, int j) {  int temp = al[i];  al[i]= al[j];  al[j] = temp;  }  }  4六、String and StringBuffer的差異?  String:長度給定不可變,當多個字符串聯合時要先轉爲StringBuffer,再聯合,速度慢。  StringBuffer:長度可變,可以將多個字符串值直接聯合,效率高  4七、用java代碼編寫堆棧  public class Stack {  int[] data;  int maxSize;  int top;  public Stack(int maxSize) {  this.maxSize = maxSize;  data = new int[maxSize];  top = -1;  }  /**  * 依次增長數據  * @param data 要增長的數據  * @return 加入是否成功  */  public boolean push(int data) {  if(top+1== maxSize) {  System.out.println("棧已滿!");  return false;  }  this.data[++top] = data;  return true;  }  /**  * 從棧中取出數據  * @return 取出的數據  */  public int pop() throws Exception{  if(top==-1) {  throw new Exception("棧已空!");  }  return this.data[top--];  }  public static void main(String[] args) throws Exception {  Stack stack=new Stack(1000);  stack.push(1);  stack.push(2);  stack.push(3);  stack.push(4);  stack.push(5);  while(stack.top>=0)  {  System.out.println(stack.pop());  } }  }  4八、集合的做用是什麼?  數據的傳送 增、刪、改、查、constainsAll,可以存放不一樣類型的對象。  4九、集合的通用方法有那些?通用方法是什麼?(操做)  集合List 的遍歷方法有:  Iterator:  Enumeration  For  Get  set  Collection的通用方法有:  Iterator()  Add()  Clear();  remove()  50、說出ArrayList,Vector, LinkedList的存儲性能和特性HashMap和Hashtable的差異  ArrayList Vector:以數組的方式存儲,增、刪慢,查、改快  ArrayList:線程不安全,速度快  Vector:線程安全,速度慢(synchoronized)  LikedList: 以單鏈表的方式存儲,增、刪快,查、改慢  HashMap與Hashtable都實現的Map接口,HashTable線程安全,HashMap線程不安全。  5一、Collection 和 Collections的差異。  Collection是集合的根接口,其下有set及list  Collections是集合的算法。  5二、Set裏的元素是不能反覆的,那麼用什麼方法來區分反覆與否呢? 是用==仍是equals()? 它們有何差異?用contains來區分是否有反覆的對象。仍是都不用。  在比較時先調用hashCode方法,假設不一樣樣,證實不相等。  假設一樣,再調用equals方法,假設equals方法一樣,證實相等,不一樣樣,證實不相等。  ==:主要用在基本數據類型及引用  Equals:主要是對象或對象引用的比較。  集合中是否包括某一個元素用contains來推斷。  5三、List, Set, Map是否繼承自Collection接口?  List,set繼承於Collection  Map沒有繼承於Collection,其相對是獨立的。  屬於Collection類型的對象,可以經過構造函數將一個集合構形成另一個集合。  5四、面向對象的特徵有哪些方面   1.抽象:  找共性,將共同擁有的屬性、方法放到父類中  2.繼承:  子類繼承於父類,具備父類的所有屬性與方法,可以重用,也可以覆蓋。  3.封裝:  一個類包含多個屬性及方法。  4. 多態性:  動態:  靜態:  5五、String是最主要的數據類型嗎?  基本數據類型包含byte、int、char、long、float、double、boolean和short。  java.lang.String類是final類型的,所以不可以繼承這個類、不能改動這個類。爲了提升效率節省空間,咱們應該用StringBuffer類  5六、int 和 Integer 有什麼差異?  Int是基本數據類型,不是對象,佔一個內存空間,沒有方法。與其同類的有long,char,doble  Integer是封裝類,具備方法及屬性。與其同類的有Long,Double.Float  5七、執行時異常與通常異常有何異同?  執行時異常:java JVM拋出的異常,代碼中不用處理。  通常異常:用戶拋出的異常,假設用throws 聲明瞭,調用這種方法的代碼必須對其處理。  5八、&和&&的差異?  &:與: 左邊若爲false右邊還運行。  &&:短路與,左邊若爲false右邊不運行。  5九、final, finally, finalize的差異?  final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。  finally是異常處理語句結構的一部分,表示老是運行。  finalize是Object類的一個方法,在垃圾收集器運行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其它資源回收,好比關閉文件等。  算符可以用來決定某對象的類是否實現了接口。  6二、heap和stack有什麼差異?  棧是一種線形集合,其加入和刪除元素的操做應在同一段完畢。棧依照後進先出的方式進行處理。  堆是棧的一個組成元素  6三、Static Nested Class 和 Inner Class的不一樣?  Static Nested Class是被聲明爲靜態(static)的內部類,它可以不依賴於外部類實例被實例化。而一般的內部類需要在外部類實例化後才幹實例化。  6四、何時用assert?  assertion (斷言)在軟件開發中是一種常用的調試方式,很是多開發語言中都支持這樣的機制。在實現中,assertion就是在程序中的一條語句,它對一個 boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;假設該值爲false,說明程序已經處於不對的狀態下,系統將給出警告或退出。通常來講,assertion用於保證程序最基本、關鍵的正確性。assertion檢查一般在開發和測試時開啓。爲了提升性能,在軟件公佈後,assertion檢查通常是關閉的。  6五、GC是什麼? 爲何要有GC?  GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員easy出現故障的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能可以本身主動監測對象是否超過做用域從而達到本身主動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。  6六、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?  short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型) short s1 = 1; s1 += 1;(可以正確編譯)  6七、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?  Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回與參數最接近的長整數,參數加1/2後求其floor.  6八、Java有沒有goto?  java中的保留字,現在沒有在java中使用。  6九、給我一個你最多見到的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  通常異常:  IOException  FileNotFoundException  SqlException  70、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?  接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類。  7一、abstract的method是否可同一時候是static,是否可同一時候是native,是否可同一時候是synchronized?      都不能  7二、數組有沒有length()這種方法? String有沒有length()這種方法?  數組沒有length()這種方法,有length這個屬性  String有length()這種方法.  7三、構造器Constructor是否可被override?  構造器Constructor不能被繼承,所以不能重寫Overriding,但可以被重載Overloading。  7四、可否夠繼承String類?  String類是final類故不可以繼承。  7五、swtich可否做用在byte上,可否做用在long上,可否做用在String上?  switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。  7六、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被運行,何時被運行,在return前仍是後?  會運行,在return前運行。  7七、編程題: 用最有效率的方法算出2乘以8等於幾?  2 << 3  7八、兩個對象值一樣(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不正確?  對,有一樣的hash code。  7九、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞仍是引用傳遞?  是引用傳遞  基本數據類型:值  對象: 引用  80、四種會話跟蹤技術  Cookie  Session  Hidden  url 重寫  8一、編程題: 寫一個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的。  通常以爲第一種形式要更加安全些  8三、Java中的異常處理機制的簡單原理和應用。  原理  有錯直接轉到異常處理部分或向上拋出。  應用:  JAVA的異常就是錯誤,有兩種一種是執行時,編碼可以不用捕捉。一種是通常異常,假設throws聲明瞭,必須進行處理。  8四、垃圾回收的長處和原理。並考慮2種回收機制。  長處:  程序猿不用管內存,jvm本身主動完畢,開發方便。執行優先很低,程序沒法清楚實例何時被消毀。  8五、描寫敘述一下JVM載入class文件的原理機制?  JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java執行時系統組件。它負責在執行時查找和裝入類文件的類。  8六、char型變量中能不能存貯一箇中文漢字?爲何?  能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的  8八、寫一個程序,從文件(c:\test.txt)中查出字符串」mobnet」出現的次數?  java基礎類庫(io流,集合類,線程,Socket,AWT,Swing,sql)  一、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們各自是哪些類?  字節流,字符流。字節流繼承於InputStream OutputStream,字符流繼承於Reader Writer。在java.io包中還有更多的流,低層流與調層流,高層流主要是爲了提升性能和使用方便。  二、啓動一個線程是用run()仍是start()?  啓動一個線程是調用start()方法,啓動線程並調用run方法。  三、線程的基本概念、線程的基本狀態以及狀態之間的關係  線程是進程內的併發,沒有自已內存空間,共享進程的,線程間的通訊成本較低。  Java中的線程有四種狀態各自是:執行、就緒、掛起、結束。  四、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 用什麼keyword修飾同步方法? stop()和suspend()方法爲什麼不推薦使用?  Extends Thread  Implements Runnable  同步  Public synchronized aa()  {  }  Public void cc(object aa)  {  synchronized(aa)  {  }  }  用synchoronized修飾同步方法。  答:多線程有兩種實現方法,各自是繼承Thread類與實現Runnable接口  同步的實現方面有兩種,各自是synchronized,wait與notify  反對使用stop(),是因爲它不安全。它會解除由線程獲取的所有鎖定,而且假設對象處於一種不連貫狀態,那麼其它線程能在那種狀態下檢查和改動它們。結果很是難檢查出真正的問題所在。suspend()方法easy發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其它不論什麼線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復執行。對不論什麼線程來講,假設它們想恢復目標線程,同一時候又試圖使用不論什麼一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中置入一個標誌,指出線程應該活動仍是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()又一次啓動線程。  五、集合框架有什麼?  Collection    Map  List             set                                     HashMap  ArrayList  linkedList  HashSet  TreeSet  十二、設計4個線程,當中兩個線程每次對j添加1,另外兩個線程對j每次下降1。寫出程序  public class TestThread  {  private int j;  public synchronized void inc()  {  j++;  System.out.println(Thread.currentThread().getName() + "-inc:" + j);  }  public synchronized void dec()  {  j--;  System.out.println(Thread.currentThread().getName() + "-dec:" + j);  }  public static void main(String[] args)  {  TestThread t=new TestThread();  for (int i = 0; i < 2; i++)  {  Thread inc=new Thread(new Inc(t));  Thread dec=new Thread(new Dec(t));  inc.start();  dec.start();  }  }  }  class Inc implements Runnable  {  private TestThread obj;  public Inc(TestThread obj)  {  this.obj=obj;  }  public void run()  {  // for (int i = 0; i < 100; i++)  // {  this.obj.inc();  // }  }  }  class Dec implements Runnable  {  private TestThread obj;  public Dec(TestThread obj)  {  this.obj=obj;  }  public void run()  {  // for (int i = 0; i < 100; i++)  // {  this.obj.dec();  // }  }  }  1三、同步和異步有和異同,在什麼狀況下分別使用他們?舉例說明。  同步:上一段代碼沒的完畢,下一段必須等到上一段代碼完畢後才幹夠運行。如買票排隊  異步:上一段代碼沒的完畢,下一段沒必要等到上一段代碼完畢就可以運行。如手機發送短信。  1四、sleep() 和 wait() 有什麼差異?  Sleep是指休眠給定的時間,當這個時間達到以後,線程會再次醒來。  Wait是等待狀態,多長時間不清楚,由還有一個線程將其喚醒。  1五、當一個線程進入一個對象的一個synchronized方法後,其餘線程是否可進入此對象的其餘方法?  如僅僅其餘方法是同步方法,不可以進入。假設不是可以進入。  1七、輸入輸出流的理解:  在java使用流的機制進行數據的傳送,從文件到內存是輸入流,從內存到文件是輸出流,輸入流可以經過 read讀取,輸出流以write或print寫入,對於流可以是分爲高層流和低層流,低層以一個字節或字符爲單位進行處理,高層流以一批數據爲單位進行處理。  FileInputStream(System.in)至InputSteamReader至BufferReader  OutputSteam(System.out)至printStream  FileReader至BufferedReader  FileWriter 至 PrintWriter或bufferWriter  分類:  字節(二進制)  FileInputStream(低層輸入流)  FileOutputStream(低層輸出流)  PrintStream(高層流)  System.out.println()  字符(一個char)  FileReader  FileWriter  1八、請寫一個程序的讀寫,要求用兩種方式一種是低層流還有一種是高層流。  import java.io.FileWriter;  import java.io.InputStream;  import java.io.BufferedWriter;  import java.io.InputStreamReader;  import java.io.BufferedReader;  import java.io.FileReader;  public class Untitled1 {      public static void writeFileChar() throws Exception {          FileWriter f = new FileWriter("c:\\aa.txt");          InputStream is = System.in;          int c = is.read();          while (((char) c) != 'x') {              f.write(c);              c = is.read();          }          f.close();          is.close();      }      public static void writeFileString() throws Exception {          FileWriter f = new FileWriter("c:\\aa.txt");          BufferedWriter bwr=new BufferedWriter(f);          BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));          String c = bf.readLine();          while (!c.equals("stop")) {              bwr.write(c+"\r\n");              c = bf.readLine();          }          bwr.close();          f.close();          bf.close();      }           public static void readFileChar() throws Exception {         FileReader f = new FileReader("c:\\aa.txt");         int c = f.read();         while (c!=-1) {             System.out.print((char)c);             c=f.read();         }         f.close();     }     public static void readFileString() throws Exception {         BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt"));         String c = bf.readLine();         while (c!=null)         {             System.out.println(c);             c=bf.readLine();         }         bf.close();     }      public static void main(String[] args) throws Exception {          readFileString();      }  }  1九、怎樣列出某個文件夾下的所有文件  Import java.io.File;  File f=new File("C:\\");          File[] f1=f.listFiles();          for(int i=0;i<f1.length;i++)          {              if(f1[i].isDirectory())              {                  System.out.println("dirctory is"+f1[i].getName());              }              else              {                  System.out.println("file is"+f1[i].getName());              }          }      }  怎樣列出某個文件夾下的所有子文件夾  public static void main(String[] args) throws Exception  {         getFile(new File("C:\\entityBean"),"\t");  }  public static void getFile(File f,String sem) throws Exception  {          System.out.println(sem+f.getName());          File fl[]=f.listFiles();          if(fl.length>=1)          {              for(int i=0;i<fl.length;i++)              {                  if(fl[i].isDirectory())                  {                      getFile(fl[i],sem+"\t");                  }              }          }      }  推斷一個文件或文件夾是否存在    File f=new File("C:\\entityBean");     if(f.exists())     {            System.out.println("exist");     }      else      {          System.out.println("not exist");      }  Socket  20、用socket通信寫出client和server端的通信,要求客戶發送數據後能夠回顯一樣的數據?  public class ServerSocket_1  {      public static void main(String[] args)              throws Exception      {          ServerSocket ss = new ServerSocket(4001);          Socket s = ss.accept();          BufferedReader br = new BufferedReader(new InputStreamReader(s.                  getInputStream()));          PrintStream ps=new PrintStream(s.getOutputStream());          String temp = br.readLine();          while (true)          {              System.out.println("client:"+temp);              ps.println(temp);              if (temp.equals("stop"))              {                  break;              }              temp = br.readLine();          }          br.close();          ps.close();          ss.close();      }  }  public class ClientSocket  {    public static void main(String[] args) throws Exception    {        Socket s = new Socket("localhost", 4001);        PrintStream ps = new PrintStream(s.getOutputStream());        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        BufferedReader br_server = new BufferedReader(new InputStreamReader(s.                getInputStream()));        String temp = br.readLine();        while (true)        {            ps.println(temp);            temp = br_server.readLine();            System.out.println("server的信息:" + temp);            if (temp.equals("stop"))            {                break;            }            temp = br.readLine();        }        s.close();        br.close();        br_server.close();    }  }  2三、介紹JAVA中的Collection FrameWork(包含怎樣寫本身的數據結構)?  答:Collection FrameWork例如如下:  Collection  ├List  │├LinkedList  │├ArrayList  │└Vector  │ └Stack  └Set  Map  ├Hashtable  ├HashMap  └WeakHashMap  Collection是最主要的集合接口,一個Collection表明一組Object,即Collection的元素(Elements)  Map提供key到value的映射  2四、請說出你所知道的線程同步的方法  HashTable中的put,get,remove  Vector的相關方法。  jdbc數據訪問技術  一、JDBC怎樣作事務處理?  Con.setAutoCommit(false)  Con.commit();  Con.rollback();  二、寫出幾個在Jdbc中常用的接口  preparedStatement,callableStatement,statement,Connection,ResultSet  三、簡述你對Statement,PreparedStatement,CallableStatement的理解  statement用於運行靜態 SQL 語句並返回它所生成結果的對象,在運行時肯定sql。  PreparedStatement表示預編譯的 SQL 語句的對象。 SQL 語句被預編譯並且存儲在 PreparedStatement 對象中。而後可以使用此對象高效地屢次運行該語句,可以傳參數,在獲得PreparedStatement對象時肯定sql.  CallableStatement用於運行 SQL 存儲過程的接口。假設有輸出參數要註冊說明是輸出參數。  四、Java中訪問數據庫的步驟?  1鏈接Oracle數據庫  Class.forName(「oracle.jdbc.driver.OracleDriver」);  Connection con=DriverManager.openConnection(「jdbc:oracle:thin:@localhost:1521:DataBase 」,」 UserName」,」Password 」)  利用JDBC檢索出表中的數據  Class.forName(「」);  Connection con=DriverManager.openConnection(「 」,」 」,」 」)  preparedStatment  ps=Con.preparedStatment(「select * from [table]」);  ResultSet rs=ps.executeQuery();  While(rs.next)  {  Rs.getString(1) 或rs.getString(「字段名」)  }  五、JDBC中的核心類及其做用是什麼?  DriverManager  Class.forName();  DriverManager.getConnection(「」,」sa」,」」)  Connection    PreparedStatement(Statement)  ResultSet  rs=executeQuery()  dql  While(rs.next())  {  }  executeUpdate()  dml ddl  六、運行存儲過程用那一個類,怎樣操做輸出參數?(操做) CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}");  c.setString(1,"1");  c.registerOutParameter(2,java.sql.Types.VARCHAR);  c.execute();  c.getString(2);  八、可能會讓你寫一段Jdbc連Oracle的程序.  Class.forName("oracle.jdbc.driver.OracleDriver");          Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","system","system");  九、Class.forName的做用?爲何要用?  註冊一個數據庫驅動,將驅動載入到當前的JVM中。  十、Jdo是什麼? JDO是Java對象持久化的新的規範,爲java data object的簡稱,也是一個用於存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,所以對開發者來講,存儲數據對象全然不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工做已經轉移到JDO產品提供商身上,使開發者解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很是靈活,因爲它可以在不論什麼數據底層上執行。JDBC僅僅是面向關係數據庫(RDBMS)JDO更通用,提供到不論什麼數據底層的存儲功能,比方關係數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。(o/rMapping工具 集合處理)  十一、在ORACLE大數據量下的分頁解決方法。通常用截取ID方法,還有是三層嵌套方法 create or replace package myPack  is  type c_type is ref cursor;  procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type);  end;  create or replace  package  body myPack  is  procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type)    is      pageTotal int:=0;      pageFirstRow int:=0;      pageLastRow int:=0;      rowTotal int:=0;    begin      execute immediate 'select count(*)  from ('||v_sql||')' into rowTotal;      pageTotal:=ceil(rowTotal/pageSize);      if(pageIndex<1) then             raise_application_error(-20001,'頁數不能小於1');      end if;      if(pageIndex>pageTotal) then             raise_application_error(-20001,'頁數太大,不能讀取');      end if;      pageFirstRow:=(pageIndex-1)*pageIndex+1;      pageLastRow:=pageFirstRow+pageSize;      open c for ' select * from '||v_sql||' where rownum<'||           pageLastRow||'minus select * from '||v_sql           ||' where rownum<'||pageFirstRow;       end;  end;  Web編程Jsp&Servlet技術  一、簡單說說tomcat的配置?  JAVA_HOME=JDK的根文件夾  CATALINA_HOME=tomcat的根文件夾  CATALINA-HOME\conf\server.xml:可以配置tomcat的port,可以配置tomcat中下鏈接池。  CATALINA-HOME\common\lib:存放公用的類包  在My eclipse中怎樣配置tomcat  在eclipse中,選擇windows->preference->MyEclipse->ApplicationServer->Tomcat  選擇Tomcat 的安裝文件夾,並選擇TomCat所需的jdk,選擇enable,肯定就能夠。  二、JSP中動態INCLUDE與靜態INCLUDE的差異?  jsp:include:在執行時調用還有一個頁面,變量是可以反覆的。  <%@include file=」」%>:在轉譯時合在一塊兒,會成爲同一個類,變量不可以反覆。  三、forward和redirect的差異?  forward: 轉發,在下一個頁面中,request保留上一個頁面中的request的所有值  redirect: 跳轉,不傳遞request對象。  四、Servlet的體系結構是什麼?  Servlet  GenericServlet  HttpServlet  本身定義  五、怎樣實現一個本身定義的servlet?  extends HttpServlet 並覆蓋doPost或doGet方法  在web.xml中進行部署  六、Servlet的生命週期是什麼?  Init  屢次運行doGet或doPost   destroy  七、jsp就是一個servlet是否正確?  對  八、請羅列jsp中的腳本、指令及動做?  腳本  <%%>  <%=%>  <%!%> <%----%>  指令  <%@page contentType=」text/html;charset=utf-8」 language=」java」 import=」」%>  <%@include file=」」%>  <%@taglib uri=」」 prefix=」」%>  動做:  <jsp:useBean class=」」 id=」」 scope=」」>  在scope中假設沒有實例化一個對象,假設有直接用曾經的。  <jsp:getProperty name=」」 property=」」>  向一個bean中設置屬性值  <jsp:forward >  jsp頁的轉發  <jsp:include page=」」>  導入一個jsp頁面  九、JSP的內置對象及方法  Request  request表示HttpServletRequest對象。取client表單域信息及cookie, header, 和session  response response表示HttpServletResponse對象,對client的響應返回文本、寫cookies。  out out 向client打印html文本.  pageContext :當前jsp頁面的上下文環境,可以獲得session、request、application等內置對象,在本身定義標籤中使用的很是多。  session session表示一個請求的javax.servlet.http.HttpSession對象。Session一個用戶多個頁面共享同一變量。  application applicaton 表示一個javax.servle.ServletContext對象。存放容器級的變量。  config config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。  page page表示從該頁面產生的一個servlet實例  exception:異常,當iserrorpage=true  十、說出在JSP頁面裏是怎麼分頁的?  頁面需要保存下面參數:(數據庫的分頁及比較)  總行數:依據sql語句獲得總行數  每頁顯示行數:設定值  當前頁數:請求參數  頁面依據當前頁數和每頁行數計算出當前頁第一行行數,定位結果集到此行,對結果集取出每頁顯示行數的行就能夠。  數據庫:  Sqlserver:  SELECT TOP 頁大小 *  FROM TestTable  WHERE (ID NOT IN          (SELECT TOP 頁大小*(頁數-1) id           FROM 表           ORDER BY id))  ORDER BY ID  --pageSize=5  頁大小  --pageIndex=2 所要的頁  --假設有主鍵可以,沒以及鍵不行  select top 5 *  from aa where a1 not in  (select top 5 a1 from aa order by a1)  order by a1;  oracle:  select * from '||v_sql||' where rownum<'||           pageLastRow||'minus select * from '||v_sql           ||' where rownum<'||pageFirstRow;  Session  先取出數據中的所有信息封裝到對象並保存在session中,轉發到jsp頁面作例如如下處理。  <table border="1">      <tr>        <td>a1</td>        <td>a2</td>      </tr>  <%       List l=(List)session.getAttribute("as");       //一頁顯示多少行       int pageSize=3;       //總頁數       int pageCount=0;       int currentPage=1;       if(l!=null && l.size()>0)       {       pageCount=(l.size()/pageSize)+(l.size()%pageSize==0?0:1);       if(request.getParameter("page")!=null)       {         currentPage=Integer.parseInt(request.getParameter("page"));       }       if(currentPage<1)       {         currentPage=1;       }       if(currentPage>pageCount)       {         currentPage=pageCount;       }       for (int i = (currentPage-1)*pageSize; i <(currentPage-1)*pageSize+pageSize; i++)       {         if(i>=l.size())         {           break;         }         Aa aa=(Aa)l.get(i);         %>          <tr>        <td><%=aa.getA1()%></td>        <td><%=aa.getA2()%></td>      </tr>         <%         }       }  %>  <tr>    <td colspan="2">      <%      if(currentPage!=1)      {      %>      <a href="page.jsp?page=1">首頁</a>&nbsp;&nbsp;      <a href="page.jsp?page=<%=currentPage-1%>">上一頁</a>&nbsp;&nbsp;      <%      }      if(currentPage!=pageCount)      {      %>      <a href="page.jsp?page=<%=currentPage+1%>">下一頁</a>&nbsp;&nbsp;      <a href="page.jsp?page=<%=pageCount%>">最後一頁</a>&nbsp;&nbsp;      <%      }      %>    </td>  </tr>    </table>  十一、include的兩種實現方式的差異?  <@include file>:在將jsp生成servlet類前將兩個文件和在一塊兒,生成一個java類,一塊兒執行的。因此是一家子,其中的變量名不能重名。  <jsp:include page>:是兩個類,是一個調用關係,在執行時動態的調用,不是一家子,可以反覆變量。  十二、jsp頁面中兩種跳轉方式各自是什麼?有什麼差異?  轉發: 保留上次的request  <jsp:forward>  actionMapping.findForWard(「」);  pageContext.forward();  request.getRequestDispacher(「a.jsp」).forward(request,response)  跳轉:不保留上次的request  Response.setRedirect(「」)  1三、描寫敘述JSP和Servlet的差異、共同點、各自應用的範圍  Jsp主要在於頁面的顯示動態生成頁面,可以與html標記一塊兒使用,其仍是要生成爲一個servlet。  Servlet:主要是控制的處理,如調用業務層,跳轉不一樣的jsp頁面。  Mvc:  Jsp:v  Servlet:c  1四、在JSP中怎樣讀取client的請求,怎樣肯定某個Jsp文件的真實路徑?  Request.getparameter(「」)  <%=application.getRealPath("aa.jsp") %>  1五、描寫敘述Cookie和Session的做用,差異和各自的應用範圍,Session工做原理。  Cookie:主要用在保存client,其值在client與服務端之間傳送,不安全,存儲的數據量有限。  Session:保存在服務端,每一個session在服務端有一個sessionID做一個標識。存儲的數據量大,安全性高。佔用服務端的內存資源。  1六、說明Jsp中errorPage的做用,應用範圍。  正常頁面中  %@page erropage=」error.jsp」%  錯誤頁面  <%@page iserrorpage=」true」%>  有一內置對象:exception  1七、介紹在Jsp中怎樣使用JavaBeans  <jsp:useBean class=」」 id=」」 scope=」」/>  <%  New 類();  %>  1九、簡介JSP的標記庫  作一個標記處理類 extends TagSupport  經過tld說明標記處理的類的前綴及後綴  在web.xml中說明tld文件  <taglib>  <taglib-uri>  <taglib-location>  <taglib>  在jsp頁面是引用tld<%@taglib uri=」」 prefix=」」%>  20、Servlet中的核心類有那些,各有什麼特色?  ServletContext:容器,放置全局變量  setAtribute()  getAttribute()  ServletConfig:一個servlet的配置  getInitParameter(」名稱」)  HttpServletRequest:封裝的所有的請求  getParameterValue(」名稱」)  getParameterValues(」稱」)  getSession();  getAttribute(」 名稱」);  getRequestDispatch(」a.jsp」).forward(request,response)  HttpServletResponse:響應  getOut();  sendRedirect(」」) HttpSession:一個用戶多個頁面共享同一變量  setAttribute(」」,」」)  2一、Servlet中重要的包有那些,有什麼差異?  javax.servlet.*;javax.servlet.http.*;  2二、說出Servlet的生命週期,並說出Servlet和CGI的差異?  Servlet被server實例化後,容器執行其init方法,請求到達時執行其service方法,service方法本身主動派遣執行與請求相應的doXXX方法(doGet,doPost)等,當server決定將實例銷燬的時候調用其destroy方法。  與cgi的差異在於servlet處理server進程中,它經過多線程方式執行其service方法,一個實例可以服務於多個請求,並且事實上例通常不會銷燬,而CGI對每個請求都產生新的進程,服務完畢後就銷燬,因此效率上低於servlet。  2三、什麼狀況下調用doGet()和doPost()?  Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。  2五、怎樣現實servlet的單線程模式  在doGet及doPost方法前增長synchoronized  JSP:  <%@ page isThreadSafe="true"%>  2七、Request對象的主要方法:  setAttribute(String name,Object):設置名字爲name的request的參數值  getAttribute(String name):返回由name指定的屬性值  getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例  getCookies():返回client的所有Cookie對象,結果是一個Cookie數組  getCharacterEncoding():返回請求中的字符編碼方式  getContentLength():返回請求的Body的長度  實例  getInputStream():返回請求的輸入流,用於得到請求中的數據  getMethod():得到client向server端傳送數據的方法  getParameter(String name):得到client傳送給server端的有name指定的參數值  getParameterNames():得到client傳送給server端的所有參數的名字,結果是一個枚舉的實例  getParameterValues(String name):得到有name指定的參數的所有值  getProtocol():獲取client向server端傳送數據所根據的協議名稱  getQueryString():得到查詢字符串  getRequestURI():獲取發出請求字符串的client地址  getRemoteAddr():獲取client的IP地址  getRemoteHost():獲取client的名字  getSession([Boolean create]):返回和請求相關Session  getServerName():獲取server的名字  getServletPath():獲取client所請求的腳本文件的路徑  getServerPort():獲取server的port號  removeAttribute(String name):刪除請求中的一個屬性  2八、咱們在web應用開發過程當中經常遇到輸出某種編碼的字符,如iso8859-1等,怎樣輸出一個某種編碼的字符串?    Public String translate (String str) {      String tempStr = "";      try {        tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");        tempStr = tempStr.trim();      }      catch (Exception e) {        System.err.println(e.getMessage());      }      return tempStr;    }  30、Servlet運行時通常實現哪幾個方法?  public void init(ServletConfig config)  public ServletConfig getServletConfig()  public String getServletInfo()  public void service(ServletRequest request,ServletResponse response)  public void destroy()  5 Hibernate持久層技術  一、在myeclipse增長hibernate環境的全過程是什麼?  Db-browers增長配置鏈接  新建project  增長hibernate環境,指定*.hbm.xml及HibernateSessionFactory文件所在的位置  二、hibernate的核心配置文件是什麼及其做用?  Hibernate.cfg.xml:數據庫鏈接、指定相關的映射文件  *.hbm.xml:詳細的o/r mapping說明  三、hibernate的核心類是什麼,它們的相互關係是什麼?重要的方法是什麼?  Configuration  SessionFactory  Session例如如下方法  Save  load  Update  Delete      Query q=CreateQuery(「from Customer where customerName=:customerName」)  beginTransaction  close  Transaction  Commit() 四、關聯:  one-to-many  inverse:主控方,外鍵的關係有誰控制  inverse=false 是主控方,外鍵是由它控制的 inverse=true 是被控方,外鍵與它不要緊  要想實現主控方的控制必須將被控方做爲主控方的屬性  cascade:級聯  主表增從表增  主表修從表修  主表刪從表刪  lazy:延遲  lazy=false:一下將所有的內容取出,不延時(常用)  lazy=true:取出部份內容,其他內容動態去取  經過get可以取出對方的所有內容 五、hibernate中的one-to-many或many-to-one中常用的方式是什麼?  主控方在many這邊,不及連刪除  六、Criteria 的做用?  Criteria c=session.createCriteria(Customer.class);  //設置條件  c.add(Expression.ge(「字段名」,」值對象」))  ge:>=  gt:>  le:<=  lt:<  eq:=  //排序  c.addOrder(Order.asc(「字段名」))  //分頁  c.setFirstResult(1)//從第2行開始提取  c.setMaxResults(5)//返回5行  七、DetachedCriteria的做用?  產生時不需要session  DetachedCriteria dc= DetachedCriteria.forClass(Customer.class)  Criteria c=Dc.getExecutableCriteria(session)  八、Query  1 個或多個屬性查詢:  Query query=session.createQuery(」select customername,customerid from Customer」)  List l=query.list();  For(int i=0;i<l.size();i++)  {  Obejct[] object=(Object[])l.get(i);  Object[0]  object[1]  }  }  分組: "select count(*),productname from Product group by productname order by productname"  取值與屬性同樣  配置的查詢,在*.hbm.xml中  <query name="sql">      <![CDATA[      from Product where productid=:productid      ]]>  </query>  Query query=session.getNamedQuery(sql);  聯接1  "from Customer as customer join fetch customer.buySet":將多的放到buySet屬性中,得出的結是Customer有一個,Buy有多個  聯接2  "from Customer as customer join customer.buySet":得出的對象,customer與buy是1對1  子查詢:  "from Customer as customer where (select count(*) from customer.buySet)>1"  九、繼承關係的實現  一、兩個表,子類反覆父類的屬性。  二、一個表,子類父類共用一個表    <class name="Users" table="users" discriminator-value="Users">  <discriminator column="DISCRIMINATOR_USERTYPE" type="string"/>  <subclass name="admin" discriminator-value="admin">          <property name="adminRemark" column="admin_remark" type="string" />        </subclass>    </class>  三、兩個表,子類引用父類的主鍵,享用公共的字段或屬性。      <class name="Users" table="users">          <id name="userid" column="USERID" type="string">              <generator class="assigned"/>          </id>          <property name="pwd" column="pwd" type="string" />  <joined-subclass name="Guest" table="guest">  <key column="USERID"/>          <property name="guestRemark" column="guest_remark" type="string" />          </joined-subclass>  </class>  批量刪除  Query query=session.createQuery("update"或"delete");  query.executeUpdate();  十、tomcat鏈接池:在容器中預先產生了n個鏈接實例,client不用又一次實例化,可以直接取。  6.一、在tomcat-5.0\conf\server.xml中</host>前面增長例如如下內容  <Context path="/app1" docBase="app1" debug="0"    reloadable="true" crossContext="true">    <Resource name="jdbc/sa" auth="Container" type="javax.sql.DataSource"/>               <ResourceParams name="jdbc/sa">      <parameter>      <name>factory</name>      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>      </parameter>    <parameter>             <name>driverClassName</name>        <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>      </parameter> <parameter>        <name>url</name>        <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev;SelectMethod=cursor</value>    </parameter>      <parameter>      <name>username</name>                <value>sa</value>    </parameter>      <parameter>      <name>password</name>      <value></value>      </parameter>      <parameter>      <name>maxActive</name>              <value>20</value>    </parameter>       <parameter>        <name>maxIdle</name>      <value>10</value>    </parameter>    <parameter>        <name>maxWait</name>      <value>-1</value>    </parameter>      </ResourceParams>      </Context>  6.二、將sql-server包複製到C:\tomcat-5\common\lib  6.三、jdbc測試代碼  Context initCtx = new InitialContext();     Context envCtx = (Context)initCtx.lookup("java:comp/env");  ds = (DataSource)envCtx.lookup("jdbc/sa");  Connection conn = ds.getConnection();  6.四、hibernate經過鏈接池實現鏈接  <session-factory name="foo">  <property name="connection.datasource">java:comp/env/jdbc/sa</property>  <!--指定tomcat鏈接池-->  <property name="show_sql">true</property> <!--是否顯示sql-->  <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!--hibernate的驅動管理器-->  <mapping resource="com/accp/t15/Customer.hbm.xml"/>  </session-factory>  十一、對象的三大狀態  自由(transient)  與session無關  持久(persistent)  由session來管理  在持久狀態中經過get方法取出對方  遊離(detached)  被session拋棄 十二、hibernate常見優化策略  用最新版本號的hibernate  制定合理的緩存策略  採用合理的session管理機制  儘可能使用延遲載入  many  大文本、大文件  設定合理的批處理參數(batch-size)  若有可能,選用uuid做爲主鍵生成器  若有可能,選用基於version的樂觀鎖替代悲觀鎖  開發過程當中,打開hibernate的SQl日誌輸出(hibernate.show_sql=true),經過觀察hibernate生成的sql語句進一步瞭解其實現原理,從而指其實更好的實現策略。 iBatis持久層技術  用ibatis的緣由:  僅僅對開發團隊提供幾條Select SQL(或存儲過程)以獲取所需數據,詳細的表結構不予公開。  開發規範中要求,所有牽涉到業務邏輯部分的數據庫操做,必須在數據庫層由存儲過程實現  系統數據處理量巨大,性能要求極爲苛刻,這每每意味着咱們必須經過通過高度優化的SQL語句  (或存儲過程)才幹達到系統性能設計指標。  jdbc、hibernate、ibatis的差異  jdbc:手動  手動寫sql  delete、insert、update要將對象的值一個一個取出傳到sql中,不能直接傳入一個對象。  select:返回的是一個resultset,要從ResultSet中一行一行、一個字段一個字段的取出,而後封裝到一個對象中,不直接返回一個對象。  ibatis的特色:半本身主動化  sql要手動寫  delete、insert、update:直接傳入一個對象  select:直接返回一個對象 hibernate:全本身主動  不寫sql,本身主動封裝  delete、insert、update:直接傳入一個對象  select:直接返回一個對象  ibatis的核心配置文件:  sqlmapclient.xml:數據庫鏈接及相關o/rMapping的映射文件(hibernate.cfg.xml)  sqlmapBuy.xml:詳細的o/rmapping映射(*.hbm.xml) 四大標記:  select  update  delete  insert  procedure  ibatis的核心類:  SqlMapClientBuilder:載入配置文件,返回一個會話。  SqlMapClient:詳細的會話  List list=queryForList("標籤名",object);  Object obj=queryForObject("標籤名",object);  delete("標籤名",object)  update("標籤名",object)  insert("標籤名",object)  project的使用:  將ibatisfactory複製到project文件夾下  將ms的3個包及ibatis的三個包複製到/WEB-INF/lib下  改動ibatisfactory中的abatorConfig.xml文件  進入ibatisfactory文件夾執行java -jar  abator.jar abatorConfig.xml true  將sql標記、select、update、insert、delete的副本刪除  spring&ibatis:  dataSource  sqlMapClient:SqlMapClientFactoryBean  configLocation  classpath:sqlMapClient.xml  /WEB-INF/sqlMapClient.xml  dataSource  transactionManager:DataSourceTransactionManager  dataSource  customerDao extends SqlMapClientDaoSupport  sqlMapClient  buyDao  sqlMapClient  Facade  buyDao  customerDao  abstractProxy:TransactionProxyFactoryBean  transactionManager  transactionAttributes  facadeProxy  target:façade  7 Structs界面控制層技術  一、請說出struts框架的幾大組件?  一、MVC  二、標籤庫  三、校驗框架  四、國際化  五、tiles  三、struts的核心類有那些,在MVC模式中其相應的關係是什麼?  C  ActionServlet  RequestProcessor  Action  actionMapping(struts-config.xml)  actionFormard  V  ActionForm  Jsp  M  Dao  Manager(facade)  四、Struts的處理請求的全過程是什麼?  url-> ActionServlet(process)-> RequestProcessor(process)->實例化form ->填充form值->進行校驗->實例化action->調用execute  五、在struts中怎樣經過一個url找到一個action,它的核心配置文件是什麼?  配置文件是struts-config.xml  六、爲何使用MVC,其主要目的是什麼?  讓v與M強制解耦,提升可重用性(旅館的服務員(C))  七、對於MVC在action中相應有類有幾種,各有什麼做用?   Action:  1) 主要的   DispatchAction:  2) 存在多個方法,依據頁面傳入的表單域的值調用不一樣的方法,表單域的名稱在<action param=」」/>標記中進行配置   LookupDispatchAction  3) 多個button用同一個action的不一樣方法。實現getMap方法,說明每一個button在*.properties中的鍵名及鍵值,在struts-config.xml經過parameter說明button的名稱,button的值相應*.properties的值,經過值找鍵名,經過鍵名找Map中的鍵名找到值就是相應的方法。   MappingDispatchAction:未知   forwordAction:直接跳轉到不一樣頁面不運行邏輯(???)   類所在的包:org.apache.struts.actions.ForwardAction  八、struts的標記有幾類,請列舉並說明其做用? Bean:  <bean:define scope=」」 name=」」 property=」」 id=」」/>  <bean:write  name=」customer」 property=」customerName」/> <bean:message key=」」/>國際化  Logic:  <logic:iteator>  //將集合的內容取出  <logic:present> //  <logic:equals> //  Html:  <html:file>上傳文件  <html:select property=」sex」>  <html:options collection=」」 property=」」 labelProperty=」」/>  </html:select>  九、怎樣在struts中配置數據源在,什麼文件?用什麼標籤?怎樣取出DataSource? Struts-config.xml  <data-sources>    <data-source key="data" type="org.apache.commons.dbcp.BasicDataSource">    <set-property property="driverClassName"   value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />    <set-property property="url"     value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=t23" />    <set-property property="username" value="sa" />     <set-property property="password" value="" />   </data-source>  </data-sources>  DataSource ds=(DataSource)this.getServlet().getServletContext().getAttribute("data");  Connection con=ds.getConnection();  十、怎樣在jbuilder中開發struts?  project   Web模型(選中struts1.2.8,會自加在web –inf中生成tld及struts-config.xml,並載入相關的類包)   建一個ActionForm   建一個Action   改動struts-config.xml文件  十一、怎樣實現struts的validator框架?  手動:   public class myForm extends ActionForm  {   public ActionErrors validate()   {  actionErrors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("properties中的鍵名"));   }   }  struts-config.xml中改動action的標籤validate=true   input="錯誤頁面"   假設validate方法中的ActionErrors不爲空且size>0時   會回到input頁面。   本身主動   public class myForm extends ValidateForm  {   不能覆蓋validate方法。   //public void validate()   //{    //}   }  在struts-config.xml文件裏增長插件   <plug-in className="org.apache.struts.validator.ValidatorPlugIn">       <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />     </plug-in>   改動validation.xml中的內容   errors.required={0} is required.   errors.minlength={0} can not be less than {1} characters.   <formset>   <form name="loginForm">   <field property="userName" depends="required">   <arg0 key="userName" />   </field>   <field property="pwd" depends="required,minlength">   <arg0 key="pwd" />   <arg1 key="${var:minlength}" resource="false"/>   <var>   <var-name>minlength</var-name>   <var-value>6</var-value>   </var>   </field>   </form>   </formset>   struts-config.xml中改動action的標籤validate=true   input="/錯誤頁面" 1三、怎樣實現國際化?  國際化:不用改動代碼,就適用於不一樣的語言國家  本地化:假設要適應一個國家,要改動源碼  實現過程:  在struts-config.xml中用例如如下標籤說明資源文件名稱,注意其僅僅是文件名稱,沒有語言_國家  <message-resources parameter="struts.ApplicationResources" />  在資源文件相應的文件夾struts中增長適應不一樣語言、國家的properties文件  ApplicationResources_zh_CN.properties 中國  ApplicationResources_en_US.properties us  假設不是英語要轉碼  native2ascii -encoding gb2312 源 ApplicationResources_zh_CN.properties  在jsp頁面中用  <bean:message key=""/>取出信息  8 JSF界面控制層技術  一、Jsf中的核心類用那些?有什麼做用?     核心類  FacesServlet  LiftCycle    FacesContext            二、Jsf中的LiftCycle六大生命週期是什麼?  恢復視圖->應用請求值->校驗->更新模型->調用應用程序->呈現響應  三、怎樣管量web層中的Bean,用什麼標籤。怎樣經過jsp頁面與Bean綁定在一塊兒進行處理?  <managed-bean>      <managed-bean-name>checkNumber</managed-bean-name>     <managed-bean-class>jsf1.CheckNumber</managed-bean-class>      <managed-bean-scope>session</managed-bean-scope>  </managed-bean>  四、Jsf中導航的標籤是什麼?  <navigation-rule>      <from-view-id>/main.jsp</from-view-id>      <navigation-case>       <from-outcome>success</from-outcome>          <to-view-id>/result.jsp</to-view-id>      </navigation-case>  </navigation-rule>  五、jsf中用戶界面組件模型有幾類,各表明什麼?  UI組件、事件監聽、顯示、類型轉換、驗證  六、表格處理及取值  import javax.faces.model.DataModel;  import javax.faces.model.ListDataModel;  DataModel:表明一個表格,其可以從client傳上來。  實例化:  DataModel dm=new ListDataModel();  將一個list值放入到DataModel中. dm.setWrappedData(list)  將client當前行取出  (LogsVO) dm.getRowData()  對於多條的查詢及增刪改在模型中增長了例如如下屬性: 模型的名稱是bean,其下的屬性是  DataModel dm:表明返有的行數據  VO vo:表明一行數據。  取一行:  vo=(VO) dm.getRowData();  通#{bean.vo.屬性名},假設改動相應信息本身主動改動。  添加一行:  this.vo=new VO();  通#{bean.vo.屬性名},顯示確定無值,但客戶輸入值提交後會將值勤寫入  七、jsf的標籤庫有哪些?  核心:f  校驗  <f:validateDoubleRange>  <f:validateLength>  轉化  <f:convertDateTime pattern="yyyy-MM-dd"/> <f:convertNumber type="currency"/>  選擇框:  <f:selectItem/>  <f:selectItems/>  html:h  選擇控件:  <h:selectOneRadio>:一個string  <h:selectManyCheckBox>:一個String數組  <h:selectOneMenu>:組合框架選擇一個 <h:selectManyMenu>:組合框架選擇多個  <h:selectOneList>:下拉列表選擇一個 <h:selectManyList>:下拉列表選擇多個  表格:  <h:dataTable value="集合" var="集合中的一個">  <h:column>  <!--頭-->  <f:facet name=」header」>  <h:outputText >  </f:facet> <!--詳細的行值-->  <h:outputText value=""/>  <h:column> </h:dataTable>  9 Spring 應用框架技術  一、Spring和Struts的差異? strusts:是一種基於MVC模式的一個web層的處理。  Spring:提供了通用的服務,ioc/di aop,關心的不僅web層,應當j2ee整體的一個服務,可以很是easy融合不一樣的技術struts hibernate ibatis ejb remote springJDBC springMVC  二、什麼是aop,aop的做用是什麼?  Oop:縱向的業務  Aop:oop的一個橫向的服務,是對oop進一步的補充,提供安全、事務、日誌等的集中式處理,相關的裝備before、around、after exception  三、aop中的關鍵名詞有些那些,相互關係是什麼?  攔截器: 代理  裝備(advice)  目標對象  關切點:條件  鏈接點:方法、屬性  四、依賴注入的方式有幾種,各是什麼?  Setter  Interface  constructor  五、spring中的核心類有那些,各有什麼做用?  BeanFactory:產生一個新的實例,可以實現單例模式  BeanWrapper:提供統一的get及set方法  ApplicationContext:提供框架的實現,包含BeanFactory的所有功能  六、ApplicationContext的做用  beanFactory  國際化(getMesage)  資源管理:可以直接讀取一個文件的內容(getResource)  增長web框架中(增長一個servlet或監聽器)  事件處理  七、怎樣實現資源管理  使用  applicationContext.getResource(「classpath:文件名稱」):在src根文件夾下,在類路徑下  applicationContext.getResource(「classpath:/chap01/文件名稱」): 以src根文件夾下的基準往下走。  applicationContext.getResource(「file:c:/a.properties」):在系統文件文件夾下。  八、怎樣實現增長web框架中  在web.xml中增長例如如下同容,在啓動webserver時載入/WEB-INF/applicationContext.xml中的內容。  <servlet>  <servlet-name>context</servlet-name>  <servlet-class>  org.springframework.web.context.ContextLoaderServlet  </servlet-class>  <load-on-startup>1</load-on-startup>  </servlet>  經過例如如下類獲得ApplicationContext實例  WebApplicationContextUtils.getWebApplicationContext  九、怎樣實現事件處理  事件  Extends ApplicationEvent  監聽器  Implements ApplicationListener  事件源  Implements ApplicationContextAware  在applicationContext.xml中配置事件源、監聽器  先獲得事件源,調用事件源的方法,通知監聽器。  十、spring的ioc及di表明什麼意思?  Ioc:程序在執行過程當中,依據配置文件動態載入所依賴的配置類  、怎樣在spring中實現國際化?   在applicationContext.xml載入一個bean  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">  <property name="basename">  <value>message</value>  </property>  </bean>   在src文件夾下建多個properties文件   對於非英文的要用native2ascii -encoding gb2312 源  目轉化文件相關內容   其命名格式是message_語言_國家。   頁面中的中顯示提示信息,鍵名取鍵值。   當給定國家,系統會本身主動載入相應的國家的properties信息。   經過applictionContext.getMessage(「鍵名」,」參數」,」區域」)取出相關的信息。  十二、spring的配置的主要標籤是什麼?有什麼做用?  <beans>  <bean id=」」 class=」」 init=」」 destroy=」」 singleton=」」>  <property name=」」>  <value></value>  </property>  <property name=」」>  <ref local></ref>  </property>  </bean>  </beans>  1三、spring與ejb2.0的事務管理比較的優缺點?  測試:  Spring:pojo  Ejb:二個接口一個類,一堆配置文件  事務類型  Spring:jdbc jta  hibernate  Ejb:jta  成本     Spring:普通容器(tomcat jboss)     Ejb:weblogic jboss  開發的週期:  Spring遠比ejb快.  1四、spring的jdbc與傳統的jdbc有什麼差異,其核心類有那些?  Spring的jdbc:節省代碼,不管鏈接(Connection),不管事務、不管異常、不管關閉(con.close() ps.close )  JdbcTemplate(dataSource):增、刪、改、查  TransactionTemplate(transactionManager):進行事務處理  1五、在spring中有幾種事務管理,各自是什麼?  代碼管理的事務處理  TransactonTemplate的execute方法中的內部類TransactionCallback中的doInTransaction方法中使用。  public void make()  { TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager());  jtm.execute(new myClass1());  }  public class myClass1 implements TransactionCallback  {  public Object doInTransaction(TransactionStatus trans)  {  JdbcTemplate jdbc=new JdbcTemplate(dataSource);  jdbc.execute("insert into customer(customerName) values('b')");  jdbc.execute("insert into customer(customerName) values('b')");  return null;  } }  容器管理的事務處理  1六、在spring中怎樣配代碼的事務管理?  Datasouce  transactionManager  userDao要注入  Datasouce  transactionManager  經過例如如下類實現  TransactionTemplate  JdbcTemplate  1七、在spring中怎樣配容器的事務管理,相關的類有那些?  Datasouce  transactionManager  userDao要注入  Datasouce  Proxy代理  Target:userDao:代理對象(目標對象)  transactionAttributes(那些方法需要事務處理)  transactionManager(事務處理服務)  1八、假設spring與hibernate結合在一塊兒可以不需要hibernate.cfg.xml文件是否正確?  不需要  1九、spring+hibernate的配置文件裏的主要類有那些?怎樣配置?  在myeclipse中先增長spring環境再增長hibernate環境。  假設spring與hibernate結合在一塊兒可以不需要hibernate.cfg.xml文件是否正確?  spring+hibernate的配置文件裏的主要類有那些?怎樣配置?  dataSource  sessionFactory:hibernate.cfg.xml  transactionManager  userDao (extends HibernateDaoSupport)   sessionFactory  facade  proxy  sessionFactory  transactionManager  facade  20、spring+hibernate的代碼實現中,對於實現類必定繼承於一個類是那一個,它有什麼做用。  extends HibernateDaoSupport,可以節省代碼。  2一、怎樣配置spring+struts?   在struts-config.xml增長一個插件,經過它載入applicationContext.xml   在struts-config.xml改動action-mapping標記,詳細action交給了DelegateActionProxy   經過DelegateActionProxy進入一spring的環境。   在spring的applicationContext.xml增長<bean name="/login" class="" singleton="false"/>  2二、怎樣在web環境中配置applicationContext.xml文件?  <listener>  <listener-class>  org.springframework.web.context.ContextLoaderListener  </listener-class>  </listener>  或:  <servlet>  <servlet-name>context</servlet-name>  <servlet-class>  org.springframework.web.context.ContextLoaderServlet  </servlet-class>  <load-on-startup>1</load-on-startup>  </servlet>  經過例如如下方法取出applicationContext實例:  ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);  2四、Jsf和spring的差異?  jsf:是一種基於MVC模式的一個web層的處理,粒度較struts較細。  Spring:提供了通用的服務,ioc/di aop,關心的不僅web層,應當j2ee整體的一個服務,可以很是easy融合不一樣的技術struts hibernate ibatis ejb remote springJDBC springMVC  Ejb技術  一、weblogic的熱公佈  將ear、jar、war拷到C:\bea\user_projects\domains\mydomain\applications文件夾  weblogic會本身主動公佈  經過jbuilder將ear或jar或war部署到server上。  二、在ejb中實現one-to-many  一、在many中的將外鍵字段屬性刪除  二、在刪除many中的值時要將Collection轉化爲ArrayList,     並反向遍歷ArrayList,先刪除ArrayList中值,依據     ArrayList刪除反回的對象轉化爲many的遠程接口,經過     遠程接口將many刪除  三、ejb所用的技術:  Jndi:java naming directory inferface  Rmi: remote method invoke  四、實現ejb幾個接口,幾個類?  兩個接口一個類  extends EJBHome  經過jndi獲得home接口  create方法調用服務端的ejbCreate方法,在服務端產生一個EntityBean或SessionBean實例,向client返回一個遠程接口。  經過find方法在從服務端找到一個EntityBean實例,向client返回一個遠程接口。  extends EJBObject  在client經過rmi調用遠程服務端方法。  經過remove方法調用服務端的ejbRemove方法,將EnityBean刪除  implements SessionBean  在服務端實現真正的處理,實現核心業務  五、實現ejb相關的配置文件是什麼?  ejb-jar.xml:說明ejb的兩個接口一個類的。  weblogic-ejb-jar.xml:說明ejb的JNDI名  weblogic-rdbms-ejb.xml:o-rMapping實現數據庫表、字段與ejb屬性相應的關係。  ejb2.0的開發  一、用jbuilder集成環境  二、可以用eclipse開發,用源碼凝視說明,用ant運行xdoclet,xdoclet通  過源碼凝視本身主動生相關的配置、兩個接口一個類。  /**  * @stateLess  * @remote */  六、ejb的分類?差異  sessionBean  stateless:方法間不保留(1..1)  statefull:方法間保留(1..n)  entityBean:持久化  cmp:增刪改容器  bmp:增刪改手動jdbc  message driver bean  異處的消息處理  七、本地接口與遠程接口的差異。  EJBHome(在不一樣的進程或主機間調用,即不一樣的jvm)  EJBObjet  EJBLocalHome(在同一進程,同是jvm中)  EJBLocalObject 八、請求處理的過程? 會話  url  factory  經過jndi獲得一個home實例  在client經過home實例在服務端產生一個sessionBean,client返回一個接口  client經過遠程接口調用方法。  九、statefull的生命週期  不存在  setSessionContext  create--->ejbcreate  就緒:可以調用remove方法將sessionBean刪除、可以調用服務端的不論什麼方法。  ejbPassivate(從就緒到掛起)  ejbActivate(從掛起到就緒)  掛起 假設超時本身主動刪除  十、stateless的生命週期  不存在  setSessionContext  create--->ejbcreate  remove-->ejbremove  就緒  十一、entityBean的生命週期:  不存在  setEntityContext  create--->ejbcreate  入池  空房子,沒載入數據  ejbActivate  ejbPassivate  就緒  remove-->ejbRemove  載入了數據庫的數據  十二、EJB需直接實現它的業務接口或Home接口嗎,請簡述理由。  遠程接口和Home接口不需要直接實現,  他們的實現代碼是由server產生的,  程序執行中經過接口調用服務端產生的實例。  1三、EJB的激活機制  以Stateful Session Bean 爲例:其Cache大小決定了內存中可以同一時候存在的Bean實例的數量,依據MRU或NRU算法,實例在就緒和掛起狀態之間遷移。  就緒:從文件到內存,調用ejbActivate方法  掛起:從內存到文件,調用ejbPassivate方法  1四、EJB是基於哪些技術實現的?並說 出SessionBean和EntityBean的差異,  EJB包含Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JTA等技術實現.  SessionBean在J2EE應用程序中被用來完畢一些server端的業務操做。好比訪問數據庫、調用其它EJB組件.  EntityBean被用來表明應用系統中用到的數據.對於客戶機,  SessionBean是一種非持久性對象,它實現某些在server上執行的業務邏輯;  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 的優點卻在於他可以維持使用者的狀態.  1五、EJB的分類是什麼?各有什麼特色?  sessionBean:主機重起消失  Stateless:不記憶  StateFull:一個用戶多個操做可記憶  EntityBean:持久的數據庫中  Cmp:容器經過o/r mapping實現數據的持久化,不寫sql,實現方便,在速度慢。  Bmp:經過jdbc實現持久化,實現複雜,速度快  messageBean:提供異步處理。  十、EJB中基本的配置文件及做用是什麼?  EJB部署時需要三個文件:   Ejb-jar.xml:   將二個接口一個類打包在一塊兒,給EJB一個名稱。   說明當前的sessionBean的事務是由容器處理的。   其在所有的server上是通用的。   Weblogic-ejb-jar.xml:   將一個EJB名稱,相應一個JNDI,在僅對weblogicserver   Weblogic-rdbms-jar.xml:   實現o/r mapping的說明,至關於*.hbm.xml  1五、說出數據鏈接池的工做機制是什麼?  容器或相關的應用程序在其池中實例化多個邊接,當應用程序在使用時,容器直接將池中的鏈接取出應用程序直接使用,同一時候當應用程序使用完後,容器還可以將鏈接收回。從而提升系統的效率。  1六、EJB2.0有哪些內容?分別用在什麼場合? EJB2.0和EJB1.1的差異?  sessionBean:是一個過程  entityBean:是持久化,表明的是一個業務實體,有主鍵。  Struts+sessionBean+entityBean  EJB2.0增長的本地接口及本地home  EJB1.1中僅僅有遠程接口及遠程home  1八、EJB與JAVA BEAN的差異?  Java Bean 是可複用的組件,不論什麼一個Java類都可以是一個Bean。但一般狀況下,Java Bean是被容器所建立(如Tomcat)的,因此Java Bean具備例如如下特色:  一個無參的構造器  實現Serializable接口  私有屬性  公有get set方法  Enterprise Java Bean 是一個分佈式組件,其特色是  基於(RMI)技術的,可以被遠程訪問(跨進程、跨計算機)。  EJB必須被佈署在Webspere、WebLogic容器中,不能直接訪問ejb,而是經過容器訪問ejb,容器是ejb訪問的一個代理。  1九、EJB的角色和三個對象  六個角色組成,各自是  EJB組件開發人員(Enterprise Bean Provider):sun  應用組合者(Application Assembler)真正的開發商  部署者(Deployer):  EJB server提供者(EJB Server Provider):sun ibm 小機  EJB 容器提供者(EJB Container Provider):weblogic jboss  系統管理員(System Administrator):維護員  三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類  20、EJB容器提供的服務  主要提供  安全  事務管理  分佈式  jts  聲明週期管理  代碼產生  持續性管理  鎖和併發行管理等服務。  2一、EJB規範規定EJB中禁止的操做有哪些?  1.不能操做線程和線程API(線程API指非線程對象的方法如notify,wait等),  2.不能操做awt,  3.不能實現server功能,  4.不能對靜態屬生存取,  5.不能使用IO操做直接存取文件系統,  6.不能載入本地庫.,  7.不能將this做爲變量和返回,  8.不能循環調用。  2六、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  }  30、怎樣在weblogic中進行ssl配置與client的認證配置或說說j2ee(標準)進行ssl的配置  缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現SSL,需要配置server使用Enable SSL,配置其port,在產品模式下需要從CA獲取私有密鑰和數字證書,建立identity和trust keystore,裝載得到的密鑰和數字證書。可以配置此SSL鏈接是單向仍是雙向的。  31怎樣查看在weblogic中已經公佈的EJB?  可以使用管理控制檯,在它的Deployment中可以查看所有已公佈的EJB  WebService技術  一、什麼是Web Service?  Web Service就是爲了使原來各孤立的網站之間的信息能夠相互通訊、共享而提出的一種接口。  使用的技術:  HTTP、XML、SOAP(簡單對象訪問協議)、WSDL  長處:  跨平臺、跨語言、跨系統  SOAP協議:  SOAP協議(Simple Object Access Protocal,簡單對象訪問協議)  Tcp/iphttp->soap,soap 經過xml文件傳送信息  缺點:  (1).WebService使用了XML對數據封裝,會形成大量的數據要在網絡中傳輸。  (2).WebService規範沒有規定不論什麼與實現相關的細節,包含對象模型、編程語言,這一點,它不如CORBA。  二、什麼是Web容器?  實現J2EE規範中web協議的應用.該協議定義了web程序的執行時環境,包含:併發性,安全性,生命週期管理等等.  就是在tomcat、weblogic下執行jsp、servlet、struts  三、應用server有那些?  BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat  五、怎樣給weblogic指定大小的內存?  在啓動Weblogic的腳本中(位於所在Domian相應server文件夾下的startServerName),添加set MEM_ARGS=-Xms32m -Xmx200m,可以調整最小內存爲32M,最大200M  六、怎樣設定的weblogic的熱啓動模式(開發模式)與產品公佈模式?  可以在管理控制檯中改動相應server的啓動模式爲開發或產品模式之中的一個。或者改動服務的啓動文件或者commenv文件,添加set PRODUCTION_MODE=true。  七、怎樣啓動時不需輸入username與password?  改動服務啓動文件,添加 WLS_USER和WLS_PW項。也可以在boot.properties文件裏添加加密過的username和password.  八、在weblogic管理制臺中對一個應用域(或者說是一個站點,Domain)進行jms及ejb或鏈接池等相關信息進行配置後,實際保存在什麼文件裏?  保存在此Domain的config.xml文件裏,它是server的核心配置文件。  九、說說weblogic中一個Domain的缺省文件夾結構?比方要將一個簡單的helloWorld.jsp放入何文件夾下,然的在瀏覽器上就可打入 http://主機:port號//helloword.jsp就可以看到執行結果了? 又比方這當中用到了一個本身寫的javaBean該怎樣辦?  Domain 文件夾server文件夾applications,將應用文件夾放在此文件夾下將可以做爲應用訪問,假設是Web應用,應用文件夾需要知足Web應用文件夾要求,jsp文件可以直接放在應用文件夾中,Javabean需要放在應用文件夾的WEB-INF文件夾的classes文件夾中,設置server的缺省應用將可以實現在瀏覽器上無需輸入應用名。  十二、CORBA是什麼?用途是什麼?  CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫爲 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯爲聯編)和贊成應用程序間互操做的協議。其目的爲:用不一樣的程序設計語言書寫在不一樣的進程中執行,爲不一樣的操做系統開發。  1三、說說在weblogic中開發消息Bean時的persistent與non-persisten的區別  persistent方式的MDB可以保證消息傳遞的可靠性,也就是假設EJB容器出現故障而JMSserver依舊會將消息在此MDB可用的時候發送過來,而non-persistent方式的消息將被丟棄。  1四、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註冊,以使別的企業能夠發現的訪問協議的實現標準。  j2ee模式(MVC模式、Model1,Model2)  一、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(責任鏈模式)  工廠模式:工廠模式是一種經常被使用到的模式,依據工廠模式實現的類可以依據提供的數據生成一組類中某一個類的實例,一般這一組類有一個公共的抽象父類並且實現了一樣的方法,但是這些方法針對不一樣的數據進行了不一樣的操做。首先需要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後需要定義一個工廠類,工廠類可以依據條件生成不一樣的子類實例。當獲得子類的實例後,開發者可以調用基類中的方法而沒必要考慮究竟返回的是哪個子類的實例。  二、說說你所熟悉或據說過的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架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性。  三、解釋如下關於J2EE的名詞  (1)JNDI:Java Naming & Directory Interface,JAVA命名文件夾服務.主要提供的功能是:提供一個文件夾系統,讓其餘各地的應用程序在其上面留下本身的索引,從而知足高速查找和定位分佈式應用程序的功能.  (2)JMS:Java Message Service,JAVA消息服務.主要實現各個應用程序之間的通信.包含點對點和廣播.  (3)JTA:Java Transaction API,JAVA事務服務.提供各類分佈式事務服務.應用程序僅僅需調用其提供的接口就能夠.  (4)JAF: Java Action FrameWork,JAVA安全認證框架.提供一些安全控制方面的框架.讓開發人員經過各類部署和本身定義實現本身的個性安全控制策略.  (5)RMI:Remote Method Interface,遠程方法調用  四、介紹J2EE、J2SE、J2ME的差異。  J2ee:企業級,基本的application server的web及應用服務  J2se:標準版, 沒有application server  J2me:手機、pda的嵌入式開發  五、開發中都用到了那些設計模式?用在什麼場合?  每個模式都描寫敘述了一個在咱們的環境中不斷出現的問題,而後描寫敘述了該問題的解決方式的核心。經過這樣的方式,你可以無數次地使用那些已有的解決方式,無需在反覆一樣的工做。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。  六、J2EE是什麼?  J2EE 是Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型 (enterpriese application model).在這種一個應用系統中,可依照功能劃分爲不一樣的組件,這些組件又可在不一樣計算機上,並且處於對應的層次(tier)中。所屬層次包含客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。  七、J2EE是技術仍是平臺仍是框架?      J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。      J2EE也是一個框架,包含JDBC、JNDI、RMI、JMS、EJB、JTA等技術。  其它  一、當前主流的解析器有那些?  DOM:文檔對象模型(document object model)  SAX  二、Dom解析處理的過程是什麼?  package ss;  import javax.xml.parsers.DocumentBuilderFactory;  import javax.xml.parsers.DocumentBuilder;  import org.w3c.dom.Document;  import org.w3c.dom.Element;  import org.w3c.dom.Node;  import org.w3c.dom.Attr;  import org.w3c.dom.NodeList;  import javax.xml.transform.TransformerFactory;  import javax.xml.transform.Transformer;  import javax.xml.transform.dom.DOMSource;  import javax.xml.transform.stream.StreamResult;  public class XmlParser  {      public static void main(String[] args)              throws Exception      {          xmlwriter();      }      public static void xmlparser()              throws Exception      {          DocumentBuilderFactory xdf = DocumentBuilderFactory.newInstance();          DocumentBuilder db = xdf.newDocumentBuilder();          Document d = db.parse("C:\\A1\\customer.xml");          NodeList nl = d.getElementsByTagName("customer");          for (int i = 0; i < nl.getLength(); i++)          {              Element e = (Element) nl.item(i);              Attr a = e.getAttributeNode("customerID");              System.out.println(a.getNodeValue());              NodeList nl1 = e.getElementsByTagName("customerName");              System.out.println(nl1.item(0).getFirstChild().getNodeValue());          }      }      public static void xmlwriter() throws Exception      {          DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();          DocumentBuilder db=dbf.newDocumentBuilder();          Document d=db.parse("C:\\A1\\customer.xml");          NodeList nl=d.getElementsByTagName("customerName");          for(int i=0;i<nl.getLength();i++)          {             Element e=(Element) nl.item(i);             System.out.println(e.getFirstChild().getNodeValue());             e.getFirstChild().setNodeValue(e.getFirstChild().getNodeValue()+"111111111111111");          }          TransformerFactory tff=TransformerFactory.newInstance();          Transformer tf=tff.newTransformer();          tf.transform(new DOMSource(d),new StreamResult("c:\\aa.xml"));      }  }  DocumentBuilderFactory  DocumentBuiler db  Document d=db.parse(「詳細文件路徑」);  NodeList nl=d.getElementsByTagName(「節點名」)  三、Sax解析處理的過程是什麼?  import org.xml.sax.helpers.DefaultHandler;  import org.xml.sax.SAXException;  import org.xml.sax.Attributes;  import javax.xml.parsers.SAXParser;  import javax.xml.parsers.SAXParserFactory;  public class SaxParser extends DefaultHandler  {      public void characters(char[] ch, int start, int length)              throws SAXException      {          String temp=new String(ch,start,length);          System.out.println(temp);      }      public void endDocument()              throws SAXException      {          System.out.println("正在開始一個文檔");      }      public void endElement(String namespaceURI, String localName, String qName)              throws SAXException      {          System.out.println("結束元素"+qName);      }      public void startDocument()              throws SAXException      {          System.out.println("開始文檔");      }      public void startElement(String namespaceURI, String localName,                               String qName, Attributes atts)              throws SAXException      {           System.out.println("開始元素"+qName);      }      public static void main(String[] args) throws Exception      {          SAXParserFactory spf=SAXParserFactory.newInstance();          SAXParser sp=spf.newSAXParser();          sp.parse("C:\\A1\\customer.xml",new SaxParser());      }  }  四、Dom與Sax相比它們的優缺點是什麼?  DOM可以訪問不論什麼一個節點,要將全部資源全部載入,比較耗內存,可以改動。  SAX僅僅能順序讀,不可任意訪問,不可寫,但速度快。  Dom中的核心接口有那些?  Node  TextNode  Element   Arr  NodeList  Document  五、怎樣將Dom對象寫入到文件裏?  TransformerFactory  Transformer經過例如如下方法進行處理  Transformer(DOMSource(Document d),ResultStream(OutputStream o))  六、用jdom解析xml文件時怎樣解決中文問題?  類文件是utf-8,xml文件頭也應是utf-8 如<?xml version="1.0" encoding="UTF-8" ?>  七、XML文檔定義有幾種形式?它們之間有何本質差異?解析XML文檔有哪幾種方式?  a: 兩種形式 dtd  schema,  b: 本質差異:schema自己是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的),  c:有DOM,SAX,STAX等  DOM:處理大型文件時其性能降低的很厲害。這個問題是由DOM的樹結構所形成的,這樣的結構佔用的內存較多,而且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問  SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問  STAX:Streaming API for XML (StAX)  八、標準建模語言UML中的各類圖?  靜態圖  用例圖、類圖、對象圖、構件、部署,  動態圖(行爲圖)  活動圖,協做圖,狀態、時序  九、BS與CS的聯繫與差異。  C/S是Client/Server的縮寫。server一般採用高性能的PC、工做站或小型機,並採用大型數據庫系統,如Oracle、Sybase、Informix或 SQL Server。client需要安裝專用的client軟件。  B/S是Brower/Server的縮寫,客戶機上僅僅要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,server安裝Oracle、Sybase、Informix或 SQL Server等數據庫。在這樣的結構下,用戶界面全然經過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在server端實現。瀏覽器經過Web Server 同數據庫進行數據交互。  C/S 與 B/S 差異:  1.硬件環境不一樣:    C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門server提供鏈接和數據交換服務.    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等信息、流向的變化, 更像交易中心。  十、Uml的概念是什麼?基本的工具是什麼  Uml:統一建模語言  工具:Rational Rose  十一、Uml的概念中的九大圖形是什麼?最重的三個圖是什麼?各有什麼特色?  類圖  繼承  關聯:(1..n  n..1  n..n)  依賴  實現接口  彙集  組成  類圖的生命週期(開發的所有階段都使用)  總體設計  具體設計  開發:以類圖進行開發  測試  Use-case圖  關係  用例與用例  包括(include):必須調用  擴展(extends):可以調用也可以不調用  角色與角色的關係  泛化  用例與角色的關係:  用例與角色:通知  角色與用例:調用  元素  用例  角色  系統邊界  Use-case圖的生命週期  需求  整體設計  測試(單元測試、集成測試、系統測試、用戶驗收)  時序  元素  橫座標:對象  縱座標: 時間  做用  找類  找方法  驗證系統的正確  生命週期  具體設計  活動(流程圖)  做用  分析業務  構件圖  做用:說明組件與組件之間的關係,依賴關係  部署  做用:說明安裝軟件的主機之間的關係,系統執行時的性能的主要影響者。  協做  對象與對象之間的調用協做。  狀態  一個對象狀態在不一樣的動做下的變化。  對象  說明對象  1三、在類圖中怎樣找類?  找名詞                       下面爲在網上找的面試題  1 什麼是Java、Java二、JDK?JDK後面的1.三、1.4.2版本又是怎麼回事?    答:Java是一種通用的,併發的,強類型的,面向對象的編程語言(摘自Java規範第二版) JDK是Sun公司分發的免費Java開發工具,正式名稱爲J2SDK(Java2 Softw are Develop Kit)。  2 什麼是JRE/J2RE?    答:J2RE是Java2 Runtime Environment,   即Java執行環境,有時簡稱JRE。  假設你僅僅需要執行Java程序或Applet, 下載並安裝它就能夠。假設你要自行開發Java軟件,請下載JDK。在JDK中附帶有J2RE。    注意由於Microsoft對Java的支持不全然,請不要使用IE自帶的虛擬機來執行Applet,務必安裝一個J2RE或JDK。  3 學習Java用什麼工具比較好?   答:做者建議首先使用JDK+文本編輯器,這有助你理解下列幾個基礎概念:path,classpath,package並熟悉基本命令:javac和java。並且下載和你的JDK版本號一致的API幫助。    假設你不肯定類或函數的使用方法,請先查閱API而不是發貼求助。    當你熟悉Java以後,你可以考慮換一個IDE。很是多人推薦Jcreator,實際上Jcreator的功能還 是很是弱的。    做者推薦eclipse,下載網址http://www.eclipse.org ;。因eclispe是免費的.  4 學習Java有哪些好的參考書?    答:做者首先推薦Thinking in Java,中文名《Java編程思想》,有中文版。該書第一章介紹了很是多面向對象的編程思想,做爲新手應當認真閱讀。除此之外,O´relly出版社和Wrox出版社的書也不錯。做者本人不喜歡大陸做者的書。或許你認爲英文太難,但是網上大多數資料都是英文的。另外,你需要經常查閱API,而那也是英文的。  5 Java和C++哪一個更好?    答:這個問題是一個很是不恰當的問題。你應該問:Java和C++哪一個更適用於個人項目? 假設你不需要跨平臺,不需要分佈式,要強調程序的執行速度,C++更爲適用。反之?你應當考慮Java。  6 什麼是J2SE/J2EE/J2ME?      答:J2SE就是通常的Java。    J2ME是針對嵌入式設備的,比方Java手機,它有本身的SDK。而J2EE使用J2SE的SDK。    J2EE規範不少其它的是對J2EEserver的要求和開發者的約束。詳情見後繼《J2EE FAQ》。  7 我寫了第一個Java程序,應該怎樣編譯/執行?    答:首先請將程序保存爲xxx.java文件,    而後在dos窗體下使用javac xxx.java命令,你會發現該文件夾下多了一個xxx.class文件,再使用java xxx命令,你的java程序就開始執行了。  8 我照你說的作了,但是出現什麼"´javac´ 不是內部或外部命令,也不是可執行的程序或批處理文件。"。    答:你遇到了path問題。操做系統在必定的範圍(path)內搜索javac.exe,但是沒能找到。    請編輯你的操做系統環境變量,新增一個JAVA_HOME變量,設爲你JDK的安裝文件夾,    再編輯Path變量,加上一項 %JAVA_HOME%bin。    而後關掉並新開一個dos窗體,你就可以使用javac和java命令了。  9 環境變量怎麼設置?    答:請向身邊會設的人諮詢。 java剛開始學習的人必讀-經驗總結 這篇文章中比較具體的講到 jdk開發中系統設置環境變量 以及相關 server配置等開發環境配置。  10 javac xxx.java順利經過了,但是java xxx的時候顯示什麼"NoClassDefFoundError"    答:你遇到了classpath問題。java命令在必定的範圍(classpath)內搜索你要用的class文件,但是未能找到。    首先請確認你沒有錯敲成java xxx.class,    其次,檢查你的CLASSPATH環境變量,假設你設置了該變量又沒有包括.(表明當前文件夾)你就會遇到這個問題。請在你的CLASSPATH環境變量中增長一項. 。另    外參見15。  11 我在java xxx的時候顯示"Exception in thread "main" java.lang.NoSuchMethodError: main"。    答:首先,在你的程序中每個java文件有且僅僅能有一個public類,    這個類的類名必須和文件名稱的大寫和小寫全然同樣。    其次,在你要執行的類中有且僅僅能有一個public static void main(String[] args)方法,這種方法就是你的主程序。  12 package是什麼意思?怎麼用?    答:爲了惟一標識每個類並分組,java使用了package的概念。    每個類都有一個全名,好比String的全名是java.lang.String,當中java.lang是包名,String是短名。    這樣,假設你也定義了String,你可以把它放在mypackage中,    經過使用全名mypackage.String和java.lang.String來區分這兩個類。    同一時候,將邏輯上相關的類放在同一個包中,可以使程序結構更爲清楚。    你要作的就是在java文件開頭加一行"package mypackage;"。    注意包沒有嵌套或包括關係,A包和A.B包對java命令來講是並列的兩個包  13 我沒有聲明不論什麼package會怎麼樣?    答:你的類被以爲放在默認包中。這時全名和短名是一致的。  14 在一個類中怎麼使用其它類?    答:假設你使用java.lang包中的類,不用作不論什麼事。    假設你使用其它包中的類,使用import package1.class1; 或 import package2.*;    這裏.*表示引入這個包中的所有類。而後在程序中你可以使用其它類的短名。    假設短名有衝突,使用全名來區分。  15 我用了package的時候顯示"NoClassDefFoundError",但是我把所有package去掉的時候能正常執行。    答:將你的java文件按包名存放。    比方你的工做文件夾是/work,你的類是package1.class1,那麼將它存放爲/work/package1/class1.java。    假設沒有聲明包,那麼直接放在/work下。    在/work下運行javac package1/class1.java,再運行java package1.class1,你會發現    一切正常。    另外,你可以考慮開始使用IDE。  16 我想把java編譯成exe文件,該怎麼作?    答:JDK僅僅能將java源文件編譯爲class文件。    class文件是一種跨平臺的字節碼,必須依賴平臺相關的JRE來執行。Java以此來實現跨平臺,有些開發工具可以將java文件編譯爲exe文件。做者反對這樣的作法,因爲這樣就取消了跨平臺性。    假設你確信你的軟件僅僅在Windows平臺上執行,你可以考慮使用C++/C#來編程。  17 我在編譯的時候遇到什麼"deprecated API",是什麼意思?    答:所謂deprecated是指已經?時,但是爲了向前兼容起見仍然保留的方法?這些方法可能會在之後取消支持。你應當改用較新的方法。    通常在API裏面會說明你應當用什麼方法來取代之。  Java設置環境變量  18 我怎麼給java程序加啓動參數,就像dir /p/w那樣?    答:還記得public static void main(String[] args)嗎?這裏的args就是你的啓動參數。    在執行時你輸入java package1.class1 -arg1 -arg2,args中就會有兩個String,一個是arg1,還有一個是arg2。 19 我怎麼從鍵盤輸入一個int/double/字符串?    答:java的I/O操做比C++要複雜一點。假設要從鍵盤輸入,例子代碼例如如下:    BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) ) ;    String s = cin.readLine();    這樣你就得到了一個字符串,假設你需要數字的話再加上:    int n = Integer.parseInt( s ); 或者 double d = Double.parseDouble( s );  20 我怎麼輸出一個int/double/字符串?    答:在程序開始寫:    PrintWriter cout = new PrintWriter( System.out ); 需要時寫:cout.print(n); 或者 out.println("hello")等等。  21 我發現有些書上直接用System.in和System.out輸入輸出,比你要簡單得多。    答:java使用unicode,是雙字節。而System.in和System.out是單字節的stream。    假設你要輸入輸出雙字節文字比方中文,請使用做者的作法。  22 我怎麼從文件輸入一個int/double/字符串?    答:相似於從鍵盤輸入,僅僅只是換成    BufferedReader fin = new BufferedReader( new FileReader(" myFileName " ) );    PrintWriter fout = new PrintWriter( new FileWriter(" myFileName " ) );    另外假設你還沒下載API,請開始下載並閱讀java.io包中的內容。  23 我想讀寫文件的指定位置,該怎麼辦?    答:你確定沒有認真看API。java.io.RandomAccessFile可以知足你的需要。  24 怎麼推斷要讀的文件已經到了盡頭?    答:你確定沒有認真看API。在Reaer的read方法中明白說明返回-1表示流的結尾。  25 java裏面怎麼定義宏?    答:java不支持宏,因爲宏代換不能保證類型安全。    假設你需要定義常量,可以將它定義爲某個類的static final成員。參見26和30。  26 java裏面無法用const。    答:你可以用finalkeyword。好比 final int m = 9。被聲明爲final的變量不能被再次賦值?final也可以用於聲明方法或類,被聲明爲final的方法或類不能被繼承 。    注意const是java的保留字以備擴充。  27 java裏面也不能用goto。    答:甚至在面向過程的語言中你也可以全然不用goto。請檢查你的程序流程是否合理。    假設你需要從多層循環中迅速跳出,java加強了(和C++相比)break和continue的功能,支持label。    好比:    outer :    while( ... )    {    inner :    for( ... )    {    ... break inner; ...    ... continue outer; ...    }    }    和const同樣,goto也是java的保留字以備擴充。  28 java裏面能不能重載操做符?    答:不能。String的+號是惟一一個內置的重載操做符。你可以經過定義接口和方法來實現類    似功能。  29 我new了一個對象,但是無法delete掉它。    答:java有本身主動內存回收機制,即所謂Garbarge Collector。你不再用操心指針錯誤  30 我想知道爲何main方法必須被聲明爲public static?    答:聲明爲public是爲了這種方法可以被外部調用,詳情見面向對象篇37。    static是爲了將某個成員變量/方法關聯到類(class)而非實例(instance)。    你不需要建立一個對象就可以直接使用這個類的static成員,    在A類中調用B類的static成員可以使用B.staticMember的寫法。    注意一個類的static成員變量是惟一的,被所有該類對象所共享的。  31 throw和throws有什麼不一樣?    答:throws用於聲明一個方法會拋出哪些異常。而throw是在方法體中實際運行拋出異常    的動做。    假設你在方法中throw一個異常,卻沒有在方法聲明中聲明之,編譯器會報錯。    注意Error和RuntimeException的子類是例外,無需特別聲明。  32 什麼是異常?    答:異常最先在Ada語言中引入,用於在程序中動態處理錯誤並恢復。    你可以在方法中攔截底層異常並處理之,也可以拋給更高層的模塊去處理。    你也可以拋出本身的異常指示發生了某些不正常狀況。常見的攔截處理代碼例如如下:    try    {    ...... //下面是可能發生異常的代碼    ...... //異常被拋出,運行流程中斷並轉向攔截代碼。    ......    }    catch(Exception1 e) //假設Exception1是Exception2的子類並要作特別處理,應排在    前面    {    //發生Exception1時被該段攔截    }    catch(Exception2 e)    {    //發生Exception2時被該段攔截    }    finally //這是可選的    {    //無論異常是否發生,均運行此段代碼    }  33 final和finally有什麼不一樣?    答:final請見26。finally用於異常機制,參見32。  34 extends和implements有什麼不一樣?    答:extends用於(單)繼承一個類(class),而implements用於實現一個接口(interface)。    interface的引入是爲了部分地提供多繼承的功能。    在interface中僅僅需聲明方法頭,而將方法體留給實現的class來作。    這些實現的class的實例全然可以看成interface的實例來對待。    有趣的是在interface之間也可以聲明爲extends(單繼承)的關係。  35 java怎麼實現多繼承?    答:java不支持顯式的多繼承。    因爲在顯式多繼承的語言好比c++中,會出現子類被迫聲明祖先虛基類構造函數的問題,    而這是違反面向對象的封裝性原則的。    java提供了interface和implementskeyword來部分地實現多繼承。參見34。  36 abstract是什麼?    答:被聲明爲abstract的方法無需給出方法體,留給子類來實現。    而假設一個類中有abstract方法,那麼這個類也必須聲明爲abstract。    被聲明爲abstract的類沒法實例化,雖然它可以定義構造方法供子類使用。  37 public,protected,private有什麼不一樣?    答:這些keyword用於聲明類和成員的可見性。    public成員可以被不論什麼類訪問,    protected成員限於本身和子類訪問,    private成員限於本身訪問。    Java還提供了第四種的默承認見性,當沒有不論什麼public,protected,private修飾時,成員是包內可見    類可以用public或默認來修飾。  38 Override和Overload有什麼不一樣?    答:Override是指父類和子類之間方法的繼承關係,這些方法有着一樣的名稱和參數類型。    Overload是指同一個類中不一樣方法(可以在子類也可以在父類中定義)間的關係,這些方法有着一樣的名稱和不一樣的參數類型。  39 我繼承了一個方法,但現在我想調用在父類中定義的方法。    答:用super.xxx()可以在子類中調用父類方法。  40 我想在子類的構造方法中調用父類的構造方法,該怎麼辦?    答:在子類構造方法的第一行調用super(...)就能夠。  41 我在同一個類中定義了好幾個構造方法並且想在一個構造方法中調用還有一個。    答:在構造方法第一行調用this(...)。  42 我未定義構造方法會怎麼樣?    答:本身主動得到一個無參數的構造方法。  43 我調用無參數的構造方法失敗了。    答:假設你至少定義了一個構造方法,就再也不有本身主動提供的無參數的構造方法了。    你需要顯式定義一個無參數的構造方法。  44 我該怎麼定義相似於C++中的析構方法(destructor)?    答:提供一個void finalize()方法。在Garbarge Collector回收該對象時會調用該方法。    注意實際上你很是難推斷一個對象會在何時被回收。做者從未感到需要提供該方法。  45 我想將一個父類對象轉換成一個子類對象該怎麼作?    答:強制類型轉換。如    public void meth(A a)    {    B b = (B)a;    }    假設a實際上並不是B的實例,會拋出ClassCastException。因此請確保a確實是B的實例 .  46 事實上我不肯定a是否是B的實例,能不能分狀況處理?    答:可以使用instanceof操做符。好比    if( a instanceof B )    {    B b = (B)a;    }    else    {    ...    }  47 我在方法裏改動了一個對象的值,但是退出方法後我發現這個對象的值沒變!    答:很是可能你把傳入參數重賦了一個新對象,比例如如下列代碼就會形成這樣的錯誤:    public void fun1(A a) //a是局部參數,指向了一個外在對象。    {    a = new A(); //a指向了一個新對象,和外在對象脫鉤了。假設你要讓a做爲傳    出變    量,不要寫這一句。    a.setAttr(attr);//改動了新對象的值,外在對象沒有被改動。    }    基本類型也會出現這樣的狀況。好比:    public void fun2(int a)    {    a = 10;//僅僅做用於本方法,外面的變量不會變化。    }  48 java能動態分配數組嗎?    答:可以。好比int n = 3; Language[] myLanguages = new Language[n];  49 我怎麼知道數組的長度?    答:用length屬性。如上例中的 myLanguages.length 就爲 3。  50 我還想讓數組的長度能本身主動改變,能夠添加/刪除元素。    答:用順序表--java.util.List接口。    你可以選擇用ArrayList或是LinkedList,前者是數組實現,後者是鏈表實現。    好比: List list = new ArrayList(); 或是 List list = new LinkedList(); 。  51 什麼是鏈表?爲何要有兩種實現?    答:請補習數據結構。  52 我想用隊列/棧。    答:用java.util.LinkedList。  53 我但願不要有反覆的元素。    答:用集合--java.util.Set接口。好比:Set set = new HashSet()。  54 我想遍歷集合/Map。    答:用java.util.Iterator。參見API。  55 我還要能夠排序。    答:用java.util.TreeSet。好比:Set set = new TreeSet()。放進去的元素會本身主動排序。    你需要爲元素實現Comparable接口,還可能需要提供equals()方法,compareTo()方法,hashCode()方法。  56 但是我想給數組排序。    答:java.util.Arrays類包括了sort等有用方法。  57 我想按不一樣方法排序。    答:爲每種方法定義一個實現了接口Comparator的類並和Arrays綜合運用。  58 Map有什麼用?    答:存儲key-value的keyword-值對,你可以經過keyword來高速存取對應的值。  59 set方法沒問題,但是get方法返回的是Object。    答:強制類型轉換成你需要的類型。參見45。  60 我要得到一個隨機數。    答:使用java.util.Random類。  61 我比較兩個String老是false,但是它們明明都是"abc" !    答:比較String必定要使用equals或equalsIgnoreCase方法,不要使用 == !    ==比較的是兩個引用(變量)是否指向了同一個對象,而不是比較其內容。  個人一個客戶不知道該選用Struts仍是JSF。就像你預料的那樣,我通常會問:這2中框架之間有什麼差異?固然,除了個人這個客戶外很是多人都面臨這種選擇。        總的來講,我建議在新項目中優先考慮JSF。儘管常常有一些商業上的因素迫使咱們爲現有的項目選擇了Struts,而且那些解決方式還有待考驗,但是,讓咱們面對一個事實:JSF比Struts好多了。        如下是我選擇JSF而不選Struts的十大理由:        1.Components(組件)    2.Render Kits    3.Renderers    4.Value Binding Expressions(值綁定表達式)    5.Event Model(事件模型)    6.Extensibility(可擴展性)    7.Managed Beans(Dependency Injection 依賴注入)    8.POJO Action Methods    9.JSF is the standard Java-based web app framework (JSF是java web應用程序的標準框架)    10.There's only one Struts(僅僅有一個Struts)        10.There's only one Struts(僅僅有一個Struts)       Struts 是一個開源產品,然而JSF是一個標準。這個細節常常被新的JSF學習者忽略,事實上這是顯而易見的,因爲咱們有多個JSF的實現。儘管JSF還很是不成熟,但是咱們已經有了2個優秀的JSF實現可以選擇:Sun的參考實現和Apache的MyFaces。還有一方面,咱們僅僅有一個Struts。    9.JSF is the standard(JSF是標準)        J2EE 5.0要提供一個JSF的實現,這代表JSF不久將會無處不在。這可能與你無關,但是和工具供應商密切相關。現在大概有50個java web應用程序框架,工具供應商不會情願去支持一個特別的框架,但是他們會絕不猶豫的去支持一個標準。而且不止供應商,開源項目也會迅速的彙集在JSF的四周,爭先恐後的去實現一樣的功能。比方說,直到咱們去實現本質上和Shale的Tapestry差點兒相同的視圖的時候,我才知道Facalets。(從長遠來看,我相信這樣的冗餘是件好事,會給咱們帶來優勢)    8.POJO Action Methods        Struts的行爲是和 Struts的API綁定在一塊兒的,但是JSF的行爲方法可以在POJPO中實現。這意味着你不用在表單和模型對象之間實現一個多餘的行爲層。順便說一下,在JSF裏面沒有行爲對象,行爲在模型對象中實現。但是也請注意一點:假設你願意你也可以生成與JSF獨立的行爲對象。在Struts裏面,你有 Form Bean和Action Bean。Form Bean包括數據而Action Bean包括邏輯。OO狂會想去合併前2者,在Struts你辦不到。但是在JSF中,你可以分開數據和邏輯,也可以合併到一個對象中,一切由你決定。    7.Managed Beans(Dependency Injection 依賴注入)        和Spring同樣,JSF也使用了依賴注入(DJ)(或控制反轉(IoC))去實例化和初始化Bean。Struts的確爲你生成了Form Bean和Action Bean,但是JSF可以爲你生成各類各樣的Managed Bean。    6.Extensibility(可擴展性)        這個很是重要。JSF有6個對象實現了這個框架的大部分功能,而且你可以很是easy的用你本身的實現取代原有實現。比方你想加一個本身定義參數在JSF表達式語言裏面,或是加入一個本身的視圖控制器以便於區分組件和HTML。其實Shale實現了上面的功能。假設你尚未知足,JSF提供了幾個地方你可以輕鬆的控制JSF的生命週期。Shale給你的會不少其它。    5.Event Model(事件模型)        JSF的事件模型使你可以對值改變,動做,JSF生命週期階段變換等做出反應。在JSF1.1中,那些事件都是在server端處理的,這確定是一個缺陷,好在JSF2.0計劃支持client事件,拭目以待吧。    4.Value Binding Expressions(值綁定表達式)        在Struts 中,你負責把數據從Form傳遞到模型對象。你實現的Action的execute方法是把Form做爲一個參數。而後你再手動的把數據從Form Bean裏面取出放到模型對象裏面。你要爲應用裏面的每個Form作這些事情,然而在JSF裏面,你僅僅需像這樣:#{model.property} 就夠了,其它的交給JSF來處理。    3.Renderers        你有看過Struts的標籤的源碼嗎?它直接生成HTML。JSF組件標籤什麼都不生成,它和server上的一對component-renderer相應。Component維護組件狀態,rendered負責得到視圖。重點是renderers是可插拔的,即你可以依據本身需求實現而後替代掉默認實現。比方說我在NFJS上面的Felix談話中舉例說明了怎麼去實現一個本身定義的label renderer。你僅僅需要配置你的renderer,JSF就會本身主動在你的應用程序裏面使用他。    2.Render Kits        在幾年前我之前有份Struts諮詢工做,咱們必須同一時候支持瀏覽器和無線設備,很痛苦。但是用JSF來完畢那個任務很easy,因爲你可以生成你本身的render kit-爲一種特定顯示技術的renderers的集合-而後配置到JSF裏面。    1.Components(組件)        組件是Struts和JSF之間最大的差異。就像Swing同樣,JSF提供豐富的底層構件去開發組件而後加入到標準的組件集。那些底層構件讓你很是easy的生成本身的組件並且和別人共享。現在咱們處處都能看到本身定義組件跳出來,比方說Oracle的ADF和MyFaces,二者都提供了豐富的組件集,就像 javascript日曆,tree等等。固然,組件僅僅是一部分。典型的是,組件都和一個獨立的renderer相應,這給咱們帶來了真正的優勢(看第3 條)。但是和JSF中的很是多東西同樣,你不必定要墨守成規。僅僅要你願意,你可以實現render本身的組件,儘管這樣你會失去給組件加入別的 renderer的能力。  java版本號的escape和unescape函數  大 | 中 | 小   [2006/02/27 15:33 | 分類: Java,J2EE | by NetFetch ]  Ad0.cn整理  java.net.URLDecoder / java.net.URLEncoder  相應:javascript的 encodeURI/decodeURI 和encodeURIComponent/decodeURIComponent  java版本號的escape和unescape函數  相應:javascript 的escape/unescape  http://blog.ad0.cn  class EscapeUnescape{    public static String escape (String src) {      int i;      char j;      StringBuffer tmp = new StringBuffer();      tmp.ensureCapacity(src.length()*6);      for (i=0;i      j = src.charAt(i);        if(Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))          tmp.append(j);        else          if(j<256){            tmp.append(\"%\");            if(j<16)              tmp.append(\"0\");            tmp.append(Integer.toString(j,16));          }           else{            tmp.append(\"%u\");            tmp.append(Integer.toString(j,16));          }      }      return tmp.toString();    }       public static String unescape (String src) {      StringBuffer tmp = new StringBuffer();      tmp.ensureCapacity(src.length());      int lastPos=0,pos=0;      char ch;      while (lastPos      pos = src.indexOf(\"%\",lastPos);        if(pos == lastPos)  {          if(src.charAt(pos+1)=='u') {            ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);            tmp.append(ch);            lastPos = pos+6;          }          else{            ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);            tmp.append(ch);            lastPos = pos+3;          }        }        else{          if(pos == -1){            tmp.append(src.substring(lastPos));            lastPos=src.length();          }          else{            tmp.append(src.substring(lastPos,pos));            lastPos=pos;          }        }      }      return tmp.toString();    }       public static void main(String[] args) {      String tmp=\"~!@#$%^&*()_+|=-,./?><;'][{}\"\";      System.out.println(\"testing escape : \"+tmp);      tmp =escape(tmp);      System.out.println(tmp);      System.out.println(\"testing unescape :\"+tmp);      System.out.println(unescape(tmp));    }  }  Struts+Spring+Hibernate練習(完整)  大 | 中 | 小   [2006/03/04 17:18 | 分類: Java,J2EE | by NetFetch ]  Struts+Spring+Hibernate練習(完整)  不少其它 Struts+Spring+Hibernate 相關的文章:  選擇JSF不選Struts的十大理由  Struts+Spring+Hibernate練習(完整)  struts+spring+hibernate之間的關係與區別(轉)  史上最簡單的struts+spring+hibernate配置實例(修訂版)  Struts+Spring+Hibernate練習 工具:      Eclipse3.一、MyEclipse4.0三、Tomcat5.5.九、Properties Editor插件、MySql4.1.13  新建project:名稱爲 login  建立Struts框架  建立 index.jsp,添加一連接指向 login.jsp  按下Ctrl + N,建立 login.jsp、LoginAction,使用MyEclipse的嚮導就可以了,記得選對正確的版本號  在ActionForm配置頁中選擇類型爲動態Form,並繼承於DynaValidatorForm,新增兩個屬性:username、password,在建立jsp文件打上鉤,將路徑改成/login.jsp,而後下一步,改LoginAction的Input source改成/login.jsp,點擊完畢  按下Ctrl + N 建立一個forwards,記得選對正確的版本號  name 輸入 indexGo  路徑選擇 /index.jsp  配置validator  先加入Struts插件,使用嚮導  Plugin class : org.apache.struts.validator.ValidatorPlugIn  Property : pathnames  Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml  這裏需要兩個xml文件  現在建立「validation.xml」 文件  在這裏說明一點,我使用MyEclipse建立的Struts框架中缺乏了validator-rules.xml文件,需要動複製到WEB-INF文件夾中  此文件可以到http://struts.apache.org/下載  文件內容例如如下:  編輯資源文件「ApplicationResources.properties」  添加下面內容  prompt.username=User Name  prompt.password=User Password  errors.required={0} is required.  再建立中文件資源文件「ApplicationResources_zh_CN.properties」  添加下面內容  prompt.username=用戶名稱  prompt.password=登錄password  errors.required={0} 必需填寫!  改動struts-config.xml文件  在下面位置添加綠色字體部份            attribute="loginForm"        input="/login.jsp"        name="loginForm"        path="/login"        scope="request"        validate="true"        type="com.test.struts.action.LoginAction" />  這裏說明提交的數據必需通過驗證,而驗證則是經過validator框架進行的。  改動LoginAction.java文件的execute方法,內容例如如下  public ActionForward execute(    ActionMapping mapping,    ActionForm form,    HttpServletRequest request,    HttpServletResponse response) {    DynaValidatorForm loginForm = (DynaValidatorForm) form;    String username=loginForm.getString("username");    String password=loginForm.getString("password");    if(username.equals("test")||password.equals("test")){     return mapping.findForward("indexGo");    }else{     return mapping.getInputForward();    }  }  現在再改動一下login.jsp  添加下面綠色字體部份:  當中charset=UTF-8 是使用UTF-8的字符編碼,這也是爲了支持國際化而使用的。  好了,現在可以啓動Tomcat進行測試了  http://localhost/login/ 這裏說明一下,個人Tomcat已經裝port號改成80了,因此就沒必要使用http://localhost:8080/login/這個方案了。  假設不輸入不論什麼數據而直接提交表單的話就可以看到效果了。  好了,假設沒有什麼問題的話就繼續往下看吧,假設有問題的話就得往上看了^_^  現在建立Spring框架了,在這裏我將Spring全部的包全部載入進去,因爲我還不知道詳細用到哪些類,全部加進去方便點  單選框選第二個,這種話所有的類庫和標籤等都將複製到項目中去,這樣方便之後的佈署  下一步後是建立配置文件,將文件放到「WebRoot/WEB-INF」文件夾下,文件名爲「applicationContext.xml」  配置struts-config.xml文件,加入(spring)的插件     改動LoginAction配置  原:        attribute="loginForm"        input="/login.jsp"        name="loginForm"        path="/login"        scope="request"        validate="true"        type="com.test.struts.action.LoginAction" />  改成:        attribute="loginForm"        input="/login.jsp"        name="loginForm"        path="/login"        scope="request"        validate="true"        type="org.springframework.web.struts.DelegatingActionProxy" />  綠色字體部份爲改動內容  這裏將使用spring的代理器來對Action進行控制  當提交到/login.do是將控制權交給了spring,而後由spring來決定是否轉回到struts的Action  現在來配置spring  綠色字體是關於轉交控制權的配置內容  屬性singleton="false",指明瞭Action 的實例獲取方式爲每次又一次建立。攻克了Struts中使人詬病的線程安全問題(Struts中,由一個Action實例處理所有的請求,這就致使了類公用資源在併發請求中的線程同步問題。)(摘自spring開發指南)  這時假設你要進行測試也是可以的,只是爲了省點時間就不進行測試了。     創建數據庫在 這裏我使用的是mysql4.1.13  Create TABLE `user` (    `ID` int(11) NOT NULL auto_increment,    `USERNAME` varchar(50) NOT NULL default '',    `PASSWORD` varchar(50) NOT NULL default '',    PRIMARY KEY  (`ID`)  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;  加入記錄 insert into user (USERNAME,PASSWORD) values ('test','test')  建立Hibernate框架  在配置界面中配置數據庫的鏈接部份,重要的是點擊連接將jdbc複製到lib文件夾中  使用MyEclipse的數據Database Explorer工具建立User.hmb.xml、AbstractUser.java、User.java映射文件  建立完畢後可以將本身主動生成的hibernate.cfg.xml刪除  建立UserDAO.java、UserDAOImp.java  UserDAO.java  public interface UserDAO {     public abstract boolean isValidUser(String username, String password);  }  UserDAOImp.java  import java.util.List;  import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  import com.test.Hibernate.SessionFactory;  public class UserDAOImp extends HibernateDaoSupport implements UserDAO {      private SessionFactory sessionFactory;      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;      }  }  改動LoginAction.java文件,使用userDao的方法來進行用戶驗證  package com.test.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 org.apache.struts.validator.DynaValidatorForm;  import com.test.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) {    DynaValidatorForm loginForm = (DynaValidatorForm) form;    // TODO Auto-generated method stub    String username = (String) loginForm.get("username");    String password = (String) loginForm.get("password");    loginForm.set("password", null);    if (userDAO.isValidUser(username,password)) {     return mapping.findForward("indexGo");    } else {     return mapping.getInputForward();    }  }  }  綠色字體爲改動部份  現在剩下最後的spring配置了        com.mysql.jdbc.Driver         jdbc:mysql://localhost/test          root          root         com/test/Hibernate/User.hbm.xml           org.hibernate.dialect.MySQLDialect      true           PROPAGATION_REQUIRED      PROPAGATION_REQUIRED,readOnly      PROPAGATION_REQUIRED,readOnly  現在可以進行測試了!  在編寫代碼有配置內容時必定要注意 hibernate 和 hibernate3 ,這兩個包的名字就僅僅差一個字,千萬不要有錯,不然找錯誤可是很是難的。   問題描寫敘述:    爲管理崗位業務培訓信息,創建3個表:    S (S#,SN,SD,SA) S#,SN,SD,SA 分別表明學號、學員姓名、所屬單位、學員年齡    C (C#,CN ) C#,CN 分別表明課程編號、課程名稱    SC ( S#,C#,G ) S#,C#,G 分別表明學號、所選修的課程編號、學習成績    1. 使用標準SQL嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名    --實現代碼:    Select SN,SD FROM S Where [S#] IN( Select [S#] FROM C,SC Where C.[C#]=SC.[C#] AND CN=N'稅收基礎')     2. 使用標準SQL嵌套語句查詢選修課程編號爲’C2’的學員姓名和所屬單位    --實現代碼:    Select S.SN,S.SD FROM S,SC Where S.[S#]=SC.[S#] AND SC.[C#]='C2'    3. 使用標準SQL嵌套語句查詢不選修課程編號爲’C5’的學員姓名和所屬單位    --實現代碼:    Select SN,SD FROM S Where [S#] NOT IN( Select [S#] FROM SC   Where [C#]='C5')    4. 使用標準SQL嵌套語句查詢選修全部課程的學員姓名和所屬單位  http://www.ad0.cn/netfetch/    --實現代碼:    Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC RIGHT JOIN   C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#]))    5. 查詢選修了課程的學員人數    --實現代碼:    Select 學員人數=COUNT(DISTINCT [S#]) FROM SC    6. 查詢選修課程超過5門的學員學號和所屬單位    --實現代碼:    Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5)        題目2    問題描寫敘述:    已知關係模式:    S (SNO,SNAME) 學生關係。SNO 爲學號,SNAME 爲姓名    C (CNO,CNAME,CTEACHER) 課程關係。CNO 爲課程號,CNAME 爲課程名,CTEACHER 爲任課教師    SC(SNO,CNO,SCGRADE) 選課關係。SCGRADE 爲成績      1. 找出沒有選修過「李明」老師講授課程的所有學生姓名    --實現代碼:    Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO  AND CNAME='李明' AND SC.SNO=S.SNO)    2. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績    --實現代碼:    Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)  FROM S,SC,(   Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME    3. 列出既學過「1」號課程,又學過「2」號課程的所有學生姓名    --實現代碼:    Select S.SNO,S.SNAME FROM S,( Select SC.SNO FROM SC,C Where SC.CNO=C.CNO AND C.CNAME IN('1','2') GROUP BY SNO HAVING COUNT(DISTINCT CNO)=2 )SC Where S.SNO=SC.SNO    4. 列出「1」號課成績比「2」號同窗該門課成績高的所有學生的學號    --實現代碼:    Select S.SNO,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO    5. 列出「1」號課成績比「2」號課成績高的所有學生的學號及其「1」號課和「2」號課的成績    --實現代碼:    Select S.SNO,S.SNAME,SC.[1號課成績],SC.[2號課成績] FROM S,(   Select SC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADE FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE   )SC Where S.SNO=SC.SNO 
相關文章
相關標籤/搜索