国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

2016最新ssm面試題

2019-11-14 08:47:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.很新的面試題

2.很全的面試題

3.很重點(diǎn)的面試題 框架

Struts2與Struts1的面試題

###1.Struts2與Struts1的聯(lián)系與區(qū)別?為什么要用Struts2?

struts1與struts2都是mvc框架的經(jīng)典實(shí)現(xiàn)模式。

Struts2不是從Struts1升級(jí)而來(lái),而是由WebWork改名而來(lái),而WebWork只是Xwork加了很多WEB攔截器而已

區(qū)別:

1.核心控制器改成了過(guò)濾器(過(guò)濾器比Servlet的級(jí)別要高,因?yàn)槌绦蜻\(yùn)行時(shí)是先進(jìn)入過(guò)濾器再進(jìn)入Servlet)

2.struts1嚴(yán)重依賴于Servlet(因?yàn)樘^(guò)于依賴于api的HttpServletRequest與HttpServletResponse的兩個(gè)參數(shù)),

struts2就則脫離了Servlet的API。

3.管理Action時(shí)struts1是單例模式,struts2是每個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例。

4.在表達(dá)式的支持上struts2不僅有jstl,還有功能更加強(qiáng)大的ognl表達(dá)式。

5.struts1的類型轉(zhuǎn)換是單向的(頁(yè)面到ActionForm),struts2是雙向的(頁(yè)面到Action再到頁(yè)面回顯)

6.校驗(yàn),struts1沒(méi)有針對(duì)具體方法的校驗(yàn),struts2提供了指定某個(gè)方法進(jìn)行效驗(yàn),還有框架校驗(yàn)。

7.struts2提供了攔截器,利用攔截器可以在訪問(wèn)Action之前或之后增加如權(quán)限攔截等功能。

8.struts2提供了全局范圍,包范圍,Action范圍的國(guó)際化資源文件管理實(shí)現(xiàn)。

9.struts2支持多種視圖類型

###2.Struts2的核心是什么,體現(xiàn)了什么思想?

Struts2的核心是攔截器,基本上核心功能都是由攔截器完成,攔截器的實(shí)現(xiàn)體現(xiàn)了AOP(面向切面編程)思想

###3.為何繼承ActionSupport

因?yàn)锳ctionSupport實(shí)現(xiàn)了Action接口,提供了國(guó)際化,校驗(yàn)的功能。

ActionSupport實(shí)現(xiàn)了國(guó)際化功能:因?yàn)樗峁┝艘粋€(gè)getText(String key)方法實(shí)現(xiàn)國(guó)際化,該方法從資源文件上獲取國(guó)際化信息。

Action接口提供了五個(gè)常量(success,error,login,input,none)。

(s?k'ses,er?(r) n?n

###4.模型驅(qū)動(dòng)與屬性驅(qū)動(dòng)是什么 模型驅(qū)動(dòng)使用時(shí)注意什么問(wèn)題

答:模型驅(qū)動(dòng)與屬性驅(qū)動(dòng)都是用來(lái)封裝數(shù)據(jù)的。

1.模型驅(qū)動(dòng):在實(shí)現(xiàn)類中實(shí)現(xiàn)ModelDriven<T>接口使用泛型把屬性類封裝起來(lái),重寫getModel()方法,然后在實(shí)現(xiàn)類里創(chuàng)建一個(gè)屬性類的實(shí)例,

2.屬性驅(qū)動(dòng):在實(shí)現(xiàn)類里定義屬性,生成get與set方法,通過(guò)屬性來(lái)拿值。

###5.Struts2是怎樣進(jìn)行值封裝的?

struts2的值封裝實(shí)際上是采用了ognl表達(dá)式.

###6.Struts2如何進(jìn)行校驗(yàn)

1.每個(gè)Action類有一個(gè)校驗(yàn)文件,命名 Action類名-validation.xml,且與Action類同目錄,這是對(duì)action里面所有的方法進(jìn)行校驗(yàn)。

2.對(duì)Action里面的指定方法做校驗(yàn)使用Action的類名-訪問(wèn)路徑_方法名-validation.xml。

在效驗(yàn)文件里又分為兩種:

字段校驗(yàn):字段用什么校驗(yàn)器來(lái)校驗(yàn)。

非字段校驗(yàn):是用校驗(yàn)器校驗(yàn)什么字段。

###7.談?wù)凷truts2 的國(guó)際化

在struts2中是使用了攔截器來(lái)實(shí)現(xiàn)國(guó)際化。

具體是先配置屬性文件,格式是文件名_語(yǔ)言_國(guó)家名.PRoperties,然后放的位置有Action同包位置,

package位置,全局位置(要在常量里面配置), 然后頁(yè)面通過(guò)s:text或者key屬性去訪問(wèn)

###8.OGNL是什么你在項(xiàng)目中如何使用它

OGNL是:對(duì)象圖形導(dǎo)航語(yǔ)言。

在struts2中的作用:

ognl的實(shí)現(xiàn)關(guān)系:ActionConetxt。

ognl 3個(gè)常用的符號(hào) # $ %

#

1 構(gòu)造map,list集合。 2 取ognl上下文的值。 3 用來(lái)過(guò)濾集合。 $

1 在校驗(yàn)框架中取資源文件中的值。

2 可以在配置文件中傳遞參數(shù)。

%

使用百分號(hào)可以進(jìn)行轉(zhuǎn)義。

###9.Strust2如何訪問(wèn)Servlet API

1:通過(guò)ActionContext可以獲得request,applicationsession三個(gè)作用域(struts2實(shí)際上是通過(guò)適配器

來(lái)把servlet的api轉(zhuǎn)換為一個(gè)map,并把這些map放在ActionContext里面)。 2:通過(guò)ActionContext的子類ServletActionContext去獲取原滋原味的API。

3:可以通過(guò)實(shí)現(xiàn)ServletRequestAware接口,重寫里面的setServletRequest方法可以獲

得request,實(shí)際上是通過(guò)set的依賴注入

###10.什么是攔截器 說(shuō)說(shuō)Struts2用攔截器來(lái)干什么 說(shuō)出6個(gè)攔截器來(lái)

解釋:在訪問(wèn)類的某個(gè)方法或者屬性之前執(zhí)行,攔截的是Action的請(qǐng)求,進(jìn)行攔截然后在方法的執(zhí)行前或者之后加入某些操作。

作用:國(guó)際化,權(quán)限,效驗(yàn)等與源代碼無(wú)關(guān)的操作。

攔截器:

國(guó)際化,表單重復(fù)提交,類型轉(zhuǎn)換,自動(dòng)裝配,數(shù)據(jù)封裝,異常處理,模型驅(qū)動(dòng),請(qǐng)求參數(shù),處理類型轉(zhuǎn)換錯(cuò)誤,日志攔截器。

###11.如何實(shí)現(xiàn)自定義攔截器? 需要注意什么?

實(shí)現(xiàn):

1.可以實(shí)現(xiàn)Interceptor接口,重寫doIntercept方法指定某個(gè)方法進(jìn)行攔截,或者繼承AbstractInterceptor類,重寫intercept方法。

2.在xml配置文件中定義自定義攔截器,然后注入到攔截器棧中,再把攔截器引用到action中。

3.可以配置到某個(gè)action單獨(dú)使用,也可以配置到包下面的所有action使用。 注意:

要把默認(rèn)的攔截器棧重新引用,否則會(huì)被覆蓋。

###12. ActionContext是用來(lái)干什么的

ActionContext是Action的上下文。

###13.為什么要繼承默認(rèn)的包?

因?yàn)樵赟trtus2里面默認(rèn)有很多的常量,攔截器,還有一些bean,如果繼承默認(rèn)的包,這些默認(rèn)值和常量就會(huì)繼承過(guò)來(lái),

