版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java工程師(程序員)面題
Struts,Spring,Hibernate三大框架
1.Hibernate工作原理及為什么要用?
原理:1.讀取并解析配置文獻(xiàn)2.讀取并解析映射信息,創(chuàng)建SessionFactory3.打開Session4.
創(chuàng)建事務(wù)Transation5.持久化操作6.提交事務(wù)7.關(guān)閉Session8.關(guān)閉SesstionFactory
為什么要用:1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的反復(fù)
性代碼。2.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他
很大限度的簡化DAO層的編碼工作3.hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強程
序來實現(xiàn)透明性。4.hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰
出。它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。
2.Hibernate是如何延遲加載?
1.Hibemate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)
2.Hibernate3提供了屬性的延遲加載功能當(dāng)Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在
與內(nèi)存中,當(dāng)程序真正對數(shù)據(jù)的操作時,對象才存在與內(nèi)存中,就實現(xiàn)了延遲加載,他節(jié)省
了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。
3.Hibernate中如何實現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)系)
類與類之間的關(guān)系重要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都是對對象進(jìn)行操作,我們
程序中把所有的表與類都映射在一起,它們通過配置文獻(xiàn)中的many-to-onesone-to-many>
many-to-many
4.Strutsl流程:
1、客戶端瀏覽器發(fā)出HTTP請求。2、根據(jù)web.xml配置,該請求被ActionServlet接受。3、
根據(jù)struts-config.xml配置,ActionServlet先將請求中的參數(shù)填充到ActionForm中,然后
ActionServlet再將請求發(fā)送到Action進(jìn)行解決。4、是否驗證,需要驗證則調(diào)用ActionForm
的validate方法,驗證失敗則跳轉(zhuǎn)到input,成功則繼續(xù)。5、Action從ActionForm獲得數(shù)據(jù),
調(diào)用javabean中的業(yè)務(wù)方法解決數(shù)據(jù)。6、Action返回ActionForward對象,跳轉(zhuǎn)到相應(yīng)JSP
頁面或Action。7、返回HTTP響應(yīng)到客戶端瀏覽器。
MVC設(shè)計模式:modal:“模型”也稱業(yè)務(wù)邏輯,是正真完畢任務(wù)的代碼,相稱與
JavaBeanview:視圖,其實就是顯示界面,相稱于JSPcontroller:控制器,他控制模型和視
圖的交互過程,相稱于servletstruts1是基于MVC設(shè)計模式hibernate是基于ORM對象關(guān)系
映射
5.struts是什么?
struts1是基于JSP和servlet的一個開源的Web應(yīng)用框架,使用的是MVC的設(shè)計模式struts2
是基于webwork技術(shù)的框架,是sun和webwork公司聯(lián)手開發(fā)的一個功能非常齊全的框架,
struts?和struts1沒有任何關(guān)系,是一個全新的框架
6.spring是什么?
spring是一個集成了許多第三方框架的大雜燒,其核心技術(shù)是IOC(控制反轉(zhuǎn),也稱依賴注
入)和AOP(面向切面編程)
7.hibernate是什么?
hibernate是基于ORM對象關(guān)系映射(完畢對象數(shù)據(jù)到關(guān)系數(shù)據(jù)映射的機(jī)制)實現(xiàn)的,做數(shù)據(jù)
持久化的工具
8.JSF是什么?
JavaServerFace是基于組件的web開發(fā)框架,跟Sturts差不多的框架
9.數(shù)據(jù)庫里面的索引和約束是什么?
索引是為了提高數(shù)據(jù)的檢索速度,索引是建立在數(shù)據(jù)表上,根據(jù)一個或多個字段建立的約束
是為了保持?jǐn)?shù)據(jù)的完整性,約束有非空約束,主鍵約束,外鍵約束等等。
lO.spring是什么
這個問題,往往可以通過我們?yōu)槭裁匆褂胹pring這個問題來切入:AOP讓開發(fā)人員可以
創(chuàng)建非行為性的關(guān)注點,稱為橫切關(guān)注點,并將它們插入到應(yīng)用程序代碼中。使用AOP后,
公共服務(wù)(比如日記、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊希瑫r不會
增長域?qū)ο蟮膶ο竽P偷膹?fù)雜性。IOC允許創(chuàng)建一個可以構(gòu)造對象的應(yīng)用環(huán)境,然后向這
些對象傳遞它們的協(xié)作對象。正如單詞倒置所表白的,IOC就像反過來的JNDL沒有
使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),
每一個對象都是用其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)。Spring
即使一個AOP框架,也是一IOC容器。Spring最佳的地方是它有助于您替換對象。有了
Spring,只要用JavaBean屬性和配置文獻(xiàn)加入依賴性(協(xié)作對象)。然后可以很容易地在需
要時替換具有類似接口的協(xié)作對象。
11.用自己的話簡要闡述struts2的執(zhí)行流程。
Struts2框架自身大體可以分為3個部分:核心控制器FilterDispatcher、業(yè)務(wù)控制器Action
和用戶實現(xiàn)的公司業(yè)務(wù)邏輯組件。核心控制器FilterDispatcher是Struts2框架的基礎(chǔ),包含
了框架內(nèi)部的控制流程和解決機(jī)制。業(yè)務(wù)控制器Action和業(yè)務(wù)邏輯組件是需要用戶來自己
實現(xiàn)的。用戶在開發(fā)Action和業(yè)務(wù)邏輯組件的同時,還需要編寫相關(guān)的配置文獻(xiàn),供核心
控制器FilterDispatcher來使用。
Struts2的工作流程相對于Struts1要簡樸,與WebWork框架基本相同,所以說Struts2是
WebWork的升級版本?;竞喴鞒倘缦拢?、客戶端瀏覽器發(fā)出HTTP請求。2、根據(jù)web.xml
配置,該請求被FilterDispatcher接受。3、根據(jù)struts.xml配置,找到需要調(diào)用的Action類
和方法,并通過IoC方式,將值注入給Acitono4、Action調(diào)用業(yè)務(wù)邏輯組件解決業(yè)務(wù)邏輯,
這一步包含表單驗證。5、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到相應(yīng)的返回結(jié)果
result,并跳轉(zhuǎn)到相應(yīng)頁面。6、返回HTTP響應(yīng)到客戶端瀏覽器。
1Action是不是線程安全的?假如不是有什么方式可以保證Action的線程安全?假如是,
說明因素
不是
聲明局部變量,或者擴(kuò)展RequestProcessor,讓每次都創(chuàng)建一個Action,或者在spring中用
scope="prototype"來管理
2.MVC,分析一下struts是如何實現(xiàn)MVC的
m:JavaBean或結(jié)合EJB組件或者pojo構(gòu)成
c:Action來實現(xiàn)
v:一組JSP文獻(xiàn)及其標(biāo)簽構(gòu)成。
3.struts中的幾個關(guān)鍵對象的作用(說說幾個關(guān)鍵對象的作用)
Action:控制器類,ActionForm:表單對象,DynaValidatorForm:動態(tài)form,ActonMapping:
配置文獻(xiàn)中action節(jié)點的信息
4.說說AOP和IOC的概念以及在spring中是如何應(yīng)用的
AOP:面向方面編程,ioc:依賴注入;聲明式事務(wù)和編程式事務(wù)積極一些通用部分
5.Hibernate有哪幾種查詢數(shù)據(jù)的方式
hql查詢,sql查詢,條件查詢
6.1oad()和get()的區(qū)別
hibernate對于load方法認(rèn)為該數(shù)據(jù)在數(shù)據(jù)庫中一定存在,可以放心的使用代理來延遲加載,
load默認(rèn)支持延遲加載,在用到對象中的其他屬性數(shù)據(jù)時才查詢數(shù)據(jù)庫,但是萬一數(shù)據(jù)庫
中不存在該記錄,只能拋異常ObjectNolFoundEcception;所說的load方法拋異常是指在使
用該對象的數(shù)據(jù)時,數(shù)據(jù)庫中不存在該數(shù)據(jù)時拋異常,而不是在創(chuàng)建這個對象時。由于
session中的緩存對于hibernate來說是個相稱便宜的資源,所以在load時會先查一下session
緩存看看該id相應(yīng)的對象是否存在,不存在則創(chuàng)建代理(load時候之查詢一級緩存,不存
在則創(chuàng)建代理)。get()現(xiàn)在一級緩存找,沒有就去二級緩存找,沒有就去數(shù)據(jù)庫找,沒有就
返回null;而對于get方法,hibernate一定要獲取到真實的數(shù)據(jù),否則返回null。
7.談?wù)刪ibernate的延遲加載和openSessionlnView
延遲加載要在session范圍內(nèi),用到的時候再加載;opensessioninview是在web層寫了一個
filter來打開和關(guān)閉session,這樣就表達(dá)在一次request過程中session一直開著,保證了延
遲
加載在session中的這個前提。
8.spring的事務(wù)有幾種方式?談?wù)剆pring事務(wù)的隔離級別和傳播行為。
聲明事務(wù)和編程事務(wù)
隔離級別:
-DEFAULT使用數(shù)據(jù)庫默認(rèn)的隔離級別
-READ_UNCOMMITTED會出現(xiàn)臟讀,不可反復(fù)讀和幻影讀問題
-READ_COMMITTED會出現(xiàn)反復(fù)讀和幻影讀
-REPEATABLE_READ會出現(xiàn)幻影讀
-SERIALIZABLE最安全,但是代價最大,性能影響極其嚴(yán)重
和傳播行:
-REQUIRED存在事務(wù)就融入該事務(wù),不存在就創(chuàng)建事務(wù)
-SUPPORTS存在事務(wù)就融入事務(wù),不存在則不創(chuàng)建事務(wù)
-MANDATORY存在事務(wù)則融入該事務(wù),不存在,拋異常
-REQUIRES_NEW總是創(chuàng)建新事務(wù)
-NOT_SUPPORTED存在事務(wù)則掛起,一直執(zhí)行非事務(wù)操作
-NEVER總是執(zhí)行非事務(wù),假如當(dāng)前存在事務(wù)則拋異常
-NESTED嵌入式事務(wù)
9.Hibernate中的update。和saveOrUpdate()的區(qū)別.
摘自hibernate說明文檔:
saveOrUpdate。做下面的事:
假如對象已經(jīng)在本session中持久化了,不做任何事
假如另一個與本session關(guān)聯(lián)的對象擁有相同的持久化標(biāo)記(identifier),拋出一個異常
假如對象沒有持久化標(biāo)記(identifier)屬性,對其調(diào)用save()
假如對象的持久標(biāo)記(identifier)表白其是一個新實例化的對象,對其調(diào)用save()
假如對象是附帶版本信息的(通過〈version〉或<timestamp>)并且版本屬性的值表白其是
一個新實例化的對象,save。它。否則update。這個對象
lO.Spring對多種ORM框架提供了很好的支持,簡樸描述在Spring中使用Hibernate的方法,
并結(jié)合事務(wù)管理。
getHiberanteTemplate里面提供了save,update,delete,find等方法。
簡樸說一個:假如配置了聲明式事務(wù),當(dāng)執(zhí)行g(shù)etHibernaleTemplale的各種方法的時候,事
務(wù)會
自動被加載
假如沒有配置事務(wù),那么以上操作不會真正的被同步到數(shù)據(jù)庫,除非配置了hibernate的
autocommit=true
8.spring的事務(wù)有幾種方式?談?wù)剆pring事務(wù)的隔離級別和傳播行為。
spring事務(wù)分兩種形式,聲明式事務(wù)和編程式事務(wù),spring提供了一個事務(wù)的接口
PaltformTractionManager接口,針對不同的事務(wù),spring進(jìn)行了不同的實現(xiàn),對hibernate事務(wù)
的實現(xiàn)HIbernateTractionManager,對JDBC的JdbcTractionManager,
DataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了
個方法,獲取事務(wù),提交和回滾的方法。
分享面試題二】Spring,hibernale,struts的面試筆試題(含答案)
(聲明:這里不是為其他商業(yè)利益,是為學(xué)習(xí)討論使用)
【鄭重聲明]單純接分將被刪帖,希望大家有自己的感觸
Hibernate工作原理及為什么要用?
原理:
1.讀取并解析配置文獻(xiàn)
2.讀取并解析映射信息,創(chuàng)建SessionFactory
3.打開Sesssion
4.創(chuàng)建事務(wù)Transation
5.持久化操作
6.提交事務(wù)
7.關(guān)閉Session
8.關(guān)閉SesstionFactory
為什么要用:
1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的反復(fù)性代碼。
2.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大限
度的簡化DAO層的編碼工作
3.hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。
4.hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰出。它支持各種
關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。
2.Hibernate是如何延遲加載?
1.Hibemate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)
2.Hibemate3提供了屬性的延遲加載功能
當(dāng)Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內(nèi)存中,當(dāng)程序真正對數(shù)據(jù)的操作時,
對象才存在與內(nèi)存中,就實現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器
的性能。
3.Hibernate中如何實現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)系)
類與類之間的關(guān)系重要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都市對對象進(jìn)行操作,我們
程序中把所有的表與類都映射在一起,它們通過配置文獻(xiàn)中的many-to-one、one-to-many、
many-to-many、
4.說下Hibernate的緩存機(jī)制
1.內(nèi)部緩存存在Hibernate中又叫一級緩存,屬于應(yīng)用事物級緩存
2.二級緩存:
a)應(yīng)用及緩存
b)分布式緩存
條件:數(shù)據(jù)不會被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)
頻繁使用、非關(guān)鍵數(shù)據(jù)
c)第三方緩存的實現(xiàn)
5.Hibernate的查詢方式
Sql、Criteria,objectcomptosition
Hql:
1、屬性查詢
2、參數(shù)查詢、命名參數(shù)查詢
3、關(guān)聯(lián)查詢
4、分頁查詢
5、記錄函數(shù)
6.如何優(yōu)化Hibernate?
1.使用雙向一對多關(guān)聯(lián),不使用單向一對多
2.靈活使用單向一對多關(guān)聯(lián)
3.不用一對一,用多對一取代
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6.繼承類使用顯式多態(tài)
7.表字段要少,表關(guān)聯(lián)不要怕多,有二級緩存撐腰
7.Struts工作機(jī)制?為什么要使用Struts?
工作機(jī)制:
Struts的工作流程:
在web應(yīng)用啟動時就會加載初始化ActionServlet,ActionServlet從
struts-config.xml文獻(xiàn)中讀取配置信息,把它們存放到各種配置對象
當(dāng)ActionServlet接受到一個客戶請求時,將執(zhí)行如下流程.
-(1)檢索和用戶請求匹配的ActionMapping實例,假如不存在,就返回請求途徑無效信息;
-(2)假如ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保
存到ActionForm對象中;
-(3)根據(jù)配置信息決定是否需要表單驗證.假如需要驗證,就調(diào)用ActionForm的validate()
方法;
-(4)假如ActionForm的validate。方法返回null或返回一個不包含ActionMessage的
ActuibErrors對象,就表達(dá)表單驗證成功;
-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action,
假如相應(yīng)的Action實例不存在,就先創(chuàng)建這個實例,然后調(diào)用Action
的execute。方法;
-(6)Action的execute。方法返回一個ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)
發(fā)給ActionForward對象指向的JSP組件;
-(7)ActionForward對象指向JSP組件生成動態(tài)網(wǎng)頁,返回給客戶;
為什么要用:
JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強大的公司應(yīng)用系統(tǒng)提供了也許。但用這些
技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個規(guī)則、一個把這些技術(shù)組織起來
的規(guī)則,這就是框架,Struts便應(yīng)運而生。
基于Struts開發(fā)的應(yīng)用由3類組件構(gòu)成:控制器組件、模型組件、視圖組件
8.Struts的validate框架是如何驗證的?
在struts配置文獻(xiàn)中配置具體的錯誤提醒,再在FormBean中的validate。方法具體調(diào)用。
9.說下Struts的設(shè)計模式
MVC模式:web應(yīng)用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配
置好的ActionForm對象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)
Struts-config.xml文獻(xiàn)配置好的設(shè)立決定是否需要表單驗證,假如需要就調(diào)用ActionForm的
Validate()驗證后選擇將請求發(fā)送到哪個Action,假如Action不存在,ActionServlet會先
創(chuàng)建這個對象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對象中獲
取數(shù)據(jù),完畢業(yè)務(wù)邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給
ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網(wǎng)頁,返回
給客戶。
10.spring工作機(jī)制及為什么要用?
1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)
責(zé)對請求進(jìn)行真正的解決工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到解決請求的Controller.
3.DispatcherServlet請請求提交到目的Controller
4.Controller進(jìn)行業(yè)務(wù)邏輯解決后,會返回一個ModelAndView
5.Dispathcher查詢一■個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視
圖對象
6.視圖對象負(fù)責(zé)渲染返回給客戶端。
為什么用:
(AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點,稱為橫切關(guān)注點,并將它們插入到應(yīng)用程序
代碼中。使用AOP后,公共服務(wù)(比如日記、持久性、事務(wù)等)就可以分解成方面并應(yīng)
用到域?qū)ο笊希瑫r不會增長域?qū)ο蟮膶ο竽P偷膹?fù)雜性。
IOC允許創(chuàng)建一個可以構(gòu)造對象的應(yīng)用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。
正如單詞倒置所表白的,IOC就像反過來的JNDL沒有使用一堆抽象工廠、服務(wù)定位
器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個對象都是用其協(xié)作對象
構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)。
Spring即使一個AOP框架,也是一IOC容器。Spring最佳的地方是它有助于您替換對象。
有了Spring,只要用JavaBean屬性和配置文獻(xiàn)加入依賴性(協(xié)作對象)。然后可以很容易
地在需要時替換具有類似接口的協(xié)作對象。}
Struts,Spring,Hibernate優(yōu)缺陷
Struts跟Tomcat、Turbine等諸多Apache項目同樣,是開源軟件,這是它的一大優(yōu)點。使
開發(fā)者能更進(jìn)一步的了解其內(nèi)部實現(xiàn)機(jī)制。Struts開放源碼框架的創(chuàng)建是為了使開發(fā)者在
構(gòu)建基于JavaServlet和JavaServerPages(JSP)技術(shù)的Web應(yīng)用時更加容易。Struts框架為
開放者提供了一個統(tǒng)一的標(biāo)準(zhǔn)框架,通過使用Struts作為基礎(chǔ),開發(fā)者可以更專注于應(yīng)用
程序的商業(yè)邏輯。Struts框架自身是使用JavaServlet和JavaServerPages技術(shù)的一種
Model-View-Controller(MVC)實現(xiàn).
具體來講,
Struts的優(yōu)點有:
1.實現(xiàn)MVC模式,結(jié)構(gòu)清楚,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實現(xiàn).
2.有豐富的tag可以用,Struts的標(biāo)記庫(Taglib),如能靈活動用,則能大大提高開發(fā)效率。
此外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標(biāo)記外,很少開發(fā)自己的標(biāo)
記,或許Struts是一個很好的起點。
3.頁面導(dǎo)航.頁面導(dǎo)航將是此后的一個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡(luò)更加清楚。
通過一個配置文獻(xiàn),即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護(hù)有著莫大的好
處。特別是當(dāng)另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。
4.提供Exception解決機(jī)制.
5.數(shù)據(jù)庫鏈接池管理
6.支持I18N
缺陷:
一、轉(zhuǎn)到展示層時,需要配置forward,每一次轉(zhuǎn)到展示層,相信大多數(shù)都是直接轉(zhuǎn)到j(luò)sp,
而涉及到轉(zhuǎn)向,需要配置forward,假如有十個展示層的jsp,需要配置十次struts,并且還
不涉及有時候目錄、文獻(xiàn)變更,需要重新修改forward,注意,每次修改配置之后,規(guī)定重
新部署整個項目,而tomcate這樣的服務(wù)器,還必須重新啟動服務(wù)器,假如業(yè)務(wù)變更復(fù)雜頻
繁的系統(tǒng),這樣的操作簡樸不可想象?,F(xiàn)在就是這樣,幾十上百個人同時在線使用我們的
系統(tǒng),大家可以想象一下,我的煩惱有多大。
二、Struts的Action必需是thread—safe方式,它僅僅允許一個實例去解決所有的請求。
所以action用到的所有的資源都必需統(tǒng)一同步,這個就引起了線程安全的問題。
三、測試不方便.Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴于Web
容器,單元測試也很難實現(xiàn)。但是有一個Junit的擴(kuò)展工具StrutsTestCase可以實現(xiàn)它的單
元測試。
四、類型的轉(zhuǎn)換.Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具
Commons-Beanutils進(jìn)行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級別,并且轉(zhuǎn)化的類型是不可
配置的。類型轉(zhuǎn)化時的錯誤信息返回給用戶也是非常困難的。
五、對Servlet的依賴性過強.Struts解決Action時必需要依賴ServletRequest和
ServletResponse,所有它擺脫不了Servlet容器。
六、前端表達(dá)式語言方面.Struts集成了JSTL,所以它重要使用JSTL的表達(dá)式語言來獲取數(shù)
據(jù)。可是JSTL的表達(dá)式語言在Collection和索引屬性方面解決顯得很弱。
七、對Action執(zhí)行的控制困難.Struts創(chuàng)建一個Action,假如想控制它的執(zhí)行順序?qū)浅?/p>
困難。甚至你要重新去寫Servlet來實現(xiàn)你的這個功能需求。
八、對Action執(zhí)行前和后的解決.Struts解決Action的時候是基于class的hierarchies,很
難在action解決前和后進(jìn)行操作。
九、對事件支持不夠.在struts中,實際是一個表單Form相應(yīng)一個Action類(或
DispatchAction),換一句話說:在Struts中實際是一個表單只能相應(yīng)一個事件,struts這種
事件方式稱為叩plicationevent,applicationevent和componentevent相比是一種粗粒度的事
件。
Struts重要的表單對象ActionForm是一種對象,它代表了一■種應(yīng)用,這個對象中至少包含幾
個字段,這些字段是Jsp頁面表單中的input字段,由于一個表單相應(yīng)一個事件,所以,當(dāng)
我們需要將事件粒度細(xì)化到表單中這些字段時,也就是說,一個字段相應(yīng)一個事件時,單
純使用Struts就不太也許,當(dāng)然通過結(jié)合JavaScript也是可以轉(zhuǎn)彎實現(xiàn)的。
2.Hibernate
Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封
裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。
Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱?,也可以?/p>
Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架
構(gòu)中取代CMP,完畢數(shù)據(jù)持久化的重任。
大多數(shù)開發(fā)機(jī)構(gòu)經(jīng)常采用創(chuàng)建各自獨立的數(shù)據(jù)持久層。一旦底層的數(shù)據(jù)結(jié)構(gòu)發(fā)生改變,那么
修改應(yīng)用的其余部分使之適應(yīng)這種改變的代價將是十分巨大的。Hibernate適時的填補了這
一空白,它為Java應(yīng)用提供了一個易用的、高效率的對象關(guān)系映射框架。hibernate是個輕
量級的持久性框架,功能卻非常豐富。
優(yōu)點:
a.Hibernate使用Java反射機(jī)制而不是字節(jié)碼增強程序來實現(xiàn)透明性。
b.Hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰出。
c.它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。
缺陷:
它限制您所使用的對象模型。(例如,一個持久性類不能映射到多個表)其獨有的界面和可憐
的市場份額也讓人不安,盡管如此,Hibernate還是以其強大的發(fā)展動力減輕了這些風(fēng)險。
其他的開源持久性框架也有一些,但是都沒有Hibernate這樣有市場沖擊力。
上面回貼情緒有點激動,希望諒解,我不是由于有人批評Hibernate而感到不快,而是由于
帖子里面的觀點實在讓我覺得荒唐。不管覺得Hibernate好也吧,不好也吧,我唯一覺得遺
憾的是,在中文論壇里面找不到一個對Hibernate的真正高水平的評價。在TSS上有一個關(guān)
于Hibernate的hotthread,跟了幾百貼,其中涉及Hibernate作者Gavin和LiDOJDO的CTO,
對于JDO和Hibernate有過一些劇烈的爭論,我曾經(jīng)耐心的看了一遍,仍然沒有發(fā)現(xiàn)針對
Hibernate真正有力的襲擊,那些所謂的襲擊無非針對Hibernate沒有一個GUI的配置工具,
沒有商業(yè)公司支持,沒有標(biāo)準(zhǔn)化等等這些站不住腳的理由。
補充幾點我的意見:
一、Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,和AppServer,
和EJB沒有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場合,例如Java應(yīng)
用程序的數(shù)據(jù)庫訪問代碼,DAO接口的實現(xiàn)類,甚至可以是BMP里面的訪問數(shù)據(jù)庫的代
碼。從這個意義上來說,Hibernate和EB不是一個范疇的東西,也不存在非此即彼的關(guān)系。
二、Hibernate是一個和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動,和
數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的Java程序,和AppServer沒有任何關(guān)系,也不存
在兼容性問題。
三、Hibernate不能用來直接和EntityBean做對比,只有放在整個J2EE項目的框架中才干比
較。并且即使是放在軟件整體框架中來看,Hibernate也是做為JDBC的替代者出現(xiàn)的,而不
是EntityBean的替代者出現(xiàn)的,讓我再列一次我已經(jīng)列n次的框架結(jié)構(gòu):
傳統(tǒng)的架構(gòu):
1)SessionBean<->EntityBean<->DB
為了解決性能障礙的替代架構(gòu):
2)SessionBean<->DAO<->JDBC<->DB
使用Hibernate來提高上面架構(gòu)的開發(fā)效率的架構(gòu):
3)SessionBean<->DAO<->Hibernate<->DB
就上面3個架構(gòu)來分析:
I、內(nèi)存消耗:采用JDBC的架構(gòu)2無疑是最省內(nèi)存的,Hibernate的架構(gòu)3次之,EB的架
構(gòu)1最差。
2、運營效率:假如JDBC的代碼寫的非常優(yōu)化,那么JDBC架構(gòu)運營效率最高,但是實際
項目中,這一點幾乎做不到,這需要程序員非常精通JDBC,運用Batch語句,調(diào)整
PreapredStatement的BatchSize和FetchSize等參數(shù),以及在必要的情況下采用結(jié)果集cache
等等。而一般情況下程序員是做不到這一點的。因此Hibernate架構(gòu)表現(xiàn)出最快的運營效率。
EB的架構(gòu)效率會差的很遠(yuǎn)。
3、開發(fā)效率:在有JBuilder的支持下以及簡樸的項目,EB架構(gòu)開發(fā)效率最高,JDBC次之,
Hibernate最差。但是在大的項目,特別是持久層關(guān)系映射很復(fù)雜的情況下,Hibernate效率
高的驚人,JDBC次之,而EB架構(gòu)很也許會失敗。
4、分布式,安全檢查,集群,負(fù)載均衡的支持
由于有SB做為Facade,3個架構(gòu)沒有區(qū)別。
四、EB和Hibernate學(xué)習(xí)難度在哪里?
EB的難度在哪里?不在復(fù)雜的XML配置文獻(xiàn)上,而在于EB運用稍微不慎,就有嚴(yán)重的性
能障礙。所以難在你需要學(xué)習(xí)很多EJB設(shè)計模式來避開性能問題,需要學(xué)習(xí)AppServer和
EB的配置來優(yōu)化EB的運營效率。做EB的開發(fā)工作,程序員的大部分精力都被放到了EB
的性能問題上了,反而沒有更多的精力關(guān)注自身就重要投入精力去考慮的對象持久層的設(shè)
計上來。
Hibernate難在哪里?不在Hibernate自身的復(fù)雜,事實上Hibernate非常的簡樸,難在Hibernate
太靈活了。
當(dāng)你用EB來實現(xiàn)持久層的時候,你會發(fā)現(xiàn)EB實在是太笨拙了,笨拙到你主線沒有什么可
以選擇的余地,所以你主線就不用花費精力去設(shè)計方案,去平衡方案的好壞,去費腦筋考慮
選擇哪個方案,由于只有唯一的方案擺在你面前,你只能這么做,沒得選擇。
Hibernate相反,它太靈活了,相同的問題,你至少可以設(shè)計出十幾種方案來解決,所以特
別的犯難,究竟用這個,還是用那個呢?這些方案之間到底有什么區(qū)別呢?他們的運營原
理有什么不同?運營效率哪個比較好?光是主鍵生成,就有七八種方案供你選擇,你為難不
為難?集合屬性可以用Set,可以用List,還可以用Bag,到底哪個效率高,你為難不為難?
查詢可以用iterator,可以用list,哪個好,有什么區(qū)別?你為難不為難?復(fù)合主鍵你可以
直接在hbm里面配置,也可以自定義CustomerType,哪種比較好些?你為難不為難?對于
一個表,你可以選擇單一映射一個對象,也可以映射成父子對象,還可以映射成兩個1:1
的對象,在什么情況下用哪種方案比較好,你為難不為難?
這個列表可以一直開列下去,直到你不想再看下去為止。當(dāng)你面前擺著無數(shù)的眼花繚亂的方
案的時候,你會覺得幸福呢?還是悲哀呢?假如你是一個負(fù)責(zé)的程序員,那么你一定會仔
細(xì)研究每種方案的區(qū)別,每種方案的效率,每種方案的合用場合,你會覺得你已經(jīng)陷入進(jìn)去
拔不出來了。假如是用EB,你第一秒種就已經(jīng)做出了決定,主線沒得選擇,比如說集合屬
性,你只能用Collection,假如是Hibernate.你會在Bag,List和Set之間來回躊躇不決,
甚至搞不清楚的話,程序都沒有辦法寫。
3.Spring
它是一個開源的項目,并且目前非?;钴S:它基于IoC(InversionofControl,反向控制)和
AOP的構(gòu)架多層j2ee系統(tǒng)的框架,但它不逼迫你必須在每一層中必須使用Spring,由于它
模塊化的很好,允許你根據(jù)自己的需要選擇使用它的某一個模塊;它實現(xiàn)了很優(yōu)雅的MVC,
對不同的數(shù)據(jù)訪問技術(shù)提供了統(tǒng)一的接口,采用IoC使得可以很容易的實現(xiàn)bean的裝配,
提供了簡潔的AOP并據(jù)此實現(xiàn)TranscationManagment,等等
優(yōu)點:
a.Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。假如你僅僅使用了
Struts或其他為J2EE的API特制的framework,Spring致力于解決剩下的問題。
b.Spring能消除在許多工程中常見的對Singleton的過多使用。根據(jù)我的經(jīng)驗,這是一個很
大的問題,它減少了系統(tǒng)的可測試性和面向?qū)ο蟮南薅取?/p>
c.通過一種在不同應(yīng)用程序和項目間一致的方法來解決配置文獻(xiàn),Spring能消除各種各樣
自定義格式的屬性文獻(xiàn)的需要。曾經(jīng)對某個類要尋找的是哪個魔法般的屬性項或系統(tǒng)屬性
感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean
屬性。InversionofControl的使用(在下面討論)幫助完畢了這種簡化。
d.通過把對接口編程而不是對類編程的代價幾乎減少到?jīng)]有,Spring可以促進(jìn)養(yǎng)成好的編程
習(xí)慣。
e.Spring被設(shè)計為讓使用它創(chuàng)建的應(yīng)用盡也許少的依賴于他的APIs。在Spring應(yīng)用中的大
多數(shù)業(yè)務(wù)對象沒有依賴于Springe
f.使用Spring構(gòu)建的應(yīng)用程序易于單元測試。
g.Spring能使EJB的使用成為一個實現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs
或localEJBs來實現(xiàn)業(yè)務(wù)接口,卻不會影響調(diào)用代碼。
h.Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們合用
于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)管理而不通過EJB容器,假如
你僅僅需要與單個數(shù)據(jù)庫打交道,甚至不需要一個JTA實現(xiàn)。
i.Spring為數(shù)據(jù)存取提供了一個一致的框架,不管是使用的是JDBC還是O/Rmapping產(chǎn)品
(如Hibernate)o
Spring的確使你能通過最簡樸可行的解決辦法來解決你的問題。而這是有有很大價值的。
缺陷:
使用人數(shù)不多、jsp中要寫很多代碼、控制器過于靈活,缺少一個公用控制器。
6.Javaweb部分
1、Tomcat的優(yōu)化經(jīng)驗
答法掉對web.xml的監(jiān)視,把jsp提前編輯成Servlet。
有富余物理內(nèi)存的情況,加大tomcat使用的jvm的內(nèi)存
1、HTTP請求的GET與POST方式的區(qū)別
(1)get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。
在客戶端,Get方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)放
置在HTMLHEADER內(nèi)提交。
(2)對于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對于post方式,服務(wù)
器端用Request.Form獲取提交的數(shù)據(jù)。
(3)GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。
(4)安全性問題。正如在(1)中提到,使用Get的時候,參數(shù)會顯示在地址欄上,而Post
不會。所以,假如這些數(shù)據(jù)是中文數(shù)據(jù)并且是非敏感數(shù)據(jù),那么使用get;假如用戶輸入的
數(shù)據(jù)不是中文字符并且包含敏感數(shù)據(jù),那么還是使用post為好。
62、解釋一下什么是servlet;
答:servlet有良好的生存期的定義,涉及加載和實例化、初始化、解決請求以及服務(wù)結(jié)束。
這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達(dá)。
1、說一說Servlet的生命周期?
答:servlet有良好的生存期的定義,涉及加載和實例化、初始化、解決請求以及服務(wù)結(jié)束。
這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達(dá)。
Servlet被服務(wù)器實例化后,容器運營其init方法,請求到達(dá)時運營其service方法,service
方法自動派遣運營與請求相應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實例銷
毀的時候調(diào)用其destroy方法。
web容器加載servlet,生命周期開始。通過調(diào)用servlet的init()方法進(jìn)行servlet的初始化。
通過調(diào)用service。方法實現(xiàn),根據(jù)請求的不同調(diào)用不同的do***()方法。結(jié)束服務(wù),web容
器調(diào)用servlet的destroy。方法。
4、Servlet的基本架構(gòu)
publicclassServletNameextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,lOException{
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,lOException{
)
)
3、SERVLETAPI中forward()與redirect。的區(qū)別?
答:前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的地址;后
者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的
地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量
使用forward。方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳
轉(zhuǎn)到一個其它服務(wù)器上的資源,則必須使用
sendRedirect。方法。
60>什么情況下調(diào)用doGet()和doPost()?
Jsp頁面中的FORM標(biāo)簽里的method屬性為get時調(diào)用doGet(),為post時調(diào)用doPost()o
66>Request對象的重要方法:
setAttribute(Stringname,Object):設(shè)立名字為name的request的參數(shù)值
getAttribute(Stringname):返回由name指定的屬性值
getAttributeNamesO:返回request對象所有屬性的名字集合,結(jié)果是一個枚舉的實例
getCookies():返回客戶端的所有Cookie對象,結(jié)果是一個Cookie數(shù)組
getCharacterEncodingO:返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(Stringname):獲得HTTP協(xié)議定義的文獻(xiàn)頭信息
getHeaders(Stringname):返回指定名字的requestHeader的所有值,結(jié)果是一個枚舉的實例
getHeaderNames():返回所以requestHeader的名字,結(jié)果是一個枚舉的實例
getlnputStreamO:返回請求的輸入流,用于獲得請求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(Stringname):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個枚舉的實
例
getParametervalues(Stringname):獲得有name指定的參數(shù)的所有值
getProtocoK):獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryStringO:獲得查詢字符串
getRequestURK):獲取發(fā)出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHostO:獲取客戶端的名字
getSession([Booleancreate]):返回和請求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請求的腳本文獻(xiàn)的途徑
getServerPort():獲取服務(wù)器的端標(biāo)語
removeAttribute(Stringname):刪除請求中的一個屬性
19>forward和redirect的區(qū)別
forward是服務(wù)器請求資源,服務(wù)器直接訪問目的地址的URL,把那個URL的響應(yīng)內(nèi)容讀
取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器主線不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,
所以它的地址欄中還是本來的地址。
redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,一般來
說瀏覽器會用剛才請求的所有參數(shù)重新請求,所以session,request參數(shù)都可以獲取。
4、request.getAttribute()和request.getParameter()有何區(qū)別?
1.getAttribute是取得jsp中用setAttribute鼓:定的attribute
2.parameter得到的是string;attribute得到的是object
3.request.getParameter()方法傳遞的數(shù)據(jù),會從Web客戶端傳到Web服務(wù)器端,代表HTTP
請求數(shù)據(jù);request.setAttribute。和getAttribute。方法傳遞的數(shù)據(jù)只會存在于Web容器內(nèi)部,
在具有轉(zhuǎn)發(fā)關(guān)系的Web組件之間共享。即request.getAllribule。方法返回request范圍內(nèi)存在
的對象,而request.getParameter。方法是獲取http提交過來的數(shù)據(jù)。
1.jsp有哪些內(nèi)置對象?作用分別是什么?分別有什么方法?
答:JSP共有以下9個內(nèi)置的對象:
request用戶端請求,此請求會包含來自GET/POST請求的參數(shù)
response網(wǎng)頁傳回用戶端的回應(yīng)
pageContext網(wǎng)頁的屬性是在這里管理
session與請求有關(guān)的會話期
applicationservlet正在執(zhí)行的內(nèi)容
out用來傳送回應(yīng)的輸出
configservlet的構(gòu)架部件
pageJSP網(wǎng)頁自身
exception針對錯誤網(wǎng)頁,未捕獲的例外
request表達(dá)HttpServletRequest對象。它包含了有關(guān)瀏覽器請求的信息,并且提供了幾個用
于獲取cookie,header,和session數(shù)據(jù)的有用的方法。
response表達(dá)HtlpServlelResponse對象,并提供了幾個用于設(shè)立送回瀏覽器的響應(yīng)的方
法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送
輸出結(jié)果。
pageContext表達(dá)一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的
名字空間、servlet相關(guān)的對象的API,并且包裝了通用的servlet相關(guān)功能的方法。
session表達(dá)一個請求的javax.servlet.http.HttpSession對象。Session可.以存貯用戶的狀態(tài)
信息
applicaton表達(dá)一個javax.servle.ServletConlext對象。這有助于查找有關(guān)servlet引擎和
servlet環(huán)境的信息
config表達(dá)一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參
數(shù)。
page表達(dá)從該頁面產(chǎn)生的一個servlet實例
2.jsp有哪些動作?作用分別是什么?
(這個問題似乎不重要,不明白為什么有此題)
答:JSP共有以下6種基本動作
jsp:include:在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年管涵施工與建筑廢棄物處理合同3篇
- 二零二五年度集裝箱購置與綠色港口運營合同3篇
- 二零二五年度集資房項目審計與財務(wù)報表編制合同3篇
- 2024年海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 二零二五年戶外廣告安裝工程量清單及結(jié)算合同3篇
- 吉林省農(nóng)安縣九年級物理全冊182電功率課件新版新人教版
- 2024年河南質(zhì)量工程職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2024年河南工業(yè)和信息化職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2024年河北政法職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- DAM10KW中波發(fā)射機(jī)各單元的檢測與調(diào)整指導(dǎo)示意圖
- 二年級美術(shù)復(fù)習(xí)計劃
- 物業(yè)采購工作總結(jié)
- 組織文化與領(lǐng)導(dǎo)力
- 膠粘性不良改善報告
- 電子商務(wù)客服全套培訓(xùn)方案
- 河北省石家莊市橋西區(qū)2023-2024學(xué)年九年級上冊期末英語模擬試題(附答案)
- 《產(chǎn)品價值點》課件
- 2023年燃?xì)獍踩a(chǎn)工作匯報材料
- 考研英語5500大綱詞匯亂序打印版
- 供貨商合同協(xié)議書簡單版正規(guī)范本(通用版)
評論
0/150
提交評論