javaEE面試重點

Hibernate工做原理及爲何要用?


原理:


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


爲何要用:


* 對JDBC訪問數據庫的代碼作了封裝。大大簡化了數據訪問層繁瑣的反覆性代碼。


* Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。javascript

他很是大程度的簡化DAO層的編碼工做
* hibernate使用Java反射機制,而不是字節碼加強程序來實現透明性。
* hibernate的性能很是好。因爲它是個輕量級框架。映射的靈活性很是出色。它支持各類關係數據庫。從一對一到多對多的各類複雜關係。


Hibernate是怎樣延遲載入?


* Hibernate2延遲載入實現:a)實體對象 b)集合(Collection)
* Hibernate3 提供了屬性的延遲載入功能


當Hibernate在查詢數據的時候。數據並無存在與內存中,當程序真正對數據的操做時,對象才存在與內存中,就實現了延遲載入。他節省了server的內存開銷,從而提升了server的性能。
Hibernate中如何實現類之間的關係?html

(如:一對多、多對多的關係)
類與類之間的關係主要體現在表與表之間的關係進行操做。它們都市對對象進行操做,咱們程序中把所有的表與類都映射在一塊兒。它們經過配置文件裏的many-to-one、one-to-many、many-to-many、


說下Hibernate的緩存機制


* 內部緩存存在Hibernate中又叫一級緩存,屬於應用事物級緩存
* 二級緩存:


a)應用及緩存


b)分佈式緩存


條件:數據不會被第三方改動、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非 重要數據


c) 第三方緩存的實現
Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:


* 屬性查詢
* 參數查詢、命名參數查詢
* 關聯查詢
* 分頁查詢
* 統計函數


怎樣優化Hibernate?


* 使用雙向一對多關聯。不使用單向一對多
* 靈活使用單向一對多關聯
* 不用一對一。用多對一代替
* 配置對象緩存,不使用集合緩存
* 一對多集合使用Bag,多對多集合使用Set
* 繼承類使用顯式多態
* 表字段要少,表關聯不要怕多,有二級緩存撐腰


Struts工做機制?爲何要使用Struts?
工做機制:
Struts的工做流程:
在web應用啓動時就會載入初始化ActionServlet,ActionServlet從struts-config.xml文件裏讀取配置信息,把它們存放到各類配置對象當ActionServlet接收到一個客戶請求時,將運行例如如下流程.
(1)檢索和用戶請求匹配的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類組件構成:控制器組件、模型組件、視圖組件
Struts的validate框架是怎樣驗證的?
在struts配置文件裏配置詳細的錯誤提示,再在FormBean中的validate()方法詳細調用。


說下Struts的設計模式
MVC模式: web應用程序啓動時就會載入並初始化ActionServler。用戶提交表單時。一個配置好的ActionForm對象被建立。並被填入表單對應的數據,ActionServler依據Struts-config.xml 文件配置好的設置決定是否需要表單驗證,假設需要就調用ActionForm的Validate()驗證後選擇將請求發送到哪一個Action,假設 Action不存在。ActionServlet會先建立這個對象。而後調用Action的execute()方法。Execute()從 ActionForm對象中獲取數據,完畢業務邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉發給 ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態的網頁,返回給客戶。java




單例模式


Factory(工廠模式):


定義一個基類===》實現基類方法(子類經過不一樣的方法)===》定義一個工廠類(生成子類實例)


===》開發者調用基類方法


Proxy(代理模式)


spring工做機制及爲何要用?
1.spring mvc請所有的請求都提交給DispatcherServlet,它會託付應用系統的其它模塊負責負責對請求進行真正的處理工做。
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給client。


爲何用:
AOP 讓開發者可以建立非行爲性的關注點,稱爲橫切關注點,並將它們插入到應用程序代碼中。使用 AOP 後,公共服務 (比 如日誌、持久性、事務等)就可以分解成方面並應用到域對象上。同一時候不會添加域對象的對象模型的複雜性。


IOC 贊成建立一個可以構造對象的應用環境,而後向這些對象傳遞它們的協做對象。正如單詞 倒置 所代表的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用 其協做對象構造的。git

所以是由容器管理協做對象(collaborator)。web




Spring即便一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了 Spring,僅僅要用 JavaBean 屬性和配置文件增長依賴性(協做對象)。而後可以很是easy地在需要時替換具備相似接口的協做對象。面試




網友自出的幾道面試題


一、 簡述你對IoC(Inversion of Control)的理解。描寫敘述一下Spring中實現DI(Dependency Injection)的幾種方式。算法




二、 Spring的Bean有多種做用域,包含:
singleton、prototype、request、session、global session、application、本身定義


三、 簡單描寫敘述Spring Framework與Struts的不一樣之處,整合Spring與Struts有哪些方法,哪一種最好,爲何?


四、 Hibernate中的update()和saveOrUpdate()的差異


五、 Spring對多種ORM框架提供了很是好的支持,簡單描寫敘述在Spring中使用Hibernate的方法,並結合事務管理。spring




Hibernate


1.在數據庫中條件查詢速度很是慢的時候,怎樣優化?
1.建索引
2.下降表之間的關聯
3.優化sql,儘可能讓sql很是快定位數據,不要讓sql作全表查詢。應該走索引,把數據量大的表排在前面
4.簡化查詢字段,無用的字段不要,已經對返回結果的控制,儘可能返回少許數據


[2.在hibernate中進行多表查詢,每個表中各取幾個字段,也就是說查詢出來的結果集並無一個實體類與之相應,怎樣解決問題?
解決方式一,依照Object[]數據取出數據,而後本身組bean
解決方式二,對每個表的bean寫構造函數。比方表一要查出field1,field2兩個字段,那麼有一個構造函數就是Bean(type1 filed1,type2 field2) ,而後在hql裏面就可以直接生成這個bean了。sql

詳細怎麼用請看相關文檔。我說的不是很是清楚。


session.load()和session.get()的差異
Session.load/get方法均可以依據指定的實體類和id從數據庫讀取記錄,並返回與之相應的實體對象。

其差異在於:


假設未能發現符合條件的記錄,get方法返回null。而load方法會拋出一個ObjectNotFoundException。
Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。
load方法可以充分利用內部緩存和二級緩存中的現有數據。而get方法則只在內部緩存中進行數據查找,如沒有發現相應數據。將越過二級緩存,直接調用SQL完畢數據讀取。
Session在載入實體對象時,將通過的過程:


首先,Hibernate中維持了兩級緩存。第一級緩存由Session實例維護。當中保持了Session當前所有關聯實體的數據,也稱爲內部緩存。而第二級緩存則存在於SessionFactory層次。由當前所有由本 SessionFactory構造的Session實例共享。出於性能考慮。避免無謂的數據庫訪問。Session在調用數據庫查詢功能以前。會先在緩存中進行查詢。首先在第一級緩存中,經過實體類型和id進行查找。假設第一級緩存查找命中。且數據狀態合法。則直接返回。


以後,Session會在當前「NonExists」記錄中進行查找。假設「NonExists」記錄中存在相同的查詢條件,則返回null。 「NonExists」記錄了當前Session實例在以前所有查詢操做中,未能查詢到有效數據的查詢條件(至關於一個查詢黑名單列表)。如此一來。假設 Session中一個無效的查詢條件反覆出現,就能夠迅速做出推斷,從而得到最佳的性能表現。


對於load方法而言,假設內部緩存中未發現有效數據,則查詢第二級緩存,假設第二級緩存命中,則返回。
如在緩存中未發現有效數據,則發起數據庫查詢操做(Select SQL)。如通過查詢未發現相應記錄。則將這次查詢的信息在「NonExists」中加以記錄,並返回null。
依據映射配置和Select SQL獲得的ResultSet。建立相應的數據對象。


將其數據對象歸入當前Session實體管理容器(一級緩存)。


運行Interceptor.onLoad方法(假設有相應的Interceptor)。
將數據對象歸入二級緩存。
假設數據對象實現了LifeCycle接口。則調用數據對象的onLoad方法。
返回數據對象。
Hibernate的主鍵生成機制
1) assigned
主鍵由外部程序負責生成。無需Hibernate參與。
2) hilo
經過hi/lo 算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。


3) seqhilo
與hilo 相似。經過hi/lo 算法實現的主鍵生成機制,僅僅是主鍵歷史狀態保存在Sequence中,適用於支持Sequence的數據庫,如Oracle。
4) increment
主鍵按數值順序遞增。

此方式的實現機制爲在當前應用實例中維持一個變量,以保存着當前的最大值,以後每次需要生成主鍵的時候將此值加1做爲主鍵。

這樣的方式可能產生的問題是:假設當前有多個實例訪問同一個數據庫,那麼由於各個實例各自維護主鍵狀態,不一樣實例可能生成相同的主鍵。從而形成主鍵反覆異常。

所以,假設同一數據庫有多個實例訪問,此方式必須避免使用。


5) identity
採用數據庫提供的主鍵生成機制。如DB二、SQL Server、MySQL中的主鍵生成機制。
6) sequence
採用數據庫提供的sequence 機制生成主鍵。如Oralce 中的Sequence。


7) native
由Hibernate依據底層數據庫自行推斷採用identity、hilo、sequence當中一種做爲主鍵生成方式。
8) uuid.hex
由Hibernate基於128 位惟一值產生算法生成16 進制數值(編碼後以長度32 的字符串表示)做爲主鍵。
9) uuid.string
與uuid.hex 相似,僅僅是生成的主鍵未進行編碼(長度16)。在某些數據庫中可能出現故障(如PostgreSQL)。
10) foreign
使用外部表的字段做爲主鍵。

通常而言,利用uuid.hex方式生成主鍵將提供最好的性能和數據庫平臺適應性。
這10中生成OID標識符的方法,increment 比較常用,把標識符生成的權力交給Hibernate處理.但是當同一時候多個Hibernate應用操做同一個數據庫,甚至同一張表的時候.就推薦使用identity 依賴底層數據庫實現,但是數據庫必須支持本身主動增加,固然針對不一樣的數據庫選擇不一樣的方法.假設你不能肯定你使用的數據庫詳細支持什麼的狀況下.可以選擇用native 讓Hibernate來幫選擇identity,sequence,或hilo.
另外由於常用的數據庫,如Oracle、DB二、SQLServer、MySql 等,都提供了易用的主鍵生成機制(Auto-Increase 字段或者Sequence)。咱們可以在數據庫提供的主鍵生成機制上,採用generator-class=native的主鍵生成方式。
只是值得注意的是。一些數據庫提供的主鍵生成機制在效率上未必最佳。大量併發insert數據時可能會引發表之間的互鎖。數據庫提供的主鍵生成機制。每每是經過在一個內部表中保存當前主鍵狀態(如對於自增型主鍵而言。此內部表中就維護着當前的最大值和遞增量)。以後每次插入數據會讀取這個最大值,而後加上遞增量做爲新記錄的主鍵。以後再把這個新的最大值更新回內部表中,這樣。一次Insert操做可能致使數據庫內部屢次表讀寫操做,同一時候伴隨的還有數據的加鎖解鎖操做,這對性能產生了較大影響。所以,對於併發Insert要求較高的系統,推薦採用uuid.hex 做爲主鍵生成機制


myeclipse 增長Hibernate的全過程


1.Db-browers增長配置鏈接
2.新建project
3.增長hibernate環境,指定*.hbm.xml及HibernateSessionFactory文件所在的位置


hibernate的核心類是什麼,它們的相互關係是什麼?

重要的方法是什麼?


Configuration
SessionFactory
Session例如如下方法
Save
load
Update
Delete
Query q=CreateQuery(「from Customer where customerName=:customerName」)
beginTransaction
close
Transaction
Commit()


Hibernate中數據表映射關係主要有什麼類型


one-to-many
inverse:主控方。外鍵的關係有誰控制
inverse=false 是主控方,外鍵是由它控制的
inverse=true 是被控方。外鍵與它不要緊
要想實現主控方的控制必須將被控方做爲主控方的屬性
cascade:級聯
主表增從表增
主表修從表修
主表刪從表刪
lazy:延遲
lazy=false:一下將所有的內容取出,不延時(常用)
lazy=true:取出部份內容。其他內容動態去取
經過get可以取出對方的所有內容


Hibernate中Criteria和DetachedCriteria的做用是什麼


Criteria c=session.createCriteria(Customer.class);
//設置條件
c.add(Expression.ge(「字段名」,」值對象」))
ge:>=
gt:>
le:<=
lt:<
eq:=
//排序
c.addOrder(Order.asc(「字段名」))
//分頁
c.setFirstResult(1)//從第2行開始提取
c.setMaxResults(5)//返回5行


DetachedCriteria產生時不需要session
DetachedCriteria dc= DetachedCriteria.forClass(Customer.class)
Criteria c=Dc.getExecutableCriteria(session)


Hibernate中Query對象的使用


1 個或多個屬性查詢:
Query query=session.createQuery(」select customername,customerid from Customer」)
List l=query.list();
For(int i=0;i {
Obejct[] object=(Object[])l.get(i);
Object[0] object[1]
}
}
分組: 「select count(*),productname from Product group by productname order by productname」
取值與屬性同樣
配置的查詢,在*.hbm.xml中


from Product where productid=:productid
]]>


Query query=session.getNamedQuery(sql);
聯接1
」from Customer as customer join fetch customer.buySet」:將多的放到buySet屬性中,得出的結是Customer有一個,Buy有多個
聯接2
「from Customer as customer join customer.buySet」:得出的對象,customer與buy是1對1
子查詢:
」from Customer as customer where (select count(*) from customer.buySet)>1″


Hibernate怎樣實現數據表映射的繼承關係


一、兩個表。子類反覆父類的屬性。


二、一個表,子類父類共用一個表










三、兩個表。子類引用父類的主鍵,享用公共的字段或屬性。














批量刪除
Query query=session.createQuery(「update」或」delete」);
query.executeUpdate();
jdbc、Hibernate、ibatis的差異


jdbc:手動
手動寫sql
delete、insert、update要將對象的值一個一個取出傳到sql中,不能直接傳入一個對象。


select:返回的是一個resultset。要從ResultSet中一行一行、一個字段一個字段的取出,而後封裝到一個對象中,不直接返回一個對象。
ibatis的特色:半本身主動化
sql要手動寫
delete、insert、update:直接傳入一個對象
select:直接返回一個對象
hibernate:全本身主動
不寫sql,本身主動封裝
delete、insert、update:直接傳入一個對象
select:直接返回一個對象


Detached Object(遊離對象)可以傳遞到不論什麼層直到表現層而不是用不論什麼DTO(Data Transfer Objects). 而後你還可以又一次把遊離對象賦給另一個Session.


Hibernate的三種狀態


瞬時態(Transient)、 持久態(Persistent)、脫管態(Detached)。處於持久態的對象也稱爲PO(Persistence Object),瞬時對象和脫管對象也稱爲VO(Value Object)。




瞬時態


由new命令開闢內存空間的java對象,


eg. Person person = new Person(「amigo」, 「女」);


假設沒有變量對該對象進行引用,它將被java虛擬機回收。