###14.常見(jiàn)的有哪幾種結(jié)果集類型?

dispatcher:指得是轉(zhuǎn)發(fā),默認(rèn)的結(jié)果集類型

redirect:重定向,

redirectAction:重定向到一個(gè)Action

stream:是返回一個(gè)流,一般用在文件下載上面

###15.開(kāi)發(fā)項(xiàng)目時(shí)struts2在頁(yè)面怎樣拿值?

從值棧中或者是ognl的上下文

###16.怎么樣用Struts2進(jìn)行文件的上傳或者下載

上傳:

1.在jsp用了s:file標(biāo)簽,把s:from的enctype 屬性設(shè)置為 multipart/form-data

2.在action里面定義三個(gè)字段 File file ,String [file]ContentType,String [file] FileName

3.用輸出流轉(zhuǎn)化成硬盤上面的文件

下載:

1.在struts.xml中配置result為stream的類型

2.在action定義四個(gè)屬性,默認(rèn)的有個(gè)是InputStream 的類型叫inputStream的,從硬盤上面讀取文件到這個(gè)流賦值即可.

contentType; contentLength; contentDisposition; inputStream;

###17.簡(jiǎn)單講下struts里面的標(biāo)簽,說(shuō)不少于5個(gè)

s:if

s:form

s:url

s:property

s:iterater

###18.默認(rèn)struts2里面的標(biāo)簽取值都是從那里取值的

默認(rèn)都是從OGNL值棧里面取值的

###19.ValueStack分為那兩部分,組成部分是什么,分別怎么訪問(wèn)

分為:

對(duì)象棧和ContextMap

訪問(wèn):

1.對(duì)象棧前臺(tái)可以直接訪問(wèn)

2.ContextMap訪問(wèn)的時(shí)候前面加#

###20.標(biāo)簽<s:property>和el表達(dá)式有什么區(qū)別,

相同:

都可以從值棧里面取值

區(qū)別:

el表達(dá)式只能取屬性有g(shù)et set方法的簡(jiǎn)單數(shù)據(jù)類型

s:property標(biāo)簽:取得數(shù)組的一些方法等復(fù)雜數(shù)據(jù)對(duì)象類型

###21.說(shuō)下重復(fù)提交的解決思路,Struts2是怎么樣解決重復(fù)提交的

1.在頁(yè)面表單域加入一個(gè)隱藏的s:token字段,然后在session里面也加入同樣的值

2.當(dāng)用戶第一次請(qǐng)求的時(shí)候,把request的值和session對(duì)比,相同就通過(guò)請(qǐng)求,執(zhí)行下面攔截器,并且移除Session里面的值

3.如果第二次請(qǐng)求時(shí)候,Session已經(jīng)沒(méi)有這個(gè)值,那么就阻斷當(dāng)前請(qǐng)求,定位重復(fù)提交 Struts2是通過(guò)s:token標(biāo)簽來(lái)完成重復(fù)提交思路的

spring的面試題部分

###1.Spring的aop你怎樣實(shí)現(xiàn)?

用動(dòng)態(tài)代理和cglib實(shí)現(xiàn),有接口的用動(dòng)態(tài)代理,無(wú)接口的用cglib

###2.Spring在SSH起什么作用

為大部分框架提供模版,常見(jiàn)的核心類提供初始化,并且整合三層框架

###3.Spring容器內(nèi)部怎么實(shí)現(xiàn)的

內(nèi)部用Map實(shí)現(xiàn),或者說(shuō)HashMap

###4.怎么樣理解IOC與AOP

IOC是一種控制反轉(zhuǎn)的思想,降低了對(duì)象的耦合度,AOP是面向切面編程,非侵入式編程,實(shí)現(xiàn)了非業(yè)務(wù)性編程(公共功能),譬如日志,權(quán)限,事務(wù)等等

###5.Spring的事務(wù),事務(wù)的作用。

Spring里面的事務(wù)分為編程式事務(wù)和聲明式事務(wù),一般用聲明式事務(wù),用來(lái)控制數(shù)據(jù)操作的完整性,一致性

###6.Spring的IOC和AOP你在項(xiàng)目中是怎么使用的?

IOC主要來(lái)解決對(duì)象之間的依賴問(wèn)題,把所有的bean的依賴關(guān)系通過(guò)配置文件或者注解關(guān)聯(lián)起來(lái),降低了耦合度,AOP一般用來(lái)整合框架時(shí)候都可以用得到,

事務(wù)用的最多,還有個(gè)別日志,權(quán)限功能也可以用到

###7Spring主要使用了什么模式?

工廠模式-->每個(gè)Bean的創(chuàng)建通過(guò)方法

單例模式-->默認(rèn)的每個(gè)Bean的作用域都是單例

代理模式-->關(guān)于AOP的實(shí)現(xiàn)是通過(guò)代理,體現(xiàn)代理模式

###8.Spring bean的作用域.

Scope作用域有4種,常見(jiàn)的有單例或者多例,默認(rèn)是單例

###9.Spring的事務(wù)是如何配置的?

1.先配置事務(wù)管理器TransactionManager,不同的框架有不同屬性

2.再配置事務(wù)通知和屬性,通過(guò)tx:advice

3.配置<aop:config>,設(shè)置那些方法或者類需要加入事務(wù)

###10.Spring的配置文件最好使用什么文件?

xml,因?yàn)樗亲詈?jiǎn)單,最流行的數(shù)據(jù)格式

###11.你使用過(guò)Spring中的哪些技術(shù)?

bean的管理,AOP技術(shù),IOC技術(shù) ,事務(wù)等

###12.為什么要用Spring

降低對(duì)象耦合度,讓代碼更加清晰,提供一些常見(jiàn)的模版

###13.說(shuō)下Spring的注解

1.bean的標(biāo)記注解

@Component 通用注解 @Repository 持久層注解 @Service 業(yè)務(wù)層注解 @Controller:表現(xiàn)層注解

2.bean的自動(dòng)裝配注解

@AutoWired 默認(rèn)是按照類型裝配,如果有多個(gè)類型實(shí)現(xiàn)可以用Qualifier來(lái)指定名

@Resource 默認(rèn)是按照名稱來(lái)裝配,是JDK里面自帶的注解,默認(rèn)情況下用@AutoWired注解

###15.寫過(guò)類似Spring AOP的操作嗎?

簡(jiǎn)單的寫過(guò),譬如前置通知,后置通知的方法,環(huán)繞通知,事務(wù)就是典型的AOP的實(shí)現(xiàn)

###16.Spring中的AOP在你項(xiàng)目中是怎么使用的,用在哪里?

Struts2和Hibernate整合時(shí)候都可以用得到, 事務(wù)用的最多,還有個(gè)別日志,權(quán)限功能也可以用到

###17.Spring的事務(wù)(傳播屬性,隔離級(jí)別)。

七大傳播屬性,四大隔離級(jí)別

###19.Spring DI的幾種方式

setter注入和構(gòu)造器注入,一般用setter注入

###20.依賴注入的原理

就是通過(guò)反射機(jī)制生成想要的對(duì)象注入

###21.說(shuō)一下整合Spring的核心監(jiān)聽(tīng)器。

這個(gè)是在SSH整合的時(shí)候使用,是整個(gè)WEB項(xiàng)目啟動(dòng)的時(shí)候初始化Spring的容器. 具體是在web.xml里面配置的ContextLoaderListener

Spring配置文件中的核心是個(gè)監(jiān)聽(tīng)器,是用來(lái)初始化Spring的容器

###22.Spring你們?yōu)槭裁从门渲梦募皇褂米⒔?

配置文件耦合度低,容易維護(hù),尤其是在切面或者事務(wù)的時(shí)候,只配置一次就可以讓很多代碼擁有事務(wù),

