Java后端每日面試題(day1)

目錄

  • JavaWeb三大組件
  • 依賴注入的方式
  • @Autowire和@Resurce有什么區別?
  • Spring Boot的優點
  • Spring IoC是什么?
  • 說說Spring Aop的優點
  • @Component和@Bean的區別
  • 自定義注解時使用的RetentionPolicy枚舉類有哪些值?
  • 如何理解Spring的SPI機制?
  • Spring Boot自動裝配原理
  • Spring MVC工作原理

JavaWeb三大組件


  1. Servlet:Servlet是JavaWeb應用程序中處理請求和生成響應的基本組件。它是一個Java類,通過實現或繼承Servlet接口來處理客戶端請求,并生成響應數據。

  2. Listener:監聽器用于監聽Web應用程序中的事件,并在事件發生時執行相應的邏輯處理。

    使用場景:

    1. 初始化
    2. 釋放資源
    3. 日志記錄
  3. Filter:過濾器用于在請求和響應的處理過程中對數據進行攔截和處理。一個請求可以經過多個過濾器的處理,每個過濾器可以在請求的處理前后進行操作和攔截。

    使用場景:

    1. 權限驗證
    2. 請求轉發
    3. 日志記錄
    4. 字符編碼

總結而言

  • Servlet程序用于處理請求和生成響應數據
  • Listener監聽器用于監聽特定的Web應用程序事件執行相應邏輯
  • Filter過濾器用于對請求和響應數據進行攔截和處理。

它們各自在Web應用程序開發中具有重要的作用,能夠實現靈活的請求處理、事件監聽和數據過濾。

依賴注入的方式


在 Spring 中實現依賴注入的常見方式有以下 3 種:

  • 屬性注入(Field Injection)
    • @Autowire實現屬性注入
    • @Resurce實現屬性注入
  • Setter 注入(Setter Injection)
  • 構造方法注入(Constructor Injection)

@Autowire和@Resurce有什么區別?


  1. autowire是Spring提供的;resource是J2EE提供的

  2. resource默認使用name裝配,當找不到name時,會按類型裝配

  3. AutoWire默認按類型裝配,如果要使用名稱裝配可以用@Qualifier結合使用

Spring Boot的優點


  1. 開箱即用

    通過在pom文件中添加相關依賴包,然后使用對應注解來代替繁瑣的XML配置文件以管理對象的生命周期

  2. 約定優于配置

    約定優于配置(convention over configuration),也稱作按約定編程,是一種軟件設計范式,旨在減少軟件開發人員需要的配置。

  3. 內置tomcat

Spring IoC是什么?


IoC(Inversion of Control:控制反轉) 是一種設計思想,而不是一個具體的技術實現,IoC 的思想就是將原本在程序中手動創建對象的控制權,交由 Spring 框架來管理。

  • 為什么叫控制反轉?
    控制:指的是對象創建(實例化、管理)的權力
    反轉:控制權交給外部環境(Spring 框架、IoC 容器)

  • Spring IoC的實現機制:工廠模式+反射機制

說說Spring Aop的優點


  • 減少系統的重復代碼
  • 降低模塊間的耦合度
  • 封裝切面邏輯

@Component和@Bean的區別


  • @Component 注解用在類上,表明一個類會作為組件類,并告知Spring要為這個類創建bean,每個類對應一個 Bean。

  • @Bean 注解用在方法上,表示這個方法會返回一個 Bean。

  • @Bean 注解更加靈活,相比@Component注解自定義性更強

自定義注解時使用的RetentionPolicy枚舉類有哪些值?


源代碼類文件虛擬機
SOURCE??
CLASS????
RUNTIME??????

當值設為SOURCE,只有源文件中可以看到注解
當值設為CLASS,可在源文件和編譯后的Class文件中可以看到注解
當值設為RUNTIME,不僅在源文件和編譯后的Class文件中可以看到注解,JVM還能通過反射機制獲取到注解

如何理解Spring的SPI機制?


  • Java SPI

SPI 全稱 Service Provider Interface,是 Java提供的一套用來被第三方實現或者擴展的接口,它可以用來啟用框架擴展和替換組件

SPI的作用就是為這些被擴展的API 尋找服務實現。本質是通過基于接口編程+策略模式+配置文件 實現動態加載。可以實現 解耦 (接口和實現分離),提高框架的 可拓展性(第三方可以自己實現,達到插拔式的效果)。

  • Spring SPI

Spring SPI對 Java SPI 進行了封裝增強。我們只需要在 META-INF/spring.factories 中配置接口/類/注解名,即可通過服務發現機制,在運行時進行自動加載。

Spring Boot自動裝配原理


