JAVA WEB面試題

1、jsp和servlet的區別、共同點、各自應用的範圍??

JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裏分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。在struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層.

2、cookie和session的作用、區別、應用範圍,session的工作原理???

Cookie:主要用在保存客戶端,其值在客戶端與服務端之間傳送,不安全,存儲的數據量有限。

Session:保存在服務端,每一個session在服務端有一個sessionID作一個標識。存儲的數據量大,安全性高。佔用服務端的內存資源。

3、jstl是什麼?優點有哪些??

JSTL(JSP Standard Tag Library ,JSP標準標籤庫)是一個不斷完善的開放源代碼的JSP標籤庫,由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器(ScriptFreeTLV 和 PermittedTaglibsTLV)組成。優點有:

1、 在應用程序服務器之間提供了一致的接口,最大程序地提高了WEB應用在各應用服務器之間的移植。

2、 簡化了JSP和WEB應用程序的開發。

3、 以一種統一的方式減少了JSP中的scriptlet代碼數量,可以達到沒有任何scriptlet代碼的程序。在我們公司的項目中是不允許有任何的scriptlet代碼出現在JSP中。

4、 允許JSP設計工具與WEB應用程序開發的進一步集成。相信不久就會有支持JSTL的IDE開發工具出現。

4、j2ee的優越性主要表現在哪些方面?MVC模式

a、 J2EE基於JAVA 技術,與平臺無關

b、 J2EE擁有開放標準,許多大型公司實現了對該規範支持的應用服務器。如BEA ,IBM,Oracle等。

c、 J2EE提供相當專業的通用軟件服務。

d、 J2EE提供了一個優秀的企業級應用程序框架,對快速高質量的開發系統打下了基礎。

Model模型:應用程序的主體部分,用於表示業務邏輯。

View視圖:應用程序中用戶界面相關的部分,是用戶看到並與之交互的界面。

Controller控制器:用於根據用戶的輸入,控制用戶界面數據顯示,更新Model對象狀態。

MVC模式的出現不僅實現了功能模塊和顯示模塊的分離,同時還提夠了應用系統的可維護、可擴展性、可移植性、和組建的可複用性。

5、Struts的優點

a、實現MVC模式,結構清晰,使開發者只需關注業務邏輯的實現。

b、有豐富的tag可以用,能大大提夠開發效率,縮短開發時間。

c、頁面導航。通過一個配置文件,即可把握整個系統各部分之間的聯繫,這對於後期的維護有很大的好處

d、提供Exception處理機制

e、支持L18N

6、爲什麼要用struts?

  JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。

  基於Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件

7、Sturt1的核心類、核心標籤庫?

ActionServlet 控制器、ActionMapping狀態改變事件 、 Action控制器的一部分、ActionForward用戶指向、ActionForm狀態改變的數據

Html標籤、bean標籤、logic標籤、tiles標籤、nested標籤

8、struts1與sturts2的區別(struts2是struts1和webwork的結合體)

1、struts1要求Action類繼承一個抽象基類,而不是接口。

struts2的action類可以實現一個action接口,也可以實現其他接口。

2、sturts1 action是單例模式,線程是安全的。

struts2 action線程是不安全的,action爲每一個請求都生成了一個實例。

3、sturts1過去依賴serlet API,不容易測試。

struts2不依賴於容器,允許Action脫離容器單獨被測試。

4、Struts1 使用ActionForm對象捕獲輸入。所有的ActionForm必須繼承一個基類。

Struts 2直接使用Action屬性作爲輸入屬性,消除了對第二個輸入對象的需求。

5、Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。

Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達式語言--"Object Graph Notation Language" (OGNL).

6、Struts 1使用標準JSP機制把對象綁定到頁面中來訪問。

Struts 2 使用 "ValueStack"技術,使taglib能夠訪問值而不需要把你的頁面(view)和對象綁定起來。

7、Struts 1 ActionForm 屬性通常都是String類型。Struts1使用Commons-Beanutils進行類型轉換。

Struts2 使用OGNL進行類型轉換。提供基本和常用對象的轉換器。

8、Struts 1支持在ActionForm的validate方法中手動校驗,或者通過Commons Validator的擴展來校驗。

Struts2支持通過validate方法和XWork校驗框架來進行校驗。

9、Struts1支持每一個模塊有單獨的Request Processors(生命週期),但是模塊中的所有Action必須共享相同的生命週期。

