2020年3月23日一次java電話面試

一、你本身以前的項目開發中, 所涉及的技術棧有哪些?html

二、springMVC的流程是什麼?主要組件說明?SpringMVC的優勢?前端

----------------springMVC的流程------------------------

  • 第一步:發起請求到前端控制器(DispatcherServlet)
  • 第二步:前端控制器請求HandlerMapping查找 Handler (能夠根據xml配置、註解進行查找)
  • 第三步:處理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping會把請求映射爲HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象,多個HandlerInterceptor攔截器對象),經過這種策略模式,很容易添加新的映射策略
  • 第四步:前端控制器調用處理器適配器去執行Handler
  • 第五步:處理器適配器HandlerAdapter將會根據適配的結果去執行Handler
  • 第六步:Handler執行完成給適配器返回ModelAndView
  • 第七步:處理器適配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一個底層對象,包括 Model和view)
  • 第八步:前端控制器請求視圖解析器去進行視圖解析 (根據邏輯視圖名解析成真正的視圖(jsp)),經過這種策略很容易更換其餘視圖技術,只須要更改視圖解析器便可
  • 第九步:視圖解析器向前端控制器返回View
  • 第十步:前端控制器進行視圖渲染 (視圖渲染將模型數據(在ModelAndView對象中)填充到request域)
  • 第十一步:前端控制器向用戶響應結果 

----------------主要組件說明------------------------

首先,咱們得說出每一個組件是作什麼的,固然要每一個單詞讀出來最好。DispatcherServlet:web

spring mvc的入口,整個框架運行就是在這個servlet中完成。spring

HandlerMapping:處理器映射起。用於映射每一個處理方法對應的請求路徑。是一個map結構<url,method>。sql

handler:處理器。實際上就是控制器中的每一個處理方法。數據庫

HandlerAdapter:處理器適配器。專門用來調用handler,由於在spring mvc中每一個處理方法參數以及返回類型都不同,所以須要用適配器來適配。json

ViewResovler:視圖解析器。用於指定視圖技術,以及視圖技術相關的配置。api

View:視圖。springmvc 中支持多種視圖,除了jsp外 還有xml,json,pdf等。tomcat

---------------------SpringMVC的優勢-----------------

1.清晰的角色劃分:控制器(controller)、驗證器(validator)、命令對象(command obect)、表單對象(form object)、模型對象(model object)、Servlet分發器(DispatcherServlet)、處理器映射(handler mapping)、試圖解析器(view resoler)等等。每個角色均可以由一個專門的對象來實現。安全

2.強大而直接的配置方式:將框架類和應用程序類都能做爲JavaBean配置,支持跨多個context的引用,例如,在web控制器中對業務對象和驗證器validator)的引用。

3.可適配、非侵入:能夠根據不一樣的應用場景,選擇何事的控制器子類(simple型、command型、from型、wizard型、multi-action型或者自定義),而不是一個單一控制器(好比Action/ActionForm)繼承。

4.可重用的業務代碼:可使用現有的業務對象做爲命令或表單對象,而不須要去擴展某個特定框架的基類。

5.可定製的綁定(binding)和驗證(validation):好比將類型不匹配做爲應用級的驗證錯誤,這能夠保證錯誤的值。再好比本地化的日期和數字綁定等等。在其餘某些框架中,你只能使用字符串表單對象,須要手動解析它並轉換到業務對象。

6.可定製的handler mapping和view resolution:Spring提供從最簡單的URL映射,到複雜的、專用的定製策略。與某些web MVC框架強制開發人員使用單一特定技術相比,Spring顯得更加靈活。

7.靈活的model轉換:在Springweb框架中,使用基於Map的鍵/值對來達到輕易的與各類視圖技術集成。

8.可定製的本地化和主題(theme)解析:支持在JSP中可選擇地使用Spring標籤庫、支持JSTL、支持Velocity(不須要額外的中間層)等等。

9.簡單而強大的JSP標籤庫(Spring Tag Library):支持包括諸如數據綁定和主題(theme)之類的許多功能。他提供在標記方面的最大靈活性。

10.JSP表單標籤庫:在Spring2.0中引入的表單標籤庫,使用在JSP編寫表單更加容易。

11.Spring Bean的生命週期:能夠被限制在當前的HTTp Request或者HTTp Session。準確的說,這並不是Spring MVC框架自己特性,而應歸屬於Spring MVC使用的WebApplicationContext容器。