Spring Boot自動裝配如下圖所示:
Spring Boot自動裝配原理
Springboot項目的啟動類需要由 @SpringBootApplication 注解修飾,該注解復合了如下三個注解。

  1. @SpringBootConfiguration。表明Springboot啟動類是一個配置類

  2. @ComponentScan。會將指定路徑下的被特定注解修飾的類加載為Spring中的Bean,這些特定注解為@Component,@Controller,@Service,@Repository和@Configuration注解;

  3. @EnableAutoConfiguration。用于開啟Springboot的自動裝配,該注解復合了如下兩個核心注解。

    • @AutoConfigurationPackage。用于將啟動類所在的包里面的所有組件注冊到spring容器。
    • @Import(AutoConfigurationImportSelector.class)
  • 自動裝配流程說明(重要)

    1. @Import AutoConfigurationImportSelector 注入到spring容器中
    2. AutoConfigurationImportSelector 通過 SpringFactoriesLoader 從類路徑下去讀取META-INF/spring.factories文件信息
    3. 此文件中有一個key為org.springframework.boot.autoconfigure.EnableAutoConfiguration,定義了一組需要自動配置的bean

Spring MVC工作原理


Spring MVC 原理如下圖所示:
流程

  • 流程說明(重要)
    1. 客戶端(瀏覽器)發送請求, DispatcherServlet攔截請求
    2. DispatcherServlet 根據請求信息調用 HandlerMapping 。HandlerMapping 根據 URL 去匹配查找能處理的 Handler(也就是我們平常說的 Controller 控制器) ,并會將請求涉及到的攔截器和 Handler 一起封裝。
    3. DispatcherServlet 調用 HandlerAdapter適配器執行 Handler
    4. Handler 完成對用戶請求的處理后,會返回一個 ModelAndView 對象給DispatcherServlet,ModelAndView 顧名思義,包含了數據模型以及相應的視圖的信息。Model 是返回的數據對象,View 是個邏輯上的 View。
    5. ViewResolver 會根據邏輯 View 查找實際的 View
    6. DispaterServlet 把返回的 Model 傳給 View(視圖渲染)
    7. View 返回給請求者(瀏覽器)

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

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

相關文章

聽說現在AI產品經理薪資30k起步?0基礎可以轉行AI產品嗎?

2024年,還有什么新風口? AI、元宇宙、NFT… 很多人不知道,其實不管是元宇宙還是NFT,它們本質上就是人工智能領域。 AI自身應用領域非常廣泛,大批高薪崗位隨之涌了出來,包括AI產品經理。 AI產品經歷具體工…

CSS Float(浮動)

CSS Float(浮動) 概述 CSS Float(浮動)是一種布局技術,它允許開發人員將元素(如圖片或文本)沿著其容器的左側或右側放置,并且讓其他內容圍繞它流動。這種技術在過去被廣泛用于創建多欄布局,盡管現代CSS提供了更多高級的布局方法(如Flexbox和Grid),但理解浮動仍然…

【LeetCode:841. 鑰匙和房間 + DFS】

🚀 算法題 🚀 🌲 算法刷題專欄 | 面試必備算法 | 面試高頻算法 🍀 🌲 越難的東西,越要努力堅持,因為它具有很高的價值,算法就是這樣? 🌲 作者簡介:碩風和煒,…

安卓手機已刪除短信如何恢復?這2個技巧,找回離家出走的短信

手機宛如一座豐富的寶庫,珍藏著生活中的點滴回憶。其中,短信作為溝通的橋梁,記錄著我們與親朋好友間的溫情脈脈,承載著無數珍貴的瞬間。然而,有時,我們卻會不慎觸發寶庫中的機關,使得這些寶貴的…

陳文自媒體:30歲房貸1000萬,杠杠超乎想象!

首先寫這個文章我要聲明,這個內容沒有傳播負能量,沒有傳播所謂的焦慮,我只是想表達一下我的觀點。 昨天的中金30歲女士的事件,我相信很多網友都知道了,已經上了熱搜了。 簡單總結一下原因,據說是她和老公…

【計算智能】遺傳算法(二):基本遺傳算法在優化問題中的應用【實驗】

