springboot和springcloud相關面試題

Spring是什麼?

Spring是爲了解決企業級應用開發的複雜性而創建的,簡化開發。

Spring如何簡化開發的?

爲了降低Java開發的複雜性,Spring採用了以下4種關鍵策略:
1、基於POJO的輕量級和最小侵入性編程,所有東西都是bean;
2、通過IOC,依賴注入(DI)和麪向接口實現松耦合;
3、基於切面(AOP)和慣例進行聲明式編程;
4、通過切面和模版減少樣式代碼,RedisTemplate,xxxTemplate;

 

什麼是springboot

        用來簡化spring應用的初始搭建以及開發過程 使用特定的方式來進行配置(properties或yml文件) 
        創建獨立的spring引用程序 main方法運行
        嵌入的Tomcat 無需部署war文件
        簡化maven配置
        自動配置spring添加對應功能starter自動化配置

                

springboot常用的starter有哪些

        spring-boot-starter-web 嵌入tomcat和web開發需要servlet與jsp支持
        spring-boot-starter-data-jpa 數據庫支持
        spring-boot-starter-data-redis redis數據庫支持
        spring-boot-starter-data-solr solr支持
        mybatis-spring-boot-starter 第三方的mybatis集成starter

 

springboot自動配置的原理

        在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration

        會自動去maven中讀取每個starter中的spring.factories文件  該文件裏配置了所有需要被創建spring容器中的bean

 

springboot讀取配置文件的方式

        springboot默認讀取配置文件爲application.properties或者是application.yml

        

springboot集成mybatis的過程

        添加mybatis的starter maven依賴

                <dependency>

                        <groupId>org.mybatis.spring.boot</groupId>

                        <artifactId>mybatis-spring-boot-starter</artifactId>

                        <version>1.2.0</version>

                </dependency>

        在mybatis的接口中 添加@Mapper註解

        在application.yml配置數據源信息

        

springboot如何添加【修改代碼】自動重啓功能

        添加開發者工具集=====spring-boot-devtools

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

什麼是微服務

        以前的模式是 所有的代碼在同一個工程中 部署在同一個服務器中 同一個項目的不同模塊不同功能互相搶佔資源

        微服務 將工程根據不同的業務規則拆分成微服務 微服務部署在不同的機器上 服務之間進行相互調用

        Java微服務的框架有 dubbo(只能用來做微服務),spring cloud(提供了服務的發現,斷路器等)

        

springcloud如何實現服務的註冊和發現

        服務在發佈時 指定對應的服務名(服務名包括了IP地址和端口) 將服務註冊到註冊中心(eureka或者zookeeper)

        這一過程是springcloud自動實現 只需要在main方法添加@EnableDisscoveryClient  同一個服務修改端口就可以啓動多個實例

        調用方法:傳遞服務名稱通過註冊中心獲取所有的可用實例 通過負載均衡策略調用(ribbon和feign)對應的服務

 

ribbon和feign區別

        Ribbon添加maven依賴 spring-starter-ribbon 使用@RibbonClient(value="服務名稱") 使用RestTemplate調用遠程服務對應的方法

        feign添加maven依賴 spring-starter-feign 服務提供方提供對外接口 調用方使用 在接口上使用@FeignClient("指定服務名")

Ribbon和Feign的區別:

        Ribbon和Feign都是用於調用其他服務的,不過方式不同。

        1.啓動類使用的註解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

        2.服務的指定位置不同,Ribbon是在@RibbonClient註解上聲明,Feign則是在定義抽象方法的接口中使用@FeignClient聲明。

        3.調用方式不同,Ribbon需要自己構建http請求,模擬http請求然後使用RestTemplate發送給其他服務,步驟相當繁瑣。

        Feign則是在Ribbon的基礎上進行了一次改進,採用接口的方式,將需要調用的其他服務的方法定義成抽象方法即可,

        不需要自己構建http請求。不過要注意的是抽象方法的註解、方法簽名要和提供服務的方法完全一致。

        

springcloud斷路器的作用

        當一個服務調用另一個服務由於網絡原因或者自身原因出現問題時 調用者就會等待被調用者的響應 當更多的服務請求到這些資源時

                導致更多的請求等待 這樣就會發生連鎖效應(雪崩效應) 斷路器就是解決這一問題

                斷路器有完全打開狀態

                        一定時間內 達到一定的次數無法調用 並且多次檢測沒有恢復的跡象 斷路器完全打開,那麼下次請求就不會請求到該服務

                半開

                        短時間內 有恢復跡象 斷路器會將部分請求發給該服務 當能正常調用時 斷路器關閉

                關閉

                        當服務一直處於正常狀態 能正常調用 斷路器關閉
 

最近因爲要面試,所以看到別人覺得比較有用的面試題就記錄下來了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章