面試題008-Java-SpringBoot

面試題008-Java-SpringBoot

目錄

  • 面試題008-Java-SpringBoot
    • 題目自測
    • 題目答案
      • 1. Spring 和 Spring Boot有什么區別?
      • 2. Spring Boot 的主要優點是什么?
      • 3. 什么是Spring Boot Starter?
      • 4. 介紹一下@SpringBootApplication注解?
      • 5. Spring Boot是如何實現自動配置的?
      • 6. Spring Boot中讀取配置文件的方式有哪些?
      • 7. Spring Boot中加載配置文件的優先級是怎樣的?
      • 8. 如何在Spring Boot中實現日志記錄?
    • 參考資料

題目自測

  • 1. Spring 和 Spring Boot有什么區別?
  • 2. Spring Boot 的主要優點是什么?
  • 3. 什么是Spring Boot Starter?
  • 4. 介紹一下@SpringBootApplication注解?
  • 5. Spring Boot是如何實現自動配置的?
  • 6. Spring Boot中讀取配置文件的方式有哪些?
  • 7. Spring Boot中加載配置文件的優先級是怎樣的?
  • 8. 如何在Spring Boot中實現日志記錄?

題目答案

1. Spring 和 Spring Boot有什么區別?

答:Spring是一個Java應用開發框架,它提供了豐富的功能,如依賴注入、面向切面編程等功能,簡化了企業級應用開發。但它需要大量的XML配置文件或基于注解的配置,所以在配置上它比較繁瑣。
Spring Boot是基于Sring框架的子項目,主要是為了簡化Spring應用的創建和配置。通過約定優于配置的原則,減少了開發和配置的復雜性。

2. Spring Boot 的主要優點是什么?

答:Spring Boot的主要優點有:

  • 簡化配置:遵循約定優于配置的原則,默認提供了很多合理的配置,開發者只需在必要時進行定制化配置。
  • 內嵌服務器:Spring Boot支持內嵌的Tomcat,Jetty等服務器,使得打包可以生成一個可以直接運行的JAR文件。
  • 快速開發:Spring Boot提供了快速開發的體驗,包括熱部署、自動刷新等功能,提供了Spring Initializer工具。
  • 生產就緒功能:提供了強大的生產環境的監控和管理功能。
  • 簡化依賴管理:Spring Boot使用了起步依賴來簡化構建配置,避免了手動管理依賴及其版本號的麻煩。

3. 什么是Spring Boot Starter?

答:Spring Boot Starter 是 Spring Boot 提供的一系列依賴包,用于簡化應用程序的依賴管理和配置。它預先打包了一組相關的庫和配置,幫助開發者快速搭建不同功能的Spring Boot應用,而無需手動添加和配置各個依賴項。

<dependencies><!-- 用于Web開發的起始依賴包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

4. 介紹一下@SpringBootApplication注解?

答:@SpringBootApplication注解主要是用于簡化Spring Boot應用的配置和啟動。它是一個組合注解,包含了多個常用的Spring注解。該注解主要包含了以下三個注解:

  • @SpringBootConfiguration:標識這是一個配置類。
  • @EnableAutoConfiguration:啟用 Spring Boot 的自動配置機制,根據類路徑中的依賴和配置文件中的配置,自動配置 Spring 應用上下文。
  • @ComponentScan:啟用組件掃描,自動發現和注冊 Spring 組件(如@Compoent、@Service等)。
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    @Import({ AutoConfigurationImportSelector.class })
    public @interface SpringBootApplication {// ....
    }
    

5. Spring Boot是如何實現自動配置的?

答:Spring Boot中的自動配置是通過@SprinBootApplication注解中的@EnableAutoConfiguration注解來啟用自動配置機制的,指示Spring Boot根據應用的依賴和配置自動配置Spring應用的上下文。
自動配置的工作原理:

  1. 加載spring.factories文件
    @EnableAutoConfiguration注解通過Spring提供的@Import注解導入了AutoConfigurationImportSelector類,該類中的方法會讀取spring.factories文件中的配置,加載所有的自動配置類。
  2. 通過條件注解判斷該配置類是否應該被加載:每個自動配置類通常都帶有一組條件注解,用于判斷該配置類是否應該被加載。條件注解有@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty。
  3. 創建和注冊Bean,實現自動配置:滿足條件的自動配置類會被加載,并按照其定義創建和注冊相應的 Bean。

6. Spring Boot中讀取配置文件的方式有哪些?

答:常見的讀取配置的方式有:

  • 使用@Value注解:直接在字段或方法參數上使用。

    @Component
    public class AppConfig {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;// getters and setters
    }
    
  • 使用@ConfigurationProperties注解:注解用于將配置文件中的屬性映射到一個 Java 類中。

    @Component
    @ConfigurationProperties(prefix = "app")
    public class AppProperties {private String name;private String version;private Security security;// getters and setterspublic static class Security {private String username;private String password;// getters and setters}
    }
    
  • 使用@propertySource注解:注解用于加載非默認位置的配置文件。

    @Configuration
    @PropertySource("classpath:config.properties")
    public class PropertySourceConfig {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;// getters and setters
    }
    
  • 使用Environment接口:用于以編程方式訪問屬性值。

    @Component
    public class EnvironmentConfig {@Autowiredprivate Environment env;public String getAppName() {return env.getProperty("app.name");}public String getAppVersion() {return env.getProperty("app.version");}
    }
    

7. Spring Boot中加載配置文件的優先級是怎樣的?

答:Spring Boot中配置文件加載的優先級從高到低依次是:命令行參數、系統屬性、外部配置文件、內部配置文件、@PropertySource 注解聲明的屬性源和默認屬性。

  • 命令行參數:在啟動應用時通過命令行傳遞的參數。例如,–server.port=8081。
  • 系統屬性:通過System.gerProperties()訪問的屬性。
  • 外部配置文件:jar包外部的application.properties或application.yml文件。
  • 內部配置文件:jar包內部的application.properties或application.yml文件。
  • @PropertySource 注解聲明的屬性源。
  • 默認屬性。

8. 如何在Spring Boot中實現日志記錄?

答:在Spring Boot中默認使用Logback作為日志框架進行日志記錄,默認情況下,Spring Boot會自動對Logback進行配置。如果你需要更復雜的日志配置,可以通過自定義Logback配置文件來實現。

@Component
public class MyComponent {private static final Logger logger = LoggerFactory.getLogger(MyComponent.class);public void doSomething() {logger.info("This is an info message");logger.debug("This is a debug message");logger.error("This is an error message");}
}

參考資料

  • JavaGuide
  • 牛客網-Java面試寶典
  • Spring源碼解析
  • Spring官方文檔
  • ChatGPT

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44806.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【密碼學】消息認證

你發送給朋友一條消息&#xff08;內容&#xff1a;明天下午來我家吃飯&#xff09;&#xff0c;這一過程中你不想讓除你朋友以外的人看到消息的內容&#xff0c;這就叫做消息的機密性&#xff0c;用來保護消息機密性的方式被叫做加密機制。 現在站在朋友的視角&#xff0c;某一…

使用PyQt5實現添加工具欄、增加SwitchButton控件

前言&#xff1a;通過在網上找到的“電池電壓監控界面”&#xff0c;學習PyQt5中添加工具欄、增加SwitchButton控件&#xff0c;在滑塊控件右側增加文本顯示、設置界面背景顏色、修改文本控件字體顏色等。 1. 上位機界面效果展示 網絡上原圖如下&#xff1a; 自己使用PyQt5做…

springboot異常(一):springboot自定義全局異常處理

&#x1f337;1. 自定義一個異常類 自定義一個異常&#xff0c;有兩個變量異常代碼、異常消息&#xff0c;定義了兩個構造方法&#xff0c;一個無參構造方法&#xff0c;一個所有參數構造方法。 在構造方法中要掉用父類的構造方法&#xff0c;主要目的是在日志或控制臺打印異…

【Linux】多線程_3

文章目錄 九、多線程3. C11中的多線程4. 線程的簡單封裝 未完待續 九、多線程 3. C11中的多線程 Linux中是根據多線程庫來實現多線程的&#xff0c;C11也有自己的多線程&#xff0c;那它的多線程又是怎樣的&#xff1f;我們來使用一些C11的多線程。 Makefile&#xff1a; te…

Linux - 探索命令行

探索命令行 Linux命令行中的命令使用格式都是相同的: 命令名稱 參數1 參數2 參數3 ...參數之間用任意數量的空白字符分開. 關于命令行, 可以先閱讀一些基本常識. 然后我們介紹最常用的一些命令: ls用于列出當前目錄(即"文件夾")下的所有文件(或目錄). 目錄會用藍色…

面試經典題型:調用HashMap的put方法的具體執行流程

在調用put方法時時&#xff0c;有幾個關鍵點需要考慮&#xff1a; 哈希沖突的發生與解決&#xff1a; 哈希沖突指不同的鍵通過哈希函數計算得到相同的哈希值&#xff0c;導致它們應該存放在哈希表的同一個位置。解決沖突的常用方法包括開放尋址法和鏈表法&#xff08;或其升級形…

CSIP-FTE考試專業題

靶場下載鏈接&#xff1a; https://pan.baidu.com/s/1ce1Kk0hSYlxrUoRTnNsiKA?pwdha1x pte-2003密碼&#xff1a;admin123 centos:root admin123 解壓密碼&#xff1a; PTE考試專用 下載好后直接用vmware打開&#xff0c;有兩個靶機&#xff0c;一個是基礎題&#x…

【CTF-Crypto】數論基礎-02

【CTF-Crypto】數論基礎-02 文章目錄 【CTF-Crypto】數論基礎-021-16 二次剩余1-20 模p下-1的平方根*1-21 Legendre符號*1-22 Jacobi符號*2-1 群*2-2 群的性質2-3 阿貝爾群*2-4 子群2-11 群同態2-18 原根2-21 什么是環2-23 什么是域2-25 子環2-26 理想2-32 多項式環 1-16 二次剩…