瞬時對象在內存孤立存在。它是攜帶信息的載體,不和數據庫的數據有不論什麼關聯關係,在Hibernate中,可經過session的save()或 saveOrUpdate()方法將瞬時對象與數據庫相關聯。並將數據相應的插入數據庫中,此時該瞬時對象轉變成持久化對象。


持久態


處於該狀態的對象在數據庫中具備相應的記錄,並擁有一個持久化標識。假設是用hibernate的delete()方法,相應的持久對象就變成瞬時對象。因數據庫中的相應數據已被刪除。該對象再也不與數據庫的記錄關聯。


當一個session運行close()或clear()、evict()以後。持久對象變成脫管對象,此時持久對象會變成脫管對象。此時該對象儘管具備數據庫識別值,但它已不在HIbernate持久層的管理之下。


持久對象具備例如如下特色:


1. 和session實例關聯;


2. 在數據庫中有與之關聯的記錄。




脫管態


當與某持久對象關聯的session被關閉後,該持久對象轉變爲脫管對象。

當脫管對象被又一次關聯到session上時。並再次轉變成持久對象。




脫管對象擁有數據庫的識別值。可經過update()、saveOrUpdate()等方法,轉變成持久對象。




脫管對象具備例如如下特色:


1. 本質上與瞬時對象一樣。在沒有不論什麼變量引用它時,JVM會在適當的時候將它回收;


2. 比瞬時對象多了一個數據庫記錄標識值。




1. Hibernate有哪幾種查詢數據的方式


3種:hql、QBC——Query By Criteria API、原生sql (經過createSQLQuery創建)


2. 談談Hibernate中inverse的做用


inverse屬性默認是false,就是說關係的兩端都來維護關係。
比方Student和Teacher是多對多關係。用一箇中間表TeacherStudent維護。

Gp)i
假設Student這邊inverse=」true」, 那麼關係由還有一端Teacher維護,就是說當插入Student時,不會操做TeacherStudent表(中間表)。僅僅有Teacher插入或刪除時纔會觸發對中間表的操做。因此兩邊都inverse=」true」是不正確的。會致使不論什麼操做都不觸發對中間表的影響。當兩邊都inverse=」false」 或默認時,會致使在中間表中插入兩次關係。


3. 說說Hibernate中的update()和saveOrUpdate()的差異。session的load()和get()的差異。


saveOrUpdate()方法可以實現update()的功能,但會多些步驟。詳細例如如下:
假設對象在該session中已經被持久化,不進行操做。對象的標識符屬性(identifier property)在數據庫中不存在或者是個臨時的值。調用save()方法保存它。假設session中的還有一個對象有一樣的標識符拋出一個異常;以上皆不符合則調用update()更新之。


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

其差異在於:
假設未能發現符合條件的記錄,get方法返回null。而load方法會拋出一個ObjectNotFoundException;load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。load方法可以充分利用內部緩存和二級緩存中的現有數據。而get方法則只在內部緩存中進行數據查找,如沒有發現相應數據,將越過二級緩存,直接調用SQL完畢數據讀取。


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. Hibernate2延遲載入實現:a)實體對象 b)集合(Collection)


2. Hibernate3 提供了屬性的延遲載入功能


當Hibernate在查詢數據的時候。數據並無存在與內存中,當程序真正對數據的操做時,對象才存在與內存中,就實現了延遲載入,他節省了server的內存開銷。從而提升了server的性能。




3.Hibernate中如何實現類之間的關係?(如:一對多、多對多的關係)


類與類之間的關係主要體現在表與表之間的關係進行操做,它們都市對對象進行操做,咱們程序中把所有的表與類都映射在一塊兒,它們經過配置文件裏的many-to-one、one-to-many、many-to-many、


4. 說下Hibernate的緩存機制


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


2. 二級緩存:
a) 應用及緩存
b) 分佈式緩存
條件:數據不會被第三方改動、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非 重要數據
c) 第三方緩存的實現


5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
一、 屬性查詢
二、 參數查詢、命名參數查詢
三、 關聯查詢
四、 分頁查詢
五、 統計函數


6. 怎樣優化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一。用多對一代替
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表字段要少,表關聯不要怕多。有二級緩存撐腰
7. Struts工做機制?爲何要使用Struts?
工做機制:
Struts的工做流程:
在web應用啓動時就會載入初始化ActionServlet,ActionServlet從
struts-config.xml文件裏讀取配置信息,把它們存放到各類配置對象
當ActionServlet接收到一個客戶請求時,將運行例如如下流程.
-(1)檢索和用戶請求匹配的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.spring mvc請所有的請求都提交給DispatcherServlet,它會託付應用系統的其它模塊負責負責對請求進行真正的處理工做。


2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給client。


爲何用:
{AOP 讓開發者可以建立非行爲性的關注點,稱爲橫切關注點。並將它們插入到應用程序代碼中。

使用 AOP 後,公共服務 (比 如日誌、持久性、事務等)就可以分解成方面並應用到域對象上。同一時候不會添加域對象的對象模型的複雜性。


IOC 贊成建立一個可以構造對象的應用環境。而後向這些對象傳遞它們的協做對象。正如單詞 倒置 所代表的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用其協做對象構造的。

所以是由容器管理協做對象(collaborator)。


Spring即便一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。

有了 Spring,僅僅要用 JavaBean 屬性和配置文件增長依賴性(協做對象)。

而後可以很是easy地在需要時替換具備相似接口的協做對象。}


同類其它面試題 點擊新一篇或舊一篇可瀏覽全部同類面試題


Hibernate裏面sorted collection和ordered collection有什麼差異


sorted collection是在內存中經過java比較器進行排序的
ordered collection是在數據庫中經過order by進行排序的


Hibernate都支持哪些緩存策略


Read-only: 這樣的策略適用於那些頻繁讀取卻不會更新的數據。這是眼下爲止最簡單和最有效的緩存策略
* Read/write:這樣的策略適用於需要被更新的數據,比read-only更耗費資源,在非JTA環境下,每個事務需要在session.close和session.disconnect()被調用
* Nonstrict read/write: 這樣的策略不保障兩個同一時候進行的事務會改動同一塊數據,這樣的策略適用於那些經常讀取但是極少更新的數據
* Transactional: 這樣的策略是全然事務化得緩存策略。可以用在JTA環境下


怎樣查看Hibernate生成並運行的sql


在定義數據庫和數據庫屬性的文件applicationConfig.xml裏面,把hibernate.show_sql 設置爲true
這樣生成的SQL就會在控制檯出現了
注意:這樣作會加劇系統的負擔,不利於性能調優


比較Hibernate的三種檢索策略優缺點


1立刻檢索;
長處:相應用程序全然透明,不管對象處於持久化狀態,仍是遊離狀態。應用程序都可以方便的從一個對象導航到與它關聯的對象;
缺點:1.select語句太多;2.可能會載入應用程序不需要訪問的對象白白浪費不少內存空間;
2延遲檢索:
長處:由應用程序決定需要載入哪些對象,可以避免可運行多餘的select語句。以及避免載入應用程序不需要訪問的對象。

所以能提升檢索性能,並且能節省內存空間;
缺點:應用程序假設但願訪問遊離狀態代理類實例,必須保證他在持久化狀態時已經被初始化。
3 迫切左外鏈接檢索
長處:1相應用程序全然透明,不管對象處於持久化狀態。仍是遊離狀態,應用程序都可以方便地衝一個對象導航到與它關聯的對象。2使用了外鏈接,select語句數目少;
缺點:1 可能會載入應用程序不需要訪問的對象。白白浪費不少內存空間;2複雜的數據庫錶鏈接也會影響檢索性能;


ssh面試精華


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. Hibernate2延遲載入實現:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲載入功能。當Hibernate在查詢數據的時候,數據並無存在與內存中,當程序真正對數據的操做時,對象才存在與內存中,就實現了延遲載入,他節省了server的內存開銷,從而提升了server的性能。
3.Hibernate中如何實現類之間的關係?

(如:一對多、多對多的關係)
類與類之間的關係主要體現在表與表之間的關係進行操做,它們都市對對象進行操做。咱們程序中把所有的表與類都映射在一塊兒。它們經過配置文件裏的many-to-one、one-to-many、many-to-many、


4. 說下Hibernate的緩存機制
1. 內部緩存存在Hibernate中又叫一級緩存,屬於應用事物級緩存
2. 二級緩存:
a) 應用及緩存
b) 分佈式緩存
條件:數據不會被第三方改動、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非 重要數據
c) 第三方緩存的實現


5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
一、 屬性查詢
二、 參數查詢、命名參數查詢
三、 關聯查詢
四、 分頁查詢
五、 統計函數


6. 怎樣優化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一代替
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表字段要少,表關聯不要怕多,有二級緩存撐腰


7. Struts工做機制?爲何要使用Struts?
工做機制:
Struts的工做流程:
在web應用啓動時就會載入初始化ActionServlet,ActionServlet從
struts-config.xml文件裏讀取配置信息,把它們存放到各類配置對象
當ActionServlet接收到一個客戶請求時,將運行例如如下流程.
-(1)檢索和用戶請求匹配的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.spring mvc請所有的請求都提交給DispatcherServlet,它會託付應用系統的其它模塊負責負責對請求進行真正的處理工做。
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給client。


爲何用:
{AOP 讓開發者可以建立非行爲性的關注點,稱爲橫切關注點。並將它們插入到應用程序代碼中。使用 AOP 後,公共服務 (比 如日誌、持久性、事務等)就可以分解成方面並應用到域對象上,同一時候不會添加域對象的對象模型的複雜性。
IOC 贊成建立一個可以構造對象的應用環境。而後向這些對象傳遞它們的協做對象。正如單詞 倒置 所代表的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction)。每一個對象都是用其協做對象構造的。所以是由容器管理協做對象(collaborator)。


Spring即便一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了 Spring,僅僅要用 JavaBean 屬性和配置文件增長依賴性(協做對象)。而後可以很是easy地在需要時替換具備相似接口的協做對象。}


面試中常出現的Hibernate試題


1.在數據庫中條件查詢速度很是慢的時候,怎樣優化?




1.建索引


2.下降表之間的關聯


3.優化sql,儘可能讓sql很是快定位數據,不要讓sql作全表查詢,應該走索引,把數據量大的表排在前面


4.簡化查詢字段,無用的字段不要。已經對返回結果的控制,儘可能返回少許數據


2.在hibernate中進行多表查詢,每個表中各取幾個字段,也就是說查詢出來的結果集並無一個實體類與之相應,怎樣解決問題?


解決方式一,依照Object[]數據取出數據,而後本身組bean


解決方式二,對每個表的bean寫構造函數,比方表一要查出field1,field2兩個字段。那麼有一個構造函數就是Bean(type1 filed1,type2 field2) ,而後在hql裏面就可以直接生成這個bean了。詳細怎麼用請看相關文檔,我說的不是很是清楚。


3.session.load()和session.get()的差異


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


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


Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。




load方法可以充分利用內部緩存和二級緩存中的現有數據,而get方法則只在內部緩存中進行數據查找,如沒有發現相應數據,將越過二級緩存。直接調用SQL完畢數據讀取。


Session在載入實體對象時,將通過的過程:


首先,Hibernate中維持了兩級緩存。第一級緩存由Session實例維護,當中保持了Session當前所有關聯實體的數據。也稱爲內部緩存。

而第二級緩存則存在於


SessionFactory層次,由當前所有由本SessionFactory構造的Session實例共享。出於性能考慮,避免無謂的數據庫訪問,Session在調用數據庫查詢功能以前,會


先在緩存中進行查詢。首先在第一級緩存中。經過實體類型和id進行查找,假設第一級緩存查找命中,且數據狀態合法。則直接返回。




以後,Session會在當前「NonExists」記錄中進行查找,假設「NonExists」記錄中存在相同的查詢條件。則返回null。 「NonExists」記錄了當前Session實例在以前所有查詢操做中。未能查詢到有效數據的查詢條件(至關於一個查詢黑名單列表)。如此一來,假設 Session中一個無效的查詢條件反覆出現,就能夠迅速做出推斷,從而得到最佳的性能表現。


對於load方法而言,假設內部緩存中未發現有效數據,則查詢第二級緩存,假設第二級緩存命中,則返回。




如在緩存中未發現有效數據,則發起數據庫查詢操做(Select SQL),如通過查詢未發現相應記錄,則將這次查詢的信息在「NonExists」中加以記錄,並返回null。


依據映射配置和Select SQL獲得的ResultSet,建立相應的數據對象。


將其數據對象歸入當前Session實體管理容器(一級緩存)。


運行Interceptor.onLoad方法(假設有相應的Interceptor)。


將數據對象歸入二級緩存。


假設數據對象實現了LifeCycle接口。則調用數據對象的onLoad方法。




返回數據對象。


Hibernate的主鍵生成機制


1) assigned


主鍵由外部程序負責生成,無需Hibernate參與。


2) hilo


經過hi/lo 算法實現的主鍵生成機制。需要額外的數據庫表保存主鍵生成歷史狀態。


3) seqhilo


與hilo 相似,經過hi/lo 算法實現的主鍵生成機制,僅僅是主鍵歷史狀態保存在Sequence中。適用於支持Sequence的數據庫,如Oracle。


4) increment


主鍵按數值順序遞增。

此方式的實現機制爲在當前應用實例中維持一個變量,以保存着當前的最大值,以後每次需要生成主鍵的時候將此值加1做爲主鍵。這樣的方式可能產生的問題是:假設當前有多個實例訪問同一個數據庫,那麼由於各個實例各自維護主鍵狀態。不一樣實例可能生成相同的主鍵。從而形成主鍵反覆異常。所以。假設同一數據庫有多個實例訪問。此方式必須避免使用。




5) identity


採用數據庫提供的主鍵生成機制。如DB二、SQL Server、MySQL中的主鍵生成機制。




6) sequence


採用數據庫提供的sequence 機制生成主鍵。如Oralce 中的Sequence。




7) native


由Hibernate依據底層數據庫自行推斷採用identity、hilo、sequence當中一種做爲主鍵生成方式。


8) uuid.hex


由Hibernate基於128 位惟一值產生算法生成16 進制數值(編碼後以長度32 的字符串表示)做爲主鍵。


9) uuid.string


與uuid.hex 相似,僅僅是生成的主鍵未進行編碼(長度16)。

在某些數據庫中可能出現故障(如PostgreSQL)。


10) foreign


使用外部表的字段做爲主鍵。通常而言。利用uuid.hex方式生成主鍵將提供最好的性能和數據庫平臺適應性。


這10中生成OID標識符的方法,increment 比較常用,把標識符生成的權力交給Hibernate處理.但是當同一時候多個Hibernate應用操做同一個數據庫,甚至同一張表的時候.就推薦使用identity 依賴底層數據庫實現,但是數據庫必須支持本身主動增加,固然針對不一樣的數據庫選擇不一樣的方法.假設你不能肯定你使用的數據庫詳細支持什麼的狀況下.可以選擇用native 讓Hibernate來幫選擇identity,sequence,或hilo.


