java框架常見的面試題
1.談談你對MVC的理解
MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。MVC是一種設計模式,它強制性的把應用程序的輸入、處理和輸出分開。
MVC中的模型、視圖、控制器它們分別擔負著不同的任務。
視圖: 視圖是用戶看到並與之交互的界面。視圖向用戶顯示相關的數據,並接受用戶的輸入。視圖不進行任何業務邏輯處理。
模型: 模型表示業務數據和業務處理。相當於JavaBean。一個模型能為多個視圖提供數據。這提高了應用程序的重用性
控制器: 當用戶單擊Web頁面中的提交按鈕時,控制器接受請求並調用相應的模型去處理請求。
然後根據處理的結果調用相應的視圖來顯示處理的結果。
MVC的處理過程:首先控制器接受用戶的請求,調用相應的模型來進行業務處理,並返回數據給控制器。控制器調用相應的視圖來顯示處理的結果。並通過視圖呈現給用戶。
如果在項目中要對應MVC的話:View對應項目的jsp,Controler對應Action,Model對應Service+do層的業務邏輯和持久層的操作SpringMVC工作原理?
1、用戶發送請求至前端控制器DispatcherServlet
2、DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3、處理器映射器找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一並返回給DispatcherServlet
4、DispatcherServlet調用HandlerAdapter處理器適配器
5、HandlerAdapter經過適配調用具體的處理器(Controller,也叫後端控制器)。
6、Controller執行完成返回ModelAndView
7、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
8、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
9、ViewReslover解析後返回具體View
10、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。
11、DispatcherServlet響應用戶
為何使用spring
sping是一個輕量級的控制反轉(ioc),面向切面(Aop),面向接口、事務管理、包容足進其他框架;使用系統中用到的其他框架耦合程度大大降低,拓展性強,簡單易用好管理。
Sping 在項目中如何充當粘合劑
1在項目中利用sping的IoC(控制反轉或依賴註入)明確地定義組件接口(如UserDAo),開發者可以獨立開發各個組件,然後根據組件間的依賴關系組裝(UserAction 依賴於UserService),UserService依賴UserDAo)運行,很好的把Struts(Action)和hibernate(DAo)的實現結合起來。
2 spring 的事務管理把hibernate 對數據庫的操作進行了事務配置
描述在系統中如何使用了sping的事務控制,
Sping 事務包括編程式事務和聲明式事務。在系統中使用了聲明式的事務管理是用sping的Aop來實現的,配置了只讀事務和回滾事務,當出現錯誤後進行回滾操作。在項目中通過AOP切入事務到serivce層,這樣子做能使一次業務邏輯操作如果包括幾個數據庫操作都控制在一個事務中
sping中的概念
什麽是IoC和DI?DI是如何實現的?
答:IoC叫控制反轉,是Inversion of Control的縮寫,DI(Dependency Injection)叫依賴註入,是對IoC更簡單的詮釋。控制反轉是把傳統上由程序代碼直接操控的對象的調用權交給容器,通過容器來實現對象組件的裝配和管理。所謂的”控制反轉”就是對組件對象控制權的轉移,從程序代碼本身轉移到了外部容器,由容器來創建對象並管理對象之間的依賴關系。IoC體現了好萊塢原則 – “Don’t call me, we will call you”。依賴註入的基本原則是應用組件不應該負責查找資源或者其他依賴的協作對象。配置對象的工作應該由容器負責,查找資源的邏輯應該從應用組件的代碼中抽取出來,交給容器來完成。DI是對IoC更準確的描述,即組件之間的依賴關系由容器在運行期決定,形象的來說,即由容器動態的將某種依賴關系註入到組件之中。
舉個例子:一個類A需要用到接口B中的方法,那麽就需要為類A和接口B建立關聯或依賴關系,最原始的方法是在類A中創建一個接口B的實現類C的實例,但這種方法需要開發人員自行維護二者的依賴關系,也就是說當依賴關系發生變動的時候需要修改代碼並重新構建整個系統。如果通過一個容器來管理這些對象以及對象的依賴關系,則只需要在類A中定義好用於關聯接口B的方法(構造器或setter方法),將類A和接口B的實現類C放入容器中,通過對容器的配置來實現二者的關聯。
依賴註入可以通過setter方法註入(設值註入)、構造器註入和接口註入三種方式來實現,Spring支持setter註入和構造器註入,通常使用構造器註入來註入必須的依賴關系,對於可選的依賴關系,則setter註入是更好的選擇,setter註入需要類提供無參構造器或者無參的靜態工廠方法來創建對象
什麽叫AOP(面向切面編程)?
答:AOP(Aspect-Oriented Programming)指一種程序設計範型,該範型以一種稱為切面(aspect)的語言構造為基礎,切面是一種新的模塊化機制,用來描述分散在對象、類或方法中的橫切關註點(crosscutting concern)
4.mybatis的工作原理?
MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之後關閉SqlSession。
3.Hibernate的工作原理?
1.通過Configuration().configure();讀取並解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>讀取並解析映射信息
3.通過config.buildSessionFactory();//創建SessionFactory
4.sessionFactory.openSession();//打開Sesssion
5.session.beginTransaction();//創建事務Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事務
8.關閉Session
9.關閉SesstionFactory
為什麽要用:1對於JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。
2 Hibernate 是一個基於JDBC的主流框架,是一個優秀的ORM.很大程度的簡化DAO層的編碼工作
3 Hibernate 使用Java反射機制,而不是字節碼增強程序來實現透明性。
4 hibernate 的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系
Struts原理
發送http請求
Web服務器(tomcat)
執行struts核心過濾器strutsPrepareAanltxx
加載struts配置文件中配置信息,找到對應的Action類並實例化
執行各類攔截器和Action中對應方法
配置文件中找到返回結果
轉發到具體頁面或其他操作
struts有什麽優缺點
優點:1 實現MVC模式,結構清晰;
2 豐富的struts的標記庫,利用好能大大提高開發效率
3 全局結果與聲明式異常
4 可以使用OGNL進行參數傳遞
5 各類方便使用的攔截器
缺點 1 轉到表現層時,需要配置結果頁面;頁面多了比較復雜
2 對Servlet 的依賴性過強
3 struts 標簽稍微比el 表達式繁重
SpingBoot幾個常用的註解
@RestController和@Controller指定一個類,作為控制器的註解
(2)@RequestMapping方法級別的映射註解,這一個用過Spring MVC的小夥伴相信都很熟悉
(3)@EnableAutoConfiguration和@SpringBootApplication是類級別的註解,根據maven依賴的jar來自動猜測完成正確的spring的對應配置,只要引入了spring-boot-starter-web的依賴,默認會自動配置Spring MVC和tomcat容器
(4)@Configuration類級別的註解,一般這個註解,我們用來標識main方法所在的類,完成元數據bean的初始化。
(5)@ComponentScan類級別的註解,自動掃描加載所有的Spring組件包括Bean註入,一般用在main方法所在的類上
(6)@ImportResource類級別註解,當我們必須使用一個xml的配置時,使用@ImportResource和@Configuration來標識這個文件資源的類。
(7)@Autowired註解,一般結合@ComponentScan註解,來自動註入一個Service或Dao級別的Bean
(8)@Component類級別註解,用來標識一個組件,比如我自定了一個filter,則需要此註解標識之後,Spring Boot才會正確
SpringBoot特性
1、創建獨立的Spring項目
2、內置Tomcat和Jetty容器
3、提供一個starter POMs來簡化Maven配置
4、提供了一系列大型項目中常見的非功能性特性,如安全、指標,健康檢測、外部配置等
5、完全沒有代碼生成和xml配置文件
SpringBoot優缺點
優點:
1、快速構建項目。
2、對主流開發框架的無配置集成。
3、項目可獨立運行,無須外部依賴Servlet容器。
4、提供運行時的應用監控。
5、極大的提高了開發、部署效率。
6、與雲計算的天然集成。
缺點:
1、如果你不認同spring框架,也許這就是缺點。
SpringBoot核心功能
1、獨立運行Spring項目
Spring boot 可以以jar包形式獨立運行,運行一個Spring Boot項目只需要通過java -jar xx.jar來運行。
2、內嵌servlet容器
Spring Boot可以選擇內嵌Tomcat、jetty或者Undertow,這樣我們無須以war包形式部署項目。
3、提供starter簡化Maven配置
spring提供了一系列的start pom來簡化Maven的依賴加載,例如,當你使用了spring-boot-starter-web,會自動加入如圖5-1所示的依賴包。
4、自動裝配Spring
SpringBoot會根據在類路徑中的jar包,類、為jar包裏面的類自動配置Bean,這樣會極大地減少我們要使用的配置。當然,SpringBoot只考慮大多數的開發場景,並不是所有的場景,若在實際開發中我們需要配置Bean,而SpringBoot滅有提供支持,則可以自定義自動配置。
5、準生產的應用監控
SpringBoot提供基於http ssh telnet對運行時的項目進行監控。
6、無代碼生產和xml配置
SpringBoot不是借助與代碼生成來實現的,而是通過條件註解來實現的,這是Spring4.x提供的新特性。
什麽是SpringBoot
Spring Boot是Spring社區發布的一個開源項目,旨在幫助開發者快速並且更簡單的構建項目。大多數SpringBoot項目只需要很少的配置文件。
java框架常見的面試題