- 相關推薦
java程序員面試考試題及答案
在各個領域,我們都離不開試題,試題可以幫助學;蚋髦鬓k方考察參試者某一方面的知識才能。大家知道什么樣的試題才是規范的嗎?以下是小編為大家收集的java程序員面試考試題及答案,僅供參考,希望能夠幫助到大家。
java程序員面試考試題及答案 1
WEBLOGIC
1. WEBLOGIC域里面的服務器分那幾種,他們之間的關系是什么?
管理服務器和托管服務器;
管理服務器管理托管服務器.
2. WEBLOGIC部署業務應用時,需要修改哪幾個關鍵配置文件?
web模塊:擴展名.war,配置文件web.xml,
ejb模塊:擴展名.jar,配置文件ejb-jar.xml,
ear模塊:擴展名.ear,配置文件application.xml
3. WEBLOGIC中如何配置DataSource?DataSource來自什么資源?
weblogic中通過配置數據庫連接池得到連接池資源,然后通過連接池資源可以配置出DataSource
4. WEBLOGIC中如何配置數據庫連接池?主要設置哪些參數?
可以通過weblogic管理控制臺進行配置,也可以手動修改配置文件實現.
主要設置:
數據庫連接字符串(包括IP,端口,數據庫名,訪問數據庫的用戶/密碼等),
數據庫驅動程序類路徑,
最大連接數,
最小連接數等
http://dev2dev.bea.com.cn/techdoc/2004120203.html
J2EE
5. J2ee容器都有那些
1)、J2EE服務器:是J2EE產品的運行部分。一個J2EE服務器提供EJB容器和Web容器。Enterprise JavaBeans(EJB)容器:管理J2EE應用程序的enterprise bean的執行。Enterprise bean和它的容器運行在J2EE服務器中。
2)、Web容器:管理J2EE應用程序的JSP頁面和servlet組件的執行。Web組件和它的容器也運行在J2EE服務器中。
3)、客戶端應用程序容器:管理應用程序客戶端組件的運行。應用程序客戶端和它的容器運行在客戶端中。
4)、Applet容器:管理applet的執行。由運行在客戶端的一個Web瀏覽器和Java插件一同組成。
6. web容器有哪些
web容器:給處于其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接跟容器中的環境變量接口交互,不必關注其它系統問題。主要由WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。
7. JNDI有什么作用?哪些資源可以通過JNDI查找到?
通過目錄名稱訪問遠程服務,JNDI可以訪問數據庫連接資源,EJB組件,JMS服務等等
8. CMT EJB中對數據庫進行插入和更新操作,一般配置什么事物屬性? Required
9. CMT EJB中對數據庫進行查詢操作,一般配置什么事物屬性? Support
10. SessionBean組件中的Remote接口,Home接口主要作用是什么?各有哪些主要的抽象方法?
Home接口中的主要方法是create方法,該方法返回remote接口對象,Home接口的主要作用就是創建remote接口對象;
Remote接口主要定義業務抽象方法,在Bean類中實現了這些抽象方法.
11. 有狀態SessionBean中的active方法和deactive方法有什么作用?
active方法初始化有狀態SessionBean中的全局資源,并激活EJB容器中有狀態SessionBean對象,使得有狀態SessionBean可以為外部提供服務.
deactive方法去激活EJB容器中有狀態SessionBean對象,釋放有狀態SessionBean中初始化的全局資源.
12. 如何實現事務控制?
JDBC事務管理方式 和 JTA事務管理方式
13. 事務的概念
事務處理是由以一個單一的邏輯單位完成的一系列操作,它可以由一系列的操作組成,如果在該單位包含的操作執行完畢后沒有發生錯誤,那么它所作的改變就是永久的了。如果一旦有錯誤發生,它就會滾回,不會作任何修改或改變。
14. 事務的特點
Atomicity, Consistency, Isolation, and Durability
1,原子性(Atomicity)
事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。
2,一致性 (Consistency)
事務在完成時,必須使所有的數據都保持一致狀態。
3,隔離性 (Isolation)
由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。
4,持久性 (Durability)
事務完成之后,它對于系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。
15. EJB中的事務
(一) EJB中事務處理的屬性有:Required,RequiresNew,Mandatory,NotSupported,Supports,Never.
1、Required:當客戶端運行一個事務處理并調用EJB的一個方法,這個方法執行客戶端的事務處理;當客戶端沒有啟動一個事務處理,則EJB容器在執行這個方法之前啟動一個新的事務處理.
2、RequiresNew:當客戶端運行一個事務處理并調用EJB的一個方法時,容器管理器做如下操作:
(1) 懸掛客戶端的事務處理;
(2) 開始一個新的事務處理;
(3) 調用方法;
(4) 當方法結束,恢復客戶端的事物處理.
當客戶端沒有啟動一個事務處理,容器管理器在執行這個方法之前啟動一個新的事務處理.
3、Mandatory: 當客戶端運行一個事務處理并調用EJB的一個方法,這個方法在客戶端的事務處理范圍內被執行; 當客戶端沒有啟動一個事務處理,容器管理器將會拋錯(TransactionRequiredException);
4、NotSupported: 當客戶端運行一個事務處理并調用EJB的一個方法,容器管理器在調用方法之前終止客戶端的事務處理,當方法執行完,再恢復客戶端的事務處理; 當客戶端沒有啟動一個事務處理,容器管理器在調用方法時不啟動事務處理.
5、Supports: 當客戶端運行一個事務處理并調用EJB的一個方法,在運行方法時執行客戶端的事務處理; 當客戶端沒有啟動一個事務處理,容器管理器在調用方法時不啟動事務處理.
6、Never: 當客戶端運行一個事務處理并調用EJB的一個方法,容器管理器將拋出一個錯誤(RemoteException); 當客戶端沒有啟動一個事務處理,容器管理器在調用方法時不啟動事務處理.
(二) EJB事務的操作
如果聲明一個bean的事務控制為TX_BEAN_MANAGED,則這個bean可以訪問事務服務。當事務控制應用于單個的方法時這個控制只能應用于整個的bean. bean訪問事務服務的能力不能只對某個方法起作用。因此一個方法聲明事務控制為TX_BEAN_MANAGED,而另一個方法聲明為其它不同的事務控制是錯誤的。廠商的安裝工具應該能檢測到并報告這個錯誤。Bean分別通過初始化時setSessionContext()或 setEntityContext()方法的參數 SessionContext或EntityContext來訪問事務服務。這些接口都是EJBContext的子類。
EJBContext的定義如下:
Public interface javax.ejb.EJBContext {
public Identity getCallerIdentity();
public boolean isCallerInRole(Identity other);
public EJBHome getEJBHome();
public Properties getEnvironment();
public UserTransaction getUserTransaction() throwsIllegalStateException;
public boolean getRollbackOnly();
public void set RollbackOnly();
}
一旦bean獲得了一個UserTransaction的引用,就可以用這個引用管理自己的事務。有狀態的會話bean的方法可以創建一個事務,而且不用終止事務就可以返回。如果還有線程調用bean的方法,容器檢測是否有bean創建的活動的事務,如果被調用的事務是同一個事務,容器會允許該線程重新進入這個bean.如果bean在事務中且執行不同事務上下文的線程試圖進入bean,容器會阻塞這個線程直到bean的事務終止。如果線程試圖進入事務時 bean不在事務中,線程會執行一個自己的事務,容器會掛起線程當前的事務以允許線程進入。一旦線程離開方法就會恢復線程以前的事務,容器不會終止任何方法創建的事務。
對于無狀態會話bean和實體bean,當事務活動時bean的方法不允許返回。容器會為此拋出一個例外。
會話同步接口
有狀態和無狀態的會話bean都可以訪問數據庫,并且參與一個事務。為了讓bean在事務中執行它的任務,bean開發者可以實現在bean中實現 javax.ejb.SessionSynchronization接口。容器能自動檢測這個接口,容器會使用這個接口中的方法以使bean得到事務的狀態信息。實體bean不支持這個接口。因為實體bean are implicitly transaction aware,所以容器使用不同的方法控制一個事務中的實體 bean.
SessionSynchronization接口定義如下:
public interface javax.ejb.SessionSynchronization {
public void afterBegin() throws RemoteException;
public void beforeCompletion() throws RemoteException;
public void afterCompletion(boolean yn) throws RemoteException;
}
實際上一個事務不屬于一個特殊的bean的實例。一個客戶端或容器中執行的線程創建一個事務,在執行bean中的代碼時執行該事務。如果一個有事務上下文的線程將要進入一個會話bean,容器首先調用它的afterBegin()方法。Bean可以記錄所有的商業方法運行在事務中,隨后執行事務操作。如果一個操作的內部標志顯示這個線程在事務外運行,則會拒絕執行事務操作的請求。直到調用afterCompletion()方法,bean會繼續認為商業方法的調用都在事務中執行。Bean將推斷性地清除內部標志,以表示隨后到來的事務請求將被拒絕。
如果一個事務上下文的線程試圖進入一個已經是另一個事務的'一部分的Bean時, .Container將封鎖入口,直到前一個事務提交或回滾,并且afterCompletion()方法被調用,此時,允許Bean 恢復它的狀態。Container負責提供這些行為。當Container發現它將要提交一個事務時,將在這個事務的所有的session Bean上調用beforeCompletion()方法。這就給Bean足夠的機會來結束事務的操作,如在提交前將數據寫入數據庫。反之,當 Container 發現,將要回滾一個事務撕,BeforeCompletion()方法將不會被調用,因為將一個將被回滾的事務所產生的數據寫入數據庫是沒有意義的。
AfterCompletion()是在一個事務即將提交或回滾時被調用,來通知Bean事務操作的最終結果。Bean可以用這個信息來修正自己的內部狀態,但它不能用這個信息來維持任何它將要保存的事務。盡管session Bean可以創建,提交和回滾它自己的事務,但通常不推薦這樣做。
SessionSynchronization接口不提供整合外部和內部事務的能力。如果一個session bean實現了這個接口,則意味著它在方法調用之間要保持事務的狀態。特別地,這也暗示在afterBegin()和afterCompletion() 調用之間bean是處于一個事務中。這樣,如果一個bean實現了SessionSynchronization接口并且在裝配符中聲明是無狀態的就是一個錯誤。廠商提供的安裝工具應該可以捕捉到并報告這個錯誤。無狀態的session bean可以加入一個事務,但它們不能實現這個接口。事務可以是TX_BEAN_MANAGED,或者container可以在方法入口和從方法的返回上來開始和提交這個事務。Container不可允許在一個現存的事務中有一個線程進入方法,因為無狀態的Bean的方法將無法知道正在運行的線程是否正在一個事務中。
解決這個問題的一個方法是使container掛起現存的事務,強迫方法總是認為線程沒有在一個事務性的上下文中運行。有狀態的Bran可以不實現這個接口而介入事務。但是,裝配符必須要認真地配置以使得商務方法總能在正確的事務狀態中運行。Bean自己沒有通過這個接口來獲得自己的事務的狀態的權利。
加入事務
EJBContext接口在前面的一節中已經介紹了。其中有兩個方法:
public boolean getRollbackOnly();
public void setRoolbackOnly();
這些方法可以有任何bean來使用,而不僅僅是那些聲明了其事務控制為bean-managed的bean。事實上,那些處理自己的事務的bean將不會用到這些方法,因為這些方法不是用來和外界的事務管理器進行交流事務狀態的。
當一個bean調用了setRollBackOnly()方法時,它是在向事務管理器詢問何時結束將要回滾的當前事務。它將給它所參與的事務的結果一個選票。這些方法還存在于UserTransaction接口中,但由于大多數的bean都不訪問這個接口,這些方法必須直接地在EJBContext中提供給bean。注意這個方法并不引發回滾操作,它只是簡單地設置標志,表示事務在結束時應該回滾。不象JavaBan屬性設置方法,這個方法不以 boolean值作為參數。這個方法是特意設計成這樣,以使得一個bean不能夠改變另一個bean的回滾請求。一個bean也許希望使用 getRoolBackOnly()方法,來檢查當前的事務的狀態。如果另一個bean已經標志這個事務為rollback,則正在調用的bean可以推測到并決定不能執行那些在、強制性達到操作,如數據庫更新,而這些操作很有可能在事務結束時被反轉過來。
客戶劃分的事務
盡管一個JEB廠商所必須的,大服務器廠商也許決定提供一個類,使得用戶可以直接訪問事務管理器。當需要在同一個上下文中在兩個不同的服務器上調用 bean時,用戶也許會希望這樣做。當然,每個bean的裝配符可以允許這樣的行為。用戶可以創建一個事務,然后在兩個不同server上的兩個不同的 bean上調用商務方法,而將事務的上下文也作為調用的一部分進行傳遞。一旦調用結束,用戶將推測地結束事務。有container廠商產生的stub和 skeleton將支持事務上下文的隱式傳遞。
這里是一個可能的例子:
Current current = new Current();
Current.setServiceProvider(txMgrURL);
Current.create();
Current.begin();
Current.doSomeWork();
RemRef1.doSomeWork();
RemRef2.doMoreWork();
Current.commit();
數據庫操作的事務管理
bean當然希望使用JDBC來建立到數據庫的連接,并在其上進行操作。但是,為了符合EJB這種container管理事務的模式,連接不能使用自動提交特性,并且不應該在連接上試圖提交或回滾。
Container的角色是決定在這個事務中執行的所有行為應該提交還是回滾。這里提這樣一個問題很好:container如何看到并管理由bean方法內部創建的數據庫連接。盡管在規范中沒有明確地提到,EJB將只能使用JDBC驅動,而JDBC也正是用來和EJB配合使用的。在數據庫連接的創建時,驅動程序透明地將連接注冊到正在執行的線程的當前事務中。之后當container決定結束事務時,數據庫連接將自動地結束它。用OTS的術語說,數據庫連接是不可恢復的資源,有事務服務在container的協助下,隱式地管理。盡管可以在這種情況下使用非事務感知的JDBC Driver,但開發者必須清楚任何在數據庫連接上所做的操作都不屬于bean的事務,開發者還必須確保在從方法返回之前結束數據庫連接事務。試圖使用 SessionSynchronization接口來合并數據庫連接事務和bean本身的事務是不可靠的,是不應該作的。
分布事務的支持
一個分布事務在下面的情況下是需要的:
. 一個用戶使用用戶劃分的在多個server上的多個bean中創建和調用方法的事務。
. 一個在其他的server上調用其他EJB的方法的bean的方法。
對于這些工作廠商必須為EJBObject生成stub和skeleton來隱式地獲得當前事務的上下文,同時將其通過方法調用傳到遠程bean。當將商務方法調用委派給bean時,遠程bean的EJBObject的skeleton必須請求這個事務的上下文
16. JDBC控制事務
在JDBC中怎樣將多個SQL語句組合成一個事務呢?在JDBC中,打開一個連接對象Connection時,缺省是auto-commit模式,每個 SQL語句都被當作一個事務,即每次執行一個語句,都會自動的得到事務確認。為了能將多個SQL語句組合成一個事務,要將auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不調用commit()方法,SQL語句不會得到事務確認。在最近一次commit()方法調用之后的所有SQL會在方法commit()調用時得到確認。出現異常時,rollback對事務進行回滾。
17. JTA事務管理方式
Java事務API(Java Transaction API,JTA)用于為EJB組件提供與數據庫管理器無關的事務組件管理方式。JTA作為Java事務服務(Java Transaction Service,JTS)的高層應用編程接口,使得在組件程序設計過程中可以利用JTA中的相應方法控制組件的事務范圍以及事務管理方式。請讀者看下面的代碼:
public void doAnotherThing(){
UserTransaction ut = context.getUserTransaction();
try{
ut.begin();
demoBusinessMethod();
ut.commit();
}catch (Exception exp){
try{
ut.rollback();
}catch(SystemException exp1){
throw new EJBException("Rollback failed: " + exp1.getMessage());
}
throw new EJBException("Transaction failed: " + exp.getMessage());
} }
在上面的代碼中,讀者首先看到用戶事務接口對象UserTransaction。在該接口中定義了用于確定組件事務范圍以及控制組件事務過程的 begin、commit和rollback方法。在組件方法執行之前首先調用UserTransaction接口中的begin方法確定組件的事務過程開始,在組件商務方法執行過程中如果沒有發生異常,則調用commit方法提交事務范圍內方法的運行結果,否則調用rollback方法將方法運行結果回滾并拋出EJBException類型異常。
事務管理方式總結
對于不同類型的EJB組件,在組件開發和組裝可以選擇不同的組件事務管理方式。下表對不同類型EJB組件適用的事務管理方式進行了總結:
表1 組件類型與可選事務管理方式匯總表
組件類型 容器事務管理方式 組件事務管理方式
JDBC JTA
會話組件 Y Y Y
實體組件 Y N N
消息驅動組件 Y Y Y
從上表可以看出:除了實體組件不能采用JDBC和JTA事務管理方式外,其它任何事務管理方式均適用于所有類型的EJB組件。
18. 使用事務的技巧:
(1) 一個事務不要涉及太多的操作.
(2) 容器管理和bean管理的事務
事務既耗費應用服務器中的資源,又耗費數據庫資源,所以事務越短越好.
盡量使用容器管理事務而不要采用bean管理事務的方式.
(3) ejb遇到錯誤,需要強制事務回滾. 使用EJBObject.setRollbackOnly();
(4) 不能讓事務涉及web層和表示邏輯
(5) 企業應用中不應當選用supports 事務屬性,因為只有調用者開始一個事務后,ejb才能在事務中運行.
19. J2ee的認識
Je22是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業級應用模型(enterpriese application model).在這樣的一個應用系統中,可按照功能劃分為不同的組件,這些組件又可在不同計算機上,并且處于相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。
20. 簡述EJB
(1)企業JavaBean(Enterprise JavaBean,EJB)為開發服務器端企業應用程序組件提供了一個模型,利用這個模型開發用來創建可移植與分布式企業應用程序的服務器企業應用程序組件,比創建獨立的企業應用程序所需使用的企業應用程序組件更為簡單。
(2)EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術實現。
(3) 開發EJB的主要步驟一般來說,整個的開發步驟(開發,配置,組裝)包括如下幾個方面。
開發:首先要定義三個類:Bean類本身,Bean的本地和遠程接口類。
配置:配置包括產生配置描述器-這是一個XML文件、聲明了Enterprise Bean的屬性、綁定了bean的class文件(包括stub文件和skeleton文件)。最后將這些配置都放到一個jar文件中。還需要在配置器中定義環境屬性。
組裝應用程序:包括將Enterprise beans安裝到Server服務器中,測試各層的連接情況。程序組裝器將若干個Enterprise Beans與其它的組件結合起來,組合成一個完整的應用程序;或者將若干個Enterprise beans組合成一個復雜的Enterprise Bean?管理Enterprise Bean
21. jdbc的批處理流程
兩種
(1) Connection con = db.getConn();
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO test VALUES(’1’,’1’)");
stmt.addBatch("INSERT INTO test VALUES(’2’,’2’)");
int[] updateCounts = stmt.executeBatch();
con.commit();
(2)connection.setAutoCommit(false);
PreparedStatement statement =
connection.prepareStatement("INSERT INTO TABLEX VALUES(?, ?)");
statement.setInt(1, 1);
statement.setString(2, "Cujo");
statement.addBatch();
statement.setInt(1, 2);
statement.setString(2, "Fred");
statement.addBatch();
statement.setInt(1, 3);
statement.setString(2, "Mark");
statement.addBatch();
int [] counts = statement.executeBatch();
connection.commit();
JAVA框架
22. transaction有那幾種實現(事務處理)(Spring)
在Spring中,事務處理主要有兩種方式
(1) 代碼控制事務
在程序中引入新的模版類,這個類封裝了事務管理的功能
(2) 參數配置控制事務
在Application-Context.xml增加一個事務代理(UserDAOProxy)配置,
23. IBATIS中的事物屬性怎么配置
SQL MAP XML配置文件中的transactionManager
24. STRUTS的配置文件是什么?
struts-config.xml
ORACLE
25. Oracle中的事務
Oracle在缺省情況下任何一個DML語句都會開始一個事務,直到用戶發出Commit或Rollback操作,這個事務才會結束。在Oracle中,執行 DDL語句(如Create Table、Create View等)時,會在執行之前自動發出一個Commit命令,并在隨后發出一個Commit或者Rollback命令。
(1) 提交事務
提交一事務,即將在事務中由SQL語句所執行的改變永久化。在提交前,ORACLE已有下列情況:
在SGA的回滾段緩沖區已生成回滾段記錄,回滾信息包含有所修改值的老值。
在SGA的日志緩沖區已生成日志項。這些改變在事務提交前可進入磁盤。
對SGA的數據庫緩沖區已作修改,這些修改在事務真正提交之前可進入磁盤。
在事務提交之后,有下列情況:
對于與回滾段相關的內部事務表記錄提交事務,并賦給一個相應的唯一系統修改號(SCN),記錄在表中。
在SGA的日志緩沖區中日志項由LGWR進程寫入到在線日志文件,這是構成提交事務的原子事務。
在行上和表上的封鎖被釋放。
該事務標志為完成 。
注意:對于提交事務的數據修改不必由DBWR后臺進程立即寫入數據文件,可繼續存儲在SGA的數據庫緩沖區中,在最有效時將其寫入數據文件。
(2) 回滾事務
回滾事務的含義是撤消未提交事務中的SQL語句所作的對數據修改。ORALCE允許撤消未提交的整個事務,也允許撤消部分。
在回滾整個事務(沒有引用保留點)時,有下列情況:
在事務中所有SQL語句作的全部修改,利用相應的回滾段被撤消。
所有數據的事務封鎖被釋放。
事務結束。
當事務回滾到一保留點(具有SAVEPOINT)時,有下列情況:
僅在該保留點之后執行的語句被撤消。
該指定的保留點仍然被保留,該保留點之后所建立的保留點被刪除。
自該保留點之后所獲取的全部表封鎖和行封鎖被釋放,但指定的保留點以前所獲取的全部數據封鎖繼續保持。
該事務仍可繼續。
(3) 保留點
保留點(savepoint)是在一事務范圍內的中間標志,經常用于將一個長的事務劃分為小的部分。保留點可標志長事務中的任何點,允許可回滾該點之后的工作。在應用程序中經常使用保留點;例如一過程包含幾個函數,在每個函數前可建立一個保留點,如果函數失敗,很容易返回到每一個函數開始的情況。在回滾到一個保留點之后,該保持點之后所獲得的數據封鎖被釋放。
26. 視圖在什么情況下可以對其,刪除,修改操作:
DML操作應遵循的原則:
1).簡單視圖可以執行 DML操作;
2). 在視圖包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字時不能刪除數據行;
3).在視圖不出現下列情況時可通過視圖修改基表數據或插入數據:
a.視圖中包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字;
b.使用表達式定義的列;
c.ROWNUM偽列。
d.基表中未在視圖中選擇的其他列定義為非空且無默認值。
WITH CHECK OPTION 子句限定:
通過視圖執行的INSERTS和UPDATES操作不能創建該視圖檢索不到的數據行,
因為它會對插入或修改的數據行執行完整性約束和數據有效性檢查。
視圖的刪除:
DROP VIEW VIEW_NAME語句刪除視圖。
刪除視圖的定義不影響基表中的數據。
只有視圖所有者和具備DROP VIEW權限的用戶可以刪除視圖。
視圖被刪除后,基于被刪除視圖的其他視圖或應用將無效。
27. oracle中各種連接的寫法:
內連接,外連接 ,左外連接,右外連接
以上幾種連接一般用于多表之間復雜的查詢,
下面先說說內連接,也即相等連接,如右兩張表 dept ,employee,
dept里有字段deptid,deptname,employee有字段empno,deptid,ename,sal,age等
那連接查詢語句如下:select A.* ,B.* from dept A,employee B where A.deptid=B.deptid
一般出現這種情況的是一張是主表,另一張是子表,主表的主鍵作為子表的外鍵,顯示結果按照子表的顯示,內連接簡單,這里就不多說了
外連接在oralce里用(+)表示,先看例子
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where emp.deptno(+) =dept.deptno
這是一個右連接
看下面的例子
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where dept.no=emp.deptno(+)
這是一個左連接
兩個查詢顯示的查詢結果是一樣的,剛開始學oracle的時候很多人都很難明白這個,現在有個笨辦法,
大家不防記下來,(+)出現查詢條件的左邊即右連接,出現在右邊即左連接。(+)可以放在左邊也可以
放在右邊,但是一定要放在缺少條件的那一邊,如上面的例子中,如果公司最近準備成立一個新的部門,
測試部門,但現在還沒有招新員工,而現在Boss想知道公司有知道公司的員工在那個部門并且想知道
沒有員工的部門,我們可以用上面的查詢語句實現。
左外連接(left outer join)和右外連接(reght outer join)如同上面的外連接,查詢的結果是一樣的。
左外連接:select empno,ename,sal,emp.deptno,dept.deptno from dept left outer join emp on (emp.deptno=dept.deptno)
右外連接:select empno,ename,sal,emp.deptno,dept.deptno from emp reight outer join dept on (emp.deptno=dept.deptno)
以上顯示的結果和外連接查詢出來的結果是一樣的,只是寫法不一樣而已,實際工作中外連接用的比較多,沒有必要都要去用它,但是概念大家一定要了解。
全外關聯 :FULL OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。
28. 查詢的優化
1).根據查詢條件建立合適的index
2).因為SQL是從右向左解析,多表查詢時,記錄數少的表放在右邊
3).多個條件時,收斂快的條件放在右邊。
4).避免使用復雜的集合函數,象not in等。
5).避免在條件中對字段進行函數操作
6).盡量避免使用select *,應該寫出需要查詢的字段
7).在java中盡量使用preparestatement執行sql,從而共享執行計劃"
29. 怎么看執行計劃
使用explain或者autotrace查看執行計劃
30. 如何強制一個SQL語句使用索引? 使用index hints
31. Oracle中的PL/SQL塊是否熟悉?Oracle中的內置函數是否熟悉?
內置函數:ASCII,CHR,CONCAT, decode,to_date,to_char,to_number等等
32. 如何取一個沒有排序的查詢結果中的前10條記錄?
select fielda from tablea where rownum<=10;
33. 問:如何取一個有排序的查詢結果中的前10條記錄?
select fielda from
(select fielda from tablea order by fieldb )
where rownum<=10;
錯誤寫法:select fielda from tablea where rownum<=10 order by fieldb;
34. 如何取一個沒有排序的查詢結果中的第11條到第20條記錄?
select fielda from
(select fielda,rownum rn from tablea where rownum<=20)
where rn>=11;
35. 如何取一個有排序的查詢結果中的第11條到第20條記錄?
select fielda from
(select fielda ,rownum rn from
(select fielda from tablea order by fieldb )
where rownum<=20
) where rn>=11;
36. 數據庫設計中,主鍵的作用?
主鍵的作用保持數據表記錄的唯一性,建立主鍵索引和作為外鍵使用.使用主鍵與外鍵的配對來表示實體間的連接.
37. Oracle數據庫設計中,建立外鍵的方法?
(1)用Create table命令語句在設計數據庫表時建立外鍵
Create table Depart (
DepNO Number(2),
DepName varchar2(10),
CONSTRAINT pk_dept PRIMARY KEY (DepNO)
);
Create table Emp (
EmpNo Number(4),
EmpName varchar2(20),
DepNo CONSTRAINT fk_deptno References Depart(DepNo)
);
(2)用Alter table命令語句,為一個存在的表添加外鍵
Create table Depart (
DepNO Number(2),
DepName varchar2(10),
CONSTRAINT pk_dept PRIMARY KEY (DepNO)
);
Create table Emp(
EmpNo Number(4),
EmpName varchar2(20),
DepNo Number(2)
);
Alter table Emp
ADD CONSTRAINT fk_deptno Foreign key(DepNo) References Depart(DepNo);
JAVA
38. jsp內置對象
1).HttpServletRequest類的Request對象
2).HttpServletResponse類的Respone對象
3).JspWriter類的out對象
4).HttpSession類的session對象
5).ServletContex類的application對象
6).PageContext類的PageContext對象
7).ServletConfig類的Config對象
8)Object類的Page(相當于this)對象
9)Exception
39. Servlet中的主要方法有哪些?各有什么作用?
init方法初始化Servlet
service方法是Servlet中的業務方法,根據請求方式調用不同的doXXX(doGet方法或doPost方法等)響應請求
destroy方法釋放Servlet資源
40. 接口Interface有什么作用?使用接口主要有什么好處?
1) .接口只是一個框架而沒有實現,因此在接口定義時不需要考慮接口中的方法如何實現;
2).利用接口可達到實現多繼承的目的;
3).可以在不暴露對象的類的前提下,暴露對象的編程接口.
41. static和final修飾類,修飾方法和修飾屬性時表示什么?
static可以修飾類,方法,屬性,分別表示靜態類,靜態方法,靜態屬性
final修飾類表示類是最終類,不可再被繼承
final修飾方法表示方法不可被子類重寫(override)
final修飾屬性表示屬性是常量
42. 自定義標簽有什么作用?
方便JSP頁面代碼的維護,代碼重用
43. 數據庫連接對象使用以后在何處釋放?
try{}catch(){}finally{} 在finally{}中釋放數據庫連接對象
44. 異常對象如何分級捕獲?
最底層的異常對象(子類異常)放在最前面,越高層的異常對象(父類異常)越放在后面
45. 重載(overload)和重寫(override)是什么?
重載(overload)為類似功能的方法提供了統一的名稱,但是根據參數列型態的不同,而自動呼叫對應的方法
重寫(override)是子類繼承父類的方法,但是在子類中有不同的方法實現
46. 工作中使用過哪些設計模式?請舉2至3個例子并說明使用場景.
工廠模式,單態模式,Facade模式等等
47. 什么時候釋放connection
應該在finally{}語句塊里釋放connection;
finally{
if (conn != null)
conn.close();
}
48. 異常處理,如何處理多個異常?
異常處理的語句是try{}catch(){}finally{}
當有多個catch()語句,來處理多個異常的話,強調(如果一個異常是另個異常的子類的話,在并行處理的時候子類的異常不會抓到);
49. 可以在try語句模塊里釋放connection嗎?可以.
50. jsp標簽的作用和好處
答:主要用來顯示結果數據,用來溝通表示層和業務邏輯層,把頁面美工工作和程序編寫分開。
51. statement對象有多少種,以及作用和用法
答:三種,分別為statement,PreparedStatement,CallableStatement
作用是:建立了到特定數據庫的連接之后,就可用該連接發送 SQL 語句.
1).PreparedStatement對象有可能比 Statement 對象的效率更高,因為它已被預編譯過并存放在那以供將來使用。
2).由方法 prepareCall 所創建。CallableStatement 對象用于執行 SQL
儲存程序 ─ 一組可通過名稱來調用(就象函數的調用那樣)的SQL 語句。CallableStatement 對象PreparedStatement 中繼承了用于處理 IN 參數的方法,而且還增加了用于處理 OUT 參數和INOUT 參數的方法。
特別強調:如果數據庫支持已存儲過程,則可從 JDBC 中調用它們,CallableStatement可調用存儲過程語法為:
{call procedure_name[(?, ?, . . .)]}
52. Final,finalizer,finally區別和各自的用法
final—修飾符
如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。
將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。
被聲明為final的方法也同樣只能使用,不能重載。
finally—程序控制字
在異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。例如下面語句
Try{
語句1
}
catch(){
語句2
}
finally{
語句3
}
語句3始終都會執行
finalize—方法名
Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
53. equals,toString,hasCode三個方法
Equals:比較的兩個對象不愿是同一對象,你就應該實現equals方法,讓對象用你認為相等的條件來進行比較.
toString: 返回代表該對象的一個字串。一般的,toString方法返回該對象‘文字描述’的字串。返回的結果(即字串)應該是簡明且易讀的信息。建議所有繼承類覆蓋該方法
hasCode:(雜湊碼)會根據對象型別、個數及內容等計算出所對應的內存識別值,相同對象與內容會計算出相同的hasCode。
54. 什么時候會使用hasCode
hascode是用hashTable的時候為了檢索才用的
55. Hashtable和hashmap的區別
共同點:都屬于Map接口的類,實現了將惟一鍵映射到特定的值上。
區別:(1)HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
(2)Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。因為它是同步的它比HashMap 慢。線程安全性比較好
56. 問:舉例介紹java中有哪些集合?
答:主要有LinkedList,ArrayList,Vector等
下面是詳細
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
57. ArrayList,Vector,LinkedList的區別
答:
(1) ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢。
(2) Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差
(3) LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
58. 說說抽象類和接口的區別。
(1)抽象類可以提供某些方法的實現。如果向抽象類中加入一個新的具體的方法,那么所有的子類一下子就得到了這個方法。接口做不到這一點!(這也許是抽象類的唯一優點)。
(2)因java的單根結構限制,子類只能實現一個抽象類類型,而接口類型則無此限制。這使抽象類作為類型定義工具的效能落后于接口。接口是定義混合類型(實現多重繼承)的理想工具。
(3)從代碼重構的角度上講,將一個具體類從構成一個接口類型實現起來更容易。
接口可以實現接口。抽象類可以實現(implements)接口,抽象類可繼承實體類,但前提是實體類必須有明確的構造函數。
59. Severlet的認識,有那些方法
Severlet的生命周期:
主要方法:
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
60. 如何做一個隊列?
隊列是設計程序中常用的一種數據結構。它類似日常生活中的排隊現象,采用一種被稱為“先進先出”(LIFO)的存儲結構。數據元素只能從隊尾進入,從隊首取出。在隊列中,數據元素可以任意增減,但數據元素的次序不會改變。每當有數據元素從隊列中被取出,后面的數據元素依次向前移動一位。所以,任何時候從隊列中讀到的都是隊首的數據。
Vector類是JAVA中專門負責處理對象元素有序存儲和任意增刪的類,因此,用Vector可以快速實現JAVA的隊列類。
方法說明
enq(x) 向隊列插入一個值為x的元素;
deq() 從隊列刪除一個元素;
front() 從隊列中讀一個元素,但隊列保持不變;
empty() 判斷隊列是否為空,空則返回真;
clear() 清空隊列;
search(x) 查找距隊首最近的元素的位置,若不存在,返回-1
其他
61. 條件覆蓋、分支覆蓋等屬于哪種測試
62. 對CMM五個級別的解釋。
(1)初始級。軟件過程的特點是雜亂無章,有時甚至混亂,幾乎沒有明確定義的步驟,成功完全依賴個人努力和英雄式核心人物,管理是反應式(消防式)。
(2)可重復級。建立了基本的項目管理過程來跟蹤成本、進度和功能特性,制定了必要的過程紀律,能重復早先類似應用項目取得成功。
(3)確定級。管理和工程的軟件過程已文件化、標準化,并綜合成整個軟件開發組織的標準軟件過程。所有項目都采用根據實際情況修改后得到的標準軟件過程來發展和維護軟件。
(4)管理級。制定了軟件過程和產品質量詳細的度量標準。軟件過程和產品的質量都被開發組織的成員所理解和控制。
(5)優化級。加強了定量分析,通過來自過程質量反饋和來自新觀念、新科技的反饋使過程能不斷持續地改進。
跳躍無限
易慰懷
java程序員面試考試題及答案 2
一、單項選擇題(共10題,每題2分,共20分)
1. 下列說法哪一個是正確的。( B )
A.Java程序經編譯后會產生machine code
B.Java程序經編譯后會產生byte code
C.Java程序經編譯后會產生DLL
D.以上都不正確
2. 提供Java存取數據庫能力的包是。( A )
A.java.sql B.java.awt C.java.lang D.java.swing
3. 執行如下程序代碼后,C的值是。( C )
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
A.0 B.1 C.-1 D.死循環
4. 下面的語句中正確的表達式為。( C )
A.byte b = 128;
B.boolean n = null;
C.double d = 0.9239d;
D.float f = 0.9239;
5. 將一個十六進制值賦給一個long型變量的正確寫法為。( D )
A.long number = 345L;
B.long number = 0345;
C.long number = 0345L;
D.long number = 0x345L;
6. 以下程序代碼的輸出是。( B )
public class test (
public static void main (String args[]) (
System.out.printIn (6 ^ 3);
)
)
A.3 B.5 C.6 D.11
7. 以下程序代碼的輸出是。(E )
public class test (
private static int j = 0;
private static boolean methodB(int k) (
j += k;
return true;
)
public static void methodA(int i) {
boolean b:
b = i < 10 | methodB (4);
b = i < 10 || methodB (8);
)
public static void main (String args[] } (
methodA (0);
system.out.printIn(j);
)
)
A.0 B.4 C.8 D.12 E.不能編譯通過
8. 以下程序代碼的輸出是。( A)
public class test {
public static void add3 (Integer i) }
int val = i.intValue ( );
val += 3;
i = new Integer (val);
}
public static void main (String args [ ] ) {
Integer i = new Integer (0);
add3 (i);
system.out.printIn (i.intValue ( ) );
}
)
A.編譯失敗 B.編譯成功但在第三行會出現異常 C.0 D.3
9. 以下程序代碼執行后,哪個說法正確?( B )
int index = 1;
boolean[] test = new Boolean[3];
boolean foo= test [index];
A.有異常拋出。
B.無法編譯。
C.foo的值是0。
D.foo的值是null。
E.foo的值是true。
F.foo的值是false。
10. 以下哪個類是swt包中的。( D )
A.MessageBox B.MessageDialog C.JDialog D.DisplayMode
二、多項選擇題(共5題,每題4分,共20分)
1. 在下面的選項中合法的標識符有。( ADEF )
A._ok
B.*point
C.this
D.$byte
E.const
F.ILikeJLCSS
2. 下面的選項中哪些不是java的關鍵字。( AB D )
A.TRUE
B.sizeof
C.goto
D.const
E.super
F.void
3. 下面的敘述中正確的有。( AC )
A. 環境變量可在編譯source code時指定。
B. 在編譯程序時,所能指定的環境變量不包括class path。
C. javac一次可同時編譯數個Java源文件。
D. javac.exe能指定編譯結果要置于哪個目錄(directory)。
4. 下面的敘述中正確的有。( C )
A.equals()方法判定引用值是否指向同一對象。
B.= = 操作符判定兩個分立的對象的內容和類型是否一致。
C.equals()方法只有在兩個對象的內容一致時返回true。
D.類File重寫方法equals()在兩個分立的對象的內容和類型一致時返回true。
5. 下面有關變量及其作用域的陳述哪些是對的。( A C )
A. 在方法里面定義的局部變量在方法退出的時候被撤銷。
B. 局部變量也叫自動變量。
C. 在方法外面定義的變量(譯注:即實例變量)在對象被構造時創建。
D. 在方法中定義的方法的參變量只要該對象被需要就一直存在。
三、簡答題(共7題,共40分)
1. 請寫出一個輸出“Hello World!” 的程序。(3分)
答:public Class Hello World
{
Public static void main(String[]args)
{
System.out.println(“HELLO WOTLD”);
}
}
2. char型變量中能不能存貯一個中文漢字? 為什么? (3分)
答:能存儲一個漢字;因為它能存儲四個字節而每個漢字只占兩個字節。
3. 常見的兩種xml解析技術是什么? 區別是什么? (4分)
答:常見的兩種有:SAX和DOM。
區別:SAX 是一種事件驅動的xml解析方式。每次訪問一個xml文件中的某個節點的時候,sax就會搜索一遍xml文件,在找到相應的節點后就會觸發一個事件來處理請求。只讀
DOM是一種基于樹狀的查找方式。DOM會將xml解析成一棵樹,存在內存中。開發者可以通過查找樹的節點來取得文件的內容或者修改內容?勺x寫
4. MVC是什么,如何實現? (5分)
答:MVC是一個是一個設計模式,它強制性的使應用程序的輸入,處理和輸出分開。使用MVC應用程序被分為三個核心部件:M----------MODO模型,V ----------VIEW 試圖,C --------- Contral控制
實現:首先有頁面(jsp)發送請求給控制器(servlet),然后由控制器接收用戶的請求,并決定應該調用哪個模型(javabean)來進行處理,然后模型用業務邏輯來處理用戶的請求并返回數據,最后控制器用相應的視圖格式化模型返回的數據,并通過表示層顯示給用戶。
5. .J2EE是什么?(6分)
答:J2EE 是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業級應用模型 (enterpriese application model).在這樣的一個應用系統中,可按照功能劃分為不同的.組件,這些組件又可在不同計算機上,并且處于相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。
6. jsp有哪些內置對象?作用分別是什么? (9分)
答:1.request 用戶端請求,此請求會包含來自GET/POST請求的參數;2.response 網頁傳回用戶端的回應;3.pageContext 網頁的屬性是在這里管理;4.session 與請求有關的會話期;5.application servlet 正在執行的內容;6.out 用來傳送回應的輸出;7.config servlet的構架部件;8.page JSP網頁本身;9.exception 針對錯誤網頁,未捕捉的例外
7. 作用域public,private,protected,以及不寫時的區別 ?(10分)
答:作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認為friendly
四、編碼及論述題(共2題,每題10分,共20分)
1. 什么是Singleton,它的作用是什么,它有幾種形式?請用代碼寫出一個Singleton類。
答:Java Singleton 模式用來保證在運行的應用程序中,一個Class只是實例化一次,也就是只有一個相應的對象存在。
它有三種形式
public class Singleton
{
private static Singleton instance = null;
public static synchronized Singleton getInstance()
{
if (instance==null)
instance=new Singleton();
return instance;
}
}
2. 在Struts + Spring + Hibernate的組合框架模式中,三者各自的特點都是什么?
答:Strtus WEB層 Spring是業務層 Hiebenate是持久化層
【java程序員面試考試題及答案】相關文章:
Java工程師面試?荚囶}及答案03-12
2017年Java程序員面試題及答案03-30
Java程序員集合框架面試題及答案10-25
java程序員面試試題11-30
初級java程序員面試要求01-22
java程序員面試題03-08
2016最新java考試題庫及答案03-09
java面試題2017及答案03-06
初級java程序員面試試題03-05