###23.Spring和Hibernate的事務(wù)有什么區(qū)別?

Spring的事務(wù)提供了統(tǒng)一的事務(wù)處理機(jī)制,包含了JDBC,Hibernate,IBatis等事務(wù)實(shí)現(xiàn),而Hibernate只處理自己事務(wù)

###24.Struts2與Spring整合先啟動(dòng)那個(gè)容器。

先啟動(dòng)監(jiān)聽(tīng)器,因?yàn)橄纫跏蓟萜?初始化容器了以后Action才能從容器里面獲得

###26.讓你寫Spring的容器,你是怎樣實(shí)現(xiàn)的?

我們可以寫一個(gè)HashMap,如果并發(fā)考慮的話要寫并發(fā)的Map,把bean的名字放在map的key,bean的實(shí)現(xiàn)map的value

###27.談?wù)凷pring的IOC和AOP,如果不用Spring,怎么去實(shí)現(xiàn)這兩個(gè)技術(shù)。

ioc用反射實(shí)現(xiàn) ,AOP用動(dòng)態(tài)代理實(shí)現(xiàn)

###28.Spring事務(wù)和Hibernate事務(wù)的操作上面的區(qū)別?

hibernate的事務(wù)只能手動(dòng)顯示代碼的方式控制創(chuàng)建事務(wù)與提交事務(wù)以及回滾。

Spring可以通過(guò)配置文件設(shè)定一類class事務(wù)的創(chuàng)建與提交以及回滾,也可以顯示代碼方式控制。

###29.講下Spring的七大事務(wù)傳播

有七個(gè),常用有兩個(gè)REQUIERD, REQUIRED_NEW,REQUIERD表示兩個(gè)事務(wù)的方法調(diào)用的時(shí)候,前面的時(shí)候和后面的合并成一個(gè)事務(wù),REQUIRED_NEW是重啟一個(gè)事務(wù),各干各的

###30.在同一進(jìn)程里,有A,B兩個(gè)方法都對(duì)不同的表進(jìn)行更新數(shù)據(jù),假如A方法出異常了,若要B方法執(zhí)行,怎樣配置事務(wù)級(jí)別,若不要B方法執(zhí)行,又該怎樣配置?

前者用REQUIRED_NEW,后者用REQUIRED

###31.事務(wù)并發(fā)會(huì)引起什么問(wèn)題,怎么解決

事務(wù)并發(fā)會(huì)引起臟讀,幻讀,不可重復(fù)讀等問(wèn)題,設(shè)定事務(wù)的隔離級(jí)別就可以解決

###32.事務(wù)的隔離級(jí)別

Spring定義有四種,但是常見(jiàn)的是READ_COMMIT,Oralce有兩種實(shí)現(xiàn),MySQL有四種

###33.Spring的IOC容器與工廠類有什么區(qū)別?

IOC(Inversion of Control)對(duì)Bean的控制能力更強(qiáng),能控制對(duì)象自動(dòng)注入,還可以控制生命周期,而工廠類只是簡(jiǎn)單的創(chuàng)建一個(gè)對(duì)象,沒(méi)有什么控制能力

###34.事務(wù)的安全問(wèn)題:鎖機(jī)制的實(shí)現(xiàn)原理及在項(xiàng)目中的使用

鎖有悲觀鎖和樂(lè)觀鎖,悲觀鎖一般假設(shè)每個(gè)人都會(huì)修改數(shù)據(jù),默認(rèn)情況下把數(shù)據(jù)都鎖住,影響性能,但安全性高.

樂(lè)觀鎖是假設(shè)每個(gè)人都只讀下數(shù)據(jù),不會(huì)修改數(shù)據(jù),性能比較高,但是安全性較低,一般通過(guò)增加類似于版本控制里面版本號(hào)來(lái)解決問(wèn)題

###35.講下BeanFactory和ApplicationContext的區(qū)別

BeanFactory是Spring容器頂級(jí)核心接口,比較早,但功能比較少,getBean就是BeanFactory定義的,

ApplicationContext是Spring里面的另外一個(gè)容器頂級(jí)接口,它繼承于BeanFactory,但是提供的功能譬如校驗(yàn),國(guó)際化,監(jiān)聽(tīng),

對(duì)Bean的管理功能比較多,一般使用ApplicationContext

###f-sm-1. 講下SpringMvc和Struts1,Struts2的比較的優(yōu)勢(shì)

性能上Struts1>SpringMvc>Struts2 開(kāi)發(fā)速度上SpringMvc和Struts2差不多,比Struts1要高

###f-sm-2. 講下SpringMvc的核心入口類是什么,Struts1,Struts2的分別是什么

SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2的是StrutsPrepareAndExecuteFilter

###f-sm-3. SpringMvc的控制器是不是單例模式,如果是,有什么問(wèn)題,怎么解決

是單例模式,所以在多線程訪問(wèn)的時(shí)候有線程安全問(wèn)題,不要用同步,會(huì)影響性能的,解決方案是在控制器里面不能寫字段

###f-sm-4. SpingMvc中的控制器的注解一般用那個(gè),有沒(méi)有別的注解可以替代

一般用@Controller注解,表示是表現(xiàn)層,不能用用別的注解代替.

###f-sm-5. @RequestMapping注解用在類上面有什么作用

用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。

###f-sm-6. 怎么樣把某個(gè)請(qǐng)求映射到特定的方法上面

直接在方法上面加上注解@RequestMapping,并且在這個(gè)注解里面寫上要攔截的路徑 ###f-sm-7. 如果在攔截請(qǐng)求中,我想攔截get方式提交的方法,怎么配置

springMVC模式的面試題部分

可以在@RequestMapping注解里面加上method=RequestMethod.GET

###f-sm-8. 如果在攔截請(qǐng)求中,我想攔截提交參數(shù)中包含"type=test"字符串,怎么配置

可以在@RequestMapping注解里面加上params="type=test"

###f-sm-9. 我想在攔截的方法里面得到從前臺(tái)傳入的參數(shù),怎么得到

直接在形參里面聲明這個(gè)參數(shù)就可以,但必須名字和傳過(guò)來(lái)的參數(shù)一樣

###f-sm-10. 如果前臺(tái)有很多個(gè)參數(shù)傳入,并且這些參數(shù)都是一個(gè)對(duì)象的,那么怎么樣快速得到這個(gè)對(duì)象

直接在方法中聲明這個(gè)對(duì)象,SpringMvc就自動(dòng)會(huì)把屬性賦值到這個(gè)對(duì)象里面 ###f-sm-11. 怎么樣在方法里面得到Request,或者Session

直接在方法的形參中聲明request,SpringMvc就自動(dòng)把request對(duì)象傳入

###f-sm-12. SpringMvc中函數(shù)的返回值是什么.

返回值可以有很多類型,有String, ModelAndView,List,Set等,一般用String比較好,如果是Ajax請(qǐng)求,返回的可以是一個(gè)集合

###f-sm-13. SpringMvc怎么處理返回值的

SpringMvc根據(jù)配置文件中InternalResourceViewResolver(內(nèi)部資源視圖解析器)的前綴和后綴,用前綴+返回值+后綴組成完整的返回值

###f-sm-14. SpringMVC怎么樣設(shè)定重定向和轉(zhuǎn)發(fā)的

在返回值前面加"forward:"就可以讓結(jié)果轉(zhuǎn)發(fā),譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以讓返回值重定向,譬如"redirect:http://www.uu456.com" ###f-sm-15. SpringMvc用什么對(duì)象從后臺(tái)向前臺(tái)傳遞數(shù)據(jù)的

通過(guò)ModelMap對(duì)象,可以在這個(gè)對(duì)象里面用addAttribute()方法,把對(duì)象加到里面,前臺(tái)就可以通過(guò)el表達(dá)式拿到

