一.springMVC 的工做(實現)原理?javascript
工做原理html
一、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,若是匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.java
二、DipatcherServlet接收到這個請求以後將根據請求的信息(包括URL、Http方法、請求報文頭和請求參數Cookie等)以及HandlerMapping的配置找處處理請求的處理器(Handler)。android
3-四、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的調用。程序員
五、Handler對數據處理完成之後將返回一個ModelAndView()對象給DispatcherServlet。web
六、Handler返回的ModelAndView()只是一個邏輯視圖並非一個正式的視圖,DispatcherSevlet經過ViewResolver將邏輯視圖轉化爲真正的視圖View。ajax
七、Dispatcher經過model解析出ModelAndView()中的參數進行解析最終展示出完整的view並返回給客戶端。redis
二.struts2工做(實現)原理?spring
工做原理sql
一個請求在Struts2框架中的處理大概分爲如下幾個步驟
一、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
二、這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin)
三、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否須要調用某個Action,FilterDispatcher是控制器的核心,就是mvc中c控制層的核心。
四、若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy
五、ActionProxy經過ConfigurationManager詢問框架的配置文件,找到須要調用的Action類 ,這裏,咱們通常是從struts.xml配置中讀取。
六、ActionProxy建立一個ActionInvocation的實例。
七、ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。
三.SpringMVC 和Struts2的區別?
1. 機制:spring mvc的入口是servlet,而struts2是filter,這樣就致使了兩者的機制不一樣。
2. 性能:spring會稍微比struts快。spring mvc是基於方法的設計,而sturts是基於類,每次發一次請求都會實例一個action,每一個action都會被注入屬性,而spring基於方法,粒度更細,但要當心把握像在servlet控制數據同樣。spring3 mvc是方法級別的攔截,攔截到方法後根據參數上的註解,把request數據注入進去,在spring3 mvc中,一個方法對應一個request上下文。而struts2框架是類級別的攔截,每次來了請求就建立一個Action,而後調用setter getter方法把request中的數據注入;struts2其實是通 setter getter方法與request打交道的;struts2中,一個Action對象對應一個request上下文。
3. 參數傳遞:struts是在接受參數的時候,能夠用屬性來接受參數,這就說明參數是讓多個方法共享的。
4. 設計思想上:struts更加符合oop(面向對象編程)的編程思想, spring就比較謹慎,在servlet上擴展。
四.三大框架整合步驟(詳細)
一、導入必須框架jar()
二、jar addtoBuildPath
三、 創建對應各個層包
四、創建bean(entry)-----加上hibernate須要的對應的註解
五、web.xml加入struts須要的攔截(只針對struts的配置)
在action中實現ModelDriven 接口,能夠快速從表單裝入對應實體屬性
六、新建struts.xml,設置好對應跳轉關係
七、根據struts創建對應jsp和action
注意事項:
一、須要去掉整合spring須要的struts2-spring-plugin-2.1.6.jar,否則運行只有struts配置時,會報錯。
二、注意路徑問題。在struts.xml中的package name="user" 是跳轉的「相對值」,因此,若是設置jsp的所在的文件夾(若是設置文件夾的話)和strut對應包的name對應,
可使用同一個對應值,轉發時比較方便,直接寫對應jsp便可,由於會默認包含對應所在的包。或者,使用絕對路徑(比較好理解),直接 /jsp所在文件夾/xxx.jsp
五.JAVA中反射是什麼?
java一般是先有類再有對象,有對象我就能夠調用方法或者屬性。反射實際上是經過Class對象來調用類裏面的方法。經過反射能夠調用私有方法和私有屬性。大部分框架都是運用反射原理
Mybatis部分
一、mybatis與hibernate區別?
Hibernate是面向對象的思想操做數據、mybatis是以純sql操做數據
相對於mybatis容易優化.擴展性好,可是移植性差。
二、mybatis如何動態sql?
MyBatis的動態SQL是基於OGNL表達式的
SpringMVC部分
一、springmvc工做原理
1.spring mvc請全部的請求都提交給DispatcherServlet,它會委託應用系統的其餘模塊負責負責對請求進行真正的處理工做。
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。
什麼是單例?
單例對象(Singleton)是一種經常使用的設計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。這樣的模式有幾個好處:
第一種(懶漢,線程安全):
public class Singleton {
private static Singleton instance;
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
第二種(餓漢):
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
private Singleton (){}{
return instance;
}
}
什麼是webserivce?
Webservice的一個最基本的目的就是提供在各個不一樣平臺的不一樣應用系統的協同工做能力。
Web service 就是一個應用程序,它向外界暴露出一個可以經過Web進行調用的API。
SOAP是一種簡單基於xml的輕量協議,用戶web上交換結構化信息和類型信息。
soap請求是HTTP POST的一個專用版本,遵循一種特殊的xml消息格式Content-type設置爲: text/xml任何數據均可以xml化。
Spring部分
一、說說spring?
spring的核心是控制反轉、依賴注入,aop(面向切面)至關於把每一個bean與bean之間的關係交給第 三方容器進行管理.
二、說springioc、springvaop?
spring IOC 至關於把每一個bean與bean之間的關係交給第三方容器管理。而這個容器就是spring
springaop 面向切面的編程,或AOP, 是一種編程技術,容許程序模塊化橫向切割關注點,或橫切典型的責任劃分,如日誌和事務管理。 springaop 就是用 Javva的動態代理
三、簡述spring的優缺點?
spring 的優勢:
1.下降了組件之間的耦合性 ,實現了軟件各層之間的解耦?
2.可使用容易提供的衆多服務,如事務管理,消息服務等?
3.容器提供單例模式支持
4.容器提供了AOP技術,利用它很容易實現如權限攔截,運行期監控等功能?
5.容器提供了衆多的輔助類,能加快應用的開發?
6.spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等?
7.spring屬於低侵入式設計,代碼的污染極低?
8.獨立於各類應用服務器?
9.spring的DI機制下降了業務對象替換的複雜性?
10.Spring的高度開放性,並不強制應用徹底依賴於Spring,開發者能夠自由選擇spring的部分或所有?
缺點:用到了大量的反射機制,執行效率比較低
四、spring的生命週期?
Spring容器 從XML 文件中讀取bean的定義,並實例化bean。
Spring根據bean的定義填充全部的屬性。
若是bean實現了BeanNameAware 接口,Spring 傳遞bean 的ID 到 setBeanName方法。
若是Bean 實現了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。
若是有任何與bean相關聯的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內調用它們。
若是bean實現IntializingBean了,調用它的afterPropertySet方法,若是bean聲明瞭初始化方法,調用此初始化方法。
若是有BeanPostProcessors 和bean 關聯,這些bean的postProcessAfterInitialization() 方法將被調用。
若是bean實現了 DisposableBean,它將調用destroy()方法。
五、Spring框架中的單例bean是線程安全的嗎?
不,Spring框架中的單例bean不是線程安全的。
六、說說spring的做用域
singleton:在每一個Spring IoC容器中一個bean定義對應一個對象實例。
prototype:一個bean定義對應多個對象實例
request:在一次HTTP請求中,一個bean定義對應一個實例;即每次HTTP請求將會有各自的bean實例, 它們依據某個bean定義建立而成。該做用域僅在基於web的Spring ApplicationContext 情形下有效。
session:在一個HTTP Session 中,一個bean定義對應一個實例。該做用域僅在基於web的SpringApplicationContext 情形下有效。
global session:在一個全局的HTTP Session 中,一個bean定義對應一個實例。典型狀況下,僅在使用portlet context的時候有效。該做用域僅在基於web的Spring ApplicationContext 情形下有效。
7. @Required 註解
這個註解代表bean的屬性必須在配置的時候設置,經過一個bean定義的顯式的屬性值或經過自動裝配,若@Required註解的bean屬性未被設置,容器將拋出BeanInitializationException。
8. @Autowired 註解
@Autowired 註解提供了更細粒度的控制,包括在何處以及如何完成自動裝配。它的用法和@Required同樣,修飾setter方法、構造器、屬性或者具備任意名稱和/或多個參數的PN方法。
9. @Qualifier 註解
當有多個相同類型的bean卻只有一個須要自動裝配時,將@Qualifier 註解和@Autowire 註解結合使用以消除這種混淆,指定須要裝配的確切的bean。
十、Spring面向切面編程(AOP)
a. 解釋AOP
面向切面的編程,或AOP, 是一種編程技術,容許程序模塊化橫向切割關注點,或橫切典型的責任劃分,如日誌和事務管理。
b. Aspect 切面
AOP核心就是切面,它將多個類的通用行爲封裝成可重用的模塊,該模塊含有一組API提供橫切功能。好比,一個日誌模塊能夠被稱做日誌的AOP切面。根據需求的不一樣,一個應用程序能夠有若干切面。在Spring AOP中,切面經過帶有@Aspect註解的類實現。
c.在Spring AOP 中,關注點和橫切關注的區別是什麼?
關注點是應用中一個模塊的行爲,一個關注點可能會被定義成一個咱們想實現的一個功能。
橫切關注點是一個關注點,此關注點是整個應用都會使用的功能,並影響整個應用,好比日誌,安全和數據傳輸,幾乎應用的每一個模塊都須要的功能。所以這些都屬於橫切關注點。
d. 鏈接點
鏈接點表明一個應用程序的某個位置,在這個位置咱們能夠插入一個AOP切面,它其實是個應用程序執行Spring AOP的位置。
e. 通知
通知是個在方法執行前或執行後要作的動做,其實是程序執行時要經過SpringAOP框架觸發的代碼段。
Spring切面能夠應用五種類型的通知:
before:前置通知,在一個方法執行前被調用。
after: 在方法執行以後調用的通知,不管方法執行是否成功。
after-returning: 僅當方法成功完成後執行的通知。
after-throwing: 在方法拋出異常退出時執行的通知。
around: 在方法執行以前和以後調用的通知。
f. 切點
切入點是一個或一組鏈接點,通知將在這些位置執行。能夠經過表達式或匹配的方式指明切入點。
g. 什麼是引入?
引入容許咱們在已存在的類中增長新的方法和屬性。
f. 什麼是目標對象?
被一個或者多個切面所通知的對象。它一般是一個代理對象。也指被通知(advised)對象。
g. 什麼是代理?
代理是通知目標對象後建立的對象。從客戶端的角度看,代理對象和目標對象是同樣的。
h. 有幾種不一樣類型的自動代理?
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
hibernate部分
一、說一下orm與jdbc的區別?
jdbc只是一個java操做數據庫的規範接口而已
orm不過是一種思想,對象關係映射。
ORM:是對象關係模型,如hibernate,讓你以面向對象的方式去編程。封裝了JDBC.
JDBC:是從底層訪問數據庫服務器。通常銀行,金融行業爲了安全起見,直接用JDBC訪問
二、說說hibernate?
hibernate是一個基於ORM持久框架,可讓程序員以面向對象的思想操做數據庫,提升生產效率.
三、hibernate的懶加載? 有幾種禁用方法
在Hibernate框架中,當咱們要訪問的數據量過大時,明顯用緩存不太合適, 由於內存容量有限 ,爲了減小併發量,減小系統資源的消耗,這時Hibernate用懶加載機制來彌補這種缺陷,可是這只是彌補而不是用了懶加載整體性能就提升了。
咱們所說的懶加載也被稱爲延遲加載,它在查詢的時候不會馬上訪問數據庫,而是返回代理對象,當真正去使用對象的時候纔會訪問數據庫。
1.使用代理對象:Hibernate.initialize("代理對象");
2.在須要禁用懶加載的映射文件中顯示的加入lazy = "false"
3.使用openSessionInView【須要藉助於過濾器】
四、hibernate load與get區別?
load :找不到數據的話會拋出org.hibernate.ObjectNotFoundException異常。此時hibernate會使用延遲加載加載機制
get找不到的話會返回null。
若是查詢不到數據,get 會返回 null,可是不會報錯, load 若是查詢不到數據,則報錯ObjectNotFoundException
使用get 去查詢數據,(先到一級/二級)會當即向db發出查詢請求(select ...), 若是你使用的是 load查詢數據,(先到一級、二級))即便查詢到對象,返回的是一個代理對象,若是後面沒有使用查詢結果,它不會真的向數據庫發select ,當程序員使用查詢結果的時候才真的發出select ,這個現象咱們稱爲懶加載(lazy)
五、hibernate的三種狀態?
在Hibernate中,對象有三種狀態:臨 時狀態(Transient)、持久狀態(Persistent)和遊離狀態(Detached)。
處於持久態的對象也稱爲 PO(PersistenceObject),臨時對象和遊離對象也稱爲VO(ValueObject).
六、hibernate有幾種查詢方式?
一、 屬性查詢二、 參數查詢、命名參數查詢三、 關聯查詢四、 分頁查詢五、 統計函數
七、hibernate的緩存機制
Hibernate緩存包括兩大類:Hibernate一級緩存和Hibernate二級緩存。
1.Hibernate一級緩存又稱爲「Session的緩存」。
Session內置不能被卸載,Session的緩存是事務範圍的緩存(Session對象的生命週期一般對應一個數據庫事務或者一個應用事務)。
一級緩存中,持久化類的每一個實例都具備惟一的OID。
8.Hibernate二級緩存又稱爲「SessionFactory的緩存」。
因爲SessionFactory對象的生命週期和應用程序的整個過程對應,所以Hibernate二級緩存是進程範圍或者集羣範圍的緩存,有可能出現併發問題,所以須要採用適當的併發訪問策略,該策略爲被緩存的數據提供了事務隔離級別。
第二級緩存是可選的,是一個可配置的插件,默認下SessionFactory不會啓用這個插件。
Hibernate提供了org.hibernate.cache.CacheProvider接口,它充當緩存插件與Hibernate之間的適配器。
九、簡述一下 hibernate的優缺點?
1.Hibernate的優缺點:
優勢:一、程序更加面向對象;
二、提升了生產率;
三、方便移植(修改配置文件);
四、無侵入性。
缺點:
一、效率比JDBC略差;
二、不適合批量操做。
如何優化hibernate?
what ???
JavaEE部分
一、http get與Post區別?
get:傳參是經過url傳輸,有大小限制差很少2KB吧,安全級別差,服務端Request.QueryString["id"],
post:傳參是經過form的action方式提交到服務器,基本無大小限制,安全級別比get要強點,隱藏提交URL參數
二、解釋一下什麼是 servlet;
Servlet是一種服務器端的Java應用程序,具備獨立於平臺和協議的特性,能夠生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其 他HTTP客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。 Servlet是位於Web 服務器內部的服務器端的Java 應用程序,與傳統的從命令行啓動的Java應用程序不一樣,Servlet由Web服務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機
三、servlet線程安全嗎?爲何?
servlet 是不安全的,同時一個servlet實現類只會有一個實例對象,也就是一個單利的、,因此多個線程是可能會訪問同一個servlet實例對象的。
四、說一說 Servlet 的生命週期?
servlet 有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。
這個生存期由 javax.servlet.Servlet 接口的 init,service 和 destroy 方法表達。
五、SERVLET API 中 forward()與 redirect()的區別?
forward是轉發 是不顯示URL請求,會發送一次請求 。兩個資源之間是同一個 request對象,能夠共享 request中的數據
redirect()是重定向 而是重定向指向的新的URL,會發送兩次請求。兩個資源之間不是同一個 request對象,不能夠共享
六、攔截器、過濾器、監聽器的區別?
1.過濾器:所謂過濾器顧名思義是用來過濾的,在java web中,你傳入的request,response提早過濾掉一些信息,或者提早設置一些 參數,而後再傳入servlet或者struts的action進行業務邏輯,好比過濾掉非法url(不是login.do的地址請求,若是用戶沒有登錄都過濾掉),或者在傳入servlet或者struts的action前統一設置字符集,或者去除掉一些非法字符(聊天室常常用到的,一些罵人的話)。filter 流程是線性的, url傳來以後,檢查以後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等.
2.監聽器:這個東西在c/s模式裏面常常用到,他會對特定的事件產生產生一個處理。監聽在不少模式下用到。好比說觀察者模式,就是一個監聽來的。又好比struts能夠用監聽來啓動。Servlet監聽器用於監聽一些重要事件的發生,監聽器對象能夠在事情發生前、發生後能夠作一些必要的處理。
3.java的攔截器 主要是用在插件上,擴展件上好比 hivernate spring struts2等 有點相似面向切片的技術,在用以前先要在配置文件即xml文件裏聲明一段的那個東西。
七、jsp 有哪些內置對象?做用分別是什麼?
答:JSP 共有如下9個內置的對象:
request 用戶端請求,此請求會包含來自 GET/POST 請求的參數
response 網頁傳回用戶端的迴應
pageContext 網頁的屬性是在這裏管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet 的構架部件
page JSP 網頁自己
exception 針對錯誤網頁,未捕捉的例外
八、 jsp 有哪些動做?做用分別是什麼?
答:JSP 共有如下6種基本動做
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個 JavaBean。
jsp:setProperty:設置 JavaBean 的屬性。
jsp:getProperty:輸出某個 JavaBean 的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型爲 Java 插件生成 OBJECT 或 EMBED 標記
九、頁面間對象傳遞的方法
request, session, application, cookie 等
十、JSP 和 Servlet 有哪些相同點和不一樣點,他們之間的聯繫是什麼?
JSP 是 Servlet 技術的擴展,本質上是 Servlet 的簡易方式,更強調應用的外表表達。 JSP編譯後是"類 servlet"。 Servlet 和 JSP 最主要的不一樣點在於, Servlet 的應用邏輯是在 Java文件中,而且徹底從表示層中的 HTML 裏分離開來。而 JSP 的狀況是 Java 和 HTML 能夠組合成一個擴展名爲.jsp 的文件。 JSP 側重於視圖, Servlet 主要用於控制邏輯。
十一、MVC 的各個部分都有那些技術來實現?如何實現?
答:MVC 是 Model-View-Controller 的簡寫。 Model 表明的是應用的業務邏輯(經過JavaBean, EJB 組件實現), View 是應用的表示面(由 JSP 頁面產生), Controller 是提供應用的處理過程控制(通常是一個 Servlet),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。
十二、反射的優缺點?
反射:就是正在運行動態讀取這個類的完整信息。
優勢:java的反射機制就是增長程序的靈活性、
缺點:缺點:
(1)性能問題:使用反射基本上是一種解釋操做,用於字段和方法接入時要遠慢於直接代碼。所以反射機制主要應用在對靈活性和擴展性要求很高的系統框架上,普通程序不建議使用。
(2)使用反射會模糊程序內內部邏輯:程序員但願在源代碼中看到程序的邏輯,反射等繞過了源代碼的技術,於是會帶來維護問題。反射代碼比相應的直接代碼更復雜。
1三、那些地方用到了反射?
jdbc鏈接、經常使用框架、spring ioc、Java動態代理、jsp:useBean android加載佈局文件等。
1四、什麼是Java序列化?
咱們有時候將一個 java 對象變成字節流的形式傳出去或者從一個字節流中恢復成一個 java對象,例如,要將 java 對象存儲到硬盤或者傳送給網絡上的其餘計算機,這個過程咱們能夠本身寫代碼去把一個 java 對象變成某個格式的字節流再傳輸,可是, jre 自己就提供了這種支持,咱們能夠調用 OutputStream 的 writeObject 方法來作,若是要讓 java 幫咱們作,要被傳輸的對象必須實現 serializable 接口,這樣, javac 編譯時就會進行特殊處理,編譯的類才能夠被 writeObject 方法操做,這就是所謂的序列化。須要被序列化的類必須實現Serializable 接口,該接口是一個 mini 接口,其中沒有須要實現的方法,implementsSerializable 只是爲了標註該對象是可被序列化的。
Java集合部分
一、 ArrayList (線性表結構、數組)和 Vector 的區別
a、這兩個類都實現了List接口(List接口繼承了Collection接口),
b、Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不一樣步的。若是隻有一個線程會訪問到集合,那最好是使用ArrayList,由於它不考慮線程安全,效率會高些;若是有多個線程會訪問到集合,那最好是使用Vector,由於不須要咱們本身再去考慮和編寫線程安全的代碼。
二、HashMap 和 Hashtable 的區別
a、HashMap線程不安全,HashTable線程安全。
b、HashTable不容許null值(key和value都不能夠) ,HashMap容許null值(key和value均可以)。
三、List 和 Map 區別?
List集合是單列集合,Map集合是雙列集合 經過key,value。
List集合是有序集合,Map集合是無序集合。
List此接口的用戶能夠對列表中每一個元素的插入位置進行精確地控制。
用戶能夠根據元素的整數 索引(在列表中的位置)訪問元素,並搜索列表中的元素
四、 List, Set, Map 是否繼承自 Collection 接口?
List, Set 是, Map 不是
五、List、 Map、 Set 三個接口,存取元素時,各有什麼特色?
list:存儲: 有序的 可重複的
訪問:能夠for循環,foreach循環,iterator迭代器 迭代。
set:存儲:無序的 不重複的
訪問:能夠foreach循環,iterator迭代器 迭代
map:存儲:存儲的是一對一對的映射 」key=value「,key值 是無序,不重複的。value值可重複
訪問:能夠map中key值轉爲爲set存儲,而後迭代這個set,用map.get(key)獲取value也能夠 轉換爲entry對象 用迭代器迭代
六、 Map的數據結構
1.散裂圖HashMap
2.鏈式散裂圖LinkedHashMap
3. 樹形圖 TreeMap
七、Arraylist與LinkedList(雙向鏈表類)區別?
ArrayList和LinkedList二者都實現了List接口,可是它們之間有些不一樣。
(1)ArrayList是由Array所支持的基於一個索引的數據結構,因此它提供對元素的隨機訪問,複雜度爲O(1),但LinkedList存儲一系列的節點數據,每一個節點都與前一個和下一個節點相鏈接。因此,儘管有使用索引獲取元素的方法,內部實現是從起始點開始遍歷,遍歷到索引的節點而後返回元素,時間複雜度爲O(n),比ArrayList要慢。
(2)與ArrayList相比,在LinkedList中插入、添加和刪除一個元素會更快,由於在一個元素被插入到中間的時候,不會涉及改變數組的大小,或更新索引。
(3)LinkedList比ArrayList消耗更多的內存,由於LinkedList中的每一個節點存儲了先後節點的引用。
八、java中hashset和hashmap有什麼區別
一、HashSet底層是採用HashMap實現的。HashSet 的實現比較簡單,HashSet 的絕大部分方法都是經過調用 HashMap 的方法來實現的,所以 HashSet 和 HashMap 兩個集合在實現本質上是相同的。
二、HashMap的key就是放進HashSet中對象,value是Object類型的。
三、當調用HashSet的add方法時,其實是向HashMap中增長了一行(key-value對),該行的key就是向HashSet增長的那個對象,該行的value就是一個Object類型的常量
Java基礎部分(直說重點部分)
一、"=="和 equals 方法究竟有什麼區別?
==若是判斷值類型的話,判斷內容是否相同。若是判斷引用類型則是判斷內存地址是否相同
二、靜態變量和實例變量的區別?
在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
實例變量必須建立對象後才能夠經過這個對象來使用,靜態變量則能夠直接使用類名來引用。
三、是否能夠從一個 static 方法內部發出對非 static 方法的調用?
非static方法能夠訪問static方法.
static方法不能訪問非static方法
四、Integer 與 int 的區別
int是java提供的8種原始數據類型之一。Java爲每一個原始類型提供了封裝類,Integer是java爲int提供的封裝類。
int的默認值爲0,而Integer的默認值爲null
在JSP開發中,Integer的默認爲null,因此用el表達式在文本框中顯示時,值爲空白字符串,而int默認的默認值爲0,因此用el表達式在文本框中顯示時,結果爲0
Integer提供了多個與整數相關的操做方法,例如,將一個字符串轉換成整數
五、請說出做用域 public, private, protected,以及不寫時的區別
這四個做用域的可見範圍以下表所示。
說明:若是在修飾的元素上面沒有寫任何訪問修飾符,則表示 friendly。
六、重載與重寫區別?
重載是同一個類中,方法名稱相同, 可是參數或個數不一樣。與返回值沒有關係。
重寫是在多個類中, 產生繼承關係。父類與子類的方法方法必須相同。
七、接口與抽象類的區別?
區別:定義接口的關鍵字是:interface 而定義抽象類的關鍵字是:abstract。
接口中成員不能有私有, 抽象類能夠。
接口中定義的成員, 是finl public static 類型, 抽象類沒有。
接口中的不能有普通方法, 抽象類中能夠。
相同:
兩個都不new,可是 接口與抽象類是面向對象必備知識,設計模式、重構代碼有必然做用
八、 final, finally, finalize 的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally 是異常處理語句結構的一部分,表示老是執行。
finalize 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可
以覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。 JVM 不保證此方法總被
調用
九、Java的垃圾回收機制
Java的垃圾回收機制是Java虛擬機提供的能力,用於在空閒時間以不定時的方式動態回收無任何引用的對象佔據的內存空間。
System.gc()
Runtime.getRuntime().gc()
十、 反射的優缺點?
反射:就是正在運行動態讀取這個類的完整信息。
優勢:java的反射機制就是增長程序的靈活性、
缺點:缺點:(
(1)性能問題:使用反射基本上是一種解釋操做,用於字段和方法接入時要遠慢於直接代碼。所以反射機制主要應用在對靈活性和擴展性要求很高的系統框架上,普通程序不建議使用。
(2)使用反射會模糊程序內內部邏輯:程序員但願在源代碼中看到程序的邏輯,反射等繞過了源代碼的技術,於是會帶來維護問題。反射代碼比相應的直接代碼更復雜。
十一、那些地方用到了反射?
例如: jdbc、Java經常使用框架、jdk的動態代理、android的加載佈局文件
十二、java 中有幾種類型的流?JDK 爲每種類型的流提供了一些抽象類以供繼承, 爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
字節流,字符流。字節流繼承於 InputStream OutputStream,字符流繼承於InputStreamReaderOutputStreamWriter。在 java.io 包中還有許多其餘的流,主要是爲了提升性能和使用方便。
1三、字節流與字符流的區別
字節流什麼都存,字符流只能存放中文
其餘部分
一、xml與json的區別?
不一樣:
xml是重量級、json是輕量級
xml比較佔帶寬、json佔帶寬小,易於壓縮
json在webservice 用的比較少、xml用的較多
相同:
二者都用在項目交互下 例如 移動app接口用的就是json、在web項目中與其餘項目對接用xml較多。
json經常使用解析方法 gson、jsonobject、jackson等 xml dom sax pull 解析
二、redis使用場景
redis是 緩存數據庫,可以減輕數據庫訪問操做,比關係數據訪問效率高! 使用場景: 發送短信驗證碼計時、token生成。
三、JavaWeb安全編程
一、xss攻擊
什麼惡意執行javascript代碼或html代碼 例如獲取用戶cookie、論壇惡意留言
四、sql注入
5 儘可能少用隱藏域、或不要暴露敏感數據信息。
例如:不少網站忘記密碼, 經過手機號碼找回,前面是手機號碼+圖像驗證碼。點擊下一步是講上一個頁面的手機號放到隱藏域中。發送驗證碼取隱藏域裏面的值。這樣我講隱藏域裏面的值修改本身的手機。就能夠破解別人的帳號密碼
六、App接口設計必定要規範
最好項目更新時最好用 網站安全掃描工具掃描一下。return instance;
Spring 概述
1. 什麼是spring?
Spring 是個java企業級應用的開源開發框架。Spring主要用來開發Java應用,可是有些擴展是針對構建J2EE平臺的web應用。Spring 框架目標是簡化Java企業級應用開發,並經過POJO爲基礎的編程模型促進良好的編程習慣。
2. 使用Spring框架的好處是什麼?
輕量:Spring 是輕量的,基本的版本大約2MB。
控制反轉:Spring經過控制反轉實現了鬆散耦合,對象們給出它們的依賴,而不是建立或查找依賴的對象們。
面向切面的編程(AOP):Spring支持面向切面的編程,而且把應用業務邏輯和系統服務分開。
容器:Spring 包含並管理應用中對象的生命週期和配置。
MVC框架:Spring的WEB框架是個精心設計的框架,是Web框架的一個很好的替代品。
事務管理:Spring 提供一個持續的事務管理接口,能夠擴展到上至本地事務下至全局事務(JTA)。
異常處理:Spring 提供方便的API把具體技術相關的異常(好比由JDBC,Hibernate or JDO拋出的)轉化爲一致的unchecked 異常。
3. 核心容器(應用上下文) 模塊。
這是基本的Spring模塊,提供spring 框架的基礎功能,BeanFactory 是 任何以spring爲基礎的應用的核心。Spring 框架創建在此模塊之上,它使Spring成爲一個容器。
4. 什麼是Spring IOC 容器?
Spring IOC 負責建立對象,管理對象(經過依賴注入(DI),裝配對象,配置對象,而且管理這些對象的整個生命週期。
5. IOC的優勢是什麼?
IOC 或 依賴注入把應用的代碼量降到最低。它使應用容易測試,單元測試再也不須要單例和JNDI查找機制。最小的代價和最小的侵入性使鬆散耦合得以實現。IOC容器支持加載服務時的餓漢式初始化和懶加載。
6. ApplicationContext一般的實現是什麼?
FileSystemXmlApplicationContext :此容器從一個XML文件中加載beans的定義,XML Bean 配置文件的全路徑名必須提供給它的構造函數。
ClassPathXmlApplicationContext:此容器也從一個XML文件中加載beans的定義,這裏,你須要正確設置classpath由於這個容器將在classpath裏找bean配置。
WebXmlApplicationContext:此容器加載一個XML文件,此文件定義了一個WEB應用的全部bean。
7. Bean 工廠和 Application contexts 有什麼區別?
Application contexts提供一種方法處理文本消息,一個一般的作法是加載文件資源(好比鏡像),它們能夠向註冊爲監聽器的bean發佈事件。另外,在容器或容器內的對象上執行的那些不得不禁bean工廠以程序化方式處理的操做,能夠在Application contexts中以聲明的方式處理。Application contexts實現了MessageSource接口,該接口的實現以可插拔的方式提供獲取本地化消息的方法。
依賴注入
1. 什麼是Spring的依賴注入?
依賴注入,是IOC的一個方面,是個一般的概念,它有多種解釋。這概念是說你不用建立對象,而只須要描述它如何被建立。你不在代碼裏直接組裝你的組件和服務,可是要在配置文件裏描述哪些組件須要哪些服務,以後一個容器(IOC容器)負責把他們組裝起來。
2. 有哪些不一樣類型的IOC(依賴注入)方式?
構造器依賴注入:構造器依賴注入經過容器觸發一個類的構造器來實現的,該類有一系列參數,每一個參數表明一個對其餘類的依賴。
Setter方法注入:Setter方法注入是容器經過調用無參構造器或無參static工廠 方法實例化bean以後,調用該bean的setter方法,即實現了基於setter的依賴注入。
3. 哪一種依賴注入方式你建議使用,構造器注入,仍是 Setter方法注入?
你兩種依賴方式均可以使用,構造器注入和Setter方法注入。最好的解決方案是用構造器參數實現強制依賴,setter方法實現可選依賴。
Spring 的MVC
1. 什麼是Spring的MVC框架?
Spring 配備構建Web 應用的全功能MVC框架。Spring能夠很便捷地和其餘MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也容許以聲明的方式把請求參數和業務對象綁定。
2. DispatcherServlet
Spring的MVC框架是圍繞DispatcherServlet來設計的,它用來處理全部的HTTP請求和響應。
3. WebApplicationContext
WebApplicationContext 繼承了ApplicationContext 並增長了一些WEB應用必備的特有功能,它不一樣於通常的ApplicationContext ,由於它能處理主題,並找到被關聯的servlet。
4. 什麼是Spring MVC框架的控制器?
控制器提供一個訪問應用程序的行爲,此行爲一般經過服務接口實現。控制器解析用戶輸入並將其轉換爲一個由視圖呈現給用戶的模型。Spring用一個很是抽象的方式實現了一個控制層,容許用戶建立多種用途的控制器。
5. @Controller 註解
該註解代表該類扮演控制器的角色,Spring不須要你繼承任何其餘控制器基類或引用Servlet API。
6. @RequestMapping 註解
該註解是用來映射一個URL到一個類或一個特定的方處理法上。
多線程部分
1、什麼是多線程?
在一個應用程序中,同時,有多個不一樣的執行路徑。
2、什麼是線程同步、異步?
線程同步表示,當前線程執行完後下一個線程接着執行。
線程異步表示, 在一個應用程序中,同時,有多個不一樣的執行路徑。例如 javaweb ajax android handler
3、線程之間如何同步
線程之間同步使用 synchronized、wait 與 notify
4、什麼是線程不安全?如何解決?
就是在多個線程共享同一個數據會受到其餘線程的干擾。如何解決:使用線程同步技術, 用上鎖(synchronized)。 讓一個線程執行完了,在讓另外一個線程執行。
5、如何建立一個線程?有幾種方法?
繼承thread類, 重寫run方法、實現Runnalbe接口,從新run方法 , 啓動一個線程用start();
6、sleep()和 wait()有什麼區別?
a、sleep是讓當前線程指定休眠時間,而後繼續工做 不釋放鎖
b、讓當前線程wait則是等待,直到有線程通知notify()喚醒他纔會從新工做。釋放鎖
7、什麼是線程池?
線程池是指在初始化一個多線程應用程序過程當中建立一個線程集合,而後在須要執行新的任務時重用這些線程而不是新建一個線程。線程池中線程的數量一般徹底取決於可用內存數量和應用程序的需求。然而,增長可用線程數量是可能的。線程池中的每一個線程都有被分配一個任務,一旦任務已經完成了,線程回到池子中並等待下一次分配任務。
8、爲何要線程池
基於如下幾個緣由在多線程應用程序中使用線程是必須的:
1. 線程池改進了一個應用程序的響應時間。因爲線程池中的線程已經準備好且等待被分配任務,應用程序能夠直接拿來使用而不用新建一個線程。
2. 線程池節省了CLR 爲每一個短生存週期任務建立一個完整的線程的開銷並能夠在任務完成後回收資源。
3. 線程池根據當前在系統中運行的進程來優化線程時間片。
4. 線程池容許咱們開啓多個任務而不用爲每一個線程設置屬性。
5. 線程池容許咱們爲正在執行的任務的程序參數傳遞一個包含狀態信息的對象引用。
6. 線程池能夠用來解決處理一個特定請求最大線程數量限制問題。
九、什麼是死鎖?
十、wait()方法和notify()方法幹什麼用的,wait()方法有什麼使用限制,是哪兒都能用麼?
struts2細節
resultmap:用於查詢resultype:主要用於向where查詢語句中傳入數據,經常使用於模糊查詢