主頁 > 後端開發 > JavaWeb編程面試題——Spring Framework

JavaWeb編程面試題——Spring Framework

2023-05-25 11:37:13 後端開發

引言

面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待,不以刷題進大廠為目的,而是以學習為目的,這里的知識點會持續更新,目錄也會隨時進行調整,

大家可以關注公眾號:編程火箭車,在【粉絲福利】中點擊【面題大全】,其中的Java面試題在線實時更新、查看,


一、面試題導航

點這里進入JavaWeb編程面試題——導航

面試題持續更新中......

二、面試題目

1.什么是Spring框架?Spring框架有哪些主要模塊?

Spring 是一種輕量級開發框架,旨在提高開發人員的開發效率以及系統的可維護性,
一般說 Spring 框架指的是 Spring Framework,它是很多模塊的集合,這些模塊是:核心容器、資料訪問/集成、Web、AOP(面向切面編程)、工具、訊息和測驗模塊,Spring 框架的主要目的是簡化 Java 后端開發作業,

2.Spring的優點?

  • Spring 屬于低侵入式設計,代碼的污染極低;

  • Spring 的 DI 機制將物件之間的依賴關系交由框架處理,降低組件的耦合度;

  • Spring 提供了 AOP 技術,支持將一些通用任務,如安全、事務、日志、權限等進行集中式管理,從而提供更好的復用;

  • Spring 對于主流的應用框架提供了集成支持,

3.列舉一些重要的Spring模塊?

在這里插入圖片描述

一些重要的 Spring Framework 模塊:

  • Spring Core:基礎,可以說 Spring 其他所有的功能都需要依賴于該核心庫,主要提供 IOC 依賴注入功能,

  • Spring AOP:提供了面向切面的編程實作,

  • Spring Aspects:該模塊為與 AspectJ 的集成提供支持,

  • Spring JDBC:Java 資料庫連接,

  • Spring JMS:Java 訊息服務,

  • Spring ORM:用于支持 Mybatis、Hibernate 等 ORM 框架的支持,

  • Spring Web:為創建 Web 應用程式提供支持,

  • Spring Test:提供了對 JUnit 和 TestNG 測驗的支持,

4.談談對Spring IoC的理解?

IoC(Inverse of Control:控制反轉)是一種設計思想,就是將原本在程式中手動創建物件的控制權交由 Spring 框架來管理,IoC 在其他語言中也有應用,并非 Spring 特有,IoC 容器是 Spring 用來實作 IoC 的載體,IoC 容器實際上就是個 Map(key, value),Map 中存放的是各種物件,
將物件之間的相互依賴關系交給 IOC 容器來管理,并由 IOC 容器完成物件的注入,這樣可以很大程度上簡化應用的開發,把應用從復雜的依賴關系中解放出來,IOC 容器就像一個工廠一樣,當我們需要創建一個物件的時候,只需要配置好組態檔或注解即可,完全不用考慮物件是如何被創建出來的,

5.DI是什么?

IOC 的一個重點就是在程式運行時,動態的向某個物件提供它所需要的其他物件,這一點是通過 DI(Dependency Injection,依賴注入)來實作的,即應用程式在運行時依賴 IoC 容器來動態注入物件所需要的外部依賴,而 Spring 的 DI 具體就是通過反射實作注入的,反射允許程式在運行的時候動態的生成物件、執行物件的方法、改變物件的屬性,

6.IOC與DI有什么區別?

IOC 是解決耦合問題的一種設計思想,DI 是 IOC 的一種實作,IOC 主要的實作方式有兩種:依賴查找(DL),依賴注入(DI),

7.談談對Spring AOP的理解?

AOP(Aspect-Oriented Programming:面向切面編程)能夠將那些與業務無法,卻為業務模塊所共同呼叫的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可拓展性和可維護性,

Spring AOP 就是基于動態代理的,如果要代理的物件實作了某個介面,那么Spring AOP 會使用 JDK Proxy,去創建代理物件,而對于沒有實作介面的物件,就無法使用 JDK Proxy 去進行代理,這時候 Spring AOP 會使用 Cglib,這時候 Spring AOP 會使用 CGLIB 生成一個被代理物件的子類來作為代理,

