1. Spring、Springboot、springMVC、Spring Cloud 的區別:
- Spring:Spring 是一個開源的、輕量級的Java框架,提供了豐富的功能和組件,用于構建企業級應用程序。Spring框架包含了很多模塊,包括核心容器、數據訪問、事物管理、AOP、Web開發等,可以根據需要選擇使用不同的模塊。
- Springboot:Springboot 是基于 Spring 框架的快速開發框架,旨在簡化 Spring 應用程序的配置和部署過程。它提供了自動配置,快速啟動,約定優于配置等特性,使得開發者可以更加專注于業務邏輯的實現而不需要過多關注繁瑣的配置。Springboot還集成了常用的功能,如嵌入式服務器、安全性、健康檢查等,方便快速構建獨立的可執行JAR包。
- SpringMVC:SpringMVC是Spring 框架中的一個模塊,用于開發基于MVC(Model-View-Controller)架構程序。它提供了一套處理HTTP請求和響應的機制,支持通過注解或配置文件進行請求映射、請求參數處理、視圖解析等操作。SpringMVC是一個靈活且功能的Web框架,可以與其他Spring模塊(如Springboot)進行集成使用。
- SpringCloud 是一個基于Springboot的開發工具集,用于構建分布式系統和微服務架構。它提供了一系列的組件和模塊,用于解決分布式系統中的常見問題,例如訪問注冊與發現、負載均衡、熔斷器、配置管理等。
2. 使用線程池創建線程時參數有哪些
- corePoolSize:核心線程池大小,表示線程池在保持的線程數碼,即使它們處于空閑狀態。當提交一個新的任務到線程時,如果當前線程池中的線程數量少于corePoolSize,則會常見一個新的線程來處理該任務,即使此時其他空閑的基本線程能夠處理該任務也會創建新的線程,直到到達corePoolSize為止。
- maximumPoolSize:最大線程池大小,表示線程池中最多呢創建的線程數目。當提交一個新任務到線程池時,如果當前線程池中的線程數目已經達到corePoolSize,并且緩沖隊列已滿,則會根據maximumPoolSize的值來判斷是否創建新的線程。如果當前線程池中的線程數目小于maximumPoolSize,則會創建新的線程。如果當前線程池中的線程數目等于或大于maximunPoolSize,則不會創建新的線程。
- keepAliveTime:線程池維護線程所允許的空閑時間,默認情況下,KeepAliveTime設置為0表示線程空閑后立即終止。當線程池中線程數量超過corePoolSize時,如果這些多余的線程空閑時間超過KeepAliveTime時長,則這些多余的線程將會被終止。
- unit:keepAliveTime的單位,可以是TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)等等。
- workQueue:任務隊列,用于儲存已經提交但尚未執行的任務。常用的隊列類型有:ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue等。
- threadFactory:線程創建工廠,用于設置創建線程時的一些屬性,例如線程名稱、是否為守護線程等。
- handler:拒絕策略,表示當前線程池中的線程數目達到maximumPoolSize并且緩沖隊列已滿時,如何拒絕新任務的執行。常見的拒絕策略有以下幾種:AbortPolicy、CallerRunPolicy、DiscardOldestPolicy、DiscardPolicy
3. 常見事物的隔離級別
事物的隔離級別是數據庫管理系統中用來控制事物并發訪問是數據可見性的一種機制
讀未提交(Read Uncommitted)
:允許一個事讀取另一個事務未提交的數據。這種隔離級別可能導致臟讀
,即一個事務讀取了另一個事務未提交的數據,而后者最終被回滾,導致前者讀取到的數據是無效的。讀已提交(Read Committed)
:保證一個事務只能讀取到另一個事務已經提交的數據。這種隔離級別可以避免臟讀,但可能導致不可重復讀
,即在同一個事務中,由于其他事物的提交,某個數據的值發生了變化。可重復讀(Repeatable Read)
:保證在同一個事務中多次讀取同樣的數據是,結果始終一致。這種隔離級別可以避免不可重復讀,但可能會導致幻讀
,即在事務中,由于其他事務的插入或刪除,出現了新增或減少的數據行。序列化(Serializable)
:最高的隔離級別,通過強制事務船型執行來避免臟讀、不可重復讀和幻讀、雖然可以解決并發訪問導致的數據不一致問題,但會導致性能嚴重下降。
4. 數據庫的索引類型有哪些
- B-樹索引(B-tree Index):B-樹是一種平衡的多路搜索樹,常用于支持范圍查詢。它適用于大多數數據庫系統,如MySQL、Oracle等。
- B+樹索引(B+tree Index):B+樹是在B-樹的基礎上進行優化的數據結構,它將所有的數據都儲存在葉子節點,并使用連接葉子節點,適用于范圍查詢和數據訪問。B+樹索引在很多關系型數據庫中被廣泛使用。
- 哈希索引(Hash Index):哈希索引通過將索引列的值計算哈希值,然后根據哈希值進行快速查找。哈希索引適合等值查詢,但不適合范圍查詢。例如,MySQL的內存表和MyISAM引擎支持哈希索引。
- 全文索引(Full-Text Index):全文索引通常用于對文本內容進行搜索。它可以創建關鍵詞索引,以便在文本中進行全文索引。全文索引可以加快文本搜索的速度,常見的數據庫系統如MySQL、PostgreSQL都提供了全文索引功能。
- 位圖索引(Bitmap Index):位圖索引將每個唯一的索引值與位圖進行映射,位圖的每一位表示對應索引值的存在或缺失。位圖索引適用于低基數的列。比如性別、狀態等。
5. SpringBoot 的執行流程
SpringBoot 是一個基于 Spring 框架的快速開發框架,它通過自動配置和約定優于配置的原則,簡化了Spring應用程序的開發流程,提供了一種快速構建、易于部署的方式。
- 加載配置文件:SpringBoot 會自動加載 application.properties 或 application.yml 等配置文化,并將其中的配置頂綁定到對應的Java對象上,這些對象被稱為Spring Bean。
- 創建 Spring IoC 容器:SpringBoot 會根據配置文件中的信息創建一個Spring IoC 容器,并將其中的所有Bean都裝載到容器中,在這個過程中,SpringBoot 會自動掃描所有的類,并根據注解自動配置Bean。
- 運行應用程序:SpringBoot 會自動其實Web服務器,監聽客戶端請求,并將請求交給合適的Controller 進行處理。在 Controller 中,SpringBoot 會自動綁定請求參數和響應結果,并調用 Service處理業務邏輯。
- 處理請求:在處理請求的過程中,SpringBoot 會自動執行攔截器、過濾器等組件,以及處理異常、日志等功能。同時,SpringBoot 還提供了緩存、事務、安全、任務調度等常用功能,方便開發者使用。
- 關閉應用程序:當應用程序關閉時,SpringBoot 會自動銷毀所有的 Bean,釋放資源,并關閉Web服務器。