Base:
OOA是什麼?OOD是什麼?OOP是什麼?{
oo(object-oriented):基於對象概念,以對象爲中心,以類和繼承爲構造機制,來認識,理解,刻畫客觀世界和設計,構建相應的軟件系統的一門方法;本意----模擬人類的思惟方式,使開發,維護,修改更加容易
ooa(object-oriented analysis):強調的是在系統調查資料的基礎上,針對OO方法所須要的素材進行的歸類分析和整理,而不是 對管理業務現狀和方法的分析-------其實就是進一步對oo進行細化,初步得出該oo的屬性與方法(或者簡單的理解:在得出的文檔中對接口的粗略定 義)
ood(object-oriented design):OO方法中一箇中間過渡環節,其主要做用是對ooa分析的結果做進一步的規範化整理,以便可以被OOP直接接受------整理和定義oo的屬性和方法
oop(object-oriented programming):把組件的實現和接口分開,而且讓組件具備多態性----(抽象,繼承,封裝,多態)面向接口編程? }
分別是:面向對象分析、面向對象設計、面向對象編程
抽象的概念:
繼承的概念:對象的一個新類能夠從現有的類中派生,這個過程就是類的繼承,子類繼承父類的特性。子類能夠從父類繼承方法和實例變量,而且子類能夠修改或增長新的方法以便更適合的使用。{
繼承主要實現重用代碼,節省開發時間。}
封裝的概念:{
封裝是實現面向對象程序設計的第一步,封裝就是將數據或函數等集合在一個個的單元中(咱們稱之爲類)。被封裝的對象一般被稱爲抽象數據類型。 }
多態的概念:
構造器不可被Override可是能夠Overload。{
多態:同一操做做用於不一樣的對象,能夠有不一樣的解釋,產生不一樣的執行結果。在運行時,能夠經過指向基類的指針,來調用實現派生類中的方法。}
接口是否可繼承接口?抽象類是否能夠實現接口?抽象類是否可繼承實體類?
能夠;能夠;能夠。
Overload和Override的區別
二者是多態的不一樣表現,Override是父類和子類之間多態性的一種表現,Overload是一個類中多態性的一種表現。Overload自己和返回值無關,因此是能夠改變返回值的。
{ Override是重寫:方法名稱、參數個數,類型,順序,返回值類型都是必須和父類方法一致的。它的關係是父子關係
Overload是重載:方法名稱不變,其他的都是能夠變動的。它的關係是同一個類,同一個方法名,不一樣的方法參數或返回值。
備註:它們都是是Java多態性的不一樣表現 }
abstract class和interface的區別
抽象類中能夠存在非抽象方法,而接口不能夠。抽象類只能夠被單繼承而接口則能夠實現多繼承。
&和&&的區別
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)
int和Integer有什麼區別
Java的兩種不一樣的類型,基本數據類型和複合類型,Integer是int的封裝類型,提供了多種方法調用。運行速度上也有着區別,基本數據類型的運行速度更快。
String是最基本的數據類型嗎?
基本數據類型只有如下8種:boolean,byte,char,short,int,float,long,double。因此String不是最基本的數據類型。
String和StringBuffer的區別
均可以儲存和操做字符串,String提供了數值不可變的字符串,而StringBuffer能夠進行字符串的修改。
是否可繼承String類
不能夠,String類是final的。
final,finally,finalize的區別
final是最終形態修飾符,修飾變量時,此變量爲常量,修飾方法時,此方法不可被重寫,修飾類時,此類不可被繼承。
finally是異常處理語句結構的一部分,表示總會被執行的語句塊。
finalize是Object中的方法,在垃圾回收器執行的時候會調用被回收對象的該方法用於釋放一些資源。
String s = new String(「xyz」)一共建立了幾個String對象?
兩個
{一個或兩個}
Static Nested Class和Inner Class的不一樣
靜態內部類能夠不依賴於外部實例被實例化,而內部類須要在外部類實例化後才能實例化。
GC是什麼?爲何要有GC?
GC是垃圾回收器,程序員常常會忘記或錯誤的進行內存回收而致使程序或系統的不穩定甚至崩潰,java使用GC能夠自動回收內存。
abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized
都不能。
數組有沒有length()方法?String有沒有length()方法
沒有;有。
switch可以做用在byte上,可否做用在long上,可否做用在String上
switch只能做用於如下幾種類型:byte,char,short,int。
兩個對象值相同,但卻可有不一樣的hashcode
這話不對,值相同,hashcode必定相同。
Java是值傳遞仍是引用傳遞?
值傳遞,一個對象被看成參數傳遞進一個方法後,值被改變,在此方法結束後,被改變的值將保留,那是由於參數的值就是對該對象的引用,因此引用實際上是不一樣的,可是所指對象是相同的。
Java的接口和C++的虛類的相同和不一樣處
Java的接口和C++的虛類均可以實現多繼承,只是C++的虛類相似於Java的抽象類。
JVM加載類文件的原理機制
JVM中類的裝載是由ClassLoader和它的子類來實現,ClassLoader是一個重要的Java運行時系統組件,負責在運行時查找和裝入類文件的類。
char型變量能存儲一箇中文漢字嗎?
能,由於java中以unicode編碼,一個char佔16個字節,因此能夠。
邏輯操做(&,|,^)與條件操做(&&,||)的區別
條件操做只能操做boolean型,而邏輯操做不只能夠操做boolean還能夠操做數值型。邏輯操做不會產生短路。
是否能夠從一個static方法內部發出對非static方法的調用
不能夠。
寫clone()方法時,一般都有一行代碼,是什麼?
clone有缺省行爲,super.clone();負責產生正確大小的空間,並逐位複製。
靜態變量和實例變量的區別
靜態變量爲類全部,一個類的每個實例都共用該變量,所以,對於每一個實例來講,其值都是一致的。實例變量爲每個實例所特有,所以,對於每一個實例來講,實例變量的值都保證了本身的某些狀態。
Anonymous Inner Class是否可繼承其餘類或實現接口
均可以。
Java中有沒有goto?
有,是保留字,可是不能使用。
訪問修飾符的區別
做用域
當前類
同包
子類
其餘
public
√
√
√
√
protected
√
√
√
×
default(不寫時)
√
√
×
×
private
√
×
×
×
Java是從什麼語言改進從新設計?
C++
如下哪句話正確?
A.Java程序通過編譯後產生machine code
B.Java程序通過編譯後產生byte code
C.Java程序通過編譯後產生dll
D.以上都不正確
答案:B
如下說法正確的有
A.class中constructor不可省略
B.constructor必須與class同名,但方法不能與class同名
C.constructor在一個對象被new時執行
D.一個class只能定義一個constructor
答案:C
下列語句正確的是
A.形參可被視爲local variable
B.形參可被字段修飾符修飾
C.形參爲方法被調用時,真正被傳遞的參數
D.形參不能夠是對象
答案:A
public class A{
int x = 10;
public A(){ //構造方法
System.out.println("A's constructor");
add(2);
}
public void add(int y){
System.out.println("A's add method");
x+=y;
}
}
class B extends A{
int x = 9;
public B(){
System.out.println("B's constructor");
}
public void add(int y){
System.out.println("B's add method");
x+=y;
}
public static void main(String []args){
A a = new B();
System.out.println(a.x);
B b = new B();
System.out.println(b.x);
A c = new A();
System.out.println(c.x);
}
}
以上程序輸出結果是多少?
10,9,12
{
A's constructor
B's add method
B's constructor
10
A's constructor
B's add method
B's constructor
9
A's constructor
A's add method
12
}
Exception:
運行時異常與通常異常有何不一樣
異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。Java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但並不要求必須聲明拋出未被捕獲的運行時異常。
Error和Exception的區別
Error表示恢復很困難的一種嚴重問題,通常由os或jvm拋出。Exception表示一種設計或實現問題,通常由運行的程序自己產生和拋出。
try裏有個return語句,緊跟在try後的finally中的code是否會被執行
會,在return以前。
Collection:
說出ArrayList,Vectory,LinkedList的存儲性能和特性
ArrayList和Vectory實現了線性結構,遍歷元素時,效率較高,LinkedList實現了鏈表結構(雙向循環),插入和刪除效率較高,ArrayList是線程異步,Vectory是線程同步,因此執行效率Vectory較低,可是數據安全性較高。
Collection和Collections的區別
Collection是集合框架的父接口,其直接子接口主要有Set和List。Collections是針對集合類的一個工具類,提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。
HashMap和Hashtable的區別
Hashtable的方法是同步的而HashMap不是,另外HashMap容許有一個null做爲key,而Hashtable不容許
heap和stack有什麼區別
stack是一種線形集合,按照先進後出(FILO)的方式進行處理。heap是stack的一個組成元素。{
1.heap是堆,stack是棧。2.stack的空間由
操做系統自動分配和釋放,heap的空間是手動申請和釋放的,heap經常使用new關鍵字來分配。3.stack空間有限,heap的空間是很大的自由區。在Java中,若只是聲明一個對象,則先在棧內存中爲其分配地址空間,若再new一下,實例化它,則在堆內存中爲其分配地址。4.舉例:數據類型 變量名;這樣定義的東西在棧區。如:Object a =null; 只在棧內存中分配空間new 數據類型();或者malloc(長度); 這樣定義的東西就在堆區如:Object b =new Object(); 則在堆內存中分配空間
}
List,Set,Map是否繼承自Collection接口?
List,Set是;Map不是。
Set裏的元素是不能重複的,那麼用什麼方法來區分是否重複?是用==仍是equals?有什麼區別?
經過iterator來區分是否重複。==判斷的是地址,equals判斷內容和類型是否相同。
List,Set,Map接口各有什麼特色?
List以特有次序來存放元素,能夠重複。Set內部排序,不可重複。Map接口以鍵值對來存放數據,鍵不可重複,值能夠重複。
Thread:
sleep和wait的區別
sleep是線程類Thread的方法,致使此線程暫停執行指定時間,將CPU的控制權出讓給其餘線程,但監控狀態依然保持,到時恢復。wait是Object類的方法,對此對象調用wait方法致使本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify或notifyAll後本線程才進入對象鎖定池準備得到對象鎖進入運行狀態。
同步和異步的區別
獨佔鎖的概念,同步爲線程獨佔,異步則是共享使用,同步將致使運行效率下降,異步則可能使得多線程併發訪問資源時產生狀態的衝突。
一個線程進入一個synchronized方法後,其餘線程是否可進入此對象的其餘方法?
能夠進入他的其餘方法,而不能進入那一個方法。
簡述synchronized( 同步的)和java.util.concurrent.locks.Lock的異同
Lock能完成synchronized所實現的全部功能。Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock必定要求程序員手動釋放,而且必須在finally中釋放。
啓動一個線程須要調用什麼方法?
start方法。可是並不表明這個線程被啓動了,而是處於一個待啓動狀態。線程啓動將調用run方法。
IO:
Java中有幾種類型的流?
根據不一樣的分類能夠分爲:輸入流和輸出流、字節流和字符流、節點流和介質流。{
按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分爲節點流和處理流兩類。
節點流:能夠從或向一個特定的地方(節點)讀寫數據。如FileReader.
處理流:是對一個已存在的流的鏈接和封裝,經過所封裝的流的功能調用實現數據讀寫。如BufferedReader.處理流的構造方法老是要帶一個其餘的流對象作參數。一個流對象通過其餘流的屢次包裝,稱爲流的連接。
}
什麼是Java序列化,如何實現Java序列化
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流花。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。
JDBC:
如多用戶同時訪問數據庫,應採用什麼技術來進行數據庫鏈接管理?
可採用數據庫鏈接池。
Java中訪問數據庫的步驟,Statement和PreparedStatement的區別?
(1).註冊驅動
(2)建立鏈接
(3)建立執行對象
(4)執行SQL語句
(5)處理結果集
(6)關閉鏈接
PreparedStatement是預編譯的處理語句,可使語句自己保存在內存中,在屢次執行時效率很高。
JDBC如何實現分頁
JDBC分頁分爲數據庫分頁和應用程序分頁兩種。應用程序分頁講求將全部符合條件數據一次性取出,存放在數組或動態數組中,而後按要求提取。數據庫分頁按照數據庫的不一樣,採起的方式也不同,如MSSQL中按照TOP來進行分頁,而Oracle中則根據僞列來進行分頁。
事務處理的方法
Connection中有3種事務處理方案:setAutoCommit(boolean)自動提交;commit()提交;rollback回滾。
XML:
XML文檔定義有幾種形式?有什麼本質區別?解析XML文檔有哪幾種方式?
有DTD和schema兩種方式。本質區別在於schema本事就是一份格式良好的XML文檔,而且加入了類型指定,名稱空間等內容,更加適合於XML文檔的定義和規範。解析XML文檔有多種方式,如DOM,SAX,JDOM等。
XML在項目中的運用有哪些?
臨時性的數據存儲及傳遞:如AJAX技術從後臺將數據傳遞到前臺時,能夠寫成XML文檔的格式進行傳遞,並在前臺進行解析。
配置文件:如數據源的配置,框架的配置,JavaWeb應用的信息配置等。
Java Web:
Servlet生命週期,說出Servlet和CGI的區別
生命週期:new>init>service>destory。
CGI對每一個請求都產生新的進程,而servlet是經過多線程的方式服務於每一個請求。CGI效率較低。
forward和redirect的區別
forward是服務器請求資源,服務器直接訪問目標地址URL,把URL的響應內容讀取過來,再發送給瀏覽器,瀏覽器沒法得知服務器從哪裏得到來的內容,因此地址欄中不變。redirect是服務端根據邏輯,發送一個狀態碼告訴瀏覽器從新去請求一個地址。forward以後request不變,而redirect以後request已經改變。
動態include和靜態include區別
動態include用jsp:include動做實現,它老是會檢查所含文件中的變化,適合用於包含動態頁面,而且能夠帶參數。靜態include不會檢查所含文件的變化,適合包含靜態頁面。
說出數據庫鏈接池的工做機制
J2EE服務器啓動時會創建必定數量的鏈接,並一直維持很多於此數目的鏈接,鏈接有兩個狀態,繁忙和空閒。按客戶訪問量進行增長和減小鏈接數量。在全部鏈接都處於繁忙狀態時,鏈接池將增長鏈接數,當大部分鏈接都屬於空閒狀態時,鏈接池將自動清理一些鏈接。
JSP的內置對象及方法
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,而且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。
response表示HttpServletResponse對象,並提供了幾個用於設置送回瀏覽器的響應的方法(如cookies,頭信息等)。
out對象是javax.servlet.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實例。
exception記錄了頁面中的異常信息,此對象只可在page指令屬性isErrorPage=」true」的頁面中才能訪問到。
JSP經常使用指令
page、taglib、include
什麼狀況下調用goGet()和doPost()
servlet在接收到用戶請求時,調用service方法,此方法根據請求的類型(get或post)調用相應的方法。
JSP和Sevlet的相同和不一樣,有什麼聯繫?
JSP是Servlet技術的演變和擴展,JSP更強調和適合於視圖層,Servlet則更適合於控制層。
MVC的各個部分都有哪些技術來實現?
Java的WEB應用中,M層由JavaBean來實現,V層由JSP或HTML來實現,C層由Servlet來實現。
JSP的6個基本動做是什麼?做用是什麼?
include動做用於動態包含一個文件。useBean動做用於在指定範圍內獲取一個指定名稱及類型的對象。setProperty動做用於對指定的對象進行賦值操做。getProperty動做用於對指定對象的指定屬性進行取值。forward動做用於把請求轉發到另外一個頁面。plugin動做用於爲java插件生成object或embed標記。
get和post的區別
get將表單數據按照variable=value的形式,添加到action所指向的URL後面,而且二者使用「?」鏈接,各變量之間使用「&」鏈接;post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指URL。get不安全;post相對較安全。get受URL長度限制,傳輸的數據量小,post則能夠傳輸較大數據。get限制form表單的數據集必須爲ASCII字符,而post支持整個ISO10646個字符集。
Servlet2.2以上Web Application的基本目錄結構
webapps---|
|---Application---|
|----JSP頁面
|----WEB-INF--|
|----classes
|----lib
|----web.xml
JSP的四種範圍
page是表明與一個頁面相關的對象和屬性。
request是表明與web客戶機發出的一個請求相關的對西哪一個和屬性,一個請求可能跨越多個頁面。
session是表明與用於某個web客戶機的一個用戶體驗相關的對象和屬性。一個web會話能夠跨越多個客戶請求。
application表明與整個web應用程序相關的對象和屬性。跨越整個web應用程序,包括多個頁面,請求和會話。
過濾器的用途有哪些?
過濾器主要作攔截做用,因此能夠作不少事情,好比過濾一些不合法的詞彙、驗證是否正常登錄、字符編碼的轉換。
過濾器的用法?
實現Filter接口,覆蓋init(FilterConfig config)、doFilter(ServletRequest request,ServletResponse response,FilterChain chain)、destroy()方法。
JSP中如何使用JavaBeans?
JSP有對於JavaBean操做的標準動做,useBean、setProperty、getProperty
JSP和Servlet中的請求轉發分別如何來實現?
JSP中可使用forward動做來實現。同時JSP和Servlet均可以使用request.getRequestDispatcher(path).forward(req,res);來進行請求轉發。
web.xml的做用
用於配置web應用的信息,如servlet,filter等。
JavaEE:Base:
J2EE是技術仍是平臺仍是框架
J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
請解釋一下如下J2EE名詞:WEB容器、EJB容器、JNDI、JMS、JTA、JAF、RMI/IIOP
WEB容器:給處於其中的應用程序組件(JSP、Servlet)提供一個環境,使JSP、Servlet直接與容器中的環境變量接口交互,沒必要關注其它系統問題。該容器提供的接口嚴格遵照J2EE規範中的WebApplication標準。遵照以上標準的WEB服務器就叫作J2EE的WEB容器。
EJB容器:EnterpriseJavaBean容器。更具備行業領域特點。提供給運行在其中的組件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對象請求中介協議)他們主要用於經過遠程調用服務。
Struts:
什麼是STRUTS?
struts本意爲結構,在J2EE中爲一個WEB框架,採用了JSP/Servlet/JavaBean技術。能夠開發出基於MVC模式的應用架構。
STRUTS的入口類?
ActionServlet,全部對Action的請求都經由該類轉發處理。
Hibernate:
什麼是ORM?
Object Relational Mapping。是一種爲了解決面向對象與面向關係數據庫存在的互不匹配的現象的技術。經過使用描述對象和數據庫之間映射的元數據,將java程序中的對象自動持久化到關係數據庫中。
Hibernate比JDBC的優勢?
解決了對象模型與關係模型之間的阻抗不匹配問題。Hibernate靈活且運用簡單,大量使用配置文件和映射文件來解決類與表或視圖的對應關係,便於維護。完善的事務處理和利用緩存以性能。
Hibernate有哪5個核心接口
Configuration:配置Hibernate,根據其啓動hibernate,建立SessionFaction對象。
SessionFactory:初始化Hibernate,充當數據存儲源的代理,建立session對象,SessionFactiory是線程安全的,同一個實例能夠被應用的多個線程共享。
Session:負責保存、更新、刪除、加載和查詢對象,線程不安全,須要避免多個線程共享同一個session。
Transaction:管理事務。
Query和Criteria:執行數據庫的查詢。
關於Hibernate,配置文件呈現一對多,多對多的標籤是什麼?Hibernate的二級緩存是什麼?Hibernate是如何處理事務的?
一對多的標籤是<one-to-many>,多對多的標籤是<many-to-many>。SessionFactory的緩存是Hibernate的二級緩存。Hibernate的事務其實是底層的JDBC Transaction的封裝或者是JTA Transaction的封裝。默認狀況下使用JDBC Transaction。
Hibernate映射文件中屬性與表中列的關係,如屬性String對應的表中的類型爲?
字符型,如char,varchar等或大文本text。
Hibernate分頁實現代碼
Query query = session.createQuery(「from Emp」);
query.setFirstResult(first);
query.setMaxResults(pageSize);
Collection emps = query.list();
Session中的load和get的區別
當給定的對象標識不存在時,get返回null,而load則拋出一個異常。
Spring:
簡述Spring框架。
Spring框架是一個分層架構,由七個定義良好的模塊組成,Spring模塊構建在覈心容器之上,核心容器定義了建立、配置和管理bean的方式。組成Spring框架的每一個模塊均可以單獨存在,或者與其餘一個或多個模塊聯合實現。
Spring Core、Spring Context、Spring AOP、Spring DAO、Spring ORM、Spring Web、Spring MVC
EJB:
EJB是基於哪些技術實現的,SessionBean和EntityBean的區別
EJB包括SessionBean,EntityBean,MessageDrivenBean,基於JNDI、RMI、JTA等技術實現。SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操做,例如訪問數據庫,調用其餘EJB組件。EntityBean用來臨時性存儲數據。
EJB與JavaBean的區別
JavaBean是可複用的組件,對JavaBean並無嚴格的規範,任何一個java類均可以是一個Bean,但因爲一般JavaBean是被容器所建立,因此JavaBean應具備一個無參的構造器,並實現Serializable接口用於持久化,JavaBean是不能被跨進程訪問的。EJB是基於java的RMI技術,因此EJB能夠被遠程訪問(跨進程,跨計算機)。但EJB必須被部署在支持EJB的容器中(如Webspere,WebLogic等),EJB客戶不直接訪問EJB組件,而是經過容器訪問。
說明EJB中的SessionBean和EntityBean的生命週期,以及如何進行事務管理
SessionBean:StatelessSessionBean的生命週期由容器決定,當客戶機發出請求要創建一個Bean的實例時,EJB容器不必定要建立一個新的Bean的實例給客戶機調用,而是找一個現有的實例提供給客戶機。客戶機第一次調用一個StatefulSessionBean時,容器會馬上在服務器中建立一個新的Bean實例,並關聯到客戶機上,之後此客戶機調用StatefulSessionBean的方法時容器會把調用分派到與此客戶機相關聯的Bean實例。
EntityBean:EntityBean能存活相對較長的時間,而且狀態是持續的。只要數據庫中的數據存在,EntityBean就一直存活。而不按照應用程序或者服務進程來結束生命。EntityBean生命週期可以被容器或Bean本身管理。
EJB經過如下技術管理事務:OTS(Object Transaction Service),JTS(Java Transaction Service),JTA(Java Transaction API)
EJB的角色和三個對象
一個完整的基於EJB的分佈式計算結構由六個角色組成,每一個角色所作的工做必須遵循Sun公司提供的EJB規範,以保證彼此之間的兼容性。這六個角色分別是EJB組件開發者(Enterprise Bean Provider)、應用組合者(Application Assembler)、部署者(Deployer)、EJB服務提供者(EJB ServerProvider)、EJB容器提供者(EJB Container Provider)、系統管理員(System Administrator)。三個對象是Remote(Local)接口、Home(LocalHome)接口、Bean類。
EJB容器提供的服務
主要提供生命週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發管理等服務。
EJB禁止哪些操做
1.不能操做線程和線程API(線程API指非線程對象的方法如notify,wait等)。
2.不能操做awt。
3.不能實現服務器功能。
4.不能對靜態屬性存取。
5.不能使用IO操做直接存取文件系統。
6.不能加載本地庫。
7.不能將this做爲變量和返回。
8.不能循環調用。
remote接口和home接口主要做用
remote接口定義了業務方法,用於EJB客戶端調用業務方法。home接口是EJB工廠用於建立和移除查找EJB實例。
bean實例的生命週期
對於Stateless Session Bean、Entity Bean、Message Driven Bean通常存在緩衝池管理,而對於Entity Bean和Statefull Session Bean存在Cache管理,一般包含建立實例,設置上下文、建立EJBObject(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create以後實例並不從內存清除,而是採用緩衝池調度機制不斷重用實例,而對於存在Cache管理的Bean則經過激活和去激活機制保持Bean的狀態並限制內存中實例數量。
EJB的激活機制
以Stateful Session Bean爲例:其Cache大小決定了內存中能夠同時存在的Bean實例的數量,根據MRU或NRU算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,若是對應EJBObject發現本身沒有綁定對應的Bean實例則從其去激活Bean存儲中(經過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前會調用對應的EJBActive和EJBPassivate方法。
EJB的幾種類型
Session Bean,Entity Bean和Message Driven Bean。Session Bean又可分爲Stateless Session Bean和Stateful Session Bean。Entity Bean又可分爲Bean管理持續性(BMP)和容器管理的持續性(CMP)。
客服端調用EJB對象的幾個基本步驟
設置JNDI服務工廠以及JNDI服務地址系統屬性,查找Home接口,從Home接口調用create方法建立Remote接口,經過Remote接口調用其業務方法。
RDBMS&SQL:
3張表student學生表(學號,姓名,性別,年齡,組織部門)、course課程表(編號,課程名稱)、sc選課表(學號,課程編號,成績)。
寫一個SQL語句,查詢選修了「計算機原理」的學生學號和姓名。
寫一個SQL語句,查詢「周星馳」同窗選修的課程名稱。
寫一個SQL語句,查詢選修了5門課程的學生學號和姓名。
寫一個SQL語句,查詢選修了全部課程的學生學號和姓名。
(1)SELECT sno,sname FROM student stu WHERE stu.sno IN (SELECT sc.sno FROM sc WHERE sc.cno = (SELECT course.cno FROM course WHERE cname LIKE ‘計算機原理’));
(2)SELECT cname FROM course cou WHERE cou.cno IN (SELECT sc.cno FROM sc WHERE sc.sno IN (SELECT student.sno FROM student WHERE sname like ‘周星馳’));
(3)SELECT student.sno,sname FROM student WHERE student.sno IN (SELECT sc.sno FROM sc GROUP BY sc.sno HAVING count(*)=5);
(4)SELECT student.sno,sname FROM student WHERE student.sno IN (SELECT sc.sno FROM sc GROUP BY sc.sno HAVING count(*)=(SELECT count(*) FROM course));
有一張表EMP,表中字段爲(empno,ename,mgr,age),寫出語句查詢全部僱員年齡大於其領導的人員名單。
SELECT worker.ename FROM emp worker WHERE worker.age>(SELECT manager.age FROM emp manager WHERE manager.empno = worker.mgr);
有兩張表分別表明的省和市的信息,其中省信息表中字段爲(stateno,statename),市信息表中字段爲(cityno,cityname,stateno),省信息表中有廣東,江蘇,遼寧,黑龍江,市信息表中有上海,廣州,北京,南京。如今須要查詢出全部市信息及相關省信息,請寫出查詢語句。
SELECT cityname,cityno,s.stateno,s.statename FROM city c,state s WHERE c.stateno = s.stateno(+);
Base Web:Javascript
一個動態的下拉列表,如何在每一次點擊後顯示出全部被選中的值?
<script type="text/javascript">
function choose(sel){
alert(sel.options[sel.selectedIndex].innerHTML);
}
</script>
<select onchange=」choose(this)」>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
封裝一個類,包含屬性name和sex,在設置其值後再取出
function myObject(){
var innerClass = new Object();
innerClass.name='undefined';
innerClass.sex='undefined';
innerClass.setName = function (n){
name = n;
}
innerClass.setSex = function (s){
sex = s;
}
innerClass.getName = function (){
return name;
}
innerClass.getSex = function (){
return sex;
}
return innerClass;
}