springboot相關面試題


 

springboot和springmvc的區別

spring boot 內嵌tomcat,Jetty和Undertow容器,可以直接運行起來,不在再做部署;

spring boot 自動配置,減少了xml文件的大量配置;降低了項目搭建的復雜度

Spring MVC是基於 Servlet 的一個 MVC 框架 主要解決 WEB 開發的問題,因為 Spring 的配置非常復雜,各種XML、 JavaConfig、hin處理起來比較繁瑣。於是為了簡化開發者的使用,從而創造性地推出了Spring boot,約定優於配置,簡化了spring的配置流程。

Spring 是一個“引擎”;

Spring MVC 是基於Spring的一個 MVC 框架 ;

Spring Boot 是基於Spring4的條件注冊的一套快速開發整合包。

springboot熱部署的兩種方式

SpringBoot 1.3后才擁有SpringBoot devtools熱部署

  ①:spring-boot-devtools   ②:Spring Loaded

  方式一:

    在項目的pom文件中添加依賴:

1 <!--熱部署jar-->
2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-devtools</artifactId> 5 </dependency>

    然后:使用 shift+ctrl+alt+"/" (IDEA中的快捷鍵) 選擇"Registry" 然后勾選 compiler.automake.allow.when.app.running

  方式二:

    在項目中添加如下代碼

復制代碼
    <build>
        <plugins>
            <plugin>
                <!-- springBoot編譯插件-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <!-- spring熱部署 -->
                    <!-- 該依賴在此處下載不下來,可以放置在build標簽外部下載完成后再粘貼進plugin中 -->
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.6.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>            
復制代碼

    添加完畢后需要使用mvn指令運行:

    首先找到IDEA中的Edit configurations ,然后進行如下操作:(點擊左上角的"+",然后選擇maven將出現右側面板,在紅色划線部位輸入如圖所示指令,你可以為該指令命名(此處命名為MvnSpringBootRun))

    點擊保存將會在IDEA項目運行部位出現,點擊綠色箭頭運行即可

springboot配置文件

spring boot使用一個全局配置文件:主要是以下兩種類型

  application.properties  :例:server.port=9998

  application.yml(YAML)  :例:server:

                  port:8080

配置文件的作用主要是修改spring boot在底層的默認配置

Spring Boot 的核心注解

啟動類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要組合包含了以下 3 個注解:

@SpringBootConfiguration:組合了 @Configuration 注解,實現配置文件的功能。

@EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring組件掃描。
spring boot的starter的執行原理

利用starter實現自動化配置只需要兩個條件——maven依賴、配置文件,這里簡單介紹下starter實現自動化配置的流程。
引入maven實質上就是導入jar包,spring-boot啟動的時候會找到starter jar包中的resources/META-INF/spring.factories文件,根據spring.factories文件中的配置,找到需要自動配置的類

Spring Boot與Spring MVC的區別

      1.Spring Boot是Spring和Spring MVC的整合,而Spring MVC只是Spring的一個模塊,一個輕量級的Web層框架

      2.Spring Boot幾乎可以實現零配置,所有功能使用注解進行開發,運用了'約定大於配置'的思想,簡化了項目開發

         難度,而Spring MVC需要依賴於xml配置進行開發

     3.Spring Boot提供了內置的tomcat,可以打成jar包直接運行,也可以使用外置tomcat

     4.Spring Boot還繼承了許多第三方庫配置,例如,JDBC, Mongo, Redis等,應用這些第三方庫,幾乎可以零配置
springcloud的服務注冊和發現是怎樣的原理

Eureka包含兩個組件:Eureka Server和Eureka Client
Eureka Server提供服務注冊服務
各個節點啟動后,會在EurekaServer中進行注冊,這樣EurekaServer中的服務注冊表中將會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀的看到