使用 AOP 之后我們可以把一些通用的功能抽象出來,在需要用到的地方直接使用即可,這樣大大簡化了代碼量,我們需要增加新功能時也方便,提供了系統的擴展性,日志功能、事務管理等等場景都用到了 AOP,

8.靜態代理與動態代理有什么區別?

AOP 實作的關鍵在于 代理模式,AOP 代理主要分為靜態代理和動態代理,靜態代理的代表為 AspectJ;動態代理則以 Spring AOP 為代表,靜態代理與動態代理區別在于生成 AOP 代理物件的時機不同

(1)AspectJ 是靜態代理,也稱為編譯時增強,AOP 框架會在編譯階段生成 AOP 代理類,并將 AspectJ(切面)織入到 Java 位元組碼中,運行的時候就是增強之后的 AOP 物件,

(2)Spring AOP 使用的動態代理,所謂的動態代理就是說 AOP 框架不會去修改位元組碼,而是每次運行時在記憶體中臨時為方法生成一個 AOP 物件,這個 AOP 物件包含了目標物件的全部方法,并且在特定的切點做了增強處理,并回呼原物件的方法,

9.JDK動態代理和CGLIB動態代理的區別?

(1)JDK 動態代理只提供介面的代理,不支持類的代理,要求被代理類實作介面,JDK 動態代理的核心是 InvocationHandler 介面和 Proxy 類,在獲取代理物件時,使用 Proxy 類來動態創建目標類的代理類(即最終真正的代理類,這個類繼承自 Proxy 并實作了我們定義的介面),當代理物件呼叫真實物件的方法時, InvocationHandler 通過 invoke() 方法反射來呼叫目標類中的代碼,動態地將橫切邏輯和業務編織在一起;

(2)如果被代理類沒有實作介面,那么 Spring AOP 會選擇使用 CGLIB 來動態代理目標類,CGLIB(Code Generation Library),是一個代碼生成的類別庫,可以在運行時動態的生成指定類的一個子類物件,并覆寫其中特定方法并添加增強代碼,從而實作 AOP,CGLIB 是通過繼承的方式做的動態代理,因此如果某個類被標記為 final,那么它是無法使用 CGLIB 做動態代理的,

10.Spring支持幾種Bean的作用域?

當通過 Spring 容器創建一個 Bean 實體時,不僅可以完成 Bean 實體的實體化,還可以為 Bean 指定特定的作用域,

Spring 支持如下6種作用域:

  • singleton:單例模式,在整個 Spring IoC 容器中,使用 singleton 定義的 Bean 將只有一個實體,

  • prototype:原型模式,每次通過容器的 getBean 方法獲取 prototype 定義的 Bean 時,都將產生一個新的 Bean 實體,

  • request:對于每次 HTTP 請求,使用 request 定義的 Bean 都將產生一個新實體,即每次 HTTP 請求將會產生不同的 Bean 實體,只有在 Web 應用中使用 Spring 時,該作用域才有效,

  • session:對于每次 HTTP Session,使用 session 定義的 Bean 都將產生一個新實體,同樣只有在 Web 應用中使用 Spring 時,該作用域才有效,

  • application:整個應用活動期間,

  • websocket:一次埠通信,

其中比較常用的是 singleton 和 prototype 兩種作用域,對于 singleton 作用域的 Bean,每次請求該 Bean 都將獲得相同的實體,容器負責跟蹤 Bean 實體的狀態,負責維護 Bean 實體的生命周期行為;如果一個 Bean 被設定成 prototype 作用域,程式每次請求該 id 的 Bean,Spring 都會新建一個 Bean實體,然后回傳給程式,在這種情況下,Spring 容器僅僅使用 new 關鍵字創建 Bean 實體,一旦創建成功,容器不在跟蹤實體,也不會維護 Bean 實體的狀態,

