三. html&JavaScript&ajax 部分 1. 判斷第二個日期比第一個日期大 如何用腳本判斷用戶輸入的的字符串是下面的時間格式2004-11-21必需要保證用戶 的輸入是此格式, 而且是時間, 好比說月份不大於12等等, 另外我須要用戶輸入兩個, 並 且後一個要比前一個晚, 只容許用JAVASCRIPT, 請詳細幫助做答, , //這裏可用正則表達式判斷提早判斷一下格式, 而後按下提取各時間字段內容 <script type="text/javascript"> window.onload = function () { //這麼寫是爲了實現js 代碼與html 代碼的分離, 當我修改js 時, 不能影響html 代 碼。 document.getElementById("frm1").onsubmit = function () { vard1 = this.d1.value; vard2 = this.d2.value; if (!verifyDate(d1)) { alert("第一個日期格式不對"); return false; } if (!verifyDate(d2)) { alert("第二個日期格式不對"); return false; } if (!compareDate(d1, d2)) { alert("第二個日期比第一日期小"); return false; } }; } functioncompareDate(d1, d2) { var arrayD1 = d1.split("-"); var date1 = new Date(arrayD1[0], arrayD1[1], arrayD1[2]); var arrayD2 = d2.split("-"); var date2 = new Date(arrayD2[0], arrayD2[1], arrayD2[2]); if (date1 > date2) return false; return true; } functionverifyDate(d) { vardatePattern = /^\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])$/; returndatePattern.test(d); } </script> <form id="frm1" action="xxx.html"> <input type="text" name="d1" /> <input type="text" name="d2" /> <input type="submit"/> </form> 2. 用table 顯示n 條記錄, 每3 行換一次顏色, 即1, 2, 3 用紅色字體, 4, 5, 6 用綠色字體, 7, 8, 9 用紅顏色字體。 <body> <table id="tbl"> <tr><td>1</td></tr> <tr><td>2</td></tr> <tr><td>3</td></tr> <tr><td>4</td></tr> <tr><td>5</td></tr> <tr><td>6</td></tr> <tr><td>7</td></tr> <tr><td>8</td></tr> <tr><td>9</td></tr> <tr><td>10</td></tr> </table> </body> <script type="text/javascript"> window.onload = function () { var tbl = document.getElementById("tbl"); rows = tbl.getElementsByTagName("tr"); for (i = 0; i < rows.length; i++) { var j = parseInt(i / 3); if (j % 2 == 0) rows[i].style.backgroundColor = "#f00"; else rows[i].style.backgroundColor = "#0f0"; } } </script> 三、HTML 的 form 提交以前如何驗證數值文本框的內容所有爲數字?不然的話提示用戶並終止提交? <form onsubmit=’return chkForm(this)’> <input type="text" name="d1"/> <input type="submit"/> </form> <script type="text/javascript" /> function chkForm(this) { var value = thist.d1.value; var len = value.length; for (vari = 0; i < len; i++) { if (value.charAt(i) > "9" || value.charAt(i) < "0") { alert("含有非數字字符"); returnfalse; } } return true; } </script> 4、請寫出用於校驗HTML 文本框中輸入的內容所有爲數字的javascript 代碼 <input type="text" id="d1" onblur=" chkNumber(this)"/> <script type="text/javascript" /> function chkNumber(eleText) { var value = eleText.value; var len = value.length; for (vari = 0; i < len; i++) { if (value.charAt(i) > "9" || value.charAt(i) < "0") { alert("含有非數字字符"); eleText.focus(); break; } } } </script> 除了寫完代碼, 還應該在網頁上寫出實驗步驟和在代碼中加入實現思路, 讓面試官一看就明 白你的意圖和檢查你的結果。 5、說說你用過那些ajax 技術和框架, 說說它們的區別 四. Java web 部分 1、Tomcat 的優化經驗 答:去掉對web.xml 的監視, 把jsp 提早編輯成Servlet。 有富餘物理內存的狀況, 加大tomcat 使用的jvm 的內存 2、HTTP 請求的GET 與POST 方式的區別 答:servlet 有良好的生存期的定義, 包括加載和實例化、初始化、處理請求以及服務結束。 這個生存期由javax.servlet.Servlet 接口的init,service 和destroy 方法表達。 3、解釋一下什麼是servlet; 答:servlet 有良好的生存期的定義, 包括加載和實例化、初始化、處理請求以及服務結束。 這個生存期由javax.servlet.Servlet 接口的init,service 和destroy 方法表達。 四、說一說Servlet 的生命週期? 答:servlet 有良好的生存期的定義, 包括加載和實例化、初始化、處理請求以及服務結束。 這個生存期由javax.servlet.Servlet 接口的init,service 和destroy 方法表達。 Servlet 被服務器實例化後, 容器運行其init 方法, 請求到達時運行其service 方法, service 方法自動派遣運行與請求對應的doXXX 方法(doGet, doPost)等, 當服務器決定將實例 銷燬的時候調用其destroy 方法。 web 容器加載servlet, 生命週期開始。經過調用servlet 的init()方法進行servlet 的初始化。 經過調用service()方法實現, 根據請求的不一樣調用不一樣的do***()方法。結束服務, web 容 器調用servlet 的destroy()方法。 5、Servlet 的基本架構 public class ServletName extends HttpServlet { public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { } } 6、SERVLET API 中forward()與redirect()的區別? 答:前者僅是容器中控制權的轉向, 在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後 者則是徹底的跳轉, 瀏覽器將會獲得跳轉的地址, 並從新發送請求連接。這樣, 從瀏覽器的 地址欄中能夠看到跳轉後的連接地址。因此, 前者更加高效, 在前者能夠知足須要時, 儘可能 使用forward()方法, 而且, 這樣也有助於隱藏實際的連接。在有些狀況下, 好比, 須要跳 轉到一個其它服務器上的資源, 則必須使用 sendRedirect()方法。 7、什麼狀況下調用doGet()和doPost()? Jsp 頁面中的FORM 標籤裏的method 屬性爲get 時調用doGet(), 爲post 時調用doPost()。 8、Request 對象的主要方法: setAttribute(String name,Object):設置名字爲name 的request 的參數值 getAttribute(String name):返回由name 指定的屬性值 getAttributeNames():返回request 對象全部屬性的名字集合, 結果是一個枚舉的實例 getCookies():返回客戶端的全部Cookie 對象, 結果是一個Cookie 數組 getCharacterEncoding():返回請求中的字符編碼方式 getContentLength():返回請求的Body 的長度 getHeader(String name):得到HTTP 協議定義的文件頭信息 getHeaders(String name):返回指定名字的request Header 的全部值, 結果是一個枚舉的 實例 getHeaderNames():返回因此request Header 的名字, 結果是一個枚舉的實例 getInputStream():返回請求的輸入流, 用於得到請求中的數據 getMethod():得到客戶端向服務器端傳送數據的方法 getParameter(String name):得到客戶端傳送給服務器端的有name 指定的參數值 getParameterNames():得到客戶端傳送給服務器端的全部參數的名字, 結果是一個枚舉的 實例 getParametervalues(String name):得到有name 指定的參數的全部值 getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱 getQueryString():得到查詢字符串 getRequestURI():獲取發出請求字符串的客戶端地址 getRemoteAddr():獲取客戶端的IP 地址 getRemoteHost():獲取客戶端的名字 getSession([Boolean create]):返回和請求相關Session getServerName():獲取服務器的名字 getServletPath():獲取客戶端所請求的腳本文件的路徑 getServerPort():獲取服務器的端口號 removeAttribute(String name):刪除請求中的一個屬性 9、forward 和redirect 的區別 forward 是服務器請求資源, 服務器直接訪問目標地址的URL, 把那個URL 的響應內容讀 取過來, 而後把這些內容再發給瀏覽器, 瀏覽器根本不知道服務器發送的內容是從哪兒來的, 因此它的地址欄中仍是原來的地址。 redirect 就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址, 通常來 說瀏覽器會用剛纔請求的全部參數從新請求, 因此session,request 參數均可以獲取。 十、request.getAttribute()和 request.getParameter()有何區別? getParameter 獲得的都是String 類型的。或者是http://a.jsp?id=123 中的123, 或者是某個表 單提交過去的數據。 getAttribute 則能夠是對象。 getParameter()是獲取POST/GET 傳遞的參數值; getAttribute()是獲取對象容器中的數據值; getParameter:用於客戶端重定向時, 即點擊了連接或提交按扭時傳值用, 即用於在用表單 或url 重定向傳值時接收數據用。 getAttribute:用於服務器端重定向時, 即在sevlet 中使用了forward 函數,或struts 中使用了 mapping.findForward。getAttribute 只能收到程序用setAttribute 傳過來的值。 getParameter()是獲取POST/GET 傳遞的參數值; getAttribute()是獲取SESSION 的值; 另外, 能夠用setAttribute,getAttribute 發送接收對象.而getParameter 顯然只能傳字符串。 setAttribute 是應用服務器把這個對象放在該頁面所對應的一塊內存中去, 當你的頁面服務器 重定向到另外一個頁面時, 應用服務器會把這塊內存拷貝另外一個頁面所對應的內存中。這樣 getAttribute 就能取得你所設下的值, 固然這種方法能夠傳對象。session 也同樣, 只是對象 在內存中的生命週期不同而已。getParameter 只是應用服務器在分析你送上來的request 頁面的文本時, 取得你設在表單或url 重定向時的值。 getParameter 返回的是String, 用於讀取提交的表單中的值; getAttribute 返回的是Object, 需進行轉換,可用setAttribute 設置成任意對象, 使用很靈活, 可隨時用; 11. jsp 有哪些內置對象?做用分別是什麼?分別有什麼方法? 答:JSP 共有如下9個內置的對象: request 用戶端請求, 此請求會包含來自GET/POST 請求的參數 response 網頁傳回用戶端的迴應 pageContext 網頁的屬性是在這裏管理 session 與請求有關的會話期 application servlet 正在執行的內容 out 用來傳送回應的輸出 config servlet 的構架部件 page JSP 網頁自己 exception 針對錯誤網頁, 未捕捉的例外 request 表示HttpServletRequest 對象。它包含了有關瀏覽器請求的信息, 而且提供了幾個 用於獲取cookie, header,和session 數據的有用的方法。 response 表示HttpServletResponse 對象, 並提供了幾個用於設置送回瀏覽器的響應的 方法(如cookies,頭信息等) out 對象是javax.jsp.JspWriter 的一個實例, 並提供了幾個方法使你能用於向瀏覽器回送 輸出結果。 pageContext 表示一個javax.servlet.jsp.PageContext 對象。它是用於方便存取各類範 圍的名字空間、servlet 相關的對象的API, 而且包裝了通用的servlet 相關功能的方法。 session 表示一個請求的javax.servlet.http.HttpSession 對象。Session 能夠存貯用戶的 狀態信息 applicaton 表示一個javax.servle.ServletContext 對象。這有助於查找有關servlet 引擎 和servlet 環境的信息 config 表示一個javax.servlet.ServletConfig 對象。該對象用於存取servlet 實例的初始 化參數。 page 表示從該頁面產生的一個servlet 實例 12. jsp 有哪些動做?做用分別是什麼? (這個問題彷佛不重要, 不明白爲什麼有此題) 答:JSP 共有如下6種基本動做 jsp:include:在頁面被請求的時候引入一個文件。 jsp:useBean:尋找或者實例化一個JavaBean。 jsp:setProperty:設置JavaBean 的屬性。 jsp:getProperty:輸出某個JavaBean 的屬性。 jsp:forward:把請求轉到一個新的頁面。 jsp:plugin:根據瀏覽器類型爲Java 插件生成OBJECT 或EMBED 標記 13、JSP 的經常使用指令 isErrorPage(是否能使用Exception 對象), isELIgnored(是否忽略表達式) 14. JSP 中動態INCLUDE 與靜態INCLUDE 的區別? 答:動態INCLUDE 用jsp:include 動做實現 <jsp:include page=included.jsp flush=true />它老是會檢查所含文件中的變化, 適合用於包 含動態頁面, 而且能夠帶參數 靜態INCLUDE 用include 僞碼實現,定不會檢查所含文件的 變化, 適用於包含靜態頁面 <%@include file=included.htm %> 1五、兩種跳轉方式分別是什麼?有什麼區別? (下面的回答嚴重錯誤, 應該是想問forward 和sendRedirect 的區別, 畢竟出題的人不是 專業搞文字藝術的人, 可能表達能力並不見得很強, 用詞不必定精準, 加之其自身的技術面 也可能存在一些問題, 不必定真正將他的意思表達清楚了, 嚴格意思上來說, 一些題目可能 根本就無人能答, 因此, 答題時要掌握主動, 只要把本身知道的表達清楚就夠了, 而不要去 推敲原始題目的具體含義是什麼, 不要一味想着是在答題) 答:有兩種, 分別爲: <jsp:include page=included.jsp flush=true> <jsp:forward page= nextpage.jsp/> 前者頁面不會轉向include 所指的頁面, 只是顯示該頁的結果, 主頁面仍是原來的頁面。執 行完後還會回來, 至關於函數調用。而且能夠帶參數.後者徹底轉向新頁面, 不會再回來。 至關於go to 語句。 16、頁面間對象傳遞的方法 request, session, application, cookie 等 17、JSP 和Servlet 有哪些相同點和不一樣點, 他們之間的聯繫是什麼? JSP 是Servlet 技術的擴展, 本質上是Servlet 的簡易方式, 更強調應用的外表表達。JSP 編譯後是"類servlet"。Servlet 和JSP 最主要的不一樣點在於, Servlet 的應用邏輯是在Java 文件中, 而且徹底從表示層中的HTML 裏分離開來。而JSP 的狀況是Java 和HTML 能夠 組合成一個擴展名爲.jsp 的文件。JSP 側重於視圖, Servlet 主要用於控制邏輯。 1八、MVC 的各個部分都有那些技術來實現?如何實現? 答:MVC 是Model-View-Controller 的簡寫。Model 表明的是應用的業務邏輯(經過 JavaBean, EJB 組件實現), View 是應用的表示面(由JSP 頁面產生), Controller 是提供 應用的處理過程控制(通常是一個Servlet), 經過這種設計模型把應用邏輯, 處理過程和顯 示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。 1九、咱們在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; } 20、如今輸入n 個數字, 以逗號, 分開;而後可選擇升或者降序排序;按提交鍵就在另外一頁面顯示按什麼排序, 結果爲, 提供reset 21、註冊Jdbc 驅動程序的三種方式 22、用JDBC 如何調用存儲過程 代碼以下: package com.huawei.interview.lym; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Types; publicclass JdbcTest { public static voidmain(String[] args) { Connection cn = null; CallableStatement cstmt =null; try { //這裏最好不要這麼幹, 由於驅動名寫死在程序中了 Class.forName("com.mysql.jdbc.Driver"); //實際項目中, 這裏應用DataSource 數據, 若是用框架, //這個數據源不須要咱們編碼建立, 咱們只需Datasource ds =context.lookup() //cn = ds.getConnection(); cn = DriverManager.getConnection("jdbc:mysql:///test","root","root"); cstmt = cn.prepareCall("{callinsert_Student(?,?,?)}"); cstmt.registerOutParameter(3,Types.INTEGER); cstmt.setString(1,"wangwu"); cstmt.setInt(2, 25); cstmt.execute(); //get 第幾個, 不一樣的數據庫不同, 建議不寫 System.out.println(cstmt.getString(3)); } catch (Exception e) { e.printStackTrace(); } finally { /*try{cstmt.close();}catch(Exceptione){} try{cn.close();}catch(Exceptione){}*/ try { if(cstmt !=null) cstmt.close(); if(cn !=null) cn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 23、JDBC 中的PreparedStatement 相比Statement 的好處 答:一個sql 命令發給服務器去執行的步驟爲:語法檢查, 語義分析, 編譯成內部指令, 緩存指令, 執行指令等過程。 select * from student where id =3----緩存--àxxxxx 二進制命令 select * from student where id =3----直接取-àxxxxx 二進制命令 select * from student where id =4--- -à 會怎麼幹? 若是當初是select * from student where id =?--- -à 又會怎麼幹? 上面說的是性能提升 能夠防止sql 注入。 24. 寫一個用jdbc 鏈接並訪問oracle 數據的程序代碼 2五、Class.forName 的做用?爲何要用? 答:按參數中指定的字符串形式的類名去搜索並加載相應的類, 若是該類字節碼已經被加載過, 則返回表明該字節碼的Class 實例對象, 不然, 按類加載器的委託機制去搜索和加載該類, 若是全部的類加載器都沒法加載到該類, 則拋出ClassNotFoundException。加載完這個Class 字節碼後, 接着就能夠使用Class 字節碼的new Instance 方法去建立該類的實例對象了。 有時候, 咱們程序中全部使用的具體類名在設計時(即開發時)沒法肯定, 只有程序運行時才能肯定, 這時候就須要使用Class.forName 去動態加載該類, 這個類名一般是在配置文件中配置的, 例如, spring 的ioc 中每次依賴注入的具體類就是這樣配置的, jdbc 的驅動類 名一般也是經過配置文件來配置的, 以便在產品交付使用後不用修改源程序就能夠更換驅動類名。 26、大數據量下的分頁解決方法。 答:最好的辦法是利用sql 語句進行分頁, 這樣每次查詢出的結果集中就只包含某頁的數據內容。 再sql 語句沒法實現分頁的狀況下, 能夠考慮對大的結果集經過遊標定位方式來獲取某頁的數據。 sql 語句分頁, 不一樣的數據庫下的分頁方案各不同, 下面是主流的三種數據庫的分頁sql: sql server: String sql = "select top" + pageSize + " * from students where id not in" + "(select top " + pageSize * (pageNumber - 1) + " id from students order by id)" + "order by id"; mysql : String sql = "select * fromstudents order by id limit " + pageSize * (pageNumber - 1) + "," +pageSize; oracle : String sql = "select * from " + (select * , rownum rid from(select * fromstudents order by postime desc)where rid <= " + pagesize*pagenumber +")as t " + " where t > " +pageSize*(pageNumber-1); 27、用 JDBC 查詢學生成績單,把主要代碼寫出來(考試機率極大). Connection cn = null; PreparedStatement pstmt =null; Resultset rs = null; try { Class.forname(driveClassName); cn = DriverManager.getConnection(url,username,password); pstmt =cn.prepareStatement("select score.* fromscore ,student " + "wherescore.stuId = student.id and student.name = ?"); pstmt.setString(1,studentName); Resultset rs =pstmt.executeQuery(); while(rs.next()) { system.out.println(rs.getInt("subject") + " " + rs.getFloat("score") ); } } catch(Exception e) { e.printStackTrace(); } finally { if(rs != null) try{rs.close() } catch(exception e) {} if(pstmt != null)try{pstmt.close()} catch(exception e) {} if(cn != null) try{cn.close() } catch(exception e) {} } 2八、這段代碼有什麼不足之處? try { Connection conn = ...; Statement stmt = ...; ResultSet rs =stmt.executeQuery("select * from table1"); while(rs.next()) { } } catch(Exception ex) { } 答:沒有finally 語句來關閉各個對象, 另外, 使用finally 以後, 要把變量的定義放在try 語 句塊的外面, 以便在try 語句塊以外的finally 塊中仍能夠訪問這些變量。 2九、說出數據鏈接池的工做機制是什麼? J2EE 服務器啓動時會創建必定數量的池鏈接, 並一直維持很多於此數目的池鏈接。客戶端程序須要鏈接時, 池驅動程序會返回一個未使用的池鏈接並將其表記爲忙。若是當前沒有空閒鏈接, 池驅動程序就新建必定數量的鏈接, 新建鏈接的數量有配置參數決定。當使用的池鏈接調用完成後, 池驅動程序將此鏈接表記爲空閒, 其餘調用就能夠使用這個鏈接。實現方式, 返回的Connection 是原始Connection 的代理, 代理Connection 的close 方法不是真正關鏈接, 而是把它代理的Connection 對象還回到鏈接池中。 30、爲何要用 ORM? 和 JDBC 有何不同? orm 是一種思想, 就是把object 轉變成數據庫中的記錄, 或者把數據庫中的記錄轉變成objecdt, 咱們能夠用jdbc 來實現這種思想, 其實, 若是咱們的項目是嚴格按照oop 方式編寫的話, 咱們的jdbc 程序無論是有意仍是無心, 就已經在實現orm 的工做了。 如今有許多orm 工具, 它們底層調用jdbc 來實現了orm 工做, 咱們直接使用這些工具, 就 省去了直接使用jdbc 的繁瑣細節, 提升了開發效率, 如今用的較多的orm 工具是hibernate。 也據說一些其餘orm 工具, 如toplink,ojb 等。 六. XML 部分 一、xml 有哪些解析技術?區別是什麼? 答:有DOM,SAX,STAX 等 DOM:處理大型文件時其性能降低的很是厲害。這個問題是由DOM 的樹結構所形成的, 這 種結構佔用的內存較多, 並且DOM 必須在解析文件以前把整個文檔裝入內存,適合對XML 的隨機訪問SAX:不現於DOM,SAX 是事件驅動型的XML 解析方式。它順序讀取XML 文件, 不須要一次所有裝載整個文件。當遇到像文件開頭, 文檔結束, 或者標籤開頭與標籤結束時, 它會觸發一個事件, 用戶經過在其回調事件中寫入處理代碼來處理XML 文件, 適合對XML 的順序訪問 STAX:Streaming API for XML (StAX) 講解這些區別是不須要特別去比較, 就像說傳智播客與其餘培訓機構的區別時, 咱們只需說 清楚傳智播客有什麼特色和優勢就好了, 這就已經間接回答了彼此的區別。 二、你在項目中用到了xml 技術的哪些方面?如何實現的? 答:用到了數據存貯, 信息配置兩方面。在作數據交換平臺時, 將不能數據源的數據組裝成 XML 文件, 而後將XML 文件壓縮打包加密後經過網絡傳送給接收者, 接收解密與解壓縮後 再同XML 文件中還原相關信息進行處理。在作軟件配置時, 利用XML 能夠很方便的進行, 軟件的各類配置參數都存貯在XML 文件中。 三、用jdom 解析xml 文件時如何解決中文問題?如何解析? 答:看以下代碼,用編碼方式加以解決 package test; import java.io.*; public class DOMTest { private String inFile = "c:\\people.xml" private String outFile = "c:\\people.xml" public static void main(String args[]) { new DOMTest(); } public DOMTest() { try { javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.dom.Document doc = builder.newDocument(); org.w3c.dom.Element root = doc.createElement("老師"); org.w3c.dom.Element wang = doc.createElement("王"); org.w3c.dom.Element liu = doc.createElement("劉"); wang.appendChild(doc.createTextNode("我是王老師")); root.appendChild(wang); doc.appendChild(root); javax.xml.transform.Transformer transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING,"gb2312"); transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT,"yes"); transformer.transform(newjavax.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(outFile)); } catch (Exception e) { System.out.println (e.getMessage()); } } } 4、編程用JAVA 解析XML 的方式. 答:用SAX 方式解析XML, XML 文件以下: <?xml version=1.0 encoding=gb2312?> <person> <name>王小明</name> <college>信息學院</college> <telephone>6258113</telephone> <notes>男,1955年生,博士, 95年調入海南大學</notes> </person> 事件回調類SAXHandler.java import java.io.*; import java.util.Hashtable; import org.xml.sax.*; public class SAXHandler extends HandlerBase { private Hashtable table = new Hashtable(); private String currentElement = null; private String currentValue = null; public void setTable(Hashtable table) { this.table = table; } public Hashtable getTable() { return table; } public void startElement(String tag, AttributeList attrs) throws SAXException { currentElement = tag; } public void characters(char[] ch, int start, int length) throws SAXException { currentValue = new String(ch, start, length); } public void endElement(String name) throws SAXException { if (currentElement.equals(name)) table.put(currentElement, currentValue); } } JSP 內容顯示源碼,SaxXml.jsp: <HTML> <HEAD> <TITLE>剖析XML 文件people.xml</TITLE> </HEAD> <BODY> <%@ page errorPage=ErrPage.jsp contentType=text/html;charset=GB2312 %> <%@ page import=java.io.* %> <%@ page import=java.util.Hashtable %> <%@ page import=org.w3c.dom.* %> <%@ page import=org.xml.sax.* %> <%@ page import=javax.xml.parsers.SAXParserFactory %> <%@ page import=javax.xml.parsers.SAXParser %> <%@ page import=SAXHandler %> <% File file = new File(c:\people.xml); FileReader reader = new FileReader(file); Parser parser; SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); SAXHandler handler = new SAXHandler(); sp.parse(new InputSource(reader), handler); Hashtable hashTable = handler.getTable(); out.println(<TABLE BORDER=2><CAPTION>教師信息表</CAPTION>); out.println(<TR><TD>姓名</TD> + <TD> + (String)hashTable.get(new String(name)) +</TD></TR>); out.println(<TR><TD>學院</TD> + <TD> + (String)hashTable.get(newString(college))+</TD></TR>); out.println(<TR><TD>電話</TD> + <TD> + (String)hashTable.get(new String(telephone)) +</TD></TR>); out.println(<TR><TD>備註</TD> + <TD> + (String)hashTable.get(new String(notes)) +</TD></TR>); out.println(</TABLE>); %> </BODY> </HTML> 5、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 forXML (StAX) 七.流行的框架與新技術 1、談談你對Struts 的理解。 答: 1. struts 是一個按MVC 模式設計的Web 層框架, 其實它就是一個大大的servlet, 這個 Servlet 名爲ActionServlet, 或是ActionServlet 的子類。咱們能夠在web.xml 文件中將符 合某種特徵的全部請求交給這個Servlet 處理, 這個Servlet 再參照一個配置文件(一般爲 /WEB-INF/struts-config.xml)將各個請求分別分配給不一樣的action 去處理。 一個擴展知識點:struts 的配置文件能夠有多個, 能夠按模塊配置各自的配置文件, 這樣可 以防止配置文件的過分膨脹; 2.ActionServlet 把請求交給action 去處理以前, 會將請求參數封裝成一個formbean 對象(就是一個java 類, 這個類中的每一個屬性對應一個請求參數), 封裝成一個什麼樣的formbean對象呢?看配置文件。 3.要說明的是, ActionServlet 把formbean 對象傳遞給action 的execute 方法以前, 可能 會調用formbean 的validate 方法進行校驗, 只有校驗經過後纔將這個formbean 對象傳遞 給action 的execute 方法, 不然, 它將返回一個錯誤頁面, 這個錯誤頁面由input 屬性指定, (看配置文件)做者爲何將這裏命名爲input 屬性, 而不是error 屬性, 咱們後面結合實 際的運行效果進行分析。 4.action 執行完後要返回顯示的結果視圖, 這個結果視圖是用一個ActionForward 對象來表 示的, actionforward 對象經過struts-config.xml 配置文件中的配置關聯到某個jsp 頁面, 因 爲程序中使用的是在struts-config.xml 配置文件爲jsp 頁面設置的邏輯名, 這樣能夠實現 action 程序代碼與返回的jsp 頁面名稱的解耦。 你對struts 可能還有本身的應用方面的經驗, 那也要一併說出來。 2、談談你對Hibernate 的理解。 答: 1. 面向對象設計的軟件內部運行過程能夠理解成就是在不斷建立各類新對象、創建對象之 間的關係, 調用對象的方法來改變各個對象的狀態和對象消亡的過程, 無論程序運行的過程 和操做怎麼樣, 本質上都是要獲得一個結果, 程序上一個時刻和下一個時刻的運行結果的差 異就表如今內存中的對象狀態發生了變化。 2.爲了在關機和內存空間不夠的情況下, 保持程序的運行狀態, 須要將內存中的對象狀態保 存到持久化設備和從持久化設備中恢復出對象的狀態, 一般都是保存到關係數據庫來保存大 量對象信息。從Java 程序的運行功能上來說, 保存對象狀態的功能相比系統運行的其餘功 能來講, 應該是一個很不起眼的附屬功能, java 採用jdbc 來實現這個功能, 這個不起眼的 功能卻要編寫大量的代碼, 而作的事情僅僅是保存對象和恢復對象, 而且那些大量的jdbc 代碼並無什麼技術含量, 基本上是採用一套例行公事的標準代碼模板來編寫, 是一種苦活 和重複性的工做。 3.經過數據庫保存java 程序運行時產生的對象和恢復對象, 其實就是實現了java 對象與關 係數據庫記錄的映射關係, 稱爲ORM(即Object RelationMapping), 人們能夠經過封裝 JDBC 代碼來實現了這種功能, 封裝出來的產品稱之爲ORM 框架, Hibernate 就是其中的 一種流行ORM 框架。使用Hibernate 框架, 不用寫JDBC 代碼, 僅僅是調用一個save 方 法, 就能夠將對象保存到關係數據庫中, 僅僅是調用一個get 方法, 就能夠從數據庫中加載 出一個對象。 4.使用Hibernate 的基本流程是:配置Configuration 對象、產生SessionFactory、建立 session 對象, 啓動事務, 完成CRUD 操做, 提交事務, 關閉session。 5.使用Hibernate 時, 先要配置hibernate.cfg.xml 文件, 其中配置數據庫鏈接信息和方言等, 還要爲每一個實體配置相應的hbm.xml 文件, hibernate.cfg.xml 文件中須要登記每一個hbm.xml 文件。 6.在應用Hibernate 時, 重點要了解Session 的緩存原理, 級聯, 延遲加載和hql 查詢。 3、AOP 的做用。 4、你對Spring 的理解。 1.Spring 實現了工廠模式的工廠類(在這裏有必要解釋清楚什麼是工廠模式), 這個類名爲 BeanFactory(其實是一個接口), 在程序中一般BeanFactory 的子類ApplicationContext。 Spring 至關於一個大的工廠類, 在其配置文件中經過<bean>元素配置用於建立實例對象的 類名和實例對象的屬性。 2. Spring 提供了對IOC 良好支持, IOC 是一種編程思想, 是一種架構藝術, 利用這種思想 能夠很好地實現模塊之間的解耦。IOC 也稱爲DI(Depency Injection), 什麼叫依賴注入呢? 譬如, Class Programmer { Computer computer =null; public void code() { //Computer computer = new IBMComputer(); //Computer computer = beanfacotry.getComputer(); computer.write(); } public void setComputer(Computer computer) { this.computer= computer; } } 另外兩種方式都由依賴, 第一個直接依賴於目標類, 第二個把依賴轉移到工廠上, 第三個徹 底與目標和工廠解耦了。在spring 的配置文件中配置片斷以下: <bean id="computer" class="cn.itcast.interview.Computer"> </bean> <bean id="programmer" class="cn.itcast.interview.Programmer"> <property name="computer" ref="computer"></property> </bean> 3. Spring 提供了對AOP 技術的良好封裝, AOP 稱爲面向切面編程, 就是系統中有不少各 不相干的類的方法, 在這些衆多方法中要加入某種系統功能的代碼, 例如, 加入日誌, 加入 權限判斷, 加入異常處理, 這種應用稱爲AOP。實現AOP 功能採用的是代理技術, 客戶端 程序再也不調用目標, 而調用代理類, 代理類與目標類對外具備相同的方法聲明, 有兩種方式 能夠實現相同的方法聲明, 一是實現相同的接口, 二是做爲目標的子類在, JDK 中採用Proxy 類產生動態代理的方式爲某個接口生成實現類, 若是要爲某個類生成子類, 則能夠用CGLI B。在生成的代理類的方法中加入系統功能和調用目標類的相應方法, 系統功能的代理以 Advice 對象進行提供, 顯然要建立出代理對象, 至少須要目標類和Advice 類。spring 提供 了這種支持, 只須要在spring 配置文件中配置這兩個元素便可實現代理和aop 功能, 例如, <bean id="proxy" type="org.spring.framework.aop.ProxyBeanFactory"> <property name="target"ref=""></property> <property name="advisor"ref=""></property> </bean> 5、談談Struts 中的Action servlet。 6、Struts 優缺點 優勢: 1. 實現MVC 模式, 結構清晰,使開發者只關注業務邏輯的實現. 2.有豐富的tag 能夠用 ,Struts 的標記庫(Taglib), 如能靈活動用, 則能大大提升開發效率 3. 頁面導航 使系統的脈絡更加清晰。經過一個配置文件, 便可把握整個系統各部分之間的聯繫, 這對於後期的維護有着莫大的好處。尤爲是當另外一批開發者接手這個項目時, 這種優點體現 得更加明顯。 4. 提供Exception 處理機制 . 5. 數據庫連接池管理 6. 支持I18N 缺點 1、 轉到展現層時, 須要配置forward, 若是有十個展現層的jsp, 須要配置十次struts, 並且還不包括有時候目錄、文件變動, 須要從新修改forward, 注意, 每次修改配置以後, 要求從新部署整個項目, 而tomcate 這樣的服務器, 還必須從新啓動服務器 2、 2、 Struts 的Action 必需是thread-safe 方式, 它僅僅容許一個實例去處理全部 的請求。因此action 用到的全部的資源都必需統一同步, 這個就引發了線程安全的問題。 3、 測試不方便. Struts 的每一個Action 都同Web 層耦合在一塊兒, 這樣它的測試依賴於 Web 容器, 單元測試也很難實現。不過有一個Junit 的擴展工具Struts TestCase 能夠實現 它的單元測試。 4、 類型的轉換. Struts 的FormBean 把全部的數據都做爲String 類型, 它能夠使用工 具Commons-Beanutils 進行類型轉化。但它的轉化都是在Class 級別, 並且轉化的類型是 不可配置的。類型轉化時的錯誤信息返回給用戶也是很是困難的。 5、 對Servlet 的依賴性過強. Struts 處理Action 時必須要依賴ServletRequest 和 ServletResponse, 全部它擺脫不了Servlet 容器。 6、 前端表達式語言方面.Struts 集成了JSTL, 因此它主要使用JSTL 的表達式語言來 獲取數據。但是JSTL 的表達式語言在Collection 和索引屬性方面處理顯得很弱。 7、 對Action 執行的控制困難. Struts 建立一個Action, 若是想控制它的執行順序將會 很是困難。甚至你要從新去寫Servlet 來實現你的這個功能需求。 8、 對Action 執行前和後的處理. Struts 處理Action 的時候是基於class 的hierarchies, 很難在action 處理前和後進行操做。 9、 對事件支持不夠.在struts 中, 實際是一個表單Form 對應一個Action 類(或DispatchAction), 換一句話說:在Struts 中實際是一個表單只能對應一個事件, struts 這種事件方式稱爲 application event, application event 和component event 相比是一種粗粒度的事件 7、STRUTS 的應用(如STRUTS 架構) Struts 是採用Java Servlet/JavaServer Pages 技術, 開發Web 應用程序的開放源碼的 framework。採用Struts 能開發出基於MVC(Model-View-Controller)設計模式的應用構架。 Struts 有以下的主要功能:一.包含一個controller servlet, 能將用戶的請求發送到相應的 Action 對象。二.JSP 自由tag 庫, 而且在controller servlet 中提供關聯支持, 幫助開發員 建立交互式表單應用。三.提供了一系列實用對象:XML 處理、經過Java reflection APIs 自 動處理JavaBeans 屬性、國際化的提示和消息。 8、說說struts1 與struts2 的區別。 1.都是MVC 的WEB 框架, 2 struts1的老牌框架, 應用很普遍, 有很好的羣衆基礎, 使用它開發風險很小, 成本更低! struts2雖然基於這個框架, 可是應用羣衆並多, 相對不成熟, 未知的風險和變化不少, 開發 人員相對很差招, 使用它開發項目的風險係數更大, 用人成本更高! 3.struts2畢竟是站在前輩的基礎設計出來, 它會改善和完善struts1中的一些缺陷, struts1 中一些懸而未決問題在struts2獲得瞭解決。 4.struts1的前端控制器是一個Servlet, 名稱爲ActionServlet, struts2的前端控制器是一個 filter, 在struts2.0中叫FilterDispatcher, 在struts2.1中叫StrutsPrepareAndExecuteFilter。 5.struts1的action 須要繼承Action 類, struts2的action 能夠不繼承任何類;struts1對同一 個路徑的全部請求共享一個Action 實例, struts2對同一個路徑的每一個請求分別使用一個獨 立Action 實例對象, 全部對於struts2的Action 不用考慮線程安全問題。 6.在struts1中使用formbean 封裝請求參數, 在struts2中直接使用action 的屬性來封裝請 求參數。 7.struts1中的多個業務方法放在一個Action 中時(即繼承DispatchAction 時), 要麼都校驗, 要麼都不校驗;對於struts2, 能夠指定只對某個方法進行校驗, 當一個Action 繼承了 ActionSupport 且在這個類中只編寫了validateXxx()方法, 那麼則只對Xxx()方法進行校驗。 (一個請求來了的執行流程進行分析, struts2是自動支持分模塊開發, 並能夠不一樣模塊設置 不一樣的url 前綴, 這是經過package 的namespace 來實現的;struts2是支持多種類型的視 圖;struts2的視圖地址能夠是動態的, 即視圖的名稱是支持變量方式的, 舉例, 論壇發帖失 敗後回來還要傳遞boardid。視圖內容顯示方面:它的標籤用ognl, 要el 強大不少, 在國際 化方面支持分模塊管理, 兩個模塊用到一樣的key, 對應不一樣的消息;) 與Struts1不一樣, Struts2對用戶的每一次請求都會建立一個Action, 因此Struts2中的Action 是線程安全的。 給我印象最深入的是:struts 配置文件中的redirect 視圖的url 不能接受參數, 而struts2配 置文件中的redirect 視圖能夠接受參數。 9、hibernate 中的update()和saveOrUpdate()的區別, session 的load()和get()的區別。 十、簡述 Hibernate 和 JDBC 的優缺點?如何書寫一個 one to many 配置文件. 十一、iBatis 與Hibernate 有什麼不一樣? 相同點:屏蔽jdbc api 的底層訪問細節, 使用咱們不用與jdbc api 打交道, 就能夠訪問數據。 jdbc api 編程流程固定, 還將sql 語句與java 代碼混雜在了一塊兒, 常常須要拼湊sql 語句, 細節很繁瑣。 ibatis 的好處:屏蔽jdbc api 的底層訪問細節;將sql 語句與java 代碼進行分離;提供了將結 果集自動封裝稱爲實體對象和對象的集合的功能, queryForList 返回對象集合, 用 queryForObject 返回單個對象;提供了自動將實體對象的屬性傳遞給sql 語句的參數。 Hibernate 是一個全自動的orm 映射工具, 它能夠自動生成sql 語句,ibatis 須要咱們本身在 xml 配置文件中寫sql 語句, hibernate 要比ibatis 功能負責和強大不少。由於hibernate 自 動生成sql 語句, 咱們沒法控制該語句, 咱們就沒法去寫特定的高效率的sql。對於一些不 太複雜的sql 查詢, hibernate 能夠很好幫咱們完成, 可是, 對於特別複雜的查詢, hibernate 就很難適應了, 這時候用ibatis 就是不錯的選擇, 由於ibatis 仍是由咱們本身寫sql 語句。 十二、寫Hibernate 的一對多和多對一雙向關聯的orm 配置? 12.一、hibernate 的inverse 屬性的做用? 解決方案一, 按照Object[]數據取出數據, 而後本身組bean 解決方案二, 對每一個表的bean 寫構造函數, 好比表一要查出field1,field2兩個字段, 那麼有 一個構造函數就是Bean(type1filed1,type2 field2) , 而後在hql 裏面就能夠直接生成這個bean 了。 1三、在DAO 中如何體現DAO 設計模式? 解決方案一, 按照Object[]數據取出數據, 而後本身組bean 解決方案二, 對每一個表的bean 寫構造函數, 好比表一要查出field1,field2兩個字段, 那麼有 一個構造函數就是Bean(type1filed1,type2 field2) , 而後在hql 裏面就能夠直接生成這個bean 了。 1四、spring+Hibernate 中委託方案怎麼配置? 解決方案一, 按照Object[]數據取出數據, 而後本身組bean 解決方案二, 對每一個表的bean 寫構造函數, 好比表一要查出field1,field2兩個字段, 那麼有 一個構造函數就是Bean(type1filed1,type2 field2) , 而後在hql 裏面就能夠直接生成這個bean 了。 1五、spring+Hibernate 中委託方案怎麼配置? 解決方案一, 按照Object[]數據取出數據, 而後本身組bean 解決方案二, 對每一個表的bean 寫構造函數, 好比表一要查出field1,field2兩個字段, 那麼有 一個構造函數就是Bean(type1filed1,type2 field2) , 而後在hql 裏面就能夠直接生成這個bean 了。 16. hibernate 進行多表查詢每一個表中各取幾個字段, 也就是說查詢出來的結果集沒有一個實體類與之對應如何解決; 解決方案一, 按照Object[]數據取出數據, 而後本身組bean 解決方案二, 對每一個表的bean 寫構造函數, 好比表一要查出field1,field2兩個字段, 那麼有 一個構造函數就是Bean(type1filed1,type2field2) , 而後在hql 裏面就能夠直接生成這個bean 了。 17.介紹一下Hibernate 的二級緩存 按照如下思路來回答: (1)首先說清楚什麼是緩存, (2)再說有了hibernate 的Session 就是一級緩存, 即有了一級緩存, 爲何還要有二級緩存, (3)最後再說如何配置Hibernate的二級緩存。 (1)緩存就是把之前從數據庫中查詢出來和使用過的對象保存在內存中(一個數據結構中), 這個數據結構一般是或相似Hashmap, 當之後要使用某個對象時, 先查詢緩存中是否有這個對象, 若是有則使用緩存中的對象, 若是沒有則去查詢數據庫, 並將查詢出來的對象保存在緩存中, 以便下次使用。下面是緩存的僞代碼: 引出hibernate 的第二級緩存, 用下面的僞代碼分析了Cache 的實現原理 Dao { hashmap map = newmap(); User getUser(integer id) { User user =map.get(id) if(user ==null) { user =session.get(id); map.put(id,user); } return user; } } Dao { Cache cache = null setCache(Cache cache) { this.cache =cache } User getUser(int id) { if(cache!=null) { User user = cache.get(id); if(user==null) { user= session.get(id); cache.put(id,user); } return user; } return session.get(id); } } (2)Hibernate 的Session 就是一種緩存, 咱們一般將之稱爲Hibernate 的一級緩存, 當想 使用session 從數據庫中查詢出一個對象時, Session 也是先從本身內部查看是否存在這個 對象, 存在則直接返回, 不存在纔去訪問數據庫, 並將查詢的結果保存在本身內部。因爲 Session 表明一次會話過程, 一個Session 與一個數據庫鏈接相關連, 因此Session 最好不 要長時間保持打開, 一般僅用於一個事務當中, 在事務結束時就應關閉。而且Session 是 線程不安全的, 被多個線程共享時容易出現問題。一般只有那種全局意義上的緩存纔是真正 的緩存應用, 纔有較大的緩存價值, 所以, Hibernate 的Session 這一級緩存的緩存做用並 不明顯, 應用價值不大。Hibernate 的二級緩存就是要爲Hibernate 配置一種全局緩存, 讓 多個線程和多個事務均可以共享這個緩存。咱們但願的是一我的使用過, 其餘人也能夠使用, session 沒有這種效果。 (3)二級緩存是獨立於Hibernate 的軟件部件, 屬於第三方的產品, 多個廠商和組織都提 供有緩存產品, 例如, EHCache 和OSCache 等等。在Hibernate 中使用二級緩存, 首先 就要在hibernate.cfg.xml 配置文件中配置使用哪一個廠家的緩存產品, 接着須要配置該緩存 產品本身的配置文件, 最後要配置Hibernate 中的哪些實體對象要歸入到二級緩存的管理 中。明白了二級緩存原理和有了這個思路後, 很容易配置起Hibernate 的二級緩存。擴展知 識:一個SessionFactory 能夠關聯一個二級緩存, 也即一個二級緩存只能負責緩存一個數 據庫中的數據, 當使用Hibernate 的二級緩存後, 注意不要有其餘的應用或SessionFactory 來更改當前數據庫中的數據, 這樣緩存的數據就會與數據庫中的實際數據不一致。 1八、Spring 的依賴注入是什麼意思?給一個 Bean 的 message 屬性,字符串類型,注入值爲"Hello"的 XML 配置文件該怎麼寫? 1九、Jdo 是什麼? JDO 是Java 對象持久化的新的規範, 爲java data object 的簡稱,也是一個用於存取某種數 據倉庫中的對象的標準化API。JDO 提供了透明的對象存儲, 所以對開發人員來講, 存儲 數據對象徹底不須要額外的代碼(如JDBC API 的使用)。這些繁瑣的例行工做已經轉移到 JDO 產品提供商身上, 使開發人員解脫出來, 從而集中時間和精力在業務邏輯上。另外, JDO 很靈活, 由於它能夠在任何數據底層上運行。JDBC 只是面向關係數據庫(RDBMS) JDO 更通用, 提供到任何數據底層的存儲功能, 好比關係數據庫、文件、XML 以及對象數 據庫(ODBMS)等等, 使得應用可移植性更強。 20、什麼是spring 的IOC AOP 21、STRUTS 的工做流程! 22、spring 與EJB 的區別!! 八.軟件工程與設計模式 1、UML 方面 標準建模語言UML。用例圖,靜態圖(包括類圖、對象圖和包圖),行爲圖,交互圖(順序圖,合做圖),實現圖。 2、j2ee 經常使用的設計模式?說明工廠模式。 總共23種, 分爲三大類:建立型, 結構型, 行爲型 我只記得其中經常使用的六、7種, 分別是: 建立型(工廠、工廠方法、抽象工廠、單例) 結構型(包裝、適配器, 組合, 代理) 行爲(觀察者, 模版, 策略) 而後再針對你熟悉的模式談談你的理解便可。 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(責任鏈模式) 工廠模式:工廠模式是一種常常被使用到的模式, 根據工廠模式實現的類能夠根據提供的數 據生成一組類中某一個類的實例, 一般這一組類有一個公共的抽象父類而且實現了相同的方 法, 可是這些方法針對不一樣的數據進行了不一樣的操做。首先須要定義一個基類, 該類的子類 經過不一樣的方法實現了基類中的方法。而後須要定義一個工廠類, 工廠類能夠根據條件生成 不一樣的子類實例。當獲得子類的實例後, 開發人員能夠調用基類中的方法而沒必要考慮到底返 回的是哪個子類的實例。 三、開發中都用到了那些設計模式?用在什麼場合? 每一個模式都描述了一個在咱們的環境中不斷出現的問題, 而後描述了該問題的解決方案的核 心。經過這種方式, 你能夠無數次地使用那些已有的解決方案, 無需在重複相同的工做。主 要用到了MVC 的設計模式。用來開發JSP/Servlet 或者J2EE 的相關應用。簡單工廠模式 等。 九. j2ee 部分 1、BS 與CS 的聯繫與區別。 C/S 是Client/Server 的縮寫。服務器一般採用高性能的PC、工做站或小型機, 並採用大型 數據庫系統, 如Oracle、Sybase、InFORMix 或 SQL Server。客戶端須要安裝專用的客戶 端軟件。 B/S是Brower/Server 的縮寫, 客戶機上只要安裝一個瀏覽器(Browser), 如Netscape Navigator 或Internet Explorer, 服務器安裝Oracle、Sybase、InFORMix 或 SQL Server 等數據庫。在這種結構下, 用戶界面徹底經過WWW 瀏覽器實現, 一部分事務邏輯在前端 實現, 可是主要事務邏輯在服務器端實現。瀏覽器經過Web Server 同數據庫進行數據交互。 C/S 與 B/S 區別: 1.硬件環境不一樣: C/S 通常創建在專用的網絡上,小範圍裏的網絡環境,局域網之間再經過專門服務器提供連 接和數據交換服務. B/S 創建在廣域網之上的,沒必要是專門的網絡硬件環境,例與電話上網,租用設備.信息本身管 理.有比C/S 更強的適應範圍,通常只要有操做系統和瀏覽器就行 2.對安全要求不一樣 C/S 通常面向相對固定的用戶羣,對信息安全的控制能力很強.通常高度機密的信息系統採 用C/S 結構適宜.能夠經過B/S 發佈部分可公開信息. B/S 創建在廣域網之上,對安全的控制能力相對弱,可能面向不可知的用戶。 3.對程序架構不一樣 C/S 程序能夠更加註重流程,能夠對權限多層次校驗,對系統運行速度能夠較少考慮. B/S 對安全以及訪問速度的多重的考慮,創建在須要更加優化的基礎之上.比C/S 有更高的 要求 B/S 結構的程序架構是發展的趨勢,從MS 的.Net 系列的BizTalk 2000Exchange 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 等信息、流向的變化,更像交易中心。 2、應用服務器與WEB SERVER 的區別? 應用服務器:Weblogic、Tomcat、Jboss WEB SERVER:IIS、 Apache 3、應用服務器有那些? BEA WebLogic Server, IBM WebSphere Application Server, Oracle9i ApplicationServer, jBoss, Tomcat 4、J2EE 是什麼? 答:Je22是Sun 公司提出的多層(multi-diered),分佈式(distributed),基於組件 (component-base)的企業級應用模型(enterpriese applicationmodel).在這樣的一個應用系 統中, 可按照功能劃分爲不一樣的組件, 這些組件又可在不一樣計算機上, 而且處於相應的層次 (tier)中。所屬層次包括客戶層(clietn tier)組件,web 層和組件,Business 層和組件,企業信息系 統(EIS)層。 一個另類的回答:j2ee 就是增刪改查。 5、J2EE 是技術仍是平臺仍是框架?什麼是J2EE J2EE 自己是一個標準, 一個爲企業分佈式應用的開發提供的標準平臺。 J2EE 也是一個框架, 包括JDBC、JNDI、RMI、JMS、EJB、JTA 等技術。 6、請對如下在J2EE 中經常使用的名詞進行解釋(或簡單描述) web 容器:給處於其中的應用程序組件(JSP, SERVLET)提供一個環境, 使JSP,SERVLET 直接更容器中的環境變量接口交互, 沒必要關注其它系統問題。主要有WEB 服務器來實現。 例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。該容器提供的接口嚴格遵照J2EE 規範中 的WEB APPLICATION 標準。咱們把遵照以上標準的WEB 服務器就叫作J2EE 中的WEB 容器。 EJB 容器:Enterprise java bean 容器。更具備行業領域特點。他提供給運行在其中的組件 EJB 各類管理功能。只要知足J2EE 規範的EJB 放入該容器, 立刻就會被容器進行高效率 的管理。而且能夠經過現成的接口來得到系統級別的服務。例如郵件服務、事務管理。 JNDI:(Java Naming & Directory Interface)JAVA 命名目錄服務。主要提供的功能是:提 供一個目錄系統, 讓其它各地的應用程序在其上面留下本身的索引, 從而知足快速查找和定 位分佈式應用程序的功能。 JMS:(Java Message Service)JAVA 消息服務。主要實現各個應用程序之間的通信。包 括點對點和廣播。 JTA:(Java Transaction API)JAVA 事務服務。提供各類分佈式事務服務。應用程序只需 調用其提供的接口便可。 JAF:(Java Action FrameWork)JAVA 安全認證框架。提供一些安全控制方面的框架。讓 開發者經過各類部署和自定義實現本身的個性安全控制策略。 RMI/IIOP:(Remote Method Invocation /internet 對象請求中介協議)他們主要用於經過遠 程調用服務。例如, 遠程有一臺計算機上運行一個程序, 它提供股票分析服務, 咱們能夠在 本地計算機上實現對其直接調用。固然這是要經過必定的規範才能在異構的系統之間進行通 信。RMI 是JAVA 特有的。 七、如何給weblogic 指定大小的內存? (這個問題不做具體回答, 列出來只是告訴讀者可能會遇到什麼問題, 你不須要面面俱到, 什麼都精通。) 在啓動Weblogic 的腳本中(位於所在Domian 對應服務器目錄下的startServerName), 增 加set MEM_ARGS=-Xms32m-Xmx200m, 能夠調整最小內存爲32M, 最大200M 八、如何設定的weblogic 的熱啓動模式(開發模式)與產品發佈模式? 能夠在管理控制檯中修改對應服務器的啓動模式爲開發或產品模式之一。或者修改服務的啓 動文件或者commenv 文件, 增長setPRODUCTION_MODE=true。 九、如何啓動時不需輸入用戶名與密碼? 修改服務啓動文件, 增長 WLS_USER 和WLS_PW 項。也能夠在boot.properties 文件中 增長加密過的用戶名和密碼. 十、在weblogic 管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms 及ejb 或鏈接池等相關信息進行配置後,實際保存在什麼文件中? 保存在此Domain 的config.xml 文件中, 它是服務器的核心配置文件。 十一、說說weblogic 中一個Domain 的缺省目錄結構? 好比要將一個簡單的helloWorld.jsp 放入何目錄下,然的在瀏覽器上就可打入 http://主機:端口號//helloword.jsp 就能夠看到運行結果了? 又好比這其中用到了一個本身寫的javaBean 該如何辦? Domain 目錄服務器目錄applications, 將應用目錄放在此目錄下將能夠做爲應用訪問, 如 果是Web 應用, 應用目錄須要知足Web 應用目錄要求, jsp 文件能夠直接放在應用目錄中, Javabean 須要放在應用目錄的WEB-INF 目錄的classes 目錄中, 設置服務器的缺省應用 將能夠實如今瀏覽器上無需輸入應用名。 12、在weblogic 中發佈ejb 需涉及到哪些配置文件 不一樣類型的EJB 涉及的配置文件不一樣, 都涉及到的配置文件包括 ejb-jar.xml,weblogic-ejb-jar.xmlCMP 實體Bean 通常還須要weblogic-cmp-rdbms-jar.xml 1三、如何在weblogic 中進行ssl 配置與客戶端的認證配置或說說j2ee(標準)進行ssl 的配置? 缺省安裝中使用DemoIdentity.jks 和DemoTrust.jks KeyStore 實現SSL, 須要配置服務器 使用Enable SSL, 配置其端口, 在產品模式下須要從CA 獲取私有密鑰和數字證書, 建立 identity 和trust keystore, 裝載得到的密鑰和數字證書。能夠配置此SSL 鏈接是單向仍是 雙向的。 1四、如何查看在weblogic 中已經發布的EJB? 能夠使用管理控制檯, 在它的Deployment 中能夠查看全部已發佈的EJB 十. EJB 部分 1、EJB 是基於哪些技術實現的?並說出SessionBean 和EntityBean 的區別, StatefulBean 和StatelessBean 的區別。 EJB 包括Session Bean、Entity Bean、Message Driven Bean, 基於JNDI、RMI、JAT 等技術實現。 SessionBean 在J2EE 應用程序中被用來完成一些服務器端的業務操做, 例如訪問數據庫、 調用其餘EJB 組件。EntityBean 被用來表明應用系統中用到的數據。 對於客戶機, SessionBean 是一種非持久性對象, 它實現某些在服務器上運行的業務邏輯。 對於客戶機, EntityBean 是一種持久性對象, 它表明一個存儲在持久性存儲器中的實體的 對象視圖, 或是一個由現有企業應用程序實現的實體。 Session Bean 還能夠再細分爲 Stateful Session Bean 與 Stateless SessionBean, 這兩種 的 Session Bean 均可以將系統邏輯放在 method 之中執行, 不一樣的是 Stateful SessionBean 能夠記錄呼叫者的狀態, 所以一般來講, 一個使用者會有一個相對應的 Stateful SessionBean 的實體。Stateless SessionBean 雖然也是邏輯組件, 可是他卻不負 責記錄使用者狀態, 也就是說當使用者呼叫 Stateless SessionBean 的時候, EJB Container 並不會找尋特定的 Stateless SessionBean 的實體來執行這個 method。換言之, 極可能數 個使用者在執行某個 Stateless SessionBean 的 methods 時, 會是同一個 Bean 的 Instance 在執行。從內存方面來看, Stateful SessionBean 與Stateless SessionBean 比較, Stateful SessionBean 會消耗 J2EE Server 較多的內存, 然而 Stateful SessionBean 的優 勢卻在於他能夠維持使用者的狀態。 二、簡要講一下 EJB 的 7 個 Transaction Level? 3、EJB 與JAVA BEAN 的區別? Java Bean 是可複用的組件, 對Java Bean 並無嚴格的規範, 理論上講, 任何一個Java 類均可以是一個Bean。但一般狀況下, 因爲Java Bean 是被容器所建立(如Tomcat)的, 因此Java Bean 應具備一個無參的構造器, 另外, 一般Java Bean 還要實現Serializable 接口用於實現Bean 的持久性。Java Bean 實際上至關於微軟COM 模型中的本地進程內 COM 組件, 它是不能被跨進程訪問的。Enterprise Java Bean 至關於DCOM, 即分佈式組 件。它是基於Java 的遠程方法調用(RMI)技術的, 因此EJB 能夠被遠程訪問(跨進程、 跨計算機)。但EJB 必須被佈署在諸如Webspere、WebLogic 這樣的容器中, EJB 客戶從 不直接訪問真正的EJB 組件, 而是經過其容器訪問。EJB 容器是EJB 組件的代理, EJB 組 件由容器所建立和管理。客戶經過容器來訪問真正的EJB 組件。 4、EJB 包括(SessionBean,EntityBean)說出他們的生命週期, 及如何管理事務的? SessionBean:Stateless Session Bean 的生命週期是由容器決定的, 當客戶機發出請求要 創建一個Bean 的實例時, EJB 容器不必定要建立一個新的Bean 的實例供客戶機調用, 而 是隨便找一個現有的實例提供給客戶機。當客戶機第一次調用一個Stateful SessionBean 時, 容器必須當即在服務器中建立一個新的Bean 實例, 並關聯到客戶機上, 之後此客戶機 調用Stateful SessionBean 的方法時容器會把調用分派到與此客戶機相關聯的Bean 實例。 EntityBean:Entity Beans 能存活相對較長的時間, 而且狀態是持續的。只要數據庫中的數 據存在, Entity beans 就一直存活。而不是按照應用程序或者服務進程來講的。即便EJB 容器崩潰了, Entity beans 也是存活的。Entity Beans 生命週期可以被容器或者 Beans 自 己管理。 EJB 經過如下技術管理實務:對象管理組織(OMG)的對象實務服務(OTS), Sun Microsystems 的Transaction Service(JTS)、Java Transaction AP(I JTA), 開發組(X/Open) 的XA 接口。 5、EJB 容器提供的服務 主要提供聲明週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發行管理等服務。 6、EJB 的激活機制 以Stateful Session Bean 爲例:其Cache 大小決定了內存中能夠同時存在的Bean 實例的 數量, 根據MRU 或NRU 算法, 實例在激活和去激活狀態之間遷移, 激活機制是當客戶端 調用某個EJB 實例業務方法時, 若是對應EJB Object 發現本身沒有綁定對應的Bean 實例 則從其去激活Bean 存儲中(經過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前 會調用對應的ejbActive 和ejbPassivate 方法。 7、EJB 的幾種類型 會話(Session)Bean, 實體(Entity)Bean 消息驅動的(Message Driven)Bean 會話Bean 又可分爲有狀態(Stateful)和無狀態(Stateless)兩種 實體Bean 可分爲Bean 管理的持續性(BMP)和容器管理的持續性(CMP)兩種 8、客服端調用EJB 對象的幾個基本步驟 設置JNDI 服務工廠以及JNDI 服務地址系統屬性, 查找Home 接口, 從Home 接口調用 Create 方法建立Remote 接口, 經過Remote 接口調用其業務方法。 十一. webservice 部分 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 註冊, 以使別的企業可以發現的訪問協議的實現標準。 二、CORBA 是什麼?用途是什麼? CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture), 由 對象管理組織 (Object ManagementGroup, 縮寫爲 OMG)標準化。它的組成是接口定義語 言(IDL),語言綁定(binding:也譯爲聯編)和容許應用程序間互操做的協議。其目的爲:用不一樣 的程序設計語言書寫在不一樣的進程中運行, 爲不一樣的操做系統開發。 3. Linux 4、LINUX 下線程, GDI 類的解釋。 LINUX 實現的就是基於核心輕量級進程的"一對一"線程模型, 一個線程實體對應一個核心輕 量級進程, 而線程之間的管理在覈外函數庫中實現。 GDI 類爲圖像設備編程接口類庫。 5. 問得稀裏糊塗的題 6、四種會話跟蹤技術 會話做用域ServletsJSP 頁面描述 page 否是表明與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可 以帶有任何的include 指令, 可是沒有 include 動做)表示。這既包括 servlet 又包括被編 譯成 servlet 的 JSP 頁面 request 是是表明與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多 個頁面, 涉及多個Web 組件(因爲 forward 指令和 include 動做的關係) session 是是表明與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話能夠也常常會跨越多個客戶機請求 application 是是表明與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序, 包括多個頁面、請求和會話的一個全局做用域 七、簡述邏輯操做(&,|,^)與條件操做(&&,||)的區別。 區別主要答兩點:a.條件操做只能操做布爾型的,而邏輯操做不只能夠操做布爾型,並且能夠 操做數值型 b.邏輯操做不會產生短路 十二.其餘 1、請用英文簡單介紹一下本身. 4、WEB SERVICE 名詞解釋。JSWDL 開發包的介紹。JAXP、JAXM 的解釋。SOAP、 UDDI,WSDL 解釋。 二、請把http://tomcat.apache.org/ 首頁的這一段話用中文翻譯一下? Apache Tomcat is the servlet container that is used in the officialReference Implementation for theJava ServletandJavaServerPages technologies. The Java Servlet and JavaServer Pagesspecifications are developed by Sun under theJavaCommunity Process. Apache Tomcat is developed in an open andparticipatory environment and released under theApacheSoftware License. Apache Tomcat is intended to be a collaboration ofthe best-of-breed developers from around the world. We invite you toparticipate in this open development project. To learn more about gettinginvolved,click here. ApacheTomcat powers numerous large-scale, mission-critical web applications across adiverse range of industries and organizations. Some of these users and theirstories are listed on thePoweredBy wiki page. 3、美資軟件公司JAVA 工程師電話面試題目 1. Talk about overriding, overloading. 2. Talk about JAVA design patterns you known. 3. Talk about the difference between LinkList, ArrayList and Victor. 4. Talk about the difference between an Abstract class and an Interface. 5. Class a = new Class(); Class b = new Class(); if(a == b) returns true or false, why? 6. Why we use StringBuffer when concatenating strings? 7. Try to explain Singleton to us? Is it thread safe? If no, how to make itthread safe? 8. Try to explain Ioc? 9. How to set many-to-many relationship in Hibernate? 10. Talk about the difference between INNER JOIN and LFET JOIN. 11. Why we use index in database? How many indexes is the maximum in one tableas your suggestion? 12. When ‘Final’ is used in class, method and property, what dose it mean? 13. Do you have any experience on XML? Talk about any XML tool youused ,e.g. JAXB, JAXG. 14. Do you have any experience on Linux? 15. In OOD what is the reason when you create a Sequence diagram? Administrator 10:34:20 1, 堆和棧的區別, 有一個64k 的字符串, 是放到堆上, 仍是放到棧上, 爲何? 2, 何時用到接口, 何時用到抽象類, 兩者區別 3, 有一個100萬的數組, 裏邊有兩個市重複的, 如何設計算法找到。 4, 設計數據庫時, n 維, 如何設計。