日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Springcloud整理

發(fā)布時(shí)間:2023/12/10 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springcloud整理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Springcloud

答題技巧:

總:當(dāng)前問(wèn)題回答的是那些具體的點(diǎn)

分:以1,2,3,4,5的方式分細(xì)節(jié)取描述相關(guān)的知識(shí)點(diǎn),如果有哪些點(diǎn)不清楚,直接忽略過(guò)去

突出一些技術(shù)名詞(核心概念,接口,類,關(guān)鍵方法)

避重就輕:沒(méi)有重點(diǎn)

一個(gè)問(wèn)題能占用面試官多少時(shí)間?問(wèn)的越多可能露餡越多

當(dāng)面試官問(wèn)到一個(gè)你熟悉的點(diǎn)的時(shí)候,一定要盡量拖時(shí)間

1.Spring IOC的理解,原理與實(shí)現(xiàn)?

總:

控制反轉(zhuǎn):理論思想,原來(lái)的對(duì)象是由使用者來(lái)進(jìn)行控制,有了spring之后,可以把整個(gè)對(duì)象交給spring來(lái)幫我們進(jìn)行管理

DI:依賴注入,把對(duì)應(yīng)的屬性的值注入到具體的對(duì)象中,@Autowired,populateBean完成屬性值的注入

容器:存儲(chǔ)對(duì)象,使用map結(jié)構(gòu)來(lái)存儲(chǔ),在spring中一般存在三級(jí)緩存,singletonObjects存放完整的bean對(duì)象,

整個(gè)bean的生命周期,從創(chuàng)建到使用到銷毀的過(guò)程全部都是由容器來(lái)管理(bean的生命周期)

分:

1、一般聊ioc容器的時(shí)候要涉及到容器的創(chuàng)建過(guò)程(beanFactory,DefaultListableBeanFactory),向bean工廠中設(shè)置一些參數(shù)(BeanPostProcessor,Aware接口的子類)等等屬性

2、加載解析bean對(duì)象,準(zhǔn)備要?jiǎng)?chuàng)建的bean對(duì)象的定義對(duì)象beanDefinition,(xml或者注解的解析過(guò)程)

3、beanFactoryPostProcessor的處理,此處是擴(kuò)展點(diǎn),PlaceHolderConfigurSupport,ConfigurationClassPostProcessor

4、BeanPostProcessor的注冊(cè)功能,方便后續(xù)對(duì)bean對(duì)象完成具體的擴(kuò)展功能

5、通過(guò)反射的方式講BeanDefinition對(duì)象實(shí)例化成具體的bean對(duì)象,

6、bean對(duì)象的初始化過(guò)程(填充屬性,調(diào)用aware子類的方法,調(diào)用BeanPostProcessor前置處理方法,調(diào)用init-mehtod方法,調(diào)用BeanPostProcessor的后置處理方法)

7、生成完整的bean對(duì)象,通過(guò)getBean方法可以直接獲取

8、銷毀過(guò)程

面試官,這是我對(duì)ioc的整體理解,包含了一些詳細(xì)的處理過(guò)程,您看一下有什么問(wèn)題,可以指點(diǎn)我一下(允許你把整個(gè)流程說(shuō)完)

您由什么想問(wèn)的?

老師,我沒(méi)看過(guò)源碼怎么辦?

具體的細(xì)節(jié)我記不太清了,但是spring中的bean都是通過(guò)反射的方式生成的,同時(shí)其中包含了很多的擴(kuò)展點(diǎn),比如最常用的對(duì)BeanFactory的擴(kuò)展,對(duì)bean的擴(kuò)展(對(duì)占位符的處理),我們?cè)诠緦?duì)這方面的使用是比較多的,除此之外,ioc中最核心的也就是填充具體bean的屬性,和生命周期(背一下)。

2.談一下spring IOC的底層實(shí)現(xiàn)

底層實(shí)現(xiàn):工作原理,過(guò)程,數(shù)據(jù)結(jié)構(gòu),流程,設(shè)計(jì)模式,設(shè)計(jì)思想

你對(duì)他的理解和你了解過(guò)的實(shí)現(xiàn)過(guò)程

反射,工廠,設(shè)計(jì)模式(會(huì)的說(shuō),不會(huì)的不說(shuō)),關(guān)鍵的幾個(gè)方法

createBeanFactory,getBean,doGetBean,createBean,doCreateBean,createBeanInstance(getDeclaredConstructor,newinstance),populateBean,initializingBean

1、先通過(guò)createBeanFactory創(chuàng)建出一個(gè)Bean工廠(DefaultListableBeanFactory)

2、開始循環(huán)創(chuàng)建對(duì)象,因?yàn)槿萜髦械腷ean默認(rèn)都是單例的,所以優(yōu)先通過(guò)getBean,doGetBean從容器中查找,找不到的話,