打造智慧校園德育管理,提升學生操行基礎分

智慧校園的德育管理系統內嵌的操行基礎分功能&#xff0c;是對學生日常行為規范和道德素養進行量化評估的一個創新實踐。該功能通過將抽象的道德品質轉化為具體可量化的指標&#xff0c;如遵守紀律、尊師重道、團結協作、愛護環境及參與集體活動的積極性等&#xff0c;為每個學…

醫療器械FDA |FDA網絡安全測試具體內容

醫療器械FDA網絡安全測試的具體內容涵蓋了多個方面&#xff0c;以確保醫療器械在網絡環境中的安全性和合規性。以下是根據權威來源歸納的FDA網絡安全測試的具體內容&#xff1a; 一、技術文件審查 網絡安全計劃&#xff1a;制造商需要提交網絡安全計劃&#xff0c;詳細描述產…

Matlab【光伏預測】基于雪融優化算法SAO優化高斯過程回歸GPR實現光伏多輸入單輸出預測附代碼

% 光伏預測 - 基于SAO優化的GPR % 數據準備 % 假設有多個輸入特征 X1, X2, …, Xn 和一個目標變量 Y % 假設數據已經存儲在 X 和 Y 中&#xff0c;每個變量為矩陣&#xff0c;每行表示一個樣本&#xff0c;每列表示一個特征 % 參數設置 numFeatures size(X, 2); % 輸入特征的…

Spring Boot集成easyposter快速入門Demo

1.什么是easyposter&#xff1f; easyposter是一個簡單的,便于擴展的繪制海報工具包 使用場景 在日常工作過程中&#xff0c;通常一些C端平臺會伴隨著海報生成與分享業務。因為隨著移動互聯網的迅猛發展&#xff0c;社交分享已成為我們日常生活的重要組成部分。海報分享作為…

visual studio 2019版下載以及與UE4虛幻引擎配置(過程記錄)(官網無法下載visual studio 2019安裝包)

一、概述 由于需要使用到UE4虛幻引擎&#xff0c;我使用的版本是4.27版本的&#xff0c;其官方默認的visual studio版本是2019版本的&#xff0c;相應的版本對應關系可以通過下面的官方網站對應關系查詢。https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/Develo…

MMSegmentation筆記

如何訓練自制數據集&#xff1f; 首先需要在 mmsegmentation/mmseg/datasets 目錄下創建一個自制數據集的配置文件&#xff0c;以我的蘋果葉片病害分割數據集為例&#xff0c;創建了mmsegmentation/mmseg/datasets/appleleafseg.py 可以看到&#xff0c;這個配置文件主要定義…

python:使用matplotlib庫繪制圖像(四)

作者是跟著http://t.csdnimg.cn/4fVW0學習的&#xff0c;matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己學習過程中整理的詳細說明版本&#xff0c;對小白更友好哦&#xff01; 四、條形圖 1. 一個數據樣本的條形圖 條形圖&#xff1a;常用于比較不同類別的數量或值&…

3dmax-vray5大常用材質設置方法

3dmax云渲染平臺——渲染100 以高性價比著稱&#xff0c;是預算有限的小伙伴首選。 15分鐘0.2,60分鐘內0.8;注冊填邀請碼【7788】可領30元禮包和免費渲染券 提供了多種機器配置選擇(可以自行匹配環境)最高256G大內存機器&#xff0c;滿足不同用戶需求。 木紋材質 肌理調整&…

函數語意學(The Sematics of Function)

1、非靜態成員函數轉化為非成員函數 c 設計準則之一就是&#xff1a;非靜態成員函數至少和非成員函數有相同的效率。 也就是說下面兩個函數具有相同的效率&#xff1a; float magnitude(const Point3d * this){...}; float Point3d::magnitude(){...};以 float Point3d::mag…

練習9.5 彩票分析

練習 9.14&#xff1a;彩票 創建?個列表或元素&#xff0c;其中包含 10 個數和 5 個字 ?。從這個列表或元組中隨機選擇 4 個數或字?&#xff0c;并打印?條消息&#xff0c; 指出只要彩票上是這 4 個數或字?&#xff0c;就中?獎了。 練習 9.15&#xff1a;彩票分析 可以使…

面試題 05. 替換空格

05. 替換空格 題目描述示例 題解 題目描述 請實現一個函數&#xff0c;把字符串 s 中的每個空格替換成"%20"。 示例 示例1 輸入&#xff1a;s “We are happy.” 輸出&#xff1a;“We%20are%20happy.” 題解 class Solution { public:string replaceSpace(stri…

jQuery 元素選擇器集合

jQuery 提供了一套非常強大的元素選擇器&#xff0c;它們可以以各種方式定位和操作網頁文檔中的元素。 以下是 jQuery 中的一些常用選擇器&#xff1a; 1、基本選擇器 #id&#xff1a;選擇 ID 為 id 的元素。.&#xff08;類選擇器&#xff09;&#xff1a;選擇具有特定類的…