收下這份!Java應(yīng)用場(chǎng)景面試題集(各知識(shí)點(diǎn)不同使用場(chǎng)景選型),就等于收下offer!

應(yīng)用場(chǎng)景面試題集(各知識(shí)點(diǎn)不同使用場(chǎng)景選型)

1. Spring 配置 Bean 實(shí)例化有哪些方式?

  1. 使用類構(gòu)造器實(shí)例化(默認(rèn)無(wú)參數(shù))
    <bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>
  2. 使用靜態(tài)工廠方法實(shí)例化(簡(jiǎn)單工廠模式)
    //下面這段配置的含義:調(diào)用 Bean2Factory 的 getBean2 方法得到 bean2
    <bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory"
    factorymethod="getBean2"></bean>
  3. 使用實(shí)例工廠方法實(shí)例化(工廠方法模式)
    //先創(chuàng)建工廠實(shí)例 bean3Facory,再通過(guò)工廠實(shí)例創(chuàng)建目標(biāo) bean 實(shí)例
    <bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"/><bean
    id="bean3" factorybean="bean3Factory" factorymethod="getBean3"></bean>

2. Bean 注入屬性有哪幾種方式

  1. 屬性注入方式,通過(guò) setXXX() 方法注入 Bean 的屬性值或者依賴對(duì)象
  2. 構(gòu)造函數(shù)注入方式,使用的前提:Bean 必須提供帶參的構(gòu)造函數(shù)
  3. 工廠方法注入方式

3. 在 Spring 中如何實(shí)現(xiàn)時(shí)間處理?

在 applicationContext.xml 中配置事件源、監(jiān)聽(tīng)器,先得到事件源,調(diào)用事件 源的方法,通知監(jiān)聽(tīng)器。

4. Spring 中如何更高效的使用 JDBC ?

傳統(tǒng)的 JDBC 實(shí)現(xiàn)有兩個(gè)不足之處:

  • 連接需要自己管理操
  • JDBC 操作代碼封裝與編寫(xiě)重復(fù)實(shí)現(xiàn)
    Spring 實(shí)現(xiàn)了 JdbcTemplate,在 JDBC API 的基礎(chǔ)做了科學(xué)的封裝。
    JdbcTemplate 的優(yōu)點(diǎn)有:
  1. 配置基于模板化處理
  2. JdbcTemplate 是線程安全類
  3. 實(shí)例化操作比較簡(jiǎn)單,僅需要傳遞 DataSource
  4. 自動(dòng)完成資源的創(chuàng)建和釋放工作
  5. 對(duì) JDBC 的核心流程進(jìn)行了封裝,簡(jiǎn)化了對(duì) JDBC 的操作
  6. 創(chuàng)建一次 JdbcTemplate,到處可用,避免重復(fù)開(kāi)發(fā)

5. 請(qǐng)介紹一下設(shè)計(jì)模式在 Spring 框架中的使用?

  1. 工廠模式:BeanFactory 就是簡(jiǎn)單工廠模式的體現(xiàn),用來(lái)創(chuàng)建對(duì)象的實(shí) 例。
  2. 單例模式:Bean 默認(rèn)為單例模式。
  3. 代理模式:Spring 的 AOP 功能用到了 JDK 的動(dòng)態(tài)代理和 CGLIB 字 節(jié)碼生成技術(shù)。
  4. 模板方法:用來(lái)解決代碼重復(fù)的問(wèn)題。比如:RestTemplate, JmsTemplate, JpaTemplate。
  5. 觀察者模式:定義對(duì)象鍵一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生
    改變時(shí),所有依賴于它的對(duì)象都會(huì)得到通知被制動(dòng)更新,如 Spring 中
    listener 的實(shí)現(xiàn):ApplicationListener。