EurekaClient是一個Java客戶端,用於簡化Eureka Server的交互,客戶端同時也具備一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。在應用啟動后,將會向Eureka Server發送心跳(默認周期為30秒)。如果Eureka Server在多個心跳周期內沒有接收到某個節點的心跳,EurekaServer將會從服務注冊表中把這個服務節點移除(默認90秒)
Eureka三大角色:

    Eureka Server 提供服務注冊和發現
    Service Provider服務提供方將自身服務注冊到Eureka,從而使服務消費方能夠找到
    Service Consumer服務消費方從Eureka獲取注冊服務列表,從而能夠消費服務

作為服務注冊中心,Eureka 和 Zookeeper對比的優勢:
著名的CAP理論指出,一個分布式系統不可能同時滿足C(一致性)、A(可用性)和P(分區容錯性)。由於分區容錯性P在是分布式系統中必須要保證的,因此我們只能在A和C之間進行權衡。
因此
Zookeeper保證的是CP,
Eureka則是AP

 mybatis中的#和$的區別

#相當於對數據 加上 雙引號,$相當於直接顯示數據

1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那么解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".  
2. $將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時的值為order by user_id,  如果傳入的值是id,則解析成的sql為order by id. 
3. #方式能夠很大程度防止sql注入。  
4.$方式無法防止Sql注入。
5.$方式一般用於傳入數據庫對象,例如傳入表名.  
6.一般能用#的就別用$.
MyBatis排序時使用order by 動態參數時需要注意,用$而不是#
字符串替換
默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性並以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字符串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
這里MyBatis不會修改或轉義字符串。

針對不同的環境下的配置文件有什么區別

dev  produce test

springBoot+druid+mybatis實現數據庫交互

     1. 引入pom依賴

     2. druid啟動配置

     3. 增加啟動類和接口

     4. 增加配置參數

     5. 接口mapper和mapper.xml文件

redis數據類型

字符串 string 數據類型

哈希 hash 數據類型

列表 list 數據類型

集合 set 數據類型

有序集合 zset 數據類型

Redis怎樣淘汰數據

  1. 1、 volatile-lru :從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
  2. 2、 volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
  3. 3、 volatile-random:從已設置過期時間的數據集(server.db[i].expires)中隨機挑選數據淘汰
  4. 4、 allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
  5. 5、 allkeys-random:從數據集(server.db[i].dict)中隨機挑選數據淘汰
6、 no-envivtion(驅逐):禁止驅逐數據

LRU機制:
redis保存了lru計數器server.lrulock,會定時的去更新(redis定時程序severCorn()),每個redis對象都會設置相應的lru值,每次訪問對象的時候,redis都會更新redisObject.lru。
LRU淘汰機制:在數據集中隨機挑選幾個鍵值對,取出其中lru最大的鍵值對淘汰。所以,redis並不能保證淘汰的數據都是最近最少使用的,而是隨機挑選的鍵值對中的。

TTL機制:redis數據集結構中保存了鍵值對過期時間表,即 redisDb.expires。
TTL淘汰機制:在數據集中隨機挑選幾個鍵值對,取出其中最接近過期時間的鍵值對淘汰。所以,redis並不能保證淘汰的數據都是最接近過期時間的,而是隨機挑選的鍵值對中的。

redis在每服務客戶端執行一個命令的時候,會檢測使用的內存是否超額

Redis 是如何存儲的

Redis中是把數據保存到內存中的,但是它也會定期的把數據寫會到硬盤中。

Redis保存數據有兩種方式:

  1. 快照模式(Snapshot)

        它支持兩種快照模式:

    1.       定時快照,即按一定時間將內存中的數據保存到磁盤上。
    2.       定量快照,即數據變化一定次數后將數據保存到磁盤上。

        你也可以結合這兩種方式,比如變化1000次,距離上次保存時間60秒以上才保存數據。.

  2. 寫模式(Append Only File);這種模式下Redis會把所以修改數據的命令(如Update,Set)等保存到一個只能追加的ASAP文件中,當Redis重啟時,它會把這個文件里的命令重新執行一遍

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM