2023年企業(yè)面試題總匯_第1頁
2023年企業(yè)面試題總匯_第2頁
2023年企業(yè)面試題總匯_第3頁
2023年企業(yè)面試題總匯_第4頁
2023年企業(yè)面試題總匯_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

公司面試題總匯請列舉至少3個JDK安裝目錄下的可執(zhí)行程序(如:javac),并列舉幾個常用的命令行參數(shù)javac將Java源代碼換成字節(jié)代javac<選項><源文獻>也許的選項涉及:-g生成所有調(diào)試信息-g:none生成無調(diào)試信息-g:{lines,vars,source}生成只有部分調(diào)試信息-O優(yōu)化;也許妨礙調(diào)試或者增大類文獻-nowarn生成無警告-verbose輸出關(guān)于編譯器正在做的信息-deprecation輸出使用了不鼓勵使用的API的源程序位置-classpath<途徑>指定用戶類文獻的位置-sourcepath<途徑>指定輸入源文獻的位置-bootclasspath<途徑>覆蓋自舉類文獻的位置-extdirs<目錄(多個)>覆蓋安裝的擴展類的位置-d<目錄>指定輸出類文獻的位置用法:2.jar打架包,查看架包jar{ctxu}[vfm0M][jar-文獻][manifest-文獻][-C目錄]文獻名...選項:-c創(chuàng)建新的存檔-t列出存檔內(nèi)容的列表-x展開存檔中的命名的(或所有的)文獻-u更新已存在的存檔-v生成具體輸出到標準輸出上-f指定存檔文獻名-m包含來自標明文獻的標明信息-0只存儲方式;未用ZIP壓縮格式-M不產(chǎn)生所有項的清單(manifest)文獻-i為指定的jar文獻產(chǎn)生索引信息用法:3.javadoc:根據(jù)Java源代碼及其說明語句生成的HTML文檔javadoc[options][packagenames][sourcefiles][classnames][@files]-overview<file>讀取HTML格式的概述文檔-public僅顯示public類和成員-protected顯示protected/public類和成員(缺?。?package顯示package/protected/public類和成員-private顯示所有類和成員-help顯示命令行選項-doclet<class>通過候選doclet生成輸出-docletpath<path>指定doclet類文獻的查找位置-sourcepath<pathlist>指定源文獻的查找位置-classpath<pathlist>指定用戶類文獻的查找位置用法:4.javah:產(chǎn)生可以調(diào)用Java過程的C過程,或建立能被Java程序調(diào)用的C過程的頭文獻javah[options]<classes>其中[options]涉及:-help打印該幫助信息-classpath<path>類的加載途徑-bootclasspath<path>自舉類的加載途徑-d<dir>輸出目錄-o<file>輸出文獻(僅能使用-d或-o之一)-jni生成JNI風格的頭文獻(缺?。?old生成JDK1.0風格的頭文獻-stubs生成stubs文獻-version打印版本信息-verbose輸出有關(guān)本命令所做工作的信息-force始終寫輸出文獻用法:請分析命題:“Java采用自動垃圾回收技術(shù)(GC),因此不會出現(xiàn)內(nèi)存泄露”對象的建立和放置都是在內(nèi)存堆棧上面進行的。程序或者其他的對象可以鎖定一塊堆棧地址來進行其他對象的引用。當一個對象沒有任何引用的時候,Java的自動垃圾回收機制就發(fā)揮作用,自動刪除這個對象所占用的空間,釋放內(nèi)存以避免內(nèi)存泄漏。但是內(nèi)存泄漏并不是就此而完全避免了,當程序員疏忽大意地忘掉解除一個對象不應當有的引用的時候,內(nèi)存泄漏仍然不可避免,但是發(fā)生的幾率要比不啟用垃圾回收機制的C++程序少很多。但是總體來講,自動垃圾回收機制要安全和簡樸許多。請簡樸描述單子模式(單例模式)的各種不同實現(xiàn)方式,及各自優(yōu)缺陷。請列舉至少2中其他的設(shè)計模式及應用場景/*單例設(shè)計模式重要有2種實現(xiàn)方式:懶漢式、餓漢式。

他們分別有如下實現(xiàn):

餓漢式:

//餓漢式單例類.在類初始化時,已經(jīng)自行實例化

*/

public

class

Singleton1

{

//私有的默認構(gòu)造子

private

Singleton1()

{}

//已經(jīng)自行實例化

private

static

final

Singleton1

single

=

new

Singleton1();

//靜態(tài)工廠方法

public

static

Singleton1

getInstance()

{

return

single;

}

}

懶漢式:

//懶漢式單例類.在第一次調(diào)用的時候?qū)嵗?/p>

public

class

Singleton2

{

//私有的默認構(gòu)造子

private

Singleton2()

{}

//注意,這里沒有final

private

static

Singleton2

single=null;

//靜態(tài)工廠方法

public

synchronized

static

Singleton2

getInstance()

{

if

(single

==

null)

{

single

=

new

Singleton2();

}

return

single;

}

}

/*其他設(shè)計模式:

1.適配器模式

應用場景:比如說在朋友聚會上碰到一個德國人sarsh,可以我不會德語,她不會中文,我只好求助于我的朋友mary了,他作為我和sarsh之間的adapt,讓我和sarsh可以交流了。

2.裝飾模式

應用場景:想要自己做禮物送給朋友,拿出去年在華山頂上的照片,在背面寫上“最佳的禮物”再到街上禮品店買個相框,在找隔壁學美術(shù)的朋友設(shè)計一個美麗的盒子裝起來,我們都是Decorator。*/

4、輸出結(jié)果public

static

void

main(String[]

args)throws

Exception{

String

str

=

"中國";

System.out.println(str.getBytes("UTF-8").length);

System.out.println(str.getBytes("GBK").length);

System.out.println(str.getBytes("ISO-8859-1").length);

System.out.println(new

String(str.getBytes("ISO-8859-1"),("ISO-8859-1"));

System.out.println(new

String(str.getBytes("UTF-8"),("UTF-8"));

System.out.println(new

String(str.getBytes("GBK"),("GBK"));

}

輸出結(jié)果:642??中國中國使用二分查找法查找字符串數(shù)組{"a","b","c","d","e","f","g","h"}中"g"元素public

class

Query4Half

{

static

int

bsearch(

String[]

a,

String

v

)

{

int

l,

r;

l

=

0;

r

=

a.length-1;

while

(

l

<=

r

)

{

int

m

=

(l+r)/2;

if

(

a[m].compareTo(v)==0

)

return

m;

else

if

(

a[m].compareTo(v)>0

)

r

=

m-1;

else

if

(

a[m].compareTo(v)<0

)

l

=

m+1;

}

return

-1;

}

public

static

void

main(String[]

args)

{

String

str[]

=

{"a","b","c","d","e","f","g","h"};

int

bsearch

=

bsearch(str,

"g");

System.out.println(bsearch);

}

請具體闡述Spring事務(wù)機制的實現(xiàn)原理?Spring的事務(wù)管理機制實現(xiàn)的原理,就是通過AOP,使用動態(tài)代理對所有需要事務(wù)管理的Bean進行加載,并根據(jù)配置在invoke方法中對當前調(diào)用的方法名進行鑒定,并在method.invoke方法前后為其加上合適的事務(wù)管理代碼,這樣就實現(xiàn)了Spring式的事務(wù)管理。Spring聲明式事務(wù)的優(yōu)點執(zhí)行情況提交或者回滾事務(wù)。聲明式事務(wù)最大的優(yōu)點就是不需要通過編程的方式管理事務(wù),這樣就不需要在業(yè)務(wù)邏輯代碼中摻雜事務(wù)管理的代碼,只需在配置文獻中做相關(guān)的事務(wù)規(guī)則聲明(或通過等價的基于標注的方式),便可以將事務(wù)規(guī)則應用到業(yè)務(wù)邏輯中。由于事務(wù)管理自身就是一個典型的橫切邏輯,正是AOP的用武之地。Spring開發(fā)團隊也意識到了這一點,為聲明式事務(wù)提供了簡樸而強大的支持。聲明式事務(wù)管理曾經(jīng)是EJB引認為傲的一個亮點,如今Spring讓POJO在事務(wù)管理方面也擁有了和EJB同樣的待遇,讓開發(fā)人員在EJB容器之外也用上了強大的聲明式事務(wù)管理功能,這重要得益于Spring依賴注入容器和SpringAOP的支持。依賴注入容器為聲明式事務(wù)管理提供了基礎(chǔ)設(shè)施,使得Bean對于Spring框架而言是可管理的;而SpringAOP則是聲明式事務(wù)管理的直接實現(xiàn)者,這一點通過清單8可以看出來。通常情況下,筆者強烈建議在開發(fā)中使用聲明式事務(wù),不僅由于其簡樸,更重要是由于這樣使得純業(yè)務(wù)代碼不被污染,極大方便后期的代碼維護。和編程式事務(wù)相比,聲明式事務(wù)唯一局限性地方是,后者的最細粒度只能作用到方法級別,無法做到像編程式事務(wù)那樣可以作用到代碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務(wù)管理的代碼塊獨立為方法等等。Struts采用了什么設(shè)計模式?并具體說明各個組成部分?struts采用了MVC設(shè)計模式,嚴格按照mvc設(shè)計模式進行設(shè)計,實現(xiàn)解耦和,struts2通過前端控制器來轉(zhuǎn)發(fā)請求,控制請求流向(也就是我們的控制層)。然后Struts通過模型層去解決數(shù)據(jù),把解決結(jié)果再交給控制層進行視圖解析。這樣一個過程嚴格按照MVC設(shè)計模式。請簡要說明WebService的組成部分?以及各個部分使用的協(xié)議?WebService框架核心是基于簡樸對象訪問協(xié)議(SimpleObjectAccessProtocol,SOAP)、Web服務(wù)描述語言(WebServiceDescriptionLanguage,WSDL)以及通用描述、發(fā)現(xiàn)和集成(UniversalDescriptionDiscoveryandIntegration,UDDI)。web服務(wù)中三種發(fā)送接受協(xié)議SOAP/HTTPGET/HTTPPOST在web服務(wù)中,有三種可供選擇的發(fā)送和接受信息的協(xié)議:SOAP,HTTPGET,HTTPPOST,但是SOAP支持的數(shù)據(jù)類型更為廣泛SOAP=RPC+HTTP+XMLSOAP簡樸的理解,就是這樣的一個開放協(xié)議SOAP=RPC+HTTP+XML:采用HTTP作為底層通訊協(xié)議;RPC作為一致性的調(diào)用途徑,XML作為數(shù)據(jù)傳送的格式,允許服務(wù)提供者和服務(wù)客戶通過防火墻在INTERNET進行通訊交互。10、請用Java代碼實現(xiàn)一個鏈表結(jié)構(gòu)public

class

MyList<AnyType>

{

private

class

Node<AnyType>{

public

Node<AnyType>

pre;

public

Node<AnyType>

next;

public

AnyType

data;

public

Node(AnyType

d,

Node<AnyType>p,

Node<AnyType>

n){}

public

Node(){}

}

private

int

theSize;

private

Node<AnyType>

Header;

private

Node<AnyType>

Tail;

public

MyList(){}

public

void

add(AnyType

item){}

public

boolean

isEmpty(){}

public

int

size(){}

public

AnyType

get(

int

idx){}

public

void

print(){}

}

/*Node<AnyType>類定義了雙向鏈表中節(jié)點的結(jié)構(gòu),它是一個私有類,而其屬性和構(gòu)造函數(shù)都是公有的,這樣,其父類可以直接訪問其屬性,而外部類主線不知道Node類的存在。Data是節(jié)點中的數(shù)據(jù)與,pre指向前一個Node節(jié)點,next指向后一個Node節(jié)點。其構(gòu)造函數(shù)的實現(xiàn)如下,不解釋:

View

Code*/

public

Node(AnyType

d,

Node<AnyType>p,

Node<AnyType>

n){

this.data

=

d;

this.pre

=

p;

this.next

=

n;

}

public

Node(){

this.data

=

null;

this.pre

=

null;

this.next

=

null;

}

/*下面我們看一下鏈表的構(gòu)造函數(shù)實現(xiàn):

View

Code*/

public

MyList(){

theSize

=

0;

Header

=

new

Node<AnyType>(null,null,null);

Tail

=

new

Node<AnyType>(null,Header,null);

Header.next

=

Tail;

}

/*我們構(gòu)造了一個帶有頭、尾節(jié)點的雙向鏈表,頭節(jié)點的Next指向尾節(jié)點,為節(jié)點的pre指向頭節(jié)點。鏈表長度起始為0。

繼續(xù)貼上鏈表類其它方法的實現(xiàn),不解釋了,應當比較清楚:*/

//View

Code

public

void

add(AnyType

item){

Node<AnyType>

aNode

=

new

Node<AnyType>(item,null,null);

Tail.pre.next

=

aNode;

aNode.pre

=

Tail.pre;

aNode.next

=

Tail;

Tail.pre

=

aNode;

theSize++;

}

public

boolean

isEmpty(){

return

(

theSize

==

0);

}

public

int

size(){

return

theSize;

}

public

AnyType

get(

int

idx){

if(idx

>

theSize-1

||

idx

<

0)

throw

new

IndexOutOfBoundsException();

Node<AnyType>

current

=

new

Node<AnyType>(null,Header,null);

for(int

i

=

0;

i<idx;

i++)

current

=

current.next;

return

current.data;

}

public

void

print(){

Node<AnyType>

current

=

Header.next;

while(current.next

!=

null){

//假如AnyType是你自己定義

//的數(shù)據(jù)類型,那么請務(wù)必提供

//一個toString方法,要么就不

//要在鏈表里實現(xiàn)print方法。

System.out.println(current.data.toString());

current

=

current.next;

}

}

11、Object類(或子類)的finalize()方法在什么情況下被調(diào)用?當某個對象被系統(tǒng)收集為無用信息的時候,finalize()將被自動調(diào)用,但是jvm不保證finalize()一定被調(diào)用,也就是說,finalize()的調(diào)用是不擬定的...12、Servlet中forward()與redirect()的區(qū)別是什么?redirect()會丟失request的所有信息它屬于頁面級的重定向,僅僅讓你的瀏覽器重新訪問一個新的url,作為瀏覽者,能很明顯的看到瀏覽器url地址的變化,這和點擊了一個普通的超鏈接的后果是同樣的。而RequestDispatcher的forward()方法,是轉(zhuǎn)發(fā),需要request和response最為參數(shù),就是將用戶的請求,連同請求信息等內(nèi)容,一起轉(zhuǎn)發(fā)到服務(wù)器的此外一個servlet去解決,它不會丟失request信息。這一過程是服務(wù)器內(nèi)部完畢的,作為訪問者,是感覺不到了,或者說是透明的,因此訪客瀏覽器的url是不會發(fā)生變化的。forward是轉(zhuǎn)發(fā),redirect是跳轉(zhuǎn)。相同點都是為了兩個組件之間的互相調(diào)用。forward的運營原理是服務(wù)器端內(nèi)部的調(diào)用,所以它不需要通過瀏覽器來請求,所url地址不會改變,request的作用范圍也沒有中斷過,它的作用域仍然有效。而redirect是重定向,是服務(wù)器發(fā)送消息告訴瀏覽器,讓瀏覽器重新向新的地址請求,所以,url地址是會改變的,由于重新請求了,因而request也中斷了,重新請求了,它的作用范圍也失效了,放在request里面的信息也隨之而清空了。13、請列出你所了解的若干個不同類型的runtimeexceptionNullPointerException-空指針引用異常ClassCastException-類型強制轉(zhuǎn)換異常。IllegalArgumentException-傳遞非法參數(shù)異常。ArithmeticException-算術(shù)運算異常ArrayStoreException-向數(shù)組中存放與聲明類型不兼容對象異常IndexOutOfBoundsException-下標越界異常NegativeArraySizeException-創(chuàng)建一個大小為負數(shù)的數(shù)組錯誤異常NumberFormatException-數(shù)字格式異常SecurityException-安全異常UnsupportedOperationException-不支持的操作異常14、請說明數(shù)據(jù)庫主鍵、外鍵的作用。以及獨立主鍵的好處及壞處SQL的主鍵和外鍵的作用:外鍵取值規(guī)則:空值或參照的主鍵值。(1)插入非空值時,假如主鍵表中沒有這個值,則不能插入。(2)更新時,不能改為主鍵表中沒有的值。(3)刪除主鍵表記錄時,你可以在建外鍵時選定外鍵記錄一起級聯(lián)刪除還是拒絕刪除。(4)更新主鍵記錄時,同樣有級聯(lián)更新和拒絕執(zhí)行的選擇。簡而言之,SQL的主鍵和外鍵就是起約束作用。15、簡述什么是事物?事物存在哪些屬性?數(shù)據(jù)庫事務(wù)是指作為單個邏輯工作單元執(zhí)行的一系列操作。屬性:ACID1、一致性:將事務(wù)中所做的操作捆綁成一個原子單元,即對于事務(wù)所進行的數(shù)據(jù)修改等操作,要么所有執(zhí)行,要么所有不執(zhí)行。2、原子性:事務(wù)在完畢時,必須使所有的數(shù)據(jù)都保持一致狀態(tài),并且在相關(guān)數(shù)據(jù)中,所有規(guī)則都必須應用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。事務(wù)結(jié)束時,所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)都應當是對的的。3、隔離性:由并發(fā)事務(wù)所做的修改必須與任何其他事務(wù)所做的修改相隔離。事務(wù)查看數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是被另一并發(fā)事務(wù)修改之前的狀態(tài),要么是被另一并發(fā)事務(wù)修改之后的狀態(tài),即事務(wù)不會查看由另一個并發(fā)事務(wù)正在修改的數(shù)據(jù)。這種隔離方式也叫可串行性。4、持久性:事務(wù)完畢之后,它對系統(tǒng)的影響是永久的,即使出現(xiàn)系統(tǒng)故障也是如此。16、如何寫出高性能的SQL語句?(1)整合簡樸,無關(guān)聯(lián)數(shù)據(jù)庫訪問:假如你有幾個簡樸數(shù)據(jù)庫查詢語句,你可以把它們整合到個查詢中(即使它們的間沒有關(guān)系)(2)刪除反復記錄:最高效刪除反復記錄思緒方法(使用了ROWID)例子:DELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);(3)用TRUNCATE替代DELETE:當刪除表中記錄時,在通常情況下,回滾段(rollbacksegments)用來存放可以被恢復信息.假如你沒有COMMIT事務(wù),ORACLE會將數(shù)據(jù)恢復到刪除的前狀態(tài)(準確地說是恢復到執(zhí)行刪除命令的前狀況)而當運用TRUNCATE時,回滾段不再存放任何可被恢復信息.當命令運營后,數(shù)據(jù)不能被恢復.因此很少資源被,執(zhí)行時間也會很短.(譯者按:TRUNCATE只在刪除全表合用,TRUNCATE是DDL不是DML)(4)選擇最有效率表名順序(只在基于規(guī)則優(yōu)化器中有效):ORACLE解析器按照從右到左順序解決FROM子句中表名FROM子句中寫在最后表(基礎(chǔ)表drivingtable)將被最先解決在FROM子句中包含多個表情況下,你必須選擇記錄條數(shù)最少表作為基礎(chǔ)表假如有3個以上表連接查詢,那就需要選擇交叉表(ersectiontable)作為基礎(chǔ)表,交叉表是指那個被其它表所引用表.(5)WHERE子句中連接順序.:ORACLE采用自下而上順序解析WHERE子句,根據(jù)這個原理,表的間連接必須寫在其它WHERE條件的前,那些可以過濾掉最大數(shù)量記錄條件必須寫在WHERE子句末尾.(6)SELECT子句中避免使用'*':ORACLE在解析過程中,會將'*'依次轉(zhuǎn)換成所有列名,這個工作是通過查詢數(shù)據(jù)字典完畢,這意味著將花費更多時間(7)減少訪問數(shù)據(jù)庫次數(shù):ORACLE在內(nèi)部執(zhí)行了許多工作:解析SQL語句,估算索引運用率,綁定變量,讀數(shù)據(jù)塊等;(8)在SQL*Plus,SQL*Forms和Pro*C中重新設(shè)立ARRAYSIZE參數(shù),可以增長每次數(shù)據(jù)庫訪問檢索數(shù)據(jù)量,建議值為200(9)使用DECODE來減少解決時間:使用DECODE可以避免反復掃瞄相同記錄或反復連接相同表.(11)用Where子句替換HAVING子句;17、列舉JSP的內(nèi)置對象,同一應用中頁面有哪些方法?九大內(nèi)置對象:1.輸出輸入對象:request對象、response對象、out對象2.通信控制對象:pageContext對象、session對象、application對象3.Servlet對象:page對象、config對象4.錯誤解決對象:exception對象①、直接在URL請求后添加如:<ahref="thexuan.jsp?action=transparams&detail=directe">直接傳遞參數(shù)</a>特別的在使用response.sendRedirect做頁面轉(zhuǎn)向的時候,也可以用如下代碼:response.sendRedirect("thexuan.jsp?action=transparams&detail=directe"),可用request.getParameter(name)取得參數(shù) ②、jsp:param它可以實現(xiàn)主頁面向包含頁面?zhèn)鬟f參數(shù),如下:<

jsp:include

page="Relative

URL">

<

jsp:param

name="param

name"

value="paramvalue"

/>

<

/jsp:include>

還可以實現(xiàn)在使用jsp:forward動作做頁面跳轉(zhuǎn)時傳遞參數(shù),如下:<

jsp:forward

page="Relative

URL">

<

jsp:param

name="paramname"

value="paramvalue"

/>

<

/jsp:forward>

通過這種方式和一般的表單參數(shù)同樣的,也可以通過request.getParameter(name)取得參數(shù)3、設(shè)立session和request通過顯示的把參數(shù)放置到session和request中,以達成傳遞參數(shù)的目的session.setAttribute(name,value);request.setAttribute(name,value)取參數(shù):value=(valueclassName)session.getAttribute(name);value=(valueclassName)request.getAttribute(name);大家肯定已經(jīng)注意到了,在取參數(shù)的時候,做了類型轉(zhuǎn)換,這是由于放置在session和request中的對象的屬性被看作java.lang.Object類型的了,假如不轉(zhuǎn)換,在將直付給value時會報classcastexception異常。18、JSP如何獲取HTMLFORM中的數(shù)據(jù)?html頁面的表單<form

action="myjsp.jsp"

method="post">

你要輸入的數(shù)據(jù):<input

type="text"

name="data

">

</form>

在表單中,action動作和method合起來表達把數(shù)據(jù)交給mujsp.jsp頁面去解決,在jsp頁面呢,用<%

request.getParmerter("data");%>獲取html頁面?zhèn)鬟f過來的數(shù)據(jù),要注意的是,有時候連個頁面之間的傳遞會出現(xiàn)中文亂碼現(xiàn)象,解決亂碼的做法是:在jsp頁面加上<%

request.setCharacterEncoding("GB2312");

request.setCharacterEncoding("GB2312");

%>

這樣就不用緊張編碼問題了另一種:是form表單提交方式獲取表單數(shù)據(jù)。19、JSP中redirect和forward的區(qū)別是什么?(類似12)forward是使用同一個request,也就是說用forward傳遞后可以在頁面中獲取request中的變量或?qū)傩?。redirect是新建一個request用新建的request傳遞。比如有三個jsp文獻,第一個里面有<inputname="name">提交到第二個頁面進行解決,若想在第三個頁面中獲取name的值就要用forward。20、JSP中對象的傳遞有哪些方法?request,session,application,cookie區(qū)別:page的生命周期最短,依次是request,session,application.他們保存在服務(wù)器端.cookie是保存在客戶端的,用來解決HTTP無狀態(tài)問題.范圍不同,最小的是page然后request,session,application范圍依次增大.21、Http協(xié)議中返回狀態(tài)200、404、302、301、500、502各式什么含義?200(成功)服務(wù)器已成功解決了請求。通常,這表達服務(wù)器提供了請求的網(wǎng)頁。301(永久移動)請求的網(wǎng)頁已永久移動到新位置。服務(wù)器返回此響應(對GET或HEAD請求的響應)時,會自動將請求者轉(zhuǎn)到新位置。302(臨時移動)服務(wù)器目前從不同位置的網(wǎng)頁響應請求,但請求者應繼續(xù)使用原有位置來進行以后的請求。404(未找到)服務(wù)器找不到請求的網(wǎng)頁。500(服務(wù)器內(nèi)部錯誤)服務(wù)器碰到錯誤,無法完畢請求。502(錯誤網(wǎng)關(guān))服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應。22、描述Cookie和Session的作用,區(qū)別和各自的應用范圍,Session工作原理實現(xiàn)sessionid的保存和傳輸。是cookie,將http的請求變得有狀態(tài)。session的實現(xiàn)是web服務(wù)器的事情,但是很顯然默認是運用會話cookie,也就是存放在瀏覽器內(nèi)存里的那種cookie來實現(xiàn)的,在cookie里只是存放了SessionID,然后在服務(wù)器上建立了一張表,相應客戶端的SessionID。這張表是存放在服務(wù)器上的進程中的,也就是服務(wù)器的內(nèi)存里,也就是Application里。當客戶端請求服務(wù)器的時候,假如服務(wù)器發(fā)現(xiàn)這是一個新的請求,就會分派給他一個SessionID,也就是在瀏覽器寫入一個sessionID的cookie。你可以試一下,在你請求過一次服務(wù)器之后,在服務(wù)器遍歷客戶端所有的cookie,就會發(fā)現(xiàn)這個叫做SessionID的cookie。但是,這只是session實現(xiàn)sessionid狀態(tài)記錄的一種方法,假如客戶端瀏覽器禁用了cookie,很多網(wǎng)站還是可以正常登錄,還是可以對的辨認瀏覽器的身份,這就是通過url重寫的方式,每次交互都攜帶sessionid的信息。尚有一種方式,就是表單重寫,有些服務(wù)器會在表單中增長隱藏域,來回傳遞sessionid。所以在了解了這個session的原理之后我們可以自己來造一個自己的session,可以使用cookie,也可以使用url重寫方式,也可以使用表單方式。session的結(jié)束問題尚有知道了session的原理就會明白一個session會話如何結(jié)束,除非服務(wù)器端可以清除一個session會話,客戶端是沒有能力清除session的,關(guān)閉瀏覽器的時候并不可以結(jié)束當前的會話(忽略瀏覽器關(guān)閉事件),在不依賴于cookie的session中最明顯,你可以記下你的sessionID那串字符串,關(guān)閉瀏覽器,打開,把sessionID自己替換,你就可以恢復剛才的會話了。所謂的20分鐘session超時,是服務(wù)器每隔20分鐘對于不活動的session清除而已。尚有要指出的是依賴于cookie的session是存放在瀏覽器內(nèi)存中的,所以一個瀏覽器的進程就會產(chǎn)生一個session,可以通過任務(wù)管理器查看進程,對于IE來說,只有雙擊桌面上的瀏覽器快捷方式才干新啟動一個進程的,當然其他類似啟動iexplorer.exe的行為也可以到這里你會發(fā)現(xiàn)在依賴于cookie的session中,是需要瀏覽器的支持的!對于js的ajax請求,確切的說是xmlhttp這個組件發(fā)送的http請求,雖然是你使用js的代碼自己制造的,但是仍然是借助于瀏覽器發(fā)送的,所以可以獲得session。23、數(shù)組String[]str和Stringstr分別怎么獲取長度?size和length()24、請用JAVA實現(xiàn)快速排序算法public

class

QuickSort

{

public

static

int

Partition(int

a[],int

p,int

r){

int

x=a[r-1];

int

i=p-1;

int

temp;

for(int

j=p;j<=r-1;j++){

if(a[j-1]<=x){

//

swap(a[j-1],a[i-1]);

i++;

temp=a[j-1];

a[j-1]=a[i-1];

a[i-1]=temp;

}

}

//swap(a[r-1,a[i+1-1]);

temp=a[r-1];

a[r-1]=a[i+1-1];

a[i+1-1]=temp;

return

i+1;

}

public

static

void

QuickSort(int

a[],int

p,int

r){

if(p<r){

int

q=Partition(a,p,r);

QuickSort(a,p,q-1);

QuickSort(a,q+1,r);

}

}

public

static

void

main(String[]

args){

int

a[]={23,53,77,36,84,76,93,13,45,23};

QuickSort(a,1,10);

for

(int

i=1;i<=10;i++)

System.out.println(a[i-1]);

}

}

25、請簡樸闡述一下Socket通訊原理,以及Socket基于TCP和UDP協(xié)議實現(xiàn)的優(yōu)缺陷Socket通信的原理大體分為以下幾個環(huán)節(jié)。服務(wù)器端的環(huán)節(jié)如下。(1)建立服務(wù)器端的Socket,開始偵聽整個網(wǎng)絡(luò)中的連接請求。(2)當檢測到來自客戶端的連接請求時,向客戶端發(fā)送收到連接請求的信息,并建立與客戶端之間的連接。(3)當完畢通信后,服務(wù)器關(guān)閉與客戶端的Socket連接??蛻舳说沫h(huán)節(jié)如下。(1)建立客戶端的Socket,擬定要連接的服務(wù)器的主機名和端口。(2)發(fā)送連接請求到服務(wù)器,并等待服務(wù)器的回饋信息。(3)連接成功后,與服務(wù)器進行數(shù)據(jù)的交互。(4)數(shù)據(jù)解決完畢后,關(guān)閉自身的Socket連接。TCP:面向連接、傳輸可靠(保證數(shù)據(jù)對的性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)、速度慢,建立連接需要開銷較多(時間,系統(tǒng)資源)。UDP:面向非連接、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快。26、對象封裝的原則是什么?封裝原則:隱藏對象的屬性和實現(xiàn)細節(jié),僅對外公開接口,并且控制訪問級別在OOP(面向?qū)ο螅┚幊讨?,用類來實現(xiàn)上面的規(guī)定。用類實現(xiàn)封裝,用封裝來實現(xiàn)高內(nèi)聚,低耦合高聚合是說一個對象的功能都在內(nèi)部搞定,緊緊地結(jié)合在一起低耦合是說對象之間的依賴要松散,不要牽一發(fā)動全身只有這樣,當系統(tǒng)規(guī)模擴大時,才干比較方便27、請列舉幾種SQL優(yōu)化的方法?1:mysql所在服務(wù)器內(nèi)核優(yōu)化;此優(yōu)化可由系統(tǒng)運維人員完畢2:mysql配置參數(shù)優(yōu)化(f);此優(yōu)化需進行壓力測試來進行參數(shù)調(diào)整3:sql語句及表優(yōu)化 ①、當只要一行數(shù)據(jù)時使用LIMIT1

②、為搜索字段建索引

③、在Join表的時候使用相稱類型的列,并將其索引

④、千萬不要ORDERBYRAND()

⑤、避免SELECT*

⑥、永遠為每張表設(shè)立一個ID 使用ENUM而不是VARCHAR

⑧、盡也許的使用NOTNULL ⑨、固定長度的表會更快

垂直分割

拆分大的DELETE或INSERT語句 越小的列會越快

28、請列舉幾種反復提交的方式?F5反復提交、瀏覽器前進和后退按鈕反復提交、使用frameset框架右鍵的此框架重新載入:1、使用遮罩,讓用戶提交完畢之前等待。提交成功后執(zhí)行頁面重定向(redirect)。轉(zhuǎn)到提交成功信息頁面;29、描述在MVC架構(gòu)模式下,表單從頁面提交內(nèi)容,最后到內(nèi)容保存到數(shù)據(jù)持久層中間要做哪些環(huán)節(jié)解決?30、序列化的作用,應用場景所謂java對象序列化就是將對象的狀態(tài)轉(zhuǎn)換成字節(jié)流,以后可以通過這些值再生成相同狀態(tài)的對象!對象序列化是對象持久化的一種實現(xiàn)方法,它是將一個對象的屬性和方法轉(zhuǎn)化為一種序列化的格式以用于存儲和傳輸,反序列化就是根據(jù)這些保存的信息重建對象的過程。運用場景1:Java的JavaBeans:Bean的狀態(tài)信息通常是在設(shè)計時配置的,Bean的狀態(tài)信息必須被存起來,以便當程序運營時能恢復這些狀態(tài)信息,這需要將對象的狀態(tài)保存到文獻中,而后可以通過讀入對象狀態(tài)來重新構(gòu)造對象,恢復程序狀態(tài)。例如Java.io包有兩個序列化對象的類。ObjectOutputStream負責將對象寫入字節(jié)流,ObjectInputStream從字節(jié)流重構(gòu)對象。運用場景2:activiti工作流設(shè)立流程變量31、一個表中的ID有多個記錄,把所有這個id的記錄查出,并顯示共有多少條記錄數(shù)(SQL實現(xiàn))SELECT

id,COUNT(id)

FROM

`table`

GROUP

BY

id

HAVING

COUNT(id)

>

1

SELECT

*

FROM

(SELECT

id,COUNT(id)

sumid

FROM

`table`

GROUP

BY

id)

t

WHERE

t.sumid

>

1

32、查詢表A中存在ID反復三次以上的記錄。(使用SQL實現(xiàn))SELECT

id,COUNT(id)

FROM

`table`

GROUP

BY

id

HAVING

COUNT(id)

>

3

SELECT

*

FROM

(SELECT

id,COUNT(id)

sumid

FROM

`table`

GROUP

BY

id)

t

WHERE

t.sumid

>

3

33、Collection和Collections有什么區(qū)別?Collection是集合類的上級接口,繼承與他的接口重要有Set和List.Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作。34、Strings=newString("abc");請問有幾個String對象?分別是兩個或一個,“xyz”相應一個對象,這個對象放在字符串常量緩沖區(qū),常量“xyz”不管出現(xiàn)多少遍,都是緩沖區(qū)中的那一個。假如以前就用過‘xyz’直接從緩沖區(qū)拿。假如沒有就在字符串緩沖區(qū)創(chuàng)建這個“xyz”字符串對象,NewString每寫一遍,就創(chuàng)建一個新的對象。35、XML是什么?針對它常用的工具包是什么?XML全稱為ExtensibleMarkupLanguage,意思是可擴展的標記語言。XML語法上和HTML比較相似,但HTML中的元素是固定的,而XML的標簽是可以由用戶自定義的,常用在保存關(guān)系型數(shù)據(jù)和配置文獻。針對它常用的工具包是DOM4J36、Hibernate的特點及其工作原理,為什么大多數(shù)公司都使用Hibernate?Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,此外hibernate還提供一級緩存和二級緩存。可以進行簡樸的數(shù)據(jù)庫優(yōu)化和簡潔的HQL編寫。使用hibernate需要根據(jù)項目來擬定。不能根據(jù)公司擬定。Hibernate缺陷(1)Hibernate在批量數(shù)據(jù)解決時有弱勢(2)針對單一對象簡樸的增刪查改,適合于Hibernate,而對于批量的修改,刪除,不適合用Hibernate,這也是OR框架的弱點;要使用數(shù)據(jù)庫的特定優(yōu)化機制的時候,不適合用Hibernate。37、Spring的工作流程、以及核心機制?核心機制:IOC-控制翻轉(zhuǎn)。對象的創(chuàng)建交由spring容器創(chuàng)建。常用方式有構(gòu)造器創(chuàng)建、靜態(tài)工廠、實例工廠。底層使用反射技術(shù)實現(xiàn)。DI-依賴注入。對象的依賴屬性由容器注入。一般使用set方法注入38、Spring中的事物隔離級別有哪些?事物隔離和傳播的特點ISOLATION_DEFAULT默認級別,根據(jù)數(shù)據(jù)庫選擇相應隔離級別ISOLATION_READ_UNCOMMITTED可以讀取未提交數(shù)據(jù)ISOLATION_READ_COMMITTED只能讀取已提交數(shù)據(jù),解決臟讀問題(Oracle默認級別)ISOLATION_REPEATABLE_READ是否讀取其他事務(wù)提交修改后的數(shù)據(jù),解決不可反復讀問題(MySQL默認級別)ISOLATION_SERIALIZABLE是否讀取其他事務(wù)提交添加后的數(shù)據(jù),解決幻影讀問題39、Flex的優(yōu)劣點及工作流程40、不同語言開發(fā)的程序之間如何進行通信?Webservice41、try{}里有一個return語句,那么緊跟在這個try后的finally{}里德code會不會被執(zhí)行?什么時候被執(zhí)行,在return之前還是后?public

class

Test

{

public

static

void

main(String[]

args)

{

System.out.println(new

Test().test());;

}

static

int

test()

{

int

x

=

1;

try

{

return

x;

}

finally

{

++x;

}

}

}

/*執(zhí)行結(jié)果

*/

1

/*運營結(jié)果是1,為什么呢?主函數(shù)調(diào)用子函數(shù)并得到結(jié)果的過程,好比主函數(shù)準備一個空罐子,當子函數(shù)要返回結(jié)果時,先把結(jié)果放在罐子里,然后再將程序邏輯返回到主函數(shù)。所謂返回,就是子函數(shù)說,我不運營了,你主函數(shù)繼續(xù)運營吧,這沒什么結(jié)果可言,結(jié)果是在說這話之前放進罐子里的。

*/

42、在web開發(fā)中,將GBK字符串,以utf-8的格式進行轉(zhuǎn)換輸出newString("string".getBytes("GBK"),"UTF-8");43、有一個長字符串,它的內(nèi)部包含多個子字符串、子字符串之間用空格隔離,給出算法:如何去掉里面反復的字符串。44、java遞歸調(diào)用輸出一個目錄下的所有子目錄及文獻名稱public

void

fun(File

file){

File[]

files

=

file.listFiles();

for(File

_file

:

files){

if(_file.isDirectory()){

fun2(_file);

}else{

System.out.println(_file);

}

}

}

45、一個月的圖片的網(wǎng)站,用戶每檢索一次、閱讀一張、下載一張圖片就會扣除相應的簽署,假如讓你來設(shè)計計費模板、采用何種方式最能節(jié)省各方面的資源,談?wù)勏敕ǎ?6、java中可見的訪問修飾符的含義public:訪問不受限制。protected:訪問僅限于包含類或從包含類派生的類型。只有包含該成員的類以及繼承的類可以存取.Internal:訪問僅限于當前程序集。只有當前工程可以存取.protectedinternal:訪問僅限于當前程序集或從包含類派生的類型。private:訪問僅限于包含類型。只有包含該成員的類可以存取.47、java用什么來判斷對象是否是屬于某個類或借口的事例?Instanceof48、Java中,int和Integer有什么區(qū)別int是java提供的8種原始數(shù)據(jù)類型之一。Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類。int的默認值為0,而Integer的默認值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無法表達出未賦值的情況,例如,要想表達出沒有參與考試和考試成績?yōu)?的區(qū)別,則只能使用Integer。在JSP開發(fā)中,Integer的默認為null,所以用el表達式在文本框中顯示時,值為空白字符串,而int默認的默認值為0,所以用el表達式在文本框中顯示時,結(jié)果為0,所以,int不適合作為web層的表單數(shù)據(jù)的類型。在Hibernate中,假如將OID定義為Integer類型,那么Hibernate就可以根據(jù)其值是否為null而判斷一個對象是否是臨時的,假如將OID定義為了int類型,還需要在hbm映射文獻中設(shè)立其unsaved-value屬性為0。此外,Integer提供了多個與整數(shù)相關(guān)的操作方法,例如,將一個字符串轉(zhuǎn)換成整數(shù),Integer中還定義了表達整數(shù)的最大值和最小值的常量49、Java中,HashMap和Hashtable的區(qū)別?HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。由于contains方法容易讓人引起誤解。Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Mapinterface的一個實現(xiàn)。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap就必須為之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大約同樣,所以性能不會有很大的差異。就HashMap與HashTable重要從三方面來說。1.歷史因素:Hashtable是基于陳舊的Dictionary類的,HashMap是Java1.2引進的Map接口的一個實現(xiàn)2.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的3.值:只有HashMap可以讓你將空值作為一個表的條目的key或value50、51Java中,String和StringBuffer的區(qū)別?1,String:字符串常量,字符串長度不可變!!!2,StringBuffer:字符串變量(Synchronized,即線程安全),假如要頻繁對字符串內(nèi)容進行修改,出于效率考慮最佳使用StringBuffer,假如想轉(zhuǎn)成String類型,可以調(diào)用StringBuffer的toString();StringBuffer上的重要操作是append和insert方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。append方法始終將這些字符添加到緩沖區(qū)的末端;而insert方法則在指定的點添加字符。3,(*延伸)StringBuilder字符串變量(非線程安全),這是在JDK5.0新增長的!!!,該對象是一個線程不安全的字符串容器,在單線程操作的情況下此對象可以用于取代StringBuffer!!!4,(String和StringBuffer)兩者者之間的區(qū)別:這兩者之間的區(qū)別重要區(qū)別在性能上,String,每次對存放進String當中的字符串進行更改的時候,都會生成一個新的String對象,然后指針指向該對象(雖然Java不認可自己有指針這回事),而一旦當產(chǎn)生的沒有引用指向?qū)ο筮^多的時候,這個時候GC就會出動,對其進行清理,這個時候,性能就會有所減少!!!而使用StringBuffer的時候,每次都會對該對象自身進行操作,而不是去創(chuàng)建一個新的對象,所以在多數(shù)情況下還是推薦使用該對象!!!但是某些特殊的情況下,使用String并不會比StringBuffer慢!!!例如:Stringstr="String1"+"String2";&&StringBuffersb=newStringBuffer();sb.append("String1").append("String2");在這里的Stringstr="String1"+"String2"事實上被翻譯成了str="String1String2";52、Thread和Runnable有什么不同?一方面,Java中Thread和Runnable是實現(xiàn)并發(fā)線程的兩種方式!!!,通過兩者中的任意一個都可以達成線程并發(fā)的目的!!!區(qū)別: 0,Thread是一個Class,Runnable是一個interface!!! 1,通過extendsThread,可獲得start(),sleep(),并覆蓋run(),使用時直接用start(),但有時不太方便通過繼承(extends)而進行多線程,例如已繼承了其它Class(Java不允許多重繼承)時,就應當實現(xiàn)(implements)Runnable寫多線程程序。 2,注意,implementsRunnable創(chuàng)建的只有run()方法而沒有start(),因此要運用其它機制來啟動。這要創(chuàng)建兩個對象,第一個是Runnable的, 第二個是Thread的,然后把第一個當成參數(shù)傳給第二個!!! 3,由下面的程序可以看出,實現(xiàn)Runnable的多線程程序要比,繼承Thread的多線程程序靈活的多!!! 4,這里尚有一點,就是說使用Runnable實現(xiàn)多線程可以達成資源共享目的,讓多個Thread對象接受同一個Runnable實現(xiàn)類的參數(shù),這樣就是多個線程操作同一塊資源!!! 例如://Runnable