另外由於常用的數據庫。如Oracle、DB二、SQLServer、MySql 等,都提供了易用的主鍵生成機制(Auto-Increase 字段或者Sequence)。

咱們可以在數據庫提供的主鍵生成機制上,採用generator-class=native的主鍵生成方式。




只是值得注意的是。一些數據庫提供的主鍵生成機制在效率上未必最佳。大量併發insert數據時可能會引發表之間的互鎖。

數據庫提供的主鍵生成機制,每每是經過在一個內部表中保存當前主鍵狀態(如對於自增型主鍵而言。此內部表中就維護着當前的最大值和遞增量),以後每次插入數據會讀取這個最大值。而後加上遞增量做爲新記錄的主鍵。以後再把這個新的最大值更新回內部表中,這樣。一次Insert操做可能致使數據庫內部屢次表讀寫操做,同一時候伴隨的還有數據的加鎖解鎖操做,這對性能產生了較大影響。所以,對於併發Insert要求較高的系統。推薦採用uuid.hex 做爲主鍵生成機制。


三框架整合鏈接數據庫的方法


第一種在Spring applicationContext.xml中鏈接:




oracle.jdbc.driver.OracleDriver


jdbc:oracle:thin:@localhost:1521:test


cpiclh


cpiclh






com/Hibernate/Pojo/FactUsers.hbm.xml


org.hibernate.dialect.Oracle9Dialect true
另一種在Hibernate hibernate.cfg.xml中鏈接:




root
jdbc:oracle:thin:@192.168.0.1:1521:test


org.hibernate.dialect.Oracle9Dialect root
oracle.jdbc.driver.OracleDriver


第三種在Tomcat中的 apache-tomcat-5.5.17\conf\Catalina文件夾下放一個


和文件夾同名的XML。內容例如如下






username="root" password="root" driverClassName="oracle.jdbc.driver.OracleDriver"


url="jdbc:oracle:thin:@192.168.0.1:1521:test"/>


什麼是Hibernate併發機制 怎麼處理併發問題


Hibernate併發機制:
a、Hibernate的Session對象是非線程安全的,對於單個請求,單個會話,單個的工做單元(即單個事務,單個線程),它一般僅僅使用一次,
而後就丟棄。


假設一個Session 實例贊成共享的話,那些支持併發執行的,好比Http request,session beans將會致使出現資源爭用。
假設在Http Session中有hibernate的Session的話,就可能會出現同步訪問Http Session。

僅僅要用戶足夠快的點擊瀏覽器的「刷新」,
就會致使兩個併發執行的線程使用同一個Session。


b、多個事務併發訪問同一塊資源,可能會引起第一類丟失更新,髒讀。幻讀,不可反覆讀,第二類丟失更新一系列的問題。


解決方式:設置事務隔離級別。


Serializable:串行化。

隔離級別最高
Repeatable Read:可反覆讀
Read Committed:已提交數據讀
Read Uncommitted:未提交數據讀。

隔離級別最差
設置鎖:樂觀鎖和悲觀鎖。


樂觀鎖:使用版本號號或時間戳來檢測更新丟失,在的映射中設置 optimistic-lock=」all」可以在沒有版本號或者時間戳屬性映射的狀況下實現 版本號檢查,此時Hibernate將比較一行記錄的每個字段的狀態 行級悲觀鎖:Hibernate老是使用數據庫的鎖定機制,從不在內存中鎖定對象!僅僅要爲JDBC鏈接指定一下隔 離級別,而後讓數據庫去搞定一切就夠了。類LockMode 定義了Hibernate所需的不一樣的鎖定級別:LockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ;


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的性能很是好,因爲它是個輕量級框架。

映射的靈活性很是出色。它支持各類關係數據庫。從 一對一到多對多的各類複雜關係。


Hibernate緩存機制


1. 內部緩存存在Hibernate中又叫一級緩存。屬於應用事物級緩存
2. 二級緩存:
a) 應用及緩存
b) 分佈式緩存
條件:數據不會被第三方改動、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非 重要數據
c) 第三方緩存的實現


Hibernate的查詢方式


Sql、Criteria,object comptosition
Hql:
一、 屬性查詢
二、 參數查詢、命名參數查詢
三、 關聯查詢
四、 分頁查詢
五、 統計函數


怎樣優化Hibernate


1. 使用雙向一對多關聯。不使用單向一對多
2. 靈活使用單向一對多關聯
3. 不用一對一,用多對一代替
4. 配置對象緩存,不使用集合緩存
5. 一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表字段要少,表關聯不要怕多,有二級緩存撐腰


Hibernate拒接鏈接、server崩潰的緣由


1. db沒有打開
2. 網絡鏈接可能出了問題
3. 鏈接配置錯了
4. 驅動的driver,url是否都寫對了
5. LIB下增長對應驅動,數據鏈接代碼是否有誤
6. 數據庫配置可能有問題
7. 當前聯接太多了。server都有訪問人數限制的
8. server的對應port沒有開,即它不提供對應的服務
9 hibernate有哪些緩存。分別怎麼使用?
10 你對hibernate的瞭解到了一個什麼樣的程度?
11 寫出一個sql語句體現hibernate中一對多的關係


常見的Hibernate面試題


1.Hibernate有哪幾種查詢數據的方式
(1)導航對象圖查詢
(2)OID查詢
(3)HQL
(4)QBC
(5)本地SQL
2.load()和get()的差異
load載入方法:
Java代碼
Users user = (Users)session.load(Users.class, userId);
get載入方法:
Java代碼
Users user = (Users)session.get(Users.class, userId);
兩載入方法差異:
差異1:假設數據庫中,沒有userId的對象。假設經過get方法載入。則返回的是一個null;假設經過load載入,則返回一個代理對象,假設後面代碼假設調用user對象的某個屬性(比方user.getPassword())會拋出異常:org.hibernate.ObjectNotFoundException。


差異2:load支持延遲載入。get不支持延遲載入。


也就是說:
Java代碼
Users user = (Users)session.load(Users.class, userId);
這句代碼不會去運行數據庫查詢。僅僅實用到user時纔會去運行數據庫查詢。
而Java代碼
Users user = (Users)session.get(Users.class, userId);
則立刻去運行數據庫查詢。 因此Users user = (Users)session.load(Users.class, userId);不會運行不論什麼sql。




注意Java代碼


Users user = (Users)session.load(Users.class, userId);
System.out.println(user.getId());
Users user = (Users)session.load(Users.class, userId);
System.out.println(user.getId());


上面這2句代碼,不會去運行數據庫操做。因爲load後會在hibernate的一級緩存裏存放一個map對象。該map的key就是userId的值,但是當你getId()時,它會去一級緩存裏拿map的key值,而不去運行數據庫查詢。因此不會報不論什麼錯。不會運行不論什麼數據庫操做。




3. 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的性能很是好。因爲它是個輕量級框架。映射的靈活性很是出色。它支持各類關係數據庫。從一對一到多對多的各類複雜關係。
4. Hibernate是怎樣延遲載入?


1. Hibernate2延遲載入實現:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲載入功能
當Hibernate在查詢數據的時候,數據並無存在與內存中。當程序真正對數據的操做時。對象才存在與內存中,就實現了延遲載入。他節省了server的內存開銷,從而提升了server的性能。


5. Hibernate中如何實現類之間的關係?

(如:一對多、多對多的關係)
類與類之間的關係主要體現在表與表之間的關係進行操做。它們都市對對象進行操做,咱們程序中把所有的表與類都映射在一塊兒,它們經過配置文件裏的many-to-one、one-to-many、many-to-many、


5. 說下Hibernate的緩存機制
1. 內部緩存存在Hibernate中又叫一級緩存,屬於應用事物級緩存
2. 二級緩存:
a) 應用及緩存
b) 分佈式緩存
條件:數據不會被第三方改動、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非重要數據
c) 第三方緩存的實現


6. Hibernate的查詢方式


Sql、Criteria,object comptosition


Hql:


一、 屬性查詢


二、 參數查詢、命名參數查詢


三、 關聯查詢


四、 分頁查詢


五、 統計函數


7. 怎樣優化Hibernate?


1. 使用雙向一對多關聯,不使用單向一對多


2. 靈活使用單向一對多關聯


3. 不用一對一,用多對一代替


4. 配置對象緩存,不使用集合緩存


5. 一對多集合使用Bag,多對多集合使用Set


6. 繼承類使用顯式多態


7. 表字段要少,表關聯不要怕多。有二級緩存撐腰


=====================Hibernate筆試題==========================


(1)普通狀況下。關係數據模型與對象模型之間有哪些匹配關係(多選)
A)表相應類
B)記錄相應對象
C)表的字段相應類的屬性
D)表之間的參考關係相應類之間的依賴關係


(2)下面關於SessionFactory的說法哪些正確?(多選)
A)對於每個數據庫事務,應該建立一個SessionFactory對象
B)一個SessionFactory對象相應一個數據庫存儲源。


C)SessionFactory是重量級的對象。不該該任意建立。假設系統中僅僅有一個數據庫存儲源。僅僅需要建立一個。


D)SessionFactory的load()方法用於載入持久化對象


(3)Customer類中有一個Set類型的orders屬性。用來存放Order訂單對象,在Customer.hbm.xml文件裏。用哪一個元素映射orders屬性?
A) B) C) D)


(4)元素有一個cascade屬性。假設但願Hibernate級聯保存集合中的對象,casecade屬性應該取什麼值?(單選)
A)none
B)save
C)delete
D)save-update


(5)下面哪些屬於Session的方法?
A)load()
B)save()
C)delete()
D)update()
E)open()
F)close()


(6)下面程序的打印結果是什麼?(單選)


tx = session.beginTransaction();
Customer c1=(Customer)session.load(Customer.class,new Long(1));
Customer c2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();


A)執行出錯。拋出異常
B)打印false
C)打印true


(7)下面程序代碼對Customer的name屬性改動了兩次:
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,
new Long(1));
customer.setName(\」Jack\」);
customer.setName(\」Mike\」);
tx.commit();


運行以上程序,Hibernate需要向數據庫提交幾條update語句?(單選)
A)0 B)1 C)2 D)3


(8)在持久化層,對象分爲哪些狀態?(多選)
A)暫時狀態
B)獨立狀態
C)遊離狀態
D)持久化狀態


(9)對於下面程序,Customer對象在第幾行變爲持久化狀態?(單選)
Customer customer=new Customer(); //line1
customer.setName(\」Tom\」); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6


A) line1 B)line2 C)line3 D)line4 E)line5 F)line6


(10)對於下面程序,Customer對象在第幾行變爲遊離狀態?(單選)
Customer customer=new Customer(); //line1
customer.setName(\」Tom\」); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6


A) line1 B)line2 C)line3 D)line4 E)line5 F)line6


(11)下面哪種檢索策略利用了外連結查詢?(單選)
A)立刻檢索 B)延遲檢索 C)迫切左外連結檢索


(12)若是對Customer類的orders集合採用延遲檢索策略,編譯或執行下面程序,會出現什麼狀況(單選)
Session session=sessionFactory.openSession();
tx = session.beginTransaction();
Customer customer=(Customer)session.get(Customer.class,new Long(1));
tx.commit();
session.close();
Iterator orderIterator=customer.getOrders().iterator();


A)編譯出錯 B)編譯經過。並正常執行 C)編譯經過。但執行時拋出異常


(13)關於HQL與SQL,下面哪些說法正確?(多選)
A)HQL與SQL沒什麼區別
B)HQL面向對象,而SQL操縱關係數據庫
C)在HQL與SQL中,都包括select,insert,update,delete語句
D)HQL僅用於查詢數據。不支持insert,update和delete語句


(14)事務隔離級別是由誰實現的?(單選)
A)Java應用程序 B)Hibernate C)數據庫系統 D)JDBC驅動程序


(15)悲觀鎖與樂觀鎖,哪一個具備較好的併發性能?(單選)
A)悲觀鎖 B)樂觀鎖


答案:
(1)A,B,C (2)B,C (3)A (4)D (5)A,B,C,D,F (6)C (7)B (8)A,C,D (9)D (10)F (11)C (12)C (13)B,D (14)C (15)B


1.strust的。


Action是否是線程安全的?假設不是
有什麼方式可以保證Action的線程安全?假設是,說明緣由


2.MVC,分析一下struts是怎樣實現MVC的


3.struts中的幾個關鍵對象的做用(說說幾個關鍵對象的做用)


4.spring
說說AOP和IOC的概念以及在spring中是怎樣應用的


5.Hibernate有哪幾種查詢數據的方式


6.load()和get()的差異


1. Struts的工做原理
在Struts中,用戶的請求通常以*.do做爲請求服務名。所有的*.do請求均被指向ActionSevlet, ActionSevlet依據Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,並將此 FormBean傳至指定名稱的ActionBean,由ActionBean完畢相應的業務操做,如文件操做,數據庫操做等。每一個*.do均有相應的 FormBean名稱和ActionBean名稱。這些在Struts-config.xml中配置。


2. Struts長處與缺點
Struts是開源軟件。使開發人員能更深刻的瞭解其內部實現機制。
Struts 長處:業界」標準」(很是多成功案例),學習資源豐富。
Struts的長處主要集中體現在兩個方面:Taglib和頁面導航。


a、利用Struts提供的taglib可以大大節約開發時間。
b、維護擴展比較方便。經過一個配置文件。就能夠把握整個系統各部分之間的聯繫,這對於後期的維護有着莫大的優勢。
c、表現與邏輯分離
d、表單驗證攻克了請求數據的驗證問題,加強了系統健壯性。
e、便於團隊開發


Struts缺點:a、大量的使用標籤,對於剛開始學習的人難度較大。
b、ActionForms使用不便、沒法進行單元測試(StrutsTestCase僅僅能用於集成)


3. Struts提供了幾個標籤庫?都是什麼標籤庫?
Struts提供了五個標籤庫,即:HTML、Bean、Logic、Template和Nested。


HTML 標籤 用來建立能夠和Struts 框架和其它對應的HTML 標籤交互的HTML 輸入表單
Bean 標籤 在訪問JavaBeans 及其屬性。以及定義一個新的bean 時使用
Logic 標籤 管理條件產生的輸出和對象集產生的循環
Template 標籤 隨着Tiles框架包的出現。此標記已開始下降使用
Nested 標籤 加強對其它的Struts 標籤的嵌套使用的能力


4. Tiles框架是什麼?
Tiles框架爲建立Web頁面提供了一種模板機制,它能將網頁的佈局和內容分離。


一、MVC的各個部分都有那些技術來實現?

怎樣實現?
答:MVC是Model-View-Controller的簡寫。「Model」表明的是應用的業務邏輯(經過JavaBean,EJB組件實現),「View」是應用的表示面(由JSP頁面產生)。「Controller」是提供應用的處理過程控制(一般是一個Servlet),經過這樣的設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。

這些組件可以進行交互和重用。


二、說說Struts的應用。
答:Struts 是採用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源代碼的framework。

採用Struts能開發出基於MVC設計模式的應用構架。 Struts的主要功能包括:一包括一個controller servlet,能將用戶的請求發送到對應的Action對象。二JSP自由tag庫,並且在controller servlet中提供關聯支持,幫助開發員建立交互式表單應用。

