1、compareable和compactor區別
定義與包位置:Comparable是一個接口,位于java.lang包,需要類去實現接口;而Compactor是一個外部比較器,位于java.util包
用法:Comparable只需要實現int compareTo(T o)
?方法,比較當前對象與參數對象的順序
Compactor實現int compare(T o1, T o2)
?方法,比較兩個外部對象的順序
排序邏輯:Comparable由類自身定義唯一排序規則,Compactor可以自定義多種排序規則
2、SpringIOC,什么是控制反轉,什么是依賴注入?
IOC其實就是控制反轉,依賴注入(DI)是SpringIOC的一種實現方式
IOC(Inversion of Control):IOC指將對象的創建和管理權交給Spring容器(如ApplicationContext
)統一控制。傳統開發中,對象通過new
主動創建依賴,而IoC模式下,容器負責對象的生命周期和依賴關系
DI(Dependency Injection):是IoC的具體實現方式,指容器在運行時動態將依賴對象注入到目標組件中
依賴注入的兩種實現方式:
- XML配置:通過
<bean>
標簽定義對象及依賴關系。 - 注解:如
@Autowired
(按類型注入)、@Resource
(按名稱注入)、@Component
等,簡化配置
依賴注入的三種方式
構造方法注入
Setter方法注入
屬性注入:@Autowired,@Resources
spring容器的核心作用
創建和管理bean、依賴注入、管理bean生命周期
SpringAOP是什么?特點是什么
Spring AOP(面向切面編程)是 Spring 框架的核心模塊之一,通過動態代理技術將橫切關注點(如日志、事務、權限等)與核心業務邏輯解耦。
核心是:
切面(Aspect)
封裝橫切邏輯的模塊化單元,通過@Aspect
注解定義。例如日志切面類中可包含記錄方法執行時間的代碼
連接點(JoinPoint)
程序執行過程中的可插入點,如方法調用、異常拋出等。Spring AOP僅支持方法級別的連接點
通知(Advice)
通知類型:
- 前置通知(@Before):在方法執行前觸發(如權限校驗)。
- 后置通知(@After):在方法執行后觸發(如日志記錄)。
- 環繞通知(@Around):包裹目標方法,可控制執行流程(如事務管理)。
- 異常通知(@AfterThrowing):在方法拋出異常時觸發(如錯誤處理)。
- 返回通知(@AfterReturning):在方法正常返回后觸發
優點:與業務代碼解耦,提高代碼復用性,代碼靈活性提高
代理
靜態代理
動態代理
JDK動態代理:需要實現至少一個接口,這個接口可以是任意接口,spring會掃描是否使用了接口,如果有接口就用JDK動態代理,運行時動態生成接口實現類,用代理去掉用實現類的方法
CGLIB動態代理:是一個外部的類庫,支持去代理未實現接口的普通類
JDK動態代理與CGLIB在Spring中互補使用,前者適用于接口代理,后者覆蓋無接口場景
3、BIO/NIO/AIO區別
同步:同步就是發起一個調用后,被調用者未處理完請求之前,調用者不返回
異步:異步就是發起一個調用后,但是被調用者并沒有返回結果,此時調用者可以處理其他請求。
阻塞:阻塞就是發起一個請求,調用者一直等待請求結果返回,也就是當前線程會被掛起,無法從事其他任務,只有當條件就緒才能繼續。
非阻塞:非阻塞就是發起一個請求,調用者不用一直等著結果返回,可以先去干其他事情。
-
BIO是同步阻塞I/O模型,它使用一個線程來處理一個請求,如果這個請求沒有被處理完,這個線程就會一直等待,直到請求處理完成。
-
NIO是同步非阻塞I/O模型,它使用單個線程來處理多個請求,這些請求可以同時被這個線程處理,它通過輪詢的方式來處理I/O請求,如果有I/O請求就處理,沒有就繼續輪詢。這種模型適用于連接數較多但是連接時間短的情況
-
AIO是異步非阻塞I/O模型,這種模型不需要為每個請求創建一個線程,由操作系統內部的線程來處理I/O請求,同時它也具有非阻塞的特性,I/
O請求不會一直等待,而是異步執行。這種模型適用于連接數很多的情況
舉個生活中簡單的例子,你媽媽讓你燒水,小時候你比較笨啊,在那里傻等著水開(同步阻塞)。等你稍微再長大一點,你知道每次燒水的空隙可以去干點其他事,然后只需要時不時來看看水開了沒有(同步非阻塞)。后來,你們家用上了水開了會發出聲音的壺,這樣你就只需要聽到響聲后就知道水開了,在這期間你可以隨便干自己的事情,壺響了你需要去倒水了(異步非阻塞)。
4、final 在 Java 中有什么作用?
-
final 修飾的類叫最終類,該類不能被繼承。
-
final 修飾的方法不能被重寫。
-
final 修飾的變量叫常量,常量必須初始化,初始化之后值就不能被修改。
5、Java中的容器都有哪些?
6、http和https區別
傳輸形式:http是明文傳輸的,https加密傳輸,采用對稱加密和非對稱加密結合的方式
傳輸協議:http基于TCP協議,而https基于SSL/TLS 協議
端口不同:http端口為80,https端口為443
證書:https需要證書認證,而http不需要證書
7、Array 和 ArrayList 有何區別
-
Array 可以存儲基本數據類型和對象,ArrayList 只能存儲對象。
-
Array 是指定固定大小的,而 ArrayList 大小是自動擴展的。
-
Array 內置方法沒有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。
8、哪里用到了對稱加密和非對稱加密?
對稱加密:JWT生成token
非對稱:https,阿里云效代碼倉庫
9、spring框架哪里用到了反射?
1、bean的實例化:Spring通過反射動態創建對象實例,無需硬編碼new
操作
2、依賴注入:通過反射調用setter
方法或直接修改字段(如Field.set()
?),將依賴對象注入目標Bean
3、Spring AOP利用反射生成代理對象
4、Spring MVC處理請求:Spring MVC通過反射解析@RequestMapping
標記的方法,動態匹配請求參數并執行目標方法
5、數據庫訪問:Spring JDBC通過反射將ResultSet
數據映射到實體類字段
10、