接口的多線程程序舉例!!!

private

class

RunnableThread

implements

Runnable{

/*這個方法中寫,多線程執(zhí)行的程序!!!,由于這里是實現(xiàn)了Runnable所以就算再去繼承其他的class也不會違反java成不能多繼承的規(guī)定!!!*/

public

void

run(){

}

}

/*通過將Runnable的實現(xiàn)類作為參數(shù)傳遞給一個Thread對象,然后通過啟動Thread對象,就能讓其執(zhí)行自己復寫的方法,并且是并發(fā)操作!!!*/

Thread

runnThread

=

new

Thread(new

RunnableThread());

RunnThread.start();

/*1,繼承自Thread類的多線程程序

private

class

GenThread

extends

Thread

{

//這個方法中寫,多線程需要執(zhí)行的方法!!!

public

void

run()

{

}

}

Thread

theGenThread

=

new

GenThread();

theGenThread.start();

53、struts的Action是不是線程安全的?假如不是,有什么方法可以保證Action的線程安全,假如是,請說明因素Struts1的實現(xiàn)底層是servlet,是單利的,所以在Struts1的開發(fā)過程中有很多的時候是需要注意單例導致的線程安全性的問題。Struts2核心是攔截器,是多例的,每一次的請求都會創(chuàng)建一個新的實例出來,所以它自身是沒有線程安全性問題的。54、Spring的工作機制以及為什么要使用?Spring的工作記機制:springmvc將所有的請求都提交給DispatcherServlet,它會委托應用系統(tǒng)的其他模塊負責對請求進行真正的解決工作。DispatcherServlet查詢一個或多個HandlerMapping,找到解決請求的Controller。DispatcherServlet請求提交到目的ControllerController進行業(yè)務(wù)邏輯解決后,會返回一個ModelAndViewDispatcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象制定的視圖對象視圖對象負責渲染返回給客戶端。AOP:讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點,稱為橫切關(guān)注點,并將它們插入到應用程序代碼中。使用AOP后,公共服務(wù)(日記、持久性、事務(wù)等)就可以分解成方面并應用到域?qū)ο笊?。同時不會增長域?qū)ο蟮膶ο竽P偷膹碗s性。IoC:允許創(chuàng)建一個可以構(gòu)造對象的應用環(huán)境,然后向這些對象傳遞他們的協(xié)作對象。如倒置所表白的,IoC就像反過來的JNDI。沒有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個對象都是用其協(xié)作對象構(gòu)造的。因此由容器負責管理協(xié)作對象(collaborator)Spring既是一個AOP框架,也是一個IoC容器。Spring最佳的地方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文獻加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的寫作對象。55、寫出兩種Java設(shè)計模式中不同的單例模式singleton/*第一種(懶漢,線程不安全):所謂懶漢,就是說當這個對象在需要進行獲取的時候,再去對該對象進行創(chuàng)建*/

public

class

Singleton{

private

static

Singleton

instance;

//通過將構(gòu)造方法私有化達成,不能直接通過new

類名(),創(chuàng)建類的目的!!!

private

Singleton(){}

public

static

Singleton

getInstance(){

if

(instance

==

null){

instance

=

new

Singleton();

}

return

instance;

}

}

/*第二種(懶漢,線程安全):這里的線程安全看起來十分的美好,但是效率卻十分的低,所以一般的情況下不會使用這種方式*/

public

class

Singleton

{

private

static

Singleton

instance;

private

Singleton(){}

//通過在此使用同步方法,進行將其變成線程安全的!!!

public

static

synchronized

Singleton

getInstance(){

if

(instance

==

null)

{

instance

=

new

Singleton();

}

return

instance;

}

}

/*第三種(餓漢

:

線程安全)

:

當該類一旦進行加載(classLoader機制),就需要對其該類中的對象進行創(chuàng)建,同樣因此也就使其避免了線程的安全問題*/

public

class

Singleton

{

private

static

Singleton

instance

=

new

Singleton();

private

Singleton(){}

public

static

Singleton

getInstance()

{

return

instance;

}

}

/*第四種(枚舉):該方法是Effective

Java作者Josh

Bloch

提倡的方式,它不僅能避免多線程同步問題,保證只有一個實例,即使使用反射機制也無法多次實例化一個枚舉量*/