###f-sm-16. SpringMvc中有個(gè)類把視圖和數(shù)據(jù)都合并的一起的,叫什么

ModelAndView

###f-sm-17. 怎么樣把數(shù)據(jù)放入Session里面

可以聲明一個(gè)request,或者session先拿到session,然后就可以放入數(shù)據(jù),或者可以在類上面加上@SessionAttributes注解,

里面包含的字符串就是要放入session里面的key

###f-sm-18. SpringMvc怎么和AJAX相互調(diào)用的

通過(guò)Jackson框架就可以把java里面的對(duì)象直接轉(zhuǎn)化成Js可以識(shí)別的Json對(duì)象 具體步驟如下 :

1.加入Jackson.jar

2.在配置文件中配置json的映射

3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

###f-sm-19. 當(dāng)一個(gè)方法向AJAX返回特殊對(duì)象,譬如Object,List等,需要做什么處理

要加上@ResponseBody注解

###f-sm-20. SpringMvc里面攔截器是怎么寫的

有兩種寫法,一種是實(shí)現(xiàn)接口,另外一種是繼承適配器類,然后在SpringMvc的配置文件中配置攔截器即可:

<!-- 配置SpringMvc的攔截器 --> <mvc:interceptors> <!-- 配置一個(gè)攔截器的Bean就可以了 默認(rèn)是對(duì)所有請(qǐng)求都攔截 -->

<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>

<!-- 只針對(duì)部分請(qǐng)求攔截 --> <mvc:interceptor> <mvc:mapping path="/modelMap.do" /> <bean class="com.et.action.MyHandlerInterceptorAdapter" /> </mvc:interceptor> </mvc:interceptors>

###f-sm-21. 講下SpringMvc的執(zhí)行流程

系統(tǒng)啟動(dòng)的時(shí)候根據(jù)配置文件創(chuàng)建spring的容器, 首先是發(fā)送http請(qǐng)求到核心控制器DispatcherServlet,spring容器通過(guò)映射器去尋找業(yè)務(wù)控制器,

使用適配器找到相應(yīng)的業(yè)務(wù)類,在進(jìn)業(yè)務(wù)類時(shí)進(jìn)行數(shù)據(jù)封裝,在封裝前可能會(huì)涉及到類型轉(zhuǎn)換,執(zhí)行完業(yè)務(wù)類后使用ModelAndView進(jìn)行視圖轉(zhuǎn)發(fā),

數(shù)據(jù)放在model中,用map傳遞數(shù)據(jù)進(jìn)行頁(yè)面顯示。

### 1.講下MyBatis和Hibernate的區(qū)別?

MyBatis是JDBC的輕量級(jí)封裝,把Sql和java代碼獨(dú)立出來(lái),性能相對(duì)比較高,寫SQL語(yǔ)句相對(duì)于比較靈活,并且容易調(diào)試,一般用在大型項(xiàng)目中.

Hibernate是JDBC的重量級(jí)封裝,開(kāi)發(fā)速度比較快,但是性能比較低,調(diào)試不方便,一般適合對(duì)進(jìn)度要求的比較高的中小型項(xiàng)目

###2.什么是MyBatis的接口綁定,有什么好處

接口映射就是在IBatis中任意定義接口,然后把接口里面的方法和SQL語(yǔ)句綁定,我們直接調(diào)用接口方法就可以,

這樣比起原來(lái)了SqlSession提供的方法我們可以有更加靈活的選擇和設(shè)置.

###3.接口綁定有幾種實(shí)現(xiàn)方式,分別是怎么實(shí)現(xiàn)的?

接口綁定有兩種實(shí)現(xiàn)方式,一種是通過(guò)注解綁定,就是在接口的方法上面加上@Select MyBatis的面試題部分

@Update等注解里面包含Sql語(yǔ)句來(lái)綁定,另外一種就是通過(guò)xml里面寫SQL來(lái)綁定,在這種情況下,

要指定xml映射文件里面的namespace必須為接口的全路徑名.

###4.什么情況下用注解綁定,什么情況下用xml綁定

當(dāng)Sql語(yǔ)句比較簡(jiǎn)單時(shí)候,用注解綁定,當(dāng)SQL語(yǔ)句比較復(fù)雜時(shí)候,用xml綁定,一般用xml綁定的比較多

###5.MyBatis實(shí)現(xiàn)一對(duì)一有幾種方式?具體怎么操作的

有聯(lián)合查詢和嵌套查詢,聯(lián)合查詢是幾個(gè)表聯(lián)合查詢,只查詢一次,通過(guò)在resultMap里面配置association節(jié)點(diǎn)配置一對(duì)一的類就可以完成;

嵌套查詢是先查一個(gè)表,根據(jù)這個(gè)表里面的結(jié)果的外鍵id,去再另外一個(gè)表里面查詢數(shù)據(jù),也是通過(guò)association配置,但另外一個(gè)表的查詢通過(guò)select屬性配置

###6.如果要查詢的表名和返回的實(shí)體Bean對(duì)象不一致,那你是怎么處理的?

在MyBatis里面最主要最靈活的的一個(gè)映射對(duì)象的ResultMap,在它里面可以映射鍵值對(duì), 默認(rèn)里面有id節(jié)點(diǎn),result節(jié)點(diǎn),它可以映射表里面的列名和對(duì)象里面的字段名. 并且在一對(duì)一,一對(duì)多的情況下結(jié)果集也一定要用ResultMap

###7.MyBatis里面的動(dòng)態(tài)Sql是怎么設(shè)定的?用什么語(yǔ)法?

MyBatis里面的動(dòng)態(tài)Sql一般是通過(guò)if節(jié)點(diǎn)來(lái)實(shí)現(xiàn),通過(guò)OGNL語(yǔ)法來(lái)實(shí)現(xiàn),但是如果要寫的完整,必須配合where,trim節(jié)點(diǎn),

where節(jié)點(diǎn)是判斷包含節(jié)點(diǎn)有內(nèi)容就插入where,否則不插入,trim節(jié)點(diǎn)是用來(lái)判斷如果動(dòng)態(tài)語(yǔ)句是以and 或or開(kāi)始,那么會(huì)自動(dòng)把這個(gè)and或者or取掉

###8.MyBatis在核心處理類叫什么

MyBatis里面的核心處理類叫做SqlSession

###9.IBatis和MyBatis在細(xì)節(jié)上的不同有哪些

在sql里面變量命名有原來(lái)的#變量# 變成了#{變量} 原來(lái)的$變量$變成了${變量}, 原來(lái)在sql節(jié)點(diǎn)里面的class都換名字交type

原來(lái)的queryForObject queryForList 變成了selectOne selectList

原來(lái)的別名設(shè)置在映射文件里面放在了核心配置文件里

###10.講下MyBatis的緩存

MyBatis的緩存分為一級(jí)緩存和二級(jí)緩存,一級(jí)緩存放在session里面,默認(rèn)就有,二級(jí)緩存放在它的命名空間里,

默認(rèn)是打開(kāi)的,使用二級(jí)緩存屬性類需要實(shí)現(xiàn)Serializable序列化接口(可用來(lái)保存對(duì)象的狀態(tài)),可在它的映射文件中配置<cache/>

###11.MyBatis(IBatis)的好處是什么

ibatis把sql語(yǔ)句從Java源程序中獨(dú)立出來(lái),放在單獨(dú)的XML文件中編寫,給程序的

維護(hù)帶來(lái)了很大便利。

ibatis封裝了底層JDBC API的調(diào)用細(xì)節(jié),并能自動(dòng)將結(jié)果集轉(zhuǎn)換成Java Bean對(duì)象,大大簡(jiǎn)化了Java數(shù)據(jù)庫(kù)編程的重復(fù)工作。

