java 0272
時(shí)間:2023-07-20 22:00:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-07-20 22:00:01 來源:網(wǎng)站運(yùn)營
java 0272:299.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。
下面接著再說說兩者在應(yīng)用上的區(qū)別:
接口更多的是在系統(tǒng)架構(gòu)設(shè)計(jì)方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類在代碼實(shí)現(xiàn)方面發(fā)揮作用,可以實(shí)現(xiàn)代碼的重用,例如,模板方法設(shè)計(jì)模式是抽象類的一個(gè)典型應(yīng)用,假設(shè)某個(gè)項(xiàng)目的所有Servlet類都要用相同的方式進(jìn)行權(quán)限判斷、記錄訪問日志和處理異常,那么就可以定義一個(gè)抽象的基類,讓所有的Servlet都繼承這個(gè)抽象基類,在抽象基類的service方法中完成權(quán)限判斷、記錄訪問日志和處理異常的代碼,在各個(gè)子類中只是完成各自的業(yè)務(wù)邏輯代碼,偽代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public
abstract
classBaseServlet
extends
HttpServlet{
public
final
void
service(HttpServletRequest request,HttpServletResponse response)
throws
IOExcetion,ServletException {
記錄訪問日志
進(jìn)行權(quán)限判斷
if(具有權(quán)限){
try{
doService(request,response);
}
catch(Excetpion e) {
記錄異常信息
}
}
}
protected
abstract
void
doService(HttpServletRequest request,HttpServletResponse response)
throws
IOExcetion,ServletException;
//注意訪問權(quán)限定義成protected,顯得既專業(yè),又嚴(yán)謹(jǐn),因?yàn)樗菍iT給子類用的
}
public
class
MyServlet1 extendsBaseServlet
{
protected
voiddoService(HttpServletRequest request, HttpServletResponse response) throwsIOExcetion,ServletException
{
本Servlet只處理的具體業(yè)務(wù)邏輯代碼
}
}
父類方法中間的某段代碼不確定,留給子類干,就用模板方法設(shè)計(jì)模式。
備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細(xì)節(jié),最后再說兩者的應(yīng)用區(qū)別。比較兩者語法細(xì)節(jié)區(qū)別的條理是:先從一個(gè)類中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等6個(gè)方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了一個(gè)典型的例子來展現(xiàn)自己深厚的技術(shù)功底。
300.比較一下Java 和JavaSciprt
答:JavaScript 與Java是兩個(gè)公司開發(fā)的不同的兩個(gè)產(chǎn)品。Java 是原Sun 公司推出的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,特別適合于互聯(lián)網(wǎng)應(yīng)用程序開發(fā);而JavaScript是Netscape公司的產(chǎn)品,為了擴(kuò)展Netscape瀏覽器的功能而開發(fā)的一種可以嵌入Web頁面中運(yùn)行的基于對象和事件驅(qū)動(dòng)的解釋性語言,它的前身是LiveScript;而Java 的前身是Oak語言。
下面對兩種語言間的異同作如下比較:
1)基于對象和面向?qū)ο螅篔ava是一種真正的面向?qū)ο蟮恼Z言,即使是開發(fā)簡單的程序,必須設(shè)計(jì)對象;JavaScript是種腳本語言,它可以用來制作與網(wǎng)絡(luò)無關(guān)的,與用戶交互作用的復(fù)雜軟件。它是一種基于對象(Object-Based)和事件驅(qū)動(dòng)(Event-Driven)的編程語言。因而它本身提供了非常豐富的內(nèi)部對象供設(shè)計(jì)人員使用;
2)解釋和編譯:Java 的源代碼在執(zhí)行之前,必須經(jīng)過編譯;JavaScript 是一種解釋性編程語言,其源代碼不需經(jīng)過編譯,由瀏覽器解釋執(zhí)行;
3)強(qiáng)類型變量和類型弱變量:Java采用強(qiáng)類型變量檢查,即所有變量在編譯之前必須作聲明;JavaScript中變量聲明,采用其弱類型。即變量在使用前不需作聲明,而是解釋器在運(yùn)行時(shí)檢查其數(shù)據(jù)類型;
4)代碼格式不一樣。
補(bǔ)充:上面列出的四點(diǎn)是原來所謂的標(biāo)準(zhǔn)答案中給出的。其實(shí)Java和JavaScript最重要的區(qū)別是一個(gè)是靜態(tài)語言,一個(gè)是動(dòng)態(tài)語言。目前的編程語言的發(fā)展趨勢是函數(shù)式語言和動(dòng)態(tài)語言。在Java中類(class)是一等公民,而JavaScript中函數(shù)(function)是一等公民。對于這種問題,在面試時(shí)還是用自己的語言回答會更加靠譜。
301.什么時(shí)候用assert?
答:assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機(jī)制。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測試時(shí)開啟。為了提高性能,在軟件發(fā)布后, assertion檢查通常是關(guān)閉的。在實(shí)現(xiàn)中,斷言是一個(gè)包含布爾表達(dá)式的語句,在執(zhí)行這個(gè)語句時(shí)假定該表達(dá)式為true;如果表達(dá)式計(jì)算為false,那么系統(tǒng)會報(bào)告一個(gè)AssertionError。
斷言用于調(diào)試目的:
assert(a > 0); // throws an AssertionError if a <= 0
斷言可以有兩種形式:
assert Expression1;
assert Expression1 : Expression2 ;
Expression1 應(yīng)該總是產(chǎn)生一個(gè)布爾值。
Expression2 可以是得出一個(gè)值的任意表達(dá)式;這個(gè)值用于生成顯示更多調(diào)試信息的字符串消息。
斷言在默認(rèn)情況下是禁用的,要在編譯時(shí)啟用斷言,需使用source 1.4 標(biāo)記:
javac -source 1.4 Test.java
要在運(yùn)行時(shí)啟用斷言,可使用-enableassertions 或者-ea 標(biāo)記。
要在運(yùn)行時(shí)選擇禁用斷言,可使用-da 或者-disableassertions 標(biāo)記。
要在系統(tǒng)類中啟用斷言,可使用-esa 或者-dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言??梢栽陬A(yù)計(jì)正常情況下不會到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過,斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌?,公有方法都必須檢查其參數(shù)。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。
302.UML是什么?UML中有哪些圖?
答:UML是統(tǒng)一建模語言(Unified Modeling Language)的縮寫,它發(fā)表于1997年,綜合了當(dāng)時(shí)已經(jīng)存在的面向?qū)ο蟮慕UZ言、方法和過程,是一個(gè)支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持。使用UML可以幫助溝通與交流,輔助應(yīng)用設(shè)計(jì)和文檔的生成,還能夠闡釋系統(tǒng)的結(jié)構(gòu)和行為。UML定義了多種圖形化的符號來描述軟件系統(tǒng)部分或全部的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)結(jié)構(gòu),包括:用例圖(use case diagram)、類圖(class diagram)、時(shí)序圖(sequence diagram)、協(xié)作圖(collaboration diagram)、狀態(tài)圖(statechart diagram)、活動(dòng)圖(activity diagram)、構(gòu)件圖(component diagram)、部署圖(deployment diagram)等。在這些圖形化符號中,有三種圖最為重要,分別是:用例圖(用來捕獲需求,描述系統(tǒng)的功能,通過該圖可以迅速的了解系統(tǒng)的功能模塊及其關(guān)系)、類圖(描述類以及類與類之間的關(guān)系,通過該圖可以快速了解系統(tǒng))、時(shí)序圖(描述執(zhí)行特定任務(wù)時(shí)對象之間的交互關(guān)系以及執(zhí)行順序,通過該圖可以了解對象能接收的消息也就是說對象能夠向外界提供的服務(wù))。
用例圖:
303.XML 文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML 文檔有哪幾種方式?
答: XML文檔定義分為DTD和Schema兩種形式;其本質(zhì)區(qū)別在于Schema本身也是一個(gè)XML文件,可以被XML解析器解析。對XML的解析主要有DOM(文檔對象模型)、SAX、StAX(JDK 1.6中引入的新的解析XML的方式,Streaming API for XML) 等,其中DOM處理大型文件時(shí)其性能下降的非常厲害,這個(gè)問題是由DOM 的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM 必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對XML 的隨機(jī)訪問(典型的用空間換取時(shí)間的策略);SAX是事件驅(qū)動(dòng)型的XML解析方式,它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML 的順序訪問;如其名稱所暗示的那樣,StAX把重點(diǎn)放在流上。實(shí)際上,StAX與其他方法的區(qū)別就在于應(yīng)用程序能夠把XML作為一個(gè)事件流來處理。將XML作為一組事件來處理的想法并不新穎(事實(shí)上 SAX 已經(jīng)提出來了),但不同之處在于StAX允許應(yīng)用程序代碼把這些事件逐個(gè)拉出來,而不用提供在解析器方便時(shí)從解析器中接收事件的處理程序。
304.你在項(xiàng)目中哪些地方用到了XML?
答: XML的主要作用有兩個(gè)方面:數(shù)據(jù)交換(曾經(jīng)被稱為業(yè)界數(shù)據(jù)交換的事實(shí)標(biāo)準(zhǔn),現(xiàn)在此項(xiàng)功能在很多時(shí)候都被JSON取代)和信息配置。在做數(shù)據(jù)交換時(shí),XML將數(shù)據(jù)用標(biāo)簽組裝成起來,然后壓縮打包加密后通過網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再從XML文件中還原相關(guān)信息進(jìn)行處理。目前很多軟件都使用XML來存儲配置信息,很多項(xiàng)目中我們通常也會將作為配置的硬代碼(hard code)寫在XML文件中,Java的很多框架也是這么做的。
305.用JavaScript實(shí)現(xiàn)用正則表達(dá)式驗(yàn)證,某個(gè)字符串是合法的6位數(shù)字的郵編的函數(shù)
1
2
3
4
5
6
7
8
Function testE(ss){
var reg=/^[1-9][0-9]{5}$/;
if(req.test(ss)){
alert(“郵編OK”)
}else{
alert(“郵編格式不正確”);
}
}
306.請使用JQuery將頁面上的所有元素邊框設(shè)置為2pix寬的虛線?
$(“*”).css(“border”,”2px dashed”)
307.如何設(shè)定JQuery異步調(diào)用還是同步調(diào)用?
答案:調(diào)用jQuery中的ajax函數(shù),設(shè)置其async屬性來表明是異步還是同步,如下:
$.ajax({
async:true//表示異步,false表示同步
})
308.說出3條以上firefox和IE的瀏覽器兼容問題?
答案:兼容firefox的 outerHTML,F(xiàn)F中沒有outerHtml的方法
IE下,可以使用()或[]獲取集合類對象;Firefox下,只能使用[]獲取集合類對象.解決方法:統(tǒng)一使用[]獲取集合類對象.
IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;Firefox下,只能使用getAttribute()獲取自定義屬性.解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性
309.請用Jquery語言寫出ajax請求或者post請求代碼
1
2
3
$.post(“show”,{uname=”張三”,pwd=”123”},function(data){
alert(data)
})
310.body中的onload ()函數(shù)和jQuery中document.ready()有什么區(qū)別?
答案:ready 事件的觸發(fā),表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件)
onload 事件的觸發(fā),表示頁面包含圖片等文件在內(nèi)的所有元素都加載完成。
311.jQuery中有哪幾種類型的選擇器?
答案:
基本選擇器
層次選擇器
基本過濾選擇器
內(nèi)容過濾選擇器
可見性過濾選擇器
屬性過濾選擇器
子元素過濾選擇器
表單選擇器
表單過濾選擇器
312.EasyUI中datagrid刷新當(dāng)前數(shù)據(jù)的方法?
答案:使用reload()即可
313.分別寫出一個(gè)div居中和其中的內(nèi)容居中的css屬性設(shè)置
Div居中:
margin:auto 0px;
內(nèi)容居中:
text-align:center;
314.概述一下session與cookie的區(qū)別
答案:
存儲角度:
Session是服務(wù)器端的數(shù)據(jù)存儲技術(shù),cookie是客戶端的數(shù)據(jù)存儲技術(shù)
解決問題角度:
Session解決的是一個(gè)用戶不同請求的數(shù)據(jù)共享問題,cookie解決的是不同請求的請求數(shù)據(jù)的共享問題
生命周期角度:
Session的id是依賴于cookie來進(jìn)行存儲的,瀏覽器關(guān)閉id就會失效
Cookie可以單獨(dú)的設(shè)置其在瀏覽器的存儲時(shí)間。
315.JavaScript 中 null和 undefined 是否有區(qū)別?有哪些區(qū)別?
答案:
賦值角度說明:
null 表示此處沒有值,undefined表示此處定義了但是沒有賦值
從數(shù)據(jù)轉(zhuǎn)換角度:
Null在做數(shù)值轉(zhuǎn)換時(shí)會被轉(zhuǎn)換為0,undefined會被轉(zhuǎn)換為NaN
316.Servlet中的doPost和doGet方法有什么區(qū)別?它們在傳遞和獲取參數(shù)上有什么區(qū)別?
答案:
區(qū)別:doPost用來處理post請求,doGet用來處理get請求,獲取參數(shù):獲取的參數(shù)是相同的都是HttpServletRequest /HttpServletResponse
317.請寫出一段jQuery代碼,實(shí)現(xiàn)把當(dāng)前頁面中所有的a元索中class 屬性為“view-link”的鏈接都改為在新窗口中打開
答案:$(“a[class=view-link]”).attr(“target”,”_blank”)
318.如下JavaScript代碼的輸出為:
1
2
3
4
5
6
var scope ="global scope";
function checkscope() {
var scope ="local scope”;
return
function() {
return
scope}
}
console.log (checkscope()());
319.Jquery中’.get()’與’.eq()’的區(qū)別
eq返回的是一個(gè)jquery對象 get返回的是一個(gè)html對象
320.如何給weblogic定內(nèi)存的大?。?br>
在啟動(dòng)Weblogic的腳本中(位于所在Domian對應(yīng)服務(wù)器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調(diào)整最小內(nèi)存為32M,最大200M
321.TCP為何采用三次握手來建立連接,若釆用二次握手可以嗎,請說明理由?
三次握手是為了防止已失效的連接請求再次傳送到服務(wù)器端。 二次握手不可行,因?yàn)椋喝绻捎诰W(wǎng)絡(luò)不穩(wěn)定,雖然客戶端以前發(fā)送的連接請求以到達(dá)服務(wù)方,但服務(wù)方的同意連接的應(yīng)答未能到達(dá)客戶端。則客戶方要重新發(fā)送連接請求,若采用二次握手,服務(wù)方收到重傳的請求連接后,會以為是新的請求,就會發(fā)送同意連接報(bào)文,并新開進(jìn)程提供服務(wù),這樣會造成服務(wù)方資源的無謂浪費(fèi)
322.以下HTTP相應(yīng)狀態(tài)碼的含義描述正確的是()
A.200ok表示請求成功B.400不良請求表示服務(wù)器未發(fā)現(xiàn)與請求URL匹配內(nèi)容C.404未發(fā)現(xiàn)表示由于語法錯(cuò)誤兒導(dǎo)致服務(wù)器無法理解請求信息D.500內(nèi)部服務(wù)器錯(cuò)誤,無法處理請求
答案:D
分析:
A 200ok 表示的意思是一切正常。一般用于相應(yīng)GET和POST請求。這個(gè)狀態(tài)碼對servlet是缺省的;如果沒有調(diào)用setStatus方法的話,就會得到200。
B 400 表示指出客戶端請求中的語法錯(cuò)誤
C 404 客戶端所給的地址無法找到任何資源