咬定青山不放松,立根原在破巖中。千磨萬擊還堅勁,任爾東西南北風。

          《竹石》 點擊圖標與我實時聊天

          java筆試知識點

           

          HashMap&Hashtable:

          Map接口的實現類,將惟一鍵映射到特定的值上:<key,value>.

          HashMap 允許keyvaluenull.

          Hashtable的方法是Synchronize.多個線程訪問Hashtable,不需要為方法實現同步.

           

          Collection &Collections:

          Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法.

          Collection是個java.util下的接口,它是各種集合結構的父接口.

           

          Set里的元素是不能重復的,iterator()方法來區分重復與否.

          equals()是判讀兩個Set是否相等.equals()==方法決定引用值是否指向同一對象.

          equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值.

          ArrayList&Vector:

          同步性:Vector是線程安全的,也就是說是同步的,ArrayList是線程序不安全的,不是同步的

          數據增長:當需要增長時,Vector默認增長為原來一培,ArrayList卻是原來的一半

          ArrayList,Vector, LinkedList的存儲性能和特性

          ArrayListVector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList,LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快.

           

          Collection –List(LinkedList| ArrayList| Vector(Stack)) & Set

          Map (Hashtable ,HashMap …)

          Java不支持多繼承,某個類或對象要使用分別在幾個類或對象里面的方法或屬性,使用接口有更高的靈活性:接口中沒有任何實現代碼.當一個類實現了接口以后,該類要實現接口里面所有的方法和屬性,并且接口里面的屬性在默認狀態下面都是public static,所有方法默認情況下是public.一個類可以實現多個接口.

          一個類被聲明為final類型,表示該類不能被繼承,是頂級類

           

          匿名的內部類是沒有名字的內部類.不能繼承其它類,但一個內部類可以作為一個接口,由另一個內部類實現

          靜態內部類:創建一個static內部類的對象,不需要一個外部類對象;不能從一個static內部類的對象訪問外部類對象

           

          Overload&Override:

          重寫Overriding是父類與子類之間多態性的一種表現,

          重載Overloading是一個類中多態性的一種表現.

          如果在子類中定義某方法與其父類有相同的名稱和參數:該方法被重寫 (Overriding).子類的對象使用這個方法時,將調用子類中的定義,.如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型:方法的重載.

          Overloaded的方法是可以改變返回值的類型.

          抽象類與接口都用于抽象,但是抽象類可以有自己的部分實現,而接口則完全是一個標識(同時有多重繼承的功能).

          接口可以繼承接口.抽象類可以實現接口,抽象類可以繼承實體類,但前提是實體類必須有明確的構造函數.

          構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading.

          String類是final類故不可以繼承.

          垃圾回收的優點和原理.并考慮2種回收機制.

          垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域".

          回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收.

          try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,return前還是后? 會執行,return前執行.

          運行時異常與一般異常有何異同?

          方法必須聲明拋出可能發生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常

          線程:

          線程同步的方法.

          wait():使一個線程處于等待狀態,并且釋放所持有的對象的lock.

          sleep():使一個正在運行的線程處于睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常.

          notify():喚醒一個處于等待狀態的線程,不能確切的喚醒某個等待狀態的線程,JVM確定,而且不是按優先級.

          Allnotity():喚醒所有處于等待狀態的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭.

           

          sleep() wait() 有什么區別?

          sleep()方法是使線程停止一段時間的方法.sleep 時間間隔期滿后,線程不一定立即恢復執行.這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)"醒來"的線程具有更高的優先級 (b)正在運行的線程因為其它原因而阻塞.wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到.

          啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處于可運行狀態,這意味著它可以由JVM調度并執行.這并不意味著線程就會立即運行.run()方法可以產生必須退出的標志來停止一個線程.

          sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用sleep不會釋放對象鎖。

          waitObject類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。

          當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?

          不能,一個對象的一個synchronized方法只能由一個線程訪問.

          多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?

          多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口

          同步的實現方面有兩種,分別是synchronized,waitnotify

          談談final, finally, finalize的區別.

          final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

          finally是異常處理語句結構的一部分,表示總是執行。

          finalizeObject類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。

           

          &&&的區別.&是位運算符.&&是布爾邏輯運算符.

           

          String s = new String("xyz");創建了幾個String Object?

            兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s.

           

          Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

          short s1 = 1; s1 = s1 + 1;有錯,s1short,s1+1int,不能顯式轉化為short.可修改為s1 =(short)(s1 + 1) .short s1 = 1; short s1 = 1;s1 += 1正確.

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

          當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,這里是值傳遞.Java 編程語言只由值傳遞參數.當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用.對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的.

          swtich是否能作用在byte,是否能作用在long,是否能作用在String?

          switch(expr1),expr1是一個整數表達式.因此傳遞給 switch case 語句的參數應該是 int short char 或者 byte.long,string 都不能作用于swtich.

          作用域public,private,protected,以及不寫時的區別

          作用域當前類同一package 子孫類其他package

          public √ √ √ √

          protected √ √ √ ×

          friendly √ √ × ×

          private √ × × ×

          不寫時默認為friendly

          floatfloat f=3.4是否正確? 不正確.精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4

          STRINGStringBuffer的區別.

          STRING的長度是不可變的, StringBuffer的長度是可變的.如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffertoString()方法

          JAVA平臺提供了兩個類:StringStringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers來動態構造字符數據。

          JAVA類實現序列化的方法(二種)如在COLLECTION框架中,實現比較要實現什么樣的接口?

          JAVA類實現序例化的方法是實現java.io.Serializable接口

          Collection框架中實現比較要實現Comparable 接口和 Comparator 接口  

          char型變量中能不能存貯一個中文漢字?為什么?

          是能夠定義成為一個中文的,因為java中以unicode編碼,一個char16個字節,所以放一個中文是沒問題的

           

          JDBC,xml,JSP,Servlet

          JavaScript如何校驗數字型?

          var re=/^d{1,8}$|.d{1,2}$/;

          var str=document.form1.all(i).value;

          var r=str.match(re);

          if (r==null) {

          sign=-4;

          break;

          }

          else document.form1.all(i).value=parseFloat(str);

          數據庫方面:

          存儲過程和函數的區別

          存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,

          而函數通常是數據庫已定義的方法,它接收參數并返回某種類型的值并且不涉及特定用戶表.

          事務是什么?

          事務是作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務:

          原子性:事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行.

          一致性:事務在完成時,必須使所有的數據都保持一致狀態.在相關數據庫中,所有規則都必須應用于事務的修改,以保持所有數據的完整性.事務結束時,所有的內部數據結構( B 樹索引或雙向鏈表)都必須是正確的.

          隔離性:由并發事務所作的修改必須與任何其它并發事務所作的修改隔離.事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據.這稱為可串行性,因為它能夠重新裝載起始數據,并且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同.

          持久性:事務完成之后,它對于系統的影響是永久性的.該修改即使出現系統故障也將一直保持.

           

          游標的作用?如何知道游標已經到了最后?

          游標用于定位結果集的行,通過判斷全局變量@@FETCH_STATUS可以判斷是否到了最后,通常此變量不等于0表示出錯或到了最后.

          觸發器分為事前觸發和事后觸發,這兩種觸發有和區別.語句級觸發和行級觸發有何區別.

          事前觸發器運行于觸發事件發生之前,而事后觸發器運行于觸發事件發生之后.通常事前觸發器可以獲取事件之前和新的字段值.語句級觸發器可以在語句執行前或后執行,而行級觸發在觸發器所影響的每一行觸發一次.

          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文件中.

          Class.forName的作用?為什么要用? 調用該訪問返回一個以字符串指定類名的類的對象.

          JDOJava對象持久化的新的規范,java data object的簡稱,也是一個用于存取某種數據倉庫中的對象的標準化API.JDO提供了透明的對象存儲,因此對開發人員來說,存儲數據對象完全不需要額外的代碼(JDBC API的使用).這些繁瑣的例行工作已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上.另外,JDO很靈活,因為它可以在任何數據底層上運行.JDBC只是面向關系數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,比如關系數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強.

          Servlet的生命周期?

          servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束.這個生存期由javax.servlet.Servlet接口的init,servicedestroy方法表達. àServlet被服務器實例化,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doGet/doPost,當服務器決定將實例銷毀的時候調用其destroy方法.

          jsp有哪些內置對象?作用分別是什么?

          request用戶端請求,此請求會包含來自GET/POST請求的參數. | 表示HttpServletRequest對象.它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie, header, session數據的有用的方法

          response網頁傳回用戶端的回應

          表示HttpServletResponse對象,并提供了幾個用于設置送回瀏覽器的響應的方法(cookies,頭信息等)

          pageContext網頁的屬性是在這里管理   | 表示一個javax.servlet.jsp.PageContext對象.它是用于方便存取各種范圍的名字空間、servlet相關的對象的API,并且包裝了通用的servlet相關功能的方法

          session與請求有關的會話期

          表示一個請求的javax.servlet.http.HttpSession對象.Session可以存貯用戶的狀態信息

          application servlet 正在執行的內容

          表示一個javax.servle.ServletContext對象.這有助于查找有關servlet引擎和servlet環境的信息

          out用來傳送回應的輸出

          javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送輸出結果

          config servlet的構架部件

          表示一個javax.servlet.ServletConfig對象.該對象用于存取servlet實例的初始化參數.

          page JSP網頁本身  |表示從該頁面產生的一個servlet實例

          exception針對錯誤網頁,未捕捉的例外

          jsp有哪些動作?作用分別是什么?

          jsp:include:在頁面被請求的時候引入一個文件.

          jsp:useBean:尋找或者實例化一個JavaBean.

          jsp:setProperty:設置JavaBean的屬性.

          jsp:getProperty:輸出某個JavaBean的屬性.

          jsp:forward:把請求轉到一個新的頁面.

          jsp:plugin:根據瀏覽器類型為Java插件生成OBJECTEMBED標記

          四種會話跟蹤技術/會話作用域:

          page一個頁面相關的對象和屬性.

          requestWeb 客戶機發出的一個請求相關的對象和屬性.

          session與某個 Web 客戶機的一個用戶體驗相關的對象和屬性.

          application整個 Web 應用程序相關的對象和屬性.

          JSP動態INCLUDE與靜態INCLUDE的區別?

          動態INCLUDEjsp:include動作實現 <jsp:include page="included.jsp" flush="true" />

          它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數

          靜態INCLUDEinclude偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面

          <%@ include file="included.htm" %>

          兩種跳轉方式分別是什么?有什么區別?

          <jsp:include page="included.jsp" flush="true">

          <jsp:forward page= "nextpage.jsp"/>

          前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面.執行完后還會回來,相當于函數調用.并且可以帶參數.后者完全轉向新頁面,不會再回來.相當于go to 語句.

          JAVA Servlet APIforward() redirect()的區別?

          前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接.這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址.所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隱藏實際的鏈接.在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法.

          JSP頁面里是怎么分頁?

          頁面需要保存以下參數:

          總行數:根據sql語句得到總行數

          每頁顯示行數:設定值

          當前頁數:請求參數

          頁面根據當前頁數和每頁行數計算出當前頁第一行行數,定位結果集到此行,對結果集取出每頁顯示行數的行即可.

          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類實現相同接口規范業務邏輯一致性

          開發中都用到了那些設計模式?用在什么場合?

          每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心.通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作.主要用到了MVC的設計模式.用來開發JSP/Servlet或者J2EE的相關應用.簡單工廠模式等.

          J2EE中常用的名詞解釋:

          web 容器:給處于其中的應用程序組件:JSP,Servlet提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互. EJB容器:提供給運行在其中的組件EJB各種管理功能.只要滿足J2EE規范的EJB放入該容器,馬上就會被容器進行高效率的管理.并且可以通過現成的接口來獲得系統級別的服務.例如郵件服務、事務管理.

          JNDI:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應用程序.

          JMS:JAVA消息服務.主要實現各個應用程序之間的通訊.包括點對點和廣播.

          JTA:JAVA事務服務.提供各種分布式事務服務.應用程序只需調用其提供的接口即可.

          RMI/IIOP:主要用于通過遠程調用服務.例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,我們可以在本地計算機上實現對其直接調用.當然這是要通過一定的規范才能在異構的系統之間進行通信.RMIJAVA特有的.

          SSH:

          Hibernate工作原理及為什么要用

          讀取并解析配置文件à讀取并解析映射信息,創建SessionFactoryà打開Sesssionà創建事務Transation

          à持久化操作à提交事務à關閉Session à關閉SesstionFactory

          1.HibernateJDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼.

          2.Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM實現.他很大程度的簡化DAO層的編碼工作

          3.Hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性.

          4.Hibernate的性能非常好是輕量級框架.映射的靈活性很出色.支持各種關系數據庫,從一對一到多對多的各種復雜關系.

          Hibernate是如何延遲加載?

          1. Hibernate2延遲加載實現:a)實體對象 b)集合(Collection)

          2. Hibernate3 提供了屬性的延遲加載功能

          Hibernate在查詢數據的時候,數據并沒有存在與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器的性能.

          Hibernate中怎樣實現類之間的關系?(:一對多、多對多的關系)

          類與類之間的關系主要體現在表與表之間的關系進行操作,它們都市對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-oneone-to-manymany-to-many

          Hibernate的緩存機制

          1. 內部緩存存在Hibernate中又叫一級緩存,屬于應用事物級緩存

          2. 二級緩存: a) 應用級緩存b) 分布式緩存

          條件:數據不會被第三方修改、數據大小在可接受范圍、數據更新頻率低、同一數據被系統頻繁使用、非關鍵數據

          c) 第三方緩存的實現

          Hibernate的查詢方式

          SqlCriteria,object comptosition Hql (屬性查詢,參數查詢.命名參數查詢,關聯查詢,分頁查詢,統計函數)

          如何優化Hibernate

          1.使用雙向一對多關聯,不使用單向一對多

          2.靈活使用單向一對多關聯

          3.不用一對一,用多對一取代

          4.配置對象緩存,不使用集合緩存

          5.一對多集合使用Bag,多對多集合使用Set

          6. 繼承類使用顯式多態

          7. 表字段要少,表關聯不要怕多,有二級緩存撐腰

          Struts工作機制?為什么要使用Struts

          工作機制:

          Struts的工作流程:web應用啟動時就會加載初始化ActionServlet,ActionServletstruts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當ActionServlet接收到一個客戶請求時,將執行如下流程.

          -(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;

          -(2)如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中;

          -(3)根據配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionFormvalidate()方法;

          -(4)如果ActionFormvalidate()返回null或返回一個不包含ActionMessageActuibErrors對象, 表示表單驗證成功;

          -(5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,如果相應的 Action實例不存在,就先創建這個實例,然后調用Actionexecute()方法;

          -(6)Actionexecute()返回ActionForward對象,ActionServlet在把客戶請求轉發給 ActionForward對象指向的JSP組件;

          -(7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;

          為什么要用:

          JSPServletJavaBean技術的出現給我們構建強大的企業應用系統提供了可能.但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生.

          基于Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件

          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屬性、國際化的提示和消息.

          Strutsvalidate框架是如何驗證的

          struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調用.

          Struts的設計模式

          MVC模式: web應用程序啟動時就會加載并初始化ActionServlet.用戶提交表單時,一個配置好的ActionForm對象被創建,并被填入表單相應的數據, ActionServlet根據Struts-config.xml文件配置好的設置決定是否需要表單驗證,如果需要就調用ActionForm Validate驗證后選擇將請求發送到哪個Action,如果Action不存在,ActionServlet會先創建這個對象,然后調用 Actionexecute().execute()ActionForm對象中獲取數據,完成業務邏輯,返回ActionForward對象,ActionServlet再把客戶請求轉發給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態的網頁,返回給客戶.

          MVC的各個部分都有那些技術來實現?如何實現?

          MVCModelViewController的簡寫."Model" 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現.這些組件可以進行交互和重用.

          spring工作機制及為什么要用?

          1.spring mvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責對請求進行真正的處理工作.

          2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.

          3.DispatcherServlet請請求提交到目標Controller

          4.Controller進行業務邏輯處理后,會返回一個ModelAndView

          5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

          6.視圖對象負責渲染返回給客戶端.

          為什么用:

          AOP讓開發人員可以創建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中.使用 AOP ,公共服務 (比如日志、持久性、事務等)就可以分解成方面并應用到域對象上,同時不會增加域對象的對象模型的復雜性.

          IOC允許創建一個可以構造對象的應用環境,然后向這些對象傳遞它們的協作對象.正如單詞倒置所表明的,IOC 就像反過來的 JNDI.沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用其協作對象構造的.因此是由容器管理協作對象(collaborator).

          Spring即是一個AOP框架,也是一IOC容器. Spring 最好的地方是它有助于您替換對象.有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協作對象).然后可以很容易地在需要時替換具有類似接口的協作對象.

          Spring 框架是一個分層架構, 7 個定義良好的模塊組成.Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現.每個模塊的功能如下:

          核心容器:核心容器提供 Spring 框架的基本功能.核心容器的主要組件是 BeanFactory,它是工廠模式的實現.BeanFactory 使用控制反轉 (IOC)模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開.

          Spring 上下文:Spring 上下文是一個配置文件, Spring 框架提供上下文信息.Spring 上下文包括企業服務,例如 JNDIEJB、電子郵件、國際化、校驗和調度功能.

          Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中.所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP.Spring AOP 模塊為基于 Spring 的應用程序中的對象提供了事務管理服務.通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中.

          Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息.異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接).Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構.

          Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDOHibernate iBatis SQL Map.所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構.

          Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基于 Web 的應用程序提供了上下文.所以,Spring 框架支持與 Jakarta Struts 的集成.Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作.

          Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現.通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSPVelocityTilesiText POI.

          Spring 框架的功能可以用在任何 J2EE 服務器中,大多數功能也適用于不受管理的環境.Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象.毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web EJB)、獨立應用程序、測試環境之間重用.

          IOC AOP

          控制反轉模式(也稱作依賴性介入)的基本概念是:不創建對象,但是描述創建它們的方式.在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務.容器( Spring 框架中是 IOC 容器) 負責將這些聯系在一起.

          在典型的 IOC 場景中,容器創建了所有對象,并設置必要的屬性將它們連接在一起,決定什么時間調用方法.

          面向方面的編程

          面向方面的編程, AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化.AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中.

          AOP IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的復雜問題.在典型的面向對象開發方式中,可能要將日志記錄語句放在所有方法和 Java 類中才能實現日志功能. AOP 方式中,可以反過來將日志服務模塊化,并以聲明的方式將它們應用到需要日志的組件上.當然,優勢就是 Java 類不需要知道日志服務的存在,也不需要考慮相關的代碼.所以, Spring AOP 編寫的應用程序代碼是松散耦合的.

          AOP 的功能完全集成到了 Spring 事務管理、日志和其他各種特性的上下文中.

          IOC 容器

          Spring 設計的核心是 org.springframework.beans ,它的設計目標是與 JavaBean 組件一起使用.這個包通常不是由用戶直接使用,而是由服務器將其用作其他多數功能的底層中介.下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,允許通過名稱創建和檢索對象.BeanFactory 也可以管理對象之間的關系.

          BeanFactory 支持兩個對象模型.

          單態模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索.Singleton 是默認的也是最常用的對象模型.對于無狀態服務對象很理想.

          原型模型確保每次檢索都會創建單獨的對象.在每個用戶都需要自己的對象時,原型模型最適合.

          bean 工廠的概念是 Spring 作為 IOC 容器的基礎.IOC 將處理事情的責任從應用程序代碼轉移到框架.正如我將在下一個示例中演示的那樣,Spring 框架使用 JavaBean 屬性和配置數據來指出必須設置的依賴關系.

          學習Struts,你有什么收獲: 你在用Struts做項目的過程中感到Struts有什么用.

                   分層:職責單一.最重要的是:數據與顯示分開. MVC框架又把顯示分離出了控制.

                   JSP只專注于顯示,控制交給Servlet.控制器的職責:得到表單數據,調用模型,轉向.

                   Struts框架是經典的MVC,ActionServlet根據URL進行分發到不同的Action.

                   ActionMapping:一次業務請求對應一個具體的Action配置信息.

                   Action:創建Action,放到Map.執行execute方法.返回ActionForward:

                   Action中不要混入業務邏輯層的代碼.在業務邏輯層拋出異常,Action中捕捉和處理.

                   聲明式異常:ExceptionHandler.默認轉到input.配置了path,path優先input.

                   ActionForm:創建ActionForm實例,放到scope,收集數據放到ActionForm.

                   Converter轉換器:把表單中的字符串轉成ActionForm中指定的類型.

                   表單級驗證:驗證表單數據,注意與異常概念上的區別.默認轉向到input指向的頁面.

                   ActionForward:封裝了轉向信息.可以定義成轉發或重定向.

                   動態創建ActionForward,動態修改URL比如參數的添加.

                   DispatchAction:一個模塊CRUD可以得到統一處理.方法參數和返回值必須和execute一樣.

                   頁面的調用的參數值必須和方法名一樣.動態調用.參數需要執行,采用parameter屬性.

          Hibernate:

          *       關聯映射:       2009.9.24-9.26

                   對象模型-關系模型.

                   實體類的普通數據--映射文件中的property.

                   實體類的引用,Set--對應實體類的映射文件的標簽:

                   many-to-one,one-to-one,one-to-many,many-to-many

          注意理解對應實體類的映射文件:

                   如果某個實體類有引用對象,或者引用關聯對象的集合.

                   那么在這個實體類對應的映射文件中就有響應的標簽來關聯這種關系.

                   如果沒有引用或集合,那么這個實體類對應的映射文件就只是property.

          約定:

                   單向關聯:A->B.加載方A,被加載方:B.

                   雙向關聯A<->B.

                             A->B:加載方A -> 被加載方:B.

                             B->A:絕對即A<->B,A在左,A:加載方,B:被加載方.

                                                被加載方B -> 加載方A.

                   加載方,即從一方加載到另一方的第一方.

                   如果加載方對象模型中有引用,就在加載方的映射文件中配置關系標簽.

                   如果被加載方也有對象的引用,也在被加載方配置關系標簽.

                   單向的,就是從加載方加載到被加載方.

                   雙向的,除了提供從加載方加載到被加載方,還會提供從被加載方加載到加載方(絕對的,從加載方看).

                   相對來說,也是從加載方加載到被加載方看(從被加載方主動加載來看)

                   一般配置雙向關聯的映射文件,從加載方加載到被加載方,配置跟單向一樣.

                   從被加載方加載到加載方(絕對),要在被加載方持有加載方的引用對象,

                   在被加載方中添加標簽,指示如何加載加載方.

          1.多對一關聯:

          加載方配置<many-to-one>,會在多的一端加入一個(字段)外鍵,指向一的一端(參照一的一端的主鍵).

          2.一對一主鍵關聯:

          加載方加入one-to-one標簽,指示hibernate怎么加載它的關聯對象:默認根據主鍵加載.

          讓兩個實體對象的id(主鍵)保持相同, 加載方主鍵生成策略是foreign,被加載方是native.

          就可以根據加載方的id找到被加載方的id,因為是主鍵值相同,所以可以加載.

          必須配置constrained="true":表明當前主鍵上存在一個外鍵約束,主鍵作為外鍵參照了另一個表的主鍵

          雙向:被加載方的對象模型持有加載方的引用.在被加載方也配置one-to-one標簽,

          默認根據主鍵加載.不用配置constrained

          3.一對一唯一外鍵關聯:

          在加載方加入外鍵.采用<many-to-one>標簽,many-to-one會在多的一端添加一個外鍵指向一的一端.

          因為是外鍵可以重復,指定多的一端的unique=true,限制了多的一端的多重性為一. 就映射一對一唯一外鍵關聯.

          雙向:在被加載方采用one-to-one標簽,指定如何加載關聯對象,默認根據主鍵加載,

          必須指定property-ref,因為是外鍵關聯,不再通過主鍵加載,而是通過外鍵加載.

          4.一對多關聯:

          一的一端持有多的一端的集合引用.在一的端,即加載方勇set集合來映射.

          在加載方配置one-to-many標簽.在多的一端,即被加載方加入外鍵,指向加載方.

          一對多單向關聯,存儲加載方時(一的一端),要先存儲被加載方(多的一端).

          會發出多余的 update語句更新外鍵的值.因為維護關系是在一的一端.

          如果設置外鍵非空,就加不上數據.通常做成雙向關聯.維護的關系是從多指向一.在多的一端來存儲.

          雙向:多的一端存儲,要先存儲一的一端,就不會發出多余的update語句.關系是多指向一.

          并使一的一端失效設置inverse屬性.不維護一指向多的關系了.交給多的一端來維護.

          一對多關聯映射:在多的一端加入一個外鍵指向一的一端,它維護的關系是一指向多

          多對一關聯映射:在多的一端加入一個外鍵指向一的一端,它維護的關系是多指向一

          (Person->Group)在多的一端添加many-to-one標簽.

          5.多對多關聯:

          many-to-many,借助第三方表完成映射.分別添加兩個外鍵分別指向兩張表的主鍵.

          雙向:字段名必須一致.

          *       hibernate flush:按照save(insert),updatedelete順序提交相關操作       

          *       hibernate支持lazy策略只有在session打開狀態下有效,否則拋出LazyInitializationException異常

          [關于Hibernatelazy]       2009.9.26頓悟...

          1.lazy:只有真正使用該對象時,才會創建,對于hibernate而言,真正使用的時候才會發出sql. lazy特性只對普通屬性起作用

          2.理解這句話:

          load加載對象時,由于是對象,所以支持延遲加載,不會發出select語句.

          使用對象時,就是使用對象里的屬性.由于是屬性,不支持延遲加載,會馬上發出SQL語句.

          如果通過load加載到的對象,這個對象還有一個引用對象,通過get方法得到該引用對象,

          由于得到的是一個對象,所以也支持延遲加載,是不會發出select語句的.

          只有使用該引用對象的屬性時,由于lazy屬性只對普通屬性起作用,所以這時會發出SQL語句.

          3.總之:

          如果加載上來的是對象,那么會延遲加載,HIbernate幫我們生成的是一個代理對象,是不會發出select語句.

          只有真正使用對象時,即要使用對象里的屬性時,才會發出SQL語句的.

          4.hibernate支持lazy策略只有在session打開狀態下有效,否則拋出LazyInitializationException 異常

          5.支持lazy策略,與只對屬性起作用是相反的:

          支持lazy策略,表示支持延遲加載,不會發出select語句.

          lazy只對屬性起作用,表示只有使用屬性的時候,才會發出SQL語句.

          EJB

          EJB是基于哪些技術實現的?并說出SessionBeanEntityBean的區別,StatefulBeanStatelessBean的區別.

          EJB包括Session BeanEntity BeanMessage Driven Bean,基于JNDIRMIJAT等技術實現.

          SessionBeanJ2EE應用程序中被用來完成一些服務器端的業務操作,例如訪問數據庫、調用其他EJB組件.EntityBean被用來代表應用系統中用到的數據.對于客戶機,SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯.EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體.

          Session Bean:Stateful Session Bean Stateless Session Bean ,這兩種的 Session Bean都可以將系統邏輯放在 method之中執行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體.

          Stateless Session Bean 雖然也是邏輯組件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實體來執行這個 method.換言之,很可能數個使用者在執行某個 Stateless Session Bean methods ,會是同一個 Bean Instance 在執行.

          從內存方面來看, Stateful Session Bean Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優勢卻在于他可以維持使用者的狀態

          EJBJAVA 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必須被布署在諸如WebspereWebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問.EJB容器是EJB組件的代理,EJB組件由容器所創建和管理.客戶通過容器來訪問真正的EJB組件.

          EJB容器提供的服務:聲明周期管理、代碼產生、持續性管理、安全、事務管理、鎖和并發行管理等服務.

          EJB的角色和三個對象

          EJB角色主要包括Bean開發者應用組裝者部署者系統管理員 EJB容器提供者 EJB服務器提供者

          三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean

          EJB的類型

          會話(Session)Bean ,實體(Entity)Bean 消息驅動的(Message Driven)Bean

          會話Bean又可分為有狀態(Stateful)和無狀態(Stateless)兩種

          實體Bean可分為Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種

          bean 實例的生命周期

          對于Stateless Session BeanEntity BeanMessage Driven Bean一般存在緩沖池管理,而對于Entity BeanStatefull Session Bean存在Cache管理,通常包含創建實例,設置上下文、創建EJB Object(create)、業務方法調用、remove等過程,對于存在緩沖池管理的Bean,create之后實例并不從內存清除,而是采用緩沖池調度機制不斷重用實例,而對于存在Cache管理的Bean則通過激活和去激活機制保持Bean的狀態并限制內存中實例數量.

           

          激活機制

          Statefull Session Bean 為例:Cache大小決定了內存中可以同時存在的Bean實例的數量,根據MRUNRU算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,如果對應EJB Object發現自己沒有綁定對應的Bean實例則從其去激活Bean存儲中(通過序列化機制存儲實例)回復(激活)此實例.狀態變遷前會調用對應的ejbActiveejbPassivate方法.

          remote接口和home接口主要作用

          remote接口定義了業務方法,用于EJB客戶端調用業務方法

          home接口是EJB工廠用于創建和移除查找EJB實例

          客服端調用EJB對象的幾個基本步驟

          設置JNDI服務工廠以及JNDI服務地址系統屬性

          查找Home接口

          Home接口調用Create方法創建Remote接口

          通過Remote接口調用其業務方法

          SOAPUDDI

          SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協議.

          UDDI 的目的是為電子商務建立標準;UDDI是一套基于Web的分布式的為Web Service提供的信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標準.

           

          CORBA是什么?用途是什么?

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

          LINUX下線程,GDI類的解釋.

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

          weblogic

          1 如何給weblogic指定大小的內存?

          在啟動Weblogic的腳本中(位于所在Domian對應服務器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調整最小內存為32M,最大200M

          2   如何設定的weblogic的熱啟動模式(開發模式)與產品發布模式?

          可以在管理控制臺中修改對應服務器的啟動模式為開發或產品模式之一.或者修改服務的啟動文件或者commenv文件,增加set PRODUCTION_MODE=true.

          3   如何啟動時不需輸入用戶名與密碼?

          修改服務啟動文件,增加 WLS_USERWLS_PW.也可以在boot.properties文件中增加加密過的用戶名和密碼.

          4   weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jmsejb或連接池等相關信息進行配置后,實際保存在什么文件中?

          保存在此Domainconfig.xml文件中,它是服務器的核心配置文件.

          5    說說weblogic中一個Domain的缺省目錄結構?

          比如要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入http://主機:端口號//helloword.jsp就可以看到運行結果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?

          Domain目錄"服務器目錄"applications,將應用目錄放在此目錄下將可以作為應用訪問,如果是Web應用,應用目錄需要滿足Web應用目錄要求,jsp文件可以直接放在應用目錄中,Javabean需要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺省應用將可以實現在瀏覽器上無需輸入應用名.

          6   如何查看在weblogic中已經發布的EJB?

          可以使用管理控制臺,在它的Deployment中可以查看所有已發布的EJB

          7   如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置

          缺省安裝中使用DemoIdentity.jksDemoTrust.jks KeyStore實現SSL,需要配置服務器使用Enable SSL,配置其端口,在產品模式下需要從CA獲取私有密鑰和數字證書,創建identitytrust keystore,裝載獲得的密鑰和數字證書.可以配置此SSL連接是單向還是雙向的.

             8、在weblogic中發布ejb需涉及到哪些配置文件

          不同類型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實體Bean一般還需要weblogic-cmp-rdbms-jar.xml

             9EJB需直接實現它的業務接口或Home接口嗎,請簡述理由.

          遠程接口和Home接口不需要直接實現,他們的實現代碼是由服務器產生的,程序運行中對應實現類會作為對應接口類型的實例被使用.

           10、說說在weblogic中開發消息Bean時的persistentnon-persisten的差別

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

          posted on 2010-03-15 11:16 任小為 閱讀(1041) 評論(0)  編輯  收藏 所屬分類: java


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


          網站導航:
           

          導航

          留言簿

          隨筆分類

          積分與排名

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 沧源| 育儿| 安阳县| 隆回县| 高碑店市| 惠州市| 瑞丽市| 虹口区| 瑞昌市| 琼海市| 蕲春县| 思茅市| 纳雍县| 吴忠市| 博湖县| 昭觉县| 漯河市| 惠东县| 青田县| 博野县| 县级市| 蒙阴县| 吴桥县| 淅川县| 武安市| 汤阴县| 乌兰县| 新密市| 兰州市| 鄂伦春自治旗| 辽中县| 宁津县| 天峨县| 辛集市| 友谊县| 庆元县| 金寨县| 赤峰市| 丰县| 朝阳区| 岢岚县|