黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

第一部分 Java基礎(chǔ)
第二部分 Java進(jìn)階

Java spring面試題及答案(1~11題)

1、SpringMVC的工作原理?

● 用戶向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求被springMVC前端控制器DispatchServlet捕獲;

● DispatcherServle對(duì)請(qǐng)求URL進(jìn)行解析,得到請(qǐng)求資源標(biāo)識(shí)符(URL),然后根據(jù)該URL調(diào)用HandlerMapping將請(qǐng)求映射到處理器HandlerExcutionChain;

● DispatchServlet根據(jù)獲得Handler選擇一個(gè)合適的HandlerAdapter適配器處理;

● Handler對(duì)數(shù)據(jù)處理完成以后將返回一個(gè)ModelAndView對(duì)象給DisPatchServlet;

● Handler返回的ModelAndView只是一個(gè)邏輯視圖并不是一個(gè)正式的視圖,DispatcherSevlet通過ViewResolver試圖解析器將邏輯視圖轉(zhuǎn)化為真正的視圖View;

● DispatcherServle通過model解析出ModelAndView()中的參數(shù)進(jìn)行解析最終展現(xiàn)出完整的view并返回給客戶端;

2、SpringMVC常用注解都有哪些?

● @RequestMapping用于請(qǐng)求url映射。

● @RequestBody注解實(shí)現(xiàn)接收http請(qǐng)求的json數(shù)據(jù),將json數(shù)據(jù)轉(zhuǎn)換為java對(duì)象。

● @ResponseBody注解實(shí)現(xiàn)將controller方法返回對(duì)象轉(zhuǎn)化為json響應(yīng)給客戶。

3、如何開啟注解處理器和適配器?

我們?cè)陧?xiàng)目中一般會(huì)在springmvc.xml中通過開啟<mvc:annotation-driven>來(lái)實(shí)現(xiàn)注解處理器和適配器的開啟。

4、如何解決get和post亂碼問題?

解決post請(qǐng)求亂碼:我們可以在web.xml里邊配置一個(gè)CharacterEncodingFilter過濾器。設(shè)置為utf-8.解決get請(qǐng)求的亂碼:有兩種方法。對(duì)于get請(qǐng)求中文參數(shù)出現(xiàn)亂碼解決方法有兩個(gè):

● 修改tomcat配置文件添加編碼與工程編碼一致。

● 另 外 一 種 方 法 對(duì) 參 數(shù) 進(jìn) 行 重 新 編 碼 String userName = new String(request.getParameter(“userName”).getBytes(“ISO8859-1”),“utf-8”);

5、談?wù)勀銓?duì)Spring的理解?

Spring是一個(gè)開源框架,為簡(jiǎn)化企業(yè)級(jí)應(yīng)用開發(fā)而生。Spring可以是使簡(jiǎn)單的JavaBean實(shí)現(xiàn)以前只有EJB才能實(shí)現(xiàn)的功能。Spring是一個(gè)IOC和AOP容器框架。

● Spring容器的主要核心是:

控制反轉(zhuǎn)(IOC),傳統(tǒng)的java開發(fā)模式中,當(dāng)需要一個(gè)對(duì)象時(shí),我們會(huì)自己使用new或者getInstance等直接或者間接調(diào)用構(gòu)造方法創(chuàng)建一個(gè)對(duì)象。而在spring開發(fā)模式中,spring容器使用了工廠模式為我們創(chuàng)建了所需要的對(duì)象,不需要我們自己創(chuàng)建了,直接調(diào)用spring提供的對(duì)象就可以了,這是控制反轉(zhuǎn)的思想。

依賴注入(DI),spring使用JavaBean對(duì)象的set方法或者帶參數(shù)的構(gòu)造方法為我們?cè)趧?chuàng)建所需對(duì)象時(shí)將其屬性自動(dòng)設(shè)置所需要的值的過程,就是依賴注入的思想。

面向切面編程(AOP),在面向?qū)ο缶幊蹋╫op)思想中,我們將事物縱向抽成一個(gè)個(gè)的對(duì)象。而在面向切面編程中,我們將一個(gè)個(gè)的對(duì)象某些類似的方面橫向抽成一個(gè)切面,對(duì)這個(gè)切面進(jìn)行一些如權(quán)限控制、事物管理,記錄日志等公用操作處理的過程就是面向切面編程的思想。AOP底層是動(dòng)態(tài)代理,如果是接口采用JDK動(dòng)態(tài)代理,如果是類采用CGLIB方式實(shí)現(xiàn)動(dòng)態(tài)代理

