北京一家JAVA開(kāi)發(fā)公司面試題(留給后人)
cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-10-26 12:20:43 在 Java / Web 開(kāi)發(fā) 提問(wèn)
1、jsp有哪些內(nèi)置對(duì)象?作用分別是什么?
2、描述一下servlet的生命周期和基本架構(gòu)。
3、多線程有幾種實(shí)現(xiàn)方法,都是什么?
????? 同步有幾種實(shí)現(xiàn)方法,都是什么?
4、作用域public?? private?? protected以及不寫(xiě)時(shí)的區(qū)別?
5、用JAVA實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢(寫(xiě)一段完整的程序)。
6、用正則表達(dá)式判斷123456_78不是一個(gè)數(shù)字。
7、排序都有哪幾種方法?請(qǐng)列舉。用JAVA實(shí)現(xiàn)一個(gè)快速排序。
---------------------------------------------------------------
以上是北京一家JAVA開(kāi)發(fā)公司出的面試題,在這里貼出來(lái)是想留給剛出道且正在找工作的JAVA兄弟。
也希望這里的高高手給出正確答案,以給后人一些借鑒,造福于后人!
out---Jsp.jspWriter的對(duì)象,在html上顯示內(nèi)容
request---HttpServlet的對(duì)象,包含請(qǐng)求信息
response---HttpServlet的對(duì)象,對(duì)請(qǐng)求所作出的響應(yīng)
session---HttpSession的對(duì)象,每個(gè)客戶與當(dāng)前請(qǐng)求建立的唯一的會(huì)話
exception--throwable的子類,請(qǐng)求發(fā)生錯(cuò)誤時(shí)拋出的異常
page--相當(dāng)于this
servelt的生命自web服務(wù)器啟動(dòng)時(shí)開(kāi)始至服務(wù)器關(guān)閉時(shí)結(jié)束,jvm第一次加載后駐留在內(nèi)存中,所有請(qǐng)求共享同一個(gè)servlet,包括init(),service(),start(),stop(),destrop(),doGet(),doPost()等方法,第一次加載時(shí)首先call?? init()方法,然后service()方法,不說(shuō)了不說(shuō)了,太羅嗦了,
1。當(dāng)一個(gè)線程進(jìn)入moniter(也就是說(shuō)站用一個(gè)object),另一個(gè)線程只有等待或返回,而我們把返回就稱為一種模式,這種模式的英文是Balking。??
2。這兩個(gè)線程可以是有序的執(zhí)行,而不是讓OS來(lái)調(diào)度,這時(shí)我們要用一個(gè)object來(lái)調(diào)度,這種模式稱為Scheduler。(這個(gè)詞及其含義其實(shí)OS中就有)。??
3。如果這兩個(gè)線程同時(shí)讀一個(gè)資源,我們可以讓他們執(zhí)行,但如果同時(shí)寫(xiě)的話,你閉著眼睛都會(huì)知道可能出現(xiàn)問(wèn)題,這時(shí)我們就要用另一種模式(Read/Write?? Lock)。??
4。如果一個(gè)線程是為另一個(gè)線程服務(wù)的話,比如IE中負(fù)責(zé)數(shù)據(jù)傳輸?shù)木€程和界面顯示的線程,當(dāng)一個(gè)圖片沒(méi)有傳完時(shí),另一個(gè)線程就無(wú)法顯示,至少是部分沒(méi)有傳完。那么這時(shí)我們要用一個(gè)模式稱為生產(chǎn)者和消費(fèi)者,英文是Producer-Consumer。??
5。兩個(gè)線程的消亡也可以不是完全又OS來(lái)控制的,這時(shí)我們需要給出一個(gè)條件,使得每個(gè)線程在符合條件是才消亡,也就是有序的消亡,我們稱為T(mén)wo-Phase?? Termination。
1.?????? JSP有哪些內(nèi)置對(duì)象?作用分別是什么?
(1)?? HttpServletRequest類的Request對(duì)象
作用:代表請(qǐng)求對(duì)象,主要用于接受客戶端通過(guò)HTTP協(xié)議連接傳輸?shù)椒?wù)器端的數(shù)據(jù)。
(2)?? HttpServletResponse類的Respone對(duì)象
作用:代表響應(yīng)對(duì)象,主要用于向客戶端發(fā)送數(shù)據(jù)
(3)?? JspWriter類的out對(duì)象
作用:主要用于向客戶端輸出數(shù)據(jù);??
??????????????? Out的基類是JspWriter
(4)?? HttpSession類的session對(duì)象
作用:主要用于來(lái)分別保存每個(gè)用戶信息,與請(qǐng)求關(guān)聯(lián)的會(huì)話;
????????????????? 會(huì)話狀態(tài)維持是Web應(yīng)用開(kāi)發(fā)者必須面對(duì)的問(wèn)題。
(5)?? ServletContex類的application對(duì)象
作用:主要用于保存用戶信息,代碼片段的運(yùn)行環(huán)境;
??????????????? 它是一個(gè)共享的內(nèi)置對(duì)象,即一個(gè)容器中的多個(gè)用戶共享一個(gè)application對(duì)象,故其保存的信息被所有用戶所共享.
(6)?? PageContext類的PageContext對(duì)象
作用:管理網(wǎng)頁(yè)屬性,為JSP頁(yè)面包裝頁(yè)面的上下文,管理對(duì)屬于JSP中特殊可見(jiàn)部分中已命名對(duì)象的訪問(wèn),它的創(chuàng)建和初始化都是由容器來(lái)完成的。
(7)?? ServletConfig類的Config對(duì)象
作用:代碼片段配置對(duì)象,表示Servlet的配置。
(8)?? Object類的Page(相當(dāng)于this)對(duì)象
作用:處理JSP網(wǎng)頁(yè),是Object類的一個(gè)實(shí)例,指的是JSP實(shí)現(xiàn)類的實(shí)例,即它也是JSP本身,只有在JSP頁(yè)面范圍之內(nèi)才是合法的。
(9)Exception
作用:處理JSP文件執(zhí)行時(shí)發(fā)生的錯(cuò)誤和異常
第8份JAVA面試題(出自北京一家JAVA公司,留給后人)
cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-11-12 16:06:30 在 Java / Web 開(kāi)發(fā) 提問(wèn)
1、要?jiǎng)?chuàng)建一個(gè)物理表,包括字段(id?? 整型?? 長(zhǎng)度30?? 主鍵,title?? 字符型?? 長(zhǎng)度200,content?? 大字段),請(qǐng)分別寫(xiě)出在Oracle和DB2環(huán)境下的建表SQL語(yǔ)句。
2、在Oracle數(shù)據(jù)庫(kù)中有一張叫做content的表,該表結(jié)構(gòu)如下
字段名?????? 類型???????????????????? 長(zhǎng)度???? 主鍵
------???????? ------???? ----?????? ------
? id BigDecimal?????????? 是
Title???????? Varchar2???????????????????? 500
content???????? clob
假設(shè)該表中有50條數(shù)據(jù),要求查出第1000至第1100條之間的數(shù)據(jù),請(qǐng)給出查詢SQL語(yǔ)句。
3、請(qǐng)描述HashMap和Hashtable的區(qū)別及各自用途。
4、如何保證在JAVA應(yīng)用程序中,一個(gè)類class只有一個(gè)實(shí)例存在,并給出示例代碼。
5、try{}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?
6、一個(gè)try{}后最多可以有多少個(gè)catch()語(yǔ)句
7、給出一個(gè)含有匿名內(nèi)部類的JAVA類文件示例代碼。
8、分析下面代碼:
1?? interface?? Inter{}
2?? class?? A{}
3?? class?? B?? extends?? A?? implements?? Inter{}
4?? class?? C?? extends?? B{
5 public?? static?? void?? main(String[]?? args){
6 A?? a?? =?? new?? A();
7 B?? b?? =?? new?? B();
8 C?? c?? =?? new?? C();
9 if(a?? instanceof?? B)
10 System.out.println("Hello");
11 if(b?? instanceof?? A)
12 System.out.println("Hello");
13 if(c?? instanceof?? C)
14 System.out.println("Hello");
15 if(c?? instanceof?? Inter)
16 System.out.println("Hello");
}
??? }
當(dāng)運(yùn)行class?? C時(shí),程序中第10.12.14.16地中哪一行代碼將被執(zhí)行。
④JAVA高級(jí)程序員面試題(留給后人)
cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-10-30 14:39:34 在 Java / Web 開(kāi)發(fā) 提問(wèn)
1、簡(jiǎn)單描述一下awt與swing區(qū)別。
2、簡(jiǎn)述java編程中事件處理模式。
3、你編寫(xiě)過(guò)applet嗎?applet的安全權(quán)限如何?試列舉java?? application或者applet中與servlet/jsp通信可以采用的方式。
2.采用動(dòng)態(tài)事件驅(qū)動(dòng)(直接事件驅(qū)動(dòng))
1.applet的安全機(jī)制在java中有個(gè)稱沙箱的安全機(jī)制這樣也就限制了它:
??????? 如:不允許它調(diào)?? 其他程序。
??????????????? 文件讀寫(xiě)(本地磁盤(pán))。
????????? 等等。
JAVA程序員面試題
cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-11-11 14:11:42 在 Java / 非技術(shù)區(qū) 提問(wèn)
1、數(shù)據(jù)庫(kù)
表a和表b具有完全相同的結(jié)構(gòu),主鍵為indexid。寫(xiě)出一個(gè)sql語(yǔ)句把表b中不存在而表a中存在的數(shù)據(jù)插入到表b中。
2、javascript部分
頁(yè)面中有一個(gè)名稱都為unitprice的type=text對(duì)象。要求輸入的數(shù)據(jù)不能為空,寫(xiě)一個(gè)函數(shù)實(shí)現(xiàn)該功能,如果為空時(shí)給出提示。
3、JSP部分
①session中存儲(chǔ)一個(gè)String變量,變量名稱為studentname,寫(xiě)出在jsp中如何得到這個(gè)session變量的值的語(yǔ)句。
②在jsp中引用使用<jsp:useBean?? id="?? "?? ...scope="?? "/>來(lái)引用javabean.
Ⅰscope的值有哪些,這些值的區(qū)別是什么?
Ⅱ不同的jsp頁(yè)面中引用javabean時(shí),id能否相同,如果能相同,對(duì)scope的值有什么要求?
4、JAVA部分
①輸入一個(gè)維數(shù),輸出以下形式的矩陣和數(shù)列,以維數(shù)n=4為例:
0000
0111
0122
0123
②寫(xiě)出下面這段程序的運(yùn)行結(jié)果
int?? a=2,b=3,c=1
a+=--b+c;
c-=b+a++;
System.out.println("a="+a+",b="+b+",c="+c);
5、有一個(gè)Vector對(duì)象,其中每一個(gè)元素都是一個(gè)String對(duì)象,請(qǐng)用for循環(huán)或while循環(huán)輸出Vector中的元素,要求格式為:"第i個(gè)元素為:aaa"
6、有一個(gè)HashMap其中key為String對(duì)象,value為Integer對(duì)象,寫(xiě)一個(gè)方法打印出此Map中的所有鍵值?? 對(duì)形如?? key--value
7、有一個(gè)String?? str="001,A001;002,A002;003,A003"的串,寫(xiě)一個(gè)方法,把此串存入列?? 一個(gè)HashMap或Hashtable中,說(shuō)明:如001為key,A001則為value。
8、面向?qū)ο蟾拍睿?br />①面向?qū)ο蠡咎卣?br />②什么叫多態(tài)和重載,它們有什么區(qū)別?
③用你自己的話描述你理解的j2ee的本質(zhì)特征是什么?
第一題:? 寫(xiě)一個(gè)方法,實(shí)現(xiàn)刪除鏈表中某個(gè)節(jié)點(diǎn)的操作(其他條件自己假設(shè),補(bǔ)充)
public void delete()
{
?if(front>=rear)
?{
?s[front] =0;
?front--;
?System.out.println("\ndelete successful");
?}
?else
?{
? System.out.println("the link is empty ,can't delete");
?}
}
第二題:? 寫(xiě)一個(gè)方法,實(shí)現(xiàn)堆棧的入棧操作 (其他條件自己假設(shè),補(bǔ)充)
public class stack{
?private int[] s;
?int top,bottom;
?public stack(int size){
? s = new int[size];
? top = size-1;
? bottom = size-1;
? System.out.println("Size of the stack is:"+size);
?}
?public boolean isEmpty()
?{
? if(top==s.length-1)
? return true;
? else
? return false;
?}
?public void push(int n)
?{
? if(top<0)
? {
? System.out.println("The stack is full now,you can't push your data!");
? return;
? }
? else
? {?
? s[top] = n;
? top--;
? return ;
? }
?}
?public void pop()
?{
? if(top>=s.length-1)
? {
?? System.out.println("The stack is empty,Can't pop now!");
?? return;
? }
? else
? {
?? top++;
? }
?}
?public void print()
?{
? System.out.println("State of the stack:");
? for(int i=s.length-1;i>top;i--)
? {
?? System.out.print(s[i]+"? ");
? }
?}
?public static void main(String[] a)
?{
? stack st = new stack(5);
? System.out.println("List of the action to the stack:");
? System.out.println("push(3):");
? st.push(3);
? st.print();
? System.out.println("? ");
? System.out.println("push(6)");
? st.push(6);
? st.print();
? System.out.println("? ");
? System.out.println("push(10)");
? st.push(10);
? st.print();
? System.out.println("? ");
? System.out.println("pop()");
? st.pop();
? st.print();
? System.out.println("? ");
?
?}
}
?
第三題: 使用任意排序算法,寫(xiě)一個(gè)排序示例程序
import java.io.*;
class SelectionSort{
?
?public static void main(String[] args){
? int[] a={4,54,8,7,6,98,42,};
? sort(a);
? for(int i=0;i<a.length;i++){
?? System.out.print(a[i]+"?? ");
?? }
?? System.out.println("");
}
?? static void sort(int[] data){
? int next, indexOfNext=0,n;
??? for (next=0;next<data.length-1;next++)
??? {
???
??????? indexOfNext=min(data,next,(data.length)-1);
???? swap(data,indexOfNext,next);
? }
? }
?
? static int min(int[] data,int start,int end){
?? int indexOfMin=start;
?? for (int i=start+1;i<=end;i++)
?? if(data[i]<data[indexOfMin])
?? indexOfMin=i;
??
?? return indexOfMin;
? }
? static void swap(int[] data,int first,int second){
?? int temp;
?? temp=data[first];
?? data[first]=data[second];
?? data[second]=temp;
?? }
?
}
第四題:
編寫(xiě)一個(gè)servlet,把servlet源碼和此servlet在服務(wù)器上的配置文件web.xml作為附件發(fā)送到指定的郵箱
????? servlet的功能要求:記錄訪問(wèn)該servlet的客戶端的ip和訪問(wèn)時(shí)間,把記錄寫(xiě)入client_ip.log文件。 client_ip.log里的格式大致如下:
?9:36 2005-4-8 192.168.0.1
?9:36 2005-4-8 127.0.0.1
<BR>獲取客戶的IP地址
第五題
?數(shù)據(jù)庫(kù)中有兩個(gè)表tableA和tableB,他們都有一個(gè)int型的字段id,請(qǐng)寫(xiě)出一個(gè)sql語(yǔ)句,實(shí)現(xiàn)查詢id在tableA中有,而tableB中沒(méi)有的記錄
?例如tableA中有如下記錄
?----------------------------
?tableA.id tableA.name
?3? Mary
?4? Jack
?5? Lily
?----------------------------
?tableB.id
?3
?5
?查詢的結(jié)果應(yīng)該是
?----------------------------
?tableA.id tableA.name
?4? Jack
select *
from tableA
where not exists
(select *
from tableB
where tableA.id=tableB.id)
第六題?? 簡(jiǎn)述jsp和servlet的聯(lián)系
Java Servlet是JSP技術(shù)的基礎(chǔ),而且大型的Web應(yīng)用程序的開(kāi)發(fā)需要Java Servlet和JSP配合才能完成。現(xiàn)在許多Web服務(wù)器都支持Servlet,即使不直接支持Servlet的Web服務(wù)器,也可以通過(guò)附件的應(yīng)用服務(wù)器和模塊來(lái)支持Servlet,這得益于Java的跨平臺(tái)特性。另外,由于Servlet內(nèi)部以線程方式提供提供服務(wù),不必對(duì)于每個(gè)請(qǐng)求都啟動(dòng)一個(gè)進(jìn)程,并且利用多線程機(jī)制可以同時(shí)為多個(gè)請(qǐng)求服務(wù),因此Servlet的效率非常高。
第七題?? 什么是sql注入漏洞,采用什么方法來(lái)堵住sql注入漏洞
隨著B(niǎo)/S模式應(yīng)用開(kāi)發(fā)的發(fā)展,使用這種模式編寫(xiě)應(yīng)用程序的程序員也越來(lái)越多。但是由于這個(gè)行業(yè)的入門(mén)門(mén)檻不高,程序員的水平及經(jīng)驗(yàn)也參差不齊,相當(dāng)大一部分程序員在編寫(xiě)代碼的時(shí)候,沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫(kù)查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入
第八題:簡(jiǎn)述你對(duì)xml的認(rèn)識(shí),舉例說(shuō)明xml能干什么,應(yīng)該怎么做
XML是Extensible Markup Language的縮寫(xiě),意思是可擴(kuò)展置標(biāo)語(yǔ)言沒(méi)有于置標(biāo)電子文檔,使起數(shù)據(jù)具有結(jié)構(gòu)化的置標(biāo)語(yǔ)言。在我目前淺顯的認(rèn)識(shí)里:,
XML 是用來(lái)傳遞數(shù)據(jù)的 ,
XML 讓這些數(shù)據(jù)有了結(jié)構(gòu) -- 一個(gè)樹(shù)型結(jié)構(gòu)? ,
xml 有全套的操作這種結(jié)構(gòu)的方法???
xml 規(guī)范(或者說(shuō)的實(shí)際點(diǎn),xml parser)幫你確定你創(chuàng)建的字符串是合法的????
xml 規(guī)范(或者說(shuō)的實(shí)際點(diǎn),xml parser)中有辦法驗(yàn)證這個(gè)合法性??
對(duì)于XML能用來(lái)做什么,我覺(jué)得XML可以用來(lái)下面幾個(gè)方面
1:有利于開(kāi)發(fā)靈活的web應(yīng)用軟件
使用XML來(lái)描述數(shù)據(jù),可以使數(shù)據(jù)具有同意的組織結(jié)構(gòu),其他應(yīng)用軟件,對(duì)象,中間層和服務(wù)器都可以對(duì)使用XML描述的數(shù)據(jù)做進(jìn)一步的處理。并可以提交到瀏覽器中讓讀者閱讀
2:可以輕松的實(shí)現(xiàn)數(shù)據(jù)在web上發(fā)布
因?yàn)閄ML本身是純文本格式的,它可以不做任何修改就和HTML文檔一樣在網(wǎng)絡(luò)中傳輸。
3:有利于信息的集成
因?yàn)槭褂肵ML,可以把不同來(lái)源的結(jié)構(gòu)化數(shù)據(jù)很容易地組織到一起。應(yīng)用軟件可以在中間層的服務(wù)器上對(duì)來(lái)自于后段數(shù)據(jù)庫(kù)和其他的數(shù)據(jù)進(jìn)行集成。最后,數(shù)據(jù)以XML格式發(fā)送到客戶端或者是在其他服務(wù)器做進(jìn)一步處理。
4:可以使用豐富的樣式來(lái)顯示數(shù)據(jù)
XML采用結(jié)構(gòu)化的方式來(lái)組織數(shù)據(jù),描述的是數(shù)據(jù)本身,不涉及到數(shù)據(jù)的表現(xiàn)形式。通常來(lái)說(shuō),使用CSS和 XSL以及XSLT為數(shù)據(jù)的顯示提供分布的機(jī)制,也就是說(shuō)數(shù)據(jù)的顯示方式可以根據(jù)客戶的要求制定。
5:可大大增強(qiáng)服務(wù)器的可伸縮性
XML將數(shù)據(jù)本身和數(shù)據(jù)的顯示完全分離,從而可以在結(jié)構(gòu)化的數(shù)據(jù)中嵌套數(shù)據(jù)的顯示方式描述。這樣,能盡可能地減少客戶端與服務(wù)器之間的數(shù)據(jù)交換,減少服務(wù)器的工作量才能大大提高服務(wù)器的性能。
6:采用統(tǒng)一的XML文檔格式來(lái)描述多種應(yīng)用的數(shù)據(jù)
7:支持本地?cái)?shù)據(jù)處理
因?yàn)閄ML文檔中的數(shù)據(jù)格式是統(tǒng)一的,當(dāng)客戶受到數(shù)據(jù)后,便可以使用客戶自己的應(yīng)用軟件來(lái)解析數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步的編輯和處理。
8:可以使搜索變得更加簡(jiǎn)單和富有成效
采用統(tǒng)一的XML標(biāo)識(shí)來(lái)組織來(lái)自不同數(shù)據(jù)庫(kù)的數(shù)據(jù),就可以在不了解數(shù)據(jù)庫(kù)數(shù)據(jù)組織形式的情況下進(jìn)行數(shù)據(jù)的檢索。
9:可以實(shí)現(xiàn)數(shù)據(jù)的獨(dú)立更新
10:開(kāi)放式的標(biāo)準(zhǔn)
雖然XML的初衷是為了使具有不同結(jié)構(gòu)的數(shù)據(jù)文件采用統(tǒng)一的XML格式 在Internet上傳輸,
第九題
介紹你做的一個(gè)項(xiàng)目,包括實(shí)現(xiàn)了什么功能,通過(guò)什么方法來(lái)實(shí)現(xiàn)(算法,邏輯結(jié)構(gòu)...),怎么來(lái)保證它的安全和健壯性等.
(如果沒(méi)有項(xiàng)目經(jīng)驗(yàn),可假設(shè)你要做一個(gè)OA系統(tǒng),描述一下你怎么來(lái)實(shí)現(xiàn)它)
選做
第十題:
如何察看linux當(dāng)前系統(tǒng)正在運(yùn)行什么服務(wù)?
第十一題:
linux系統(tǒng)的用戶帳號(hào)保存在那一個(gè)或哪幾個(gè)文件里?
第十二題
簡(jiǎn)述MVC是什么
MVC是 Model-View-Controller 的簡(jiǎn)稱,也就是 模型-視圖-控制器
MVC用來(lái)處理驗(yàn)證、流程控制和更新應(yīng)用程序的狀態(tài)等問(wèn)題。
Model(模型)
模型包含應(yīng)用程序的核心功能。模型封裝了應(yīng)用程序的狀態(tài)。有時(shí)它包含的唯一功能就是狀態(tài)。它對(duì)視圖或控制器一無(wú)所知。
View(視圖)
視圖提供模型的表示。它是應(yīng)用程序的外觀。視圖可以訪問(wèn)模型的讀方法,但不能訪問(wèn)寫(xiě)方法。此外,它對(duì)控制器一無(wú)所知。當(dāng)更改模型時(shí),視圖應(yīng)得到通知。
Controller(控制器)
控制器對(duì)用戶的輸入作出反應(yīng)。它創(chuàng)建并設(shè)置模型。
?
?
java面試題集
基礎(chǔ)知識(shí):
1.C++或Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。
當(dāng)JAVA程序違反了JAVA的語(yǔ)義規(guī)則時(shí),JAVA虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語(yǔ)義規(guī)則包括2種情況。一種是JAVA類庫(kù)內(nèi)置的語(yǔ)義檢查。例如數(shù)組下標(biāo)越界,會(huì)引發(fā)IndexOutOfBoundsException;訪問(wèn)null的對(duì)象時(shí)會(huì)引發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴(kuò)展這種語(yǔ)義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。
2. Java的接口和C++的虛類的相同和不同處。
由于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩?,現(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因?yàn)榻涌谥袥](méi)有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是public static,所有方法默認(rèn)情況下是public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
3. 垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。
Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問(wèn)題迎刃而解,它使得Java程序員在編寫(xiě)程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)垃圾回收機(jī)制,Java中的對(duì)象不再有“作用域”的概念,只有對(duì)象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒(méi)有使用的對(duì)象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收?;厥諜C(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
4. 請(qǐng)說(shuō)出你所知道的線程同步的方法。
wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。
sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。
notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。
Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。
5. 請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用。
6. Error與Exception有什么區(qū)別?
Error表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常,
Exception表示需要捕捉或者需要程序進(jìn)行處理的異常。
7. 在java中一個(gè)類被聲明為final類型,表示了什么意思?
表示該類不能被繼承,是頂級(jí)類。
8. 描述一下你最常用的編程風(fēng)格。
9. heap和stack有什么區(qū)別。
棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。
堆是棧的一個(gè)組成元素
10. 如果系統(tǒng)要使用超大整數(shù)(超過(guò)long長(zhǎng)度范圍),請(qǐng)你設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)這種超大型數(shù)字以及設(shè)計(jì)一種算法來(lái)實(shí)現(xiàn)超大整數(shù)加法運(yùn)算)。
public class BigInt()
{
int[] ArrOne = new ArrOne[1000];
String intString="";
public int[] Arr(String s)
{
intString = s;
for(int i=0;i<ArrOne.leght;i++)
{
11. 如果要設(shè)計(jì)一個(gè)圖形系統(tǒng),請(qǐng)你設(shè)計(jì)基本的圖形元件(Point,Line,Rectangle,Triangle)的簡(jiǎn)單實(shí)現(xiàn)
12,談?wù)刦inal, finally, finalize的區(qū)別。
final?修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally?再異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。
finalize?方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。
13,Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)?
匿名的內(nèi)部類是沒(méi)有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個(gè)內(nèi)部類可以作為一個(gè)接口,由另一個(gè)內(nèi)部類實(shí)現(xiàn)。
?
14,Static Nested Class 和 Inner Class的不同,說(shuō)得越多越好(面試題有的很籠統(tǒng))。
Nested Class (一般是C++的說(shuō)法),Inner Class (一般是JAVA的說(shuō)法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見(jiàn)http: //www.frontfree.net/articles/services/view.ASP?id=704&page=1
注: 靜態(tài)內(nèi)部類(Inner Class)意味著1創(chuàng)建一個(gè)static內(nèi)部類的對(duì)象,不需要一個(gè)外部類對(duì)象,2不能從一個(gè)static內(nèi)部類的一個(gè)對(duì)象訪問(wèn)一個(gè)外部類對(duì)象
第四,&和&&的區(qū)別。
&是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。
15,HashMap和Hashtable的區(qū)別。
?
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
?
HashMap 類沒(méi)有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。
Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?
16,Collection 和 Collections的區(qū)別。
Collections是個(gè)java.util下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。
Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。
17,什么時(shí)候用assert。
斷言是一個(gè)包含布爾表達(dá)式的語(yǔ)句,在執(zhí)行這個(gè)語(yǔ)句時(shí)假定該表達(dá)式為 true。如果表達(dá)式計(jì)算為 false,那么系統(tǒng)會(huì)報(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)試信息的 String 消息。
斷言在默認(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ǔ)上啟用或者禁用斷言。
可以在預(yù)計(jì)正常情況下不會(huì)到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過(guò),斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌?,公有方法都必須檢查其參數(shù)。不過(guò),既可以在公有方法中,也可以在非公有方法中利用斷言測(cè)試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。
18,GC是什么? 為什么要有GC? (基礎(chǔ))。
GC是垃圾收集器。Java 程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。要請(qǐng)求垃圾收集,可以調(diào)用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
19,String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
兩個(gè)對(duì)象,一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對(duì)象s。
20,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
21,short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
short s1 = 1; s1 = s1 + 1;有錯(cuò),s1是short型,s1+1是int型,不能顯式轉(zhuǎn)化為short型??尚薷臑閟1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
22,sleep() 和 wait() 有什么區(qū)別? 搞線程的最愛(ài)
sleep()方法是使線程停止一段時(shí)間的方法。在sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒(méi)有被調(diào)度為放棄執(zhí)行,除非(a)“醒來(lái)”的線程具有更高的優(yōu)先級(jí) (b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?
wait()是線程交互時(shí),如果線程對(duì)一個(gè)同步對(duì)象x 發(fā)出一個(gè)wait()調(diào)用,該線程會(huì)暫停執(zhí)行,被調(diào)對(duì)象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)間到。
23,Java有沒(méi)有g(shù)oto?
Goto?java中的保留字,現(xiàn)在沒(méi)有在java中使用。
?
24,數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法? String有沒(méi)有l(wèi)ength()這個(gè)方法?
數(shù)組沒(méi)有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。
String有有l(wèi)ength()這個(gè)方法。
25,Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
26,Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?
Set里的元素是不能重復(fù)的,那么用iterator()方法來(lái)區(qū)分重復(fù)與否。equals()是判讀兩個(gè)Set是否相等。
equals()和==方法決定引用值是否指向同一對(duì)象equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話,返回真值。
posted on 2006-11-29 01:10
EricWong 閱讀(588)
評(píng)論(0) 編輯 收藏