3、通過(guò)createBean,doCreateBean方法,以反射的方式創(chuàng)建對(duì)象,一般情況下使用的是無(wú)參的構(gòu)造方法(getDeclaredConstructor,newInstance)

4、進(jìn)行對(duì)象的屬性填充populateBean

5、進(jìn)行其他的初始化操作(initializingBean)

3.描述一下bean的生命周期 ?

背圖:記住圖中的流程

在表述的時(shí)候不要只說(shuō)圖中有的關(guān)鍵點(diǎn),要學(xué)會(huì)擴(kuò)展描述

1、實(shí)例化bean:反射的方式生成對(duì)象

2、填充bean的屬性:populateBean(),循環(huán)依賴的問(wèn)題(三級(jí)緩存)

3、調(diào)用aware接口相關(guān)的方法:invokeAwareMethod(完成BeanName,BeanFactory,BeanClassLoader對(duì)象的屬性設(shè)置)

4、調(diào)用BeanPostProcessor中的前置處理方法:使用比較多的有(ApplicationContextPostProcessor,設(shè)置ApplicationContext,Environment,ResourceLoader,EmbeddValueResolver等對(duì)象)

5、調(diào)用initmethod方法:invokeInitmethod(),判斷是否實(shí)現(xiàn)了initializingBean接口,如果有,調(diào)用afterPropertiesSet方法,沒(méi)有就不調(diào)用

6、調(diào)用BeanPostProcessor的后置處理方法:spring的aop就是在此處實(shí)現(xiàn)的,AbstractAutoProxyCreator

注冊(cè)Destuction相關(guān)的回調(diào)接口:鉤子函數(shù)

7、獲取到完整的對(duì)象,可以通過(guò)getBean的方式來(lái)進(jìn)行對(duì)象的獲取

8、銷毀流程,1;判斷是否實(shí)現(xiàn)了DispoableBean接口,2,調(diào)用destroyMethod方法

4.Spring 是如何解決循環(huán)依賴的問(wèn)題的?

三級(jí)緩存,提前暴露對(duì)象,aop

總:什么是循環(huán)依賴問(wèn)題,A依賴B,B依賴A

分:先說(shuō)明bean的創(chuàng)建過(guò)程:實(shí)例化,初始化(填充屬性)

1、先創(chuàng)建A對(duì)象,實(shí)例化A對(duì)象,此時(shí)A對(duì)象中的b屬性為空,填充屬性b

2、從容器中查找B對(duì)象,如果找到了,直接賦值不存在循環(huán)依賴問(wèn)題(不通),找不到直接創(chuàng)建B對(duì)象

3、實(shí)例化B對(duì)象,此時(shí)B對(duì)象中的a屬性為空,填充屬性a

4、從容器中查找A對(duì)象,找不到,直接創(chuàng)建

形成閉環(huán)的原因

此時(shí),如果仔細(xì)琢磨的話,會(huì)發(fā)現(xiàn)A對(duì)象是存在的,只不過(guò)此時(shí)的A對(duì)象不是一個(gè)完整的狀態(tài),只完成了實(shí)例化但是未完成初始化,如果在程序調(diào)用過(guò)程中,擁有了某個(gè)對(duì)象的引用,能否在后期給他完成賦值操作,可以優(yōu)先把非完整狀態(tài)的對(duì)象優(yōu)先賦值,等待后續(xù)操作來(lái)完成賦值,相當(dāng)于提前暴露了某個(gè)不完整對(duì)象的引用,所以解決問(wèn)題的核心在于實(shí)例化和初始化分開操作,這也是解決循環(huán)依賴問(wèn)題的關(guān)鍵,

當(dāng)所有的對(duì)象都完成實(shí)例化和初始化操作之后,還要把完整對(duì)象放到容器中,此時(shí)在容器中存在對(duì)象的幾個(gè)狀態(tài),完成實(shí)例化=但未完成初始化,完整狀態(tài),因?yàn)槎荚谌萜髦?#xff0c;所以要使用不同的map結(jié)構(gòu)來(lái)進(jìn)行存儲(chǔ),此時(shí)就有了一級(jí)緩存和二級(jí)緩存,如果一級(jí)緩存中有了,那么二級(jí)緩存中就不會(huì)存在同名的對(duì)象,因?yàn)樗麄兊牟檎翼樞蚴?,2,3這樣的方式來(lái)查找的。一級(jí)緩存中放的是完整對(duì)象,二級(jí)緩存中放的是非完整對(duì)象