如果不指定 Bean 的作用域,Spring 默認使用 singleton 作用域,Java 在創建 Java 實體時,需要進行記憶體申請;銷毀實體時,需要完成垃圾回收,這些作業都會導致系統開銷的增加,因此,prototype 作用域 Bean 的創建、銷毀代價比較大,而 singleton 作用域的 Bean 實體一旦創建成功,可以重復使用,因此,除非必要,否則盡量避免將 Bean 被設定成 prototype 作用域,

11.Spring常用的注入方式有哪些?

Spring 通過 DI(依賴注入)實作 IOC(控制反轉),常用的注入方式主要有三種:

  • 構造方法注入

  • Setter 注入

  • 基于注解的注入

12.Spring自動裝配Bean有哪些方式?

Spring 容器負責創建應用程式中的 Bean 同時通過 ID 來協調這些物件之間的關系,作為開發人員,我們需要告訴 Spring 要創建哪些 Bean 并且如何將其裝配到一起,

Spring 中 Bean 裝配有兩種方式:

  • 隱式的 Bean 發現機制和自動裝配

  • 在 Java 代碼或者 XML 中進行顯示配置

當然這些方式也可以配合使用,

13.Spring中的Bean是執行緒安全的嗎?

Spring 中的 Bean 默認是單例模式,Spring 容器本身并沒有提供執行緒安全的策略,因為是否執行緒安全完全取決于 Bean 本身的特性,但是具體情況還是要結合 Bean 的作用域來討論,

  • 對于 prototype 作用域的 Bean,每次都創建一個新物件,也就是執行緒之間不存在 Bean 共享,因此不會有執行緒安全問題,

  • 對于 singleton 作用域的 Bean,所有的執行緒都共享一個單例實體的 Bean,因此是存在執行緒安全問題的,但是如果單例 Bean 是一個無狀態 Bean,也就是執行緒中的操作不會對 Bean 的成員執行查詢以外的操作,那么這個單例 Bean 是執行緒安全的,比如 Controller 類、Service 類和 Dao 等,這些 Bean 大多是無狀態的,只關注于方法本身,

有狀態 Bean(Stateful Bean) :就是有實體變數的物件,可以保存資料,是非執行緒安全的,
無狀態 Bean(Stateless Bean):就是沒有實體變數的物件,不能保存資料,是不變類,是執行緒安全的,

14.Spring框架中用到了哪些設計模式?

關于下面一些設計模式的詳細介紹

  • 工廠設計模式 : Spring 使用工廠模式通過 BeanFactory、ApplicationContext 創建 Bean 物件,

  • 代理設計模式 : Spring AOP 功能的實作,

  • 單例設計模式 : Spring 中的 Bean 默認都是單例的,

  • 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 結尾的對資料庫操作的類,它們就使用到了模板模式,

  • 包裝器設計模式 : 我們的專案需要連接多個資料庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的資料庫,這種模式讓我們可以根據客戶的需求能夠動態切換不同的資料源,

  • 觀察者模式: Spring 事件驅動模型就是觀察者模式很經典的一個應用,

  • 配接器模式 :Spring AOP 的增強或通知(Advice)使用到了配接器模式、spring MVC 中也是用到了配接器模式適配 Controller,

15.@Component和@Bean的區別是什么?

(1)作用物件不同: @Component 注解作用于類,而 @Bean 注解作用于方法,

(2)@Component 通常是通過類路徑掃描來自動偵測以及自動裝配到 Spring 容器中(我們可以使用 @ComponentScan 注解定義要掃描的路徑從中找出標識了需要裝配的類自動裝配到 Spring 的 Bean 容器中),@Bean 注解通常是我們在標有該注解的方法中定義產生這個 Bean,@Bean 告訴了 Spring 這是某個類的示例,當我需要用它的時候還給我,

(3)@Bean 注解比 @Component 注解的自定義性更強,而且很多地方我們只能通過 @Bean 注解來注冊Bean,比如當我們參考第三方庫中的類需要裝配到 Spring 容器時,則只能通過 @Bean 來實作,

16.將一個類宣告為Spring的Bean的注解有哪些?

