網(wǎng)站建設(shè)記在哪個(gè)科目app優(yōu)化方案
目錄
- 前言
- 1.spring是什么
- 2.spring的設(shè)計(jì)核心是什么
- 3.IOC和AOP面試題
- 4.spring的優(yōu)點(diǎn)和缺點(diǎn)
- 5.spring中bean的作用域
- 6.spring中bean的注入方式
- 7.BeanFactory 和 ApplicationContext有什么區(qū)別?
- 8.循環(huán)依賴(lài)的情況,怎么解決?
- 9.spring中單例Bean是線程安全的嗎?
- 10.spring如何處理線程的并發(fā)問(wèn)題?
- 11.spring中bean的生命周期
- 12.在 Spring中如何注入一個(gè)java集合?
- 13.bean的自動(dòng)裝配
- 14.spring用到了那些設(shè)計(jì)模式
- 14.spring的常用注解
- 15.spring 事務(wù)實(shí)現(xiàn)方式有哪些?
- 16.spring事務(wù)的實(shí)現(xiàn)方式和實(shí)現(xiàn)原理
- 17.說(shuō)一下 spring 的事務(wù)隔離?
前言
java最新面試題(java基礎(chǔ)、集合、多線程、jvm、鎖、算法、CAS、Redis、數(shù)據(jù)庫(kù)、mybatis、spring、springMVC、springBoot、微服務(wù))
1.spring是什么
輕量級(jí)開(kāi)發(fā)框架,為java提供了基礎(chǔ)架構(gòu)支持,簡(jiǎn)化了企業(yè)級(jí)應(yīng)用開(kāi)發(fā),讓開(kāi)發(fā)者只需要關(guān)注業(yè)務(wù)邏輯。
2.spring的設(shè)計(jì)核心是什么
IOC和AOP
3.IOC和AOP面試題
談?wù)勀銓?duì)IOC和AOP的理解
4.spring的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):
①解耦和方便開(kāi)發(fā):spring容器進(jìn)行對(duì)象的創(chuàng)建和管理。
②AOP的支持:面向切面編程,實(shí)現(xiàn)日志和權(quán)限攔截等功能。
③聲明事務(wù)的支持:通過(guò)配置進(jìn)行事務(wù)管理,不需要手動(dòng)編寫(xiě)。
④方便集成各種框架。
⑤方便程序的測(cè)試。
5.spring中bean的作用域
①singleton: 默認(rèn)作用域,單例bean,每個(gè)容器中只有一個(gè)bean實(shí)例。
②prototype: 每次請(qǐng)求都會(huì)為bean創(chuàng)建實(shí)例。
③request: 為每一個(gè)request請(qǐng)求創(chuàng)建一個(gè)實(shí)例,在請(qǐng)求完成以后,bean會(huì)失效,會(huì)被垃圾回收器回收。
④session: 同一個(gè)session會(huì)話共享一個(gè)實(shí)例,不同會(huì)話使用不同實(shí)例。
⑤global-session: 全局作用域,所有實(shí)例共享一個(gè)會(huì)話。
6.spring中bean的注入方式
①構(gòu)造器注入
②Setter注入
③接口注入(靈活性和易用性差,Spring4已經(jīng)廢棄)
7.BeanFactory 和 ApplicationContext有什么區(qū)別?
是spring的核心接口,都可以作為容器,ApplicationContext是BeanFactory的子接口。
BeanFactory: 是spring最底層的接口,包含各種Bean的定義和Bean的管理。
ApplicationContext: 作為BeanFactory的派生,除了有BeanFactory的功能以外,還提供了更多的功能。
8.循環(huán)依賴(lài)的情況,怎么解決?
循環(huán)依賴(lài):A依賴(lài)B,B依賴(lài)C,C依賴(lài)A,形成了閉環(huán)。
①構(gòu)造器的循環(huán)依賴(lài): 這種依賴(lài)spring是處理不了的,直接拋出異常。
②單例模式下的setter循環(huán)依賴(lài): 通過(guò)"三級(jí)緩存"處理循環(huán)依賴(lài),能處理。
③多例模式下的setter循環(huán)依賴(lài): 不能處理,會(huì)一直產(chǎn)生新的Bean,導(dǎo)致OOM。
9.spring中單例Bean是線程安全的嗎?
不是,因?yàn)樗芯€程共享一個(gè)單例Bean,存在資源的競(jìng)爭(zhēng)所以是線程不安全的,實(shí)際上大部分時(shí)間Bean是無(wú)狀態(tài)的,所以說(shuō)在某種程度上來(lái)說(shuō)Bean其實(shí)是安全的。如果是有狀態(tài),那就需要開(kāi)發(fā)人員修改bean的作用域。singleton改為prototype。
有狀態(tài): 有數(shù)據(jù)存儲(chǔ)功能。
無(wú)狀態(tài): 不會(huì)保存數(shù)據(jù)。
10.spring如何處理線程的并發(fā)問(wèn)題?
①把成員變量寫(xiě)在方法內(nèi)。
②使用ThreadLocal,ThreadLocal會(huì)為每一個(gè)線程提供一個(gè)獨(dú)立的變量副本,從而隔離了多個(gè)線程對(duì)數(shù)據(jù)的訪問(wèn)沖突。因?yàn)槊恳粋€(gè)線程都擁有自己的變量副本,從而也就沒(méi)有必要對(duì)該變量進(jìn)行同步了。
③修改bean的作用域,singleton改為prototype。(@Scope(“prototype”))
④使用synchronized修飾。
11.spring中bean的生命周期
正常情況: 當(dāng)bean不在被使用,就會(huì)被回收。
單例模式: spring中bean的生命周期分為:實(shí)例化Bean->Bean屬性填充->初始化Bean->銷(xiāo)毀Bean。
銷(xiāo)毀的時(shí)候,會(huì)先執(zhí)行 DisposableBean.destroy()方法,然后在執(zhí)行 destroy-Method 方法。
多例模式: spring無(wú)法進(jìn)行管理,所以將生命周期交給用戶控制。
12.在 Spring中如何注入一個(gè)java集合?
Spring提供以下幾種集合的配置元素:
想要注入java集合,就是注入集合類(lèi)。
list: 類(lèi)型用于注入一列值,允許有相同的值。
set: 類(lèi)型用于注入一組值,不允許有相同的值。
map: 類(lèi)型用于注入一組鍵值對(duì),鍵和值都可以為任意類(lèi)型。
props: 類(lèi)型用于注入一組鍵值對(duì),鍵和值都只能為String類(lèi)型。
13.bean的自動(dòng)裝配
spring會(huì)在上下文中自動(dòng)尋找,并自動(dòng)給bean裝配屬性。之前屬性需要我們手動(dòng)注入。
14.spring用到了那些設(shè)計(jì)模式
工廠模式: beanFactory就用到了簡(jiǎn)單工廠模式。
單利模式: Bean默認(rèn)為單例模式。
代理模式: AOP用到了JDK的動(dòng)態(tài)代理模式。
模板模式: 減少代碼冗余,Jdbc模板等。
觀察者模式: 定義對(duì)象間的一對(duì)多的關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴(lài)于它的對(duì)象都得到通知并自動(dòng)更新。spring監(jiān)聽(tīng)器的實(shí)現(xiàn)就用了觀察者模式。
14.spring的常用注解
@component(任何層)、@controller(表現(xiàn)層)、@service(邏輯層)、@repository(持久層): 用于實(shí)例化對(duì)象。
@scope: 設(shè)置spring的作用域。
@Bean: 用于將方法返回值對(duì)象放入容器。
@Import: 在一個(gè)配置類(lèi)中導(dǎo)入其它配置類(lèi)的內(nèi)容。
@AutoWired: 按照類(lèi)型匹配注入。
@Qualifier: 和AutoWired聯(lián)合使用,在按照類(lèi)型匹配的基礎(chǔ)上,在按照名稱(chēng)匹配。
@Resource: 按照名稱(chēng)匹配依賴(lài)注入。
@Configuration: 被此注解標(biāo)注的類(lèi),會(huì)被 Spring 認(rèn)為是配置類(lèi)。
@ComponentScan: 用于對(duì)組件(Component)進(jìn)行掃描。
@Transactional: 可以用于類(lèi)和方法上,具有事務(wù)管理的功能
@Value: 將外部的值動(dòng)態(tài)注入到 Bean 中。
? ? ? ?@Value(“${}”):可以獲取配置文件的值。
? ? ? ? @Value(“#{}”):表示SpEl(Spring Expression Language是Spring表達(dá)式語(yǔ)言,可以在運(yùn)行時(shí)查詢和操作數(shù)據(jù)。)表達(dá)式通常用來(lái)獲取 bean 的屬性,或者調(diào)用 bean 的某個(gè)方法。
15.spring 事務(wù)實(shí)現(xiàn)方式有哪些?
編程式: beginTransaction()、commit()、rollback()等事務(wù)管理相關(guān)的方法,靈活度高,但是維護(hù)性差。
聲明式: 利用注解或者xml配置,將業(yè)務(wù)和事務(wù)分離出來(lái)。
16.spring事務(wù)的實(shí)現(xiàn)方式和實(shí)現(xiàn)原理
spring事務(wù)就是對(duì)數(shù)據(jù)庫(kù)事務(wù)的支持,沒(méi)有數(shù)據(jù)庫(kù)的事務(wù)支持,spring是無(wú)法提供事務(wù)
功能的。
17.說(shuō)一下 spring 的事務(wù)隔離?
五大隔離級(jí)別。
ISOLATION_DEFAULT: 默認(rèn)值,使用數(shù)據(jù)庫(kù)的隔離級(jí)別。
ISOLATION_READ_UNCOMMITTED: 讀未提交。
ISOLATION_READ_COMMITTED: 讀已提交。
ISOLATION_REPEATABLE_READ: 可重復(fù)讀。
ISOLATION_SERIALIZABLE: 序列化。