亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java面試題 java最新面試題之Spring框架部分

java最新面試題之Spring框架部分

Nov 09, 2019 pm 03:05 PM
java

java最新面試題之Spring框架部分

1、SpringMVC的工作原理?

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

DispatcherServle對請求URL進行解析,得到請求資源標識符(URL),然后根據(jù)該URL調(diào)用HandlerMapping將請求映射到處理器HandlerExcutionChain;

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

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

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

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

java-22.png

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

@RequestMapping用于請求url映射。

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

@ResponseBody注解實現(xiàn)將controller方法返回對象轉(zhuǎn)化為json響應給客戶。

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

我們在項目中一般會在springmvc.xml中通過開啟 來實現(xiàn)注解處理器和適配器的開啟。

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

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

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

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

5、談談你對Spring的理解?

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

Spring容器的主要核心是:

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

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

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

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

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

模板方式模式——用來解決代碼重復的問題。比如:RestTemplate、JmsTemplate、JpaTemplate

前端控制器模式——spring提供了前端控制器DispatherServlet來對請求進行分發(fā)。

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

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

工廠模式——在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用同一個接口來指向新創(chuàng)建的對象。Spring中使用beanFactory來創(chuàng)建對象的實例。

7、Spring的常用注解?

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

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

常用的注解:

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

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

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

8、簡單介紹一下spring bean的生命周期?

bean定義:在配置文件里面用 來進行定義。

bean初始化:有兩種方式初始化: 在配置文件中通過指定init-method屬性來完成。 實現(xiàn)org.springframwork.beans.factory.InitializingBean接口。

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

bean銷毀:銷毀有兩種方式: 使用配置文件指定的destroy-method屬性。 實現(xiàn)org.springframwork.bean.factory.DisposeableBean。

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

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

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

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

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

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

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

事務模塊:該模塊用于Spring管理事務,只要是Spring管理對象都能得到Spring管理事務的好處,無需在代碼中進行事務控制了,而且支持編程和聲明性的事務管理。?

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

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

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

JMS模塊:用于JMS(JavaMessagingService),提供一套“消息生產(chǎn)者、消息消費者”模板用于更加簡單的使用JMS,JMS用于用于在兩個應用程序之間,或分布式系統(tǒng)中發(fā)送消息,進行異步通信。 Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。?

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

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

Web-Struts模塊:提供了與Struts無縫集成,Struts1.x和Struts2.x都支持 Test模塊:Spring支持Junit和TestNG測試框架,而且還額外提供了一些基于Spring的測試功能,比如在測試Web框架時,模擬Http請求的功能。

java-23.png

10、Spring能幫我們做什么?

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

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

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

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

Spring能非常簡單的幫我們管理數(shù)據(jù)庫事務。

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

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

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

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

11、請描述一下Spring的事務?

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

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

<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 的聲明式事務管理:設(shè)置配置文件與先前比照簡化了許多。我們把這類設(shè)置配置文件格式稱為 Spring 經(jīng)典的聲明式事務治理。

<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>

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

<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 的聲明式事務管理:Spring 2.x 還引入了基于 Annotation 的體式格式,具體次要觸及@Transactional 標注。@Transactional 可以浸染于接口、接口方法、類和類方法上。算作用于類上時,該類的一切public 方法將都具有該類型的事務屬性。

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

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

基 于 底 層 API 的 編 程 式 管 理 : 憑 證 PlatformTransactionManager 、 TransactionDefinition 和TransactionStatus 三個焦點接口,來實現(xiàn)編程式事務管理。

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 的編程式事務管理:為了不損壞代碼原有的條理性,避免出現(xiàn)每一個方法中都包括相同的啟動事物、提交、回滾事物樣板代碼的現(xiàn)象,spring 提供了 transactionTemplate 模板來實現(xiàn)編程式事務管理。

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;
            }
        });
    }
}

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

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

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

以上是java最新面試題之Spring框架部分的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。JSON位置 VSCODE設(shè)置。JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位于用戶級或工作區(qū)級路徑,用于自定義VSCode設(shè)置。1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最后根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應使用try-with-resources管理資源,妥善處理異常并關(guān)閉連接,避免連接泄漏;此外建議使用連接池、設(shè)置保存點實現(xiàn)部分回滾,并保持事務盡可能短以提升性能。

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用于生成從可迭代對象中選取指定數(shù)量元素的所有不重復組合(順序無關(guān)),其用法包括:1.從列表中選2個元素組合,如('A','B')、('A','C')等,避免重復順序;2.對字符串取3個字符組合,如"abc"、"abd",適用于子序列生成;3.求兩數(shù)之和等于目標值的組合,如1 5=6,簡化雙重循環(huán)邏輯;組合與排列的區(qū)別在于順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

Python Pytest夾具示例 Python Pytest夾具示例 Jul 31, 2025 am 09:35 AM

fixture是用于為測試提供預設(shè)環(huán)境或數(shù)據(jù)的函數(shù),1.使用@pytest.fixture裝飾器定義fixture;2.在測試函數(shù)中以參數(shù)形式注入fixture;3.yield之前執(zhí)行setup,之后執(zhí)行teardown;4.通過scope參數(shù)控制作用域,如function、module等;5.將共用fixture放在conftest.py中實現(xiàn)跨文件共享,從而提升測試的可維護性和復用性。

故障排除常見的java`ofmemoryError`場景'' 故障排除常見的java`ofmemoryError`場景'' Jul 31, 2025 am 09:07 AM

java.lang.OutOfMemoryError:Javaheapspace表示堆內(nèi)存不足,需檢查大對象處理、內(nèi)存泄漏及堆設(shè)置,通過堆轉(zhuǎn)儲分析工具定位并優(yōu)化代碼;2.Metaspace錯誤因類元數(shù)據(jù)過多,常見于動態(tài)類生成或熱部署,應限制MaxMetaspaceSize并優(yōu)化類加載;3.Unabletocreatenewnativethread因系統(tǒng)線程資源耗盡,需檢查線程數(shù)限制、使用線程池、調(diào)整棧大??;4.GCoverheadlimitexceeded指GC頻繁但回收少,應分析GC日志,優(yōu)化

如何使用Java的日歷? 如何使用Java的日歷? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

Java開發(fā)人員的高級春季數(shù)據(jù)JPA Java開發(fā)人員的高級春季數(shù)據(jù)JPA Jul 31, 2025 am 07:54 AM

掌握AdvancedSpringDataJPA的核心在于根據(jù)場景選擇合適的數(shù)據(jù)訪問方式,并確保性能與可維護性。1.自定義查詢中,@Query支持JPQL和原生SQL,適用于復雜關(guān)聯(lián)與聚合操作,返回結(jié)果建議通過DTO或接口投影(Projection)進行類型安全映射,避免使用Object[]帶來的維護難題。2.分頁操作需結(jié)合Pageable實現(xiàn),但要警惕N 1查詢問題,可通過JOINFETCH預加載關(guān)聯(lián)數(shù)據(jù)或使用投影減少實體加載,從而提升性能。3.對于多條件動態(tài)查詢,應使用JpaSpecifica

See all articles