前言
還在機械地打程式碼?我們很多開發者在開發 Spring 的程式的時候,很多的情況下,都是被動的接受了前輩們為我們做好的 Spring 特性案例。這樣以來,確實在很大的程度上減少了我們開發的成本,但是也同時喪失了一個極好的學習機會,從而限制我們開發員的橫向擴充套件能力。
只知道如何使用,卻不知道做了什麼,那麼你註定只能是一個碼農。Spring 框架幾乎整合一半 Javaweb 開發的江山,但是你只知道如何寫,不知道為什麼要這麼寫,也不知道要如何優化。
Spring 作為一個輕量級的 Java 開發框架,將面向介面的程式設計思想貫穿整個 Java 系統應用,因此在 Java 面試中常被提。本文通過代理模式和Spring面試中的一些問題來聊一聊Spring框架中的重要知識點!
代理模式相關問題
- 為什麼需要代理模式?
- 講講靜態代理模式的優點及其瓶頸?
- 對Java 介面代理模式的實現原理的理解?
- 如何使用 Java 反射實現動態代理?
- Java 介面代理模式的指定增強?
- 談談對Cglib 類增強動態代理的實現?
Spring AOP相關問題
- 什麼是 AOP?
- point cut,advice,Join point是什麼?
- join point 和 point cut 的區別?
- 怎麼理解面向切面程式設計的切面?
- 談談對SpringAOP Weaving(織入)的理解?
- 談談SpringAOP Introduction(引入)的理解?
- 講解OOP與AOP的簡單對比?
- 講解JDK 動態代理和 CGLIB 代理原理以及區別?
- 講解Spring 框架中基於 Schema 的 AOP 實現原理?
- 講解Spring 框架中如何基於 AOP 實現的事務管理?
Spring IOC相關問題
- 什麼是 IOC?
- 談談對控制反轉的設計思想的理解?
- 怎麼理解 Spring IOC 容器?
- Spring 中有多少種 IOC 容器?
- Spring IOC 怎麼管理 Bean 之間的依賴關係,怎麼避免迴圈依賴?
- 對Spring IOC 容器的依賴注入的理解?
- 說說對Spring IOC 的單例模式和高階特性?
- BeanFactory 和 FactoryBean 有什麼區別,BeanFactory 和 ApplicationContext 又有什麼不同?
- Spring 在 Bean 建立過程中是如何解決迴圈依賴的?
- 談談Spring Bean 建立過程中的設計模式?
註解相關問題
- 註解是一種什麼樣的程式設計思想?
- 為何能夠直接使用@Autowired進行依賴注入?是如何工作的?
- Spring 是如何通過@AutoWired 自動注入 Bean 屬性和 Map,List 集合的?
- @Required 是如何起到檢查xml裡面屬性有沒有被配置的?
- Spring 框架是如何把標註@Component 的 Bean 注入到容器?
- @Configuration,@ComponentScan,@Import,@Bean 註解是是如何工作的?
- 使用@PropertySource 引入配置檔案,那麼配置檔案裡面的配置是如何被註冊到 Spring 環境裡面的?
- 講解如何通過自定義註解實現一個簡單的樹形文件生成?
事務相關問題
- 在 XML 裡面配置了一個 SqlSessionFactoryBean 後,其究竟做了什麼?
- 在 XML 裡面配置了一個 MapperScannerConfigurer 後,其究竟做了什麼?
- 在執行 Mapper 介面的查詢方法後,發生了什麼?
- <tx:advice/>、<aop:config> 標籤如何建立事務切面的?
- 標籤新增後為何就可以使用註解式事務了?
- 為什麼會報 Transaction rolled back because it has been marked as rollback-only 異常?
- Transactional 註解是否可以加在 private、protected 方法上?
- 事務的傳播屬性到底有什麼用,巢狀事務到底又是怎麼一回事?
- 為什麼丟擲了異常,事務卻沒有回滾?
- Spring 事務是如何保證執行緒安全的?
如何系統正確的學習
我認為有三個維度來說明:這個框架是為了解決什麼問題而誕生的?這個框架的核心思想是什麼?這個框架適合應用到哪些場景?說到思想,我覺得程式設計的靈魂就是思想,沒有思想的程式設計和鹹魚沒什麼區別。“不要重複造輪子”,當時聽了趕腳這句話挺高大上的,現在我認為這句話只能在某一方面是正確了。
首先我來說一下為什麼要學會造輪子--因為你會造輪子後,用別人的輪子時才會明白其原理,用的時候才會得心應手,如果你對一個框架的理解只是停留在用,用的多熟練的階段的話,那麼你就是一個“碼畜”,別人隨時可以替代你。或許有人會說,專案時間緊根本不允許你寫一個輪子、你寫的還有那些大牛們寫的好嗎等理由反駁。但我想說的是:我沒說專案中非得用自己寫的輪子,自己寫的輪子不一定要和別人比,因為造輪子的目的是要理解這些輪子的思想。
說這麼多其實就是想告訴大家學習框架要理解框架的底層的原理,要掌握的就是最常用的原理。在這我分享一個開源框架的系統的思維學習樹圖給大家,希望能給有需要的朋友提供一些幫助!
結語
上文提到的關於Spring的面試問題和常見問題我總結成了面試題及視訊資料在群裡免費分享還有更多關於Kafka、Mysql、Tomcat、Docker、MyBatis、Nginx、Netty、Dubbo、Redis、Spring cloud、分散式、高併發、效能調優、微服務等架構技術資料和架構面試題資料分享給有需要的朋友!
資料領取方式:
推薦一個程式設計師學習秋秋群:856443934。群裡有分享的視訊,還有思維導圖
群公告有視訊,都是乾貨的,你可以下載來看。主要分享分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊。