posts - 11, comments - 0, trackbacks - 0, articles - 0

          SSH 常見面試題02

          Posted on 2011-04-28 10:55 HsiangYu 閱讀(294) 評論(0)  編輯  收藏 所屬分類: interview

          1.struts
          Action是不是線程安全的?如果不是,有什么方式可以保證Action的線程安全?如果是,說明原因

          2.MVC,分析一下struts是如何實現(xiàn)MVC的

          3.struts中的幾個關(guān)鍵對象的作用(說說幾個關(guān)鍵對象的作用)

          4.spring
          說說AOP和IOC的概念以及在spring中是如何應(yīng)用的

          5.Hibernate有哪幾種查詢數(shù)據(jù)的方式

          6.load()和get()的區(qū)別

          回答:
          1.Struts1 Action是單例模式并且必須是線程安全的,因為僅有Action的一個實例來處理所有的請求。單例策略限制了Struts1 Action能作的事,并且要在開發(fā)時特別小心。Action資源必須是線程安全的或同步的。
          Struts2 Action對象為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。(實際上,servlet容器給每個請求產(chǎn)生許多可丟棄的對象,并且不會導(dǎo)致性能和垃圾回收問題)

          2.struts是用一組類,servlet 和jsp規(guī)范實現(xiàn)mvc的

          3.ActionFrom ActionServlet Action struts-config.xml

          4.spring的核心就是IOC,通過指定對象的創(chuàng)建辦法,描述對象與服務(wù)之間的關(guān)系,而不生成對象

          5.3種,hql 條件查詢() 原生sql

          6.load()方法認(rèn)為該數(shù)據(jù)一定存在,可以放心的使用代理來延時加載 ,如果使用過程中發(fā)現(xiàn)了問題,就拋出異常;
          get()方法一定要獲取到真實的數(shù)據(jù),否則返回null

          一些Spring和Hibernate的面試題(附答案)

          HibernateJava/J2EESpring

          1、 簡述你對IoC(Inversion of Control)的理解,描述一下Spring中實現(xiàn)DI(Dependency Injection)的幾種方式。

          2、 Spring的Bean有多種作用域,包括:

          singleton、prototype、request、session、global session、application、自定義

          3、 簡單描述Spring framework與Struts的不同之處,整合Spring與Struts有哪些方法,哪種最好,為什么?

          4、 Hibernate中的update()和saveOrUpdate()的區(qū)別

          5、 Spring對多種ORM框架提供了很好的支持,簡單描述在Spring中使用Hibernate的方法,并結(jié)合事務(wù)管理。

          答案:

          1、好萊塢原則€€€€不要打電話找我,我會打給你的。IoC將創(chuàng)建的職責(zé)從應(yīng)用程序代碼搬到了框架中。Spring對Setter注入和構(gòu)造方法注入提供支持。(詳見http://martinfowler.com/articles/injection.html,以及http: //www.redsaga.com/spring_ref/2.0/html/beans.html#beans-factory- collaborators)

          2、 除application(詳見Spring framework 2.0 Reference的3.4節(jié)bean的作用域)

          3、 Spring是完整的一站式框架,而Struts僅是MVC框架,且著重于MVC中的C。Spring有三種方式整合Struts:使用 Spring 的 ActionSupport 類整合 Struts;使用 Spring 的 DelegatingRequestProcessor 覆蓋 Struts 的 RequestProcessor;將 Struts Action 管理委托給 Spring 框架,動作委托最好。(詳見使用Spring 更好地處理Struts 動作)

          Spring 2.0新增一種方式:AutowiringRequestProcessor。(詳見http://www.iteye.com/topic/24239)

          4、 saveOrUpdate()方法可以實現(xiàn)update()的功能,但會多些步驟,具體如下:

          如果對象在該session中已經(jīng)被持久化,不進行操作;

          對象的標(biāo)識符屬性(identifier property)在數(shù)據(jù)庫中不存在或者是個暫時的值,調(diào)用save()方法保存它;

          如果session中的另一個對象有相同的標(biāo)識符拋出一個異常;

          以上皆不符合則調(diào)用update()更新之。

          5、在context中定義DataSource,創(chuàng)建SessionFactoy,設(shè)置參數(shù);DAO類繼承HibernateDaoSupport,實現(xiàn)具體接口,從中獲得HibernateTemplate進行具體操作。

          在使用中如果遇到OpenSessionInView的問題,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。(詳見Spring framework 2.0 Reference的12.2節(jié)Hibernate)

          聲明式事務(wù)需聲明事務(wù)管理器,在context中設(shè)置指定屬性,用確定和。

          請你談?wù)凷SH整合

          HibernateJava/J2EESpringStruts

          SSH:
          Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層)
          Struts:
          Struts是一個表示層框架,主要作用是界面展示,接收請求,分發(fā)請求。
          在MVC框架中,Struts屬于VC層次,負(fù)責(zé)界面表現(xiàn),負(fù)責(zé)MVC關(guān)系的分發(fā)。(View:沿用JSP,HTTP,F(xiàn)orm,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)
          Hibernate:
          Hibernate是一個持久層框架,它只負(fù)責(zé)與關(guān)系數(shù)據(jù)庫的操作。
          Spring:
          Spring是一個業(yè)務(wù)層框架,是一個整合的框架,能夠很好地黏合表示層與持久層。

          Spring如何創(chuàng)建一個數(shù)據(jù)連接池

          Java/J2EESpring

          <bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
          <property name=”driver”>
          <value>${db.driver}</value>
          </property>
          <property name=”url”>
          <value>${db.url}</value>
          </property>
          <property name=”username”>
          <value>${db.username}</value>
          </property>
          <property name=”password”>
          <value>${db.password}</value>
          </property>
          </bean>

          Spring如何獲取Bean

          Java/J2EESpring

          通過xml配置文件

          bean配置在xml里面,spring提供多種方式讀取配置文件得到ApplicationContext.

          第一種方式:FileSystemXmlApplicationContext

          通過程序在初始化的時候,導(dǎo)入Bean配置文件,然后得到Bean實例:
          ApplicationContext ac = new FileSystemXmlApplicationContext(”applicationContext.xml”)
          ac.getBean(”beanName”);

          第二種方式:WebApplicationContextUtil

          在B/S系統(tǒng)中,通常在web.xml初始化bean的配置文件,然后由WebAppliCationContextUtil得到ApplicationContext.例如:
          ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
          ApplicationContext ctx =   WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);

          其中 servletContext sc 可以具體 換成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext();

          另外,由于spring是注入的對象放在ServletContext中的,所以可以直接在ServletContext取出WebApplicationContext 對象:

          WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

          Spring框架有哪幾部分組成?

          Java/J2EESpring

          Spring框架有七個模塊組成組成,這7個模塊(或組件)均可以單獨存在,也可以與其它一個或多個模塊聯(lián)合使用,主要功能表現(xiàn)如下:

          ? Spring 核心容器(Core):提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,她是工廠模式的實現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(Ioc)模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用代碼程序分開。

          ? Spring AOP通過配置管理特性,Spring AOP模塊直接面向方面的編程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何對象支持 AOP。Spring AOP模塊為基于Spring的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用Spring AOP,不用依賴于EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。

          ? Spring ORMSpring框架集成了若干ORM框架,從而提供了ORM的對象關(guān)系工具,其中包括 JDO、Hibernate、iBatis和TopLink。所有這些都遵從Spring的通用事務(wù)和DAO異常層結(jié)構(gòu)。

          ? Spring DAOJDBC DAO抽象層提供了有意義的異常層次的結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)供應(yīng)商拋出的異常錯誤信息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且大大的降低了需要編寫的異常代碼數(shù)量(例如,打開和關(guān)系連接)。Spring DAO的面向JDBC的異常遵從通用的DAO異常層結(jié)構(gòu)。

          ? Spring WEBWeb上下文模塊建立在上下文模塊(Context)的基礎(chǔ)之上,為基于Web服務(wù)的應(yīng)用程序提供了上下文的服務(wù)。所以Spring框架支持 Jakarta Struts的集成。Web模塊還簡化了處理多部分請求及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

          ? Spring上下文(Context):Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如 JNDI、EJB、電子郵件、國際化校驗和調(diào)度功能。

          ? Spring MVCSpring的MVC框架是一個全功能的構(gòu)建Web應(yīng)用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納的大量視圖技術(shù),包括JSP、Velocity、Tiles、iText和Pol

          用Spring有什么好處

          Java/J2EESpring

          ◆Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會發(fā)現(xiàn)Spring關(guān)注了遺留下的問題,。

          ◆Spring能消除在許多工程上對Singleton的過多使用。根據(jù)我的經(jīng)驗,這是一個主要的問題,它減少了系統(tǒng)的可測試性和面向?qū)ο筇匦浴?br /> ◆Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個應(yīng)用和工程中,可通過一種一致的方法來進行配置。曾經(jīng)感到迷惑,一個特定類要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。
          ◆Spring能通過接口而不是類促進好的編程習(xí)慣,減少編程代價到幾乎為零。
          ◆Spring被設(shè)計為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對象沒有依賴于Spring。
          ◆使用Spring構(gòu)建的應(yīng)用程序易于單元測試。
          ◆Spring能使EJB的使用成為一個實現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或local EJBs來實現(xiàn)業(yè)務(wù)接口,卻不會影響調(diào)用代碼。
          ◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過使用EJB容器,如果你僅僅需要與單個的數(shù)據(jù)庫打交道,甚至不需要JTA實現(xiàn)。
          ■Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/R mapping產(chǎn)品(如Hibernate)。
          Spring確實使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。
          總結(jié)起來,Spring有如下優(yōu)點:
          ◆低侵入式設(shè)計,代碼污染極低
          ◆ 獨立于各種應(yīng)用服務(wù)器,可以真正實現(xiàn)Write Once,Run Anywhere的承諾
          ◆Spring的DI機制降低了業(yè)務(wù)對象替換的復(fù)雜性
          ◆Spring并不完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部

          Spring面試:什么是Spring, 它有什么特點

          Java/J2EESpring

          Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

          輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對象不依賴于Spring的特定類。

          控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了松耦合。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認(rèn)為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
          面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)()管理)進行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。
          容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype),你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。
          框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 当阳市| 宝清县| 盘锦市| 锦屏县| 镇安县| 光泽县| 呼和浩特市| 濮阳市| 屏东市| 平乡县| 桦甸市| 祁东县| 永宁县| 西宁市| 麻江县| 潮安县| 遂宁市| 诏安县| 佛冈县| 黄梅县| 安化县| 东宁县| 彰武县| 皋兰县| 松原市| 石泉县| 湖北省| 大理市| 安义县| 彭水| 白水县| 马鞍山市| 区。| 汝州市| 庄浪县| 平南县| 马龙县| 礼泉县| 高陵县| 都匀市| 梁平县|