我們一般使用 @Autowired 注解自動裝配 Bean,要想把類標識成可用于 @Autowired 注解自動裝配的 Bean 的類,采用以下注解可實作:

  • @Component :通用的注解,可標注任意類為 Spring 組件,如果一個Bean不知道屬于拿個層,可以使用 @Component 注解標注,

  • @Repository : 對應持久層即 Dao 層,主要用于資料庫相關操作,

  • @Service : 對應服務層,主要涉及一些復雜的邏輯,需要用到 Dao 層,

  • @Controller : 對應 Spring MVC 控制層,主要用戶接受用戶請求并呼叫 Service 層回傳資料給前端頁面,

17.Spring事務實作方式有哪些?

編程式事務管理對基于 POJO 的應用來說是唯一選擇,我們需要在代碼中呼叫 beginTransaction()、commit()、rollback() 等事務管理相關的方法,這就是編程式事務管理,

  • 基于 TransactionProxyFactoryBean 的宣告式事務管理,

  • 基于 @Transactional 的宣告式事務管理,

  • 基于 Aspectj AOP 配置事務,

18.Spring中一個介面有多個實作類如何不同注入我所需要的類?

  • @Autowired 是通過 byType 的方式去注入的,使用該注解,要求介面只能有一個實作類,

  • @Resource 可以通過 byName 和 byType 的方式注入,默認先按 byName 的方式進行匹配,如果匹配不到,再按 byType 的方式進行匹配,

  • @Qualifier 注解可以按名稱注入,但是注意是類名,

19.為什么要使用Spring?

(1)簡介

  • 目的:解決企業應用開發的復雜性;

  • 功能:使用基本的 JavaBean 代替 EJB,并提供了更多的企業應用功能;

  • 范圍:任何 Java 應用;

  • 簡單來說,Spring 是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架,

(2)輕量

從大小與開銷兩方面而言 Spring 都是輕量的,并且 Spring 所需的處理開銷也是微不足道的,此外,Spring 是非侵入式的:典型地,Spring 應用中的物件不依賴于 Spring 的特定類,

(3)控制反轉

Spring 通過一種稱作控制反轉(IoC)的技術促進了松耦合,當應用了 IoC,一個物件依賴的其它物件會通過被動的方式傳遞進來,而不是這個物件自己創建或者查找依賴物件,你可以認為 IoC 與 JNDI 相反——不是物件從容器中查找依賴,而是容器在物件初始化時不等物件請求就主動將依賴傳遞給它,

(4)面向切面

Spring 提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發,應用物件只實作它們應該做的——完成業務邏輯——僅此而已,它們并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持,

(5)容器

Spring 包含并管理應用物件的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個 Bean 如何被創建——基于一個可配置原型(prototype),你的 Bean 可以創建一個單獨的實體或者每次需要時都生成一個新的實體——以及它們是如何相互關聯的,然而,Spring 不應該被混同于傳統的重量級的 EJB 容器,它們經常是龐大與笨重的,難以使用,

(6)框架

Spring 可以將簡單的組件配置、組合成為復雜的應用,在 Spring 中,應用物件被宣告式地組合,典型地是在一個 XML 檔案里,Spring 也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你,

所有 Spring 的這些特征使你能夠撰寫更干凈、更可管理、并且更易于測驗的代碼,它們也為 Spring 中的各種模塊提供了基礎支持,

20.@Autowired和@Resource之間的區別?

  • @Autowired 默認是按照型別裝配注入的,默認情況下它要求依賴物件必須存在(可以設定它 required 屬性為 false),

  • @Resource 默認是按照名稱來裝配注入的,只有當找不到與名稱匹配的 Bean 才會按照型別來裝配注入,


關注公眾號:編程火箭車
我們定期發布編程相關的文章、資訊、活動等內容,幫助編程愛好者、初學者或初級程式員快速入門、打牢基礎,歡迎大家關注,和我們一起探索編程的精彩世界,

本文來自博客園,作者:Ongoing蝸牛,轉載請注明原文鏈接:https://www.cnblogs.com/coding-rocket/p/17430075.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553378.html

標籤:其他

