亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot相關(guān)面試題匯總詳解

 更新時間:2019年08月08日 14:51:42   作者:落幕情殤  
這篇文章主要介紹了springboot相關(guān)面試題匯總詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

springboot和springmvc的區(qū)別

spring boot 內(nèi)嵌tomcat,Jetty和Undertow容器,可以直接運(yùn)行起來,不在再做部署;

spring boot 自動配置,減少了xml文件的大量配置;降低了項(xiàng)目搭建的復(fù)雜度

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

Spring 是一個“引擎”;

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

Spring Boot 是基于Spring4的條件注冊的一套快速開發(fā)整合包。

springboot熱部署的兩種方式

SpringBoot 1.3后才擁有SpringBoot devtools熱部署

①:spring-boot-devtools ②:Spring Loaded

方式一:

在項(xiàng)目的pom文件中添加依賴:

 <!--熱部署jar-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 </dependency>

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

方式二:

在項(xiàng)目中添加如下代碼

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

添加完畢后需要使用mvn指令運(yùn)行:

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

點(diǎn)擊保存將會在IDEA項(xiàng)目運(yùn)行部位出現(xiàn),點(diǎn)擊綠色箭頭運(yùn)行即可

springboot配置文件

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

application.properties :例:server.port=9998

application.yml(YAML) :例:server:

               port:8080

配置文件的作用主要是修改spring boot在底層的默認(rèn)配置

Spring Boot 的核心注解

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

@SpringBootConfiguration:組合了 @Configuration 注解,實(shí)現(xiàn)配置文件的功能。

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

@ComponentScan:Spring組件掃描。

spring boot的starter的執(zhí)行原理

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

Spring Boot與Spring MVC的區(qū)別

  1. Spring Boot是Spring和Spring MVC的整合,而Spring MVC只是Spring的一個模塊,一個輕量級的Web層框架
  2. Spring Boot幾乎可以實(shí)現(xiàn)零配置,所有功能使用注解進(jìn)行開發(fā),運(yùn)用了'約定大于配置'的思想,簡化了項(xiàng)目開發(fā)
  3. 難度,而Spring MVC需要依賴于xml配置進(jìn)行開發(fā)
  4. Spring Boot提供了內(nèi)置的tomcat,可以打成jar包直接運(yùn)行,也可以使用外置tomcat
  5. Spring Boot還繼承了許多第三方庫配置,例如,JDBC, Mongo, Redis等,應(yīng)用這些第三方庫,幾乎可以零配置

springcloud的服務(wù)注冊和發(fā)現(xiàn)是怎樣的原理

Eureka包含兩個組件:Eureka Server和Eureka Client

Eureka Server提供服務(wù)注冊服務(wù)

各個節(jié)點(diǎn)啟動后,會在EurekaServer中進(jìn)行注冊,這樣EurekaServer中的服務(wù)注冊表中將會存儲所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到

EurekaClient是一個Java客戶端,用于簡化Eureka Server的交互,客戶端同時也具備一個內(nèi)置的、使用輪詢(round-robin)負(fù)載算法的負(fù)載均衡器。在應(yīng)用啟動后,將會向Eureka Server發(fā)送心跳(默認(rèn)周期為30秒)。如果Eureka Server在多個心跳周期內(nèi)沒有接收到某個節(jié)點(diǎn)的心跳,EurekaServer將會從服務(wù)注冊表中把這個服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)

Eureka三大角色:

  • Eureka Server 提供服務(wù)注冊和發(fā)現(xiàn)
  • Service Provider服務(wù)提供方將自身服務(wù)注冊到Eureka,從而使服務(wù)消費(fèi)方能夠找到
  • Service Consumer服務(wù)消費(fèi)方從Eureka獲取注冊服務(wù)列表,從而能夠消費(fèi)服務(wù)

作為服務(wù)注冊中心,Eureka 和 Zookeeper對比的優(yōu)勢:

著名的CAP理論指出,一個分布式系統(tǒng)不可能同時滿足C(一致性)、A(可用性)和P(分區(qū)容錯性)。由于分區(qū)容錯性P在是分布式系統(tǒng)中必須要保證的,因此我們只能在A和C之間進(jìn)行權(quán)衡。

因此

  • Zookeeper保證的是CP,
  • Eureka則是AP

mybatis中的#和$的區(qū)別

#相當(dāng)于對數(shù)據(jù) 加上 雙引號,$相當(dāng)于直接顯示數(shù)據(jù)

  • #將傳入的數(shù)據(jù)都當(dāng)成一個字符串,會對自動傳入的數(shù)據(jù)加一個雙引號。如:order by #user_id#,如果傳入的值是111,那么解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".  
  • $將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id. 
  • 3#方式能夠很大程度防止sql注入?! ?/li>
  • $方式無法防止Sql注入。
  • $方式一般用于傳入數(shù)據(jù)庫對象,例如傳入表名.  
  • 一般能用#的就別用$.