public

enum

Singleton

{

INSTANCE;

private

Singleton();

}

56、假如client已有一個接口來訪問所需要的服務(wù),我們已有現(xiàn)成的類來提供這樣的服務(wù),但是服務(wù)提供的方法和client訪問所需要的方法不匹配,那么如何設(shè)計變成來提供client服務(wù)?可以寫一個代理類,將client中接口的方法寫在代理類中,在代理類中調(diào)用服務(wù)提供的方法。假如用的spring的話,通過配置就能解決這個問題。57、在HTML中如何包含JavaScript?<!--

方法一:通過外部源文獻來包含javascript,這是最對的的方式,把結(jié)構(gòu)從行為中分離出來

-->

<head>

<script

type=”text/javascript”src=”source.jsp”></script>

</head>

<!--

方法二:在<head>中包含js代碼

-->

<head>

<script

type=”text/javascript”

>

//javascript代碼

</script>

</head>

<!--

方式三:把嵌入式的腳本添加到文檔的<body>中,

維一的理由是要使用document.write()方法,但我們有更好方法來替代他。如:createElement()方法,

appendChild()方法,

非EMCAscript標準的

innerHTML屬性-->

<body>

<script

type=”text/javascript”

>

document.write(“html”);

</script>

</body>

<!--

方式四:非官方EMCA標準的