因?yàn)镮batis需要程序員自己去編寫sql語(yǔ)句,程序員可以結(jié)合數(shù)據(jù)庫(kù)自身的特點(diǎn)靈活控制sql語(yǔ)句,

因此能夠?qū)崿F(xiàn)比hibernate等全自動(dòng)orm框架更高的查詢效率,能夠完成復(fù)雜查詢。 ###12.MyBatis里面怎么處理分頁(yè)

用插件分頁(yè)

###13.MyBatis里面怎么樣獲得剛插入的主鍵

把insert節(jié)點(diǎn)的useGeneratedKeys=true設(shè)置先生成主鍵,然后keyProperty="id",把生成的主鍵指向?qū)傩?

###1. 為什么要用自定義標(biāo)簽?

①Jsp中寫代碼比較混亂,難以維護(hù)

②把一些重復(fù)的功能都抽取出來(lái),方便復(fù)用。

###2. 自定義標(biāo)簽分為幾個(gè)步驟.

1.編寫標(biāo)簽處理器類(SimpleTagSupport的實(shí)現(xiàn)類)

重寫doTag()

2.編寫標(biāo)簽庫(kù)文件(WEB-INF/xxx.tld)

整個(gè)文件的定義: <short-name> <uri>

標(biāo)簽的定義: <tag>

3.在jsp頁(yè)面使用標(biāo)簽:

導(dǎo)入標(biāo)簽庫(kù)(xxx.tld/)

使用標(biāo)簽

###3. 自定義標(biāo)簽類要繼承哪個(gè)類?

SimpleTagSupport類

sim·ple tag s?'p?rt

###4. 怎么配置自定義標(biāo)簽的屬性

在.tld文件<tag>標(biāo)簽中添加<attribute>,

通過(guò)<name>標(biāo)簽設(shè)定自定義標(biāo)簽的標(biāo)簽名。 JSTL &EL的面試題部分

###5. 為什么要用EL表達(dá)式,有什么好處

1.在頁(yè)面中用js腳本和jsp表達(dá)式來(lái)獲取數(shù)據(jù)顯示比較麻煩

a:需要條件判斷

b:可能需要強(qiáng)轉(zhuǎn)

2.好處是EL表達(dá)式簡(jiǎn)單易用,默認(rèn)可訪問(wèn)所有的JSP隱藏對(duì)象。

###6. EL表達(dá)式的語(yǔ)法是什么?

美元符號(hào)加大括號(hào) ---> ${ EL表達(dá)式 }

###7. EL有哪兩種訪問(wèn)格式,有什么區(qū)別?

EL 提供“.“和“[ ]“兩種運(yùn)算符來(lái)存取數(shù)據(jù)。

當(dāng)要存取的屬性名稱中包含一些特殊字符,如 . 或 - 等并非字母或數(shù)字的符號(hào),就一定要使用“[ ]“。例如:

${ user. My-Name}應(yīng)當(dāng)改為${user["My-Name"]}

如果要?jiǎng)討B(tài)取值時(shí),就可以用“[ ]“來(lái)做,而“.“無(wú)法做到動(dòng)態(tài)取值。例如: ${sessionScope.user[data]}中data 是一個(gè)變量。

###8. EL表達(dá)式中有哪些隱藏對(duì)象,舉幾個(gè)例子?

pageContext : JSP頁(yè)面的上下文

param : 參數(shù)

paramValues : 參數(shù)值

header : 頭信息

headerValues : 頭的值

cookie : 緩存

initParam : 初始化參數(shù)

###9. EL表達(dá)式中怎么樣拿到request,session里面的值?

例 :

可以通過(guò)它的隱藏對(duì)象RequestScope來(lái)獲取到Request范圍的屬性名稱所對(duì)應(yīng)的值。 可以通過(guò)它的隱藏對(duì)象sessionScope來(lái)獲取到session范圍的屬性名稱所對(duì)應(yīng)的值。

###10. EL表達(dá)式怎么樣拿到用戶請(qǐng)求的參數(shù)?

可以用${param.name} 來(lái)獲取用戶請(qǐng)求的參數(shù)

###11. EL表達(dá)式怎么樣得到上下文路徑?

${pageContext.request.contextPath}

###12. EL表達(dá)式怎么樣拿到request?

RequestScope

###13. JSTL全稱是什么?

java服務(wù)器頁(yè)面標(biāo)準(zhǔn)標(biāo)簽庫(kù)

(JavaServer Pages Standard Tag Library)

###14. JSTL是怎么使用的?

將jstl.jar、standard.jar 復(fù)制到 Tomcat 的 WEB-INF/lib 中. 若要在 JSP 網(wǎng)頁(yè)中使用 JSTL 時(shí),一定要先做下面這行聲明: < %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

主要提供給 Java Web 開(kāi)發(fā)人員一個(gè)標(biāo)準(zhǔn)通用的標(biāo)簽函數(shù)庫(kù)。Web 程序開(kāi)發(fā)人員能夠利用 JSTL 和 EL 來(lái)開(kāi)發(fā) Web 程序,

取代傳統(tǒng)直接在頁(yè)面上嵌入 Java 程序(Scripting)的做法,以提高程序可讀性、維護(hù)性和方便性。

###15. JSTL分為幾個(gè)標(biāo)簽庫(kù)?

①核心標(biāo)簽庫(kù)

②國(guó)際化標(biāo)簽庫(kù)

③數(shù)據(jù)庫(kù)標(biāo)簽庫(kù)

④XML標(biāo)簽庫(kù)

⑤函數(shù)標(biāo)簽庫(kù)

###16. JSTL里面判斷標(biāo)簽是什么?

1. <c:if>

2. <c:choose>

<c:when></c:when>

<c:otherwise></c:otherwise>

</c:choose>

###17. JSTL里面的屬性是否可以從EL表達(dá)式獲取?

可以${xxxScope.attribute}

###18. JSTL里面的循環(huán)標(biāo)簽有幾種,各是怎么用的?

1. <c:forEach> 用于迭代數(shù)字或集合;

2. <c:forTokens> 用于迭代字符串標(biāo)記。

###19.怎么樣得到循環(huán)標(biāo)簽里面的狀態(tài)值,譬如index,count等?

在forEach循環(huán)標(biāo)簽中加入varStatus="s",然后直接用EL表達(dá)式: <c:forEach items="${atts}" var="item" varStatus="s">

<c:if test="${s.last}">

------

</c:if>

index:${s.index}<br/> count:${s.count}<br/> first:${s.first}<br/> last:${s.last}<br/> ${item}<br/><br/> </c:forEach>

###1.為什么要用自定義標(biāo)簽

自定義標(biāo)簽其實(shí)是一個(gè)Java類,他封裝了一些標(biāo)簽代碼,形成一個(gè)

具有某個(gè)功能的新標(biāo)簽。

1.增加了可擴(kuò)展性。

2.增加了可復(fù)用性。

###2.自定義標(biāo)簽分為幾個(gè)步驟.

1.創(chuàng)建標(biāo)簽的處理類(Tag Handler Class)

2.創(chuàng)建標(biāo)簽庫(kù)描述文件(Tag Library Descrptor File)

3.在JSP文件中引入標(biāo)簽庫(kù)

###3.自定義標(biāo)簽類要繼承那個(gè)類

TagSupport

###4.怎么配置自定義標(biāo)簽的屬性

在.tld 文件里配置

集合類面試題

###1.請(qǐng)講下Java里面的容器

分兩大類,Map和Collection。而Collection又有子接口List

(數(shù)據(jù)存儲(chǔ)順序和插入順序是一樣的)、Set(里面的元素具有唯一性)