Struts2支持通過攔截器堆棧(Interceptor Stacks)爲每一個Action創建不同的生命週期。堆棧能夠根據需要和不同的Action一起使用。

9、過濾器和攔截器的區別

1、攔截器是基於java的反射機制的,而過濾器是基於函數回調

2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器

3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用

4、攔截器可以訪問action上下文、值棧裏的對象,而過濾器不能

5、在action的生命週期中,攔截器可以多次被調用,而過濾器只在容器初始化時調用一次

攔截器 :是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法後打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。

過濾器:是在Java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字符集,或者去除掉一些非法字符.

10、hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,使得java程序員可以隨心所欲的使用對象編程思維來操縱數據庫

工作原理:

1.讀取並解析配置文件2.讀取並解析映射信息,創建SessionFactory 3.打開Sesssion 4.創建事務Transation 5.持久化操作6.提交事務7.關閉Session 8.關閉SesstionFactory

優點有:

1. 對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重複性代碼。

2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作

3、 Hibernate使用Java反射機制而不是字節碼增強程序來實現透明性。

4、 Hibernate的性能好,映射的靈活性比較出色。它支持各種關係數據庫,從一對一到多對多的各種複雜關係。

11、hibernate的核心類是什麼??重要方法是什麼??

Configuration、SessionFactory

Session如下方法 Save、 load、 Update、Delete

Query q=CreateQuery(“from Customer where customerName=:customerName”)

beginTransaction、close、Transaction、Commit()

12、session.load()和session.get()的區別

Session.load/get方法均可以根據指定的實體類和id從數據庫讀取記錄,並返回與之對應的實體對象。其區別在於:

如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException。

13、hql和sql的區別【可以這樣說,hibernate是面嚮對象語言與關係型數據庫之間的橋樑,他使得程序員可以不用關心底層數據庫連接的代碼,而可以專心寫業務邏輯。】

sql是面向數據庫表查詢

hql是面向對象查詢的,其form子句返回的是對象的實例。

14、hibernate與jdbc之間的區別【可以這樣說,hibernate是面嚮對象語言與關係型數據庫之間的橋樑,他使得程序員可以不用關心底層數據庫連接的代碼,而可以專心寫業務邏輯。】

Hibernate作爲一個O/R Mapping,比JDBC具備的優勢有:

1.編程思想上,更加符合人的邏輯思維習慣,面向對象比面向過程更加容易理解,測試和維護

2.開發維護速度上,Hibernate顯著的快,代碼量顯著小

3.通過Annotation進行數據庫的字段加密

4.對Sql不熟的菜鳥來說可以自動調優

5.結合spring,通過聲明式事務可以省略事務的控制,事務以橫切面形式出現

Jdbc比Hibernate具備的優勢有:

1.大數據量訪問時,Jdbc的效率顯著快

2.直接操作數據庫比較靈活

15、Hibernate是如何延遲加載?

當Hibernate在查詢數據的時候,數據並沒有存在與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器的性能。

16、說下Hibernate的緩存機制

  1. 內部緩存存在Hibernate中又叫一級緩存,屬於應用事物級緩存

  2. 二級緩存:

  a) 應用及緩存

  b) 分佈式緩存

c) 第三方緩存的實現

17、spring工作機制及爲什麼要用?【spring是一個輕量的控制反轉和麪向切面的容器框架】

  1.springmvc把所有的請求都提交給DispatcherServlet,它會委託應用系統的其他模塊負責對請求進行真正的處理工作。

  2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.

  3.DispatcherServlet把請求提交到目標Controller

  4.Controller進行業務邏輯處理後,會返回一個ModelAndView

  5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

  6.視圖對象負責渲染返回給客戶端。

IoC就是由容器來控制業務對象之間的依賴關係。控制反轉的本質,是控制權由應用代碼轉到了外部容器,控制器的轉移既是所謂的反轉。控制權的轉移帶來的好處就是降低了業務對象之間的依賴程度,即實現瞭解耦。

DI/IOC,對持久層和表示層的控制與分配,增加系統的靈活性和穩定性. AOP,面向切面,利用代理對程序的有效管理.

spring是一個輕量級的IOC和AOP框架,通過spring的IOC實現松耦合,而作爲一個AOP框架他又能分離系統服務,實現內聚開發 Spring 最好的地方是它有助於您替換對象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協作對象)。然後可以很容易地在需要時替換具有類似接口的協作對象。}
Spring對多種ORM框架提供了很好的支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章