【正文】
表現(xiàn)方式。 解答: MVC是ModelViewController 的縮寫,Model代表的是應(yīng) 用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實現(xiàn)),View 是應(yīng)用的表示層(由JSP頁面產(chǎn)生)Controller是通過應(yīng)用的處理過程控制,(一般是一個servert)通過這種設(shè)計模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實現(xiàn),這些組件可以進行交互和重用。 在Struts框架中Controller功能由ActionServlet和ActionMapping對象構(gòu)成,核心是一個Servlet類型的對象ActionServlet,它用來接收客戶端的請求。ActionServlet包括一組基于配置的ActionMapping對象,每個ActionMapping對象實現(xiàn)了一個請求到一個具體的Model部分的Action處理器對象之間的映射。Model部分由Action和Action對象構(gòu)成。所有的Action 處理器對象都是開發(fā)者從Struts的Action類派生的子類。Action 處理器對象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到合適的View組件以產(chǎn)生響應(yīng)。Struts提供的Action組件對象可以通過定義屬性描述客戶端表單數(shù)據(jù),開發(fā)者可以從它派生子類對象,并利用它和Struts提供的自定義標(biāo)記庫相結(jié)合,可以實現(xiàn)對客戶端的表單數(shù)據(jù)的良好封裝和支持,Action處理器對象可以直接對它進行讀寫,而不再需要和request、response對象進行數(shù)據(jù)交互。通過Action組件對象實現(xiàn)了對View和Model之間交互的支持(View部分是通過JSP技術(shù)實現(xiàn)的)。Struts提供了自定義的標(biāo)記庫,通過這些自定義標(biāo)記庫可以非常容易地和系統(tǒng)的Model部分交互,通過使用這些自定義標(biāo)記庫創(chuàng)建的 JSP表單,可以實現(xiàn)對Model部分中的Action的映射, 完成對用戶數(shù)據(jù)的封裝。 34.java語言中public、private、protected三個關(guān)鍵字的用法,重寫和重載的區(qū)別。 解答: 作用域當(dāng)前類同包子類其它 public √√√√protected √√√default √√private √ 重寫:發(fā)生在父子類之間,方法名相同,參數(shù)的類型、個數(shù)、順序相同,返回值相同,訪問權(quán)限不能更封閉,拋出異常不能寬泛; 重載:發(fā)生在同一個類中,方法名相同,但是參數(shù)不同(類型不同或個數(shù)不同或參數(shù)的順序不同),返回值可以不相同。 ? 解答: 1)request 2)session 3)application 4)提交表單 5)超鏈接 和redirect的區(qū)別 解答:forward是容器中控制權(quán)的轉(zhuǎn)向,是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容 是從哪兒來的,所以它的地址欄中還是原來的地址。redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數(shù)重新請求,并且從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隱藏實際的鏈接;在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務(wù)器上的資源,則必須使用sendRedirect()方法。 ? 解答:Java反射機制的作用是: 1)在運行時判斷任意一個對象所屬的類。 2)在運行時構(gòu)造任意一個類的對象。 3)在運行時判斷任意一個類所具有的成員變量和方法。 4)在運行時調(diào)用任意一個對象的方法 38.你是怎么理解java的泛型的? 解答:在Java SE ,沒有泛型的情況的下,通過對類型Object的引用來實現(xiàn)參數(shù)的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開發(fā)者對實際參數(shù)類型可以預(yù)知的情況下進行的。對于強制類型轉(zhuǎn)換錯誤的情況,編譯器可能不提示錯誤,在運行的時候才出現(xiàn)異常,這是一個安全隱患。 泛型是Java SE ,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。 泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉(zhuǎn)換都是自動和隱式的,提高代碼的重用率。 ,有什么限制 解答:一個java源文件中可以包含多個類,每個源文件中至多有一個public類,如果有的話,那么源文件的名字必須與之相同。如果源文件中沒有public類,則源文件用什么名字都可以,但最好還是具有特定的意義,免得自己都不記得里面寫的是什么了。 40.在一個千萬級的數(shù)據(jù)庫查尋中,如何提高查詢效率?分別說出在數(shù)據(jù)庫設(shè)計、SQL語句、java等層面的解決方案。 解答: 1)數(shù)據(jù)庫設(shè)計方面: a. 對查詢進行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在where 及order by 涉及的列上建立索引。 b. 應(yīng)盡量避免在where 子句中對字段進行null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描,如:select id from t where num is null 可以在num上設(shè)置默認值0,確保表中num列沒有null值,然后這樣查詢:select id from t where num=0 c. 并不是所有索引對查詢都有效,SQL是根據(jù)表中數(shù)據(jù)來進行查詢優(yōu)化的,當(dāng)索引列有大量數(shù)據(jù)重復(fù)時,查詢可能不會去利用索引,如一表中有字段sex,male、female幾乎各一半,那么即使在sex 上建了索引也對查詢效率起不了作用。 d. 索引并不是越多越好,索引固然可以提高相應(yīng)的select 的效 率,但同時也降低了insert 及update 的效率,因為insert 或update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數(shù)最好不要超過6個,若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要。 e. 應(yīng)盡可能的避免更新索引數(shù)據(jù)列,因為索引數(shù)據(jù)列的順序就是表記錄的物理存儲順序,一旦該列值改變將導(dǎo)致整個表記錄的順序的調(diào)整,會耗費相當(dāng)大的資源。若應(yīng)用系統(tǒng)需要頻繁更新索引數(shù)據(jù)列,那么需要考慮是否應(yīng)將該索引建為索引。 f. 盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每一個字符,而對于數(shù)字型而言只需要比較一次就夠了。 g. 盡可能的使用varchar/nvarchar 代替char/nchar ,因為首先變長字段存儲空間小,可以節(jié)省存儲空間,其次對于查詢來說,在一個相對較小的字段內(nèi)搜索效率顯然要高些。 h. 盡量使用表變量來代替臨時表。如果表變量包含大量數(shù)據(jù),請注意索引非常有限(只有主鍵索引)。 i. 避免頻繁創(chuàng)建和刪除臨時表,以減少系統(tǒng)表資源的消耗。 j. 臨時表并不是不可使用,適當(dāng)?shù)厥褂盟鼈兛梢允鼓承├谈行?,例如,?dāng)需要重復(fù)引用大型表或常用表中的某個數(shù)據(jù)集時。但是,對于一次性事件,最好使用導(dǎo)出表。 k. 在新建臨時表時,如果一次性插入數(shù)據(jù)量很大,那么可以使 用select into 代替create table,避免造成大量log ,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create table,然后insert。 l. 如果使用到了臨時表,在存儲過程的最后務(wù)必將所有的臨時表顯式刪除,先truncate table ,然后drop table ,這樣可以避免系統(tǒng)表的較長時間鎖定。 2)SQL語句方面: a. 應(yīng)盡量避免在where 子句中使用!=或操作符,否則將引擎放棄使用索引而進行全表掃描。 b. 應(yīng)盡量避免在where 子句中使用or 來連接條件,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描,如:select id from t where num=10 or num=20 可以這樣查詢:select id from t where num=10 union all select id from t where num=20 c. in 和not in 也要慎用,否則會導(dǎo)致全表掃描,如:select id from t where num in(1,2,3) 對于連續(xù)的數(shù)值,能用between 就不要用in 了:select id from t where num between 1 and 3 d. 下面的查詢也將導(dǎo)致全表掃描:select id from t where name like %abc% e. 如果在where 子句中使用參數(shù),也會導(dǎo)致全表掃描。因為SQL只有在運行時才會解析局部變量,但優(yōu)化程序不能將訪問計劃的選擇此資料由網(wǎng)絡(luò)收集而來,如有侵權(quán)請告知上傳者立即刪除。資料共分享,我們負責(zé)傳遞知識。