Map是存儲(chǔ)鍵值對(duì)的,里面的健不可以重復(fù),但值可以重復(fù) List主要有ArrayList和LinkedList兩種實(shí)現(xiàn)。實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)不同, 所以主要的區(qū)別也都是和數(shù)據(jù)結(jié)構(gòu)相關(guān)的。 ArrayList基于數(shù)組,隨機(jī)訪問(wèn)快, 而對(duì)于中間元素的插入刪除效率比較低,而且需要考慮擴(kuò)容問(wèn)題。 LinkedList,則 基于鏈表,和ArrayList提到的正相反,隨機(jī)訪問(wèn)慢, 但對(duì)于中間元素的插入和刪除更有效率。 Set也是一種Collection,和List比起來(lái)主要體現(xiàn)在元素唯一性。

###2.請(qǐng)說(shuō)下Iterator的作用

迭代器可以實(shí)現(xiàn)Collection接口的方法,可以一個(gè)一個(gè)地獲取集合中的元素 特性:在遍歷集合時(shí) 可判斷是否有下一個(gè)元素

###3.說(shuō)下ArrayList和LinkedList的區(qū)別和聯(lián)系,并說(shuō)明什么情況下用它們

區(qū)別:ArrayList用于對(duì)象的隨機(jī)訪問(wèn)速度快,沒(méi)有順序

LinkedList實(shí)現(xiàn)機(jī)制是鏈表式的,和順序有關(guān),速度比ArrayList慢

--->聯(lián)系:ArrayList和LinkedList都是List接口的實(shí)現(xiàn)類

當(dāng)要快速獲取一個(gè)值時(shí),用ArrayList,用于順序插入操作時(shí),用LinkedList.

###4.說(shuō)下List,Set,Map三種集合各有什么特征

List集合中的元素可以重復(fù),

Set集合中的元素不可以重復(fù)

Map集合用鍵-值映射存放對(duì)象,Map容器中的鍵對(duì)象不能重復(fù),值對(duì)象可以重復(fù)

###5.HashSet和TreeSet有什么區(qū)別,什么時(shí)候用它們

區(qū)別:HashSet中的元素不能重復(fù),沒(méi)有順序

TreeSet中的元素不能重復(fù),但有順序

當(dāng)集合中的元素需要排序時(shí),用TreeSet

一般情況下用HashSet,因?yàn)椴恍枰判?速度比TreeSet快

###6.什么是泛型,怎么使用的,有什么好處?

答案

泛型又分為:方法泛型和類泛型。

定義一個(gè)集合時(shí),可以知道里面定義的是什么類型

使用:在集合類型后面加< 數(shù)據(jù)類型 >

使用泛型后,從集合中取得元素后就不用再用強(qiáng)轉(zhuǎn)

###7.什么是for each循環(huán),它可以循環(huán)那些數(shù)據(jù)類型

答案

通過(guò)對(duì)象拿到集合里的值 可以用來(lái)循環(huán)集合和數(shù)組

###8.寫一個(gè)for each循環(huán)看看

for(Object object : list){

System.out.println(object);

}

###9. 什么是強(qiáng)轉(zhuǎn)怎么寫的,有什么優(yōu)缺點(diǎn),一般要多用還是少用,為什么?

一般在繼承的基礎(chǔ)上用. Person person=new Student(); Student student=(Student)person; 把運(yùn)行期的強(qiáng)轉(zhuǎn)為編譯期的. 編譯期不會(huì)出錯(cuò).運(yùn)行期容易出錯(cuò).所以一般少用

###10.HashMap和Hashtable有什么區(qū)別,一 般情況下常用那個(gè)?

HashMap的鍵-值都可以為空(null)

Hashtable的鍵-值都不可以為空(null),線程安全 ,

一般情況下用HashMap

###11.Hashtable名字為什么沒(méi)有駝峰命名

Hashtable的由來(lái)比較古老,當(dāng)時(shí)還沒(méi)有命名規(guī)范

###12.Collections和Collection有什么區(qū)別

Collections是一個(gè)工具類,可以直接調(diào)用List和Set的方法

Collection是一個(gè)接口,是List和Set集合的父接口

###13.寫出Collections的6個(gè)方法,并詳細(xì)解釋

sort():對(duì)集合進(jìn)行排序

shuffle():打亂集合中的元素順序

addAll():將一個(gè)集合添加到另一個(gè)集合中

max():判斷集合中的最大值

min():判斷集合中的最小值

copy():將一個(gè)集合中的元素復(fù)制到另一個(gè)集合中去

fill():將一個(gè)集合中的元素全部替換成指定的元素

###14.Arrays類是做什么的,寫出它的常用6個(gè)方法

Arrays是數(shù)組的一個(gè)工具類

sort():對(duì)數(shù)組進(jìn)行排序

binarySearch():搜索數(shù)組指定元素的下標(biāo)

copyOf():復(fù)制數(shù)組中指定長(zhǎng)度的元素

deepEquals():比較兩個(gè)數(shù)組的深度

fill():把數(shù)組中的所有元素替換成指定元素

equals():比較指定兩個(gè)數(shù)組的元素是否相等

hashcode():將指定數(shù)組的指定范圍復(fù)制到一個(gè)新數(shù)組。

###15.比較下集合和數(shù)組的優(yōu)缺點(diǎn)

集合是多個(gè)對(duì)象的容器,可以將不同數(shù)據(jù)類型的多個(gè)對(duì)象組織在一起

數(shù)組類型是有相同數(shù)據(jù)類型的數(shù)據(jù)集合,數(shù)組是很多語(yǔ)言都支持的底層數(shù)據(jù)結(jié)構(gòu),性能上是最高的

###16.如何對(duì)一個(gè)對(duì)象排序,有幾種方法

把對(duì)象放入List集合中,用Collections工具類調(diào)用sort()方法進(jìn)行排序,

但是這個(gè)類必須實(shí)現(xiàn)Compareble接口才行

把對(duì)象放在Set集合中,用TreeSet()實(shí)現(xiàn)類對(duì)集合直接排序

###17.在集合里面怎么判斷兩個(gè)對(duì)象相等,要實(shí)現(xiàn)什么方法

重寫equals方法

###18.怎么樣把集合轉(zhuǎn)化成數(shù)組,或把數(shù)組轉(zhuǎn)化為集合

把集合轉(zhuǎn)為數(shù)組,可以用toArray()方法

把數(shù)組轉(zhuǎn)為集合時(shí), for each循壞,先把數(shù)組中的元素轉(zhuǎn)為String型,再放到集合里

###19.分別寫出List,Set,Map里面的5個(gè)常用方法

List:

add()新增 clear()清除 contains()判斷是否包含某個(gè)元素

indexOf()一個(gè)元素在集合中首次出現(xiàn)的位置

set()把指定下標(biāo)的元素替換成自定義元素

Set:

add()新增 clear()清除 contains()判斷是否包含某個(gè)元素

remove():把集合中指定下標(biāo)的元素刪掉 size():返回集合長(zhǎng)度 Map: containsKey()是否包含指定key containsValue()是否包含指定value keySet()返回所有key put()添加元素 Remove()移除

###20.HashMap與LinkedHashMap,和TreeMap的區(qū)別。

共同點(diǎn):HashMap,LinkedHashMap,TreeMap都屬于Map的實(shí)現(xiàn)類.

不同點(diǎn): 1.HashMap里面存入的鍵值對(duì)在取出的時(shí)候是隨機(jī)的,

TreeMap取出來(lái)的是排序后的鍵值對(duì)。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會(huì)更好。

LinkedHashMap 是HashMap的一個(gè)子類,如果需要輸出的順序和輸入的相同,那么用LinkedHashMap可以實(shí)現(xiàn).

###21.HashMap怎么實(shí)現(xiàn)有序

可以轉(zhuǎn)化放入TreeMap里面,或者把key放入LinkedList里面。

###22.在List里面怎么去掉重復(fù)的數(shù)?

通過(guò)把List里面的數(shù)據(jù)放入HashSet可以去除重復(fù)