6. 講講 Spring 框架的優(yōu)點(diǎn)有哪些?

  1. 非侵入式設(shè)計(jì):代碼與框架的依賴性比較低。
  2. 代碼解耦:提供控制反轉(zhuǎn)能力,對(duì)象的創(chuàng)建和依賴關(guān)系的維護(hù)工作都交給
    Spring 容器的管理,大大的降低了對(duì)象之間的耦合性。
  3. 可復(fù)用性提高:支 AOP ,允許將一些通用能力(打印日志、事務(wù)處理、 安全操作等)
    進(jìn)行集中式處理。
  4. MVC 框架:Spring 的 Web 框架是個(gè)精心設(shè)計(jì)的框架,是 Web 框架 的一個(gè)很好的替代品。
  5. 事務(wù)支持方便:Spring 提供一個(gè)持續(xù)的事務(wù)管理接口,配置化完成對(duì)事 物的管理,減少手動(dòng)編程。
  6. 異常處理:Spring 提供方便的 API 把具體技術(shù)相關(guān)的異常(比如由 JDBC、Hibernate or JDO 拋出的)
    轉(zhuǎn)化為一致的 unchecked 異常。
  7. 方便程序測(cè)試:提供了對(duì) Junit4 的支持,可以通過(guò)注解方便的測(cè)試 Spring 程序。

7. 哪種依賴注入方式你建議使用,構(gòu)造器注入,還是 Setter 方法注 入?

你兩種依賴方式都可以使用,構(gòu)造器注入和 setter 方法注入。最好的解決方案 是用構(gòu)造器參數(shù)實(shí)現(xiàn)強(qiáng)制依賴,setter 方法實(shí)現(xiàn)可選依賴。

8. 你怎樣定義類的作用域?

當(dāng)定義一個(gè) <bean> 在 Spring 里,我們還能給這個(gè) Bean 聲明一個(gè)作用域。
它可以通過(guò) Bean 定義中的 scope 屬性來(lái)定義。如,當(dāng) Spring 要在需要的
時(shí)候每次生產(chǎn)一個(gè)新的Bean實(shí)例 , Bean的scope屬性被指定為prototype。
另一方面,一個(gè) Bean 每次使用的時(shí)候必須返回同一個(gè)實(shí)例,這
個(gè) Bean 的 scope 屬性必須設(shè)為 singleton。

9. 解釋 Spring 支持的幾種 Bean 的作用域

Spring 框架支持以下五種 Bean 的作用域:

  1. singleton:Bean 在每個(gè) Spring IoC 容器中只有一個(gè)實(shí)例。
  2. prototype:一個(gè) Bean 的定義可以有多個(gè)實(shí)例。
  3. request:每次 http 請(qǐng)求都會(huì)創(chuàng)建一個(gè) Bean,該作用域僅在基于 Web 的 Spring ApplicationContext
    情形下有效。
  4. session:在一個(gè) HTTP Session 中,一個(gè) Bean 定義對(duì)應(yīng)一個(gè)實(shí)例。 該作用域僅在基于 Web 的 Spring ApplicationContext 情形下有效。
  5. global-session:在一個(gè)全局的 HTTP Session 中,一個(gè) Bean 定義對(duì) 應(yīng)一個(gè)實(shí)例。該作用域僅在基于 Web 的 Spring ApplicationContext 情形下有效。
    缺省的 Spring Bean 的作用域是 Singleton。

10. 在 Spring 中如何注入一個(gè) Java 集合?

Spring 提供以下幾種集合的配置元素:

  1. <list> 類型用于注入一列值,允許有相同的值。
  2. <set> 類型用于注入一組值,不允許有相同的值。
  3. <map> 類型用于注入一組鍵值對(duì),鍵和值都可以為任意類型。
  4. <props> 類型用于注入一組鍵值對(duì),鍵和值都只能為 String 類型。

11. 你可以在 Spring 中注入一個(gè) null 和一個(gè)空字符串嗎?

可以

12. 什么是基于 Java 的 Spring 注解配置?

給一些注解的例子 基于 Java 的配置,允許你在少量的 Java 注解的幫助下,進(jìn)行你的大部分
Spring 配置而非通過(guò) XML 文件。
以 @Configuration 注解為例,它用來(lái)標(biāo)記類可以當(dāng)做一個(gè) Bean 的定義,被
Spring IOC 容器使用。另一個(gè)例子是 @Bean 注解,它表示此方法將要返回一
個(gè)對(duì)象,作為一個(gè) Bean 注冊(cè)進(jìn) Spring 應(yīng)用上下文。

13. 你更傾向用那種事務(wù)管理類型?

聲明式事務(wù)管理,因?yàn)樗鼘?duì)應(yīng)用代碼侵入性很少,更符合一個(gè)無(wú)侵入的輕量級(jí)容 器的思想。
聲明式事務(wù)管理要優(yōu)于編程式事務(wù)管理,雖然比編程式事務(wù)管理(這種方式允許
你通過(guò)代碼控制事務(wù))少了一點(diǎn)靈活性。