6、Spring中的設(shè)計(jì)模式有哪些?

● 單例模式——spring中兩種代理方式,若目標(biāo)對(duì)象實(shí)現(xiàn)了若干接口,spring使用jdk的java.lang.reflect.Proxy類代理。若目標(biāo)兌現(xiàn)沒有實(shí)現(xiàn)任何接口,spring使用CGLIB庫(kù)生成目標(biāo)類的子類。單例模式——在spring的配置文件中設(shè)置bean默認(rèn)為單例模式。

● 模板方式模式——用來(lái)解決代碼重復(fù)的問題。比如:RestTemplate、JmsTemplate、JpaTemplate

● 前端控制器模式——spring提供了前端控制器DispatherServlet來(lái)對(duì)請(qǐng)求進(jìn)行分發(fā)。

● 試圖幫助(viewhelper)——spring提供了一系列的JSP標(biāo)簽,高效宏來(lái)幫助將分散的代碼整合在試圖中。

● 依賴注入——貫穿于BeanFactory/ApplacationContext接口的核心理念。

● 工廠模式——在工廠模式中,我們?cè)趧?chuàng)建對(duì)象時(shí)不會(huì)對(duì)客戶端暴露創(chuàng)建邏輯,并且是通過使用同一個(gè)接口來(lái)指向新創(chuàng)建的對(duì)象。Spring中使用beanFactory來(lái)創(chuàng)建對(duì)象的實(shí)例。

7、Spring的常用注解?

Spring在2.5版本以后開始支持注解的方式來(lái)配置依賴注入。可以用注解的方式來(lái)代替xml中bean的描述。注解注入將會(huì)被容器在XML注入之前被處理,所以后者會(huì)覆蓋掉前者對(duì)于同一個(gè)屬性的處理結(jié)果。

注解裝配在spring中默認(rèn)是關(guān)閉的。所以需要在spring的核心配置文件中配置一下才能使用基于注解的裝配模式。配置方式如下:<context:annotation-config/>

● 常用的注解:

@Required:該注解應(yīng)用于設(shè)值方法。

@Autowired:該注解應(yīng)用于有值設(shè)值方法、非設(shè)值方法、構(gòu)造方法和變量。

@Qualifier:該注解和@Autowired搭配使用,用于消除特定bean自動(dòng)裝配的歧義。

8、簡(jiǎn)單介紹一下spring bean的生命周期?

● bean定義:在配置文件里面用<bean></bean>來(lái)進(jìn)行定義。

● bean初始化:有兩種方式初始化:

1、在配置文件中通過指定init-method屬性來(lái)完成。

2、實(shí)現(xiàn)org.springframwork.beans.factory.InitializingBean接口。

● bean調(diào)用:有三種方式可以得到bean實(shí)例,并進(jìn)行調(diào)用

● bean銷毀:銷毀有兩種方式:

1、使用配置文件指定的destroy-method屬性。

2、實(shí)現(xiàn)org.springframwork.bean.factory.DisposeableBean。

9、Spring結(jié)構(gòu)圖了解嗎?

● 核心容器:包括Core、Beans、Context、EL模塊。

1、Core模塊:封裝了框架依賴的最底層部分,包括資源訪問、類型轉(zhuǎn)換及一些常用工具類。

2、Beans模塊:提供了框架的基礎(chǔ)部分,包括反轉(zhuǎn)控制和依賴注入。其中BeanFactory是容器核心,本質(zhì)是“工廠設(shè)計(jì)模式”的實(shí)現(xiàn),而且無(wú)需編程實(shí)現(xiàn)“單例設(shè)計(jì)模式”,單例完全由容器控制,而且提倡面向接口編程,而非面向?qū)崿F(xiàn)編程;所有應(yīng)用程序?qū)ο蠹皩?duì)象間關(guān)系由框架管理,從而真正把你從程序邏輯中把維護(hù)對(duì)象之間的依賴關(guān)系提取出來(lái),所有這些依賴關(guān)系都由BeanFactory來(lái)維護(hù)。