前言 本系列文章架構概覽: 本文將介紹基本遺傳算法在解決優化問題中的應用,通過實驗展示其基本原理和實現過程:選取一個簡單的二次函數作為優化目標,并利用基本遺傳算法尋找其在指定范圍內的最大值。 2. 基本遺傳算法(SGA&#x…

面試公司的時候一般要問HR的問題和關注的福利待遇(比較重要,親測)

1.問是否雙休,是否有五險一金 2.問福利待遇,是否包吃住,是否有班車及補貼等 3.是否加班 4.是否有健身房,食堂等設施 5.是否出差,在哪個城市 6.工作地點能不能選擇 7.晉升機會怎么樣,什么時候才能晉升&#…

從0構建一款appium-inspector工具

上一篇博客從源碼層面解釋了appium-inspector工具實現原理,這篇博客將介紹如何從0構建一款簡單的類似appium-inspector的工具。如果要實現一款類似appium-inspector的demo工具,大致需要完成如下六個模塊內容 啟動 Appium 服務器連接到移動設備或模擬器啟…

vue 中 使用騰訊地圖 (動態引用騰訊地圖及使用簽名驗證)

在設置定位的時候使用 騰訊地圖 選擇地址 在 mounted中引入騰訊地圖: this.website.mapKey 為地圖的 key // 異步加載騰訊地圖APIconst script document.createElement(script);script.type text/javascript;script.src https://map.qq.com/api/js?v2.exp&…

SS8812T替代DRV8812的國產雙通道H橋電機驅動芯片

由工采網代理的SS8812T是一款國產雙通道H橋電機驅動芯片;該芯片為打印機和其它電機一體化應用提供一種雙通道集成電機驅動方案;可Pin-to-Pin兼容替代DRV8812,可廣泛應用于POS、打印機、安防相機、辦公自動化設備、游戲機、機器人等。 產品描述…

Vue.js 案例——商品管理

一.需要做出的效果圖&#xff1a; 二.實現的步驟 首先&#xff0c;先建一個項目&#xff0c;命名Table&#xff0c;在Table項目中的components里新建一個MyTable.vue文件。 第二步&#xff0c;在原有的 HelloWorld.vue中寫入代碼。 HelloWorld.vue代碼如下&#xff1a; <…

KumiaoQQ機器人框架源碼

源碼介紹 酷喵機器人框架基于PC協議與MGCH的結合&#xff0c;MGCH即 MiraiGO-CQhttp&#xff08;代碼類型&#xff1a;易語言&#xff09;基本的API功能已經實現&#xff0c;具體可自測&#xff08;教程/日志/說明文本已附帶&#xff09;開放源碼僅供參考學習交流&#xff0c;…

遠超美國!中國AI專利數量全球第一!商湯推出面向C端用戶大模型“Vimi”,可生成分鐘級視頻!|AI日報

文章推薦 蘋果獲得OpenAI董事會觀察員職位&#xff01;Runway正籌集新一輪融資&#xff0c;估值40億美元&#xff01;&#xff5c;AI日報 AI基準測評&#xff08;下&#xff09;&#xff1a;視頻生成、代碼能力、邏輯推理&#xff0c;AI是否已經超越人類&#xff1f; 聯合國…

【linux高級IO(一)】理解五種IO模型

&#x1f493;博主CSDN主頁:杭電碼農-NEO&#x1f493; ? ?專欄分類:Linux從入門到精通? ? &#x1f69a;代碼倉庫:NEO的學習日記&#x1f69a; ? &#x1f339;關注我&#x1faf5;帶你學更多操作系統知識 ? &#x1f51d;&#x1f51d; Linux高級IO 1. 前言2. 重談對…

kubernetes dashboard安裝

1.查看符合自己版本的kubernetes Dashboard 比如我使用的是1.23.0版本 https://github.com/kubernetes/dashboard/releases?page5 對應版本 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml修改對應的yaml,…

Linux Conda 入門案例教程

Conda 的基本概念 1.什么是 Conda&#xff1f;&#xff1a;Conda 是一個開源的包管理器和環境管理器&#xff0c;用于管理 Python 和其他語言的環境和依賴項。 2.Conda 的特點&#xff1a;Conda 的特點包括快速、可靠、靈活和跨平臺支持等。 安裝和配置 1.安裝 Conda&#x…

adb不插usb線通過wifi調試

說起做手機開發也有好多年了&#xff0c;說來慚愧&#xff0c;我最近才知道安卓手機是可以不插數據線進行開發調試的。起因是公司近期采購了一批安卓一卡通設備&#xff0c;需要對其進行定制開發APP,但是由于我插USB調試發現沒有反應。通過詢問廠家才知道可以通過WIFI進行調試。…

請注意,以下這幾種操作都會導致流量卡被停用!

最近一段時間&#xff0c;小編經常收到一些反饋&#xff0c;明明是剛辦理的手機號還沒有用幾天就被停用了&#xff0c;今天&#xff0c;這篇文章我們要了解就是手機號被停用的問題。 ? 對于新辦理的手機號會被停用這個問題&#xff0c;主要還是因為運營商為了防止電話詐騙&…

vue監聽數據時 newValue, oldValue操作處理

要只存入新更改的數據&#xff0c;可以在 watch 的回調函數中進行比較&#xff0c;篩選出有變化的屬性并將其存入新數組。以下是一個示例代碼&#xff0c;假設要監聽的對象為 obj&#xff1a; data() {return {differenceArray: [], obj: { /* 對象的初始屬性 */ }}; }, compu…

java數據結構集合復習之包裝類和泛型

前言: 這是我最一年學習java的一部分的回顧總結 1.包裝類 在Java中&#xff0c;由于基本類型不是繼承自Object&#xff0c;為了在泛型代碼中可以支持基本類型&#xff0c;Java給每個基本類型都對應了一個包裝類型。 1.1基本數據類型和對應的包裝類 ----—基本數據類型包裝類…