隨筆-208  評(píng)論-469  文章-30  trackbacks-0

          北京一家JAVA開發(fā)公司面試題(留給后人)
          cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-10-26 12:20:43 在 Java / Web 開發(fā) 提問
          1、jsp有哪些內(nèi)置對(duì)象?作用分別是什么?
          2、描述一下servlet的生命周期和基本架構(gòu)。
          3、多線程有幾種實(shí)現(xiàn)方法,都是什么?
          ????? 同步有幾種實(shí)現(xiàn)方法,都是什么?
          4、作用域public?? private?? protected以及不寫時(shí)的區(qū)別?
          5、用JAVA實(shí)現(xiàn)數(shù)據(jù)庫查詢(寫一段完整的程序)。
          6、用正則表達(dá)式判斷123456_78不是一個(gè)數(shù)字。
          7、排序都有哪幾種方法?請(qǐng)列舉。用JAVA實(shí)現(xiàn)一個(gè)快速排序。
          ---------------------------------------------------------------
          以上是北京一家JAVA開發(fā)公司出的面試題,在這里貼出來是想留給剛出道且正在找工作的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í)開始至服務(wù)器關(guān)閉時(shí)結(jié)束,jvm第一次加載后駐留在內(nèi)存中,所有請(qǐng)求共享同一個(gè)servlet,包括init(),service(),start(),stop(),destrop(),doGet(),doPost()等方法,第一次加載時(shí)首先call?? init()方法,然后service()方法,不說了不說了,太羅嗦了,

          1。當(dāng)一個(gè)線程進(jìn)入moniter(也就是說站用一個(gè)object),另一個(gè)線程只有等待或返回,而我們把返回就稱為一種模式,這種模式的英文是Balking。??

          2。這兩個(gè)線程可以是有序的執(zhí)行,而不是讓OS來調(diào)度,這時(shí)我們要用一個(gè)object來調(diào)度,這種模式稱為Scheduler。(這個(gè)詞及其含義其實(shí)OS中就有)。??

          3。如果這兩個(gè)線程同時(shí)讀一個(gè)資源,我們可以讓他們執(zhí)行,但如果同時(shí)寫的話,你閉著眼睛都會(huì)知道可能出現(xiàn)問題,這時(shí)我們就要用另一種模式(Read/Write?? Lock)。??

          4。如果一個(gè)線程是為另一個(gè)線程服務(wù)的話,比如IE中負(fù)責(zé)數(shù)據(jù)傳輸?shù)木€程和界面顯示的線程,當(dāng)一個(gè)圖片沒有傳完時(shí),另一個(gè)線程就無法顯示,至少是部分沒有傳完。那么這時(shí)我們要用一個(gè)模式稱為生產(chǎn)者和消費(fèi)者,英文是Producer-Consumer。??

          5。兩個(gè)線程的消亡也可以不是完全又OS來控制的,這時(shí)我們需要給出一個(gè)條件,使得每個(gè)線程在符合條件是才消亡,也就是有序的消亡,我們稱為Two-Phase?? Termination。

          1.?????? JSP有哪些內(nèi)置對(duì)象?作用分別是什么?
          (1)?? HttpServletRequest類的Request對(duì)象
          作用:代表請(qǐng)求對(duì)象,主要用于接受客戶端通過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ì)象
          作用:主要用于來分別保存每個(gè)用戶信息,與請(qǐng)求關(guān)聯(lián)的會(huì)話;
          ????????????????? 會(huì)話狀態(tài)維持是Web應(yīng)用開發(fā)者必須面對(duì)的問題。
          (5)?? ServletContex類的application對(duì)象
          作用:主要用于保存用戶信息,代碼片段的運(yùn)行環(huán)境;
          ??????????????? 它是一個(gè)共享的內(nèi)置對(duì)象,即一個(gè)容器中的多個(gè)用戶共享一個(gè)application對(duì)象,故其保存的信息被所有用戶所共享.
          (6)?? PageContext類的PageContext對(duì)象
          作用:管理網(wǎng)頁屬性,為JSP頁面包裝頁面的上下文,管理對(duì)屬于JSP中特殊可見部分中已命名對(duì)象的訪問,它的創(chuàng)建和初始化都是由容器來完成的。
          (7)?? ServletConfig類的Config對(duì)象
          作用:代碼片段配置對(duì)象,表示Servlet的配置。
          (8)?? Object類的Page(相當(dāng)于this)對(duì)象
          作用:處理JSP網(wǎng)頁,是Object類的一個(gè)實(shí)例,指的是JSP實(shí)現(xiàn)類的實(shí)例,即它也是JSP本身,只有在JSP頁面范圍之內(nèi)才是合法的。
          (9)Exception
          作用:處理JSP文件執(zhí)行時(shí)發(fā)生的錯(cuò)誤和異常

          第8份JAVA面試題(出自北京一家JAVA公司,留給后人)
          cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-11-12 16:06:30 在 Java / Web 開發(fā) 提問
          1、要?jiǎng)?chuàng)建一個(gè)物理表,包括字段(id?? 整型?? 長度30?? 主鍵,title?? 字符型?? 長度200,content?? 大字段),請(qǐng)分別寫出在Oracle和DB2環(huán)境下的建表SQL語句。

          2、在Oracle數(shù)據(jù)庫中有一張叫做content的表,該表結(jié)構(gòu)如下

          字段名?????? 類型???????????????????? 長度???? 主鍵
          ------???????? ------???? ----?????? ------
          ? id BigDecimal?????????? 是
          Title???????? Varchar2???????????????????? 500
          content???????? clob

          假設(shè)該表中有50條數(shù)據(jù),要求查出第1000至第1100條之間的數(shù)據(jù),請(qǐng)給出查詢SQL語句。

          3、請(qǐng)描述HashMap和Hashtable的區(qū)別及各自用途。

          4、如何保證在JAVA應(yīng)用程序中,一個(gè)類class只有一個(gè)實(shí)例存在,并給出示例代碼。

          5、try{}里有一個(gè)return語句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?

          6、一個(gè)try{}后最多可以有多少個(gè)catch()語句

          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 開發(fā) 提問
          1、簡單描述一下awt與swing區(qū)別。
          2、簡述java編程中事件處理模式。
          3、你編寫過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)?? 其他程序。
          ??????????????? 文件讀寫(本地磁盤)。
          ????????? 等等。
          JAVA程序員面試題
          cnliutian (手起刀落,小日本雞雞被砍掉)???? 2004-11-11 14:11:42 在 Java / 非技術(shù)區(qū) 提問
          1、數(shù)據(jù)庫
          表a和表b具有完全相同的結(jié)構(gòu),主鍵為indexid。寫出一個(gè)sql語句把表b中不存在而表a中存在的數(shù)據(jù)插入到表b中。
          2、javascript部分
          頁面中有一個(gè)名稱都為unitprice的type=text對(duì)象。要求輸入的數(shù)據(jù)不能為空,寫一個(gè)函數(shù)實(shí)現(xiàn)該功能,如果為空時(shí)給出提示。
          3、JSP部分
          ①session中存儲(chǔ)一個(gè)String變量,變量名稱為studentname,寫出在jsp中如何得到這個(gè)session變量的值的語句。
          ②在jsp中引用使用<jsp:useBean?? id="?? "?? ...scope="?? "/>來引用javabean.
          Ⅰscope的值有哪些,這些值的區(qū)別是什么?
          Ⅱ不同的jsp頁面中引用javabean時(shí),id能否相同,如果能相同,對(duì)scope的值有什么要求?
          4、JAVA部分
          ①輸入一個(gè)維數(shù),輸出以下形式的矩陣和數(shù)列,以維數(shù)n=4為例:
          0000
          0111
          0122
          0123
          ②寫出下面這段程序的運(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ì)象,寫一個(gè)方法打印出此Map中的所有鍵值?? 對(duì)形如?? key--value
          7、有一個(gè)String?? str="001,A001;002,A002;003,A003"的串,寫一個(gè)方法,把此串存入列?? 一個(gè)HashMap或Hashtable中,說明:如001為key,A001則為value。
          8、面向?qū)ο蟾拍睿?br />①面向?qū)ο蠡咎卣?br />②什么叫多態(tài)和重載,它們有什么區(qū)別?
          ③用你自己的話描述你理解的j2ee的本質(zhì)特征是什么?

          第一題:? 寫一個(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");
          ?}
          }
          第二題:? 寫一個(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("? ");
          ?
          ?}
          }

          ?

          第三題: 使用任意排序算法,寫一個(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;
          ?? }
          ?
          }

          第四題:
          編寫一個(gè)servlet,把servlet源碼和此servlet在服務(wù)器上的配置文件web.xml作為附件發(fā)送到指定的郵箱
          ????? servlet的功能要求:記錄訪問該servlet的客戶端的ip和訪問時(shí)間,把記錄寫入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ù)庫中有兩個(gè)表tableA和tableB,他們都有一個(gè)int型的字段id,請(qǐng)寫出一個(gè)sql語句,實(shí)現(xiàn)查詢id在tableA中有,而tableB中沒有的記錄
          ?例如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)
          第六題?? 簡述jsp和servlet的聯(lián)系

          Java Servlet是JSP技術(shù)的基礎(chǔ),而且大型的Web應(yīng)用程序的開發(fā)需要Java Servlet和JSP配合才能完成。現(xiàn)在許多Web服務(wù)器都支持Servlet,即使不直接支持Servlet的Web服務(wù)器,也可以通過附件的應(yīng)用服務(wù)器和模塊來支持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注入漏洞,采用什么方法來堵住sql注入漏洞


          隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式編寫應(yīng)用程序的程序員也越來越多。但是由于這個(gè)行業(yè)的入門門檻不高,程序員的水平及經(jīng)驗(yàn)也參差不齊,相當(dāng)大一部分程序員在編寫代碼的時(shí)候,沒有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入

          第八題:簡述你對(duì)xml的認(rèn)識(shí),舉例說明xml能干什么,應(yīng)該怎么做

          XML是Extensible Markup Language的縮寫,意思是可擴(kuò)展置標(biāo)語言沒有于置標(biāo)電子文檔,使起數(shù)據(jù)具有結(jié)構(gòu)化的置標(biāo)語言。在我目前淺顯的認(rèn)識(shí)里:,
          XML 是用來傳遞數(shù)據(jù)的 ,
          XML 讓這些數(shù)據(jù)有了結(jié)構(gòu) -- 一個(gè)樹型結(jié)構(gòu)? ,
          xml 有全套的操作這種結(jié)構(gòu)的方法???
          xml 規(guī)范(或者說的實(shí)際點(diǎn),xml parser)幫你確定你創(chuàng)建的字符串是合法的????
          xml 規(guī)范(或者說的實(shí)際點(diǎn),xml parser)中有辦法驗(yàn)證這個(gè)合法性??
          對(duì)于XML能用來做什么,我覺得XML可以用來下面幾個(gè)方面
          1:有利于開發(fā)靈活的web應(yīng)用軟件
          使用XML來描述數(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,可以把不同來源的結(jié)構(gòu)化數(shù)據(jù)很容易地組織到一起。應(yīng)用軟件可以在中間層的服務(wù)器上對(duì)來自于后段數(shù)據(jù)庫和其他的數(shù)據(jù)進(jìn)行集成。最后,數(shù)據(jù)以XML格式發(fā)送到客戶端或者是在其他服務(wù)器做進(jìn)一步處理。
          4:可以使用豐富的樣式來顯示數(shù)據(jù)
          XML采用結(jié)構(gòu)化的方式來組織數(shù)據(jù),描述的是數(shù)據(jù)本身,不涉及到數(shù)據(jù)的表現(xiàn)形式。通常來說,使用CSS和 XSL以及XSLT為數(shù)據(jù)的顯示提供分布的機(jī)制,也就是說數(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文檔格式來描述多種應(yīng)用的數(shù)據(jù)
          7:支持本地?cái)?shù)據(jù)處理
          因?yàn)閄ML文檔中的數(shù)據(jù)格式是統(tǒng)一的,當(dāng)客戶受到數(shù)據(jù)后,便可以使用客戶自己的應(yīng)用軟件來解析數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步的編輯和處理。
          8:可以使搜索變得更加簡單和富有成效
          采用統(tǒng)一的XML標(biāo)識(shí)來組織來自不同數(shù)據(jù)庫的數(shù)據(jù),就可以在不了解數(shù)據(jù)庫數(shù)據(jù)組織形式的情況下進(jìn)行數(shù)據(jù)的檢索。
          9:可以實(shí)現(xiàn)數(shù)據(jù)的獨(dú)立更新
          10:開放式的標(biāo)準(zhǔn)
          雖然XML的初衷是為了使具有不同結(jié)構(gòu)的數(shù)據(jù)文件采用統(tǒng)一的XML格式 在Internet上傳輸,

          第九題
          介紹你做的一個(gè)項(xiàng)目,包括實(shí)現(xiàn)了什么功能,通過什么方法來實(shí)現(xiàn)(算法,邏輯結(jié)構(gòu)...),怎么來保證它的安全和健壯性等.
          (如果沒有項(xiàng)目經(jīng)驗(yàn),可假設(shè)你要做一個(gè)OA系統(tǒng),描述一下你怎么來實(shí)現(xiàn)它)


          選做
          第十題:

          如何察看linux當(dāng)前系統(tǒng)正在運(yùn)行什么服務(wù)?

          第十一題:

          linux系統(tǒng)的用戶帳號(hào)保存在那一個(gè)或哪幾個(gè)文件里?

          第十二題

          簡述MVC是什么

          MVC是 Model-View-Controller 的簡稱,也就是 模型-視圖-控制器
          MVC用來處理驗(yàn)證、流程控制和更新應(yīng)用程序的狀態(tài)等問題。
          Model(模型)
          模型包含應(yīng)用程序的核心功能。模型封裝了應(yīng)用程序的狀態(tài)。有時(shí)它包含的唯一功能就是狀態(tài)。它對(duì)視圖或控制器一無所知。
          View(視圖)
          視圖提供模型的表示。它是應(yīng)用程序的外觀。視圖可以訪問模型的讀方法,但不能訪問寫方法。此外,它對(duì)控制器一無所知。當(dāng)更改模型時(shí),視圖應(yīng)得到通知。
          Controller(控制器)
          控制器對(duì)用戶的輸入作出反應(yīng)。它創(chuàng)建并設(shè)置模型。

          ?

          ?

          java面試題集

          基礎(chǔ)知識(shí):
          1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用。

          當(dāng)JAVA程序違反了JAVA的語義規(guī)則時(shí),JAVA虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置的語義檢查。例如數(shù)組下標(biāo)越界,會(huì)引發(fā)IndexOutOfBoundsException;訪問null的對(duì)象時(shí)會(huì)引發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。

          2. Java的接口和C++的虛類的相同和不同處。

          由于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩裕F(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因?yàn)榻涌谥袥]有任何實(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語言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)垃圾回收機(jī)制,Java中的對(duì)象不再有“作用域”的概念,只有對(duì)象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長時(shí)間沒有使用的對(duì)象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收。回收機(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。

          4. 請(qǐng)說出你所知道的線程同步的方法。

          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ì)象的鎖,而是讓它們競爭。

          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ù)(超過long長度范圍),請(qǐng)你設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)這種超大型數(shù)字以及設(shè)計(jì)一種算法來實(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)的簡單實(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 塊來執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。

            finalize?方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒有被引用時(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)部類是沒有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個(gè)內(nèi)部類可以作為一個(gè)接口,由另一個(gè)內(nèi)部類實(shí)現(xiàn)。

          ?

          14,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統(tǒng))。

            Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見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ì)象訪問一個(gè)外部類對(duì)象

          第四,&和&&的區(qū)別。

            &是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。

          15,HashMap和Hashtable的區(qū)別。

          ?

            都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。

          ?

            HashMap 類沒有分類或者排序。它允許一個(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á)式的語句,在執(zhí)行這個(gè)語句時(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ù)。不過,斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌裕蟹椒ǘ急仨殭z查其參數(shù)。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應(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型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。

          22,sleep() 和 wait() 有什么區(qū)別? 搞線程的最愛

            sleep()方法是使線程停止一段時(shí)間的方法。在sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(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有沒有g(shù)oto?

            Goto?java中的保留字,現(xiàn)在沒有在java中使用。

          ?

          24,數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法?

            數(shù)組沒有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。

            String有有l(wèi)ength()這個(gè)方法。

          25,Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?

            方法的重寫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的方法是可以改變返回值的類型。

          26,Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?

            Set里的元素是不能重復(fù)的,那么用iterator()方法來區(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)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长海县| 丹东市| 禄丰县| 海原县| 左贡县| 柯坪县| 张家口市| 东山县| 界首市| 阳新县| 绩溪县| 建湖县| 宁城县| 鄯善县| 尚义县| 唐海县| 普安县| 武义县| 梁平县| 依兰县| 水富县| 九江市| 万源市| 霍林郭勒市| 大宁县| 呈贡县| 视频| 敦化市| 龙门县| 博白县| 丘北县| 山阳县| 武威市| 谢通门县| 通辽市| 镇坪县| 衡阳市| 横峰县| 辽宁省| 巴楚县| 广元市|