三提供了一系列有用對象:XML處理、經過Java reflection APIs本身主動處理JavaBeans屬性、國際化的提示和消息。


三、strust的Action是否是線程安全的?假設不是有什麼方式可以保證Action的線程安全?假設是請說明緣由。
答:不是線程安全的,僅僅要不申明類變量就可以保證線程安全。因爲僅僅存在一個Action類實例。所有線程會共享類變量。


四、應用server詳細包含那些?
答:應用server詳細包含:BEA WebLogic Server、IBM WebSphere Application Server、Oracle9i Application Server、JBoss和Tomcat等。


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. Hibernate2延遲載入實現:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲載入功能
當Hibernate在查詢數據的時候。數據並無存在與內存中,當程序真正對數據的操做時,對象才存在與內存中,就實現了延遲載入。他節省了服務 器的內存開銷,從而提升了server的性能。
3.Hibernate中如何實現類之間的關係?(如:一對多、多對多的關係)
類與類之間的關係主要體現在表與表之間的關係進行操做。它們都市對對象進行操做,咱們程序中把所有的表與類都映射在一塊兒,它們經過配置文件裏的 many-to-one、one-to-many、many-to-many、
4. 說下Hibernate的緩存機制
1. 內部緩存存在Hibernate中又叫一級緩存,屬於應用事物級緩存
2. 二級緩存:
a) 應用及緩存
b) 分佈式緩存
條件:數據不會被第三方改動、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非 重要數據
c) 第三方緩存的實現
5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
一、 屬性查詢
二、 參數查詢、命名參數查詢
三、 關聯查詢
四、 分頁查詢
五、 統計函數
6. 怎樣優化Hibernate?
1.使用雙向一對多關聯。不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一代替
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表字段要少,表關聯不要怕多。有二級緩存撐腰
7. Struts工做機制?爲何要使用Struts?
工做機制:
Struts的工做流程:
在web應用啓動時就會載入初始化ActionServlet,ActionServlet從
struts-config.xml文件裏讀取配置信息,把它們存放到各類配置對象
當ActionServlet接收到一個客戶請求時,將運行例如如下流程.
-(1)檢索和用戶請求匹配的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.spring mvc請所有的請求都提交給DispatcherServlet,它會託付應用系統的其它模塊負責負責對請求進行真正的處理工做。
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給client。
爲何用:
{AOP 讓開發者可以建立非行爲性的關注點,稱爲橫切關注點,並將它們插入到應用程序代碼中。使用 AOP 後。公共服務 (比方日誌、持久性、事務等)就可以分解成方面並應用到域對象上。同一時候不會添加域對象的對象模型的複雜性。
IOC 贊成建立一個可以構造對象的應用環境,而後向這些對象傳遞它們的協做對象。正如單詞 倒置 所代表的,IOC 就像反 過來的 JNDI。

沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用其協做對象構造的。所以是由容器管理協做對象(collaborator)。


Spring即便一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。

有了 Spring。僅僅要用 JavaBean 屬性和配置文件增長依賴性(協做對象)。而後可以很是easy地在需要時替換具備相似接口的協做對象。}
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖 1 所看到的。
組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其它一個或多個模塊聯合實現。

每個模塊的功能例如如下:
☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC)模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
☆ Spring 上下文:Spring 上下文是一個配置文件。向 Spring 框架提供上下文信息。

Spring 上下文包含企業服務,好比 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
☆ Spring AOP:經過配置管理特性。Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。因此,可以很是easy地使 Spring 框架管理的不論什麼對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP。不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。


☆ Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構。可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地減小了需要編寫 的異常代碼數量(好比打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。


☆ Spring ORM:Spring 框架插入了若干個 ORM 框架。從而提供了 ORM 的對象關係工具。當中包含 JDO、Hibernate 和 iBatis SQL Map。

所有這些都聽從 Spring 的通用事務和 DAO 異常層次結構。
☆ Spring Web 模塊:Web 上下文模塊創建在應用程序上下文模塊之上。爲基於 Web 的應用程序提供了上下文。因此。Spring 框架支持與 Jakarta Struts 的集成。

Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。
☆ Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。經過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,當中包含 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在不論什麼 J2EE server中。大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。

毫無疑問。這種對象可以在不一樣 J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。


IOC 和 AOP
控制反轉模式(也稱做依賴性介入)的基本概念是:不建立對象,但是描寫敘述建立它們的方式。在代碼中不直接與對象和服務鏈接。但在配置文件裏描寫敘述哪個 組件需要哪一項服務。容器(在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。


在典型的 IOC 場景中,容器建立了所有對象。並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間調用方法。

下表列出了 IOC 的一個實現模式。
Spring 框架的 IOC 容器採用類型 2 和類型3 實現。


面向方面的編程
面向方面的編程。即 AOP,是一種編程技術,它贊成程序猿對橫切關注點或橫切典型的職責分界線的行爲(好比日誌和事務管理)進行模塊化。

AOP 的核心構造是方面。它將那些影響多個類的行爲封裝到可重用的模塊中。
AOP 和 IOC 是補充性的技術。它們都運用模塊化方式解決企業應用程序開發中的複雜問題。在典型的面向對象開發方式中,可能要將日誌記錄語句放在所有方法和 Java 類中才幹實現日誌功能。在 AOP 方式中,可以反過來將日誌服務模塊化,並以聲明的方式將它們應用到需要日誌的組件上。

固然,優點就是 Java 類不需要知道日誌服務的存在,也不需要考慮相關的代碼。

因此。用 Spring AOP 編寫的應用程序代碼是鬆散耦合的。
AOP 的功能全然集成到了 Spring 事務管理、日誌和其它各類特性的上下文中。
IOC 容器
Spring 設計的核心是 org.springframework.beans 包。它的設計目標是與 JavaBean 組件一塊兒使用。

這個包一般不是由用戶直接使用,而是由server將其用做其它多數功能的底層中介。下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現。贊成經過名稱建立和檢索對象。

BeanFactory 也可以管理對象之間的關係。


BeanFactory 支持兩個對象模型。


□ 單態 模型提供了具備特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton 是默認的也是最常用的對象模型。對於無狀態服務對象很是理想。
□ 原型 模型確保每次檢索都會建立單獨的對象。

在每個用戶都需要本身的對象時,原型模型最適合。


bean 工廠的概念是 Spring 做爲 IOC 容器的基礎。IOC 將處理事情的責任從應用程序代碼轉移到框架。正如我將在下一個演示樣例中演示的那樣,Spring 框架使用 JavaBean 屬性和配置數據來指出必須設置的依賴關係。










  
1.  BeanFactory的做用是什麼?   [中]   
BeanFactory是配置、建立、管理bean的容器。有時候也稱爲bean上下文。Bean與bean的依賴關係,也是由BeanFactory負責維護的。

  
2.  bean在spring的容器中兩種基本行爲是什麼? [中]   
Singleton:單態   
Non-singleton或prototype:原型   
3.  spring配置文件裏的ref元素的做用是什麼?它的兩個基本屬性是什麼?  [中]   
用於指定屬性值爲spring容器中的其餘bean.兩個基本屬性是bean和local   
4.  什麼是DWR?它有哪些功能?  [中]   
DWR(Direct Web Remoting)是一個WEB遠程調用框架.   
可以在client利用JavaScript直接調用服務端的Java方法並返回值給JavaScript   
DWR依據Java類來動態生成JavaScrip代碼.   
支持Dom Trees,支持Spring,支持commons-logging   
5.  Ajax的工做原理 ? [難]   
在會話的開始,瀏覽器載入Ajax引擎   
請求動做經過JavaScript調用Ajax引擎來取代.    
引擎負責繪製用戶界面以及與server端通信。   
Ajax引擎採用異步交互過程--不用等待server的通信。   
6.  XMLHttpRequest對象是什麼,它有哪些常常用法? [難]      
一個 JavaScript 對象。

是Ajax 的核心。   
該對象的方法和屬性。

  
    open():創建到server的新請求。

   
    send():向server發送請求。    
    abort():退出當前請求。    
    readyState:提供當前 HTML 的就緒狀態。    
    responseText:server返回的請求響應文本。.   
  
7.  XMLHttpRequest有哪些屬性, 它的值分表明什麼?[ 中]   
  
    
  
8.  什麼是Ajax?

 [易]   
AJAX(Asynchronous JavaScript and XML)。它不是一門新的語言或技術,而是多種技術的綜合,包含:   
Javascript   
XHTML   
CSS   
DOM   
XML   
XSTL   
XMLHttpRequest   
  
9.  同步與異步的差異? [ 難]   
普通B/S模式(同步)AJAX技術(異步)   
同步:提交請求->等待server處理->處理完成返回 這個期間client瀏覽器不能幹不論什麼事,而異步則是 請求經過事件觸發->server處理->處理完成   
同步是堵塞模式。異步是非堵塞模式。     
同步(發送方發出數據後,等接收方發回) 異步(發送方發出數據後。不等接收方發回響應)   
  
10. Struts+Hibernate+Spring開發模式中Hibernate扮演的角色  [中]   
  答:Hibernate扮演的是數據持久層 它的做用是實現持久化對象和數據庫表   
之間的映射,造成持久化對象和數據庫表中數據的一個轉換平臺   
  
11. 什麼是Hibernate 的抓取策略  [難]   
  抓取策略是指當應用程序需要利用關聯關係進行對象獲取的時候。   
12. 何爲容器  [中]   
  容器就是符合某種規範的能夠提供一系列服務的管理器。

  
13. Spring實現了那幾種模式  [中]   
答: 工廠模式 和 單例模式   
  
14 :Hibernate實體對象生命週期的三種狀態  [難]   
答 Transient(瞬態) ,persistent(持久態)和Detached(遊歷態)   
  
15: HQL查詢參數的處理方法  [中]   
答:直接將參數拼寫爲HQL語句   
經過參數名稱來標識參數   
  
16. Hibernate實體之間的關聯關係的三種形式  [中]   
   答  一對一關聯   
       一對多關聯   
       多對多關聯   
  
17.  Hibernate具用的三種檢索方式  [難]   
答:HQL檢索方式   
    QBC檢索方式   
    SQL檢索方式   
18. spring 中<Bean>的depends-on屬性是什麼  [中]   
Depends-on用於當前Bean初始化以前顯示的強制一個或多個bean被初始化   
19.  spring 中的BeanWrapper類是什麼  [難]   
BeanWrapper類是一個對JavaBean進行各類操做的工具類   
BeanWrapper自己是一個接口BeanWrapperImpl實現了BeanWrapper   
20 . <set>元素有一個cascade屬性,假設但願Hibernate級聯保存集合中的對象,casecade屬性應該取什麼值?  [難]   
   答:save-update   
21.  Hibernate中session何時是遊離態  [中]   
答:session.close();方法後    
22. Hibernate中映射文件<hibernate-mapping> inverse屬性和cascade屬性的差異  [中]   
   答:inverse屬性僅僅存在於集合標記的元素中集合元素包含<set/>,<map/>,<list/>,<array/>,<bag/>   
  Inverse屬性的做用是是否將對集合對象的改動反射到數據庫中 inverse=」false」時改動反射到數據庫中 inverse=」true」 時改動不反射到數據庫中   
  Cascade屬性的做用是描寫敘述關聯對象進行操做時的級聯特性。所以僅僅有涉及到關係的元素纔有cascade屬性   
  
23. : Hibernate中Session對象的load()方法和get()方法的差異(請列舉出兩點)[難]   
答:①記錄不存在時 get()方法會返回空(null),而load()方法將會拋出一個HibernateException異常 ② load()方法查詢數據時會先找Hibernate的內部緩存和二級緩   
存中的現有數據。get()方法在內部緩存中沒有打到相相應的數據時裝直接運行SQL語句   
進行查詢   
24. : Hibernate中HQL屬於什麼語言  [易]   
  答:HQL是面向對象的查詢語言,它可以查詢以對象形式存在的數據。   
  
25.  Hibernate簡單介紹以及主要功能  [中]   
  答:Hibernate是採用ORM模式實現數據持久層的一個優秀的JAVA組件,它提供了   
強大,高效的將JAVA對象進行持久化操做的服務   
  
26. 簡述Hibernate的長處 [難]   
 答:開源和免費的License,我可以在需要的時候研究源碼,改寫源碼,進行功能的定製。輕量級封裝,避免引入過多複雜的問題。調試easy,也減輕程序猿的負擔。

   
具備可擴展性。API開放,當自己功能不夠用的時候,可以本身編碼進行擴展。   
  
27. 如何構建SessionFactory  [難]   
  答: Hibernate的SessionFactory接口提供Session類的實例,Session類用於完畢對數據庫的操做。   
由於SessionFactory實例是線程安全的(而Session實例不是線程安全的)。因此每個操做都可以共用同一個SessionFactory來獲取Session。Hibernate配置文件分爲兩種格式,一種是xml格式的配置文件。還有一種是Java屬性文件格式的配置文件   
28. :從XML文件讀取配置信息構建SessionFactory的詳細過程例如如下。  [難]   
(1)建立一個Configuration對象,並經過該對象的configura()方法載入Hibernate配置文件,代碼例如如下。

  
Configuration config = new Configuration().configure();   
configura()方法:用於告訴Hibernate載入hibernate.cfg.xml文件。

Configuration在實例化時默認載入classpath中的hibernate.cfg.xml,固然也可以載入名稱不是hibernate.cfg.xml的配置文件。好比wghhibernate.cfg.xml,可以經過下面代碼實現。

  
Configuration config = new Configuration().configure("wghhibernate.cfg.xml");   
(2)完畢配置文件和映射文件的載入後,將獲得一個包含所有Hibernate執行期參數的Configuration實例,經過Configuration實例的buildSessionFactory()方法可以構建一個唯一的SessionFactory,代碼例如如下:   
SessionFactory sessionFactory = config.buildSessionFactory();   
構建SessionFactory要放在靜態代碼塊中,因爲它僅僅在該類被載入時運行一次。   
  
29. 寫出使用構造方法進行注入的關鍵代碼  [難]   
<bean id=」constructBean」 class=」com.huang.ConstructBean」>   
 <constructor-arg><ref  bean=」bean_1」/></ constructor-arg >   
<constructor-arg><ref  bean=」bean_2」/></ constructor-arg >   
<constructor-arg><ref  bean=」bean_3」/></ constructor-arg >   
</bean>   
  
  
30. 什麼是IOC?  [難]   
不建立對象,但是描寫敘述建立它們的方式。

在代碼中不直接與對象和服務鏈接,但在配置文件裏描寫敘述哪個組件需要哪一項服務。容器(在Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。    
就是由容器控制程序之間的關係。而非傳統實現中,由程序代碼直接操控。控制權由應用代碼中轉到了外部容器。控制權的轉移,就是所謂的反轉。

  
  
31. 編程題: 寫一個Singleton出來。  [難]   
Singleton模式主要做用是保證在Java應用程序中。一個類Class僅僅有一個實例存在。

  
  
第一種形式: 定義一個類,它的構造函數爲private的。它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用當中的方法。

  
public class Singleton {   
private Singleton(){}   
      private static Singleton instance = new Singleton();   
      public static Singleton getInstance() {   
        return instance;      
      }    
    }    
    另一種形式:    
public class Singleton {    
  private static Singleton instance = null;   
  public static synchronized Singleton getInstance() {   
  if (instance==null)   
    instance=new Singleton();   
        return instance;   }    
}   
  
  
    String tempStr = "";   
    try {   
      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");   
      tempStr = tempStr.trim();   
    }   
    catch (Exception e) {   
      System.err.println(e.getMessage());   
    }   
    return tempStr;   
  }   
32. J2EE是技術仍是平臺仍是框架?  [中]   
    J2EE自己是一個標準。一個爲企業分佈式應用的開發提供的標準平臺。   
    J2EE也是一個框架。包含JDBC、JNDI、RMI、JMS、EJB、JTA等技術。   
  
33. 咱們在web應用開發過程當中經常遇到輸出某種編碼的字符,如iso8859-1等,怎樣輸出一個某種編碼的字符串?  [難]   
  Public String translate (String str) {   
    String tempStr = "";   
    try {   
      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");   
      tempStr = tempStr.trim();   
    }   
    catch (Exception e) {   
      System.err.println(e.getMessage());   
    }   
    return tempStr;   
  }   
34.怎樣使用靜態工廠方法來建立Bean的實例  [易]   
   <bean id=」staticFactoryBean」 class=」com.huang.StaticFactoryBean」   
factory-method=」靜態方法名」/>   
至關於: StaticFactoryBean staticFactoryBean=StaticFactoryBean.靜態方法名   
  
使用實例化的工廠方法來建立Bean的實例   
   <!—注意此時bean的class屬性爲空-->   
  <bean id=」dynamicFactory」class=」com.huang.DynamicFactory」/>   
  <bean id=」dynamiceFactoryBean」 factory-bean=」dynamicFactory」   
   Factory-method=」方法名」/>   
至關於: DynamicFactory dynamicFactory=new DynamicFactory();   
      DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名   
35.  從Java屬性文件讀取配置信息構建SessionFactory的詳細過程例如如下:  [難]   
   (1)建立一個Configuration對象,此時Hibernate會默認載入classpath中的配置文件hibernate.properties。代碼例如如下。   
Configuration config = new Configuration();   
(2)由於在配置文件裏缺乏對應的配置映射文件的信息,因此此處需要經過編碼方式載入。這可以經過Configuration對象的addClass()方法實現,詳細代碼例如如下。   
config.addClass(BranchForm.class);   
addClass()方法用於載入實體類。   
(3)完畢配置文件和映射文件的載入後,將獲得一個包含所有Hibernate執行期參數的Configuration實例。經過Configuration實例的buildSessionFactory()方法可以構建一個唯一的SessionFactory,代碼例如如下。   
SessionFactory sessionFactory = config.buildSessionFactory();   
  
  
  
36. spring框架的7個模塊是什麼?   [ 難]   
答: (1) spring  AOP  --面象切面編程   
   (2)spring  DAO  --數據訪問對象   
   (3)spring ORM   --對象關係影射   
(4)spring Contect  -- 上下文配置,向Spring框架提供上下文信息   
(5)spring WEB  - -WEB上下文模塊   
(6)\spring WEB-MVC  --實現了MVC   
(7)spring CORE –核心容器提供Spring框架基本功能   
  
37. 什麼是AOP 請祥述  [中]   
  答: 是面向切面編程    
     AOP 把軟件系統分爲兩個部分:核心關注點和橫切關注點。

所謂的核心關注點。是業務處理的主要流程。也就是說這個解決方式要作的事。所謂橫切關注點,是與核心業務無關的部分。它把常發生在覈心關注點的多處,而各處基本類似。如日誌,事務,權限等 。   
  
38.  Hinbernate和EJB的差異  [中]   
 答:Hibernate可以用在不論什麼JDBC使用的場合,好比Java應用程序的數據庫訪問代碼,DAO接口的實現類,甚至可以是BMP裏面的訪問數據庫的代碼。

從這個意義上來講,Hibernate和EB不是一個範疇的東西,也不存在非此即彼的關係。   
  
39.  普通狀況下,關係數據模型與對象模型之間有哪些匹配關係 [難]   
   答:表相應類   
記錄相應表的對象   
表的字段相應類的屬性   
  
40.  事務隔離級別是由誰實現的?  [難]   
 答:數據庫系統‘   
  
41. 什麼是IOC  [難]   
答:IOC 是控制反轉。實現了對象之間的依賴關係的轉移成而使程序的菘耦合   
42. 在Spring中給屬性有幾種賦值方式 請祥敘   [難]   
  答:有四種 各自是   
(1)普通屬性賦值    
(2)集合屬性賦值   
(3)Properties賦值   
(4)Map 屬性賦值     
  
43.  在Spring說說Bean的alias元素和name屬性有什麼差異  [難]   
 答: <bean>元素name屬性可以一次爲<bean>定義多個別名   
       例:<bean id=」beanName」 name=」alias_1,alias_2」/>   
       <alias>元素一次僅僅能定義一個別名   
         例:<alias name=」beanName」 alias=」toName」/>   
      注意: alias元素name屬性是bean實例名   
44. Bean 的做用域用幾種。請祥敘  [難]   
    答: 用5種    
各自是:    
1. singleton  IOC容器僅僅會建立一個Bean的惟一的實例   
2. prototype  IOC容器在每次請求該Bean的時候都建立一個新的實例   
3. request 在一次Http請求中 IOC容器會返回該Bean的同一個實例。而對於不一樣的用戶請求。則會返回不一樣的實例   
4. session 在一次Http請求Session 中 IOC容器會返回該Bean的同一個實例,而對於不一樣的用戶Session,則會返回不一樣的實例   
5. global session在一個全局Http請求Session 中   
  
45. 簡述什麼是ORM   [中]   
答:ORM的全稱是Object-Relational Mapping 翻譯成中文就是「對象-關係映射」   
ORM組件的主要功能就是實現實體域對象的持久化並封裝數據庫訪問的細節   
   ORM自己並不是一個組件,它是具用某種功能的組件的總稱,也可以說是一種框   
架結構   
  
46.:struts中的幾個關鍵對象的做用(說說幾個關鍵對象的做用)  [中]   
 struts中的幾個關鍵對象:Action Global(設置語言靠它了) ModuleConfig(獲取mapping),   
47.Action的做用  [中]   
   Action的做用是接受用戶的請求,經過調用業務方法實現業務處理的功能。   
48. 在一般狀況下軟件系統由表示層,業務層,持久層和數據庫層組成,Struts屬於哪一層? [難]   
   Struts屬於表示層組件,它的做用主要體現在下面幾個方面:   
1)     輸出用戶界面和接收用戶的輸入。實現與用戶的交互。   
2) 調用業務方法,完畢業務處理,還要包含處理後的顯示工做。

  
  