MyBatis排序時使用order by 動態(tài)參數(shù)時需要注意,用$而不是#

字符串替換

默認(rèn)情況下,使用#{}格式的語法會導(dǎo)致MyBatis創(chuàng)建預(yù)處理語句屬性并以它為背景設(shè)置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字符串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}

這里MyBatis不會修改或轉(zhuǎn)義字符串。

Redis怎樣淘汰數(shù)據(jù)

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

LRU機(jī)制:

redis保存了lru計(jì)數(shù)器server.lrulock,會定時的去更新(redis定時程序severCorn()),每個redis對象都會設(shè)置相應(yīng)的lru值,每次訪問對象的時候,redis都會更新redisObject.lru。

LRU淘汰機(jī)制:在數(shù)據(jù)集中隨機(jī)挑選幾個鍵值對,取出其中l(wèi)ru最大的鍵值對淘汰。所以,redis并不能保證淘汰的數(shù)據(jù)都是最近最少使用的,而是隨機(jī)挑選的鍵值對中的。

TTL機(jī)制:

redis數(shù)據(jù)集結(jié)構(gòu)中保存了鍵值對過期時間表,即 redisDb.expires。

TTL淘汰機(jī)制:在數(shù)據(jù)集中隨機(jī)挑選幾個鍵值對,取出其中最接近過期時間的鍵值對淘汰。所以,redis并不能保證淘汰的數(shù)據(jù)都是最接近過期時間的,而是隨機(jī)挑選的鍵值對中的。

redis在每服務(wù)客戶端執(zhí)行一個命令的時候,會檢測使用的內(nèi)存是否超額

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Column注解的columnDefinition用法

    基于Column注解的columnDefinition用法

    這篇文章主要介紹了Column注解的columnDefinition用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 23種設(shè)計(jì)模式(16)java訪問者模式

    23種設(shè)計(jì)模式(16)java訪問者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java訪問者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例

    java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例

    這篇文章主要介紹了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能,結(jié)合完整實(shí)例形式分析了Aes加密解密功能的定義與使用方法,需要的朋友可以參考下
    2017-01-01
  • SpringCloud Gateway HttpWebHandlerAdapter鏈路調(diào)用請求流程介紹

    SpringCloud Gateway HttpWebHandlerAdapter鏈路調(diào)用請求流程介

    Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡單有效的、統(tǒng)一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系中的網(wǎng)關(guān),它不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全、監(jiān)控/埋點(diǎn)和限流等
    2022-10-10
  • Springboot如何使用.yml配置端口號

    Springboot如何使用.yml配置端口號

    這篇文章主要介紹了Springboot如何使用.yml配置端口號問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Zookeeper實(shí)現(xiàn)分布式鎖代碼實(shí)例

    Zookeeper實(shí)現(xiàn)分布式鎖代碼實(shí)例

    這篇文章主要介紹了Zookeeper實(shí)現(xiàn)分布式鎖代碼實(shí)例,Zookeeper?分布式鎖應(yīng)用了其?臨時順序節(jié)點(diǎn)?的特性,在Zookeeper中創(chuàng)建一個持久節(jié)點(diǎn)ParentLock,當(dāng)?shù)谝粋€客戶端要獲取鎖時,在ParentLock節(jié)點(diǎn)下創(chuàng)建一個臨時順序節(jié)點(diǎn),需要的朋友可以參考下
    2023-12-12
  • MyBatis之關(guān)于動態(tài)SQL解讀

    MyBatis之關(guān)于動態(tài)SQL解讀

    這篇文章主要介紹了MyBatis之關(guān)于動態(tài)SQL解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的完整步驟

    spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的完整步驟

    JSAPI支付是用戶在微信中打開商戶的H5頁面,商戶在H5頁面通過調(diào)用微信支付提供的JSAPI接口調(diào)起微信支付模塊完成支付,下面這篇文章主要給大家介紹了關(guān)于spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • MyBatis入門程序

    MyBatis入門程序

    MyBatis是支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。接下來本文給大家?guī)砹薓yBatis入門程序,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • java 跳轉(zhuǎn)搜索的實(shí)現(xiàn)示例

    java 跳轉(zhuǎn)搜索的實(shí)現(xiàn)示例

    與二分搜索一樣,跳轉(zhuǎn)搜索是一種針對排序數(shù)組的搜索算法,本文主要介紹了java 跳轉(zhuǎn)搜索的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04

最新評論