為什么需要三級(jí)緩存?三級(jí)緩存的value類型是ObjectFactory,是一個(gè)函數(shù)式接口,存在的意義是保證在整個(gè)容器的運(yùn)行過(guò)程中同名的bean對(duì)象只能有一個(gè)。

如果一個(gè)對(duì)象需要被代理,或者說(shuō)需要生成代理對(duì)象,那么要不要優(yōu)先生成一個(gè)普通對(duì)象?要

普通對(duì)象和代理對(duì)象是不能同時(shí)出現(xiàn)在容器中的,因此當(dāng)一個(gè)對(duì)象需要被代理的時(shí)候,就要使用代理對(duì)象覆蓋掉之前的普通對(duì)象,在實(shí)際的調(diào)用過(guò)程中,是沒(méi)有辦法確定什么時(shí)候?qū)ο蟊皇褂?#xff0c;所以就要求當(dāng)某個(gè)對(duì)象被調(diào)用的時(shí)候,優(yōu)先判斷此對(duì)象是否需要被代理,類似于一種回調(diào)機(jī)制的實(shí)現(xiàn),因此傳入lambda表達(dá)式的時(shí)候,可以通過(guò)lambda表達(dá)式來(lái)執(zhí)行對(duì)象的覆蓋過(guò)程,getEarlyBeanReference()

因此,所有的bean對(duì)象在創(chuàng)建的時(shí)候都要優(yōu)先放到三級(jí)緩存中,在后續(xù)的使用過(guò)程中,如果需要被代理則返回代理對(duì)象,如果不需要被代理,則直接返回普通對(duì)象

4.1緩存的放置時(shí)間和刪除時(shí)間

三級(jí)緩存:createBeanInstance之后:addSingletonFactory

二級(jí)緩存:第一次從三級(jí)緩存確定對(duì)象是代理對(duì)象還是普通對(duì)象的時(shí)候,同時(shí)刪除三級(jí)緩存 getSingleton

一級(jí)緩存:生成完整對(duì)象之后放到一級(jí)緩存,刪除二三級(jí)緩存:addSingleton

5.Bean Factory與FactoryBean有什么區(qū)別?

相同點(diǎn):都是用來(lái)創(chuàng)建bean對(duì)象的

不同點(diǎn):使用BeanFactory創(chuàng)建對(duì)象的時(shí)候,必須要遵循嚴(yán)格的生命周期流程,太復(fù)雜了,,如果想要簡(jiǎn)單的自定義某個(gè)對(duì)象的創(chuàng)建,同時(shí)創(chuàng)建完成的對(duì)象想交給spring來(lái)管理,那么就需要實(shí)現(xiàn)FactroyBean接口了

isSingleton:是否是單例對(duì)象

getObjectType:獲取返回對(duì)象的類型

getObject:自定義創(chuàng)建對(duì)象的過(guò)程(new,反射,動(dòng)態(tài)代理)

6.Spring中用到的設(shè)計(jì)模式?

單例模式:bean默認(rèn)都是單例的

原型模式:指定作用域?yàn)閜rototype

工廠模式:BeanFactory

模板方法:postProcessBeanFactory,onRefresh,initPropertyValue

策略模式:XmlBeanDefinitionReader,PropertiesBeanDefinitionReader

觀察者模式:listener,event,multicast

適配器模式:Adapter

裝飾者模式:BeanWrapper

責(zé)任鏈模式:使用aop的時(shí)候會(huì)先生成一個(gè)攔截器鏈

代理模式:動(dòng)態(tài)代理

委托者模式:delegate

。。。。。。。。。

7.Spring的AOP的底層實(shí)現(xiàn)原理?

動(dòng)態(tài)代理

aop是ioc的一個(gè)擴(kuò)展功能,先有的ioc,再有的aop,只是在ioc的整個(gè)流程中新增的一個(gè)擴(kuò)展點(diǎn)而已:BeanPostProcessor

總:aop概念,應(yīng)用場(chǎng)景,動(dòng)態(tài)代理

分:

bean的創(chuàng)建過(guò)程中有一個(gè)步驟可以對(duì)bean進(jìn)行擴(kuò)展實(shí)現(xiàn),aop本身就是一個(gè)擴(kuò)展功能,所以在BeanPostProcessor的后置處理方法中來(lái)進(jìn)行實(shí)現(xiàn)

1、代理對(duì)象的創(chuàng)建過(guò)程(advice,切面,切點(diǎn))

2、通過(guò)jdk或者cglib的方式來(lái)生成代理對(duì)象

3、在執(zhí)行方法調(diào)用的時(shí)候,會(huì)調(diào)用到生成的字節(jié)碼文件中,直接回找到DynamicAdvisoredInterceptor類中的intercept方法,從此方法開始執(zhí)行

4、根據(jù)之前定義好的通知來(lái)生成攔截器鏈