48:Struts標籤庫由哪些組件組成?  [難]   
標籤庫是組合在一塊兒的一組JSP本身定義標籤。   
     標籤庫由下面組件組成:   
1) 標籤處理程序   
2) 標籤庫描寫敘述符(TLD)文件   
3) 應用程序部署描寫敘述符(web.xml)文件   
4) JSP頁面中標籤庫的聲明   
49. 用<bean:write>讀出一個URL和一個名稱。    [難]    
  用<html:link>的話怎麼組合起來。

   
  即要達到這種效果      
  <a   href="<bean:write   name="data"   property="url">">      
           <bean:write   name="data"   property="tilte">      
  </a>   
<html:link   page="<bean:write   name="data"   property="url">">      
      <bean:write   name="data"   property="title"/>      
  </html:link>     會報出屬性data無值的錯誤!(page="<bean:write   name="data"   property="url">"中的data無值。)     
50:如何才幹配置<html:button>的資源文件? [難]   
   在資源文件 ApplicationResourses.properties 中增長  label.login=login      
  在jsp頁面寫:      
  <html:button   name="btn_login"><bean:message   key="label.login"/></html:button>      
  這樣顯示頁面時,button上就會顯示label.login的相應內容「login」   
  
  
51. 說說struts框架,的方法的工做原理或流程   [易]   
  答: 對於採用Struts框架的web應用, 在web應用啓動時會載入並初始化ActionServlet。ActionServlet從struts-config.xml中讀取配置信息,   
 把它們存放到各類配置對象中,好比把Action的映射信息存放在ActionMapping對象中。   
 當ActionServlet接收到客戶請求時。運行下面流程:      
    1.檢索和用戶請求匹配的ActionMapping實例,假設不存在。就返回用戶請求路徑無效信息。        
     2.假設ActionForm實例不存在,就建立一個ActionForm對象並在當中保存客戶提交的表單內容。        
     3.依據配置信息決定是否調用ActionForm的validate()方法;      
     4.假設ActionForm的validate()方法返回null或返回一個不包括ActionMessage的ActionErrors對象。就表示表單驗證成功;      
     5.ActionServlet依據ActionMapping實例包括的映射信息將請求轉發給Action(假設Action實例不存在,就先建立Action實例),而後調用Action的excute()方法;        
   6.Action的excute()方法返回一個ActionForward對象。ActionServlet再把客戶請求轉發給ActionForward對象指向的JSP組件;    
7.ActionForward對象指向的JSP組件生成動態網頁。返回給客戶。    
  
52: strust的Action是否是線程安全的? [難]   
    答:線程安全就是你可以在多線程環境下使用它。而不需要你來對它進行特殊的處理。action都是繼承至servlet的。由於servlet就是線程不安全的(指多個線程共享一個servlet對象。因此),因此不要再action中定義類變量和實例變量,不然其它線程改變了這些值,可本線程還在使用   
53 :MVC,分析一下struts是怎樣實現MVC的 [難]   
從MVC角度來看看struts的體系結構(Model 2)與工做原理:   
  1)模型(Model)   
  在Struts的體系結構中。模型分爲兩個部分:系統的內部狀態和可以改變狀態的操做(事務邏輯)。

內部狀態一般由一組ActinForm Bean表示。依據設計或應用程序複雜度的不一樣,這些Bean可以是自包括的並具備持續的狀態。或僅僅在需要時纔得到數據(從某個數據庫)。大型應用程序一般在方法內部封裝事務邏輯(操做),這些方法可以被擁有狀態信息的bean調用。

比方購物車bean。它擁實用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,並向倉庫發訂貨信息。 小型程序中。操做可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這種方法很是適合。

建議用戶將事務邏輯(要作什麼)與Action類所扮演的角色(決定作什麼)分開。   
2)視圖(View)   
  視圖主要由JSP創建,struts包括擴展本身定義標籤庫(TagLib),可以簡化建立全然國際化用戶界面的過程。

眼下的標籤庫包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。   
 3)控制器(Controller)   
  
  在struts中。主要的控制器組件是ActionServlet類中的實例servelt,實際使用的servlet在配置文件裏由一組映射(由ActionMapping類進行描寫敘述)進行定義。

對於業務邏輯的操做則主要由Action、ActionMapping、ActionForward這幾個組件協調完畢的,當中Action扮演了真正的業務邏輯的實現者。ActionMapping與ActionForward則指定了不一樣業務邏輯或流程的執行方向。

struts-config.xml 文件配置控制器。

  
54  :簡述什麼是Struts  [中]   
 Struts僅僅是一個MVC框架(Framework),用於高速開發Java Web應用。

Struts實現的重點在C(Controller),包含ActionServlet/RequestProcessor和咱們定製的Action,也爲V(View)提供了一系列定製標籤(Custom Tag)。但Struts差點兒沒有涉及M(Model),因此Struts可以採用JAVA實現的不論什麼形式的商業邏輯。    
Spring是一個輕型容器(light-weight container)。其核心是Bean工廠(Bean Factory),用以構造咱們所需要的M(Model)。

在此基礎之上,Spring提供了AOP(Aspect-Oriented Programming, 面向層面的編程)的實現。用它來提供非管理環境下申明方式的事務、安全等服務;對Bean工廠的擴展ApplicationContext更加方便咱們實現J2EE的應用;DAO/ORM的實現方便咱們進行數據庫的開發;Web MVC和Spring Web提供了Java Web應用的框架或與其它流行的Web框架進行集成。    
就是說可將二者一塊兒使用。達到將二者自身的特色進行互補。   
  
55   :Struts有哪些主要功能:[難]   
1.包括一個controller servlet,能將用戶的請求發送到對應的Action對象。   
2. JSP自由tag庫,並且在controller servlet中提供關聯支持,幫助開發員建立交互式表單應用。   
3. 提供了一系列有用對象:XML處理、經過Java reflection APIs本身主動處理JavaBeans屬性、國際化的提示和消息。

  
Struts項目的目標是爲建立Java web應用提供一個開放源碼的framework。Struts framework的內核是基於好比Java Servlets, JavaBeans, ResourceBundles, 和 XML。以及各類 Jakarta Commons包的標準技術的靈活的控制層。   
Struts提供了它自身的控制器組件。並整合了其它技術,以提供模型和視圖。對於模型。同大多數的第三方軟件包同樣。如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts能夠和標準數據鏈接技術相結合。如JDBC和EJB。對於視圖,Struts與JavaServer Pages協同工做,包括JSTL和JSF。   
56   :Stuts框架中控制器組件的類主要有哪些?  [難]   
ActionServlet ,   
RequestProcessor   
, Action,    
 ActionMapping,   
ActionForward   
41:Validator的組成與做用  [難]   
Validator框架主要包含下面幾個部分:   
1) 實現各類驗證規則的Java類   
2) 配置文件   
3) 資源文件   
4) JSP本身定義標籤   
Validator組件可以很是好地解決用戶輸入數據的驗證問題,但它並不是一個獨立執行的組件,它可以被嵌入到眼下大部分的Web應用開發框架中。Validator組件的驗證方式有多種,既可以經過JavaScript腳本實現用戶輸入數據的頁面驗證,也可以實現在後臺處理程序中的Java驗證   
57. ActionForm的做用?[難]   
  ActionForm屬於一種傳輸數據對象,聯繫了前臺頁面與後臺的Action方法,實現了前臺與後臺之間的數據轉換和傳遞。它的做用主要體現在下面幾個方面:    
1) 在顯示頁面的時候用於完畢頁面中各類控件的初始化工做。   
2) 在用戶提交請求的時候。ActionForm又表明了用戶所提交的數據。供Action以及興許的業務處理方法使用   
ActionForm還有另一個做用就是對用戶提交數據的合法性進行驗證   
              Java  基礎就業題庫   
  
1.  類和對象的差異?

   [易]   
類是對象的抽象,是模型概念,而對象是實實在在存在的事物,是現實中存在的實體   
2.  Java類庫中八個標準包各自是什麼?

 [易]   
java.lang    提供常用的類、接口、通常異常、系統等編程語言的核心內容。

   
java.util    包括日期、日曆、向量、堆棧等有用工具。

   
java.io      包括輸入輸出流類、文件類等與輸入輸出I/O有關的類。        
java.awt     包括窗體和屏幕元素類。事件處理接口等與圖形用戶界面有關的內容。

      
java.applet  提供爲編寫applet小程序所需要的類。    
java.text    提供與文本有關的類。

   
java.net     包括url類等與網絡傳輸有關的東西。        
java.sql     提供與數據庫應用相關的類和接口。   
  
