java軟件開發(fā)面試題
Java軟件開發(fā)的面試問題你有了解了嗎?面試前的準(zhǔn)備很重要,以下是小編幫你們整理的java軟件開發(fā)面試題,一起來學(xué)習(xí)啦。
java軟件開發(fā)面試題(一)
1.描述J2EE框架的多層結(jié)構(gòu),并簡(jiǎn)要說明各層的作用。
1)Presenttation layer(表示層)
A.表示邏輯(生成界面代碼)
B.接受請(qǐng)求
C.處理業(yè)務(wù)層拋出的異常
D.負(fù)責(zé)規(guī)則驗(yàn)證(數(shù)據(jù)格式,數(shù)據(jù)非空等)
E.流程控制
2)Service layer(服務(wù)層、業(yè)務(wù)層)
A.封裝業(yè)務(wù)邏輯處理,并且對(duì)外暴露接口
B.負(fù)責(zé)事務(wù)、安全等服務(wù)
3)Pesistence layer(持久層)
A.封裝數(shù)據(jù)訪問的邏輯,暴露接口
B.提供方便的數(shù)據(jù)訪問方案(查詢語(yǔ)言,API,映射機(jī)制等)
4)Domain layer(域?qū)?
A.業(yè)務(wù)對(duì)象以及業(yè)務(wù)關(guān)系的表示
B.處理簡(jiǎn)單的業(yè)務(wù)邏輯
C.域?qū)拥膶?duì)象可以穿越表示層,業(yè)務(wù)層,持久層
軟件分層結(jié)構(gòu)使得代碼維護(hù)非常方便,設(shè)計(jì)明確,各層獨(dú)立,專注自己擅長(zhǎng)的領(lǐng)域。
2.請(qǐng)談?wù)剬?duì)SOA的認(rèn)識(shí)。
面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)是一個(gè)組建模型,他將相應(yīng)程序的不同功能單元(稱為服務(wù))通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來。接口是采用中立的方式進(jìn)行定義的,他應(yīng)該獨(dú)立與實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種這樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。
3.簡(jiǎn)要描述如何結(jié)合Struts、hibernate、spring開發(fā)web應(yīng)用?
Struts可以將jsp頁(yè)面的表單關(guān)聯(lián)起來,就是把JSP頁(yè)面的表單數(shù)據(jù)封裝成javaBean,這樣的話,在action中再也不需要使用創(chuàng)痛的request.getParameter(“name”);還有struts有一個(gè)控制器,在Struts變成中的控制器(XxxAction)都是繼承總的ActionServlet,他能集中處理請(qǐng)求,然后轉(zhuǎn)到相關(guān)的頁(yè)面。還有struts的表單驗(yàn)證組件,不能自己寫js驗(yàn)證了,只需要配置一下文件就可以了。另外struts的令牌機(jī)制可以防止表單的重復(fù)提交。
Spring是一個(gè)輕量級(jí)容器,非侵入性,包含依賴注入,AOP等。他是為了解決企業(yè)開發(fā)應(yīng)用程序復(fù)雜性而構(gòu)建的。框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許選擇是用哪一個(gè)組件,同時(shí)為J2EE應(yīng)用程序開發(fā)提供集成的框架。
Hibernate他可以讓我們一OO的方式操作數(shù)據(jù)庫(kù),這讓我們看到了Hibernate的強(qiáng)大之處,體驗(yàn)到操作數(shù)據(jù)的方便。但是Hibernate最耀眼之處是Hibernate的緩存機(jī)制,而不是以O(shè)O的方式操作數(shù)據(jù)庫(kù)。Hibernate的緩存機(jī)制不外乎是一級(jí)緩存session,二級(jí)緩存sessionfactory,和第三方緩存如ehcache。也就是hibernate的最強(qiáng)大的地方就是它的緩存,理解了這個(gè)才能真正的理解hibernate,Hibernate的命名查詢/命名參數(shù)查詢,就是講hql語(yǔ)句放在一個(gè)單獨(dú)的xml文件之中,他仍然讓人們以面向?qū)ο蟮姆绞讲倏v數(shù)據(jù)庫(kù),而不用在以O(shè)O的方式寫著代碼的同時(shí),然后再轉(zhuǎn)變思維,用面向關(guān)系的方式去寫那些sql語(yǔ)句。但是Hibernate不僅做了這些,它的native sql查詢方式,完全滿足sql語(yǔ)句的偏愛者,他就像ibatis一樣,將sql語(yǔ)句放在配置文件中。
4.說明反轉(zhuǎn)控制(IOC)和面向方面編程(AOP)在Spring中的應(yīng)用。
Spring核心容器(Core)提供Spring框架的基本功能。核心容器的主要組建市BeanFactory,它是工廠模式的實(shí)現(xiàn)。beanFactory使用控制反轉(zhuǎn)(IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用代碼程序分開。Spring的聲明式事務(wù)基于AOP實(shí)現(xiàn),卻不需要程序開發(fā)者成為AOP專家,亦可輕易使用Spring的聲明式事務(wù)管理。
java軟件開發(fā)面試題(二)
1.列出自己常用的jdk包
Java.lang:這個(gè)是系統(tǒng)的基礎(chǔ)類,比如String等都是這里面的,這個(gè)package是唯一一個(gè)可以不用import就可以使用的Package
Java.io:這里面是所有輸入輸出有關(guān)的類,比如穩(wěn)健操作等。
Java.net:這里面是與網(wǎng)絡(luò)有關(guān)的類,比如URL,URLConnection等。
Java.util:這個(gè)是系統(tǒng)輔助類,特別是集合類Collection,List,Map等。
Java.sql:這個(gè)是數(shù)據(jù)庫(kù)操作類,Connection,Statement,ResultSet等
2.列出自己常用的jdk中的數(shù)據(jù)結(jié)構(gòu)
線程表,鏈表,hash表都是常用的數(shù)據(jù)結(jié)構(gòu)
3.List,Map,Set三個(gè)接口存儲(chǔ)元素時(shí)各有什么特點(diǎn)?
1)List是有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下表)來訪問List中的元素,這類似于Java的數(shù)組。
2)Set是一種不包含重復(fù)元素的Collection,即任意的兩個(gè)元素e1和e2都有e1..equals(e2)=false,Set最多有一個(gè)null元素。
3)Map接口:Map沒有繼承Collection接口,Map提供Key到Value的映射
4.簡(jiǎn)述基于Struts框架Web應(yīng)用的工作流程
在Web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把他們存放到各種配置文對(duì)象中,當(dāng)ActionServlet接收到一個(gè)客戶的請(qǐng)求時(shí),將執(zhí)行如下流程:
1)檢索和用戶請(qǐng)求匹配的ActionMapPing實(shí)例,如果不存在,就返回請(qǐng)求路徑無效信息。
2)如果ActionForm實(shí)例不存在,就創(chuàng)建ActionForm對(duì)象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對(duì)象中。
3)根據(jù)配置信息決定是否需要表單驗(yàn)證,如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法;
4)如果ActionForm的validate()方法返回null或者返回一個(gè)不好喊ActionMessager的ActionErrors對(duì)象,就表示表單驗(yàn)證成功;
5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法;
6)Action的execute()方法返回一個(gè)ActionForward對(duì)象,ActionServlet在把客戶請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè),返回給客戶。
java軟件開發(fā)面試題(三)
1.在項(xiàng)目中用過Spring的哪些方面?及用過哪些Ajax框架?
在項(xiàng)目中使用過SpringIOC,AOP,DAO,ORM,還有上下文環(huán)境
在項(xiàng)目中使用過JQuery,EXtjs等Ajax框架。
(Ajax框架:最長(zhǎng)用的就是,prototype、jquery 和EXtjs,Jquery用起來比較方便,EXtjs可能對(duì)初學(xué)者比較困難。
常用的基本就是Dojo,Extjs,GWT,Prototype,JQuery ,MooTools,Backbase
這些了,他們使用的概率大約是
Prototype jQuery Ext Script.aculo.us Mootools YUI JSON Dojo Backbase
34.1% 29.3% 22.5% 22.3% 14.3% 13% 12.9% 11.8% 8.3%)
2.Abstract class和interface有什么區(qū)別?
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓他指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類的自雷為他們父類中的所有抽象方法提供實(shí)現(xiàn),否則他們也是抽象類。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其他類可以再類中實(shí)現(xiàn)這些方法。
接口(interface)是抽象類的變體。新型多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,所有成員變量都是public static final的。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,當(dāng)類實(shí)現(xiàn)接口時(shí),必須實(shí)現(xiàn)接口的所有方法。抽象類在java語(yǔ)言中表示的是一種單繼承的關(guān)系,對(duì)于interface來說則不然,并不要求interface的實(shí)現(xiàn)者和interface定義在概念本質(zhì)上是一致的,僅僅是實(shí)現(xiàn)了interface定義的契約而已。
抽象類中可以定義自己的成員變量,也可以包含非抽象類的方法,而在接口中只能由靜態(tài)的敞亮,所有的方法必須是抽象的;實(shí)現(xiàn)抽象類是可以實(shí)現(xiàn)其中的部分方法,而是要實(shí)現(xiàn)一個(gè)接口的話就必須實(shí)現(xiàn)這個(gè)接口中的所有抽象方法。
3.MVC模式中M、V、C每個(gè)代表的含義,并簡(jiǎn)述在Struts中的MVC的表現(xiàn)的方式。
MVC是MOdel-View-Controller的縮寫,Model代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JaveBean,EJB組件實(shí)現(xiàn)),View是應(yīng)用的表示層(由JSP頁(yè)面產(chǎn)生),Controller是通過應(yīng)用的處理過程控制,(一般是一個(gè)servert)通過這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過程和現(xiàn)實(shí)邏輯分成不同的組件實(shí)現(xiàn),這些組件可以進(jìn)行交互和重用。
在Struts框架中Controller功能由ActionServlert和ActionMapping對(duì)象構(gòu)成,核心是一個(gè)Servlet類型的對(duì)象ActionServlet,他用來接受客戶端的請(qǐng)求。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到具體的Model部分的Action處理器對(duì)象都是開發(fā)者從Struts的Action類派生的子類。Action處理器對(duì)象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到合適的View組件以產(chǎn)生響應(yīng)。Struts提供的ActionForm組件對(duì)象可以通過定義屬性描述客戶端表單數(shù)據(jù),開發(fā)者可以從他派生子類對(duì)象,并利用它和Struts提供的自定義標(biāo)記庫(kù)相結(jié)合,可以實(shí)現(xiàn)對(duì)客戶端的表單數(shù)據(jù)的良好封裝和支持,Action處理器對(duì)象可以直接對(duì)他進(jìn)行讀寫,而不再需要和request、response對(duì)象進(jìn)行數(shù)據(jù)交互。通過ActionForm組件對(duì)象實(shí)現(xiàn)了對(duì)View和model之間的交互支持(View部分是通過JSP技術(shù)實(shí)現(xiàn)的)。Struts提供了自定義的標(biāo)記庫(kù),通過這些自定義標(biāo)記庫(kù)可以非常容易地和系統(tǒng)Model部分交互,通過使用這些自定義標(biāo)記庫(kù)創(chuàng)建的JSP表單,可以實(shí)現(xiàn)對(duì)Model部分中的ActionForm的映射,完成對(duì)用戶數(shù)據(jù)的封裝。
看了“java軟件開發(fā)面試題”