




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
(問答題+選擇題(在55頁))
Java工程師(程序員)面題
Struts,Spring,Hibemate三大框架
1.Hibernate工作原理及為什么要用?
原理:1.讀取并解析配置文獻2.讀取并解析映射信息,創建SessionFactory3.打開Session4.
創建事務Transation5.持久化操作6.提交事務7.關閉Session8.關閉SesstionFactory
為什么要用:I.對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的反復
性代碼。2.Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM實現。他
很大限度的簡化DAO層的編碼工作3.hibernate使用Java反射機制,而不是字節碼增強程
序來實現透明性。4.hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰
出。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。
2.Hibernate是如何延遲加載?
1.Hibernate2延遲加載實現:a)實體對象b)集合(Collection)
2.Hibemate3提供了屬性的延遲加載功能當Hibernate在查詢數據的時候,數據并沒有存在
與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省
了服務器的內存開銷,從而提高了服務器的性能。
3.Hibernate中如何實現類之間的關系?(如:一對多、多對多的關系)
類與類之間的關系重要體現在表與表之間的關系進行操作,它們都是對對象進行操作,我們
程序中把所有的表與類都映射在一起,它們通過配置文獻中的many-to-one、one-to-many、
many-to-many
4.Strutsl流程:
1、客戶端瀏覽器發出HTTP請求。2、根據web.xml配置,該請求被ActionServlet接受。3、
根據struts-config.xml配置,ActionServlet先將請求中的參數填充到ActionForm中,然后
ActionServlet再將請求發送到Action進行解決。4、是否驗證,需要驗證則調用ActionForm
的validate方法,驗證失敗則跳轉到input,成功則繼續。5、Action從ActionForm獲得數據,
調用javabean中的業務方法解決數據。6、Action返回ActionForward對象,跳轉到相應JSP
頁面或Action。7、返回HTTP響應到客戶端瀏覽器。
MVC設計模式:modal:“模型”也稱業務邏輯,是正真完畢任務的代碼,相稱與
JavaBeanview:視圖,其實就是顯示界面,相稱于JSPcontroller:控制器,他控制模型和視
圖的交互過程,相稱于servletstruts1是基于MVC設計模式hibernate是基于ORM對象關系
映射
5.struts是什么?
struts1是基于JSP和servlet的一個開源的Web應用框架,使用的是MVC的設計模式struts2
是基于webwork技術的框架,是sun和webwork公司聯手開發的一個功能非常齊全的框架,
struts2和struts1沒有任何關系,是一個全新的框架
6.spring是什么?
spring是一個集成了許多第三方框架的大雜夕會,其核心技術是IOC(控制反轉,也稱依賴注
入)和AOP(面向切面編程)
7.hibernate是彳十么?
hibernate是基于ORM對象關系映射(完畢對象數據到關系數據映射的機制)實現的,做數據
持久化的工具
8.JSF是什么?
JavaServerFace是基于組件的web開發框架,跟sturts差不多的框架
9.數據庫里面的索引和約束是什么?
索引是為了提高數據的檢索速度,索引是建立在數據表上,根據一個或多個字段建立的約束
是為了保持數據的完整性,約束有非空約束,主鍵約束,外鍵約束等等。
lO.spring是什么
這個問題,往往可以通過我們為什么要使用spring這個問題來切入:AOP讓開發人員可以
創建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用AOP后,
公共服務(比如日記、持久性、事務等)就可以分解成方面并應用到域對象上,同時不會
增長域對象的對象模型的復雜性。IOC允許創建一個可以構造對象的應用環境,然后向這
些對象傳遞它們的協作對象。正如單詞倒置所表白的,IOC就像反過來的JNDI。沒有
使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straightconstruction),
每一個對象都是用其協作對象構造的。因此是由容器管理協作對象(collaborator)。Spring
即使一個AOP框架,也是一IOC容器。Spring最佳的地方是它有助于您替換對象。有了
Spring,只要用JavaBean屬性和配置文獻加入依賴性(協作對象)。然后可以很容易地在需
要時替換具有類似接口的協作對象。
1L用自己的話簡要闡述struts2的執行流程。
Struts2框架自身大體可以分為3個部分:核心控制器FilterDispatcher、業務控制器Action
和用戶實現的公司業務邏輯組件。核心控制器FilterDispatcher是Struts2框架的基礎,包含
了框架內部的控制流程和解決機制。業務控制器Action和業務邏輯組件是需要用戶來自己
實現的。用戶在開發Action和業務邏輯組件的同時,還需要編寫相關的配置文獻,供核心
控制器FilterDispatcher來使用。
Struts2的工作流程相對于Struts1要簡樸,與WebWork框架基本相同,所以說Struts2是
WebWork的升級版本。基本簡要流程如下:1、客戶端瀏覽器發出HTTP請求。2、根據web.xml
配置,該請求被FilterDispatcher接受。3、根據struts.xml配置,找到需要調用的Action類
和方法,并通過IoC方式,將值注入給Aciton。4、Action調用業務邏輯組件解決業務邏輯,
這一步包含表單驗證。5、Action執行完畢,根據struts.xml中的配置找到相應的返回結果
result,并跳轉到相應頁面。6、返回HTTP響應到客戶端瀏覽器。
1Action是不是線程安全的?假如不是有什么方式可以保證Action的線程安全?假如是,
說明因素
不是
聲明局部變量,或者擴展RequestProcessor,讓每次都創建一個Action,或者在spring中用
scope="prototype"來管理
2.MVC,分析一下struts是如何實現MVC的
m:JavaBean或結合EJB組件或者pojo構成
c:Action來實現
v:一組JSP文獻及其標簽構成。
3.struts中的幾個關鍵對象的作用(說說幾個關鍵對象的作用)
Action:控制器類,ActionForm:表單對象,DynaValidatorForm:動態form,ActonMapping:
配置文獻中action節點的信息……
4.說說AOP和IOC的概念以及在spring中是如何應用的
AOP:面向方面編程,ioc:依賴注入;聲明式事務和編程式事務積極一些通用部分
5.Hibernate有哪幾種查詢數據的方式
hql查詢,sql查詢,條件查詢
6.1oad()和get()的區別
hibernate對于load方法認為該數據在數據庫中一定存在,可以放心的使用代理來延遲加載,
load默認支持延遲加載,在用到對象中的其他屬性數據時才查詢數據庫,但是萬一數據庫
中不存在該記錄,只能拋異常ObjectNotFoundEcception;所說的load方法拋異常是指在使
用該對象的數據時,數據庫中不存在該數據時拋異常,而不是在創建這個對象時。由于
session中的緩存對于hibernate來說是個相稱便宜的資源,所以在load時會先查一下session
緩存看看該id相應的對象是否存在,不存在則創建代理(load時候之查詢一級緩存,不存
在則創建代理)。get()現在一級緩存找,沒有就去二級緩存找,沒有就去數據庫找,沒有就
返回null;而對于get方法,hibernate一定要獲取到真實的數據,否則返回null。
7.談談hibernate的延遲加載和openSessionlnView
延遲加載要在session范圍內,用到的時候再加載;opensessioninview是在web層寫了一個
filter來打開和關閉session,這樣就表達在一次request過程中session一直開著,保證了延
遲
加載在session中的這個前提。
8.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。
聲明事務和編程事務
隔離級別:
-DEFAULT使用數據庫默認的隔離級別
-READ_UNCOMMITTED會出現臟讀,不可反復讀和幻影讀問題
-READ_COMMITTED會出現反復讀和幻影讀
-REPEATABLE_READ會出現幻影讀
-SERIALIZABLE最安全,但是代價最大,性能影響極其嚴重
和傳播行:
-REQUIRED存在事務就融入該事務,不存在就創建事務
-SUPPORTS存在事務就融入事務,不存在則不創建事務
-MANDATORY存在事務則融入該事務,不存在,拋異常
-REQU1RES_NEW總是倉犍新事務
-NONSUPPORTED存在事務則掛起,一直執行非事務操作
-NEVER總是執行非事務,假如當前存在事務則拋異常
-NESTED嵌入式事務
9.Hibernate中的update。和saveOrUpdate()的區別.
摘自hibernate說明文檔:
saveOrUpdate。做下面的事:
假如對象已經在本session中持久化了,不做任何事
假如另一個與本session關聯的對象擁有相同的持久化標記(identifier),拋出一個異常
假如對象沒有持久化標記(identifier)屬性,對其調用save()
假如對象的持久標記(identifier)表白其是一個新實例化的對象,對其調用save()
假如對象是附帶版本信息的(通過〈version,或<timestamp>)并且版本屬性的值表白其是
一個新實例化的對象,save。它。否則update。這個對象
lO.Spring對多種ORM框架提供了很好的支持,簡樸描述在Spring中使用Hibernate的方法,
并結合事務管理。
gelHiberanteTemplate里面提供了save,update,delete,find等方法。
簡樸說一個:假如配置了聲明式事務,當執行getHibernateTemplate的各種方法的時候,事
務會
自動被加載
假如沒有配置事務,那么以上操作不會真正的被同步到數據庫,除非配置了hibernate的
autocommit=true
8.spring的事務有兒種方式?談談spring事務的隔離級別和傳播行為。
spring事務分兩種形式,聲明式事務和編程式事務,spring提供了一個事務的接口
PaltformTractionManager,針對不同的事務,spring進行了不同的實現,對hibernate事務
的實現HlbernateTractionManager,^JDBC的JdbcTractionManager,
DataSourceTractionManager以及JdoTractionManager。接口platfonnTractionManager提供了
個方法,獲取事務,提交和回滾的方法。
分享面試題二】Spring,hibernate,struts的面試筆試題(含答案)
(聲明:這里不是為其他商業利益,是為學習討論使用)
【鄭重聲明】:單純接分將被刪帖,希望大家有自己的感觸
Hibernate工作原理及為什么要用?
原理:
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的性能非常好,由于它是個輕量級框架。映射的靈活性很杰出。它支持各種
關系數據庫,從一對一到多對多的各種復雜關系。
2.Hibernate是如何延遲加載?
1.Hibemate2延遲加載實現:a)實體對象b)集合(Collection)
2.Hibemate3提供了屬性的延遲加載功能
當Hibernate在查詢數據的時候,數據并沒有存在與內存中,當程序真正對數據的操作時,
對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器
的性能。
3.Hibernate中如何實現類之間的關系?(如:一對多、多對多的關系)
類與類之間的關系重要體現在表與表之間的關系進行操作,它們都市對對象進行操作,我們
程序中把所有的表與類都映射在一起,它們通過配置文獻中的many-to-one>one-to-many>
many-to-many、
4.說下Hibernate的緩存機制
1.內部緩存存在Hibernate中又叫一級緩存,屬于應用事物級緩存
2.二級緩存:
a)應用及緩存
b)分布式緩存
條件:數據不會被第三方修改、數據大小在可接受范圍、數據更新頻率低、同一數據被系統
頻繁使用、非關鍵數據
c)第三方緩存的實現
5.Hibernate的查詢方式
Sql、Criteria,objectcomptosition
Hql:
1、屬性查詢
2、參數查詢、命名參數查詢
3、關聯查詢
4、分頁查詢
5、記錄函數
6.如何優化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一取代
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6.繼承類使用顯式多態
7.表字段要少,表關聯不要怕多,有二級緩存撐腰
7.Struts工作機制?為什么要使用Struts?
工作機制:
Struts的工作流程:
在web應用啟動時就會加載初始化ActionServlet,ActionServlet從
struts-config.xml文獻中讀取配置信息,把它們存放到各種配置對象
當ActionServlet接受到一個客戶請求時,將執行如下流程.
-⑴檢索和用戶請求匹配的ActionMapping實例,假如不存在,就返回請求途徑無效信息;
-(2)假如ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保
存到ActionForm對象中;
-(3)根據配置信息決定是否需要表單驗證.假如需要驗證,就調用ActionForm的validate。
方法;
-(4)假如ActionForm的validate。方法返回null或返回一個不包含ActionMessage的
ActuibErrors對象,就表達表單驗證成功;
-(5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,
假如相應的Action實例不存在,就先創建這個實例,然后調用Action
的execute。方法;
-(6)Action的execute。方法返回一個ActionForward對象,ActionServlet在把客戶請求轉
發給ActionForward對象指向的JSP組件;
-(7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;
為什么要用:
JSP、Servlet、JavaBean技術的出現給我們構建強大的公司應用系統提供了也許。但用這些
技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來
的規則,這就是框架,Struts便應運而生。
基于Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件
8.Struts的validate框架是如何驗證的?
在struts配置文獻中配置具體的錯誤提醒,再在FormBean中的validate。方法具體調用。
9.說下Struts的設計模式
MVC模式:web應用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配
置好的ActionForm對象被創建,并被填入表單相應的數據,ActionServler根據
Struts-config.xml文獻配置好的設立決定是否需要表單驗證,假如需要就調用ActionForm的
Validate()驗證后選擇將請求發送到哪個Action,假如Action不存在,ActionServlet會先
創建這個對象,然后調用Action的execute()方法。Execute()從ActionForm對象中獲
取數據,完畢業務邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉發給
ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態的網頁,返回
給客戶。
10.spring工作機制及為什么要用?
1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負
責對請求進行真正的解決工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到解決請求的Controller.
3.DispatcherServlet請請求提交到目的Controller
4.Controller進行業務邏輯解決后,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視
圖對象
6.視圖對象負責渲染返回給客戶端。
為什么用:
{AOP讓開發人員可以創建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序
代碼中。使用AOP后,公共服務(比如日記、持久性、事務等)就可以分解成方面并應
用到域對象上,同時不會增長域對象的對象模型的復雜性。
IOC允許創建一個可以構造對象的應用環境,然后向這些對象傳遞它們的協作對象。
正如單詞倒置所表白的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位
器、單元素(singleton)和直接構造(straightconstruction),每一個對象都是用其協作對象
構造的。因此是山容器管理協作對象(collaborator)。
Spring即使一個AOP框架,也是一IOC容器。Spring最佳的地方是它有助于您替換對象。
有了Spring,只要用JavaBean屬性和配置文獻加入依賴性(協作對象)。然后可以很容易
地在需要時替換具有類似接口的協作對象。}
Struts,Spring,Hibernate優缺陷
Struts跟Tomcat、Turbine等諸多Apache項目同樣,是開源軟件,這是它的一大優點。使
開發者能更進一步的了解其內部實現機制。Struts開放源碼框架的創建是為了使開發者在
構建基于JavaServlet和JavaServerPages(JSP)技術的Web應用時更力口容易。Struts框架為
開放者提供了一個統一的標準框架,通過使用Struts作為基礎,開發者可以更專注于應用
程序的商業邏輯。Struts框架自身是使用JavaServlet和JavaServerPages技術的一種
Model-View-Controller(MVC)實現.
具體來講,
Struts的優點有:
1.實現MVC模式,結構清楚,使開發者只關注業務邏輯的實現.
2.有豐富的tag可以用Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發效率。
此外,就目前國內的JSP開發者而言,除了使用JSP自帶的常用標記外,很少開發自己的標
記,或許Struts是一個很好的起點。
3.頁面導航.頁面導航將是此后的一個發展方向,事實上,這樣做,使系統的脈絡更加清楚。
通過一個配置文獻,即可把握整個系統各部分之間的聯系,這對于后期的維護有著莫大的好
處。特別是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。
4.提供Exception解決機制.
5.數據庫鏈接池管理
6.支持I18N
缺陷:
一、轉到展示層時,需要配置forward,每一次轉到展示層,相信大多數都是直接轉到jsp,
而涉及到轉向,需要配置forward,假如有十個展示層的jsp,需要配置十次struts,并且還
不涉及有時候目錄、文獻變更,需要重新修改forward,注意,每次修改配置之后,規定重
新部署整個項目,而tomcate這樣的服務器,還必須重新啟動服務器,假如業務變更復雜頻
繁的系統,這樣的操作簡樸不可想象。現在就是這樣,幾十上百個人同時在線使用我們的
系統,大家可以想象一下,我的煩惱有多大。
二、Struts的Action必需是thread-safe方式,它僅僅允許-一個實例去解決所有的請求。
所以action用到的所有的資源都必需統一同步,這個就引起了線程安全的問題。
三、測試不方便.Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴于Web
容器,單元測試也很難實現。但是有一個Junit的擴展工具StrutsTestCase可以實現它的單
元測試。
四、類型的轉換.Struts的FormBean把所有的數據都作為String類型,它可以使用工具
Commons-Beanutils進行類型轉化。但它的轉化都是在Class級別,并且轉化的類型是不可
配置的。類型轉化時的錯誤信息返回給用戶也是非常困難的。
五、對Servlet的依賴性過強.Struts解決Action時必需要依賴ServletRequest和
ServletResponse,所有它擺脫不了Servlet容器。
六、前端表達式語言方面Struts集成了JSTL,所以它重要使用JSTL的表達式語言來獲取數
據。可是JSTL的表達式語言在Collection和索引屬性方面解決顯得很弱。
七、對Action執行的控制困難.Struts創建一個Action,假如想控制它的執行順序將會非常
困難。甚至你要重新去寫Servlet來實現你的這個功能需求。
八、對Action執行前和后的解決.Struts解決Action的時候是基于class的hierarchies,很
難在action解決前和后進行操作。
九、對事件支持不夠.在struts中,實際是一個表單Form相應一個Action類(或
DispatchAction),換一句話說:在Struts中實際是一個表單只能相應一個事件,struts這種
事件方式稱為applicationevent,applicationevent和componentevent相比是一種粗粒度的事
件。
Struts重要的表單對象ActionForm是一種對象,它代表了一種應用,這個對象中至少包含幾
個字段,這些字段是Jsp頁面表單中的input字段,由于一個表單相應一個事件,所以,當
我們需要將事件粒度細化到表單中這些字段時,也就是說,一個字段相應一個事件時,單
純使用Struts就不太也許,當然通過結合JavaScript也是可以轉彎實現的。
2.Hibernate
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封
裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。
Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在
Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架
構中取代CMP,完畢數據持久化的重任。
大多數開發機構經常采用創建各自獨立的數據持久層。一旦底層的數據結構發生改變,那么
修改應用的其余部分使之適應這種改變的代價將是十分巨大的。Hibernate適時的填補了這
一空白,它為Java應用提供了一個易用的、高效率的對象關系映射框架。hibernate是個輕
量級的持久性框架,功能卻非常豐富。
優點:
a.Hibemate使用Java反射機制而不是字節碼增強程序來實現透明性。
b.Hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰出。
c.它支持各種關系數據庫,從一對一到多對多的各種復雜關系。
缺陷:
它限制您所使用的對象模型。(例如,一個持久性類不能映射到多個表)其獨有的界面和可憐
的市場份額也讓人不安,盡管如此,Hibernate還是以其強大的發展動力減輕了這些風險。
其他的開源持久性框架也有一些,但是都沒有Hibernate這樣有市場沖擊力。
上面回貼情緒有點激動,希望諒解,我不是由于有人批評Hibernate而感到不快,而是由于
帖子里面的觀點實在讓我覺得荒唐。不管覺得Hibernate好也吧,不好也吧,我唯一覺得遺
憾的是,在中文論壇里面找不到一個對Hibernate的真正高水平的評價。在TSS上有一個關
于Hibernate的hotthread,跟了幾百貼,其中涉及Hibernate作者Gavin和LiDOJDO的CTO,
對于JDO和Hibernate有過一些劇烈的爭論,我曾經耐心的看了一遍,仍然沒有發現針對
Hibernate真正有力的襲擊,那些所謂的襲擊無非針對Hibernate沒有一個GUI的配置工具,
沒有商業公司支持,沒有標準化等等這些站不住腳的理由。
補充幾點我的意見:
一、Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,和AppServer,
和EJB沒有什么必然的聯系。Hibernate可以用在任何JDBC可以使用的場合,例如Java應
用程序的數據庫訪問代碼,DAO接口的實現類,甚至可以是BMP里面的訪問數據庫的代
碼。從這個意義上來說,Hibernate和EB不是一個范疇的東西,也不存在非此即彼的關系。
二、Hibernate是一個和JDBC密切關聯的框架,所以Hibernate的兼容性和JDBC驅動,和
數據庫都有一定的關系,但是和使用它的Java程序,和AppServer沒有任何關系,也不存
在兼容性問題。
三、Hibernate不能用來直接和EntityBean做對比,只有放在整個J2EE項目的框架中才干比
較。并且即使是放在軟件整體框架中來看,Hibernate也是做為JDBC的替代者出現的,而不
是EntityBean的替代者出現的,讓我再列一次我已經列n次的框架結構:
傳統的架構:
I)SessionBean<->EntityBean<->DB
為了解決性能障礙的替代架構:
2)SessionBean<->DAO<->JDBC<->DB
使用Hibernate來提高上面架構的開發效率的架構:
3)SessionBean<->DAO<->Hibernate<->DB
就上面3個架構來分析:
1、內存消耗:采用JDBC的架構2無疑是最省內存的,Hibernate的架構3次之,EB的架
構1最差。
2、運營效率:假如JDBC的代碼寫的非常優化,那么JDBC架構運營效率最高,但是實際
項目中,這一點幾乎做不到,這需要程序員非常精通JDBC,運用Batch語句,調整
PreapredStatement的BatchSize和FetchSize等參數,以及在必要的情況下采用結果集cache
等等。而一般情況下程序員是做不到這一點的。因此Hibernate架構表現出最快的運營效率。
EB的架構效率會差的很遠。
3、開發效率:在有JBuilder的支持下以及簡樸的項目,EB架構開發效率最高,JDBC次之,
Hibernate最差。但是在大的項目,特別是持久層關系映射很復雜的情況下,Hibernate效率
高的驚人,JDBC次之,而EB架構很也許會失敗。
4、分布式,安全檢查,集群,負載均衡的支持
由于有SB做為Facade,3個架構沒有區別。
四、EB和Hibernate學習難度在哪里?
EB的難度在哪里?不在復雜的XML配置文獻上,而在于EB運用稍微不慎,就有嚴重的性
能障礙。所以難在你需要學習很多EJB設計模式來避開性能問題,需要學習AppServer和
EB的配置來優化EB的運營效率。做EB的開發工作,程序員的大部分精力都被放到了EB
的性能問題上了,反而沒有更多的精力關注自身就重要投入精力去考慮的對象持久層的設
計上來。
Hibernate難在哪里?不在Hibernate自身的復雜,事實上Hibernate非常的簡樸,難在Hibernate
太靈活了。
當你用EB來實現持久層的時候,你會發現EB實在是太笨拙了,笨拙到你主線沒有什么可
以選擇的余地,所以你主線就不用花費精力去設計方案,去平衡方案的好壞,去費腦筋考慮
選擇哪個方案,由于只有唯一的方案擺在你面前,你只能這么做,沒得選擇。
Hibernate相反,它太靈活了,相同的問題,你至少可以設計出十幾種方案來解決,所以特
別的犯難,究竟用這個,還是用那個呢?這些方案之間到底有什么區別呢?他們的運營原
理有什么不同?運營效率哪個比較好?光是主鍵生成,就有七八種方案供你選擇,你為難不
為難?集合屬性可以用Set,可以用List,還可以用Bag,到底哪個效率高,你為難不為難?
查詢可以用iterator,可以用list,哪個好,有什么區別?你為難不為難?復合主鍵你可以
直接在hbm里面配置,也可以自定義CustomerType,哪種比較好些?你為難不為難?對于
一個表,你可以選擇單一映射一個對象,也可以映射成父子對象,還可以映射成兩個1:1
的對象,在什么情況下用哪種方案比較好,你為難不為難?
這個列表可以一直開列下去,直到你不想再看下去為止。當你面前擺著無數的眼花繚亂的方
案的時候,你會覺得幸福呢?還是悲哀呢?假如你是一個負責的程序員,那么你一定會仔
細研究每種方案的區別,每種方案的效率,每種方案的合用場合,你會覺得你已經陷入進去
拔不出來了。假如是用EB,你第一秒種就已經做出了決定,主線沒得選擇,比如說集合屬
性,你只能用Collection,假如是Hibernate.你會在Bag.List和Set之間來回躊躇不決,
甚至搞不清楚的話,程序都沒有辦法寫。
3.Spring
它是一個開源的項目,并且目前非常活躍;它基于IoC(InversionofControl,反向控制)和
AOP的構架多層j2ee系統的框架,但它不逼迫你必須在每一層中必須使用Spring,由于它
模塊化的很好,允許你根據自己的需要選擇使用它的某一個模塊;它實現了很優雅的MVC,
對不同的數據訪問技術提供了統一的接口,采用IoC使得可以很容易的實現bean的裝配,
提供了簡潔的AOP并據此實現TranscalionManagmenl,等等
優點:
a.Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。假如你僅僅使用了
Struts或其他為J2EE的API特制的framework,Spring致力于解決剩下的問題。
b.Spring能消除在許多工程中常見的對Singleton的過多使用。根據我的經驗,這是一個很
大的問題,它減少了系統的可測試性和面向對象的限度。
c.通過一種在不同應用程序和項目間一致的方法來解決配置文獻,Spring能消除各種各樣
自定義格式的屬性文獻的需要。曾經對某個類要尋找的是哪個魔法般的屬性項或系統屬性
感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean
屬性。InversionofControl的使用(在下面討論)幫助完畢了這種簡化。
d.通過把對接口編程而不是對類編程的代價幾乎減少到沒有,Spring可以促進養成好的編程
習慣。
e.Spring被設計為讓使用它創建的應用盡也許少的依賴于他的APIs。在Spring應用中的大
多數業務對象沒有依賴于Springe
f.使用Spring構建的應用程序易于單元測試。
g.Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs
或localEJBs來實現業務接口,卻不會影響調用代碼。
h.Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們合用
于許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不通過EJB容器,假如
你僅僅需要與單個數據庫打交道,甚至不需要一個JTA實現。
i.Spring為數據存取提供了一個一致的框架,不管是使用的是JDBC還是O/Rmapping產品
(如Hibernate)()
Spring的確使你能通過最簡樸可行的解決辦法來解決你的問題。而這是有有很大價值的。
缺陷:
使用人數不多、jsp中要寫很多代碼、控制器過于靈活,缺少一個公用控制器。
6.Javaweb部分
1、Tomcat的優化經驗
答:去掉對web.xml的監視,把jsp提前編輯成Servlet。
有富余物理內存的情況,加大tomcat使用的jvm的內存
1、HTTP請求的GET與POST方式的區別
(1)get是從服務器上獲取數據,post是向服務器傳送數據。
在客戶端,Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放
置在HTMLHEADER內提交。
(2)對于get方式,服務器端用Request.QuerySlring獲取變量的值,對于post方式,服務
器端用Request.Form獲取提交的數據。
(3)GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。
(4)安全性問題。正如在(1)中提到,使用Get的時候,參數會顯示在地址欄上,而Post
不會。所以,假如這些數據是中文數據并且是非敏感數據,那么使用get;假如用戶輸入的
數據不是中文字符并且包含敏感數據,那么還是使用post為好。
62>解釋一下什么是servlet;
答:servlet有良好的生存期的定義,涉及加載和實例化、初始化、解決請求以及服務結束。
這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。
1、說一說Servlet的生命周期?
答:servlet有良好的生存期的定義,涉及加載和實例化、初始化、解決請求以及服務結束。
這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。
Servlet被服務器實例化后,容器運營其init方法,請求到達時運營其service方法,service
方法自動派遣運營與請求相應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷
毀的時候調用其destroy方法。
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。
通過調用service。方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容
器調用servlet的destroy。方法。
4、Servlet的基本架構
publicclassServletNameextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,lOException{
)
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,lOException{
)
)
3、SERVLETAPI中forward。與redirect。的區別?
答:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后
者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接。這樣,從瀏覽器的
地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量
使用forward。方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳
轉到一個其它服務器上的資源,則必須使用
sendRedirect。方法。
60、什么情況下調用doGet()和doPost()?
Jsp頁面中的FORM標簽里的method屬性為get時調用doGet(),為post時調用doPost()Q
66>Request對象的重要方法:
setAttribute(Stringname,Object):設立名字為name的request的參數值
getAttribute(Stringname):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(Stringname):獲得HTTP協議定義的文獻頭信息
getHeaders(Stringname):返回指定名字的requestHeader的所有值,結果是一個枚舉的實例
getHeaderNames():返回所以requestHeader的名字,結果是一個枚舉的實例
getlnputStreamO:返回請求的輸入流,用于獲得請求中的數據
getMethod():獲得客戶端向服務器端傳送數據的方法
getParameter(Stringname):獲得客戶端傳送給服務器端的有name指定的參數值
getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實
例
getParametervalues(Stringname):獲得有name指定的參數的所有值
getProtocoK):獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryStringO:獲得查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Booleancreate]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文獻的途徑
getServerPort():獲取服務器的端標語
removeAttribute(Stringname):刪除請求中的一個屬性
19>forward和redirect的區別
forward是服務器請求資源,服務器直接訪問目的地址的URL,把那個URL的響應內容讀
取過來,然后把這些內容再發給瀏覽器,瀏覽器主線不知道服務器發送的內容是從哪兒來的,
所以它的地址欄中還是本來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來
說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。
4、request.getAttribute()和request.getParameter()有何區別?
l.getAttribute是取得jsp中用setAttribute^定的attribute
2.parameter得至!]的是string;attribute得到的是object
3.request.getParameter()方法傳遞的數據,會從Web客戶端傳到Web服務器端,代表HTTP
請求數據;request.setAtlribule。和geiAltribute。方法傳遞的數據只會存在于Web容器內部,
在具有轉發關系的Web組件之間共享。即request.getAttribute。方法返回request范圍內存在
的對象,而request.gelParameier()方法是獲取http提交過來的數據。
l.jsp有哪些內置對象?作用分別是什么?分別有什么方法?
答:JSP共有以下9個內置的對象:
request用戶端請求,此請求會包含來自GET/POST請求的參數
response網頁傳回用戶端的回應
pageContext網頁的屬性是在這里管理
session與請求有關的會話期
applicationservlet正在執行的內容
out用來傳送回應的輸出
configservlet的構架部件
pageJSP網頁自身
exception針對錯誤網頁,未捕獲的例外
request表達HttpServletRequest對象。它包含了有關瀏覽器請求的信息,并且提供了幾個用
于獲取cookie,header,和session數據的有用的方法。
response表達HttpServletResponse對象,并提供了幾個用于設立送回瀏覽器的響應的方
法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送
輸出結果。
pageContext表達一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的
名字空間、servlel相關的對象的API,并且包裝了通用的servlet相關功能的方法。
session表達一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態
信息
applicaton表達一個javax.servle.ServletContext對象。這有助于查找有關servlet引擎和
servlet環境的信息
config表達一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參
數。
page表達從該頁面產生的一個servlet實例
2.jsp有哪些動作?作用分別是什么?
(這個問題似乎不重要,不明白為什么有此題)
答:JSP共有以下6種基本動作
jsp:include:在頁面被請求的時候引入一個文獻。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設立JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記
59、JSP的常用指令
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式)
3.JSP中動態INCLUDE與靜態INCLUDE的區別?
答:動態INCLUDE用jsp:include動作實現
<j即:includepage=included.jspflush=true/>它總是會檢查所含文獻中的變化,適合用于包含動
態頁面,并且可以帶參數靜態INCLUDE用include偽碼實現,定不會檢查所含文獻的變化,
合用于包含靜態頁面<%@includefile=included.htm%>
4、兩種跳轉方式分別是什么?有什么區別?
(下面的回答嚴重錯誤,應當是想問forward和sendRedirect的區別,畢竟出題的人不是專
業搞文字藝術的人,也許表達能力并不見得很強,用詞不一定精確,加之其自身的技術面也
也許存在一些問題,不一定真正將他的意思表達清楚了,嚴格意思上來講,一些題目也許主
線就無人能答,所以,答題時要掌握積極,只要把自己知道的表達清楚就夠了,而不要去推
敲原始題目的具體含義是什么,不要一味想著是在答題)
答:有兩種,分別為:
<jsp:includepage=included.jspflush=true>
<jsp:forwardpage=nextpage.jsp/>
前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是本來的頁面。執
行完后還會回來,相稱于函數調用。并且可以帶參數.后者完全轉向新頁面,不會再回來。
相稱于goto語句。
63、頁面間對象傳遞的方法
request,session,application,cookie等
64、JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什么?
JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編
譯后是"類servlet"。Servlet和JSP最重要的不同點在于,Servlet的應用邏輯是在Java文獻
中,并且完全從表達層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成
一個擴展名為.jsp的文獻。JSP側重于視圖,Servlet重要用于控制邏輯。
1、MVC的各個部分都有那些技術來實現?如何實現?
答:MVC是Model-View-Controller的簡寫。Model代表的是應用的業務邏輯(通過
JavaBean,EJB組件實現),View是應用的表達面(由JSP頁面產生),Controller是提供
應用的解決過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,解決過程和顯
示邏輯提成不同的組件實現。這些組件可以進行交互和重用。
68、我們在web應用開發過程中經常碰到輸出某種編碼的字符,如iso8859-l等,如何輸出
一個某種編碼的字符串?
PublicStringtranslate(Stringstr){
StringtempStr="”;
try(
tempStr=newString(str.getBytes(,'ISO-8859-r,),"GBK");
tempStr=tempStr.trim();
}
catch(Exceptione){
System.err.println(e.getMessage());
)
returntempStr;
1.現在輸入n個數字,以逗號,分開;然后可選擇升或者降序排序;按提交鍵就在另一頁
面顯示按什么排序,結果為,提供reset
7.實際項目開發
1、在eclipse中調試時,如何查看一個變量的值?
在要查看的變量前先設立斷點,然后選中變量,右鍵選debugas->JavaApplication,打開
debug透視圖,這時在Variables窗口中可以看到變量當前的值。
假如是局部變量,也可以在局部變量窗口中查看。
要知道一個方法被調用的方法調用鏈,可以在方法棧中查看。
2、你們公司使用的代碼配置管理工具是什么?
除了說以前使用cvs,現在新項目使用svn了,還簡要說一下使用的過程,假如有也許,還
說說倉庫的概念和如何使用鎖之類的細節。
3、你們的項目總金額多少,多少人開發,總共花了多少個月?
像巴巴運動網這種規模的項目,可以說是4、5個人、開發了4、5個月,費用則是4、50
萬。按每人每月兩萬收入去計算,就差不多了。
7.數據庫部分
1、用兩種方式根據部門號從高到低,工資從低到高列出每個員工的信息。
employee:
eid,ename,salary,deptid;
select*fromemployeeorderbydeptiddesc,salary
2、列出各個部門中工資高于本部門的平均工資的員工數和部門號,并按部門號排序
創建表:
mysql>createtableemployee921(idintprimarykeyauto_increment,namevarchar(5
0),salarybigint,deptidini);
插入實驗數據:
mysql>insertintoemployee921values(null/zs\1000,1),(null,'ls,,1100,1),(null
;ww\l100,1),(null,'zl;900,l),(null;zl',1000,2),(null,'zl',900,2),(null;z
r,1000,2),(null;zr,1100,2);
編寫sql語句:
()selectavg(salary)fromemployee921groupbydeptid;
()mysql>selectemployee92l.id,,employee921.salary,employee92l.dep
tidtidfromemployee921wheresalary>(selectavg(salary)fromemployee921wheredeptid=
tid);
效率低的一個語句,僅供學習參考使用(在groupby之后不能使用where,只能使用
having,在groupby之前可以使用where,即表達對過濾后的結果分組):
mysql>selectemployee921.id,,employee921.salary,employee92l.dep
tidtidfromemployee921wheresalary>(selectavg(salary)fromemployee921groupbydeptid
havingdeptid=tid);
()selectcount(*),tid
from(
selectemployee921.id,,employee921.salary,employee921.deptidtid
fromemployee921
wheresalary>
(selectavg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版2024-2025學年七下數學期末模擬練習卷-學生用卷
- 陜西省西安市遠東第二中學2024-2025學年八年級下學期5月月考道德與法治試卷(無答案)
- 工業廢棄物處理與污染防治
- 工業旅游視角下的現代廠區建設
- 工業機器人系統設計與應用研究
- 工業機器人與數控技術的融合
- 工業機器人技術及其電機控制策略
- 工業污染監測與控制技術
- 工業污染防治的新技術動態
- 工業污染防治措施與標準
- 招標代理服務投標方案(技術標)
- 行業周期波動中的政策導向-洞察分析
- 2025年山西云時代技術有限公司招聘筆試參考題庫含答案解析
- 河南省駐馬店市2023-2024學年高二下學期7月期末考試 英語 含解析
- 2025年中國中煤能源集團限公司招聘10人高頻重點提升(共500題)附帶答案詳解
- 發展性障礙學生就業轉銜的家長支持研究
- 《保密意識培訓》課件
- 2024年6月英語四級考試真題及答案(第1套)
- 2024中國糖尿病合并慢性腎臟病臨床管理共識解讀
- 糖尿病的中醫科普
- 寺院承包合同范例
評論
0/150
提交評論