3、Context模塊:以Core和Beans為基礎(chǔ),集成Beans模塊功能并添加資源綁定、數(shù)據(jù)驗(yàn)證、國(guó)際化、JavaEE支持、容器生命周期、事件傳播等;核心接口是ApplicationContext。

4、EL模塊:提供強(qiáng)大的表達(dá)式語(yǔ)言支持,支持訪問和修改屬性值,方法調(diào)用,支持訪問及修改數(shù)組、容器和索引器,命名變量,支持算數(shù)和邏輯運(yùn)算,支持從Spring容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。

● AOP、Aspects模塊:

1、AOP模塊:SpringAOP模塊提供了符合AOPAlliance規(guī)范的面向方面的編程(aspect-orientedprogramming)實(shí)現(xiàn),提供比如日志記錄、權(quán)限控制、性能統(tǒng)計(jì)等通用功能和業(yè)務(wù)邏輯分離的技術(shù),并且能動(dòng)態(tài)的把這些功能添加到需要的代碼中;這樣各專其職,降低業(yè)務(wù)邏輯和通用功能的耦合。

2、Aspects模塊:提供了對(duì)AspectJ的集成,AspectJ提供了比SpringASP更強(qiáng)大的功能。數(shù)據(jù)訪問/集成模塊:該模塊包括了JDBC、ORM、OXM、JMS和事務(wù)管理。

3、事務(wù)模塊:該模塊用于Spring管理事務(wù),只要是Spring管理對(duì)象都能得到Spring管理事務(wù)的好處,無(wú)需在代碼中進(jìn)行事務(wù)控制了,而且支持編程和聲明性的事務(wù)管理。

4、JDBC模塊:提供了一個(gè)JBDC的樣例模板,使用這些模板能消除傳統(tǒng)冗長(zhǎng)的JDBC編碼還有必須的事務(wù)控制,而且能享受到Spring管理事務(wù)的好處。

5、ORM模塊:提供與流行的“對(duì)象-關(guān)系”映射框架的無(wú)縫集成,包括Hibernate、JPA、MyBatis等。而且可以使用Spring事務(wù)管理,無(wú)需額外控制事務(wù)。

6、OXM模塊:提供了一個(gè)對(duì)Object/XML映射實(shí)現(xiàn),將java對(duì)象映射成XML數(shù)據(jù),或者將XML數(shù)據(jù)映射成java對(duì)象,Object/XML映射實(shí)現(xiàn)包括JAXB、Castor、XMLBeans和XStream。

7、JMS模塊:用于JMS(JavaMessagingService),提供一套“消息生產(chǎn)者、消息消費(fèi)者”模板用于更加簡(jiǎn)單的使用JMS,JMS用于用于在兩個(gè)應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。

8、Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。

9、Web模塊:提供了基礎(chǔ)的web功能。例如多文件上傳、集成IoC容器、遠(yuǎn)程過程訪問(RMI、Hessian、Burlap)以及WebService支持,并提供一個(gè)RestTemplate類來(lái)提供方便的Restfulservices訪問。

10、Web-Servlet模塊:提供了一個(gè)SpringMVCWeb框架實(shí)現(xiàn)。SpringMVC框架提供了基于注解的請(qǐng)求資源注入、更簡(jiǎn)單的數(shù)據(jù)綁定、數(shù)據(jù)驗(yàn)證等及一套非常易用的JSP標(biāo)簽,完全無(wú)縫與Spring其他技術(shù)協(xié)作。

11、Web-Struts模塊:提供了與Struts無(wú)縫集成,Struts1.x和Struts2.x都支持

12、Test模塊:Spring支持Junit和TestNG測(cè)試框架,而且還額外提供了一些基于Spring的測(cè)試功能,比如在測(cè)試Web框架時(shí),模擬Http請(qǐng)求的功能。

10、Spring能幫我們做什么?

● Spring能幫我們根據(jù)配置文件創(chuàng)建及組裝對(duì)象之間的依賴關(guān)系。

● Spring根據(jù)配置文件來(lái)進(jìn)行創(chuàng)建及組裝對(duì)象間依賴關(guān)系,只需要改配置文件即可

● Spring面向切面編程能幫助我們無(wú)耦合的實(shí)現(xiàn)日志記錄,性能統(tǒng)計(jì),安全控制。

● Spring面向切面編程能提供一種更好的方式來(lái)完成,一般通過配置方式,而且不需要在現(xiàn)有代碼中添加任何額外代碼,現(xiàn)有代碼專注業(yè)務(wù)邏輯。