------------------mybatis 的 #和$ 的區別是什麼----------------

三、mybatis 的 #和$ 的區別是什麼?

#{}是sql的參數佔位符,Mybatis會將sql中的#{}替換爲?號,在sql執行前會使用PreparedStatement的參數設置方法,按序給sql的?號佔位符設置參數值

mybatis 在對 sql 語句進行預編譯以前,會對 sql 進行動態解析,解析爲一個 BoundSql 對象,也是在此處對動態 SQL 進行處理的。在動態 SQL 解析階段, #{ } 和 ${ } 會有不一樣的表現

#{} 在動態解析的時候, 會解析成一個參數標記符。select * from user where name = ?;

${}在動態解析的時候,會將咱們傳入的參數當作String字符串填充到咱們的語句中,select * from user where name = 「dato」; 預編譯以前的 SQL 語句已經不包含變量了,徹底已是常量數據了。

 ${ } 變量的替換階段是在動態 SQL 解析階段,而 #{ }變量的替換是在 DBMS (數據庫管理系統)中。

#方式可以很大程度防止sql注入,$方式沒法防止Sql注入。

$方式通常用於傳入數據庫對象,例如傳入表名.

-----------深刻理解Spring兩大特性:IoC和AOP----------------

http://www.javashuo.com/article/p-ypnucozp-gt.html

---------Spring的優缺點-----------------------

1,下降了組件之間的耦合性,實現了軟件各層之間的解耦。

2,可使用容器提供的衆多服務,如事務管理,消息服務等。

3,容器提供單例模式支持。

4,容器提供了AOP技術,利用它能夠很容易實現一些攔截,如權限攔截,運行期監控等。

5,容器提供了衆多的輔助類,可以加快應用的開發。

6,spring對於主流的應用框架提供了很好的支持,例如mybatis等。

7,spring屬於低入侵式設計。

8,獨立於各類應用服務器。

9,spring的DI機制下降了業務對象替換的複雜性。

10,spring的高度開放性,並不強制應用徹底依賴於它,開發者能夠自由選擇spring的部分或者所有。

spring的缺點:

使用了大量的反射機制,反射機制很是佔用內存。

------------SpringBoot是什麼?SpringBoot的優缺點有哪些?-------

什麼是SpringBoot

  • SpringBoot是基於Spring的一個微框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。

SpringBoot的優勢

  1. 能夠建立獨立的Spring應用程序,而且基於其Maven或Gradle插件,能夠建立可執行的JARs和WARs;
  2. 內嵌Tomcat或Jetty等Servlet容器;
  3. 提供自動配置的「starter」項目對象模型(POMS)以簡化Maven配置;
  4. 儘量自動配置Spring容器;
  5. 提供準備好的特性,如指標、健康檢查和外部化配置;
  6. 絕對沒有代碼生成,不須要XML配置。

SpringBoot的缺點

  1. 只是爲了提升開發效率和提高生產力。
  2. 沒有相應的服務發現、註冊和安全管控方案的配套功能,監控功能也須要與現有的監控對接。
  3. 僅適用於全新Spring項目,與傳統項目的轉換很是困難。
 
 

------------------------SpringBoot與Spring的區別---------------

SpringBoot不是Spring官方的框架模式,而是一個團隊在Spring4.0版本上二次開發並開源公佈出來的。簡而言之,SpringBoot就是一個輕量級,簡化配置和開發流程的web整合框架。SpringBoot是最近這幾年才火起來的,那麼它到底與Spring有啥區別呢?想了解區別,其實就是SpringBoot提供了哪些特性:

Spring Boot能夠創建獨立的Spring應用程序;內嵌瞭如Tomcat,Jetty和Undertow這樣的容器,也就是說能夠直接跑起來,用不着再作部署工做了;無需再像Spring那樣搞一堆繁瑣的xml文件的配置;能夠自動配置Spring。SpringBoot將原有的XML配置改成Java配置,將bean注入改成使用註解注入的方式(@Autowire),並將多個xml、properties配置濃縮在一個appliaction.yml配置文件中。提供了一些現有的功能,如量度工具,表單數據驗證以及一些外部配置這樣的一些第三方功能;整合經常使用依賴(開發庫,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM能夠簡化Maven的配置。當咱們引入核心依賴時,SpringBoot會自引入其餘依賴。

相關文章
相關標籤/搜索