亚洲AV日韩AⅤ综合手机在线观看,激情婷婷久久综合色,欧美色五月婷婷久久,久久国产精品99久久人人澡

  • <abbr id="uk6uq"><abbr id="uk6uq"></abbr></abbr>
  • <tbody id="uk6uq"></tbody>
  • java程序員面試考試題及答案

    時(shí)間:2024-10-30 23:15:42 秀雯 JAVA認(rèn)證 我要投稿
    • 相關(guān)推薦

    java程序員面試考試題及答案

      在各個(gè)領(lǐng)域,我們都離不開(kāi)試題,試題可以幫助學(xué);蚋髦鬓k方考察參試者某一方面的知識(shí)才能。大家知道什么樣的試題才是規(guī)范的嗎?以下是小編為大家收集的java程序員面試考試題及答案,僅供參考,希望能夠幫助到大家。

    java程序員面試考試題及答案

      java程序員面試考試題及答案 1

      WEBLOGIC

      1. WEBLOGIC域里面的服務(wù)器分那幾種,他們之間的關(guān)系是什么?

      管理服務(wù)器和托管服務(wù)器;

      管理服務(wù)器管理托管服務(wù)器.

      2. WEBLOGIC部署業(yè)務(wù)應(yīng)用時(shí),需要修改哪幾個(gè)關(guān)鍵配置文件?

      web模塊:擴(kuò)展名.war,配置文件web.xml,

      ejb模塊:擴(kuò)展名.jar,配置文件ejb-jar.xml,

      ear模塊:擴(kuò)展名.ear,配置文件application.xml

      3. WEBLOGIC中如何配置DataSource?DataSource來(lái)自什么資源?

      weblogic中通過(guò)配置數(shù)據(jù)庫(kù)連接池得到連接池資源,然后通過(guò)連接池資源可以配置出DataSource

      4. WEBLOGIC中如何配置數(shù)據(jù)庫(kù)連接池?主要設(shè)置哪些參數(shù)?

      可以通過(guò)weblogic管理控制臺(tái)進(jìn)行配置,也可以手動(dòng)修改配置文件實(shí)現(xiàn).

      主要設(shè)置:

      數(shù)據(jù)庫(kù)連接字符串(包括IP,端口,數(shù)據(jù)庫(kù)名,訪問(wèn)數(shù)據(jù)庫(kù)的用戶/密碼等),

      數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序類路徑,

      最大連接數(shù),

      最小連接數(shù)等

      http://dev2dev.bea.com.cn/techdoc/2004120203.html

      J2EE

      5. J2ee容器都有那些

      1)、J2EE服務(wù)器:是J2EE產(chǎn)品的運(yùn)行部分。一個(gè)J2EE服務(wù)器提供EJB容器和Web容器。Enterprise JavaBeans(EJB)容器:管理J2EE應(yīng)用程序的enterprise bean的執(zhí)行。Enterprise bean和它的容器運(yùn)行在J2EE服務(wù)器中。

      2)、Web容器:管理J2EE應(yīng)用程序的JSP頁(yè)面和servlet組件的執(zhí)行。Web組件和它的容器也運(yùn)行在J2EE服務(wù)器中。

      3)、客戶端應(yīng)用程序容器:管理應(yīng)用程序客戶端組件的運(yùn)行。應(yīng)用程序客戶端和它的容器運(yùn)行在客戶端中。

      4)、Applet容器:管理applet的執(zhí)行。由運(yùn)行在客戶端的一個(gè)Web瀏覽器和Java插件一同組成。

      6. web容器有哪些

      web容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個(gè)環(huán)境,使JSP,SERVLET直接跟容器中的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問(wèn)題。主要由WEB服務(wù)器來(lái)實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。

      7. JNDI有什么作用?哪些資源可以通過(guò)JNDI查找到?

      通過(guò)目錄名稱訪問(wèn)遠(yuǎn)程服務(wù),JNDI可以訪問(wèn)數(shù)據(jù)庫(kù)連接資源,EJB組件,JMS服務(wù)等等

      8. CMT EJB中對(duì)數(shù)據(jù)庫(kù)進(jìn)行插入和更新操作,一般配置什么事物屬性? Required

      9. CMT EJB中對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢操作,一般配置什么事物屬性? Support

      10. SessionBean組件中的Remote接口,Home接口主要作用是什么?各有哪些主要的抽象方法?

      Home接口中的主要方法是create方法,該方法返回remote接口對(duì)象,Home接口的主要作用就是創(chuàng)建remote接口對(duì)象;

      Remote接口主要定義業(yè)務(wù)抽象方法,在Bean類中實(shí)現(xiàn)了這些抽象方法.

      11. 有狀態(tài)SessionBean中的active方法和deactive方法有什么作用?

      active方法初始化有狀態(tài)SessionBean中的全局資源,并激活EJB容器中有狀態(tài)SessionBean對(duì)象,使得有狀態(tài)SessionBean可以為外部提供服務(wù).

      deactive方法去激活EJB容器中有狀態(tài)SessionBean對(duì)象,釋放有狀態(tài)SessionBean中初始化的全局資源.

      12. 如何實(shí)現(xiàn)事務(wù)控制?

      JDBC事務(wù)管理方式 和 JTA事務(wù)管理方式

      13. 事務(wù)的概念

      事務(wù)處理是由以一個(gè)單一的邏輯單位完成的一系列操作,它可以由一系列的操作組成,如果在該單位包含的操作執(zhí)行完畢后沒(méi)有發(fā)生錯(cuò)誤,那么它所作的改變就是永久的了。如果一旦有錯(cuò)誤發(fā)生,它就會(huì)滾回,不會(huì)作任何修改或改變。

      14. 事務(wù)的特點(diǎn)

      Atomicity, Consistency, Isolation, and Durability

      1,原子性(Atomicity)

      事務(wù)必須是原子工作單元;對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。

      2,一致性 (Consistency)

      事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致?tīng)顟B(tài)。

      3,隔離性 (Isolation)

      由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。

      4,持久性 (Durability)

      事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。

      15. EJB中的事務(wù)

      (一) EJB中事務(wù)處理的屬性有:Required,RequiresNew,Mandatory,NotSupported,Supports,Never.

      1、Required:當(dāng)客戶端運(yùn)行一個(gè)事務(wù)處理并調(diào)用EJB的一個(gè)方法,這個(gè)方法執(zhí)行客戶端的事務(wù)處理;當(dāng)客戶端沒(méi)有啟動(dòng)一個(gè)事務(wù)處理,則EJB容器在執(zhí)行這個(gè)方法之前啟動(dòng)一個(gè)新的事務(wù)處理.

      2、RequiresNew:當(dāng)客戶端運(yùn)行一個(gè)事務(wù)處理并調(diào)用EJB的一個(gè)方法時(shí),容器管理器做如下操作:

      (1) 懸掛客戶端的事務(wù)處理;

      (2) 開(kāi)始一個(gè)新的事務(wù)處理;

      (3) 調(diào)用方法;

      (4) 當(dāng)方法結(jié)束,恢復(fù)客戶端的事物處理.

      當(dāng)客戶端沒(méi)有啟動(dòng)一個(gè)事務(wù)處理,容器管理器在執(zhí)行這個(gè)方法之前啟動(dòng)一個(gè)新的事務(wù)處理.

      3、Mandatory: 當(dāng)客戶端運(yùn)行一個(gè)事務(wù)處理并調(diào)用EJB的一個(gè)方法,這個(gè)方法在客戶端的事務(wù)處理范圍內(nèi)被執(zhí)行; 當(dāng)客戶端沒(méi)有啟動(dòng)一個(gè)事務(wù)處理,容器管理器將會(huì)拋錯(cuò)(TransactionRequiredException);

      4、NotSupported: 當(dāng)客戶端運(yùn)行一個(gè)事務(wù)處理并調(diào)用EJB的一個(gè)方法,容器管理器在調(diào)用方法之前終止客戶端的事務(wù)處理,當(dāng)方法執(zhí)行完,再恢復(fù)客戶端的事務(wù)處理; 當(dāng)客戶端沒(méi)有啟動(dòng)一個(gè)事務(wù)處理,容器管理器在調(diào)用方法時(shí)不啟動(dòng)事務(wù)處理.

      5、Supports: 當(dāng)客戶端運(yùn)行一個(gè)事務(wù)處理并調(diào)用EJB的一個(gè)方法,在運(yùn)行方法時(shí)執(zhí)行客戶端的事務(wù)處理; 當(dāng)客戶端沒(méi)有啟動(dòng)一個(gè)事務(wù)處理,容器管理器在調(diào)用方法時(shí)不啟動(dòng)事務(wù)處理.

      6、Never: 當(dāng)客戶端運(yùn)行一個(gè)事務(wù)處理并調(diào)用EJB的一個(gè)方法,容器管理器將拋出一個(gè)錯(cuò)誤(RemoteException); 當(dāng)客戶端沒(méi)有啟動(dòng)一個(gè)事務(wù)處理,容器管理器在調(diào)用方法時(shí)不啟動(dòng)事務(wù)處理.

      (二) EJB事務(wù)的操作

      如果聲明一個(gè)bean的事務(wù)控制為T(mén)X_BEAN_MANAGED,則這個(gè)bean可以訪問(wèn)事務(wù)服務(wù)。當(dāng)事務(wù)控制應(yīng)用于單個(gè)的方法時(shí)這個(gè)控制只能應(yīng)用于整個(gè)的bean. bean訪問(wèn)事務(wù)服務(wù)的能力不能只對(duì)某個(gè)方法起作用。因此一個(gè)方法聲明事務(wù)控制為T(mén)X_BEAN_MANAGED,而另一個(gè)方法聲明為其它不同的事務(wù)控制是錯(cuò)誤的。廠商的安裝工具應(yīng)該能檢測(cè)到并報(bào)告這個(gè)錯(cuò)誤。Bean分別通過(guò)初始化時(shí)setSessionContext()或 setEntityContext()方法的參數(shù) SessionContext或EntityContext來(lái)訪問(wèn)事務(wù)服務(wù)。這些接口都是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獲得了一個(gè)UserTransaction的引用,就可以用這個(gè)引用管理自己的事務(wù)。有狀態(tài)的會(huì)話bean的方法可以創(chuàng)建一個(gè)事務(wù),而且不用終止事務(wù)就可以返回。如果還有線程調(diào)用bean的方法,容器檢測(cè)是否有bean創(chuàng)建的活動(dòng)的事務(wù),如果被調(diào)用的事務(wù)是同一個(gè)事務(wù),容器會(huì)允許該線程重新進(jìn)入這個(gè)bean.如果bean在事務(wù)中且執(zhí)行不同事務(wù)上下文的線程試圖進(jìn)入bean,容器會(huì)阻塞這個(gè)線程直到bean的事務(wù)終止。如果線程試圖進(jìn)入事務(wù)時(shí) bean不在事務(wù)中,線程會(huì)執(zhí)行一個(gè)自己的事務(wù),容器會(huì)掛起線程當(dāng)前的事務(wù)以允許線程進(jìn)入。一旦線程離開(kāi)方法就會(huì)恢復(fù)線程以前的事務(wù),容器不會(huì)終止任何方法創(chuàng)建的事務(wù)。

      對(duì)于無(wú)狀態(tài)會(huì)話bean和實(shí)體bean,當(dāng)事務(wù)活動(dòng)時(shí)bean的方法不允許返回。容器會(huì)為此拋出一個(gè)例外。

      會(huì)話同步接口

      有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean都可以訪問(wèn)數(shù)據(jù)庫(kù),并且參與一個(gè)事務(wù)。為了讓bean在事務(wù)中執(zhí)行它的任務(wù),bean開(kāi)發(fā)者可以實(shí)現(xiàn)在bean中實(shí)現(xiàn) javax.ejb.SessionSynchronization接口。容器能自動(dòng)檢測(cè)這個(gè)接口,容器會(huì)使用這個(gè)接口中的方法以使bean得到事務(wù)的狀態(tài)信息。實(shí)體bean不支持這個(gè)接口。因?yàn)閷?shí)體bean are implicitly transaction aware,所以容器使用不同的方法控制一個(gè)事務(wù)中的實(shí)體 bean.

      SessionSynchronization接口定義如下:

      public interface javax.ejb.SessionSynchronization {

      public void afterBegin() throws RemoteException;

      public void beforeCompletion() throws RemoteException;

      public void afterCompletion(boolean yn) throws RemoteException;

      }

      實(shí)際上一個(gè)事務(wù)不屬于一個(gè)特殊的bean的實(shí)例。一個(gè)客戶端或容器中執(zhí)行的線程創(chuàng)建一個(gè)事務(wù),在執(zhí)行bean中的代碼時(shí)執(zhí)行該事務(wù)。如果一個(gè)有事務(wù)上下文的線程將要進(jìn)入一個(gè)會(huì)話bean,容器首先調(diào)用它的afterBegin()方法。Bean可以記錄所有的商業(yè)方法運(yùn)行在事務(wù)中,隨后執(zhí)行事務(wù)操作。如果一個(gè)操作的內(nèi)部標(biāo)志顯示這個(gè)線程在事務(wù)外運(yùn)行,則會(huì)拒絕執(zhí)行事務(wù)操作的請(qǐng)求。直到調(diào)用afterCompletion()方法,bean會(huì)繼續(xù)認(rèn)為商業(yè)方法的調(diào)用都在事務(wù)中執(zhí)行。Bean將推斷性地清除內(nèi)部標(biāo)志,以表示隨后到來(lái)的事務(wù)請(qǐng)求將被拒絕。

      如果一個(gè)事務(wù)上下文的線程試圖進(jìn)入一個(gè)已經(jīng)是另一個(gè)事務(wù)的'一部分的Bean時(shí), .Container將封鎖入口,直到前一個(gè)事務(wù)提交或回滾,并且afterCompletion()方法被調(diào)用,此時(shí),允許Bean 恢復(fù)它的狀態(tài)。Container負(fù)責(zé)提供這些行為。當(dāng)Container發(fā)現(xiàn)它將要提交一個(gè)事務(wù)時(shí),將在這個(gè)事務(wù)的所有的session Bean上調(diào)用beforeCompletion()方法。這就給Bean足夠的機(jī)會(huì)來(lái)結(jié)束事務(wù)的操作,如在提交前將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。反之,當(dāng) Container 發(fā)現(xiàn),將要回滾一個(gè)事務(wù)撕,BeforeCompletion()方法將不會(huì)被調(diào)用,因?yàn)閷⒁粋(gè)將被回滾的事務(wù)所產(chǎn)生的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)是沒(méi)有意義的。

      AfterCompletion()是在一個(gè)事務(wù)即將提交或回滾時(shí)被調(diào)用,來(lái)通知Bean事務(wù)操作的最終結(jié)果。Bean可以用這個(gè)信息來(lái)修正自己的內(nèi)部狀態(tài),但它不能用這個(gè)信息來(lái)維持任何它將要保存的事務(wù)。盡管session Bean可以創(chuàng)建,提交和回滾它自己的事務(wù),但通常不推薦這樣做。

      SessionSynchronization接口不提供整合外部和內(nèi)部事務(wù)的能力。如果一個(gè)session bean實(shí)現(xiàn)了這個(gè)接口,則意味著它在方法調(diào)用之間要保持事務(wù)的狀態(tài)。特別地,這也暗示在afterBegin()和afterCompletion() 調(diào)用之間bean是處于一個(gè)事務(wù)中。這樣,如果一個(gè)bean實(shí)現(xiàn)了SessionSynchronization接口并且在裝配符中聲明是無(wú)狀態(tài)的就是一個(gè)錯(cuò)誤。廠商提供的安裝工具應(yīng)該可以捕捉到并報(bào)告這個(gè)錯(cuò)誤。無(wú)狀態(tài)的session bean可以加入一個(gè)事務(wù),但它們不能實(shí)現(xiàn)這個(gè)接口。事務(wù)可以是TX_BEAN_MANAGED,或者container可以在方法入口和從方法的返回上來(lái)開(kāi)始和提交這個(gè)事務(wù)。Container不可允許在一個(gè)現(xiàn)存的事務(wù)中有一個(gè)線程進(jìn)入方法,因?yàn)闊o(wú)狀態(tài)的Bean的方法將無(wú)法知道正在運(yùn)行的線程是否正在一個(gè)事務(wù)中。

      解決這個(gè)問(wèn)題的一個(gè)方法是使container掛起現(xiàn)存的事務(wù),強(qiáng)迫方法總是認(rèn)為線程沒(méi)有在一個(gè)事務(wù)性的上下文中運(yùn)行。有狀態(tài)的Bran可以不實(shí)現(xiàn)這個(gè)接口而介入事務(wù)。但是,裝配符必須要認(rèn)真地配置以使得商務(wù)方法總能在正確的事務(wù)狀態(tài)中運(yùn)行。Bean自己沒(méi)有通過(guò)這個(gè)接口來(lái)獲得自己的事務(wù)的狀態(tài)的權(quán)利。

      加入事務(wù)

      EJBContext接口在前面的一節(jié)中已經(jīng)介紹了。其中有兩個(gè)方法:

      public boolean getRollbackOnly();

      public void setRoolbackOnly();

      這些方法可以有任何bean來(lái)使用,而不僅僅是那些聲明了其事務(wù)控制為bean-managed的bean。事實(shí)上,那些處理自己的事務(wù)的bean將不會(huì)用到這些方法,因?yàn)檫@些方法不是用來(lái)和外界的事務(wù)管理器進(jìn)行交流事務(wù)狀態(tài)的。

      當(dāng)一個(gè)bean調(diào)用了setRollBackOnly()方法時(shí),它是在向事務(wù)管理器詢問(wèn)何時(shí)結(jié)束將要回滾的當(dāng)前事務(wù)。它將給它所參與的事務(wù)的結(jié)果一個(gè)選票。這些方法還存在于UserTransaction接口中,但由于大多數(shù)的bean都不訪問(wèn)這個(gè)接口,這些方法必須直接地在EJBContext中提供給bean。注意這個(gè)方法并不引發(fā)回滾操作,它只是簡(jiǎn)單地設(shè)置標(biāo)志,表示事務(wù)在結(jié)束時(shí)應(yīng)該回滾。不象JavaBan屬性設(shè)置方法,這個(gè)方法不以 boolean值作為參數(shù)。這個(gè)方法是特意設(shè)計(jì)成這樣,以使得一個(gè)bean不能夠改變另一個(gè)bean的回滾請(qǐng)求。一個(gè)bean也許希望使用 getRoolBackOnly()方法,來(lái)檢查當(dāng)前的事務(wù)的狀態(tài)。如果另一個(gè)bean已經(jīng)標(biāo)志這個(gè)事務(wù)為rollback,則正在調(diào)用的bean可以推測(cè)到并決定不能執(zhí)行那些在、強(qiáng)制性達(dá)到操作,如數(shù)據(jù)庫(kù)更新,而這些操作很有可能在事務(wù)結(jié)束時(shí)被反轉(zhuǎn)過(guò)來(lái)。

      客戶劃分的事務(wù)

      盡管一個(gè)JEB廠商所必須的,大服務(wù)器廠商也許決定提供一個(gè)類,使得用戶可以直接訪問(wèn)事務(wù)管理器。當(dāng)需要在同一個(gè)上下文中在兩個(gè)不同的服務(wù)器上調(diào)用 bean時(shí),用戶也許會(huì)希望這樣做。當(dāng)然,每個(gè)bean的裝配符可以允許這樣的行為。用戶可以創(chuàng)建一個(gè)事務(wù),然后在兩個(gè)不同server上的兩個(gè)不同的 bean上調(diào)用商務(wù)方法,而將事務(wù)的上下文也作為調(diào)用的一部分進(jìn)行傳遞。一旦調(diào)用結(jié)束,用戶將推測(cè)地結(jié)束事務(wù)。有container廠商產(chǎn)生的stub和 skeleton將支持事務(wù)上下文的隱式傳遞。

      這里是一個(gè)可能的例子:

      Current current = new Current();

      Current.setServiceProvider(txMgrURL);

      Current.create();

      Current.begin();

      Current.doSomeWork();

      RemRef1.doSomeWork();

      RemRef2.doMoreWork();

      Current.commit();

      數(shù)據(jù)庫(kù)操作的事務(wù)管理

      bean當(dāng)然希望使用JDBC來(lái)建立到數(shù)據(jù)庫(kù)的連接,并在其上進(jìn)行操作。但是,為了符合EJB這種container管理事務(wù)的模式,連接不能使用自動(dòng)提交特性,并且不應(yīng)該在連接上試圖提交或回滾。

      Container的角色是決定在這個(gè)事務(wù)中執(zhí)行的所有行為應(yīng)該提交還是回滾。這里提這樣一個(gè)問(wèn)題很好:container如何看到并管理由bean方法內(nèi)部創(chuàng)建的數(shù)據(jù)庫(kù)連接。盡管在規(guī)范中沒(méi)有明確地提到,EJB將只能使用JDBC驅(qū)動(dòng),而JDBC也正是用來(lái)和EJB配合使用的。在數(shù)據(jù)庫(kù)連接的創(chuàng)建時(shí),驅(qū)動(dòng)程序透明地將連接注冊(cè)到正在執(zhí)行的線程的當(dāng)前事務(wù)中。之后當(dāng)container決定結(jié)束事務(wù)時(shí),數(shù)據(jù)庫(kù)連接將自動(dòng)地結(jié)束它。用OTS的術(shù)語(yǔ)說(shuō),數(shù)據(jù)庫(kù)連接是不可恢復(fù)的資源,有事務(wù)服務(wù)在container的協(xié)助下,隱式地管理。盡管可以在這種情況下使用非事務(wù)感知的JDBC Driver,但開(kāi)發(fā)者必須清楚任何在數(shù)據(jù)庫(kù)連接上所做的操作都不屬于bean的事務(wù),開(kāi)發(fā)者還必須確保在從方法返回之前結(jié)束數(shù)據(jù)庫(kù)連接事務(wù)。試圖使用 SessionSynchronization接口來(lái)合并數(shù)據(jù)庫(kù)連接事務(wù)和bean本身的事務(wù)是不可靠的,是不應(yīng)該作的。

      分布事務(wù)的支持

      一個(gè)分布事務(wù)在下面的情況下是需要的:

      . 一個(gè)用戶使用用戶劃分的在多個(gè)server上的多個(gè)bean中創(chuàng)建和調(diào)用方法的事務(wù)。

      . 一個(gè)在其他的server上調(diào)用其他EJB的方法的bean的方法。

      對(duì)于這些工作廠商必須為EJBObject生成stub和skeleton來(lái)隱式地獲得當(dāng)前事務(wù)的上下文,同時(shí)將其通過(guò)方法調(diào)用傳到遠(yuǎn)程bean。當(dāng)將商務(wù)方法調(diào)用委派給bean時(shí),遠(yuǎn)程bean的EJBObject的skeleton必須請(qǐng)求這個(gè)事務(wù)的上下文

      16. JDBC控制事務(wù)

      在JDBC中怎樣將多個(gè)SQL語(yǔ)句組合成一個(gè)事務(wù)呢?在JDBC中,打開(kāi)一個(gè)連接對(duì)象Connection時(shí),缺省是auto-commit模式,每個(gè) SQL語(yǔ)句都被當(dāng)作一個(gè)事務(wù),即每次執(zhí)行一個(gè)語(yǔ)句,都會(huì)自動(dòng)的得到事務(wù)確認(rèn)。為了能將多個(gè)SQL語(yǔ)句組合成一個(gè)事務(wù),要將auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不調(diào)用commit()方法,SQL語(yǔ)句不會(huì)得到事務(wù)確認(rèn)。在最近一次commit()方法調(diào)用之后的所有SQL會(huì)在方法commit()調(diào)用時(shí)得到確認(rèn)。出現(xiàn)異常時(shí),rollback對(duì)事務(wù)進(jìn)行回滾。

      17. JTA事務(wù)管理方式

      Java事務(wù)API(Java Transaction API,JTA)用于為EJB組件提供與數(shù)據(jù)庫(kù)管理器無(wú)關(guān)的事務(wù)組件管理方式。JTA作為Java事務(wù)服務(wù)(Java Transaction Service,JTS)的高層應(yīng)用編程接口,使得在組件程序設(shè)計(jì)過(guò)程中可以利用JTA中的相應(yīng)方法控制組件的事務(wù)范圍以及事務(wù)管理方式。請(qǐng)讀者看下面的代碼:

      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());

      } }

      在上面的代碼中,讀者首先看到用戶事務(wù)接口對(duì)象UserTransaction。在該接口中定義了用于確定組件事務(wù)范圍以及控制組件事務(wù)過(guò)程的 begin、commit和rollback方法。在組件方法執(zhí)行之前首先調(diào)用UserTransaction接口中的begin方法確定組件的事務(wù)過(guò)程開(kāi)始,在組件商務(wù)方法執(zhí)行過(guò)程中如果沒(méi)有發(fā)生異常,則調(diào)用commit方法提交事務(wù)范圍內(nèi)方法的運(yùn)行結(jié)果,否則調(diào)用rollback方法將方法運(yùn)行結(jié)果回滾并拋出EJBException類型異常。

      事務(wù)管理方式總結(jié)

      對(duì)于不同類型的EJB組件,在組件開(kāi)發(fā)和組裝可以選擇不同的組件事務(wù)管理方式。下表對(duì)不同類型EJB組件適用的事務(wù)管理方式進(jìn)行了總結(jié):

      表1 組件類型與可選事務(wù)管理方式匯總表

      組件類型 容器事務(wù)管理方式 組件事務(wù)管理方式

      JDBC JTA

      會(huì)話組件 Y Y Y

      實(shí)體組件 Y N N

      消息驅(qū)動(dòng)組件 Y Y Y

      從上表可以看出:除了實(shí)體組件不能采用JDBC和JTA事務(wù)管理方式外,其它任何事務(wù)管理方式均適用于所有類型的EJB組件。

      18. 使用事務(wù)的技巧:

      (1) 一個(gè)事務(wù)不要涉及太多的操作.

      (2) 容器管理和bean管理的事務(wù)

      事務(wù)既耗費(fèi)應(yīng)用服務(wù)器中的資源,又耗費(fèi)數(shù)據(jù)庫(kù)資源,所以事務(wù)越短越好.

      盡量使用容器管理事務(wù)而不要采用bean管理事務(wù)的方式.

      (3) ejb遇到錯(cuò)誤,需要強(qiáng)制事務(wù)回滾. 使用EJBObject.setRollbackOnly();

      (4) 不能讓事務(wù)涉及web層和表示邏輯

      (5) 企業(yè)應(yīng)用中不應(yīng)當(dāng)選用supports 事務(wù)屬性,因?yàn)橹挥姓{(diào)用者開(kāi)始一個(gè)事務(wù)后,ejb才能在事務(wù)中運(yùn)行.

      19. J2ee的認(rèn)識(shí)

      Je22是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用模型(enterpriese application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。

      20. 簡(jiǎn)述EJB

      (1)企業(yè)JavaBean(Enterprise JavaBean,EJB)為開(kāi)發(fā)服務(wù)器端企業(yè)應(yīng)用程序組件提供了一個(gè)模型,利用這個(gè)模型開(kāi)發(fā)用來(lái)創(chuàng)建可移植與分布式企業(yè)應(yīng)用程序的服務(wù)器企業(yè)應(yīng)用程序組件,比創(chuàng)建獨(dú)立的企業(yè)應(yīng)用程序所需使用的企業(yè)應(yīng)用程序組件更為簡(jiǎn)單。

      (2)EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。

      (3) 開(kāi)發(fā)EJB的主要步驟一般來(lái)說(shuō),整個(gè)的開(kāi)發(fā)步驟(開(kāi)發(fā),配置,組裝)包括如下幾個(gè)方面。

      開(kāi)發(fā):首先要定義三個(gè)類:Bean類本身,Bean的本地和遠(yuǎn)程接口類。

      配置:配置包括產(chǎn)生配置描述器-這是一個(gè)XML文件、聲明了Enterprise Bean的屬性、綁定了bean的class文件(包括stub文件和skeleton文件)。最后將這些配置都放到一個(gè)jar文件中。還需要在配置器中定義環(huán)境屬性。

      組裝應(yīng)用程序:包括將Enterprise beans安裝到Server服務(wù)器中,測(cè)試各層的連接情況。程序組裝器將若干個(gè)Enterprise Beans與其它的組件結(jié)合起來(lái),組合成一個(gè)完整的應(yīng)用程序;或者將若干個(gè)Enterprise beans組合成一個(gè)復(fù)雜的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有那幾種實(shí)現(xiàn)(事務(wù)處理)(Spring)

      在Spring中,事務(wù)處理主要有兩種方式

      (1) 代碼控制事務(wù)

      在程序中引入新的模版類,這個(gè)類封裝了事務(wù)管理的功能

      (2) 參數(shù)配置控制事務(wù)

      在Application-Context.xml增加一個(gè)事務(wù)代理(UserDAOProxy)配置,

      23. IBATIS中的事物屬性怎么配置

      SQL MAP XML配置文件中的transactionManager

      24. STRUTS的配置文件是什么?

      struts-config.xml

      ORACLE

      25. Oracle中的事務(wù)

      Oracle在缺省情況下任何一個(gè)DML語(yǔ)句都會(huì)開(kāi)始一個(gè)事務(wù),直到用戶發(fā)出Commit或Rollback操作,這個(gè)事務(wù)才會(huì)結(jié)束。在Oracle中,執(zhí)行 DDL語(yǔ)句(如Create Table、Create View等)時(shí),會(huì)在執(zhí)行之前自動(dòng)發(fā)出一個(gè)Commit命令,并在隨后發(fā)出一個(gè)Commit或者Rollback命令。

      (1) 提交事務(wù)

      提交一事務(wù),即將在事務(wù)中由SQL語(yǔ)句所執(zhí)行的改變永久化。在提交前,ORACLE已有下列情況:

      在SGA的回滾段緩沖區(qū)已生成回滾段記錄,回滾信息包含有所修改值的老值。

      在SGA的日志緩沖區(qū)已生成日志項(xiàng)。這些改變?cè)谑聞?wù)提交前可進(jìn)入磁盤(pán)。

      對(duì)SGA的數(shù)據(jù)庫(kù)緩沖區(qū)已作修改,這些修改在事務(wù)真正提交之前可進(jìn)入磁盤(pán)。

      在事務(wù)提交之后,有下列情況:

      對(duì)于與回滾段相關(guān)的內(nèi)部事務(wù)表記錄提交事務(wù),并賦給一個(gè)相應(yīng)的唯一系統(tǒng)修改號(hào)(SCN),記錄在表中。

      在SGA的日志緩沖區(qū)中日志項(xiàng)由LGWR進(jìn)程寫(xiě)入到在線日志文件,這是構(gòu)成提交事務(wù)的原子事務(wù)。

      在行上和表上的封鎖被釋放。

      該事務(wù)標(biāo)志為完成 。

      注意:對(duì)于提交事務(wù)的數(shù)據(jù)修改不必由DBWR后臺(tái)進(jìn)程立即寫(xiě)入數(shù)據(jù)文件,可繼續(xù)存儲(chǔ)在SGA的數(shù)據(jù)庫(kù)緩沖區(qū)中,在最有效時(shí)將其寫(xiě)入數(shù)據(jù)文件。

      (2) 回滾事務(wù)

      回滾事務(wù)的含義是撤消未提交事務(wù)中的SQL語(yǔ)句所作的對(duì)數(shù)據(jù)修改。ORALCE允許撤消未提交的整個(gè)事務(wù),也允許撤消部分。

      在回滾整個(gè)事務(wù)(沒(méi)有引用保留點(diǎn))時(shí),有下列情況:

      在事務(wù)中所有SQL語(yǔ)句作的全部修改,利用相應(yīng)的回滾段被撤消。

      所有數(shù)據(jù)的事務(wù)封鎖被釋放。

      事務(wù)結(jié)束。

      當(dāng)事務(wù)回滾到一保留點(diǎn)(具有SAVEPOINT)時(shí),有下列情況:

      僅在該保留點(diǎn)之后執(zhí)行的語(yǔ)句被撤消。

      該指定的保留點(diǎn)仍然被保留,該保留點(diǎn)之后所建立的保留點(diǎn)被刪除。

      自該保留點(diǎn)之后所獲取的全部表封鎖和行封鎖被釋放,但指定的保留點(diǎn)以前所獲取的全部數(shù)據(jù)封鎖繼續(xù)保持。

      該事務(wù)仍可繼續(xù)。

      (3) 保留點(diǎn)

      保留點(diǎn)(savepoint)是在一事務(wù)范圍內(nèi)的中間標(biāo)志,經(jīng)常用于將一個(gè)長(zhǎng)的事務(wù)劃分為小的部分。保留點(diǎn)可標(biāo)志長(zhǎng)事務(wù)中的任何點(diǎn),允許可回滾該點(diǎn)之后的工作。在應(yīng)用程序中經(jīng)常使用保留點(diǎn);例如一過(guò)程包含幾個(gè)函數(shù),在每個(gè)函數(shù)前可建立一個(gè)保留點(diǎn),如果函數(shù)失敗,很容易返回到每一個(gè)函數(shù)開(kāi)始的情況。在回滾到一個(gè)保留點(diǎn)之后,該保持點(diǎn)之后所獲得的數(shù)據(jù)封鎖被釋放。

      26. 視圖在什么情況下可以對(duì)其,刪除,修改操作:

      DML操作應(yīng)遵循的原則:

      1).簡(jiǎn)單視圖可以執(zhí)行 DML操作;

      2). 在視圖包含GROUP 函數(shù),GROUP BY子句,DISTINCT關(guān)鍵字時(shí)不能刪除數(shù)據(jù)行;

      3).在視圖不出現(xiàn)下列情況時(shí)可通過(guò)視圖修改基表數(shù)據(jù)或插入數(shù)據(jù):

      a.視圖中包含GROUP 函數(shù),GROUP BY子句,DISTINCT關(guān)鍵字;

      b.使用表達(dá)式定義的列;

      c.ROWNUM偽列。

      d.基表中未在視圖中選擇的其他列定義為非空且無(wú)默認(rèn)值。

      WITH CHECK OPTION 子句限定:

      通過(guò)視圖執(zhí)行的INSERTS和UPDATES操作不能創(chuàng)建該視圖檢索不到的數(shù)據(jù)行,

      因?yàn)樗鼤?huì)對(duì)插入或修改的數(shù)據(jù)行執(zhí)行完整性約束和數(shù)據(jù)有效性檢查。

      視圖的刪除:

      DROP VIEW VIEW_NAME語(yǔ)句刪除視圖。

      刪除視圖的定義不影響基表中的數(shù)據(jù)。

      只有視圖所有者和具備DROP VIEW權(quán)限的用戶可以刪除視圖。

      視圖被刪除后,基于被刪除視圖的其他視圖或應(yīng)用將無(wú)效。

      27. oracle中各種連接的寫(xiě)法:

      內(nèi)連接,外連接 ,左外連接,右外連接

      以上幾種連接一般用于多表之間復(fù)雜的查詢,

      下面先說(shuō)說(shuō)內(nèi)連接,也即相等連接,如右兩張表 dept ,employee,

      dept里有字段deptid,deptname,employee有字段empno,deptid,ename,sal,age等

      那連接查詢語(yǔ)句如下:select A.* ,B.* from dept A,employee B where A.deptid=B.deptid

      一般出現(xiàn)這種情況的是一張是主表,另一張是子表,主表的主鍵作為子表的外鍵,顯示結(jié)果按照子表的顯示,內(nèi)連接簡(jiǎn)單,這里就不多說(shuō)了

      外連接在oralce里用(+)表示,先看例子

      select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where emp.deptno(+) =dept.deptno

      這是一個(gè)右連接

      看下面的例子

      select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where dept.no=emp.deptno(+)

      這是一個(gè)左連接

      兩個(gè)查詢顯示的查詢結(jié)果是一樣的,剛開(kāi)始學(xué)oracle的時(shí)候很多人都很難明白這個(gè),現(xiàn)在有個(gè)笨辦法,

      大家不防記下來(lái),(+)出現(xiàn)查詢條件的左邊即右連接,出現(xiàn)在右邊即左連接。(+)可以放在左邊也可以

      放在右邊,但是一定要放在缺少條件的那一邊,如上面的例子中,如果公司最近準(zhǔn)備成立一個(gè)新的部門(mén),

      測(cè)試部門(mén),但現(xiàn)在還沒(méi)有招新員工,而現(xiàn)在Boss想知道公司有知道公司的員工在那個(gè)部門(mén)并且想知道

      沒(méi)有員工的部門(mén),我們可以用上面的查詢語(yǔ)句實(shí)現(xiàn)。

      左外連接(left outer join)和右外連接(reght outer join)如同上面的外連接,查詢的結(jié)果是一樣的。

      左外連接: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)

      以上顯示的結(jié)果和外連接查詢出來(lái)的結(jié)果是一樣的,只是寫(xiě)法不一樣而已,實(shí)際工作中外連接用的比較多,沒(méi)有必要都要去用它,但是概念大家一定要了解。

      全外關(guān)聯(lián) :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);

      結(jié)果為:所有員工及對(duì)應(yīng)部門(mén)的記錄,包括沒(méi)有對(duì)應(yīng)部門(mén)編號(hào)department_id的員工記錄和沒(méi)有任何員工的部門(mén)記錄。

      28. 查詢的優(yōu)化

      1).根據(jù)查詢條件建立合適的index

      2).因?yàn)镾QL是從右向左解析,多表查詢時(shí),記錄數(shù)少的表放在右邊

      3).多個(gè)條件時(shí),收斂快的條件放在右邊。

      4).避免使用復(fù)雜的集合函數(shù),象not in等。

      5).避免在條件中對(duì)字段進(jìn)行函數(shù)操作

      6).盡量避免使用select *,應(yīng)該寫(xiě)出需要查詢的字段

      7).在java中盡量使用preparestatement執(zhí)行sql,從而共享執(zhí)行計(jì)劃"

      29. 怎么看執(zhí)行計(jì)劃

      使用explain或者autotrace查看執(zhí)行計(jì)劃

      30. 如何強(qiáng)制一個(gè)SQL語(yǔ)句使用索引? 使用index hints

      31. Oracle中的PL/SQL塊是否熟悉?Oracle中的內(nèi)置函數(shù)是否熟悉?

      內(nèi)置函數(shù):ASCII,CHR,CONCAT, decode,to_date,to_char,to_number等等

      32. 如何取一個(gè)沒(méi)有排序的查詢結(jié)果中的前10條記錄?

      select fielda from tablea where rownum<=10;

      33. 問(wèn):如何取一個(gè)有排序的查詢結(jié)果中的前10條記錄?

      select fielda from

      (select fielda from tablea order by fieldb )

      where rownum<=10;

      錯(cuò)誤寫(xiě)法:select fielda from tablea where rownum<=10 order by fieldb;

      34. 如何取一個(gè)沒(méi)有排序的查詢結(jié)果中的第11條到第20條記錄?

      select fielda from

      (select fielda,rownum rn from tablea where rownum<=20)

      where rn>=11;

      35. 如何取一個(gè)有排序的查詢結(jié)果中的第11條到第20條記錄?

      select fielda from

      (select fielda ,rownum rn from

      (select fielda from tablea order by fieldb )

      where rownum<=20

      ) where rn>=11;

      36. 數(shù)據(jù)庫(kù)設(shè)計(jì)中,主鍵的作用?

      主鍵的作用保持?jǐn)?shù)據(jù)表記錄的唯一性,建立主鍵索引和作為外鍵使用.使用主鍵與外鍵的配對(duì)來(lái)表示實(shí)體間的連接.

      37. Oracle數(shù)據(jù)庫(kù)設(shè)計(jì)中,建立外鍵的方法?

      (1)用Create table命令語(yǔ)句在設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí)建立外鍵

      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命令語(yǔ)句,為一個(gè)存在的表添加外鍵

      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內(nèi)置對(duì)象

      1).HttpServletRequest類的Request對(duì)象

      2).HttpServletResponse類的Respone對(duì)象

      3).JspWriter類的out對(duì)象

      4).HttpSession類的session對(duì)象

      5).ServletContex類的application對(duì)象

      6).PageContext類的PageContext對(duì)象

      7).ServletConfig類的Config對(duì)象

      8)Object類的Page(相當(dāng)于this)對(duì)象

      9)Exception

      39. Servlet中的主要方法有哪些?各有什么作用?

      init方法初始化Servlet

      service方法是Servlet中的業(yè)務(wù)方法,根據(jù)請(qǐng)求方式調(diào)用不同的doXXX(doGet方法或doPost方法等)響應(yīng)請(qǐng)求

      destroy方法釋放Servlet資源

      40. 接口Interface有什么作用?使用接口主要有什么好處?

      1) .接口只是一個(gè)框架而沒(méi)有實(shí)現(xiàn),因此在接口定義時(shí)不需要考慮接口中的方法如何實(shí)現(xiàn);

      2).利用接口可達(dá)到實(shí)現(xiàn)多繼承的目的;

      3).可以在不暴露對(duì)象的類的前提下,暴露對(duì)象的編程接口.

      41. static和final修飾類,修飾方法和修飾屬性時(shí)表示什么?

      static可以修飾類,方法,屬性,分別表示靜態(tài)類,靜態(tài)方法,靜態(tài)屬性

      final修飾類表示類是最終類,不可再被繼承

      final修飾方法表示方法不可被子類重寫(xiě)(override)

      final修飾屬性表示屬性是常量

      42. 自定義標(biāo)簽有什么作用?

      方便JSP頁(yè)面代碼的維護(hù),代碼重用

      43. 數(shù)據(jù)庫(kù)連接對(duì)象使用以后在何處釋放?

      try{}catch(){}finally{} 在finally{}中釋放數(shù)據(jù)庫(kù)連接對(duì)象

      44. 異常對(duì)象如何分級(jí)捕獲?

      最底層的異常對(duì)象(子類異常)放在最前面,越高層的異常對(duì)象(父類異常)越放在后面

      45. 重載(overload)和重寫(xiě)(override)是什么?

      重載(overload)為類似功能的方法提供了統(tǒng)一的名稱,但是根據(jù)參數(shù)列型態(tài)的不同,而自動(dòng)呼叫對(duì)應(yīng)的方法

      重寫(xiě)(override)是子類繼承父類的方法,但是在子類中有不同的方法實(shí)現(xiàn)

      46. 工作中使用過(guò)哪些設(shè)計(jì)模式?請(qǐng)舉2至3個(gè)例子并說(shuō)明使用場(chǎng)景.

      工廠模式,單態(tài)模式,Facade模式等等

      47. 什么時(shí)候釋放connection

      應(yīng)該在finally{}語(yǔ)句塊里釋放connection;

      finally{

      if (conn != null)

      conn.close();

      }

      48. 異常處理,如何處理多個(gè)異常?

      異常處理的語(yǔ)句是try{}catch(){}finally{}

      當(dāng)有多個(gè)catch()語(yǔ)句,來(lái)處理多個(gè)異常的話,強(qiáng)調(diào)(如果一個(gè)異常是另個(gè)異常的子類的話,在并行處理的時(shí)候子類的異常不會(huì)抓到);

      49. 可以在try語(yǔ)句模塊里釋放connection嗎?可以.

      50. jsp標(biāo)簽的作用和好處

      答:主要用來(lái)顯示結(jié)果數(shù)據(jù),用來(lái)溝通表示層和業(yè)務(wù)邏輯層,把頁(yè)面美工工作和程序編寫(xiě)分開(kāi)。

      51. statement對(duì)象有多少種,以及作用和用法

      答:三種,分別為statement,PreparedStatement,CallableStatement

      作用是:建立了到特定數(shù)據(jù)庫(kù)的連接之后,就可用該連接發(fā)送 SQL 語(yǔ)句.

      1).PreparedStatement對(duì)象有可能比 Statement 對(duì)象的效率更高,因?yàn)樗驯活A(yù)編譯過(guò)并存放在那以供將來(lái)使用。

      2).由方法 prepareCall 所創(chuàng)建。CallableStatement 對(duì)象用于執(zhí)行 SQL

      儲(chǔ)存程序 ─ 一組可通過(guò)名稱來(lái)調(diào)用(就象函數(shù)的調(diào)用那樣)的SQL 語(yǔ)句。CallableStatement 對(duì)象PreparedStatement 中繼承了用于處理 IN 參數(shù)的方法,而且還增加了用于處理 OUT 參數(shù)和INOUT 參數(shù)的方法。

      特別強(qiáng)調(diào):如果數(shù)據(jù)庫(kù)支持已存儲(chǔ)過(guò)程,則可從 JDBC 中調(diào)用它們,CallableStatement可調(diào)用存儲(chǔ)過(guò)程語(yǔ)法為:

      {call procedure_name[(?, ?, . . .)]}

      52. Final,finalizer,finally區(qū)別和各自的用法

      final—修飾符

      如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為 abstract的,又被聲明為final的。

      將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。

      被聲明為final的方法也同樣只能使用,不能重載。

      finally—程序控制字

      在異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。例如下面語(yǔ)句

      Try{

      語(yǔ)句1

      }

      catch(){

      語(yǔ)句2

      }

      finally{

      語(yǔ)句3

      }

      語(yǔ)句3始終都會(huì)執(zhí)行

      finalize—方法名

      Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。

      53. equals,toString,hasCode三個(gè)方法

      Equals:比較的兩個(gè)對(duì)象不愿是同一對(duì)象,你就應(yīng)該實(shí)現(xiàn)equals方法,讓對(duì)象用你認(rèn)為相等的條件來(lái)進(jìn)行比較.

      toString: 返回代表該對(duì)象的一個(gè)字串。一般的,toString方法返回該對(duì)象‘文字描述’的字串。返回的結(jié)果(即字串)應(yīng)該是簡(jiǎn)明且易讀的信息。建議所有繼承類覆蓋該方法

      hasCode:(雜湊碼)會(huì)根據(jù)對(duì)象型別、個(gè)數(shù)及內(nèi)容等計(jì)算出所對(duì)應(yīng)的內(nèi)存識(shí)別值,相同對(duì)象與內(nèi)容會(huì)計(jì)算出相同的hasCode。

      54. 什么時(shí)候會(huì)使用hasCode

      hascode是用hashTable的時(shí)候?yàn)榱藱z索才用的

      55. Hashtable和hashmap的區(qū)別

      共同點(diǎn):都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。

      區(qū)別:(1)HashMap 類沒(méi)有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。

      (2)Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。因?yàn)樗峭降乃菻ashMap 慢。線程安全性比較好

      56. 問(wèn):舉例介紹java中有哪些集合?

      答:主要有LinkedList,ArrayList,Vector等

      下面是詳細(xì)

      Collection

      ├List

      │├LinkedList

      │├ArrayList

      │└Vector

      │ └Stack

      └Set

      Map

      ├Hashtable

      ├HashMap

      └WeakHashMap

      57. ArrayList,Vector,LinkedList的區(qū)別

      答:

      (1) ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢。

      (2) Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差

      (3) LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。

      58. 說(shuō)說(shuō)抽象類和接口的區(qū)別。

      (1)抽象類可以提供某些方法的實(shí)現(xiàn)。如果向抽象類中加入一個(gè)新的具體的方法,那么所有的子類一下子就得到了這個(gè)方法。接口做不到這一點(diǎn)!(這也許是抽象類的唯一優(yōu)點(diǎn))。

      (2)因java的單根結(jié)構(gòu)限制,子類只能實(shí)現(xiàn)一個(gè)抽象類類型,而接口類型則無(wú)此限制。這使抽象類作為類型定義工具的效能落后于接口。接口是定義混合類型(實(shí)現(xiàn)多重繼承)的理想工具。

      (3)從代碼重構(gòu)的角度上講,將一個(gè)具體類從構(gòu)成一個(gè)接口類型實(shí)現(xiàn)起來(lái)更容易。

      接口可以實(shí)現(xiàn)接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。

      59. Severlet的認(rèn)識(shí),有那些方法

      Severlet的生命周期:

      主要方法:

      public void init(ServletConfig config)

      public ServletConfig getServletConfig()

      public String getServletInfo()

      public void service(ServletRequest request,ServletResponse response)

      public void destroy()

      60. 如何做一個(gè)隊(duì)列?

      隊(duì)列是設(shè)計(jì)程序中常用的一種數(shù)據(jù)結(jié)構(gòu)。它類似日常生活中的排隊(duì)現(xiàn)象,采用一種被稱為“先進(jìn)先出”(LIFO)的存儲(chǔ)結(jié)構(gòu)。數(shù)據(jù)元素只能從隊(duì)尾進(jìn)入,從隊(duì)首取出。在隊(duì)列中,數(shù)據(jù)元素可以任意增減,但數(shù)據(jù)元素的次序不會(huì)改變。每當(dāng)有數(shù)據(jù)元素從隊(duì)列中被取出,后面的數(shù)據(jù)元素依次向前移動(dòng)一位。所以,任何時(shí)候從隊(duì)列中讀到的都是隊(duì)首的數(shù)據(jù)。

      Vector類是JAVA中專門(mén)負(fù)責(zé)處理對(duì)象元素有序存儲(chǔ)和任意增刪的類,因此,用Vector可以快速實(shí)現(xiàn)JAVA的隊(duì)列類。

      方法說(shuō)明

      enq(x) 向隊(duì)列插入一個(gè)值為x的元素;

      deq() 從隊(duì)列刪除一個(gè)元素;

      front() 從隊(duì)列中讀一個(gè)元素,但隊(duì)列保持不變;

      empty() 判斷隊(duì)列是否為空,空則返回真;

      clear() 清空隊(duì)列;

      search(x) 查找距隊(duì)首最近的元素的位置,若不存在,返回-1

      其他

      61. 條件覆蓋、分支覆蓋等屬于哪種測(cè)試

      62. 對(duì)CMM五個(gè)級(jí)別的解釋。

      (1)初始級(jí)。軟件過(guò)程的特點(diǎn)是雜亂無(wú)章,有時(shí)甚至混亂,幾乎沒(méi)有明確定義的步驟,成功完全依賴個(gè)人努力和英雄式核心人物,管理是反應(yīng)式(消防式)。

      (2)可重復(fù)級(jí)。建立了基本的項(xiàng)目管理過(guò)程來(lái)跟蹤成本、進(jìn)度和功能特性,制定了必要的過(guò)程紀(jì)律,能重復(fù)早先類似應(yīng)用項(xiàng)目取得成功。

      (3)確定級(jí)。管理和工程的軟件過(guò)程已文件化、標(biāo)準(zhǔn)化,并綜合成整個(gè)軟件開(kāi)發(fā)組織的標(biāo)準(zhǔn)軟件過(guò)程。所有項(xiàng)目都采用根據(jù)實(shí)際情況修改后得到的標(biāo)準(zhǔn)軟件過(guò)程來(lái)發(fā)展和維護(hù)軟件。

      (4)管理級(jí)。制定了軟件過(guò)程和產(chǎn)品質(zhì)量詳細(xì)的度量標(biāo)準(zhǔn)。軟件過(guò)程和產(chǎn)品的質(zhì)量都被開(kāi)發(fā)組織的成員所理解和控制。

      (5)優(yōu)化級(jí)。加強(qiáng)了定量分析,通過(guò)來(lái)自過(guò)程質(zhì)量反饋和來(lái)自新觀念、新科技的反饋使過(guò)程能不斷持續(xù)地改進(jìn)。

      跳躍無(wú)限

      易慰懷

      java程序員面試考試題及答案 2

      一、單項(xiàng)選擇題(共10題,每題2分,共20分)

      1. 下列說(shuō)法哪一個(gè)是正確的。( B )

      A.Java程序經(jīng)編譯后會(huì)產(chǎn)生machine code

      B.Java程序經(jīng)編譯后會(huì)產(chǎn)生byte code

      C.Java程序經(jīng)編譯后會(huì)產(chǎn)生DLL

      D.以上都不正確

      2. 提供Java存取數(shù)據(jù)庫(kù)能力的包是。( A )

      A.java.sql B.java.awt C.java.lang D.java.swing

      3. 執(zhí)行如下程序代碼后,C的值是。( C )

      a=0;c=0;

      do{

      --c;

      a=a-1;

      }while(a>0);

      A.0 B.1 C.-1 D.死循環(huán)

      4. 下面的語(yǔ)句中正確的表達(dá)式為。( C )

      A.byte b = 128;

      B.boolean n = null;

      C.double d = 0.9239d;

      D.float f = 0.9239;

      5. 將一個(gè)十六進(jìn)制值賦給一個(gè)long型變量的正確寫(xiě)法為。( 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.不能編譯通過(guò)

      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.編譯成功但在第三行會(huì)出現(xiàn)異常 C.0 D.3

      9. 以下程序代碼執(zhí)行后,哪個(gè)說(shuō)法正確?( B )

      int index = 1;

      boolean[] test = new Boolean[3];

      boolean foo= test [index];

      A.有異常拋出。

      B.無(wú)法編譯。

      C.foo的值是0。

      D.foo的值是null。

      E.foo的值是true。

      F.foo的值是false。

      10. 以下哪個(gè)類是swt包中的。( D )

      A.MessageBox B.MessageDialog C.JDialog D.DisplayMode

      二、多項(xiàng)選擇題(共5題,每題4分,共20分)

      1. 在下面的選項(xiàng)中合法的標(biāo)識(shí)符有。( ADEF )

      A._ok

      B.*point

      C.this

      D.$byte

      E.const

      F.ILikeJLCSS

      2. 下面的選項(xiàng)中哪些不是java的關(guān)鍵字。( AB D )

      A.TRUE

      B.sizeof

      C.goto

      D.const

      E.super

      F.void

      3. 下面的敘述中正確的有。( AC )

      A. 環(huán)境變量可在編譯source code時(shí)指定。

      B. 在編譯程序時(shí),所能指定的環(huán)境變量不包括class path。

      C. javac一次可同時(shí)編譯數(shù)個(gè)Java源文件。

      D. javac.exe能指定編譯結(jié)果要置于哪個(gè)目錄(directory)。

      4. 下面的敘述中正確的有。( C )

      A.equals()方法判定引用值是否指向同一對(duì)象。

      B.= = 操作符判定兩個(gè)分立的對(duì)象的內(nèi)容和類型是否一致。

      C.equals()方法只有在兩個(gè)對(duì)象的內(nèi)容一致時(shí)返回true。

      D.類File重寫(xiě)方法equals()在兩個(gè)分立的對(duì)象的內(nèi)容和類型一致時(shí)返回true。

      5. 下面有關(guān)變量及其作用域的陳述哪些是對(duì)的。( A C )

      A. 在方法里面定義的局部變量在方法退出的時(shí)候被撤銷。

      B. 局部變量也叫自動(dòng)變量。

      C. 在方法外面定義的變量(譯注:即實(shí)例變量)在對(duì)象被構(gòu)造時(shí)創(chuàng)建。

      D. 在方法中定義的方法的參變量只要該對(duì)象被需要就一直存在。

      三、簡(jiǎn)答題(共7題,共40分)

      1. 請(qǐng)寫(xiě)出一個(gè)輸出“Hello World!” 的程序。(3分)

      答:public Class Hello World

      {

      Public static void main(String[]args)

      {

      System.out.println(“HELLO WOTLD”);

      }

      }

      2. char型變量中能不能存貯一個(gè)中文漢字? 為什么? (3分)

      答:能存儲(chǔ)一個(gè)漢字;因?yàn)樗艽鎯?chǔ)四個(gè)字節(jié)而每個(gè)漢字只占兩個(gè)字節(jié)。

      3. 常見(jiàn)的兩種xml解析技術(shù)是什么? 區(qū)別是什么? (4分)

      答:常見(jiàn)的兩種有:SAX和DOM。

      區(qū)別:SAX 是一種事件驅(qū)動(dòng)的xml解析方式。每次訪問(wèn)一個(gè)xml文件中的某個(gè)節(jié)點(diǎn)的時(shí)候,sax就會(huì)搜索一遍xml文件,在找到相應(yīng)的節(jié)點(diǎn)后就會(huì)觸發(fā)一個(gè)事件來(lái)處理請(qǐng)求。只讀

      DOM是一種基于樹(shù)狀的查找方式。DOM會(huì)將xml解析成一棵樹(shù),存在內(nèi)存中。開(kāi)發(fā)者可以通過(guò)查找樹(shù)的節(jié)點(diǎn)來(lái)取得文件的內(nèi)容或者修改內(nèi)容?勺x寫(xiě)

      4. MVC是什么,如何實(shí)現(xiàn)? (5分)

      答:MVC是一個(gè)是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入,處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分為三個(gè)核心部件:M----------MODO模型,V ----------VIEW 試圖,C --------- Contral控制

      實(shí)現(xiàn):首先有頁(yè)面(jsp)發(fā)送請(qǐng)求給控制器(servlet),然后由控制器接收用戶的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型(javabean)來(lái)進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來(lái)處理用戶的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過(guò)表示層顯示給用戶。

      5. .J2EE是什么?(6分)

      答:J2EE 是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用模型 (enterpriese application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的.組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。

      6. jsp有哪些內(nèi)置對(duì)象?作用分別是什么? (9分)

      答:1.request 用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù);2.response 網(wǎng)頁(yè)傳回用戶端的回應(yīng);3.pageContext 網(wǎng)頁(yè)的屬性是在這里管理;4.session 與請(qǐng)求有關(guān)的會(huì)話期;5.application servlet 正在執(zhí)行的內(nèi)容;6.out 用來(lái)傳送回應(yīng)的輸出;7.config servlet的構(gòu)架部件;8.page JSP網(wǎng)頁(yè)本身;9.exception 針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外

      7. 作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū)別 ?(10分)

      答:作用域 當(dāng)前類 同一package 子孫類 其他package

      public √ √ √ √

      protected √ √ √ ×

      friendly √ √ × ×

      private √ × × ×

      不寫(xiě)時(shí)默認(rèn)為friendly

      四、編碼及論述題(共2題,每題10分,共20分)

      1. 什么是Singleton,它的作用是什么,它有幾種形式?請(qǐng)用代碼寫(xiě)出一個(gè)Singleton類。

      答:Java Singleton 模式用來(lái)保證在運(yùn)行的應(yīng)用程序中,一個(gè)Class只是實(shí)例化一次,也就是只有一個(gè)相應(yīng)的對(duì)象存在。

      它有三種形式

      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的組合框架模式中,三者各自的特點(diǎn)都是什么?

      答:Strtus WEB層 Spring是業(yè)務(wù)層 Hiebenate是持久化層

    【java程序員面試考試題及答案】相關(guān)文章:

    Java工程師面試?荚囶}及答案03-12

    2017年Java程序員面試題及答案03-30

    Java程序員集合框架面試題及答案10-25

    java程序員面試試題11-30

    初級(jí)java程序員面試要求01-22

    java程序員面試題03-08

    2016最新java考試題庫(kù)及答案03-09

    java面試題2017及答案03-06

    初級(jí)java程序員面試試題03-05