第一篇:2017java面試題大全帶答案
2017java面試題大全帶答案
來源:扣丁學(xué)堂
目前有很多的人選擇學(xué)習(xí)Java,只因?yàn)镴ava發(fā)展前景廣闊。在現(xiàn)在這個(gè)計(jì)算機(jī)發(fā)展勢(shì)頭勇猛的時(shí)代,不僅是互聯(lián)網(wǎng)公司的巨大機(jī)會(huì),同時(shí)也是Java發(fā)展的時(shí)機(jī),所以越來越多的人學(xué)習(xí)Java,并關(guān)心到企業(yè)面試時(shí),會(huì)有什么樣的Java面試題。今天扣丁學(xué)堂Java視頻教程講師就來講解一下常見的Java面試題及回答方式:
1、說說servlet的生命周期。
2、進(jìn)程和線程的區(qū)別是什么?
3、說出J2EE常用的幾種設(shè)計(jì)模式。
1、當(dāng) web 容器加載 servlet,生命周期開始;通過調(diào)用 init()方法進(jìn)行 servlet 的初始化;通過調(diào)用 service()方法實(shí)現(xiàn),根據(jù)請(qǐng)求的不同調(diào)用不同的 doGet()或 doPost()方法;結(jié)束服務(wù),web 容器調(diào)用 destroy()方法。
2、進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程。
3、工廠模式、單例模式、適配器模式、代理模式
常見的Java面試題及回答方式就先為大家分享到這,感謝大家閱讀由扣丁學(xué)堂分享的“java面試題”我們會(huì)不定期的分享更多關(guān)于面試題的文章,供廣大java學(xué)員進(jìn)行參考,更多精彩內(nèi)容請(qǐng)關(guān)于扣丁學(xué)堂官網(wǎng)。
第二篇:Java經(jīng)典面試題-帶答案
Java經(jīng)典面試題 帶答案
一、單項(xiàng)選擇題
1.Java是從()語言改進(jìn)重新設(shè)計(jì)。
A.Ada
B.C++
C.Pasacal
D.BASIC
答案:B
2.下列語句哪一個(gè)正確()
A. Java程序經(jīng)編譯后會(huì)產(chǎn)生machine code
B.Java程序經(jīng)編譯后會(huì)產(chǎn)生byte code(字節(jié)碼)
C.Java程序經(jīng)編譯后會(huì)產(chǎn)生DLL
D.以上都不正確
答案:B
3.下列說法正確的有()
A.class中的constructor不可省略
B. constructor必須與class同名,但方法不能與class同名
C.constructor在一個(gè)對(duì)象被new時(shí)執(zhí)行(構(gòu)造器)
D.一個(gè)class只能定義一個(gè)constructor
答案:C
4.提供Java存取數(shù)據(jù)庫能力的包是()
A.Java.sql /sql/數(shù)據(jù)庫 還有 Oracle 也是一種數(shù)據(jù)庫
B.java.awt
C.java.lang
D.java.swing
答案:A
5.下列運(yùn)算符合法的是()
A.&&
B.<>
C.if
D.:=
答案:A
6.執(zhí)行如下程序代碼
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,C的值是()
A.0
B.1
C.-1
D.死循環(huán)
答案:C
7.下列哪一種敘述是正確的()
A.a(chǎn)bstract修飾符可修飾字段、方法和類
B.抽象方法的body部分必須用一對(duì)大括號(hào){}包住
C.聲明抽象方法,大括號(hào)可有可無
D.聲明抽象方法不可寫出大括號(hào)
答案:D
8.下列語句正確的是()
A.形式參數(shù)可被視為localvariable
B.形式參數(shù)可被字段修飾符修飾
C.形式參數(shù)為方法被調(diào)用時(shí),真正被傳遞的參數(shù)
D.形式參數(shù)不可以是對(duì)象
答案:A
9.下列哪種說法是正確的()
A.實(shí)例方法可直接調(diào)用超類的實(shí)例方法
B.實(shí)例方法可直接調(diào)用超類的類方法
C.實(shí)例方法可直接調(diào)用其他類的實(shí)例方法
D.實(shí)例方法可直接調(diào)用本類的類方法
答案:D
二、多項(xiàng)選擇題
1.Java程序的種類有()
A.類(Class)
B.Applet
C.Application
D.Servlet
2.下列說法正確的有()
A.環(huán)境變量可在編譯sourcecode時(shí)指定
B.在編譯程序時(shí),所能指定的環(huán)境變量不包括class path
C.javac一次可同時(shí)編譯數(shù)個(gè)Java源文件
D.javac.exe能指定編譯結(jié)果要置于哪個(gè)目錄(directory)
答案:BCD
3.下列標(biāo)識(shí)符不合法的有()
A.new
B.$Usdollars
C.1234
D.car.taxi
答案:ACD
4.下列說法錯(cuò)誤的有()
A.?dāng)?shù)組是一種對(duì)象
B.?dāng)?shù)組屬于一種原生類
C.intnumber=[]={31,23,33,43,35,63}
D.?dāng)?shù)組的大小可以任意改變
答案:BCD
5.不能用來修飾interface的有()
A.private
B.public
C.protected
D.static
答案:ACD
6.下列正確的有()
A. call byvalue不會(huì)改變實(shí)際參數(shù)的數(shù)值
B. call by reference能改變實(shí)際參數(shù)的參考地址
C. call byreference不能改變實(shí)際參數(shù)的參考地址
D. call byreference能改變實(shí)際參數(shù)的內(nèi)容
答案:ACD
7.下列說法錯(cuò)誤的有()
A.在類方法中可用this來調(diào)用本類的類方法
B.在類方法中調(diào)用本類的類方法時(shí)可直接調(diào)用
C.在類方法中只能調(diào)用本類中的類方法
D.在類方法中絕對(duì)不能調(diào)用實(shí)例方法
答案:ACD
8.下列說法錯(cuò)誤的有()
A.Java面向?qū)ο笳Z言容許單獨(dú)的過程與函數(shù)存在 B. Java面向?qū)ο笳Z言容許單獨(dú)的方法存在
C.Java語言中的方法屬于類中的成員(member)
D.Java語言中的方法必定隸屬于某一類(對(duì)象),調(diào)用方法與過程或函數(shù)相同
答案:ABC
9.下列說法錯(cuò)誤的有()
A.能被java.exe成功運(yùn)行的javaclass文件必須有main()方法
B. J2SDK就是Java API
C.Appletviewer.exe可利用jar選項(xiàng)運(yùn)行.jar文件
D.能被Appletviewer成功運(yùn)行的javaclass文件必須有main()方法
答案:BCD
三、判斷題
1.Java程序中的起始類名稱必須與存放該類的文件名相同。()
答案:正確
2.Unicode是用16位來表示一個(gè)字的。()
答案:正確
3.原生類中的數(shù)據(jù)類型均可任意轉(zhuǎn)換。()
答案:錯(cuò)誤
1.分別寫出BOOL,int,float,指針類型的變量a 與“零”的比較語句。
答案:
BOOL : if(!a)orif(a)
int : if(a == 0)
float : const EXPRESSION EXP = 0.000001
if(a < EXP && a >-EXP)
pointer : if(a!=NULL)or if(a == NULL)
2.請(qǐng)說出const與#define 相比,有何優(yōu)點(diǎn)?
答案:1)const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對(duì)前者進(jìn)行類型安全檢查。而對(duì)后者只進(jìn)行字符替換,沒有類型安全檢查,并且在字符替換可能會(huì)產(chǎn)生意料不到的錯(cuò)誤。
2)有些集成化的調(diào)試工具可以對(duì)const 常量進(jìn)行調(diào)試,但是不能對(duì)宏常量進(jìn)行調(diào)試。
3.簡(jiǎn)述數(shù)組與指針的區(qū)別?
數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建。指針可以隨時(shí)指向任意類型的內(nèi)存塊。
(1)修改內(nèi)容上的差別
char a[]= “hello”;
a[0] = ?X?;
char *p = “world”;// 注意p 指向常量字符串
p[0] = ?X?;// 編譯器不能發(fā)現(xiàn)該錯(cuò)誤,運(yùn)行時(shí)錯(cuò)誤
(2)用運(yùn)算符sizeof 可以計(jì)算出數(shù)組的容量(字節(jié)數(shù))。sizeof(p),p為指針得到的是一個(gè)指針變量的字節(jié)數(shù),而不是p 所指的內(nèi)存容量。C++/C語言沒有辦法知道指針?biāo)傅膬?nèi)存容量,除非在申請(qǐng)內(nèi)存時(shí)記住它。注意當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),該數(shù)組自動(dòng)退化為同類型的指針。
char a[] =“hello world”;
char *p = a;
cout<< sizeof(a)<< endl;// 12字節(jié)
cout<< sizeof(p)<< endl;// 4 字節(jié)
計(jì)算數(shù)組和指針的內(nèi)存容量
voidFunc(char a[100])
{
cout<< sizeof(a)<< endl;// 4 字節(jié)而不是100字節(jié)
}
4.類成員函數(shù)的重載、覆蓋和隱藏區(qū)別?
答案:
a.成員函數(shù)被重載的特征:
(1)相同的范圍(在同一個(gè)類中);
(2)函數(shù)名字相同;
(3)參數(shù)不同;
(4)virtual 關(guān)鍵字可有可無。
b.覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:
(1)不同的范圍(分別位于派生類與基類);
(2)函數(shù)名字相同;
(3)參數(shù)相同;
(4)基類函數(shù)必須有virtual 關(guān)鍵字。
c.“隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:
(1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時(shí),不論有無virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual 關(guān)鍵字。此時(shí),基類的函數(shù)被隱藏(注意別與覆蓋混淆)
5.There are two int variables: a and b, don?t use “if”, “? :”, “switch”orother judgement statements, find out the biggest one of the two numbers.答案:((a + b)+ abs(ai-1;j++){ if(data[j] > data[j+1]){ tag = true;int temp = data[j];data[j] = data[j+1];data[j+1] = temp;} } if(!tag)break;} } void main(void){ vectordata;ifstreamin(“c:data.txt”);if(!in){ cout<<“file error!”;exit(1);} int temp;while(!in.eof()){ in>>temp;data.push_back(temp);
}
in.close();//關(guān)閉輸入文件流
Order(data);
ofstream out(“c:result.txt”);
if(!out)
{
cout<<“fileerror!”;
exit(1);
}
for(i = 0;i < data.size();i++)
out< 10.鏈表題:一個(gè)鏈表的結(jié)點(diǎn)結(jié)構(gòu) struct Node { int data; Node *next; }; typedef struct Node Node; (1)已知鏈表的頭結(jié)點(diǎn)head,寫一個(gè)函數(shù)把這個(gè)鏈表逆序(Intel) Node * ReverseList(Node*head)//鏈表逆序 { if(head == NULL || head->next == NULL) returnhead; Node *p1 = head; Node *p2 = p1->next; Node *p3 =p2->next; p1->next = NULL; while(p3!= NULL) { p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } p2->next = p1; head = p2; return head; } 2)已知兩個(gè)鏈表head1 和head2 各自有序,請(qǐng)把它們合并成一個(gè)鏈表依然有序。(保留所有結(jié)點(diǎn),即便大小相同) Node *Merge(Node *head1 , Node *head2) { if(head1 == NULL) return head2; if(head2 == NULL) return head1; Node *head = NULL; Node*p1 = NULL; Node *p2 = NULL; if(head1->data < head2->data) { head = head1; p1 = head1->next; p2 = head2; } else { head = head2; p2 = head2->next; p1 = head1; } Node *pcurrent = head; while(p1!= NULL && p2!= NULL) { if(p1->data <= p2->data) { pcurrent->next = p1; pcurrent = p1; p1 = p1->next; } else { pcurrent->next = p2; pcurrent = p2; p2 = p2->next; } } if(p1!= NULL) pcurrent->next = p1; if(p2!= NULL) pcurrent->next = p2; return head; } (3)已知兩個(gè)鏈表head1 和head2各自有序,請(qǐng)把它們合并成一個(gè)鏈表依然有序,這次要求用遞歸方法進(jìn)行。(Autodesk) 答案: Node *MergeRecursive(Node *head1 , Node *head2) { if(head1 == NULL)return head2;if(head2 == NULL)return head1;Node *head =NULL;if(head1->data < head2->data){ head = head1;head->next = MergeRecursive(head1->next,head2);} else { head = head2;head->next = MergeRecursive(head1,head2->next);} return head;} Substring charAt 大小寫轉(zhuǎn)換 熟練使用dbcp、c3p0 druid 解釋get和post的區(qū)別? 1、安全性、如果使用get方式發(fā)送到服務(wù)器數(shù)據(jù)會(huì)拼接到url的后面,這樣的話會(huì)完全暴露出發(fā)送到服務(wù)器的數(shù)據(jù),因此不安全,而post會(huì)把發(fā)送到服務(wù)器的數(shù)據(jù)放到請(qǐng)求體中,相對(duì)來說比較安全 2、get方式發(fā)送到服務(wù)器的數(shù)據(jù)有限制,而post的方式發(fā)送到服務(wù)器原則上是沒有限制 介紹tcp和upd的區(qū)別 Tcp:傳輸控制協(xié)議 Udp---user data protocol:用戶數(shù)據(jù)報(bào)協(xié)議 共同點(diǎn):都是用來在2臺(tái)設(shè)備直接傳遞數(shù)據(jù)的協(xié)議 不同點(diǎn): Tcp協(xié)議會(huì)在傳遞數(shù)據(jù)之前要3次握手,之后建立連接。這樣的話就可以傳遞數(shù)據(jù)。是一種可靠的傳輸協(xié)議,就是說可以保證百分百把數(shù)據(jù)傳遞到對(duì)方設(shè)備,傳輸效率低 Udp:不可靠傳輸,不能保證把數(shù)據(jù)百分百把數(shù)據(jù)傳輸?shù)綄?duì)方設(shè)備上,傳輸效率高 表:銷售表,客戶表。兩個(gè)表的關(guān)系,一個(gè)賣一個(gè)買共同的產(chǎn)物表:ID name 單子表 一對(duì)一 本人最近參加了大大小小很多公司的面試,在這里我把自己面試遇到的問題給大家說一下 JAVA基礎(chǔ)篇 1、在java類加載器中,系統(tǒng)類加載器和用戶自定義加載器那個(gè)先加載?(遇到這個(gè)問題時(shí)感覺很意外,沒有想到會(huì)問這樣的問題) 先加載系統(tǒng)類加載器 Java類加載器加載類順序依次為: JVM類加載器:這個(gè)模式會(huì)加載JAVA_HOME/lib下的jar包 擴(kuò)展類加載器:會(huì)加載JAVA_HOME/lib/ext下的jar包 系統(tǒng)類加載器:這個(gè)會(huì)去加載指定了classpath參數(shù)指定的jar文件 用戶自定義類加載器:sun提供的ClassLoader是可以被繼承的,允許用戶自己實(shí)現(xiàn)類加載器 2、堆和棧分別存放什么? 棧:基本數(shù)據(jù)類型和對(duì)象的引用 堆:對(duì)象和數(shù)組 3、String、StringBuffer、StringBuilder的區(qū)別 (1)String是不可變對(duì)象,也就是說每次修改String都是新建了一個(gè)對(duì)象并賦值(2)StringBuffer是字符緩沖區(qū),修改它不會(huì)新建對(duì)象,可以使用append()方法和delete()方法修改StringBuffer的值 (3)StringBuilder可以替代StringBuffer,它是一個(gè)單線程使用的類,和StringBuffer比速度快、效率高,但是是非安全的 (4)三者都是被final修飾的(這一點(diǎn)面試官的問我的時(shí)候一直在說,你確定嗎?搞得我有點(diǎn)虛) 4、Java的異常和錯(cuò)誤有什么區(qū)別? (1)Error Error是JVM的錯(cuò)誤,這種錯(cuò)誤會(huì)嚴(yán)重影響程序的運(yùn)行,設(shè)計(jì)者不會(huì)設(shè)計(jì)程序代碼去捕捉這種錯(cuò)誤,因?yàn)榧词共蹲降揭矡o法給予適當(dāng)?shù)奶幚?,比如?nèi)存溢出。(2)Exception Exception包含了一般性的異常,這些異常同在在捕捉到之后便可做妥善的處理,以確保程序繼續(xù)運(yùn)行。Exception有很多種分類,從Exception產(chǎn)生的時(shí)機(jī)上我們可以把Exception分為 ①運(yùn)行時(shí)異常 運(yùn)行時(shí)異常是指程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài) ②非運(yùn)行時(shí)異常 非運(yùn)行時(shí)異常是指方法聲明時(shí)throws的異常 5、&和&&的區(qū)別 &是位運(yùn)算符,表示按位與運(yùn)算。&&是邏輯運(yùn)算符,表示邏輯與。在條件判斷的時(shí)候&必須逐一檢查各個(gè)條件,&&具有短路功能,只要一個(gè)條件為false則不會(huì)進(jìn)行后續(xù)的判斷。 6、abstract class和interface的區(qū)別 (1)abstract class是抽象類,聲明方法的存在而不去實(shí)現(xiàn)它的類叫做抽象類,它用于創(chuàng)建一個(gè)體現(xiàn)某些基本行為的類。抽象類中不能有構(gòu)造方法、不能有靜態(tài)方法,抽象類不能被實(shí)例化。抽象類中可以有變量、可以有普通方法、可以有抽象方法,在繼承抽象方法后,必須實(shí)現(xiàn)它的所有抽象方法。 (2)interface是接口,接口中的變量必須是靜態(tài)常量(static final),接口中的方法必須都是抽象方法(abstract),不過由于接口中所有變量、方法修飾符都一致,因可以不寫。接口的實(shí)現(xiàn)必須實(shí)現(xiàn)接口中所有的方法。 7、final、finally、finalize的區(qū)別 (1)final是用來描述變量、方法、類的關(guān)鍵字,表示變量值不可變、方法不可被重寫、類不可被繼承 (2)finally是異常處理的關(guān)鍵字,表示finally塊里面的代碼一定會(huì)被運(yùn)行到(3)finalize是Object類中的protected方法,垃圾回收器執(zhí)行的時(shí)候會(huì)調(diào)用被回收的類的此方法。 8、接口是否可以繼承接口?抽象類是否可以實(shí)現(xiàn)接口?抽象類是否可以實(shí)現(xiàn)實(shí)體類? (1)接口可以繼承接口 (2)抽象類里可以有普通方法,因此抽象類可以實(shí)現(xiàn)接口,只需要實(shí)現(xiàn)接口內(nèi)所有方法就可以了 (3)抽象類里可以有普通方法,變量也不需要是常量,因此抽象類可以實(shí)現(xiàn)實(shí)體類 9、一個(gè)”.java”源文件中是否可以包含多個(gè)類(非內(nèi)部類)?有什么限制? 可以。必須只有一個(gè)類名與文件名相同且該類以public修飾 10、java是怎么通過包名.類名來獲得該類的實(shí)例的? 通過Class.forName()方法 11、介紹一下集合? ①Collection:是最基本的集合接口,一個(gè)collection代表一組Object,即collection的元素。 ②List:是collection的擴(kuò)展,作用是收集對(duì)象,并以索引方式保留收集對(duì)象的順序。其元素有放入順序,元素可重復(fù)。 1)ArrayList:利用類似于數(shù)組的形式來存儲(chǔ)數(shù)據(jù),它的隨機(jī)訪問速度極快。 2)LinkedList:內(nèi)部實(shí)現(xiàn)是鏈表,它適合于在鏈表中間需要頻繁的插入和刪除操作。 3)Vector:與ArrayList相似,但是兩者不同,Vector主要用在事先不知道數(shù)組的大小,或者只是需要一個(gè)可以改變大小的數(shù)組的情況。 4)ArrayList與Vector的區(qū)別: ArrayList是非線程安全的,效率高 Vector是基于線程安全的,效率低。 ③Set:也是collection的擴(kuò)展,在Set中的元素對(duì)象要求不能重復(fù)(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實(shí)是固定的)。常用實(shí)現(xiàn)類有HashSet和TreeSet。 1)HashSet:其核心是HashMap,HashSet中存放的值為HashMap中的key,這也就是HashSet不允許重復(fù)的原因。 2)TreeSet:底層由平衡二叉樹實(shí)現(xiàn),它會(huì)將投入其中的元素自動(dòng)排序,這就要求投入其中的元素是可排序的,也就是說,存放的必須是同一種數(shù)據(jù)類型。其實(shí)現(xiàn)自動(dòng)排序的實(shí)質(zhì)是compareable public int compareTo(Object obj){ if(equals(obj)){ return 0;}else{ Return 1;} } 這個(gè)方法稱為比較器,可以比較兩個(gè)對(duì)象,如果對(duì)象都一致相等,則返回0 ④Map:沒有繼承collection接口,提供key到value的映射,也就是說,它是一種把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器。 1)HashMap:key不允許重復(fù),如果后面的key重復(fù),則會(huì)覆蓋前面的值,key允許為null,但是只能有一個(gè)。 2)TreeMap:key如果是一個(gè)對(duì)象的話,這個(gè)對(duì)象所在的類一定要實(shí)現(xiàn)compareable接口,并且重寫compareTo方法。3)HashMap與HashTable比較: HashMap:非線程安全,高效率,支持null HashTable:線程安全,低效率,不支持null 12、list、set和map的遍歷方法比較: List:可以用for循環(huán)、for each循環(huán)和Iterator迭代。 Set:可以用for each循環(huán)和Iterator迭代。 Map:HashMap只能用Iterator迭代。 13、寫一個(gè)單例設(shè)計(jì)模式: Public class Apple{ Private static Apple apple;Private Apple(){ } Public static Apple getApple(){ If(null == apple){ apple = new Apple();return apple;}else{ return apple;} } } 14、說說static關(guān)鍵字: Static表示“全局”或“靜態(tài)”的意思,可以用來修飾成員變量和成員方法,也可以形成靜態(tài)代碼塊,還可以用來修飾類,但只能修飾內(nèi)部類。 ①static變量:被static修飾的變量叫靜態(tài)變量或者類變量;沒有被static修飾的變量叫實(shí)例變量。二者的區(qū)別是: 靜態(tài)變量:在內(nèi)存中只有一個(gè)拷貝(節(jié)省內(nèi)存),jvm只會(huì)為靜態(tài)分配一次內(nèi)存,而且在加載類的過程中就完成靜態(tài)變量的內(nèi)存分配??捎妙惷苯釉L問(方便),也可以用對(duì)象來訪問(不推薦)。靜態(tài)變量一般用于對(duì)象之間需要共享值時(shí)。 實(shí)例變量:每創(chuàng)建一個(gè)實(shí)例,就會(huì)為實(shí)例分配一次內(nèi)存,實(shí)例變量在內(nèi)存中可以有多個(gè)拷貝,互不影響(靈活)。 ②靜態(tài)方法:它可以直接通過“類名.靜態(tài)方法”來訪問,任何的實(shí)例亦可以調(diào)用。靜態(tài)方法中不能用this和super關(guān)鍵字。不能直接訪問所屬類的實(shí)例變量和實(shí)例方法,只能訪問所屬類的靜態(tài)變量和成員方法。 ③static代碼塊:static代碼塊也叫靜態(tài)代碼塊,是在類中獨(dú)立于類成員的static語句塊,可以有多個(gè),位置也可以隨便放,它不在任何的方法體內(nèi),jvm在加載類時(shí)會(huì)執(zhí)行這些靜態(tài)代碼塊,如果有多個(gè),則會(huì)按照他們?cè)陬愔谐霈F(xiàn)的先后順序一次執(zhí)行它們,而且每個(gè)代碼塊只會(huì)執(zhí)行一次。 15、Servlet的生命周期: ①加載和實(shí)例化:在Servlet容器檢測(cè)到需要這個(gè)Servlet來響應(yīng)第一個(gè)請(qǐng)求時(shí),創(chuàng)建Servlet實(shí)例。 ②初始化:在Servlet實(shí)例化后,容器將調(diào)用Servlet的init()方法初始化這個(gè)對(duì)象。 ③請(qǐng)求處理:Servlet容器將調(diào)用Servlet的service()方法對(duì)請(qǐng)求進(jìn)行處理。 ④服務(wù)終止:當(dāng)容器檢測(cè)到一個(gè)Servlet的實(shí)例應(yīng)該從服務(wù)中被移除的時(shí)候,容器就會(huì)調(diào)用實(shí)例的destroy()方法 16、jsp九大內(nèi)置對(duì)象范圍比較: 排序?yàn)椋篈pplication > Session > Request > Page = Response = out = PageContext = config = exception。 Application:服務(wù)器啟動(dòng)到停止這段時(shí)間。 Session:Http會(huì)話開始到結(jié)束這段時(shí)間(瀏覽器打開到關(guān)閉) Request:Http請(qǐng)求開始到結(jié)束這段時(shí)間,即一個(gè)jsp頁面發(fā)出請(qǐng)求到另一個(gè)jsp頁面之間。 Page:頁面執(zhí)行,當(dāng)前頁面從打開到關(guān)閉這段時(shí)間,它只能在同一個(gè)頁面中有效 Response:頁面執(zhí)行,包含了客戶請(qǐng)求的有關(guān)信息,但jsp中很少用到它。 Out:頁面執(zhí)行,向客戶端輸入內(nèi)容時(shí)常用的對(duì)象 PageContext:頁面執(zhí)行,取得任何范圍的參數(shù),通過它可以獲得out、Requset、Response、Session、application等對(duì)象。 Config:頁面執(zhí)行,取得服務(wù)器的配置信息。 Exception:僅在錯(cuò)誤處理頁面 17、jsp和servlet的區(qū)別與聯(lián)系: ①JSP第一次運(yùn)行的時(shí)候會(huì)編譯成Servlet,駐留在內(nèi)存中以供調(diào)用 ②JSP是web開發(fā)技術(shù),Servlet是服務(wù)器端運(yùn)用的小程序 ③JSP更多的是進(jìn)行頁面顯示,Servlet更多的是處理業(yè)務(wù),即JSP是頁面,Servlet是實(shí)現(xiàn)JSP方法 ④開發(fā)界面是JSP時(shí),可以直接編寫:第三篇:Java面試題個(gè)人總結(jié) + 答案
[數(shù)據(jù)]
;而Servlet中則需要這樣寫:
out.println(“
18、final關(guān)鍵字的作用
(1)final修飾的基本數(shù)據(jù)類型的值不可被改變,final修飾的引用類型的引用不可變而引用的值還是可以變的
(2)final修飾的方法不可被重寫(3)final修飾的類不可被繼承
(4)final修飾的基本數(shù)據(jù)類型的形參在方法體內(nèi)不可以被重新賦值,final修飾的引用類型的形參不可以被賦予一個(gè)新的引用
數(shù)據(jù)庫方面
1、問你怎么同時(shí)更新一個(gè)表中的兩個(gè)字段?(假設(shè)表名為A,要更新的字段分別為name、age)
update A set name = ‘ 姚明’ , age = 35 where id = 10;
2、給student添加一個(gè)來自classes的外鍵:(這個(gè)很容易被我們自己忽視)
alter table student add constraint fk_stu_cls foreign key(cid)references classes(cid);
3、數(shù)據(jù)庫三范式:屬性唯
一、記錄唯
一、表唯一
4、查詢結(jié)果按tid排序(降序):select * from test order by tid desc;(默認(rèn)是按升序的)
5、oracle的左外連接
Select * from dept d left outer join emp e on d.deptno = e.deptno
order by d.deptno,e.ename;
SSH框架
1、hibernate和JDBC相比有什么優(yōu)勢(shì)?
1.對(duì)JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。2.Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化DAO層的編碼工作
3.hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。
4.hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。
2、為什么要用struts?
JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個(gè)規(guī)則、一個(gè)把這些技術(shù)組織起來的規(guī)則,這就是框架,Struts便應(yīng)運(yùn)而生。
3、為什么要用spring?
AOP 讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn),稱為橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。使用 AOP 后,公共服務(wù)(比如日志、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊?,同時(shí)不會(huì)增加域?qū)ο蟮膶?duì)象模型的復(fù)雜性。
IOC 允許創(chuàng)建一個(gè)可以構(gòu)造對(duì)象的應(yīng)用環(huán)境,然后向這些對(duì)象傳遞它們的協(xié)作對(duì)象。正如單詞倒置所表明的,IOC 就像反過來的 JNDI。沒有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straight construction),每一個(gè)對(duì)象都是用其協(xié)作對(duì)象構(gòu)造的。因此是由容器管理協(xié)作對(duì)象(collaborator)。
Spring即使一個(gè)AOP框架,也是一IOC容器。Spring 最好的地方是它有助于您替換對(duì)象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協(xié)作對(duì)象)。然后可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對(duì)象。
4、什么是MVC模式?有什么作用?
MVC全名Model View Controller,即模型-視圖-控制器,是一種非常經(jīng)典的軟件架構(gòu)模 式。從設(shè)計(jì)角度看,它將多個(gè)設(shè)計(jì)模式在一種解決方案中結(jié)合起來,用來解決許多設(shè)計(jì)問題。MVC模式把用戶界面交互分拆到不同的三個(gè)角色中,即:
(1)模型:持有所有的數(shù)據(jù)、狀態(tài)和程序邏輯,獨(dú)立于視圖和控制器。
(2)視圖:用來呈現(xiàn)模型。視圖通常直接從模型中取得它要顯示的狀態(tài)和數(shù)據(jù)。對(duì)于相同 的信息可以有多個(gè)不同的顯示形式或視圖。(3)控制器:位于視圖和模型中間,負(fù)責(zé)接收用戶的輸入,將輸入進(jìn)行解析并反饋給模型,通常有一個(gè)模型具有一個(gè)控制器。
5、hibernate的三種狀態(tài):
瞬時(shí)狀態(tài)
持久狀態(tài)
游離狀態(tài)
6、C/S和B/S的區(qū)別:
優(yōu)點(diǎn):
C/S:占用網(wǎng)速小,對(duì)于一些網(wǎng)速比較慢的電腦有明顯的優(yōu)勢(shì)。
B/S:不需要安裝客戶端,只需要瀏覽器就能打開。缺點(diǎn):
C/S:需要安裝客戶端,有時(shí)候需要更新。
B/S:對(duì)網(wǎng)速的需求大,對(duì)于一些網(wǎng)速慢的電腦不適合。
7、struts2 的核心是什么?它與struts1有什么關(guān)系?
struts2的核心是WebWork,與struts1沒關(guān)系
8、列舉五個(gè)struts2中的攔截器: ①alias:實(shí)現(xiàn)在不同請(qǐng)求中相似參數(shù)別名的轉(zhuǎn)換。②autowiring:自動(dòng)裝配的攔截器,主要用于當(dāng)struts2和spring整合時(shí),struts2可以使用自動(dòng)裝配的方式來訪問spring容器中的bean。
③createSession:該攔截器負(fù)責(zé)創(chuàng)建一個(gè)httpSession對(duì)象,主要用于那些需要有httpSession對(duì)象才能正常工作的攔截器。
④debugging:當(dāng)使用struts2的開發(fā)模式時(shí),這個(gè)攔截器會(huì)提供更多的調(diào)試信息。
⑤exception:這個(gè)攔截器負(fù)責(zé)處理異常,它將異常映射為結(jié)果。
⑥fileUpload:這個(gè)攔截器主要用于文件上傳,它負(fù)責(zé)解析表單文件域中的內(nèi)容。
⑦i18n:支持國際化的攔截器,它負(fù)責(zé)把所選的語言、區(qū)域放入用戶session中。
⑧params:這是一個(gè)最基本的攔截器,它負(fù)責(zé)解析HTTP請(qǐng)求中的參數(shù),并將參數(shù)值設(shè)置成對(duì)應(yīng)的Action屬性值。⑨t(yī)oken:防止重復(fù)提交,它檢查傳到Action中的token,從而防止多次提交。⑩validation:通過執(zhí)行XXXAction-validation.xml中定義的校驗(yàn)器,從而完成數(shù)據(jù)校驗(yàn)。
9、Spring注入方法:
①設(shè)值注入:通過setter訪問容器實(shí)現(xiàn)
②構(gòu)造注入:通過構(gòu)造函數(shù)實(shí)現(xiàn)
③P命名空間注入
10、spring實(shí)現(xiàn)注解的配置:
第四篇:java程序員部分面試題答案
一、你對(duì)MVC的理解,MVC有什么優(yōu)缺點(diǎn)?結(jié)合Struts,說明在一個(gè)Web應(yīng)用如何去使用? 答:
MVC設(shè)計(jì)模式(應(yīng)用觀察者模式的框架模式)M: Model(Business process layer),模型,操作數(shù)據(jù)的業(yè)務(wù)處理層,并獨(dú)立于表現(xiàn)層(Independent of presentation)。
V: View(Presentation layer),視圖,通過客戶端數(shù)據(jù)類型顯示數(shù)據(jù),并回顯模型層的執(zhí)行結(jié)果。C: Controller(Control layer),控制器,也就是視圖層和模型層橋梁,控制數(shù)據(jù)的流向,接受視圖層發(fā)出的事件,并重繪視圖
MVC框架的一種實(shí)現(xiàn)模型 模型二(Servlet-centric):
JSP+Servlet+JavaBean,以控制為核心,JSP只負(fù)責(zé)顯示和收集數(shù)據(jù),Sevlet,連接視圖和模型,將視圖層數(shù)據(jù),發(fā)送給模型層,JavaBean,分為業(yè)務(wù)類和數(shù)據(jù)實(shí)體,業(yè)務(wù)類處理業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)實(shí)體,承載數(shù)據(jù),基本上大多數(shù)的項(xiàng)目都是使用這種MVC的實(shí)現(xiàn)模式。
StrutsMVC框架(Web application frameworks)
Struts是使用MVC的實(shí)現(xiàn)模式二來實(shí)現(xiàn)的,也就是以控制器為核心。
Struts提供了一些組件使用MVC開發(fā)應(yīng)用程序:
Model:Struts沒有提供model類。這個(gè)商業(yè)邏輯必須由Web應(yīng)用程序的開發(fā)者以JavaBean或EJB的形式提供
View:Struts提供了action form創(chuàng)建form bean, 用于在controller和view間傳輸數(shù)據(jù)。此外,Struts提供了自定義JSP標(biāo)簽庫,輔助開發(fā)者用JSP創(chuàng)建交互式的以表單為基礎(chǔ)的應(yīng)用程序,應(yīng)用程序資源文件保留了一些文本常量和錯(cuò)誤消息,可轉(zhuǎn)變?yōu)槠渌Z言,可用于JSP中。
Controller:Struts提供了一個(gè)核心的控制器ActionServlet,通過這個(gè)核心的控制器來調(diào)用其他用戶注冊(cè)了的自定義的控制器Action,自定義Action需要符合Struts的自定義Action規(guī)范,還需要在struts-config.xml的特定配置文件中進(jìn)行配置,接收J(rèn)SP輸入字段形成Action form,然后調(diào)用一個(gè)Action控制器。Action控制器中提供了model的邏輯接口。
二、什么是WebService?
答:
WebService是一個(gè)SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語言,不依賴于平臺(tái),可以實(shí)現(xiàn)不同的語言間的相互調(diào)用,通過Internet進(jìn)行基于Http協(xié)議的網(wǎng)絡(luò)應(yīng)用間的交互。
WebService實(shí)現(xiàn)不同語言間的調(diào)用,是依托于一個(gè)標(biāo)準(zhǔn),webservice是需要遵守WSDL(web服務(wù)定義語言)/SOAP(簡(jiǎn)單請(qǐng)求協(xié)議)規(guī)范的。WebService=WSDL+SOAP+UDDI(webservice的注冊(cè))
Soap是由Soap的part和0個(gè)或多個(gè)附件組成,一般只有part,在part中有Envelope和Body。
Web Service是通過提供標(biāo)準(zhǔn)的協(xié)議和接口,可以讓不同的程序集成的一種SOA架構(gòu)。
Web Service的優(yōu)點(diǎn)
(1)可以讓異構(gòu)的程序相互訪問(跨平臺(tái))
(2)松耦合
(3)基于標(biāo)準(zhǔn)協(xié)議(通用語言,允許其他程序訪問)Web Service的基本原理
(1)Service Provider采用WSDL描述服務(wù)
(2)Service Provider 采用UDDI將服務(wù)的描述文件發(fā)布到UDDI服務(wù)器(Register server)
(3)Service Requestor在UDDI服務(wù)器上查詢并 獲取WSDL文件
(4)Service requestor將請(qǐng)求綁定到SOAP,并訪問相應(yīng)的服務(wù)。
三、什么是中間件?
中間件就是程序中可織入的,可重用的,與業(yè)務(wù)邏輯無關(guān)的各種組件。
中間件(middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用軟件的范疇。顧名思義,中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間。中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件的下層,總的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。
在眾多關(guān)于中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。
分類:數(shù)據(jù)訪問中間件,遠(yuǎn)程調(diào)用中間件,消息中間件,交易中間件,對(duì)象中間件。舉例:
1,RMI(Remote Method Invocations, 遠(yuǎn)程調(diào)用)
2,Load Balancing(負(fù)載均衡,將訪問負(fù)荷分散到各個(gè)服務(wù)器中)3,Transparent Fail-over(透明的故障切換)4,Clustering(集群,用多個(gè)小的服務(wù)器代替大型機(jī))
5,Back-end-Integration(后端集成,用現(xiàn)有的、新開發(fā)的系統(tǒng)如何去集成遺留的系統(tǒng))6,Transaction事務(wù)(全局/局部)全局事務(wù)(分布式事務(wù))局部事務(wù)(在同一數(shù)據(jù)庫聯(lián)接內(nèi)的事務(wù))
7,Dynamic Redeployment(動(dòng)態(tài)重新部署,在不停止原系統(tǒng)的情況下,部署新的系統(tǒng))8,System Management(系統(tǒng)管理)9,Threading(多線程處理)10,Message-oriented Middleware面向消息的中間件(異步的調(diào)用編程)11,Component Life Cycle(組件的生命周期管理)12,Resource pooling(資源池)13,Security(安全)14,Caching(緩存)
四、什么是典型的軟件三層結(jié)構(gòu)?軟件設(shè)計(jì)為什么要分層?軟件分層有什么好處? 答:(1)Presentation layer(表示層)
(1)表示邏輯(生成界面代碼)
(2)接收請(qǐng)求
(3)處理業(yè)務(wù)層拋出的異常
(4)負(fù)責(zé)規(guī)則驗(yàn)證(數(shù)據(jù)格式,數(shù)據(jù)非空等)
(5)流程控制
(2)Service layer(服務(wù)層/業(yè)務(wù)層)
(1)封裝業(yè)務(wù)邏輯處理,并且對(duì)外暴露接口
(2)負(fù)責(zé)事務(wù),安全等服務(wù)(3)Persistence layer(持久層)
(1)封裝數(shù)據(jù)訪問的邏輯,暴露接口
(2)提供方便的數(shù)據(jù)訪問的方案(查詢語言,API,映射機(jī)制等)Domain layer(域?qū)樱?/p>
(1)業(yè)務(wù)對(duì)象以及業(yè)務(wù)關(guān)系的表示
(2)處理簡(jiǎn)單的業(yè)務(wù)邏輯
(3)域?qū)拥膶?duì)象可以穿越表示層,業(yè)務(wù)層,持久層
軟件分層結(jié)構(gòu)使得代碼維護(hù)非常方便,設(shè)計(jì)明確,各層獨(dú)立,專注自己擅長(zhǎng)的領(lǐng)域。
五、什么是OOP?OOP相對(duì)于面向過程編程有哪些優(yōu)點(diǎn)?
OOP,Object-Oriented Programming,面向?qū)ο缶幊滩煌诿嫦蜻^程編程:
(1)OOP關(guān)注對(duì)象和角色,也就是事物的本質(zhì)
1)OOP把客觀世界中的對(duì)象抽象成對(duì)應(yīng)的類;
2)通過類構(gòu)造實(shí)例;
3)通過依賴、繼承、實(shí)現(xiàn)等形式建立對(duì)象間的通信關(guān)系
(2)OOP易于擴(kuò)展,增加或改變業(yè)務(wù)的功能,無需大幅改動(dòng)改變?cè)创a
(3)OOP易于建模,OOP就是軟件架構(gòu)師在計(jì)算機(jī)高級(jí)語言中對(duì)客觀世界的抽象和再現(xiàn),人們可以很好地理解和建立起計(jì)算機(jī)中的抽象模型
六、談?wù)凮verload和Override的區(qū)別。
答:
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫(Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
七、談?wù)凥ashMap和Hashtable的區(qū)別。
答:
HashMap是輕量級(jí)的(線程不安全的,效率高的)集合,Hashtable是重量級(jí)的(線程安全的,效率低的)集合。
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。
Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?/p>
八、請(qǐng)問abstract class和interface有什么區(qū)別? 答:
1)接口沒有任何的實(shí)現(xiàn),而抽象類它可以有部分的實(shí)現(xiàn)也可以沒有;
2)如果需要復(fù)用或者共享部分代碼,應(yīng)該用抽象類而不是接口;
3)繼承無法解決類型的轉(zhuǎn)換問題,接口就是為了解決這一問題而產(chǎn)生的(Java的單繼
承是接口產(chǎn)生的根本原因)接口是一種抽象的 DML
[Data Manipulation Language, 數(shù)據(jù)操作語言] WYSIWYG
所見即所得 [What You See is What You Get] CMP CMT B2B C2C B2C IDE DOM Client/Server CMM ORM MIS MVC
MVC是Model-View-Controller的簡(jiǎn)寫。“Model” 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)),“View” 是應(yīng)用的表示面(由JSP頁面產(chǎn)生),“Controller” 是提供應(yīng)用的處理過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過程 和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。OLE CORBA
CORBA 標(biāo)準(zhǔn)是公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對(duì)象管理組織(Object Management Group,縮寫為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。其目的為: 用不同的程序設(shè)計(jì)語言書寫
在不同的進(jìn)程中運(yùn)行
為不同的操作系統(tǒng)開發(fā)。UML
UML,標(biāo)準(zhǔn)建模語言,包含用例圖,靜態(tài)圖(包括類圖、對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖等。XML CMMI JRE J2EE J2EE是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用
模型(enterpriese application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。JDK AOP OO Container W3C JMS Domain POJO JVM JNDI JTA SOAP
[Simple Object Access Protocol,簡(jiǎn)單對(duì)象訪問協(xié)議] WSDL JDO
JDO是Java對(duì)象持久化的新的規(guī)范,為Java Data Object的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉庫中的對(duì)
象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開發(fā)人員來說,存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來,從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫、文件、XML以及對(duì)象數(shù)據(jù)庫(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。TDD DAO IoC
[Inversion of Control, 控制反轉(zhuǎn)] RMI DNS
[Internet Domain Name System, 因特網(wǎng)域名系統(tǒng)] URL URI
二十四、數(shù)據(jù)庫連接池的工作機(jī)制 二
十五、互聯(lián)網(wǎng)提供哪些服務(wù)?
二
十六、請(qǐng)寫出JSP的幾個(gè)隱含內(nèi)置對(duì)象 答:JSP中隱含內(nèi)置對(duì)象
名稱
類型
注釋和范圍
request
javax.servlet.http.HttpServletRequest
request
response
javax.servlet.http.HttpServletResponse
response
page
javax.lang.Object
page
Exception
java.lang.Throwable
page
pageContext javax.servlet.jsp.PageContext
page
session
javax.servlet.http.HttpSession
session
application javax.servlet.ServletContext
ServletContext
out
javax.servlet.jsp.JspWriter
OutputStream
config
javax.servlet.ServletConfig
ServletConfig
JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對(duì)應(yīng)):
request
用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來自GET/POST請(qǐng)求的參數(shù)
response
網(wǎng)頁傳回用戶端的回應(yīng)
page JSP
網(wǎng)頁本身
exception
針對(duì)錯(cuò)誤網(wǎng)頁,未捕捉的例外 pageContext
網(wǎng)頁的屬性是在這里管理
session
與請(qǐng)求有關(guān)的會(huì)話期
application servlet 正在執(zhí)行的內(nèi)容
out
用來傳送回應(yīng)的輸出
config
Servlet的構(gòu)架部件
二十七、請(qǐng)你談?wù)凷SH整合 答:SSH:
Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層)
Struts:
Struts是一個(gè)表示層框架,主要作用是界面展示,接收請(qǐng)求,分發(fā)請(qǐng)求。
在MVC框架中,Struts屬于VC層次,負(fù)責(zé)界面表現(xiàn),負(fù)責(zé)MVC關(guān)系的分發(fā)。(View:沿用JSP,HTTP,F(xiàn)orm,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)
Hibernate:
Hibernate是一個(gè)持久層框架,它只負(fù)責(zé)與關(guān)系數(shù)據(jù)庫的操作。
Spring:
Spring是一個(gè)業(yè)務(wù)層框架,是一個(gè)整合的框架,能夠很好地黏合表示層與持久層。
二十八、應(yīng)用服務(wù)器與Web Server的區(qū)別
二十九、Java Servlet API中forward()與redirect()的區(qū)別 答:
前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。
三
十、寫一個(gè)簡(jiǎn)單的C/S結(jié)構(gòu)程序,Java 的通信編程,編程題(或問答),用JAVA SOCKET編程,讀服務(wù)器幾個(gè)字符,再寫入本地顯示?
答:Server端程序: package test;import java.net.*;import java.io.*;public class Server { private ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Server(){ try { ss=new ServerSocket(10000);while(true){ socket = ss.accept();String RemoteIP = socket.getInetAddress().getHostAddress();String RemotePort = “:”+socket.getLocalPort();System.out.println(“A client come
in!IP:”+RemoteIP+RemotePort);in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line = in.readLine();System.out.println(“Cleint send is :” + line);out = new PrintWriter(socket.getOutputStream(),true);out.println(“Your Message Received!”);out.close();in.close();socket.close();} }catch(IOException e){ out.println(“wrong”);} } public static void main(String[] args){ new Server();} };
Client端程序: package test;import java.io.*;import java.net.*;public class Client { Socket socket;BufferedReader in;PrintWriter out;public Client(){ try { System.out.println(“Try to Connect to 127.0.0.1:10000”);socket = new Socket(“127.0.0.1”,10000);System.out.println(“The Server Connected!”);System.out.println(“Please enter some Character:”);BufferedReader line = new BufferedReader(new InputStreamReader(System.in));out = new PrintWriter(socket.getOutputStream(),true);out.println(line.readLine());in = new BufferedReader(new InputStreamReader(socket.getInputStream()));System.out.println(in.readLine());out.close();in.close();socket.close();}catch(IOException e){ out.println(“Wrong”);} } public static void main(String[] args){ new Client();} };
第五篇:Java面試題(答案版)
作者:楊金輝
1、一個(gè)“.java”源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?
可以,但是只能有一個(gè)類用public修飾,并且用public修飾的類名與文件名要一致
2、&和&&的區(qū)別。
&和&&都可以用作邏輯與;&&還具有短路功能,即如果第一個(gè)表達(dá)式的結(jié)果為false,則不再計(jì)算第二個(gè)表達(dá)式;&還可以用作位運(yùn)算符,當(dāng)&操作符兩邊的表達(dá)式不是boolean類型時(shí),&表示按位與操作。
3、Java有沒有g(shù)oto? java中的保留字,現(xiàn)在沒有在java中使用。
4、在JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)?
break+變量控制 與 return
5、switch是否能作用在byte(拜特)上,是否能作用在long上,是否能作用在String上?
Switch可以作用在int上,而byte可以隱式轉(zhuǎn)換為int 所以能作用在byte上
不能作用在long上,也不能作用在String上
6、short s1 = 1;s1 = s1 + 1;有什么錯(cuò)? short s1 = 1;s1 += 1;有什么錯(cuò)?
1在java中為int數(shù)據(jù)類型,short+int=int,大類型轉(zhuǎn)為小類型,編譯時(shí),會(huì)報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。s1+=1不會(huì)報(bào),因?yàn)镴VM會(huì)對(duì)它特殊處理(自動(dòng)強(qiáng)轉(zhuǎn))
7、char型變量中能不能存貯一個(gè)中文漢字?為什么? 可以,char型變量是用來存儲(chǔ)unicode(依妮Q特)編碼的,而unicode編碼包含了中文,所以是可以保存的
8、編程題: 用最有效率的方法算出2乘以8等於幾?
2<<3,表示將2左移3位;一個(gè)數(shù)左移幾位就表示這個(gè)數(shù)乘以了2的幾次方,左移運(yùn)算,CPU直接支持,所以是最有效率的
9、請(qǐng)?jiān)O(shè)計(jì)一個(gè)一百億的計(jì)算器
思路:用兩個(gè)數(shù)組分別保存兩個(gè)操作數(shù),再新建一個(gè)數(shù)組保存結(jié)果。
10、使用final關(guān)鍵字修飾一個(gè)變量時(shí),是引用不能變,還是引用的對(duì)象不能變?
引用變量不能變
11、“==”和equals方法究竟有什么區(qū)別?
==和equals方法都可以用來比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象。
==還可以比較兩個(gè)變量的值是否相等。
equals是Object類中的方法,可以由子類重寫此方法,實(shí)現(xiàn)內(nèi)容相等。
12、靜態(tài)變量和實(shí)例變量的區(qū)別?
語法上不同: 靜態(tài)變量前要加static關(guān)鍵字,實(shí)例變量不需要
程序運(yùn)行時(shí)不同: 實(shí)例變量是屬于某個(gè)對(duì)象的,只有創(chuàng)建了對(duì)象,才會(huì)為這個(gè)對(duì)象的實(shí)例變量分配空間。靜態(tài)變量是屬于類的,當(dāng)程序加載了這個(gè)類的字節(jié)碼文件,就會(huì)為靜態(tài)變量分配空間,并且所有對(duì)象共享這個(gè)變量
13、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?
不可以,非static方法需要與對(duì)象關(guān)聯(lián)在一起的,而static方法調(diào)用時(shí)不需要對(duì)象,可以直接調(diào)用,也就是說調(diào)用static方法時(shí),可能還沒有創(chuàng)建任何實(shí)例
14、Integer與int的區(qū)別
int是java中的8種基本數(shù)據(jù)類型之一,默認(rèn)值是0,Integer是int的包裝類,默認(rèn)值是null,即Integer可以表示未賦值和賦值為0
15、(麥死)Math.round(亂的)(11.5)等於多少? Math.round(-11.5)等於多少?
作者:楊金輝
12,-11,Math.round()方法的實(shí)現(xiàn)是: Math.floor(n+0.5);
16、作用域public,private,protected,以及不寫時(shí)的區(qū)別
本類 同包 子類 其他類
public ?
?
?
? protected ?
?
?
? friendly ?
?
?
? private ?
?
?
?
17、Overload(喔我樓的)和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
Overload是重載,Override是重寫。
Overload是指在一個(gè)類中,方法名相同,參數(shù)列表不同,那么這些方法之間構(gòu)成重載。
Override是指在父子類之間,子類的方法簽名和父類的方法簽名完全一樣,那么這兩個(gè)方法構(gòu)成重寫。
Overload的方法可以改變返回值。因?yàn)檎{(diào)用方法時(shí),返回值可以接受也可以不接受,所以編譯器無法根據(jù)返回值來判斷是否重載。
18、構(gòu)造器Constructor(看似爪克特)是否可被override?
Constructor不能被繼承,所以不能override
19、接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承具體類(concrete class)? 抽象類中是否可以有靜態(tài)的main方法?
接口可以繼承接口,抽象類可以實(shí)現(xiàn)接口,抽象類可以繼承具體類,抽象類中可以有靜態(tài)的main方法
20、寫clone()方法時(shí),通常都有一行代碼,是什么?
super.clone();克隆時(shí),首先得將父類的成員克隆完。
21、面向?qū)ο蟮奶卣饔心男┓矫?/p>
封裝
封裝是把過程和數(shù)據(jù)包圍起來,對(duì)數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過一個(gè)受保護(hù)的接口訪問其他對(duì)象。
繼承
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類繼承。新類 繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或 增加新的方法使之更適合特殊的需要。
抽象
抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。
多態(tài)
多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問題。
作者:楊金輝
22、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?
靠的是父類或接口能夠指向子類或?qū)崿F(xiàn)類。程序運(yùn)行時(shí),JVM會(huì)根據(jù)內(nèi)存中實(shí)際的對(duì)象調(diào)用方法。
23、abstract(抽象)class和interface有什么區(qū)別?
1、abstract class 本質(zhì)是類,用abstract修飾類,而interface是接口,將class替換為interface
2、abstract class可以有構(gòu)造方法,interface不能有
3、abstract class中可以包含普通變量,interface所有的變量都是final static的4、abstract class中可以包含普通方法,interface中所有的方法都是抽象的。
5、abstract class中除抽象方法不可以是private修飾符外,其它成員任意;而interface中所有成員的修飾符都為public
6、abstract class可以繼承一個(gè)類實(shí)現(xiàn)多個(gè)接口,interface只能繼承接口
24、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?
abstract的方法不可以是static,abstract方法必須由子類去實(shí)現(xiàn),而static方法可以由當(dāng)前類調(diào)用。
abstract的方法不可以是native,abstract方法必須由子類去實(shí)現(xiàn),而native是調(diào)用其它程序語言的代碼,所以不存在由子類去實(shí)現(xiàn)的問題,矛盾。
關(guān)于abstract和synchronized同用的問題,我覺得也不行,因?yàn)樵谶@幾年的開發(fā)中,從沒見過這種情況,而且我覺得synchronized應(yīng)該是作用在一個(gè)具體的方法上才有意義。
25、什么是內(nèi)部類?
在一個(gè)類的內(nèi)部定義的類叫做內(nèi)部類。
26、內(nèi)部類可以引用外部類的成員嗎?有沒有什么限制?
如果不是靜態(tài)內(nèi)部類,完全可以。
27、Static Nested Class 和 Inner Class的不同。
Nested Class一般是C++的說法,Inner Class一般是Java的說法,指的是同一意思。
內(nèi)部類分為靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類。
靜態(tài)內(nèi)部類中可以包含靜態(tài)成員,非靜態(tài)內(nèi)部類中不可以包含靜態(tài)成員。
靜態(tài)內(nèi)部類中不能引用外部類中的實(shí)例成員。非靜態(tài)內(nèi)部類則沒有這個(gè)限制。
28、Anonymous Inner Class(匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)?
可以繼承其它類,可以實(shí)現(xiàn)接口
29、String是最基本的數(shù)據(jù)類型嗎?
不是,基本數(shù)據(jù)類型是:byte short int long float double char boolean 30、String s = “Hello”;s = s + “ world!”;這兩行代碼執(zhí)行后,原始的String對(duì)象中的內(nèi)容到底變了沒有?
沒有,String類被設(shè)計(jì)為不可變的類。所以它的所有對(duì)象都不可變。
31、是否可以繼承String類?
不可以。String被final修飾,被final修飾的類不可被繼承。
32、String s = new String(“xyz”);創(chuàng)建了幾個(gè)String Object? 二者之間有什么區(qū)別?
2個(gè)對(duì)象。一個(gè)放在常量區(qū),不管寫多少遍,永遠(yuǎn)只有一個(gè)。一個(gè)放在堆內(nèi)存中。每次new String就產(chǎn)生一個(gè)新的。
33、String 和StringBuffer的區(qū)別
String和StringBuffer都是操作字符串的類。
String類被設(shè)計(jì)為不可變,而StringBuffer可變。
34、如何把一段逗號(hào)分割的字符串轉(zhuǎn)換成一個(gè)數(shù)組?
作者:楊金輝
第一種用正則表達(dá)式的方式:String類的split方法
第二種方式:StringTokenizer,代碼為: new StringTokenizer(“1,2,3,4”,”,”);
35、數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法?
數(shù)組是length屬性,String有l(wèi)ength()這個(gè)方法
36、try {}里有一個(gè)return語句,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?
會(huì),return前
38、final, finally, finalize的區(qū)別。
final用來修飾類,變量,方法的。修飾類表示類不可被繼承,修飾變量表示變量的引用不可變,修飾方法表示方法不可被重寫。
finally是異常處理結(jié)構(gòu)中的一部分,表示一定會(huì)執(zhí)行。
finalize是Object類的方法,當(dāng)垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用此對(duì)象的這個(gè)方法。
39、運(yùn)行時(shí)異常與一般異常有何異同?
一般異常強(qiáng)制要求捕獲或聲明。
運(yùn)行時(shí)異??梢圆东@,也可以不捕獲。40、error和exception有什么區(qū)別?
error表示恢復(fù)不是不可能但是很困難的情況下的一種嚴(yán)重問題。例如:內(nèi)存溢出
exception表示程序的設(shè)計(jì)或?qū)崿F(xiàn)有問題。也就是說如果程序正常運(yùn)行,不會(huì)發(fā)生的情況。
41、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。
當(dāng)Java程序違反了Java的語義規(guī)則時(shí),JVM就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語義規(guī)則包括兩種:一種是Java類庫內(nèi)置的語義檢查,另一種是程序員自己定義的異常。
42、給我一個(gè)你最常見到的runtime(茹二樓)exception。
ArithMaticException NullPointException IndexOfBoundException HibernateException(子類:CacheException,LazyInitializationException,MappingException)NestedRuntimeException(AopConfigException,AopInvocationException)
43、JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?
throws 用來表名方法可能拋出異常。throw 用來明確的拋一個(gè)異常。
try 用來監(jiān)控一段可能出現(xiàn)異常的代碼。當(dāng)出現(xiàn)異常后進(jìn)入catch塊,進(jìn)行異常類型匹配
finally表示無論是否出現(xiàn)異常都要執(zhí)行的代碼。
44、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?
有兩種實(shí)現(xiàn)方法,分別是繼承Thread(斯 read)類與實(shí)現(xiàn)Runnable(軟的包)接口
用synchronized(新鬼耐斯特)關(guān)鍵字修飾同步方法
因?yàn)樗麄兪蔷€程的方法,不安全,當(dāng)已啟動(dòng)后,就想脫韁野馬難以把控
45、sleep()(斯瑞譜)和 wait()(外特)有什么區(qū)別?
1、sleep是線程類的方法 wait 是Object類的方法
2、sleep會(huì)自動(dòng)醒來 wait需要notify喚醒
3、sleep不會(huì)釋放鎖 wait會(huì)釋放鎖
46、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
作者:楊金輝
48、多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法?
多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
同步的實(shí)現(xiàn)方面有三種:
1、同步代碼塊
2、同步方法
3、Lock
49、啟動(dòng)一個(gè)線程是用run()還是start()?.Start()(斯達(dá)特)
50、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
分幾種情況:
1.其他方法前是否加了synchronized關(guān)鍵字,如果沒加,則能。
2.如果這個(gè)方法內(nèi)部調(diào)用了wait,則可以進(jìn)入其他synchronized方法。
3.如果其他個(gè)方法都加了synchronized關(guān)鍵字,并且內(nèi)部沒有調(diào)用wait,則不能。
51、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系
線程就是進(jìn)程中的一個(gè)執(zhí)行線路。
新建new Thread();就緒:thread.start();運(yùn)行,阻塞,掛起,結(jié)束。
創(chuàng)建一個(gè)線程,這時(shí)狀態(tài)為新建,當(dāng)調(diào)用start方法后轉(zhuǎn)為就緒,再由線程調(diào)度器將就緒狀態(tài)轉(zhuǎn)為運(yùn)行狀態(tài),遇到synchronized語句后,可能由運(yùn)行狀態(tài)改為阻塞狀態(tài),當(dāng)獲得synchronized鎖后由阻塞狀態(tài)轉(zhuǎn)為運(yùn)行,這時(shí)調(diào)用wait方法轉(zhuǎn)為掛起狀態(tài)。當(dāng)線程關(guān)聯(lián)的代碼執(zhí)行完成后。線程轉(zhuǎn)為結(jié)束。
52、簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同 ?
主要相同點(diǎn):Lock(拉克)能完成synchronized所實(shí)現(xiàn)的所有功能
主要不同點(diǎn):Lock有比synchronized更精確的線程語義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。
54、ArrayList和Vector的區(qū)別
ArrayList和Vector都實(shí)現(xiàn)了List接口。
ArrayList是線程不安全的,Vector是線程安全的。
ArrayList的增長(zhǎng)方式為*3/2+1 Vector的增長(zhǎng)方式為*2,Vector還可以設(shè)置增長(zhǎng)量。
55、HashMap和Hashtable的區(qū)別
Hashtable和HashMap都實(shí)現(xiàn)了Map接口。
Hashtable是線程安全的,HashMap是線程不安全的。
Hashtable不允許鍵值為null,HashMap允許。
Hashtable自JDK1.0就有了,HashMap到1.2才出來。
Map中有2個(gè)方法分別是containsKey(康騰思Key)和containsValue;Hashtable中還有個(gè)contains方法,容易讓人誤解,HashMap沒有。
56、List 和 Map 區(qū)別? List是存儲(chǔ)單列數(shù)據(jù)的有序集合,允許重復(fù)。而Map是鍵值對(duì)雙列數(shù)據(jù)的集合。鍵不允許重復(fù),值可以重復(fù)。
57、List, Set, Map是否繼承自Collection接口?
Collection(克萊克神)是集合類的頂級(jí)接口,其子接口分別是List和Set List下有ArrayList,LinkedList Set下有HashSet TreeSet Collection和Map沒有關(guān)系,Map是HashMap的父接口
58、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?
作者:楊金輝
List以特定的次序來持有元素,允許重復(fù)。
Set無法擁有重復(fù)元素,內(nèi)部排序。
Map保存key-value值,key不可重復(fù),value可重復(fù)。
59、說出ArrayList,Vector, LinkedList的存儲(chǔ)性能和特性
ArrayList和Vector都是使用數(shù)組存儲(chǔ)數(shù)據(jù)。查找快,插入慢。由于Vector是線程安全的,所以性能上比ArrayList差。
LinkedList是鏈表結(jié)構(gòu)。插入快,查找慢。60、去掉一個(gè)Vector集合中重復(fù)的元素
最簡(jiǎn)單的方式:HashSet set = new HashSet(vector);61、Collection 和 Collections的區(qū)別。
Collection是集合類的頂級(jí)接口,而Collections是集合類的輔助類,如:將一個(gè)數(shù)組的元素copy到另一個(gè)集合。
62、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?
equals,區(qū)別見11題
63、你所知道的集合類都有哪些?主要方法?
集合類有(畫集合類的體系結(jié)構(gòu))ArrayList的主要方法:add,get,remove,contains,indexOf,isEmpty,toArray,iterator LinkedList的主要方法:add,get,remove,addFirst,addLast,getFirst,getLast,iterator HashSet的主要方法:add,iterator,remove HashMap的主要方法:put,get,remove,entrySet,keyset,values 64、兩個(gè)對(duì)象值相同(x.equals(y)== true),但卻可有不同的hash code,這句話對(duì)不對(duì)?
對(duì)。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 65、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說出他們分別是哪些類?
根據(jù)功能分:輸入流,輸出流 根據(jù)類型分:字節(jié)流,字符流
輸入字節(jié)流的抽象類:InputStream 輸出字節(jié)流的抽象類:OutputStream(Stream斯俊木)
輸入字符流的抽象類:Reader(瑞得)
輸出字符流的抽象類:Writer(ruai 的)66、什么是java序列化,如何實(shí)現(xiàn)java序列化?
序列化就是指將內(nèi)存中的一個(gè)對(duì)象存儲(chǔ)到硬盤中或者轉(zhuǎn)為字節(jié)碼作網(wǎng)絡(luò)傳輸。
實(shí)現(xiàn)Serializable(修兒奈斯啵)接口。
67、描述一下JVM加載class文件的原理機(jī)制?
JVM中類的加載是由ClassLoader和它的子類來實(shí)現(xiàn)的。Java Class Loader是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件。它是一個(gè)負(fù)責(zé)查找和裝入類文件的類。68、heap(細(xì)譜)和stack(死大克)有什么區(qū)別。
stack是用來保存基本數(shù)據(jù)類型,以及變量的引用。小,速度快
heap是用來保存new 出來的對(duì)象。大,速度慢。69、GC是什么? 為什么要有GC?
GC是Garbage Collection(垃圾回收)。內(nèi)存處理是程序員容易出現(xiàn)問題的地方。忘記回收或錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰。Java提供的GC可以自動(dòng)檢測(cè)對(duì)象是否已經(jīng)死亡,從而進(jìn)行回收內(nèi)存。
70、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。
垃圾回收機(jī)制使得程序員不需要關(guān)注內(nèi)存的回收和釋放,提高了程序的健壯性。
作者:楊金輝
垃圾回收器通常是作為一個(gè)單獨(dú)的低級(jí)別線程運(yùn)行。當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開始監(jiān)測(cè)這個(gè)對(duì)象的地址、大小及使用情況,通常,GC采用有向圖的方式記錄和管理堆中的所有對(duì)象。通過這種方式確定哪些對(duì)象是”不可達(dá)”時(shí),GC就有責(zé)任回收這些內(nèi)存空間。
標(biāo)記垃圾回收機(jī)制和分帶復(fù)制垃圾回收機(jī)制。71、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收?
垃圾回收器通常是作為一個(gè)單獨(dú)的低級(jí)別線程運(yùn)行。當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開始監(jiān)測(cè)這個(gè)對(duì)象的地址、大小及使用情況,通常,GC采用有向圖的方式記錄和管理堆中的所有對(duì)象。通過這種方式確定哪些對(duì)象是”不可達(dá)”時(shí),GC就有責(zé)任回收這些內(nèi)存空間。
可以。通過System.gc();或者Runtime.getRuntime().gc();來通知GC回收內(nèi)存,但是Java語言規(guī)范不保證GC一定會(huì)執(zhí)行。72、什么時(shí)候用assert(額色特)。
assert(斷言)是程序開發(fā)中一種常見的調(diào)試方式。73、java中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述。
會(huì)。內(nèi)存泄漏就是指一個(gè)不再被程序使用的對(duì)象一直占據(jù)著內(nèi)存。
長(zhǎng)生命周期的對(duì)象持有短生命周期對(duì)象的引用就很可能發(fā)生內(nèi)存泄露,盡管短生命周期對(duì)象已經(jīng)不再需要,但是因?yàn)殚L(zhǎng)生命周期對(duì)象持有它的引用而導(dǎo)致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場(chǎng)景
75、說出一些常用的類,包,接口,請(qǐng)各舉5個(gè)
包:(Spring)org.springframework.context,org.springframework.web.context, org.springframework.web.context.filter,org.springframework.orm.hibernate3.support
(Hibernate)org.hibernate,org.hibernate.cfg
(Struts)org.apache.struts.actions,org.apache.struts.upload
(DWR)org.directwebremoting.servlet
接口:(Spring)ApplicationContext,(Hibernate)SessionFactory,Session,Query,Criteria,SQLQuery,Transaction
(Struts)FormFile
類:(Spring)ClassPathApplicationContext, OpenSessionInViewFilter,CharacterEncodingFilter
(Hibernate)Configuration,Hibernate
(Struts)ActionForm,Action,DispatchAction,MappingDisactionAction
(DWR)DwrServlet 77、能不能自己寫個(gè)類,也叫java.lang.String?
能,但是沒什么價(jià)值。
79、說明生活中遇到的二叉樹,用java實(shí)現(xiàn)二叉樹 81、寫一個(gè)Singleton(省構(gòu)騰)出來。
1、構(gòu)造私有
2、一個(gè)靜態(tài)的自身屬性,初始化
3、提供共有的訪問自身屬性的方法
84、排序都有哪幾種方法?請(qǐng)列舉。用JAVA實(shí)現(xiàn)一個(gè)快速排序。
冒泡排序,插入排序,選擇排序,快速排序 90、HTTP請(qǐng)求的GET與POST方式的區(qū)別
1、Get方式請(qǐng)求的字符串長(zhǎng)度不能超過255,Post理論上沒有限制。
作者:楊金輝
2、Get方式會(huì)將請(qǐng)求的內(nèi)容在地址欄顯示,Post不會(huì)。所以Get方式不安全,Post方式安全。
91、解釋一下什么是servlet;servlet就是運(yùn)行在服務(wù)器端的java小程序。92、說一說Servlet的生命周期?
出生(new),學(xué)習(xí)(init),服務(wù)(service),死亡(destroy)93、Servlet的基本架構(gòu)
public MyServlet extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse resp)throws IOException,ServletException{} public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{} } 94、SERVLET API中forward()與redirect()(瑞滴ruai克特)的區(qū)別?
1、forward是請(qǐng)求對(duì)象的方法,redirect是響應(yīng)對(duì)象的方法;
2、forward是轉(zhuǎn)發(fā),地址欄不會(huì)顯示轉(zhuǎn)發(fā)后的路徑,redirect是重定向,地址欄會(huì)顯示
3、forward比redirect效率更高
4、forward是1次請(qǐng)求,redirect是2次請(qǐng)求
5、forward只能在本工程內(nèi)轉(zhuǎn)向,redirect可以跳轉(zhuǎn)到其他工程 95、什么情況下調(diào)用doGet()和doPost()?
jsp頁面中的form標(biāo)簽里的method屬性為get時(shí)調(diào)用doGet(),為post時(shí)調(diào)用doPost()。96、Request對(duì)象的主要方法:
setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對(duì)象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例
getCookies():返回客戶端的所有Cookie對(duì)象,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請(qǐng)求中的字符編碼方式
getContentLength():返回請(qǐng)求的Body的長(zhǎng)度
getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():返回請(qǐng)求的輸入流,用于獲得請(qǐng)求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getParametervalues(String name):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請(qǐng)求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請(qǐng)求相關(guān)Session
作者:楊金輝
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請(qǐng)求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號(hào)
removeAttribute(String name):刪除請(qǐng)求中的一個(gè)屬性
97、forward 和redirect的區(qū)別
98、request.getAttribute()和 request.getParameter()有何區(qū)別?
1、request.getParameter()從 請(qǐng)求中的參數(shù)中取值;request.getAttribute()從 請(qǐng)求的作用域中取值
2、request.getParameter()返回 String類型;request.getAttribute()返回Object類型
99、jsp有哪些內(nèi)置對(duì)象?作用分別是什么? 分別有什么方法?
JSP共有以下9個(gè)內(nèi)置的對(duì)象:
request----用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來自GET/POST請(qǐng)求的參數(shù)
response----網(wǎng)頁傳回用戶端的回應(yīng)
pageContext----網(wǎng)頁的屬性是在這里管理
session----與請(qǐng)求有關(guān)的會(huì)話期
application servlet 正在執(zhí)行的內(nèi)容
out----用來傳送回應(yīng)的輸出
config----servlet的構(gòu)架部件
page----JSP網(wǎng)頁本身
exception----針對(duì)錯(cuò)誤網(wǎng)頁,未捕捉的例外 100、jsp有哪些動(dòng)作?作用分別是什么?
JSP共有以下6種基本動(dòng)作
jsp:include:在頁面被請(qǐng)求的時(shí)候引入一個(gè)文件。
jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。
jsp:setProperty:設(shè)置JavaBean的屬性。
jsp:getProperty:輸出某個(gè)JavaBean的屬性。
jsp:forward:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁面。
jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記 101、JSP的常用指令
page指令 屬性: language(指示使用什么語言編譯JSP網(wǎng)頁,暫時(shí)只支持Java語言,默認(rèn)java)、extends(定義JSP網(wǎng)頁產(chǎn)生的Servlet繼承的父類)、import(同Java的import)、session(設(shè)置當(dāng)前網(wǎng)頁是否可以使用Session對(duì)象,默認(rèn)為true)、buffer(設(shè)置輸出流是否有緩沖區(qū),默認(rèn)為8KB)、autoFlush(設(shè)置是否自動(dòng)清除緩沖區(qū),緩沖區(qū)如果溢出會(huì)產(chǎn)生異常,默認(rèn)true)、isThreadSafe(設(shè)置當(dāng)前頁面是否允許處理超過1個(gè)以上的請(qǐng)求,不建議更改,默認(rèn)為true)、info(設(shè)置當(dāng)前JSP網(wǎng)頁的相關(guān)信息)、errorPage(設(shè)置一旦發(fā)生異常后重新定向哪個(gè)url)、isErrorPage(設(shè)置該JSP頁面是否為異常處理的頁面)、contentType(置MIME類型和編碼方式:text/html;charset=GBK)、pageEncoding(設(shè)置編碼方式)、isELIgnored(設(shè)置是否忽略EL表達(dá)式,默認(rèn)值為false)taglib指令
include指令
102、JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
1、靜態(tài)是指令
動(dòng)態(tài)是動(dòng)作
2、靜態(tài)只產(chǎn)生一個(gè)文件
動(dòng)態(tài)產(chǎn)生兩個(gè)
3、靜態(tài)不可以帶參數(shù)
動(dòng)態(tài)可以帶參數(shù)
作者:楊金輝
4、靜態(tài)不會(huì)動(dòng)態(tài)更新
動(dòng)態(tài)可以。
104、頁面間對(duì)象傳遞的方法
session、cookie、隱藏表單域、url重寫
105、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?
JSP 轉(zhuǎn)義以后就是servlet
1、jsp后綴名是.jsp servlet的后綴名是.java
2、jsp 側(cè)重于顯示
servlet側(cè)重于邏輯
3、jsp在mvc中屬于view
servlet屬于controller 106、MVC的各個(gè)部分都有那些技術(shù)來實(shí)現(xiàn)?如何實(shí)現(xiàn)? MVC 是Model-View-Controller的簡(jiǎn)寫.“Model” 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)), “View” 是應(yīng)用的表示面(由JSP頁面產(chǎn)生),“Controller” 是提供應(yīng)用的處理過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn).這些組件可以進(jìn)行交互和重用。
107、我們?cè)趙eb應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串?
new String(str.getByte(“原編碼”),”新編碼”);
108、現(xiàn)在輸入n個(gè)數(shù)字,以逗號(hào),分開;然后可選擇升或者降序排序;按提交鍵就在另一頁面顯示按什么排序,結(jié)果為,提供reset 109、數(shù)據(jù)庫三范式是什么? 第一范式:保證每列的原子性。
第二范式:必須要有主鍵[,并且其它列都依賴于該主鍵];第三范式:取消傳遞依賴
110、說出一些數(shù)據(jù)庫優(yōu)化方面的經(jīng)驗(yàn)?
1、存儲(chǔ)優(yōu)化
A、通過表空間將數(shù)據(jù)分散到不同的硬盤上
B、通過表分區(qū)分散數(shù)據(jù),方便備份還原
2、查詢優(yōu)化
A、通過表分區(qū)方便查詢 B、為表建立索引 C、SQL語句
111、union(優(yōu)妮安)和union all(哦)有什么不同? union去重復(fù)
union all不去重復(fù) 113、、什么是存儲(chǔ)過程和如何編寫
存儲(chǔ)過程就是存儲(chǔ)在數(shù)據(jù)庫中帶有名字的PL/SQL塊,完成一定的功能。
Create or replace procedure procName(參數(shù)in,out,in out)As|is Variable….Begin exception end 114、、注冊(cè)Jdbc驅(qū)動(dòng)程序的三種方式
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);System.setProperty(“jdbc.drivers”,” com.microsoft.sqlserver.jdbc.SQLServerDriver”);
作者:楊金輝
DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());115、、用JDBC如何調(diào)用存儲(chǔ)過程
CallableStatement callSta = con.prepareCall(“{call 過程名}”);callSta.execute();116、JDBC中的PreparedStatement相比Statement的好處
速度快,可以防止sql 注入攻擊。118、Class.forName的作用?為什么要用?
加載類文件,創(chuàng)建類對(duì)象。注冊(cè)驅(qū)動(dòng)。119、大數(shù)據(jù)量下的分頁解決方法。
我們一般采用后臺(tái)SQL語句分頁
121、說出數(shù)據(jù)連接池的工作機(jī)制是什么?
因?yàn)槲覀冊(cè)诓僮鲾?shù)據(jù)庫的時(shí)候,打開連接和關(guān)閉連接是耗時(shí),耗性能,我們希望通過一種機(jī)制減少這種開銷,這就是數(shù)據(jù)連接池的初衷;
J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并放入到一個(gè)池中,當(dāng)我需要獲得連接的時(shí)候,只需要從此池中拿到連接并標(biāo)記為繁忙,用完之后放回池中并標(biāo)記為空閑,這樣就能提高我們的訪問性能。
122、為什么要用 ORM? 和 JDBC 有何不一樣?
ORM就是Object Relational Mapping 對(duì)象關(guān)系映射,因?yàn)橛胘dbc操作數(shù)據(jù)庫代碼非常繁瑣,ORM可以將表映射成實(shí)體,與我們的OOP編程思想完全一致的,方便程序開發(fā)。但速度比jdbc慢
123、xml有哪些解析技術(shù)?區(qū)別是什么? DOM、SAX DOM是一次性將一個(gè)文件載入內(nèi)存,產(chǎn)生DOM樹,適合多次讀寫操作,適合操作小型文檔
SAX 是事件驅(qū)動(dòng)的解析方式,它不是一次性載入整個(gè)文件,而是遇到文檔開頭標(biāo)記等等觸發(fā)事件來處理,適合解析大型文檔
124、你在項(xiàng)目中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的?
1、數(shù)據(jù)交換
2、配置文件
3、存儲(chǔ)數(shù)據(jù)
125、用jdom解析xml文件時(shí)如何解決中文問題?如何解析?
import javax.xml.transform.*;Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, “gb2312”);transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, “yes”);126、編程用JAVA解析XML的方式.127、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?
a: 兩種形式 dtd schema,(是給帽)
b: 本質(zhì)區(qū)別:schema本身是xml的,比DTD有更精確的規(guī)則定義;128、BS與CS的聯(lián)系與區(qū)別。
C/S是Client/Server的縮寫。B/S是Brower/Server的縮寫,1、硬件不同,一個(gè)是局域網(wǎng),一個(gè)是廣域網(wǎng)
2、安全不同
C/S安全高
B/S
3、速度不同
C/S速度塊
作者:楊金輝
4、維護(hù)
C/S不方便維護(hù)
B/S方便維護(hù) 129、應(yīng)用服務(wù)器與WEB SERVER的區(qū)別?
1、應(yīng)用服務(wù)器處理業(yè)務(wù)邏輯,web服務(wù)器則主要是讓客戶可以通過瀏覽器進(jìn)行訪問。
2、應(yīng)用服務(wù)器處理業(yè)務(wù)邏輯,web服務(wù)器是用于處理HTML文件的。web服務(wù)器通常比應(yīng)用服務(wù)器簡(jiǎn)單,如apache就是web服務(wù)器,Jboss就是EJB應(yīng)用服務(wù)器。應(yīng)用服務(wù)器:Weblogic、Tomcat、Jboss WEB SERVER:IIS、Apache 130、應(yīng)用服務(wù)器有那些?
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat 131、J2EE是什么?
J2EE是應(yīng)用平臺(tái),是標(biāo)準(zhǔn),是框架
133、請(qǐng)對(duì)以下在J2EE中常用的名詞進(jìn)行解釋(或簡(jiǎn)單描述)
Web容器:能解析Jsp和Servlet的應(yīng)用服務(wù)器 EJB 容器:就是能解析EJB組件的應(yīng)用服務(wù)器
JNDI(Java Naming And Directory Interface)Java命名與目錄接口 JMS(Java Message Service)Java 消息服務(wù) JTA(Java Transaction API)Java事務(wù)接口
JAF(Java Action Framework)Java 安全認(rèn)證框架
RMI/IIOP(Remote Method Invocation/Internet Inter Object Request Broker Protocol)遠(yuǎn)程方法調(diào)用/互聯(lián)網(wǎng)內(nèi)部對(duì)象請(qǐng)求代理協(xié)議
150、WEB SERVICE名詞解釋。JSWDL開發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
JAXP(Java API for XML Parsing)JAXM(Java API for XML Messaging)SOAP(Simple Object Access Protocol)UDDI(Universal Description, Discovery and Integration)WSDL(Web Services Description Language)151、CORBA是什么?用途是什么?
CORBA(Common Object Request Broker Architecture,公共對(duì)象代理體系結(jié)構(gòu)
為解決分布式處理環(huán)境(DCE)中,硬件和軟件系統(tǒng)的互連而提出的一種解決方案; 152、流行的框架與新技術(shù)
Apache Struts,Spring Hibernate,Ibatis, JQuery,ext,JSF 153、談?wù)凷truts中的Action servlet。154、Struts優(yōu)缺點(diǎn)
優(yōu)點(diǎn):簡(jiǎn)化了mvc的開發(fā),標(biāo)簽庫提高開發(fā)效率 缺點(diǎn):
1、每個(gè)action都要配一個(gè)form
2、action、form之間緊耦合
3、action與web對(duì)象也是緊耦合
4、它是單實(shí)例,多線程的,安全,速度慢
5、擴(kuò)展不靈活
155、STRUTS的應(yīng)用(如STRUTS架構(gòu))
Struts是采用Servlet和Jsp技術(shù)開發(fā)的Web應(yīng)用程序的framework。
作者:楊金輝
采用Struts能開發(fā)基于MVC設(shè)計(jì)模式的應(yīng)用架構(gòu),Struts有如下的主要功能,1、包含一個(gè)Controller Servlet,將用戶的請(qǐng)求發(fā)送到不同的Action
2、為JSP頁面提供了大量的標(biāo)簽庫
3、支持國際化
156、hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。
update()方法將游離對(duì)象轉(zhuǎn)變?yōu)槌志没瘜?duì)象,然后計(jì)劃執(zhí)行一條update語句。saveOrUpdate()方法包含了save()和update(),如果傳入的參數(shù)是自由對(duì)象,則調(diào)用save()如果是游離對(duì)象,則調(diào)用update()方法
1、當(dāng)數(shù)據(jù)庫中的記錄不存在時(shí)load()方法拋出ObjectNotFoundException()而get()返回null
2、load()默認(rèn)采用的是延遲加載策略,返回的是代理對(duì)象; get()方法總是采用立即檢索策略,返回的是實(shí)際對(duì)象
157、簡(jiǎn)述 Hibernate 和 JDBC 的優(yōu)缺點(diǎn)? 如何書寫一個(gè) one to many 配置文件.Hibernate其實(shí)就是對(duì)JDBC的封裝。
Hibernate操作簡(jiǎn)單,性能差。
JDBC操作復(fù)雜,性能好。
158、iBatis與Hibernate有什么不同? iBatis介于Hibernate與JDBC之間,性能比Hibernate好,操作比JDBC簡(jiǎn)單,都是持久層的框架。
159、介紹一下Hibernate的二級(jí)緩存
緩存就是指把查詢出來的數(shù)據(jù)或?qū)ο蟊4嬖趦?nèi)存(Hashmap)中,以減少查詢除數(shù)。
Session是Hibernate的一級(jí)緩存。只能是當(dāng)前Session共享緩存。
SessionFactory是Hibernate的二級(jí)緩存,它可以使多個(gè)Session中共享緩存。
160、Spring 的依賴注入是什么意思? 給一個(gè) Bean 的 message 屬性, 字符串類型, 注入值為 “Hello” 的 XML 配置文件該怎么寫? 161、Jdo是什么?
Java Data Object,java數(shù)據(jù)對(duì)象,比jdbc更通用 162、什么是spring的IOC AOP 163、STRUTS的工作流程!
164、怎樣消除遞歸?
使用棧和循環(huán)。165、UML方面
Unified Modeling Language統(tǒng)一建模語言,用來畫用例圖,靜態(tài)圖(包括類圖,對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖,流程圖 166、軟件開發(fā)的
167、j2ee常用的設(shè)計(jì)模式?說明工廠模式。
工廠模式,代理模式,單例模式,責(zé)任鏈,觀察者 168、開發(fā)中都用到了那些設(shè)計(jì)模式?用在什么場(chǎng)合?
工廠模式,代理模式,單例模式
170、LINUX下線程,GDI類的解釋。
作者:楊金輝
LINUX實(shí)現(xiàn)的就是基于核心輕量級(jí)進(jìn)程的“一對(duì)一”線程模型,一個(gè)線程實(shí)體對(duì)應(yīng)一個(gè)核心輕量級(jí)進(jìn)程,而線程之間的管理在核外函數(shù)庫中實(shí)現(xiàn).GDI類為圖像設(shè)備編程接口類庫
172、四種會(huì)話跟蹤技術(shù)
URL重寫,Cookie,Session,隱藏表單域
173、簡(jiǎn)述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別。
174、請(qǐng)用英文簡(jiǎn)單介紹一下自己.175、請(qǐng)把 http://tomcat.apache.org/ 首頁的這一段話用中文翻譯一下? 176、美資軟件公司JAVA工程師電話面試題目
177、左聯(lián)跟外聯(lián)各指什么?有什么區(qū)別? 178、javascript怎么創(chuàng)建一個(gè)xml document