14. Bean 的調(diào)用方式有哪些?

有三種方式可以得到 Bean 并進(jìn)行調(diào)用。

  1. 使用 BeanWrapper
    HelloWorld hw=new HelloWorld();
    BeanWrapper bw=new BeanWrapperImpl(hw);
    bw.setPropertyvalue(”msg”,”HelloWorld”);
    system.out.println(bw.getPropertyCalue(”msg”));
  2. 使用 BeanFactory
    InputStream is=new FileInputStream(”config.xml”);
    XmlBeanFactory factory=new XmlBeanFactory(is);
    HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);
    system.out.println(hw.getMsg());
  3. 使用 ApplicationConttext
    ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);
    HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);
    System.out.println(hw.getMsg());
    使用 @ResponseBody 注解。

15. Spring MVC 里面攔截器是怎么寫(xiě)的

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

<!-- 配置 SpringMvc 的攔截器 --> <mvc:interceptors> 
<!-- 配置一個(gè)攔截器的 Bean 就可以了 默認(rèn)是對(duì)所有請(qǐng)求都攔截 --> 
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"/> 
<!-- 只針對(duì)部分請(qǐng)求攔截 --> 
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" /> 
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
 </mvc:interceptor> </mvc:interceptors> 

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

要加上 @ResponseBody 注解。

17. 如何使用 Spring MVC 完成 JSON 操作

  1. 配置 MappingJacksonHttpMessageConverter
  2. 使用 @RequestBody 注解或 ResponseEntity 作為返回值

18. Spring 如何整合 Hibernate

整合 Hibernate,即由 IoC 容器生成 SessionFactory 對(duì)象, 并使用 Spring
的聲明式事務(wù)。

  1. 利用 LocalSessionFactoryBean 工廠 Bean,聲明一個(gè)使用 XML 映射
    文件的 SessionFactory 實(shí)例
  2. 利用 HibernateTransactionManager 配置 Hibernate 的事務(wù)管理器

19. Spring 如何整合 Struts2 ?

整合 Struts2,即由 IoC 容器管理 Struts2 的 Action:

  • 安裝 Spring 插件:把 struts2-spring-plugin-2.2.1.jar 復(fù)制到當(dāng)前
    Web 應(yīng)用的 WEB-INF/lib 目錄下
  • 在 Spring 的配置文件中配置 Struts2 的 Action 實(shí)例
  • 在 Struts 配置文件中配置 action,但其 class 屬性不再指向該 Action
    的實(shí)現(xiàn)類,而是指向 Spring 容器中 Action 實(shí)例的 ID

20. 開(kāi)發(fā)中主要使用 Spring 的什么技術(shù) ?

  1. IoC 容器管理各層的組件
  2. 使用 AOP 配置聲明式事務(wù)
  3. 整合其他框架

21. 介紹一下 Spring MVC 常用的一些注解

  1. @RequestMapping:處理請(qǐng)求地址映射的注解,可用于類或方法上。
  2. @PathVariable:綁定 URI 模板變量值是用來(lái)獲得請(qǐng)求 url 中的動(dòng)態(tài)參
    數(shù)
  3. @RequestParam:用于將指定的請(qǐng)求參數(shù)賦值給方法中的形參
  4. @RequestBody:讀取 Request 請(qǐng)求的 body 部分?jǐn)?shù)據(jù)
  5. @ResponseBody:用于將 Controller 的方法返回的對(duì)象,通過(guò)適當(dāng)?shù)?HttpMessageConverter
    轉(zhuǎn)換為指定格式后,寫(xiě)入到 Response 對(duì)象 的 body 數(shù)據(jù)區(qū)

22. Spring 框架的事務(wù)管理有哪些優(yōu)點(diǎn)

  1. 為不同的事務(wù) API( JDBC、Hibernate、JPA )提供統(tǒng)一的編程模型
  2. 封裝了簡(jiǎn)單統(tǒng)一的 API 對(duì)事物進(jìn)行管理操作
  3. 同時(shí)支持聲明式事物和編程時(shí)事物兩種方式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評(píng)論 6 530
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 97,947評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,094評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,485評(píng)論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,268評(píng)論 6 405
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,817評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,039評(píng)論 0 285
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,551評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,502評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,662評(píng)論 1 366
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,907評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,304評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,563評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,255評(píng)論 3 389
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,637評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容