javascript:前綴

;可以成功打開一個新的窗口-->

<a

href="javascript:window.open('');"

>進入</a>

58、Javascript中,對象person有name屬性,寫出兩種獲取name屬性的方法<!--第一種:使用“

.

”來訪問對象屬性-->

P

<!--第二種:使用“[]”來訪問對象屬性-->

Person[name]

59、GC是什么,為什么要有GC? 1,GC:垃圾回收(GarbageCollection),Java的內(nèi)存管理,其內(nèi)置的垃圾回收,是Java語言的優(yōu)秀成果,它允許開發(fā)者創(chuàng)建新的對象不需要明確內(nèi)存分派和釋放,由于垃圾回收器自動回收內(nèi)存當中的對象。 2,垃圾收集釋放從手工解決內(nèi)存釋放的程序員。其結(jié)果是,某些類別的缺陷被消除或顯著減少:這也正是Java的特點(相對于C++來說,程序員不再需要通過痛苦的記憶哪里的內(nèi)存是釋放掉的,而哪一些是沒有釋放掉的)內(nèi)存不安全釋放的問題:1,當一塊內(nèi)存被釋放,同時還存在著指向它,而那些指針中的一個被廢棄發(fā)生。屆時內(nèi)存也許已被重新分派到其他使用,具有不可預知的結(jié)果。2,當程序試圖發(fā)生釋放的內(nèi)存已被釋放,并也許已經(jīng)被再次分派的區(qū)域。3,某些種類的內(nèi)存泄漏,其中一個程序無法釋放由已成為對象占用的內(nèi)存可達,從而導致內(nèi)存消耗殆盡。(垃圾收集通常不解決的數(shù)據(jù)是可到達的無界積累,但事實上將不被使用的程序)……60、XML文檔定義有幾種形式?他們之間有何本質(zhì)區(qū)別?解析XML文檔有幾種方式?XML文檔定義有幾種形式:dtd文檔類型定義和SchemaXML模式本質(zhì)區(qū)別:XMLSchema和DTD都用于文檔驗證XMLSchema是內(nèi)容開放模型,可擴展,功能性強,而DTD可擴展性差。XMLSchema支持豐富的數(shù)據(jù)類型,而DTD不支持元素的數(shù)據(jù)類型,對屬性的類型定義也很有限。XMLSchema支持命名空間機制,而DTD不支持。XMLSchema可針對不同情況對整個XML文檔或文檔局部進行驗證;而DTD缺少這種靈活性。XMLSchema完全遵循XML規(guī)范,符合XML語法,可以和DOM結(jié)合使用,功能強大;而DTD語法自身有自身的語法和規(guī)定,難以學習。解析XML文檔有幾種方式:DOM:所有內(nèi)容都封裝成對象,并且裝入內(nèi)存中,假如是大本文解決的時候,性能下降??梢宰鲈鰟h改查等一系列操作。Sax:事件驅(qū)動.在讀取的過程中.將碰到的文檔的各個部分的內(nèi)容.拆分各個事件.當我們碰到什么事件的時候,可以選擇做相應事.sax只能做查詢。61、什么是java序列化,如何實現(xiàn)java序列化?我們有時候?qū)⒁粋€java對象變成字節(jié)流的形式傳出去或者從一個字節(jié)流中恢復成一個java對象,例如,要將java對象存儲到硬盤或者傳送給網(wǎng)絡(luò)上的其他計算機,這個過程我們可以自己寫代碼去把一個java對象變成某個格式的字節(jié)流再傳輸,但是,jre自身就提供了這種支持,我們可以調(diào)用OutputStream的writeObject方法來做,假如要讓java幫我們做,要被傳輸?shù)膶ο蟊仨殞崿F(xiàn)serializable接口,這樣,javac編譯時就會進行特殊解決,編譯的類才可以被writeObject方法操作,這就是所謂的序列化。需要被序列化的類必須實現(xiàn)Serializable接口,該接口是一個mini接口,其中沒有需要實現(xiàn)的方法,implementsSerializable只是為了標注該對象是可被序列化的。例如,在web開發(fā)中,假如對象被保存在了Session中,tomcat在重啟時要把Session對象序列化到硬盤,這個對象就必須實現(xiàn)Serializable接口。假如對象要通過度布式系統(tǒng)進行網(wǎng)絡(luò)傳輸或通過rmi等遠程調(diào)用,這就需要在網(wǎng)絡(luò)上傳輸對象,被傳輸?shù)膶ο缶捅仨殞崿F(xiàn)Serializable接口。62、使用js和JQuery的方式獲取表達中對象Js