● Spring能非常簡(jiǎn)單的幫我們管理數(shù)據(jù)庫(kù)事務(wù)。

● 采用Spring,我們只需獲取連接,執(zhí)行SQL,其他事物相關(guān)的都交給Spring來(lái)管理了。

● Spring還能與第三方數(shù)據(jù)庫(kù)訪問框架(如Hibernate、JPA)無(wú)縫集成,而且自己也提供了一套JDBC訪問模板,來(lái)方便數(shù)據(jù)庫(kù)訪問。

● Spring還能與第三方Web(如Struts、JSF)框架無(wú)縫集成,而且自己也提供了一套SpringMVC框架,來(lái)方便web層搭建。

● Spring能方便的與JavaEE(如JavaMail、任務(wù)調(diào)度)整合,與更多技術(shù)整合(比如緩存框架)。

11、請(qǐng)描述一下Spring的事務(wù)?

聲明式事務(wù)管理的定義:用在Spring配置文件中聲明式的處理事務(wù)來(lái)代替代碼式的處理事務(wù)。這樣的好處是,事務(wù)管理不侵入開發(fā)的組件,具體來(lái)說(shuō),業(yè)務(wù)邏輯對(duì)象就不會(huì)意識(shí)到正在事務(wù)管理之中,事實(shí)上也應(yīng)該如此,因?yàn)槭聞?wù)管理是屬于系統(tǒng)層面的服務(wù),而不是業(yè)務(wù)邏輯的一部分,如果想要改變事務(wù)管理策劃的話,也只需要在定義文件中重新配置即可,這樣維護(hù)起來(lái)極其方便。

基于TransactionInterceptor的聲明式事務(wù)管理:兩個(gè)次要的屬性:transactionManager,用來(lái)指定一個(gè)事務(wù)治理器,并將具體事務(wù)相關(guān)的操作請(qǐng)托給它;其他一個(gè)是Properties類型的transactionAttributes屬性,該屬性的每一個(gè)鍵值對(duì)中,鍵指定的是方法名,方法名可以行使通配符,而值就是表現(xiàn)呼應(yīng)方法的所運(yùn)用的事務(wù)屬性。

<beans>
    ......
    <bean id="transactionInterceptor"
          class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager"/>
        <property name="transactionAttributes">
            <props>
                <prop key="transfer">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    <bean id="bankServiceTarget"
          class="footmark.spring.core.tx.declare.origin.BankServiceImpl">
        <property name="bankDao" ref="bankDao"/>
    </bean>
    <bean id="bankService"
          class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="target" ref="bankServiceTarget"/>
        <property name="interceptorNames">
            <list>
                <idref bean="transactionInterceptor"/>
            </list>
        </property>
    </bean>
</beans>

基于 TransactionProxyFactoryBean 的聲明式事務(wù)管理:設(shè)置配置文件與先前比照簡(jiǎn)化了許多。我們把這類設(shè)置配置文件格式稱為 Spring 經(jīng)典的聲明式事務(wù)治理。 

<beans>
    ......
    <bean id="bankServiceTarget"
          class="footmark.spring.core.tx.declare.classic.BankServiceImpl">
        <property name="bankDao" ref="bankDao"/>
    </bean>
    <bean id="bankService"
          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="target" ref="bankServiceTarget"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="transactionAttributes">
            <props>
                <prop key="transfer">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
</beans>

基于  <tx>   命名空間的聲明式事務(wù)治理:在前兩種方法的基礎(chǔ)上,Spring 2.x  引入了  <tx>  命名空間, 連絡(luò)行使 <aop> 命名空間,帶給開發(fā)人員設(shè)置配備聲明式事務(wù)的全新體驗(yàn)。

<beans>
    ......
    <bean id="bankService"
          class="footmark.spring.core.tx.declare.namespace.BankServiceImpl">
        <property name="bankDao" ref="bankDao"/>
    </bean>
    <tx:advice id="bankAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="transfer" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="bankPointcut" expression="execution(* *.transfer(..))"/>
        <aop:advisor advice-ref="bankAdvice" pointcut-ref="bankPointcut"/>
    </aop:config>
    ......
</beans>