###23.在List里面有幾種排序?

答:兩種:實(shí)現(xiàn)Comparable<Article>接口,實(shí)現(xiàn)里面的CompareTo方法進(jìn)行排序。 還有調(diào)用Collections.sort()方法排序!

###24.說(shuō)一下鏈表跟數(shù)組的區(qū)別

鏈表:用一組任意儲(chǔ)存單元存放線性表的數(shù)據(jù)元素,并且通過(guò)指針鏈相接結(jié)點(diǎn)的序列稱為鏈表。

是一種常見(jiàn)的數(shù)據(jù)組織形式,它采用了動(dòng)態(tài)分配內(nèi)存的形式實(shí)現(xiàn)。

需要時(shí)可以用new分配內(nèi)存空間,不需要時(shí)用delete將已分配的空間釋放, 不會(huì)造成內(nèi)存空間的浪費(fèi)。不靠數(shù)組實(shí)現(xiàn),沒(méi)有下標(biāo)。

數(shù)組必須事先定義固定的長(zhǎng)度,不能適應(yīng)數(shù)據(jù)動(dòng)態(tài)增減的情況。當(dāng)數(shù)據(jù)增加時(shí),

可能超出原先定義的元素個(gè)數(shù);當(dāng)數(shù)據(jù)減少時(shí),造成數(shù)據(jù)浪費(fèi)。在使用的時(shí)候還要數(shù)組初始化,

注意數(shù)組的下標(biāo)越界。

###25.HashSet的理解

HashSet實(shí)現(xiàn)了Set接口,HashSet不保證集合的迭代順序,允許使用Null元素。

HashSet的底層使用了HashMap,使用HashMap實(shí)列進(jìn)行對(duì)集合的元素進(jìn)行操作,然后再封裝成HashSet的操作。

###26.什么類可以實(shí)現(xiàn)有序存儲(chǔ)(除ArrayList以外)?

一種按照插入的順序排序,譬如LinkedList,LiskedHashMap,

另外一種是插入后重新排序TreeSet,TreeMap

###27.HashMap和ArrayList是不是都是線程不安全的?

ArrayList是線程不安全的;HashMap是線程不安全的; 還有我們常見(jiàn)的一些JAVA集合都是線程不安全,這樣做是為了提高性能

在JDK5以后提供了線程安全的并發(fā)包java.util.concurrent并發(fā)包,譬如里面的類CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap等

###28.HashMap和TreeMap的區(qū)別?

TreeMap實(shí)現(xiàn)Map接口,能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按鍵值的升序排序, 也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時(shí),得到的記錄是排過(guò)序的。 hashMap最多只允許一條記錄的鍵為Null,允許多條記錄的值為Null,hashMap不支持線程的同步,

即同一時(shí)刻可以有多個(gè)線程同時(shí)寫hashMap.可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。 TreeMap不僅可以保持順序,而且可以用與排序。

HashMap通過(guò)hashcode對(duì)其內(nèi)容進(jìn)行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,

如果你需要得到一個(gè)有序的結(jié)果你就使用TreeMap.

###29.ArrayList集合加入1萬(wàn)條數(shù)據(jù),應(yīng)該怎么提高效率

因?yàn)锳rrayList的底層是數(shù)組實(shí)現(xiàn),并且數(shù)組的默認(rèn)值是10,如果插入10000條要不斷的擴(kuò)容,耗費(fèi)時(shí)間,

所以我們調(diào)用ArrayList的指定容量的構(gòu)造器方法ArrayList(int size) 就可以實(shí)現(xiàn)不擴(kuò)容,就提高了性能

###30.你知道HashMap底層是怎么實(shí)現(xiàn)的嗎?

簡(jiǎn)單的說(shuō)是一個(gè)數(shù)組,因?yàn)閿?shù)組的性能比較好,數(shù)組里面放的是Entry類,HashMap類有一個(gè)叫做Entry的

內(nèi)部類。這個(gè)Entry類包含了key-value作為實(shí)例變量。當(dāng)存儲(chǔ)或者獲取對(duì)象的時(shí)候, 就根據(jù)哈希算法,對(duì)象的hashCode調(diào)用得到這個(gè)下標(biāo),以便實(shí)現(xiàn)快速訪問(wèn).

###31.怎樣遍歷List Set,Map

List 和Set可以通過(guò)一般for循環(huán),迭代器循環(huán),或者增強(qiáng)型循環(huán)來(lái)遍歷, 其中一般for循環(huán)性能最快,

迭代器循環(huán)可以判斷和得到下一個(gè)值,for each增強(qiáng)型循環(huán)擴(kuò)展性強(qiáng),但性能稍低.

Map循環(huán)可以通過(guò)keySet得到Key的Set集合,然后遍歷這個(gè)集合就可以得到所有的Value

###32.Set為什么是不允許重復(fù)的。

set的實(shí)現(xiàn)機(jī)制不允許重復(fù)的

###33.ArrayList為什么要用for循環(huán),為什么要用迭代器,又有什么好處。

for循環(huán)通過(guò)對(duì)象拿到集合里的值

迭代器可以實(shí)現(xiàn)Collection接口的方法,可以一個(gè)一個(gè)地獲取集合中的元素 在遍歷集合時(shí) 可判斷是否有下一個(gè)元素

###34.你對(duì)與隊(duì) 列了解多少你是怎么用的。

答:隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu),F(xiàn)IFO 先進(jìn)先出有點(diǎn)類似與棧,只是在隊(duì)列中第一個(gè)插入的數(shù)據(jù)項(xiàng)也會(huì)被最先刪除,

隊(duì)列的兩個(gè)基本操作:

一個(gè)是插入一個(gè)數(shù)據(jù)項(xiàng),即把一個(gè)數(shù)據(jù)項(xiàng)放入隊(duì)尾

另一個(gè)是移除一個(gè)數(shù)據(jù)項(xiàng),即移除隊(duì)頭的數(shù)據(jù)項(xiàng).

###35.如果我要存取很多的數(shù)據(jù),但是又不需要重復(fù)的,要選擇什么容器,說(shuō)一下為什么使用它,它是哪個(gè)的子類?

答:Set容器,它是不允許重復(fù)的,它是collection的子類

###36.哪種方法可以得到Map的Key?

keySet()方法 面向?qū)ο蟮拿嬖囶}部分

###1) 面向?qū)ο蟮膬?yōu)點(diǎn)?

答案

易擴(kuò)展 易維護(hù) 面向?qū)ο笫窍鄬?duì)面向過(guò)程的

###2) 如何聲名一個(gè)靜態(tài)塊?

答案

在類中方法外聲明 static關(guān)鍵字+代碼塊

###3) 接口與抽象類的區(qū)別?

答案

類是單繼承的,但是可以實(shí)現(xiàn)多個(gè)接口

抽象類里的方法可以有實(shí)例方法也可以有抽象方法

接口里面只能有抽象方法。

?。?!注意:關(guān)注一個(gè)事物的本質(zhì)的時(shí)候,用抽象類;當(dāng)你關(guān)注一個(gè)行為的時(shí)候,用接口。

###4) 用于類和接口的關(guān)鍵字

答案 定義類的是class,如類文件的開(kāi)頭都是:public class 類名{ } 定義接口的是interface,如public interface 接口名{ } 用于實(shí)現(xiàn)接口的是implements。

###5) 如何創(chuàng)建數(shù)組?

答案 數(shù)組是new出來(lái)的 或者直接可以聲明, 舉個(gè)例子 String[] array={"1","2"}; 或者String[] array=new String[10];

###6) 如何創(chuàng)建一個(gè)構(gòu)造方法對(duì)象的格式?要注意哪些?

答案

構(gòu)造器是為了創(chuàng)建一個(gè)類的實(shí)例Platypus p1 = new Platypus();