3.  接口和抽象類有什麼差異?    [中]   
  
接口是公開的,不能包括私有的方法或變量。而抽象類是可以有私有方法或私有變量的,    
實現接口的必定要實現接口裏定義的所有方法。而實現抽象類可以有選擇地重寫需要用到的方法,   
接口可以實現多重繼承,而一個類僅僅能繼承一個超類。但可以經過繼承多個接口實現多重繼承。   
接口還有標識(裏面沒有不論什麼方法,如Remote接口)和數據共享(裏面的變量全是常量)的做用.   
通常的應用裏,最頂級的是接口,而後是抽象類實現接口,最後纔到詳細類實現。   
  
  
4.  說說java中的內存分配?  [難]   
Java把內存分紅兩種,一種叫作棧內存,一種叫作堆內存   
在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配。

當在一段代碼塊中定義一個變量時,java就在棧中爲這個變量分配內存空間。當超過變量的做用域後,java會本身主動釋放掉爲該變量分配的內存空間,該內存空間可以立馬被另做他用。    
  
堆內存用於存放由new建立的對象和數組。在堆中分配的內存,由java虛擬機本身主動垃圾回收器來管理。在堆中產生了一個數組或者對象後,還可以在棧中定義一個特殊的變量,這個變量的取值等於數組或者對象在堆內存中的首地址,在棧中的這個特殊的變量就變成了數組或者對象的引用變量。之後就可以在程序中使用棧內存中的引用變量來訪問堆中的數組或者對象。引用變量至關於爲數組或者對象起的一個別名。或者代號。    
  
引用變量是普通變量。定義時在棧中分配內存,引用變量在程序執行到做用域外釋放。

而數組&對象自己在堆中分配。即便程序執行到使用new產生數組和對象的語句所在地代碼塊以外。數組和對象自己佔用的堆內存也不會被釋放,數組和對象在沒有引用變量指向它的時候,才變成垃圾,不能再被使用,但是仍然佔着內存,在隨後的一個不肯定的時間被垃圾回收器釋放掉。

這個也是java比較佔內存的主要緣由。但是在敲代碼的時候,可以人爲的控制   
  
5.  Character類有哪些常常用法?  [難]   
charValue()    
返回字符對象相應的值。

   
digit(char, int)    
以指定基數返回字符 ch 相應的數值。    
equals(Object)    
比較該對象和指定對象。    
forDigit(int, int)    
肯定以指定基數指定的數相應的字符。    
getNumericValue(char)    
返回此字符相應的 Unicode 的非負整型值。

   
getType(char)    
返回一個表示字符種類的值。    
hashCode()    
返回此字符相應的哈希碼。    
isDefined(char)    
斷定一個字符在 Unicode 中是否有定義。    
isDigit(char)    
斷定指定字符是否爲數字。    
isIdentifierIgnorable(char)    
斷定指定字符在 Java 標識符中或 Unicode 標識符中是否應看做是一個可忽略字符。

   
isISOControl(char)    
斷定指定字符是否爲 ISO 控制字符。

   
isJavaIdentifierPart(char)    
斷定指定字符是否爲 Java 標識符中除首字符外的字符。    
isJavaIdentifierStart(char)    
斷定指定字符是否可做爲 Java 標識符的首字符。    
isJavaLetter(char)    
斷定指定字符是否爲 Java 字母,如果。它可做爲 Java 語言中一個標識符的首字符。 不推薦使用該方法。

   
isJavaLetterOrDigit(char)    
斷定指定字符是否爲 Java 字母或數字,如果。它可做爲 Java 語言中的一個標識符除首字符外的字符。

不推薦使用該方法。    
isLetter(char)    
斷定指定字符是否爲字母。

   
isLetterOrDigit(char)    
斷定指定字符是否爲字母或數字。

   
isLowerCase(char)    
斷定指定字符是否爲小寫字符。    
isSpace(char)    
斷定指定字符是否爲 ISO-LATIN-1 空格。

不推薦使用該方法。    
isSpaceChar(char)    
斷定指定字符是否爲 Unicode 空白字符。

   
isTitleCase(char)    
斷定指定字符是否爲標題字符。    
isUnicodeIdentifierPart(char)    
斷定指定字符是否爲 Unicode 標識符中除首字符外的字符。

   
isUnicodeIdentifierStart(char)    
斷定指定字符是否可做爲 Unicode 標識符首字符。

   
isUpperCase(char)    
斷定指定字符是否爲大寫字符。    
isWhitespace(char)    
據 Java 語言,斷定指定字符是否爲空格。

   
toLowerCase(char)    
將給定字符映射爲相應的小寫字符,若沒有相應的小寫字符,返回此字符自己。    
toString()    
返回表示此字符值的串對象。

   
toTitleCase(char)    
將字符參數轉換爲標題字符。    
toUpperCase(char)    
將字符參數轉換爲大寫字符。    
5.Boolean類有哪些方法?

  
booleanValue()    
返回 Boolean 對象相應的布爾值。    
equals(Object)    
當且僅當參數非空,且是包括與此對象一樣的布爾值的布爾對象時,返回 true。    
getBoolean(String)    
當且僅當以參數命名的系統屬性存在,且等於 "true" 時,返回爲 true。

   
hashCode()    
返回此布爾值相應的哈希碼。    
toString()    
返回表示當前布爾值的一個串對象。

   
valueOf(String)    
返回表示指定串的布爾值。   
  
6.  String s = new String("xyz");建立了幾個String Object?    [中]   
   兩個對象。一個是「xyx」,一個是指向「xyx」的引用對象s。    
7.  String與StringBuffer有什麼差異?    [難]   
從表面看來String類僅僅用一個加號(+)便完畢了字符串的拼接,而StringBuffer類卻要調用一個append()方法,是否實現起來更簡潔,更單純呢?事實上否則,讓咱們瞭解一下程序執行內部發生了哪些事情:    
  
經編譯後程序的bytecode(字節碼)展現出了實質: 在用String類對象直接拼接時,JVM會建立一個暫時的StringBuffer類對象。並調用其append()方法完畢字符串的拼接,這是因爲String類是不可變的。拼接操做不得不使用StringBuffer類(並且--JVM會將"You are nice."和"I love you so much."建立爲兩個新的String對象)。

以後。再將這個暫時StringBuffer對象轉型爲一個String,代價不菲!可見,在這一個簡單的一次拼接過程當中,咱們讓程序建立了四個對象:兩個待拼接的String,一個暫時StringBuffer,和最後將StringBuffer轉型成爲的String--它固然不是最初的str了。這個引用的名稱沒變。但它指向了新的String對象。    
  
而假設直接使用StringBuffer類。程序將僅僅產生兩個對象:最初的StringBuffer和拼接時的String("I love you so much.")。也再也不需要建立暫時的StringBuffer類對象然後還得將其轉換回String對象。   
  
short s1 = 1; s1 = s1 + 1;有什麼錯?

  
short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)   
    short s1 = 1; s1 += 1;有什麼錯?

   
short s1 = 1; s1 += 1;(可以正確編譯)    
  
8.  可否夠繼承String類?   [難]   
String類是final類故不可以繼承。   
  
  
9.  throw與throws有什麼差異?

   [中]   
  
throws是用來聲明一個方法可能拋出的所有異常信息   
throw則是指拋出的一個詳細的異常類型。   
一般在一個方法(類)的聲明處經過throws聲明方法(類)可能拋出的異常信息,而在方法(類)內部經過throw聲明一個詳細的異常信息。   
throws一般不用顯示的捕獲異常,可由系統本身主動將所有捕獲的異常信息拋給上級方法;   
throw則需要用戶本身捕獲相關的異常。然後在對其進行相關包裝,最後在將包裝後的異常信息拋出。

  
  
throws語句   
throws用來標明一個成員函數可能拋出的各類"異常"。對大多數Exception子類來講,Java編譯器會強迫你聲明在一個成員函數中拋出的"異常"的類型。假設"異常"的類型是Error或RuntimeException。或它們的子類,這個規則不起做用,因爲這copy;在程序 的正常部分中是不期待出現的。假設你想明白地拋出一個RuntimeException。你必須用throws語句來聲明它的類型。這就又一次定義了成員函數的定義語法:type method-name(arg-list) throws exception-list { }如下是一段程序,它拋出了一個"異常", 但既沒有捕捉它,也沒實用throws來聲明。這在編譯時將不會經過。   
  
try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被運行,何時被運行。在return前仍是後?

  
會運行。在return前運行。   
  
10. 常見的runtime exception有哪些?。   [中]   
ArithmeticException,    
ArrayStoreException,    
BufferOverflowException,    
BufferUnderflowException,    
CannotRedoException, CannotUndoException,   
ClassCastException,   
CMMException,    
ConcurrentModificationException,   
DOMException,    
EmptyStackException, IllegalArgumentException,    
IllegalMonitorStateException,    
IllegalPathStateException,    
IllegalStateException,    
ImagingOpException, IndexOutOfBoundsException,    
MissingResourceException,    
NegativeArraySizeException,    
NoSuchElementException, NullPointerException,    
ProfileDataException,    
ProviderException,    
RasterFormatException,    
SecurityException,    
SystemException, UndeclaredThrowableException,    
UnmodifiableSetException,    
UnsupportedOperationException   
NullPointException   
  
11. 介紹JAVA中的Collection FrameWork(包含怎樣寫本身的數據結構)?    [難]   
答:Collection FrameWork例如如下:    
Collection    
├List    
│├LinkedList    
│├ArrayList    
│└Vector    
│ └Stack    
└Set    
Map    
├Hashtable    
├HashMap    
└WeakHashMap    
Collection是最主要的集合接口,一個Collection表明一組Object,即Collection的元素(Elements)    
Map提供key到value的映射    
  
  
12. ArrayList和Vector的差異,HashMap和Hashtable的差異  [難]   
答:就ArrayList與Vector主要從二方面來講.    
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的    
二.數據增加:當需要增加時,Vector 默認增加爲原來一培,而ArrayList倒是原來的一半    
就HashMap與HashTable主要從三方面來講。   
一.歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現    
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的。不是同步的    
三.值:僅僅有HashMap可以讓你將空值做爲一個表的條目的key或value   
  
  
13. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?    [難]   
Math.round(11.5)==12  
Math.round(-11.5)==-11  
round方法返回與參數最接近的長整數.   
14. swtich可否做用在byte上。可否做用在long上。可否做用在String上?  [難]   
switch(expr1)中,expr1是一個整數表達式。

應該是 int、 short、 char byte。   
long,string 都不能做用於swtich。   
  
  
15. GC是什麼?

爲何要有GC?

   [難]   
GC是垃圾收集的意思(Gabage Collection)   
Java提供的GC功能可以本身主動監測對象是否超過做用域從而達到本身主動回收內存的目的,   
Java語言沒有提供釋放已分配內存的顯示操做方法。   
  
  
  
16. 什麼叫方法重載   [中]   
方法重載就是一個同名方法。有多種不一樣的簽名    
說白了就是一個同名方法可以傳入不一樣個數或類型的參數    
之間可以互相調用   
  
  
17. 數組有沒有length()這種方法? String有沒有length()這種方法?  [中]   
數組沒有length()這種方法,有length的屬性。

String有有length()這種方法   
  
18.   什麼是抽象類抽象類  [中]   
僅提供一個類型的部分實現。抽象類可以有實例變量,以及一個或多個構造函數。

抽象類可以同一時候有抽象方法和詳細方法。一個抽象類不會有實例,這些構造函數不能被client調用來建立實例。一個抽象類的構造函數可以被其子類調用,從而使一個抽象類的所有子類都可以有一些共同的實現,而不一樣的子類可以在此基礎上有其本身的實現。

  
  
19.  抽象類的用途  [中]   
1)  詳細類不是用來繼承的。 Scott Meyers曾指出。僅僅要有可能,不要叢詳細類繼承。

2)  若是有2個詳細類。類A和類B,類B是類A 的子類,那麼一個最簡單的改動方案是應當創建一個抽象類(或java接口)C,而後讓類A和類B成爲抽象類C的子類。3)  抽象類應當擁有儘量多的共同代碼。以提升代碼的複用率。

4)  抽象類應當擁有儘量少的數據。

  
20  .java中接口有什麼用?

  [難]   
java不一樣意多重繼承,也就是說一個子類僅僅能有一個父類,Son extends FatherA,FatherB 是錯誤的    
爲了彌補這點不足,java贊成實現多個接口。Son extends FatherA implements AnotherFatherA,AnotherFatherB是贊成的    
接口中的方法沒有實體。就這一點而言就至關於abstact class。如:    
interface ainter{    
void dosth(int i);    
}    
ainter是一個接口。它只聲明瞭一個方法dosth,而沒有詳細實現它    
class aclass implements ainter    
{    
public void dosth(int i) {    
  
//在這裏你可以不做不論什麼處理,但是必須實現方法體    
}    
}    
aclass實現了ainter這個接口,所以它必須實現ainter中的方法dosth   
  
21. 什麼叫方法重載  [易]   
方法重載就是一個同名方法。有多種不一樣的簽名    
說白了就是一個同名方法可以傳入不一樣個數或類型的參數    
之間可以互相調用   
  
  
22. 垃圾回收機制的原理?  [難]   
在JAVA中 ,JAVA VM 每隔一段時間就會查看每一塊由NEW分配的內存空間,看指向它的有效引用是否存在,假設這個引用不存在,系統會本身主動將這塊空間納入空暇內存區.這個過程被稱爲 垃圾收集.   
  
  
23.. 什麼叫面向對象?   [中]   
面向對象是一種新興的程序設計方法,或者是一種新的程序設計規範(paradigm),其基本思想是使用對象、類、繼承、封裝、消息等基本概念來進行程序設計。

從現實世界中客觀存在的事物(即對象)出發來構造軟件系統,並且在系統構造中儘量運用人類的天然思惟方式。

開發一個軟件是爲了解決某些問題,這些問題所涉及的業務範圍稱做該軟件的問題域。

其應用領域不不過軟件,還有計算機體系結構和人工智能等。   
  
  
  
24. 面向對象的涉及方法有哪些?

  [中]   
 OOA-Object Oriented Analysis     面向對象的分析   
     
  OOD-Object Oriented Design      面向對象的設計   
     
OOI-Object Oriented Implementation  面向對象的實現   
  
  
25. jvm工做原理   [難]   
執行jvm 字符碼的工做是由解釋器來完畢的。解釋執行過程分三步進行:   
  
代碼的裝入、代碼的校驗、和代碼的運行。

  
裝入代碼的工做由「類裝載器class loader」完畢。類裝載器負責裝入運   
  
行一個程序需要的所有代碼,這也包含程序代碼中的類所繼承的類和被調   
  
用的類。

當類裝載器裝入一個類時,該類被放在本身的名字空間中。除了   
  