:

document.getElementById(“aa”)查詢id為aa的元素,

document.getElementsByName(“aa”)取name為aa的元素,

document.getElementsByTagName("aa")獲取標署名

jquery相應有$("#aa"),$("div[name=aa]"),$("div")

如$(".aa")取class為aa的元素,$(":text")取頁面type=text的輸入元素等很多,功能比js強大很多

//document.getElementById(“xxx”)

//jQuery(“#xxx”);

63、JQuery中什么方法用來把內(nèi)容追加到指定元素的末尾?JQeuery可以使用

after()

方法在被選元素后插入指定的內(nèi)容。

語法:

$(selector).after(content)

$(“p”).after(function(){

//為

p元素的后面需要添加的內(nèi)容

});

64、JQuery給按鈕添加點擊事件?JQuery給

按鈕添加事件的語法格式是:$(selector).click()

例如:$(selector).click(function(){

//添加JQuery代碼

});

65、是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用?不可以。由于非static方法是要與對象關(guān)聯(lián)在一起的,必須創(chuàng)建一個對象后,才可以在該對象上進行方法調(diào)用,而static方法調(diào)用時不需要創(chuàng)建對象,可以直接調(diào)用。也就是說,當一個static方法被調(diào)用時,也許還沒有創(chuàng)建任何實例對象,假如從一個static方法中發(fā)出對非static方法的調(diào)用,那個非static方法是關(guān)聯(lián)到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用。66、如何把一段逗號分隔的字符串轉(zhuǎn)換成一個數(shù)組?//方式一:使用String的split

方法

public

static

String[]

convertStrToArray(String

str){

String[]

strArray

=

null;

strArray

=

str.split(",");

return

strArray;

}

//方式二:使用StringTokenizer實現(xiàn)

//api說明:StringTokenizer

是出于兼容性的因素而被保存的遺留類

//(雖然在新代碼中并不鼓勵使用它)。建議所有尋求此

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論