常見筆試面試問題點(轉載)

原文:

java各種概念 Core Java總結

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 οnchange=”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;
}

轉載于:https://www.cnblogs.com/zxcjj/p/8661904.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250672.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250672.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250672.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongoose --- 建立一個集合規則,并導出.

使用mongoose寫一個集合的規則 首先要設計數據結構下面是newGoods.json里面的一條數據 {"ID": "ff89cf2e14e143dc9e49ad75f7bc7bb0","GOODS_SERIAL_NUMBER": "6901844910651","SHOP_ID": "402880e860166f3c0160167897…

PHP獲取用戶真實IP地址

PHP獲取用戶真實IP地址 <?phpfunction getRealIpAddr() { if (!empty($_SERVER[HTTP_CLIENT_IP])) { $ip$_SERVER[HTTP_CLIENT_IP]; } elseif (!empty($_SERVER[HTTP_X_FORWARDED_FOR])) //to check ip is pass from proxy { $ip$_SERVER[HTTP_X_FORWARDED_FOR]; } else…

虛擬機vmware的連接方式以及IP端口,協議等概念

1.NAT虛擬機相當于小弟&#xff0c;宿主機相當于大哥&#xff0c;宿主機虛擬出一個網段供虛擬機上網用 2.Bridge橋接&#xff0c;虛擬機和宿主機相當于局域網中的兩臺機器 3.Host-Only虛擬機只和宿主機通信&#xff0c;無法上網 32位和64位linux的區別轉載于:https://www.cnblo…

__METHOD__

轉載于:https://www.cnblogs.com/xiaobiaomei/p/8662846.html

node --- 模塊化連接MongoDB數據庫的參數設置方案之一

數據庫的初始化操作 連接的數據庫的名稱包含連接數據庫初始化所有的Schemas暴露給其他頁面使用的接口假設寫在 database/init.js 中 const mongoose require(mongoose); // 連接的數據庫的名稱是 lzhhc-vue const db mongodb://localhost/lzhhc-vue const glob require(gl…

Windows網絡接口API函數

Windows提供了一套非常輕量級的網絡函數&#xff0c;方便進行網絡應用開發&#xff0c;整理出來供參考使用。 The following functions are used in Windows networking: MultinetGetConnectionPerformanceWNetAddConnection2WNetAddConnection3WNetCancelConnectionWNetCancel…

PHP 實現縮略圖

PHP 實現縮略圖 <?php header("Content-type: image/png");function resize_image($filename, $tmpname, $xmax, $ymax) { $ext explode(".", $filename); $ext $ext[count($ext)-1]; //判斷文件類型&#xff0c;獲取不同的圖像if($ext "jpg…

微信小程序 - 五星評分(含半分)

轉載自&#xff1a;http://blog.csdn.net/column/details/13721.html演示&#xff1a;下載&#xff1a;小程序-星級評論.zip轉載于:https://www.cnblogs.com/cisum/p/9651110.html

node --- 監聽路由,讀取json文件,向MongoDB中寫入數據

開始 假設讀取的文件為newGoods.json假設數據的在MongoDB數據庫中,集合的規則是Goods下面將用到 koa-router:監聽路由,并調用指定的函數mongoose:node中操作MongoDB的接口庫fs:node的原生模塊,用于讀取/寫入文件 const Router require(koa-router); let router new Router…

windows cmd編輯文本

echo創建一個空的txt文件:echo.>1.txt這里>表示輸出到...echo.表示輸出一個空行(即換行)>命令可以擴展為>>表示的意思為附加到...例子:1.txt的內容為123456附加789到123456的后面:echo 789>>1.txt則1.txt的內容變為:123456789附加789到下一行是這樣的:ech…

PHP 實現圖片驗證碼

PHP 實現圖片驗證碼 步驟 產生隨機字符串創建一張簡單的圖片&#xff0c;設置背景色&#xff0c;文本色再加一些干擾線&#xff0c;干擾素輸出圖像銷毀圖像資源 <?php//PHP生成圖片驗證碼class VerifyImage{private $verifyCode;private $image;//生成隨機字串private fu…

vue --- 子組件監聽點擊事件,接收父組件參數.實現對應跳轉

開始 vue中子組件這一塊,有點麻煩。不是說它很難,而是它的傳送數據方式,以及和各種前端后端路由混在一起時,如果不清晰很容易就迷茫下面假設:路由配置文件為:router.js父組件為 parent.vue , 路徑為 ./parent.vue子組件1為 child1.vue, 路徑為 ./child1.vue子組件2為 child2.v…

分布式版本控制系統Git的安裝與使用(作業2)

&#xff08;本次作業要求來自&#xff1a;https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103&#xff09; 分布式版本控制系統Git的安裝與使用 一、安裝Git bash軟件和安裝notepad&#xff08;安裝時修改自己安裝的路徑&#xff0c;git bash最后一個步驟需要都勾…

匯編 --- 初體驗

假設內存10000H中的值為23,10001H中的值為11,10002H中的值為22,10003H的值為11 在debug中執行以下代碼 mov ax,1000H mov ds,ax mov ax,[0] mov bx,[2] mov cx,[1] add bx,[1] add cx,[2]分析:8086CPU中由于段地址寄存器,無法直接賦值,因此需要先將值賦給通用寄存器然后再給ds…

PHP數組的排序函數

PHP數組的排序函數 介紹&#xff1a; sort() - 以升序對數組排序rsort() - 以降序對數組排序asort() - 根據值&#xff0c;以升序對關聯數組進行排序ksort() - 根據鍵&#xff0c;以升序對關聯數組進行排序arsort() - 根據值&#xff0c;以降序對關聯數組進行排序krsort() - …

763 Hex Conversion

原題網址&#xff1a;http://www.lintcode.com/zh-cn/problem/hex-conversion/ Given a decimal number n and an integer k, Convert decimal number n to base-k. 注意事項 1.0<n<2^31-1, 2<k<162.Each letter over 9 is indicated in uppercase 您在真實的面試中…

PHP Class中public,private,protected,static的區別

PHP Class中public,private,protected,static的區別 public&#xff1a;權限是最大的&#xff0c;可以內部調用&#xff0c;實例調用&#xff0c;可以被繼承。protected&#xff1a;受保護類型&#xff0c;用于本類和繼承類調用&#xff0c;實例化調用報錯。private&#xff1…

匯編 --- EXE文件 的程序的加載過程

1.asm 使用編譯工具寫了一個求2的3次方的程序 assume cs:abcabc segmentmov ax,2add ax,axadd ax,axmov ax, 4c00Hint 21H abc endsend編譯&連接 得到可執行文件1.exe 使用debug調試1.exe 進入調試模式 debug 1.exe查看數據段地址和代碼段地址 -r 描述: 可以看到此時…

淺談Floyd的三種用法 By cellur925

Floyd大家可能第一時間想到的是他求多源最短路的n算法。其實它還有另外兩種算法的嘛qwq。寫一發總結好了qwq。 一、多源最短路 放段代碼跑&#xff0c;注意枚舉順序&#xff0c;用鄰接矩陣存圖。本質是一種動規。 復雜度O(n)。 1 for(int k1;k<n;k) 2 for(int i1;i<n…

js獲取viewbag

后臺代碼&#xff1a; List<WMSRptJHJY> wpjh WMSRptJHJYManage.GetModelList("");   ViewBag.WPJH Newtonsoft.Json.JsonConvert.SerializeObject(wpjh); 前臺代碼&#xff1a; var aa Html.Raw(ViewBag.WPJH);   var PWJH eval("(" aa &…