1.Spring用到的動(dòng)態(tài)代理分為java動(dòng)態(tài)代理和CGILB動(dòng)態(tài)代理,相同點(diǎn)是都是通過反射機(jī)制創(chuàng)建運(yùn)行時(shí)被代理類,不同是后者不依賴接口,而是創(chuàng)建被代理類的子類。
2.java動(dòng)態(tài)代理的實(shí)現(xiàn)步驟:通過實(shí)現(xiàn)InvocationHandler接口創(chuàng)建自己的調(diào)用處理器;通過Proxy指定類加載器/接口/處理器來創(chuàng)建代理類;通過反射機(jī)制獲得動(dòng)態(tài)代理類的構(gòu)造函數(shù),其唯一參數(shù)類型是調(diào)用處理器接口類型;通過構(gòu)造函數(shù)創(chuàng)建動(dòng)態(tài)代理類實(shí)例,構(gòu)造時(shí)調(diào)用處理器對象作為參數(shù)被傳入。
3.MyBatis主要配置:
properties:驅(qū)動(dòng)類/數(shù)據(jù)庫地址/用戶民密碼
settings:Mybatis底層設(shè)置配置
typeAliases:別名,可繼承BaseTypeHandler自行實(shí)現(xiàn)
environment:
? ? -- transactionManager :實(shí)現(xiàn)TransactionFactory可自行實(shí)現(xiàn)
? ? -- dataSource:數(shù)據(jù)源環(huán)境 POOLED/UNPOOLED/JNDI
4.AOP的描述:
使用動(dòng)態(tài)代理技術(shù),將代碼織入對應(yīng)的流程環(huán)節(jié)中,典型的場景就是數(shù)據(jù)庫事務(wù)物,開發(fā)者不需要關(guān)心異?;貪L和資源關(guān)閉的具體邏輯。
利用@Aspect @Pointcut等注解即可完成AOP開發(fā)。常見功能如埋點(diǎn)和行為統(tǒng)計(jì)。
5.@Transactional失效:
@Transactional底層實(shí)現(xiàn)是AOP技術(shù),因此對于靜態(tài)和非public方法是失效的。
另外,如果事務(wù)方法調(diào)用本類中方法,就不會(huì)產(chǎn)生代理對象,同樣會(huì)使AOP失效。
6.SpringMVC的請求處理流程
7.微服務(wù)架構(gòu)的優(yōu)點(diǎn):
~????易于開發(fā)和維護(hù),一個(gè)服務(wù)關(guān)注一個(gè)功能,業(yè)務(wù)清晰,代碼量少;
~? ? 單個(gè)微服務(wù)啟動(dòng)快;
~? ? 局部修改容易部署,適合快速迭代;
~? ? 技術(shù)棧不受限;
~? ? 便于按需橫向伸縮。
微服務(wù)的缺點(diǎn):
~? ? 運(yùn)維要求高;
~? ? 復(fù)雜性高,系統(tǒng)容錯(cuò)、網(wǎng)絡(luò)延遲、分布式事務(wù)都會(huì)帶來巨大挑戰(zhàn);
~? ? 服務(wù)間通信有性能損耗;
~? ? 重復(fù)勞動(dòng)。
8.微服務(wù)的設(shè)計(jì)原則:單一職責(zé)、服務(wù)自治、輕量級通訊、服務(wù)粒度
9.Eureka:服務(wù)注冊發(fā)現(xiàn)及心跳監(jiān)控;
Ribbon:負(fù)載均衡;
Feign:聲明式Restful調(diào)用(@FeignClient);
Hystrix:實(shí)現(xiàn)微服務(wù)熔斷和超時(shí),結(jié)合Turbine可以做到集群監(jiān)控;
Zuul:微服務(wù)網(wǎng)關(guān);與Nginx配合使用保證高可用性,主要功能:身份認(rèn)證與安全、審查與監(jiān)控、動(dòng)態(tài)路由、壓力測試、負(fù)載分配、靜態(tài)響應(yīng)處理、多區(qū)域彈性。