經過符號引用本身名字空間之外的類,類之間沒有其它辦法可以影響其它   
  
類。在本臺計算機的所有類都在同一地址空間中,而所有從外部引進的類   
  
,都有一個本身獨立的名字空間。這使得本地類經過共享一樣的名字空間   
  
得到較高的執行效率,同一時候又保證它們與從外部引進的類不會相互影響。   
  
當裝入了執行程序需要的所有類後,解釋器即可肯定整個可執行程序的內   
  
存佈局。解釋器爲符號引用與特定的地址空間創建相應關係及查詢表。

通   
  
過在這一階段肯定代碼的內佈局,java很是好地攻克了由超類改變而使子類   
  
崩潰的問題。同一時候也防止了代碼的非法訪問。   
隨後,被裝入的代碼由字節碼校驗器進行檢查。校驗器可以發現操做數棧   
  
益處、非法數據類型轉化等多種錯誤。經過校驗後,代碼便開始運行了。

  
java字節碼的運行有兩種方式:   
1) 即時編譯方式:解釋器先將字節編譯成機器碼,而後再運行該機器碼   

  
2)解釋運行方式:解釋器經過每次解釋並運行一小段代碼來完畢java字節   
  
碼程序的所有操做。

  
  
  
  
26. .java中輸入輸出流有哪些相關的類?

 [難]   
Input和Output    
1. stream表明的是不論什麼有能力產出數據的數據源。或是不論什麼有能力接收數據的接收源。在Java的IO中,所有的stream(包含Input和Out stream)都包含兩種類型:    
  
1.1 以字節爲導向的stream    
以字節爲導向的stream,表示以字節爲單位從stream中讀取或往stream中寫入信息。

以字節爲導向的stream包含如下幾種類型:    
1) input stream:    
1) ByteArrayInputStream:把內存中的一個緩衝區做爲InputStream使用    
2) StringBufferInputStream:把一個String對象做爲InputStream    
3) FileInputStream:把一個文件做爲InputStream,實現對文件的讀取操做    
4) PipedInputStream:實現了pipe的概念,主要在線程中使用    
5) SequenceInputStream:把多個InputStream合併爲一個InputStream    
2) Out stream    
1) ByteArrayOutputStream:把信息存入內存中的一個緩衝區中    
2) FileOutputStream:把信息存入文件裏    
3) PipedOutputStream:實現了pipe的概念,主要在線程中使用    
4) SequenceOutputStream:把多個OutStream合併爲一個OutStream    
1.2 以Unicode字符爲導向的stream    
以Unicode字符爲導向的stream。表示以Unicode字符爲單位從stream中讀取或往stream中寫入信息。

以Unicode字符爲導向的stream包含如下幾種類型:    
1) Input Stream    
1) CharArrayReader:與ByteArrayInputStream相應    
2) StringReader:與StringBufferInputStream相應    
3) FileReader:與FileInputStream相應    
4) PipedReader:與PipedInputStream相應    
2) Out Stream    
1) CharArrayWrite:與ByteArrayOutputStream相應    
2) StringWrite:無與之相應的以字節爲導向的stream    
3) FileWrite:與FileOutputStream相應    
4) PipedWrite:與PipedOutputStream相應    
以字符爲導向的stream基本上對有與之相相應的以字節爲導向的stream。兩個相應類實現的功能一樣,字是在操做時的導向不一樣。    
如CharArrayReader:和ByteArrayInputStream的做用都是把內存中的一個緩衝區做爲InputStream使用,所不一樣的是前者每次從內存中讀取一個字節的信息。然後者每次從內存中讀取一個字符。

   
1.3 兩種不現導向的stream之間的轉換    
InputStreamReader和OutputStreamReader:把一個以字節爲導向的stream轉換成一個以字符爲導向的stream。    
2. stream加入屬性    
2.1 「爲stream加入屬性」的做用    
運用上面介紹的Java中操做IO的API,咱們就可完畢咱們想完畢的不論什麼操做了。但經過FilterInputStream和FilterOutStream的子類,咱們可以爲stream加入屬性。如下以一個樣例來講明這樣的功能的做用。    
假設咱們要往一個文件裏寫入數據,咱們可以這樣操做:    
FileOutStream fs = new FileOutStream(「test.txt」);    
而後就可以經過產生的fs對象調用write()函數來往test.txt文件裏寫入數據了。但是,假設咱們想實現「先把要寫入文件的數據先緩存到內存中,再把緩存中的數據寫入文件裏」的功能時。上面的API就沒有一個能知足咱們的需求了。

但是經過FilterInputStream和FilterOutStream的子類,爲FileOutStream加入咱們所需要的功能。

   
2.2 FilterInputStream的各類類型    
2.2.1 用於封裝以字節爲導向的InputStream    
1) DataInputStream:從stream中讀取基本類型(int、char等)數據。

   
2) BufferedInputStream:使用緩衝區    
3) LineNumberInputStream:會記錄input stream內的行數。而後可以調用getLineNumber()和setLineNumber(int)    
4) PushbackInputStream:很是少用到,通常用於編譯器開發    
2.2.2 用於封裝以字符爲導向的InputStream    
1) 沒有與DataInputStream相應的類。

除非在要使用readLine()時改用BufferedReader,不然使用DataInputStream    
2) BufferedReader:與BufferedInputStream相應    
3) LineNumberReader:與LineNumberInputStream相應    
4) PushBackReader:與PushbackInputStream相應    
2.3 FilterOutStream的各類類型    
2.2.3 用於封裝以字節爲導向的OutputStream    
1) DataIOutStream:往stream中輸出基本類型(int、char等)數據。    
2) BufferedOutStream:使用緩衝區    
3) PrintStream:產生格式化輸出    
2.2.4 用於封裝以字符爲導向的OutputStream    
1) BufferedWrite:與相應    
2) PrintWrite:與相應    
3. RandomAccessFile    
1) 可經過RandomAccessFile對象完畢對文件的讀寫操做    
2) 在產生一個對象時,可指明要打開的文件的性質:r。僅僅讀。w。僅僅寫。rw可讀寫    
3) 可以直接跳到文件裏指定的位置    
4. I/O應用的一個樣例    
import java.io.*;    
public class TestIO{    
public static void main(String[] args)    
throws IOException{    
//1.以行爲單位從一個文件讀取數據    
BufferedReader in =    
new BufferedReader(    
new FileReader("F:\\nepalon\\TestIO.java"));    
String s, s2 = new String();    
while((s = in.readLine()) != null)    
s2 += s + "\n";    
in.close();    
  
//1b. 接收鍵盤的輸入    
BufferedReader stdin =    
new BufferedReader(    
new InputStreamReader(System.in));    
System.out.println("Enter a line:");    
System.out.println(stdin.readLine());    
  
//2. 從一個String對象中讀取數據    
StringReader in2 = new StringReader(s2);    
int c;    
while((c = in2.read()) != -1)    
System.out.println((char)c);    
in2.close();    
  
//3. 從內存取出格式化輸入    
try{    
DataInputStream in3 =    
new DataInputStream(    
new ByteArrayInputStream(s2.getBytes()));    
while(true)    
System.out.println((char)in3.readByte());    
}    
catch(EOFException e){    
System.out.println("End of stream");    
}    
  
//4. 輸出到文件    
try{    
BufferedReader in4 =    
new BufferedReader(    
new StringReader(s2));    
PrintWriter out1 =    
new PrintWriter(    
new BufferedWriter(    
new FileWriter("F:\\nepalon\\ TestIO.out")));    
int lineCount = 1;    
while((s = in4.readLine()) != null)    
out1.println(lineCount++ + ":" + s);    
out1.close();    
in4.close();    
}    
atch(EOFException ex){    
System.out.println("End of stream");    
}    
  
//5. 數據的存儲和恢復    
try{    
DataOutputStream out2 =    
new DataOutputStream(    
new BufferedOutputStream(    
new FileOutputStream("F:\\nepalon\\ Data.txt")));    
out2.writeDouble(3.1415926);    
out2.writeChars("\nThas was pi:writeChars\n");    
out2.writeBytes("Thas was pi:writeByte\n");    
out2.close();    
DataInputStream in5 =    
new DataInputStream(    
new BufferedInputStream(    
new FileInputStream("F:\\nepalon\\ Data.txt")));    
BufferedReader in5br =    
new BufferedReader(    
new InputStreamReader(in5));    
System.out.println(in5.readDouble());    
System.out.println(in5br.readLine());    
System.out.println(in5br.readLine());    
}    
catch(EOFException e){    
System.out.println("End of stream");    
}    
  
  
27. 構造器Constructor是否可被(覆蓋)override?  [難]   
構造器Constructor不能被繼承,所以不能重寫Overriding,但可以被重載Overloading。

  
  
  
28. JAVA反射機制做用是什麼?   [難]   
可以於執行時載入、探知、使用編譯期間全然未知的    
classes。

換句話說,Java程序可以載入一個執行時才得知名稱    
的class,獲悉其完整構造(但不包含methods定義),並生成其    
對象實體、或對其fields設值、或喚起其methods1。   
  
  
  
  
29. web應用程序體系結構是如何的?

  [難]   
通常分爲表示層、業務層、數據存取層   
30. .GET和POST有什麼差異?   [難]   
GET是明碼傳遞,POST是暗碼傳遞   
  
  
31. HTTP協議的特色?  [中]   
使用port發送和接受消息 。port是協議發送和接收數據的信道或機制 ,80是默認port   
經過這樣的協議傳遞數據server不會保存鏈接信息。所以又稱爲鏈接信息。

  
  
32. 怎樣經過RandomAccessFile操做文件  [難]    
RandomAccessFile rf =    
new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");    
for(int i=0; i<10; i++)    
rf.writeDouble(i*1.414);    
rf.close();    
  
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");    
for(int i=0; i<10; i++)    
System.out.println("Value " + i + ":" + rf.readDouble());    
rf.close();    
  
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");    
rf.seek(5*8);    
rf.writeDouble(47.0001);    
rf.close();    
  
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");    
for(int i=0; i<10; i++)    
System.out.println("Value " + i + ":" + rf.readDouble());    
rf.close();    
}    
}    
  
  
32. 靜態方法有什麼優勢?  [難]   
  
(1)在Java裏。可以定義一個不需要建立對象的方法。這個方案就是靜態方法。要實現這種效果,僅僅需要在類中定義的方法前加上statickeyword。好比:public static int maximum(int n1,int n2)   
使用類的靜態方法時,注意:   
a)           在靜態方法裏僅僅能直接調用同類中其它的靜態成員(包含變量和方法),而不能直接訪問類中的非靜態成員。

這是因爲,對於非靜態的方法和變量。需要先建立類的實例對象後纔可以使用。而靜態方法在使用前不用建立不論什麼對象。   
b)          靜態方法不能以不論什麼方式引用this和superkeyword。因爲靜態方法在使用前不用建立不論什麼實例對象。當靜態方法調用時,this所引用的對象根本沒有產生。   
(2)靜態變量是屬於整個類的變量而不是屬於某個對象的。

注意不能把不論什麼方法體內的變量聲明爲靜態。好比:   
fun()   
{   
   static int i=0;//非法。   
}   
(3)一個類可以使用不包括在不論什麼方法體中的靜態代碼塊,當類被加載時,靜態代碼塊被運行,且之被運行一次,靜態塊常用來運行類屬性的初始化。

好比:   
static  
{   
}   
  
  
33. Set裏的元素是不能反覆的。那麼用什麼方法來區分反覆與否呢?

是用==仍是equals()?

它們有何差異?

  [中]   
Set裏的元素是不能反覆的,那麼用iterator()方法來區分反覆與否。

equals()是推斷兩個對象是否相等。   
  
  
  
34. JAVA中的靜態方法有什麼理解?   [難]   
  
在Java裏,可以定義一個不需要建立對象的方法。這個方案就是靜態方法。要實現這種效果。僅僅需要在類中定義的方法前加上statickeyword。好比:public static int maximum(int n1,int n2)   
使用類的靜態方法時,注意:   
a)           在靜態方法裏僅僅能直接調用同類中其它的靜態成員(包含變量和方法),而不能直接訪問類中的非靜態成員。這是因爲,對於非靜態的方法和變量,需要先建立類的實例對象後纔可以使用,而靜態方法在使用前不用建立不論什麼對象。   
b)          靜態方法不能以不論什麼方式引用this和superkeyword,因爲靜態方法在使用前不用建立不論什麼實例對象。當靜態方法調用時,this所引用的對象根本沒有產生。   
(2)靜態變量是屬於整個類的變量而不是屬於某個對象的。注意不能把不論什麼方法體內的變量聲明爲靜態。好比:   
fun()   
{   
   static int i=0;//非法。

  
}   
(3)一個類可以使用不包括在不論什麼方法體中的靜態代碼塊,當類被加載時。靜態代碼塊被運行,且之被運行一次,靜態塊常用來運行類屬性的初始化。好比:   
static  
{   
}   
  
35. JSP中動態INCLUDE與靜態INCLUDE的差異? [難]   
動態INCLUDE用jsp:include動做實現 <jsp:include page="included.jsp" flush="true" />它老是會檢查所含文件裏的變化,   
適合用於包括動態頁面。並且可以帶參數。

  
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包括靜態頁面<%@ include file="included.htm" %>   
  
  
36. Java有沒有goto?   
java中的保留字,現在沒有在java中使用。

  
  
37. 啓動一個線程是用run()仍是start()?   [難]   
啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可執行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立刻執行。run()方法可以產生必須退出的標誌來中止一個線程。   
  
  
38. swtich可否做用在byte上。可否做用在long上,可否做用在String上? [易]   
switch(expr1)中,expr1是一個整數表達式。應該是 int、 short、 char byte。   
long,string 都不能做用於swtich。

  
  
39. try {}裏有一個return語句。那麼緊跟在這個try後的finally {}裏的code會不會被運行。何時被運行,在return前仍是後?  [難]   
會運行,在return前運行。

  
  