5、從攔截器鏈中依次獲取每一個(gè)通知開始進(jìn)行執(zhí)行,在執(zhí)行過(guò)程中,為了方便找到下一個(gè)通知是哪個(gè),會(huì)有一個(gè)CglibMethodInvocation的對(duì)象,找的時(shí)候是從-1的位置一次開始查找并且執(zhí)行的。

8.Spring的事務(wù)是如何回滾的?

spring的事務(wù)管理是如何實(shí)現(xiàn)的?

總:spring的事務(wù)是由aop來(lái)實(shí)現(xiàn)的,首先要生成具體的代理對(duì)象,然后按照aop的整套流程來(lái)執(zhí)行具體的操作邏輯,正常情況下要通過(guò)通知來(lái)完成核心功能,但是事務(wù)不是通過(guò)通知來(lái)實(shí)現(xiàn)的,而是通過(guò)一個(gè)TransactionInterceptor來(lái)實(shí)現(xiàn)的,然后調(diào)用invoke來(lái)實(shí)現(xiàn)具體的邏輯

分:1、先做準(zhǔn)備工作,解析各個(gè)方法上事務(wù)相關(guān)的屬性,根據(jù)具體的屬性來(lái)判斷是否開始新事務(wù)

2、當(dāng)需要開啟的時(shí)候,獲取數(shù)據(jù)庫(kù)連接,關(guān)閉自動(dòng)提交功能,開起事務(wù)

3、執(zhí)行具體的sql邏輯操作

4、在操作過(guò)程中,如果執(zhí)行失敗了,那么會(huì)通過(guò)completeTransactionAfterThrowing看來(lái)完成事務(wù)的回滾操作,回滾的具體邏輯是通過(guò)doRollBack方法來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)的時(shí)候也是要先獲取連接對(duì)象,通過(guò)連接對(duì)象來(lái)回滾

5、如果執(zhí)行過(guò)程中,沒(méi)有任何意外情況的發(fā)生,那么通過(guò)commitTransactionAfterReturning來(lái)完成事務(wù)的提交操作,提交的具體邏輯是通過(guò)doCommit方法來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)的時(shí)候也是要獲取連接,通過(guò)連接對(duì)象來(lái)提交

6、當(dāng)事務(wù)執(zhí)行完畢之后需要清除相關(guān)的事務(wù)信息cleanupTransactionInfo

如果想要聊的更加細(xì)致的話,需要知道TransactionInfo,TransactionStatus,

9.談一下spring事務(wù)傳播?

傳播特性有幾種?7種

Required,Requires_new,nested,Support,Not_Support,Never,Mandatory

某一個(gè)事務(wù)嵌套另一個(gè)事務(wù)的時(shí)候怎么辦?

A方法調(diào)用B方法,AB方法都有事務(wù),并且傳播特性不同,那么A如果有異常,B怎么辦,B如果有異常,A怎么辦?


總:事務(wù)的傳播特性指的是不同方法的嵌套調(diào)用過(guò)程中,事務(wù)應(yīng)該如何進(jìn)行處理,是用同一個(gè)事務(wù)還是不同的事務(wù),當(dāng)出現(xiàn)異常的時(shí)候會(huì)回滾還是提交,兩個(gè)方法之間的相關(guān)影響,在日常工作中,使用比較多的是required,Requires_new,nested

分:1、先說(shuō)事務(wù)的不同分類,可以分為三類:支持當(dāng)前事務(wù),不支持當(dāng)前事務(wù),嵌套事務(wù)

2、如果外層方法是required,內(nèi)層方法是,required,requires_new,nested

3、如果外層方法是requires_new,內(nèi)層方法是,required,requires_new,nested

4、如果外層方法是nested,內(nèi)層方法是,required,requires_new,nested


找工作:

1、面試之前一定要調(diào)整好心態(tài),不管你會(huì)多少東西,干就完了,出去面試就一個(gè)心態(tài)好,讓自己超常發(fā)揮

2、得失心不要太重,全中國(guó)企業(yè)很多,好公司也有很多,沒(méi)必要在一棵樹上吊死,你可以有心儀的公司,留到最后,等你準(zhǔn)備充分再去

3、找工作永遠(yuǎn)不可能準(zhǔn)備好,很多同學(xué)慫,心態(tài)不好,不敢出去面試,我要準(zhǔn)備,先按照你的技術(shù)儲(chǔ)備取嘗試一些公司(我就是來(lái)試水的)面試回來(lái)之后做總結(jié),做好準(zhǔn)備,不斷總結(jié),復(fù)盤,這樣才能成長(zhǎng)

4、希望大家保持好信息互通,樂(lè)于分享

總結(jié)

以上是生活随笔為你收集整理的Springcloud整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。