基于  @Transactional  的聲明式事務(wù)管理:Spring  2.x  還引入了基于  Annotation  的體式格式,具體次要觸及@Transactional   標(biāo)注。@Transactional   可以浸染于接口、接口方法、類和類方法上。算作用于類上時(shí),該類的一切public 方法將都具有該類型的事務(wù)屬性。

@Transactional(propagation = Propagation.REQUIRED)
public boolean transfer(Long fromId, Long toId, double amount) {
    return bankDao.transfer(fromId, toId, amount);
}

編程式事務(wù)管理的定義:在代碼中顯式挪用 beginTransaction()、commit()、rollback()等事務(wù)治理相關(guān)的方法, 這就是編程式事務(wù)管理。Spring 對(duì)事物的編程式管理有基于底層 API 的編程式管理和基于 TransactionTemplate 的編程式事務(wù)管理兩種方式。

基于底層 API 的編程式管理:憑證 PlatformTransactionManager 、 TransactionDefinition 和TransactionStatus 三個(gè)焦點(diǎn)接口,來(lái)實(shí)現(xiàn)編程式事務(wù)管理。

public class BankServiceImpl implements BankService {
    private BanckDao bankDao;
    private TransactionDefinition txDefinition;
    private PlatformTransactionManager txManager;

    public boolean transfer(Long fromId, Long toId, double amount) {
        TransactionStatus txStatus = txManager.getTransaction(txDefinition);
        boolean result = false;
        try {
            result = bankDao.transfer(fromId, toId, amount);
            txManager.commit(txStatus);
        } catch (Exception e) {
            result = false;
            txManager.rollback(txStatus);
            System.out.println("Transfer Error!");
        }
        return result;
    }
}

基于 TransactionTemplate  的編程式事務(wù)管理:為了不損壞代碼原有的條理性,避免出現(xiàn)每一個(gè)方法中都包括相同的啟動(dòng)事物、提交、回滾事物樣板代碼的現(xiàn)象,spring 提供了 transactionTemplate 模板來(lái)實(shí)現(xiàn)編程式事務(wù)管理。

public class BankServiceImpl implements BankService {
    private BankDao bankDao;
    private TransactionTemplate transactionTemplate;

    public boolean transfer(final Long fromId, final Long toId, final double amount) {
        return (Boolean) transactionTemplate.execute(new TransactionCallback() {
            public Object doInTransaction(TransactionStatus status) {
                Object result;
                try {
                    result = bankDao.transfer(fromId, toId, amount);
                } catch (Exception e) {
                    status.setRollbackOnly();
                    result = false;
                    System.out.println("Transfer Error!");
                }
                return result;
            }
        });
    }
}

編程式事務(wù)與聲明式事務(wù)的區(qū)別:

編程式事務(wù)是自己寫事務(wù)處理的類,然后調(diào)用。

聲明式事務(wù)是在配置文件中配置,一般搭配在框架里面使用。

全部教程
主站蜘蛛池模板: 天天干天天日天天射天天操毛片 | 国产成人污污网站在线观看 | 最近在线观看免费完整视频 | 一级无毛片 | 亚洲午夜久久 | 日韩欧美伦理片 | 日韩在线视频中文字幕 | 99视频免费 | 在线免费观看视频你懂的 | 亚洲九九夜夜 | 色综合天天综合高清网国产 | 欧美高清 hd video | 真实一级一级一片免费视频 | 日韩精品麻豆 | 国产网站免费 | 国产日皮 | 欧美特黄一区二区三区 | 91久久天天躁狠狠躁夜夜 | 欧美黄色免费在线观看 | 午夜在线视频国产 | 免费羞羞视频网站 | 午夜嘿嘿 | 久久国产成人午夜aⅴ影院 久久国产欧美日韩精品 | 91在线精品麻豆欧美在线 | 久久综合激情 | 国产精品一区在线观看 | 成人免费一区二区三区在线观看 | 最近中文字幕完整国语 | 国产精品特黄毛片 | 99成人在线视频 | 国产一区二区丁香婷婷 | 欧美日一区 | 色综合第一页 | 免费看的一级毛片 | 国产50页| 无遮挡免费视频 | 欧美日韩视频一区三区二区 | 香蕉在线精品亚洲第一区 | 久久97精品久久久久久久不卡 | 亚洲成a人片在线观看精品 亚洲成a人片在线观看中 | 97国产成人精品视频 |