40. 兩個對象值一樣(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不正確?   
不正確,有一樣的hash code。  [易]   
\   
41. char型變量中能不能存貯一箇中文漢字?爲何?

  [難]   
可以。因爲java中以unicode編碼。一個char佔16個字節,因此放一箇中文是沒問題的   
  
42. Java中的線程有四種狀態各自是是什麼? [難]   
執行、就緒、掛起、結束。

  
  
43. java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們各自是哪些類?  [難]   
字節流,字符流。   
字節流繼承於InputStream \ OutputStream。   
字符流繼承於InputStreamReader \ OutputStreamWriter。   
  
44. 靜態變量和實例變量的差異? [中]   
static i = 10; //常量   
class A a;  a.i =10;//可變   
  
45. 什麼是java序列化,怎樣實現java序列化?  [難]   
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。

可以對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。

序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。

  
序列化的實現:   
將需要被序列化的類實現Serializable接口。該接口沒有需要實現的方法,implements Serializable僅僅是爲了標註該對象是可被序列化   
  
46. 可否夠從一個static方法內部發出對非static方法的調用? [難]   
不可以,假設當中包括對象的method();不能保證對象初始化.   
  
47. 在JAVA中,怎樣跳出當前的多重嵌套循環? [難]   
用break; return 方法。

  
  
48. 面向對象的特徵有哪些方面    [中]   
1.抽象:   
抽象就是忽略一個主題中與當前目標無關的那些方面。以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而僅僅是選擇當中的一部分,臨時不用部分細節。抽象包含兩個方面,一是過程抽象。二是數據抽象。

  
2.繼承:   
繼承是一種聯結類的層次模型。並且贊成和鼓舞類的重用,它提供了一種明白表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類可以從它的基類那裏繼承方法和實例變量,並且類可以改動或添加新的方法使之更適合特殊的需要。   
3.封裝:   
封裝是把過程和數據包圍起來。對數據的訪問僅僅能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列全然自治、封裝的對象,這些對象經過一個受保護的接口訪問其它對象。   
4. 多態性:   
多態性是指贊成不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包括多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很是好的攻克了應用程序函數同名問題。

  
  
49. String是最主要的數據類型嗎?  [中]   
基本數據類型包含byte、int、char、long、float、double、boolean和short。   
java.lang.String類是final類型的。所以不可以繼承這個類、不能改動這個類。

爲了提升效率節省空間,咱們應該用StringBuffer類   
50. int 和 Integer 有什麼差異  [中]   
Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java爲int提供的封裝類。Java爲每個原始類型提供了封裝類。

  
  
51. 執行時異常與通常異常有何異同?   [ 難]   
異常表示程序執行過程當中可能出現的非正常狀態。執行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須聲明拋出可能發生的非執行時異常,但是並不要求必須聲明拋出未被捕獲的執行時異常。   
  
52. &和&&的差異。 [ 中]    
&是位運算符,表示按位與運算,&&是邏輯運算符。表示邏輯與(and)。   
  
53. final, finally, finalize的差異。  [中]   
final 用於聲明屬性,方法和類。分別表示屬性不可變,方法不可覆蓋。類不可繼承。   
finally是異常處理語句結構的一部分。表示老是運行。

  
finalize是Object類的一個方法,在垃圾收集器運行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其它資源回收,好比關閉文件等。   
  
  
Jsp/servlet面試題   
1. 四種會話跟蹤技術是什麼?(jsp) (中)   
答:cookie,url重寫,session,隱藏表單域。

  
2.不一樣client可不可以共享Session?不可以 (易)   
Jps和Servlet之間可不可以用session傳值?

可以   
3.簡單介紹cookie的有關知識 (中)   
瀏覽器與WEBserver之間是使用HTTP協議進行通訊的。當某個用戶發出頁面請求時,WEBserver僅僅是簡單的進行響應,而後就關閉與該用戶的鏈接。所以當一個請求發送到WEBserver時,無論其是不是第一次來訪,server都會把它看成第一次來對待。這種很差之處可想而知。爲了彌補這個缺陷,Netscape 開發出了cookie這個有效的工具來保存某個用戶的識別信息,所以人們暱稱爲「小甜餅」。cookies是一種WEBserver經過瀏覽器在訪問者的硬盤上存儲信息的手段:Netscape Navigator使用一個名爲cookies.txt本地文件保存從所有網站接收的Cookie信息;而IE瀏覽器把Cookie信息保存在相似於C: \windows\cookies的文件夾下。當用戶再次訪問某個網站時,服務端將要求瀏覽器查找並返回先前發送的Cookie信息,來識別這個用戶。   
  cookies給站點和用戶帶來的優勢許多:   
一、Cookie能使網站跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入網站的路徑   
二、Cookie能告訴在線廣告商廣告被點擊的次數 ,從而可以更精確的投放廣告   
三、Cookie有效期限未到時,Cookie能使用戶在不鍵入password和username的狀況下進入之前瀏覽過的一些網站   
四、Cookie能幫助網站統計用戶我的資料以實現各類各樣的個性化服務    
JSP是使用例如如下的語法格式來建立cookie的:   
  Cookie cookie_name =new Cookie(""Parameter"",""Value"");   
  好比:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);   
  
4.在瀏覽器的打開時再新打開一個瀏覽器仍是同一個session嗎? (中)   
對IE而言不是同一個SESSION   
5.描寫敘述Cookie和Session的做用。差異和各自的應用範圍 (中)   
Cookie和Session都可以用來在多個頁面之間共享數據,差異是Cookie保存在client,可以設置比較長的保存時間.而Session保存在server端,一般生存時間較短。

假設client禁用了Cookie,Cookie將沒法工做。而session不受這一影響。通常來講保密性高、保存時間短的信息適合用session來存放,而Cookie適合存放需要長期保存的非敏感數據。   
  
6.怎樣實現購物車加入新項,又不使購物車中原有項目被取消?

(易)   
可以將購物車存放在session其中   
  
7.Cookie的過時時間怎樣設置? (易)   
使用setMaxAge(int exp)方法   
  
8.假設BROWSER已關閉了cookies,在JSP中我怎樣打開session? (中)   
假設Cookie被禁用。session將經過url重寫的方式來傳送。因此不會影響session的使用   
  
9.include指令和include動做的差異  (中)   
    
10. Jsp有哪些常用動做?

做用各自是什麼?

(jsp)  (中)   
答:JSP有6種常用基本動做 jsp:include:在頁面被請求的時候引入一個文件。

   
jsp:useBean:尋找或者實例化一個JavaBean。    
jsp:setProperty:設置JavaBean的屬性。

   
jsp:getProperty:輸出某個JavaBean的屬性。    
jsp:forward:把請求轉到一個新的頁面。    
jsp:plugin:依據瀏覽器類型爲Java插件生成OBJECT或EMBED標記。   
  
11. "forward與redirect差異? (中)   
Forward是在server端進行分發,分發後地址欄無變化,用戶看不到分發後的地址.而redirect是在client進行的頁面重定向,地址欄上會顯示重定向後的網頁.forward的頁面僅僅能是在同一個web應用程序以內,而重定向可以定位到外部資源.forward後仍是同一個request請求,而重定向後曾經的request請求就不存在了.   
  
12.Jsp和Servlet中的請求轉發分別怎樣實現?

(易)   
Jsp中使用<jsp:forward>動做,servlet中使用RequestDistpatcher對象的forward方法"   
  
13.什麼是web容器?(易)   
答:給處於當中的應用程序組件(JSP。SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,沒必要關注其餘系統問題。主要有WEBserver來實現。好比:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵照J2EE規範中的WEB APPLICATION 標準。咱們把遵照以上標準的WEBserver就叫作J2EE中的WEB容器。   
  
14.應用server有那些? (中)   
答:BEA WebLogic Server。IBM WebSphere Application Server。Oracle9i Application Server,JBoss,Tomcat。"   
  
15.請說出JSP的內置對象及方法 (中)   
答:request表示HttpServletRequest對象。它包括了有關瀏覽器請求的信息。並且提供了幾個用於獲取cookie,    
header, 和session數據的實用的方法。

  
    response表示HttpServletResponse對象,並提供了幾個用於設置送回    
瀏覽器的響應的方法(如cookies,頭信息等)   
    out對象是javax.jsp.JspWriter的一個實例。並提供了幾個方法使你能用於向瀏覽器回送輸出結果。   
    pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各類範圍的名字空間、servlet相關的對象的API,並且包裝了通用的servlet相關功能的方法。   
    session表示一個請求的javax.servlet.http.HttpSession對象。

Session可以存貯用戶的狀態信息   
    applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息   
    config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。   
page表示從該頁面產生的一個servlet實例。   
  
16.使用JSP怎樣得到客戶瀏覽器的信息?  (易)   
request對象的getXXXX方法"   
  
17.B/S與C/S的聯繫與差異。  (中)   
答:C/S是Client/Server的縮寫。

server一般採用高性能的PC、工做站或小型機,並採用大型數據庫系統。如Oracle、Sybase、Informix或    
SQL Server。client需要安裝專用的client軟件。   
B/S是Brower/Server的縮寫,客戶機上僅僅要安裝一個瀏覽器(Browser),如Netscape    
Navigator或Internet Explorer,server安裝Oracle、Sybase、Informix或 SQL    
Server等數據庫。在這樣的結構下。用戶界面全然經過WWW瀏覽器實現,一部分事務邏輯在前端實現。但是主要事務邏輯在server端實現。瀏覽器經過Web    
Server 同數據庫進行數據交互。

  
C/S 與 B/S 差異:   
1).硬件環境不一樣:   
  C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境,    
局域網之間再經過專門server提供鏈接和數據交換服務.   
  B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備.    
信息本身管理. 有比C/S更強的適應範圍, 通常僅僅要有操做系統和瀏覽器便可   
2).對安全要求不一樣   
  C/S 通常面向相對固定的用戶羣, 對信息安全的控制能力很是強.    
通常高度機密的信息系統採用C/S 結構適宜. 可以經過B/S公佈部分可公開信息.   
  B/S 創建在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。   
3).對程序架構不一樣   
  C/S 程序可以更加註重流程, 可以對權限多層次校驗,    
對系統執行速度可以較少考慮.   
  B/S 對安全以及訪問速度的多重的考慮, 創建在需要更加優化的基礎之上.    
比C/S有更高的要求 B/S結構的程序架構是發展的趨勢, 從MS的.Net系列的BizTalk    
2000 Exchange 2000等, 全面支持網絡的構件搭建的系統. SUN 和IBM推的JavaBean    
構件技術等,使 B/S更加成熟.   
4).軟件重用不一樣   
  C/S 程序可以不可避免的整體性考慮,    
構件的</ div <>   
  
     
  <DIV class=attachments>   
       
         
        <UL>   
          <LI><A href="http://dl.iteye.com/topics/download/4bb5d3ac-5b81-3821-8979-95a9e6af97e8">打印.rar</A> (98.7 KB)   
          <LI>描寫敘述: SSH面試題   
          <LI>下載次數: 4  
        </LI></UL>   
         
       
       
  </DIV>   
  
  
  
  <SCRIPT type=text/javascript><!--   
google_ad_client = "pub-1076724771190722";   
/* JE我的博客468x60 */  
google_ad_slot = "5506163105";   
google_ad_width = 468;   
google_ad_height = 60;   
//-->   
</SCRIPT>   
<SCRIPT type=text/javascript src="http://pagead2.googlesyndication.com/pagead/show_ads.js">   
</SCRIPT><SCRIPT src="http://pagead2.googlesyndication.com/pagead/js/r20110713/r20110719/show_ads_impl.js"></SCRIPT><SCRIPT src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></SCRIPT><SCRIPT src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></SCRIPT><SCRIPT>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</SCRIPT><IFRAME id=google_ads_frame1 height=60 marginHeight=0 src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-1076724771190722&output=html&h=60&slotname=5506163105&w=468&lmt=1311752896&ea=0&flash=10.3.181.34&url=http%3A%2F%2Fzhengyunfei.iteye.com%2Fblog%2F1078170&dt=1311752896437&shv=r20110713&jsv=r20110719&saldr=1&correlator=1311752896562&frm=4&adk=2365030428&ga_vid=861167297.1311752897&ga_sid=1311752897&ga_hid=1115300874&ga_fc=0&u_tz=480&u_his=0&u_java=1&u_h=900&u_w=1600&u_ah=876&u_aw=1600&u_cd=32&u_nplug=0&u_nmime=0&biw=1584&bih=726&ref=http%3A%2F%2Fwww.iteye.com%2Fblogs%2Ftag%2F%25E9%259D%25A2%25E8%25AF%2595%3Fpage%3D7&fu=0&ifi=1&dtd=156" frameBorder=0 width=468 allowTransparency name=google_ads_frame1 marginWidth=0 scrolling=no></IFRAME>   
     
  <DIV id=bottoms class=clearfix> <DIV id=digg_bottom class=clearfix><A onclick='digg("blogs", 1078170, false);return false;' href="#"><DIV><STRONG>1</STRONG> <BR>頂</DIV></A><A onclick='digg("blogs", 1078170, true);return false;' href="#"><DIV><STRONG>2</STRONG> <BR>踩</DIV></A></DIV> <DIV id=share_weibo>分享到:<A title=分享到新浪微博 href="javascript:;" data-type="sina"><IMG src="/images/t_sina.gif"></A>   
      <A title=分享到騰訊微博 href="javascript:;" data-type="qq"><IMG src="/images/t_qq.gif"></A>   
    </DIV>   
  </DIV>   
  
  <DIV class=blog_nav>   
    <DIV class=pre_next> <A class=next title=oracle批量更新 href="/blog/1106941">oracle批量更新</A> | <A class=pre title="java 面試題整理2" href="/blog/1072284">java 面試題整理2</A> </DIV>   
  </DIV>   
  <DIV class=blog_bottom>   
    <UL>   
      <LI>23:19  
      </LI><LI><A href="#comments">評論</A> / 瀏覽 (0 / 166)</LI><LI><A class=favorite onclick="$$('.favorite_form_spinner')[0].show();new Ajax.Request('http://zhengyunfei.iteye.com/links/new_xhr?user_favorite%5Btitle%5D=SSH%E9%9D%A2%E8%AF%95%E9%A2%98%E6%95%B4%E7%90%86&user_favorite%5Burl%5D=http%3A%2F%2Fzhengyunfei.iteye.com%2Fblog%2F1078170', {method: 'get', onSuccess: function(response){$(document.getElementsByTagName('body')[0]).insert({bottom:response.responseText});$$('.favorite_form_spinner')[0].hide();}});return false;" href="http://app.iteye.com/links?

user_favorite%5Btitle%5D=SSH%E9%9D%A2%E8%AF%95%E9%A2%98%E6%95%B4%E7%90%86&user_favorite%5Burl%5D=http%3A%2F%2Fzhengyunfei.iteye.com%2Fblog%2F1078170" target=_blank>收藏</A><IMG style="DISPLAY: none; MARGIN-LEFT: 7px; VERTICAL-ALIGN: bottom" class=favorite_form_spinner alt=Spinner src="http://www.iteye.com/images/spinner.gif?

1308833136"> </LI><LI>分類:<A href="http://www.iteye.com/blogs/category/language">編程語言</A> </LI><LI class=last><A class=more href="http://www.iteye.com/wiki/blog/1078170" target=_blank>相關推薦</A> </LI></UL>      </DIV>         <DIV class=blog_comment> <H5>評論</H5> <A id=comments name=comments></A> </DIV>         <DIV class=blog_comment> <H5>發表評論</H5> <FORM id=comment_form onsubmit="return false;" method=post action=/blog/1078170> <INPUT id=editor_bbcode_flag value=true type=hidden> <DIV id=editor_main><DIV id=editor_wrapper class=clearfix><DIV id=bbcode_emotions><H5>表情圖標</H5><IMG src="http://www.iteye.com/images/smiles/icon_biggrin.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_smile.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_sad.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_surprised.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_eek.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_confused.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_cool.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_lol.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_mad.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_razz.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_redface.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_cry.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_evil.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_twisted.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_rolleyes.gif" width=19 height=19><IMG src="http://www.iteye.com/images/smiles/icon_wink.gif" width=19

相關文章
相關標籤/搜索