注意:方法名與類名一致

###7) 類的組成 和執(zhí)行順序

答案

屬性

方法

靜態(tài)塊

非靜態(tài)塊

執(zhí)行順序: 先父類,后子類,靜態(tài)塊 靜態(tài)字段 非靜態(tài)塊 非靜態(tài)字段 構(gòu)造器 方法

###8) main方法必須被什么修飾?

答案 方法名必須是main 是被public static void 修飾 傳入String數(shù)組

###9) 如何理解面向?qū)ο?/p>

答案

世間萬(wàn)物皆對(duì)象,對(duì)象有具體的的實(shí)例化,任何方法或者屬性都要寫在對(duì)象(類)里面

###10) 構(gòu)造方法可否能被重寫:

答案 構(gòu)造方法不能被繼承,因此不能重寫,但能被重載。

###11) 靜態(tài)方法中能有靜態(tài)的變量嗎?

答案

不能 靜態(tài)變量是類變量 不可以定義在方法里

###12) String與StringBuffer的區(qū)別:

答案

String 是不可變的 可以直接使用它的方法 用來(lái)創(chuàng)建字符串

而 Stringbuffer無(wú)論怎么修改都是一個(gè)對(duì)象

如果在字符串改變,或者迭代改變的情況下Stringbuffer比String運(yùn)行快

###13) 重載(overloading)與重寫(override)的區(qū)別:

答案

1.重載發(fā)生在同一個(gè)類。 重寫發(fā)生在父子類中。

2.重載參數(shù)簽名不同,而重寫相同且返回類型相同。

3.方法名相同,重寫override是父類與子類之間多態(tài)性的一種表現(xiàn),重載overload是一個(gè)類中多態(tài)性的一種表現(xiàn)。

###14) (= =)與equals()的區(qū)別:

答案

如果是基本類型比較,那么只能用==來(lái)比較,不能用 equals 對(duì)象間的比較使用equals ==比較的是對(duì)象中的地址 而equals比較的對(duì)象 的內(nèi)容

###15) Abstract與interface的區(qū)別:

答案

Abstract是用來(lái)聲明抽象類抽象方法,而interface是接口 抽象類可以有

變量,有方法的實(shí)現(xiàn),接口內(nèi)只能有常量和抽象方法

###16) StringBuilder和StringBuffer的區(qū)別:

答案 StringBuilder比StringBuffer更加快捷,但是StringBuilder線程不安全

###17) JRE,JDK,JVM分別是什么,它們有什么聯(lián)系:

答案

jre 運(yùn)行時(shí)環(huán)境,jvm虛擬機(jī) jdk java開(kāi)發(fā)工具包 jvm是jre的一部分

###18) 普通類繼承抽象類為什么一定要重寫其中的抽象方法?

答案

必須要實(shí)現(xiàn)的,也就是要重寫,如果不實(shí)現(xiàn),子類無(wú)法對(duì)象實(shí)例化。

###19) 什么是拆箱和裝箱?

答案

裝箱就是將基本類型轉(zhuǎn)換為對(duì)象類型

拆箱就是將對(duì)象類型轉(zhuǎn)換為基本類型。

###20) 繼承與實(shí)現(xiàn)的區(qū)別?

答案

繼承針對(duì)類,實(shí)現(xiàn)針對(duì)接口。

單繼承、多實(shí)現(xiàn)的。

實(shí)現(xiàn)要重寫接口里面的方法,而繼承不需要。

###21) Abstract為什么不能與,private,final,同時(shí)使用?

答案

抽象方法需要被子類重寫 所以不能夠用private final修飾

###24) 繼承最大好處?

答案 可以對(duì)父類的方法進(jìn)行重用,節(jié)省時(shí)間

###25) 寫出String類常見(jiàn)的5個(gè)方法,并詳細(xì)解釋?

答案 indexOf()返回指定字符串在該字符串出現(xiàn)的序列 startsWith()判斷該字符串是否以指定字符開(kāi)始 concat() 將指定字符串連接在該字符串的結(jié)尾 length()返回字符串的長(zhǎng)度 substring返回該字符串從索引開(kāi)始 結(jié)束于字符串末尾 或者指定索引的一個(gè)子字符串

###27) 普通方法的方法名可以與類名一致嗎?

答案

可以,構(gòu)造器就是

###28) 在什么情況下局部變量會(huì)覆蓋全局變量?

答案

當(dāng)局部變量名與全局變量名相同 類型相同

###29) static 修飾的方法可否支持多態(tài)?

答案

不支持多態(tài),如果父類聲明一個(gè)對(duì)象,子類實(shí)現(xiàn)這邊變量,那么調(diào)用static修飾的時(shí)候會(huì)調(diào)用父類的,而不是子類的.

除了工具類。用static修飾的變量會(huì)發(fā)生一處改變則全部改變。

###30) 使用數(shù)組前應(yīng)該注意的什么?

答案 數(shù)組下標(biāo)是否越界 對(duì)數(shù)組進(jìn)行初始化

###31) 如果一個(gè)類繼承了父類,父類里有一個(gè)靜態(tài)塊,子類里也有個(gè)靜態(tài)塊 ,對(duì)子類進(jìn)行實(shí)例,父類的靜態(tài)塊先執(zhí)行還是子類的先執(zhí)行?

答案

父類的靜態(tài)塊先于子類的靜態(tài)塊的執(zhí)行

###32) Java語(yǔ)言最大的特點(diǎn)?

答案 跨平臺(tái)性(一次編譯,多次執(zhí)行)

###33) 請(qǐng)你說(shuō)說(shuō)byte short char之間可以互相轉(zhuǎn)換嗎?為什么?

答案

可以通過(guò)強(qiáng)轉(zhuǎn)

###34) 請(qǐng)說(shuō)說(shuō)引用和對(duì)象?

答案

對(duì)象和引用是分不開(kāi)的,對(duì)象生成一個(gè)地址,引用則指向了這個(gè)地址

A a=new A();

a為引用 等號(hào)右邊的是對(duì)象

###35) 怎樣將一個(gè)String添加到另一個(gè)String的后面?

答案

(StringBuffer ,StringBuilder)的append方法

concat

###36) 有幾種數(shù)據(jù)類型?

答案

JAVA數(shù)據(jù)類型分基本數(shù)據(jù)類型和引用對(duì)象類型。

###37) 傳參有幾種類型?有幾種特殊類型?

答案

基本數(shù)據(jù)類型 引用對(duì)象類型

###38) 什么是匿名類,有什么好處

答案 匿名類沒(méi)有名字的類 ,封裝性好,比較安全用了一次便可以丟棄 接口不能new,但語(yǔ)法中的匿名類卻和new一個(gè)接口的的語(yǔ)法結(jié)構(gòu)很相似。

###39) jar是什么格式的文件,有什么好處

答案

它允許將許多class文件組合成一個(gè)壓縮文件,方便管理class文件

###40) java和javac,javaw各有什么作用

答案 java:運(yùn)行程序 javac:編譯java文件至class文件 javaw: 不需要打開(kāi)dos窗口就可以運(yùn)行

有興趣的可以看下 ssh的面試題

http://blog.csdn.net/my_name_nb/article/details/54866319


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐业县| 金山区| 彰化县| 通山县| 南昌县| 兰西县| 和硕县| 建湖县| 庆云县| 富川| 遂溪县| 富民县| 屯留县| 博兴县| 攀枝花市| 康保县| 香河县| 手游| 泰兴市| 衢州市| 冀州市| 陕西省| 黄龙县| 北川| 柳江县| 阳新县| 景德镇市| 霍林郭勒市| 柳河县| 房产| 禹城市| 城步| 江西省| 柏乡县| 石首市| 华宁县| 华坪县| 建水县| 扎囊县| 德钦县| 汽车|