上一篇:Netty實戰(三)

下一篇:返回列表

標籤雲
其他(159671) Python(38169) JavaScript(25450) Java(18129) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7211) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5341) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1976) 功能(1967) Web開發(1951) HtmlCss(1944) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • JavaWeb編程面試題——Spring Framework

    面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這里的知識點會持續更新,目錄也會隨時進行調整。 ......

    uj5u.com 2023-05-25 11:37:13 more
  • Netty實戰(三)

    [toc](目錄) # 一、Channel、EventLoop 和 ChannelFuture 上一篇博文我們在構建服務端和客戶端中出現了一些新的類,可能有些同學還有些不了解它們的具體功能。沒關系,接下來我們對于 Channel、EventLoop 和 ChannelFuture 類進行的討論增添更 ......

    uj5u.com 2023-05-25 11:35:12 more
  • MyBatis體系筆記(未完結)

    MyBatis 什么是MyBatis MyBatis是優秀的持久層框架 MyBatis使用XML將SQL與程式解耦,便于維護 MyBatis學習簡單,執行高效,是JDBC的延伸 1.MyBatis開發流程 引入MyBatis依賴 創建核心組態檔 創建物體(Entity)類 創建Mapper映射檔案 ......

    uj5u.com 2023-05-25 11:22:01 more
  • springboot~統一處理日期請求引數java.utils.Date和java.time.Lo

    日期型別的引數在從前端通過url引數傳遞到后端時,它會被進行格式化,如果格式化失敗會出現400的錯誤,像日期格式默認會使用yyyy/MM/dd的格式,如果希望自己去個性化配置,我們可以通過實作WebMvcConfigurer介面的addFormatters方法來完成。 # java.time.Loc ......

    uj5u.com 2023-05-25 11:16:06 more
  • JavaWeb編程面試題——導航

    面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這里的知識點會持續更新,目錄也會隨時進行調整。 ......

    uj5u.com 2023-05-25 11:15:46 more
  • spring-transaction原始碼分析(5)TransactionInterceptor事務攔

    spring-tx的事務攔截邏輯在TransactionInterceptor類,本文將詳細分析其實作方式。 # 事務攔截器TransactionInterceptor spring-tx的事務攔截邏輯在TransactionInterceptor類,它實作了MethodInterceptor介面。 ......

    uj5u.com 2023-05-25 11:15:41 more
  • JavaWeb編程面試題——Spring Framework

    面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這里的知識點會持續更新,目錄也會隨時進行調整。 ......

    uj5u.com 2023-05-25 11:15:36 more
  • Java設計模式-享元模式

    # 簡介 在Java領域的軟體開發中,設計模式是提高代碼可維護性和可擴展性的重要工具。其中,享元模式是一種被廣泛使用的設計模式,它通過優化物件的重用來提升系統性能。 享元模式是一種結構型設計模式,旨在通過共享物件來減少系統中的物件數量,從而提升性能和減少記憶體消耗。在享元模式中,物件分為兩類:內部狀態 ......

    uj5u.com 2023-05-25 07:57:31 more
  • Java語法基礎

    # Java語法基礎 ## 注釋 注釋是對代碼的解釋和說明文字,可以提高程式的可讀性,因此在程式中添加必要的注釋文字十分重要。Java中的注釋分為三種: 單行注釋。單行注釋的格式是使用//,從//開始至本行結尾的文字將作為注釋文字。 ~~~java // 這是單行注釋文字 ~~~ 多行注釋。多行注釋 ......

    uj5u.com 2023-05-25 07:56:20 more
  • 【MyBatis】saveBatch 性能調優

    最近在壓測一批介面,發現介面處理速度慢的有點超出預期,感覺很奇怪,后面定位發現是資料庫批量保存這塊很慢。 這個專案用的是 mybatis-plus,批量保存直接用的是 mybatis-plus 提供的 saveBatch。 我點進去看了下原始碼,感覺有點不太對勁: 繼續追蹤了下,從這個代碼來看,確實是 ......

    uj5u.com 2023-05-25 07:55:50 more