期待更好更穩(wěn)定的開(kāi)源FrameWork的出現(xiàn),讓我們一起努力吧!  
          日歷
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567
          統(tǒng)計(jì)
          • 隨筆 - 78
          • 文章 - 1
          • 評(píng)論 - 29
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案(42)

          文章檔案(37)

          相冊(cè)

          搜索

          •  

          積分與排名

          • 積分 - 45255
          • 排名 - 1064

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

           
           

           

          面試必備基礎(chǔ)題目(雖然不一定常用, 僅用于面試, 面試就是把人搞的都不會(huì)然后砍價(jià), 當(dāng)然您可以講我可以查資料完成, 但是面試的時(shí)候就是沒(méi)道理的, 起碼我是經(jīng)常看到這些題).

          如何把一段逗號(hào)分割的字符串轉(zhuǎn)換成一個(gè)數(shù)組?
          request.getAttribute() 和 request.getParameter() 有何區(qū)別?
          response.sendRedirect() 和 forward() 區(qū)別?
          <%@include file="xxx.jsp"%>
          和 <jsp:include> 區(qū)別?
          List 和 Map 區(qū)別?
          Struts 和 Spring 自動(dòng)填充表單參數(shù)到 Bean 的大致原理?
          說(shuō)一下你用的 Spring + Hibernate 的方框圖? 您都用到了哪些部分?

          請(qǐng)用英文簡(jiǎn)單介紹一下自己.

          請(qǐng)把 http://tomcat.apache.org/ 首頁(yè)的這一段話用中文翻譯一下?

           

          Apache Tomcat is the servlet container that is used in the official Reference Implementation for the Java Servlet and JavaServer Pages technologies. The Java Servlet and JavaServer Pages specifications are developed by Sun under the Java Community Process.

          Apache Tomcat is developed in an open and participatory environment and released under the Apache Software License. Apache Tomcat is intended to be a collaboration of the best-of-breed developers from around the world. We invite you to participate in this open development project. To learn more about getting involved, click here.

          Apache Tomcat powers numerous large-scale, mission-critical web applications across a diverse range of industries and organizations. Some of these users and their stories are listed on the PoweredBy wiki page.

           

          try {
          Connection conn = ...;
          Statement stmt = ...;

          ResultSet rs = stmt.executeQuery("select * from table1");

          while(rs.next()) {

          }
          } catch(Exception ex) {
          }

          這段代碼有什么不足之處?

          HTML 的 form 提交之前如何驗(yàn)證數(shù)值不為空? 為空的話提示用戶并終止提交?

          為什么要用 ORM?  和 JDBC 有何不一樣?

          Weblogic 的 Server, Machine, Node, Domain 都有何區(qū)別?

          簡(jiǎn)要講一下 EJB 的 7 個(gè) Transaction Level?

          最常見(jiàn)的: 用 JDBC 查詢學(xué)生成績(jī)單, 把主要代碼寫出來(lái).

          Tomcat 5 用 query.jsp?name=中文, 怎么把這個(gè)變量無(wú)亂碼的取出來(lái)?

          finally語(yǔ)句一定會(huì)執(zhí)行么?

          前幾天有一個(gè)朋友去面試,被問(wèn)到這樣一個(gè)問(wèn)題,如下

           1 public class  smallT
           2 {
           3 public static void  main(String args[])
           4 {
           5         smallT t  = new  smallT();
           6 int  b  =  t.get();
           7         System.out.println(b);
           8     }
           9 public int  get()
          10 {
          11 try
          12 {
          13 return 2 ;
          14         }
          15 catch (Exception e)
          16 {
          17 return 3 ;
          18         }
          19 finally
          20 {
          21 return 4 ;
          22         }
          23     }
          24 }
          25

          輸出:
          4
          我記得學(xué)習(xí)的時(shí)候說(shuō)有返回值的方法,執(zhí)行完return語(yǔ)句后就會(huì)停止了;另一方面我還記得在try……catch語(yǔ)句中finally語(yǔ)句也是一定要執(zhí)行的。于是在這里就產(chǎn)生了麻煩。試了一下,發(fā)現(xiàn)果然是執(zhí)行了finally中的值。正好這兩天公司在培訓(xùn),我便把這個(gè)問(wèn)題提給java很厲害的一個(gè)講師,他用斷點(diǎn)測(cè)試了一下,說(shuō)是兩個(gè)值都返回了……
          我又改了一小下,在get方法中逐個(gè)添上了輸出信息到控制臺(tái)的語(yǔ)句,發(fā)現(xiàn)居然能執(zhí)行。如下

           1public class test
           2{
           3 public static void main(String args[])
           4{
           5        test t = new test();
           6 int b = t.get();
           7        System.out.println("Third: a = "+b);
           8    }
           9 public int get()
          10{
          11 try
          12{
          13         System.out.println("First: a = "+2);
          14 return 2;
          15        }
          16 catch(Exception e)
          17{
          18         System.out.println(3);
          19        }
          20 finally
          21{
          22            System.out.println("Second: a = "+4);
          23 return 4;
          24        }
          25    }
          26}
          27

          輸出:
          First: a = 2
          Second: a = 4
          Third: a = 4
          可這明明是一個(gè)需要返回一個(gè)int整數(shù)的方法啊。

           

          一道面試題目

          一個(gè)整數(shù),大于0,不用循環(huán)和本地變量,按照n,2n,4n,8n的順序遞增,當(dāng)值大于5000時(shí),把值按照指定順序輸出來(lái)。
          例:n=1237
          則輸出為:
          1237,
          2474,
          4948,
          9896,
          9896,
          4948,
          2474,
          1237,

          美資軟件公司JAVA工程師電話面試題目

          1. Talk about overriding, overloading.
          2. Talk about JAVA design patterns you known.
          3. Talk about the difference between LinkList, ArrayList and Victor.
          4. Talk about the difference between an Abstract class and an Interface.
          5. Class a = new Class(); Class b = new Class();
           if(a == b) returns true or false, why?
          6. Why we use StringBuffer when concatenating strings?
          7. Try to explain Singleton to us? Is it thread safe? If no, how to make it thread safe?
          8. Try to explain Ioc?
          9. How to set many-to-many relationship in Hibernate?
          10. Talk about the difference between INNER JOIN and LFET JOIN.
          11. Why we use index in database? How many indexes is the maximum in one table as your suggestion?
          12. When ‘Final’ is used in class, method and property, what dose it mean?
          13. Do you have any experience on XML? Talk about any XML tool you used ,e.g. JAXB, JAXG.
          14. Do you have any experience on Linux?
          15. In OOD what is the reason when you create a Sequence diagram?

          補(bǔ)一個(gè)內(nèi)部培訓(xùn)用的 PPT:  SQL Tuning in Sybase.zip 17KB, 英文, Sybase 調(diào)優(yōu), 大部分道理是通用的.

          數(shù)據(jù)庫(kù)三范式是什么? 別看問(wèn)題簡(jiǎn)單, 我也經(jīng)常答不上來(lái)被面試的人寫上數(shù)據(jù)庫(kù)不行.

          還有就是 Sun Java 認(rèn)證時(shí)候會(huì)考的一些英文選擇題, 填空題, 模擬題也成.

          赴港JAVA開(kāi)發(fā)工程師的面試題目

           

          也是上個(gè)星期五的上午,按照與獵頭的約定,接受了香港某軟件供應(yīng)商的面試。工作是分析程序員,需赴港工作,以下是面試過(guò)程以及題目(大概記下了90%),記下來(lái)與大家分享。
          第一部分:例行公事的英文自我介紹;
          以下部分必須以粵語(yǔ)回答,本人非廣東人,粵語(yǔ)會(huì)講,但是不標(biāo)準(zhǔn)。
          第二部分:項(xiàng)目經(jīng)驗(yàn)介紹,著重介紹項(xiàng)目背景,開(kāi)發(fā)流程以及本人在項(xiàng)目開(kāi)發(fā)過(guò)程中的角色;
          第三部分:面試官根據(jù)簡(jiǎn)歷提問(wèn):
          (1)說(shuō)出Abstract class與interface的不同?
          (2)Oracle中如何進(jìn)行錯(cuò)誤處理?如果用戶反應(yīng)速度慢,你如何著手解決問(wèn)題?
          (3)圖畫板上列了兩個(gè)table,問(wèn)查詢結(jié)果,主要是考inner join與left join的。
          (4)union和union all有什么不同?
          (5)你用什么軟件做設(shè)計(jì)?
          (6)是否用過(guò)Websphere?
          (7)iBatis與Hibernate有什么不同?
          (8)談?wù)凷truts中的Action servlet。
          (9)是否開(kāi)發(fā)過(guò)IBM portal項(xiàng)目。
          (10)是否介意加班?
          (11)如果你去香港工作,你認(rèn)為你最大的困難是什么?
          第四部分:筆試,三個(gè)英文考試題目選一個(gè)作答,內(nèi)容都是寫一份email。
          出來(lái)后問(wèn)了獵頭,他說(shuō)最遲一個(gè)星期內(nèi)就有結(jié)果。
          結(jié)果,晚上就接到電話說(shuō)通過(guò)了,并收到了合同和赴港申請(qǐng)的電子文件。工作地點(diǎn)是九龍,月薪18K(中等偏低),合同期一年。獵頭催我盡快簽合同,然后他們馬上就去辦工作簽證。
          猶豫ing。

          每個(gè)JAVA初學(xué)者應(yīng)該知道的問(wèn)題

          對(duì)于這個(gè)系列里的問(wèn)題,每個(gè)學(xué)Java的人都應(yīng)該搞懂。當(dāng)然,如果只是學(xué)Java玩玩就無(wú)所謂了。如果你認(rèn)為自己已經(jīng)超越初學(xué)者了,卻不很懂這些問(wèn)題,請(qǐng)將你自己重歸初學(xué)者行列。內(nèi)容均來(lái)自于CSDN的經(jīng)典老貼。
          問(wèn)題一:我聲明了什么!
          String s = "Hello world!";
          許多人都做過(guò)這樣的事情,但是,我們到底聲明了什么?回答通常是:一個(gè)String,內(nèi)容是“Hello world!”。這樣模糊的回答通常是概念不清的根源。如果要準(zhǔn)確的回答,一半的人大概會(huì)回答錯(cuò)誤。
          這個(gè)語(yǔ)句聲明的是一個(gè)指向?qū)ο蟮囊茫麨?#8220;s”,可以指向類型為String的任何對(duì)象,目前指向"Hello world!"這個(gè)String類型的對(duì)象。這就是真正發(fā)生的事情。我們并沒(méi)有聲明一個(gè)String對(duì)象,我們只是聲明了一個(gè)只能指向String對(duì)象的引用變量。所以,如果在剛才那句語(yǔ)句后面,如果再運(yùn)行一句:
          String string = s;
          我們是聲明了另外一個(gè)只能指向String對(duì)象的引用,名為string,并沒(méi)有第二個(gè)對(duì)象產(chǎn)生,string還是指向原來(lái)那個(gè)對(duì)象,也就是,和s指向同一個(gè)對(duì)象。
          問(wèn)題二:"=="和equals方法究竟有什么區(qū)別?
          ==操作符專門用來(lái)比較變量的值是否相等。比較好理解的一點(diǎn)是:
          int a=10;
          int b=10;
          則a==b將是true。
          但不好理解的地方是:
          String a=new String("foo");
          String b=new String("foo");
          則a==b將返回false。
          根據(jù)前一帖說(shuō)過(guò),對(duì)象變量其實(shí)是一個(gè)引用,它們的值是指向?qū)ο笏诘膬?nèi)存地址,而不是對(duì)象本身。a和b都使用了new操作符,意味著將在內(nèi)存中產(chǎn)生兩個(gè)內(nèi)容為"foo"的字符串,既然是“兩個(gè)”,它們自然位于不同的內(nèi)存地址。a和b的值其實(shí)是兩個(gè)不同的內(nèi)存地址的值,所以使用"=="操作符,結(jié)果會(huì)是 false。誠(chéng)然,a和b所指的對(duì)象,它們的內(nèi)容都是"foo",應(yīng)該是“相等”,但是==操作符并不涉及到對(duì)象內(nèi)容的比較。
          對(duì)象內(nèi)容的比較,正是equals方法做的事。
          看一下Object對(duì)象的equals方法是如何實(shí)現(xiàn)的:
          boolean equals(Object o){
          return this==o;
          }
          Object 對(duì)象默認(rèn)使用了==操作符。所以如果你自創(chuàng)的類沒(méi)有覆蓋equals方法,那你的類使用equals和使用==會(huì)得到同樣的結(jié)果。同樣也可以看出, Object的equals方法沒(méi)有達(dá)到equals方法應(yīng)該達(dá)到的目標(biāo):比較兩個(gè)對(duì)象內(nèi)容是否相等。因?yàn)榇鸢笐?yīng)該由類的創(chuàng)建者決定,所以O(shè)bject把這個(gè)任務(wù)留給了類的創(chuàng)建者。
          看一下一個(gè)極端的類:
          Class Monster{
          private String content;
          ...
          boolean equals(Object another){ return true;}
          }
          我覆蓋了equals方法。這個(gè)實(shí)現(xiàn)會(huì)導(dǎo)致無(wú)論Monster實(shí)例內(nèi)容如何,它們之間的比較永遠(yuǎn)返回true。
          所以當(dāng)你是用equals方法判斷對(duì)象的內(nèi)容是否相等,請(qǐng)不要想當(dāng)然。因?yàn)榭赡苣阏J(rèn)為相等,而這個(gè)類的作者不這樣認(rèn)為,而類的equals方法的實(shí)現(xiàn)是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列碼的集合(HashSet,HashMap,HashTable),請(qǐng)察看一下 java doc以確認(rèn)這個(gè)類的equals邏輯是如何實(shí)現(xiàn)的。
          問(wèn)題三:String到底變了沒(méi)有?
          沒(méi)有。因?yàn)镾tring被設(shè)計(jì)成不可變(immutable)類,所以它的所有對(duì)象都是不可變對(duì)象。請(qǐng)看下列代碼:
          String s = "Hello";
          s = s + " world!";
          s 所指向的對(duì)象是否改變了呢?從本系列第一篇的結(jié)論很容易導(dǎo)出這個(gè)結(jié)論。我們來(lái)看看發(fā)生了什么事情。在這段代碼中,s原先指向一個(gè)String對(duì)象,內(nèi)容是 "Hello",然后我們對(duì)s進(jìn)行了+操作,那么s所指向的那個(gè)對(duì)象是否發(fā)生了改變呢?答案是沒(méi)有。這時(shí),s不指向原來(lái)那個(gè)對(duì)象了,而指向了另一個(gè) String對(duì)象,內(nèi)容為"Hello world!",原來(lái)那個(gè)對(duì)象還存在于內(nèi)存之中,只是s這個(gè)引用變量不再指向它了。
          通過(guò)上面的說(shuō)明,我們很容易導(dǎo)出另一個(gè)結(jié)論,如果經(jīng)常對(duì)字符串進(jìn)行各種各樣的修改,或者說(shuō),不可預(yù)見(jiàn)的修改,那么使用String來(lái)代表字符串的話會(huì)引起很大的內(nèi)存開(kāi)銷。因?yàn)?String對(duì)象建立之后不能再改變,所以對(duì)于每一個(gè)不同的字符串,都需要一個(gè)String對(duì)象來(lái)表示。這時(shí),應(yīng)該考慮使用StringBuffer類,它允許修改,而不是每個(gè)不同的字符串都要生成一個(gè)新的對(duì)象。并且,這兩種類的對(duì)象轉(zhuǎn)換十分容易。
          同時(shí),我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都new一個(gè)String。例如我們要在構(gòu)造器中對(duì)一個(gè)名叫s的String引用變量進(jìn)行初始化,把它設(shè)置為初始值,應(yīng)當(dāng)這樣做:
          public class Demo {
          private String s;
          ...
          public Demo {
          s = "Initial Value";
          }
          ...
          }
          而非
          s = new String("Initial Value");
          后者每次都會(huì)調(diào)用構(gòu)造器,生成新對(duì)象,性能低下且內(nèi)存開(kāi)銷大,并且沒(méi)有意義,因?yàn)镾tring對(duì)象不可改變,所以對(duì)于內(nèi)容相同的字符串,只要一個(gè)String對(duì)象來(lái)表示就可以了。也就說(shuō),多次調(diào)用上面的構(gòu)造器創(chuàng)建多個(gè)對(duì)象,他們的String類型屬性s都指向同一個(gè)對(duì)象。
          上面的結(jié)論還基于這樣一個(gè)事實(shí):對(duì)于字符串常量,如果內(nèi)容相同,Java認(rèn)為它們代表同一個(gè)String對(duì)象。而用關(guān)鍵字new調(diào)用構(gòu)造器,總是會(huì)創(chuàng)建一個(gè)新的對(duì)象,無(wú)論內(nèi)容是否相同。
          至于為什么要把String類設(shè)計(jì)成不可變類,是它的用途決定的。其實(shí)不只String,很多Java標(biāo)準(zhǔn)類庫(kù)中的類都是不可變的。在開(kāi)發(fā)一個(gè)系統(tǒng)的時(shí)候,我們有時(shí)候也需要設(shè)計(jì)不可變類,來(lái)傳遞一組相關(guān)的值,這也是面向?qū)ο笏枷氲捏w現(xiàn)。不可變類有一些優(yōu)點(diǎn),比如因?yàn)樗膶?duì)象是只讀的,所以多線程并發(fā)訪問(wèn)也不會(huì)有任何問(wèn)題。當(dāng)然也有一些缺點(diǎn),比如每個(gè)不同的狀態(tài)都要一個(gè)對(duì)象來(lái)代表,可能會(huì)造成性能上的問(wèn)題。所以Java標(biāo)準(zhǔn)類庫(kù)還提供了一個(gè)可變版本,即 StringBuffer。
          問(wèn)題四:final關(guān)鍵字到底修飾了什么?
          final使得被修飾的變量"不變",但是由于對(duì)象型變量的本質(zhì)是“引用”,使得“不變”也有了兩種含義:引用本身的不變,和引用指向的對(duì)象不變。
          引用本身的不變:
          final StringBuffer a=new StringBuffer("immutable");
          final StringBuffer b=new StringBuffer("not immutable");
          a=b;//編譯期錯(cuò)誤
          引用指向的對(duì)象不變:
          final StringBuffer a=new StringBuffer("immutable");
          a.append(" broken!"); //編譯通過(guò)
          可見(jiàn),final只對(duì)引用的“值”(也即它所指向的那個(gè)對(duì)象的內(nèi)存地址)有效,它迫使引用只能指向初始指向的那個(gè)對(duì)象,改變它的指向會(huì)導(dǎo)致編譯期錯(cuò)誤。至于它所指向的對(duì)象的變化,final是不負(fù)責(zé)的。這很類似==操作符:==操作符只負(fù)責(zé)引用的“值”相等,至于這個(gè)地址所指向的對(duì)象內(nèi)容是否相等,==操作符是不管的。
          理解final問(wèn)題有很重要的含義。許多程序漏洞都基于此----final只能保證引用永遠(yuǎn)指向固定對(duì)象,不能保證那個(gè)對(duì)象的狀態(tài)不變。在多線程的操作中,一個(gè)對(duì)象會(huì)被多個(gè)線程共享或修改,一個(gè)線程對(duì)對(duì)象無(wú)意識(shí)的修改可能會(huì)導(dǎo)致另一個(gè)使用此對(duì)象的線程崩潰。一個(gè)錯(cuò)誤的解決方法就是在此對(duì)象新建的時(shí)候把它聲明為final,意圖使得它“永遠(yuǎn)不變”。其實(shí)那是徒勞的。
          問(wèn)題五:到底要怎么樣初始化!
          本問(wèn)題討論變量的初始化,所以先來(lái)看一下Java中有哪些種類的變量。
          1. 類的屬性,或者叫值域
          2. 方法里的局部變量
          3. 方法的參數(shù)
          對(duì)于第一種變量,Java虛擬機(jī)會(huì)自動(dòng)進(jìn)行初始化。如果給出了初始值,則初始化為該初始值。如果沒(méi)有給出,則把它初始化為該類型變量的默認(rèn)初始值。
          int類型變量默認(rèn)初始值為0
          float類型變量默認(rèn)初始值為0.0f
          double類型變量默認(rèn)初始值為0.0
          boolean類型變量默認(rèn)初始值為false
          char類型變量默認(rèn)初始值為0(ASCII碼)
          long類型變量默認(rèn)初始值為0
          所有對(duì)象引用類型變量默認(rèn)初始值為null,即不指向任何對(duì)象。注意數(shù)組本身也是對(duì)象,所以沒(méi)有初始化的數(shù)組引用在自動(dòng)初始化后其值也是null。
          對(duì)于兩種不同的類屬性,static屬性與instance屬性,初始化的時(shí)機(jī)是不同的。instance屬性在創(chuàng)建實(shí)例的時(shí)候初始化,static屬性在類加載,也就是第一次用到這個(gè)類的時(shí)候初始化,對(duì)于后來(lái)的實(shí)例的創(chuàng)建,不再次進(jìn)行初始化。這個(gè)問(wèn)題會(huì)在以后的系列中進(jìn)行詳細(xì)討論。
          對(duì)于第二種變量,必須明確地進(jìn)行初始化。如果再?zèng)]有初始化之前就試圖使用它,編譯器會(huì)抗議。如果初始化的語(yǔ)句在try塊中或if塊中,也必須要讓它在第一次使用前一定能夠得到賦值。也就是說(shuō),把初始化語(yǔ)句放在只有if塊的條件判斷語(yǔ)句中編譯器也會(huì)抗議,因?yàn)閳?zhí)行的時(shí)候可能不符合if后面的判斷條件,如此一來(lái)初始化語(yǔ)句就不會(huì)被執(zhí)行了,這就違反了局部變量使用前必須初始化的規(guī)定。但如果在else塊中也有初始化語(yǔ)句,就可以通過(guò)編譯,因?yàn)闊o(wú)論如何,總有至少一條初始化語(yǔ)句會(huì)被執(zhí)行,不會(huì)發(fā)生使用前未被初始化的事情。對(duì)于try-catch也是一樣,如果只有在try塊里才有初始化語(yǔ)句,編譯部通過(guò)。如果在 catch或finally里也有,則可以通過(guò)編譯。總之,要保證局部變量在使用之前一定被初始化了。所以,一個(gè)好的做法是在聲明他們的時(shí)候就初始化他們,如果不知道要出事化成什么值好,就用上面的默認(rèn)值吧!
          其實(shí)第三種變量和第二種本質(zhì)上是一樣的,都是方法中的局部變量。只不過(guò)作為參數(shù),肯定是被初始化過(guò)的,傳入的值就是初始值,所以不需要初始化。
          問(wèn)題六:instanceof是什么東東?
          instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)。舉個(gè)例子:
          String s = "I AM an Object!";
          boolean isObject = s instanceof Object;
          我們聲明了一個(gè)String對(duì)象引用,指向一個(gè)String對(duì)象,然后用instancof來(lái)測(cè)試它所指向的對(duì)象是否是Object類的一個(gè)實(shí)例,顯然,這是真的,所以返回true,也就是isObject的值為True。
          instanceof有一些用處。比如我們寫了一個(gè)處理賬單的系統(tǒng),其中有這樣三個(gè)類:
          public class Bill {//省略細(xì)節(jié)}
          public class PhoneBill extends Bill {//省略細(xì)節(jié)}
          public class GasBill extends Bill {//省略細(xì)節(jié)}
          在處理程序里有一個(gè)方法,接受一個(gè)Bill類型的對(duì)象,計(jì)算金額。假設(shè)兩種賬單計(jì)算方法不同,而傳入的Bill對(duì)象可能是兩種中的任何一種,所以要用instanceof來(lái)判斷:
          public double calculate(Bill bill) {
          if (bill instanceof PhoneBill) {
          //計(jì)算電話賬單
          }
          if (bill instanceof GasBill) {
          //計(jì)算燃?xì)赓~單
          }
          ...
          }
          這樣就可以用一個(gè)方法處理兩種子類。
          然而,這種做法通常被認(rèn)為是沒(méi)有好好利用面向?qū)ο笾械亩鄳B(tài)性。其實(shí)上面的功能要求用方法重載完全可以實(shí)現(xiàn),這是面向?qū)ο笞兂蓱?yīng)有的做法,避免回到結(jié)構(gòu)化編程模式。只要提供兩個(gè)名字和返回值都相同,接受參數(shù)類型不同的方法就可以了:
          public double calculate(PhoneBill bill) {
          //計(jì)算電話賬單
          }
          public double calculate(GasBill bill) {
          //計(jì)算燃?xì)赓~單
          }
          所以,使用instanceof在絕大多數(shù)情況下并不是推薦的做法,應(yīng)當(dāng)好好利用多態(tài)。

          BeanSoft 參加過(guò)的一次面試:

           

          2004年8月18日 星期三 〖農(nóng)歷 甲申 猴年 七月初三〗

          筆試題目
          1. 寫出常用的 Linux 命令
          a) 列出當(dāng)前目錄
          b) 列出所有系統(tǒng)變量
          c) 重命名文件
          d) etc... 記不住了.

          2. Write a Java application use the Singleton pattern, it should have one instance per class. It should have two integer variable, one is count, on is inita. There should be two methods in this class, and the method should be thread safely in multi-thread environment.
          a) a count() method, after each call the count should be added on by 1;
          b) a reset() method, after each call the count should be set to the value of inita.

          3. Write a JavaBean and a JSP file. The page should output a date string in this pattern "今天是2004年8月15日上午10:00", the value is taken from the bean.

          4. 以下三個(gè)題目, 任選其一或多個(gè):
          1) 忘了..., 是關(guān)于 Java 的.
          2) 寫一個(gè)應(yīng)用程序, 讀出 STUDENT 表中的數(shù)據(jù)并打印出所有名稱. 數(shù)據(jù)庫(kù)系統(tǒng)任選.
          3) 寫一個(gè) Servlet, 讀取名為 url 的參數(shù), 并連接到此字符串指定的地址上, 讀取所有內(nèi)容后顯示給客戶.

          5. 6. 7. 都是關(guān)于 SQL 的, 例如 SELECT, UPDATE, DELETE 之類的, 還有的有子查詢. 數(shù)據(jù)庫(kù)系統(tǒng)沒(méi)有限制.

          8. Write a html file, it shoud has follow functions:
          1) check whether the user's name is empty;
          2) the email address should has a '@';
          3) telephone number must be '1'-'9', '-', ' '(space).
          Page picture:
          Please input your name:
          [____________________] [Check input]
          Please input your address:
          [abc@________________] [Check input]
          Please input your telephone number:
          [____123a____________] [Check input]

           

          Java 面試題及其答案

          前段時(shí)間因?yàn)橐獏⒓右粋€(gè)筆試,在準(zhǔn)備期間在網(wǎng)上找到了兩條關(guān)于筆試題目的文章,其中一篇為<<有感:應(yīng)聘Java筆試時(shí)可能出現(xiàn)問(wèn)題>>,還有一篇忘了名字,讀后深受啟發(fā)。
          在尋找這些答案的過(guò)程中,我將相關(guān)答案記錄下來(lái),就形成了以下這些東西。需要說(shuō)明的是以下答案肯定有很多不完整甚至錯(cuò)誤的地方,需要各位來(lái)更正與完善它,千萬(wàn)不要扔我的雞蛋啊。
          希望本文能夠給即將奔赴筆試考場(chǎng)的同仁些許幫助,更希望更多的人加入到收集整理筆試題與完善答案的這些工作中來(lái),為大家更好的獲得工作機(jī)會(huì)做一點(diǎn)貢獻(xiàn)。
          在此感謝前面兩文的作者的對(duì)筆試題目的收集與整理。
          如有任何意見(jiàn)與建議請(qǐng)通過(guò)QQ:6045306,Mail:huijunzi@21cn.com與我聯(lián)系。
          Java基礎(chǔ)方面:

          1、作用域public,private,protected,以及不寫時(shí)的區(qū)別
          答:區(qū)別如下:
          作用域 當(dāng)前類 同一package 子孫類 其他package
          public √ √ √ √
          protected √ √ √ ×
          friendly √ √ × ×
          private √ × × ×
          不寫時(shí)默認(rèn)為friendly

          2、ArrayList和Vector的區(qū)別,HashMap和Hashtable的區(qū)別
          答:就ArrayList與Vector主要從二方面來(lái)說(shuō).
          一.同步性:Vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是線程序不安全的,不是同步的
          二.數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半
          就HashMap與HashTable主要從三方面來(lái)說(shuō)。
          一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)
          二.同步性:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全的,不是同步的
          三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value

          3、char型變量中能不能存貯一個(gè)中文漢字?為什么?
          答:是能夠定義成為一個(gè)中文的,因?yàn)閖ava中以u(píng)nicode編碼,一個(gè)char占16個(gè)字節(jié),所以放一個(gè)中文是沒(méi)問(wèn)題的

          4、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
          答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
          同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify

          5、繼承時(shí)候類的執(zhí)行順序問(wèn)題,一般都是選擇題,問(wèn)你將會(huì)打印出什么?
          答:父類:
          package test;
          public class FatherClass
          {
          public FatherClass()
          {
          System.out.println("FatherClass Create");
          }
          }
          子類:
          package test;
          import test.FatherClass;
          public class ChildClass extends FatherClass
          {
          public ChildClass()
          {
          System.out.println("ChildClass Create");
          }
          public static void main(String[] args)
          {
          FatherClass fc = new FatherClass();
          ChildClass cc = new ChildClass();
          }
          }
          輸出結(jié)果:
          C:\>java test.ChildClass
          FatherClass Create
          FatherClass Create
          ChildClass Create

          6、內(nèi)部類的實(shí)現(xiàn)方式?
          答:示例代碼如下:
          package test;
          public class OuterClass
          {
          private class InterClass
          {
          public InterClass()
          {
          System.out.println("InterClass Create");
          }
          }
          public OuterClass()
          {
          InterClass ic = new InterClass();
          System.out.println("OuterClass Create");
          }
          public static void main(String[] args)
          {
          OuterClass oc = new OuterClass();
          }
          }
          輸出結(jié)果:
          C:\>java test/OuterClass
          InterClass Create
          OuterClass Create
          再一個(gè)例題:
          public class OuterClass {
          private double d1 = 1.0;
          //insert code here
          }
          You need to insert an inner class declaration at line 3. Which two inner class declarations are

          valid?(Choose two.)
          A. class InnerOne{
          public static double methoda() {return d1;}
          }
          B. public class InnerOne{
          static double methoda() {return d1;}
          }
          C. private class InnerOne{
          double methoda() {return d1;}
          }
          D. static class InnerOne{
          protected double methoda() {return d1;}
          }
          E. abstract class InnerOne{
          public abstract double methoda();
          }
          說(shuō)明如下:
          一.靜態(tài)內(nèi)部類可以有靜態(tài)成員,而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員。 故 A、B 錯(cuò)
          二.靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問(wèn)外部類的靜態(tài)變量,而不可訪問(wèn)外部類的非靜態(tài)變量;return d1 出錯(cuò)。

          故 D 錯(cuò)
          三.非靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問(wèn)外部類的非靜態(tài)變量。 故 C 正確
          四.答案為C、E

          7、垃圾回收機(jī)制,如何優(yōu)化程序?
          希望大家補(bǔ)上,謝謝

          8、float型float f=3.4是否正確?
          答:不正確。精度不準(zhǔn)確,應(yīng)該用強(qiáng)制類型轉(zhuǎn)換,如下所示:float f=(float)3.4

          9、介紹JAVA中的Collection FrameWork(包括如何寫自己的數(shù)據(jù)結(jié)構(gòu))?
          答:Collection FrameWork如下:
          Collection
          ├List
          │├LinkedList
          │├ArrayList
          │└Vector
          │ └Stack
          └Set
          Map
          ├Hashtable
          ├HashMap
          └WeakHashMap
          Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素(Elements)
          Map提供key到value的映射

          10、Java中異常處理機(jī)制,事件機(jī)制?

          11、JAVA中的多形與繼承?
          希望大家補(bǔ)上,謝謝

          12、抽象類與接口?
          答:抽象類與接口都用于抽象,但是抽象類(JAVA中)可以有自己的部分實(shí)現(xiàn),而接口則完全是一個(gè)標(biāo)識(shí)(同時(shí)有多重繼承的功能)。

          13、Java 的通信編程,編程題(或問(wèn)答),用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();
          }
          };

          14、用JAVA實(shí)現(xiàn)一種排序,JAVA類實(shí)現(xiàn)序列化的方法(二種)? 如在COLLECTION框架中,實(shí)現(xiàn)比較要實(shí)現(xiàn)什么樣的接口?
          答:用插入法進(jìn)行排序代碼如下
          package test;
          import java.util.*;
          class InsertSort
          {
          ArrayList al;
          public InsertSort(int num,int mod)
          {
          al = new ArrayList(num);
          Random rand = new Random();
          System.out.println("The ArrayList Sort Before:");
          for (int i=0;i<num ;i++ )
          {
          al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
          System.out.println("al["+i+"]="+al.get(i));
          }
          }
          public void SortIt()
          {
          Integer tempInt;
          int MaxSize=1;
          for(int i=1;i<al.size();i++)
          {
          tempInt = (Integer)al.remove(i);
          if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
          {
          al.add(MaxSize,tempInt);
          MaxSize++;
          System.out.println(al.toString());
          } else {
          for (int j=0;j<MaxSize ;j++ )
          {
          if

          (((Integer)al.get(j)).intValue()>=tempInt.intValue())
          {
          al.add(j,tempInt);
          MaxSize++;
          System.out.println(al.toString());
          break;
          }
          }
          }
          }
          System.out.println("The ArrayList Sort After:");
          for(int i=0;i<al.size();i++)
          {
          System.out.println("al["+i+"]="+al.get(i));
          }
          }
          public static void main(String[] args)
          {
          InsertSort is = new InsertSort(10,100);
          is.SortIt();
          }
          }
          JAVA類實(shí)現(xiàn)序例化的方法是實(shí)現(xiàn)java.io.Serializable接口
          Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)Comparable 接口和 Comparator 接口

          15、編程:編寫一個(gè)截取字符串的函數(shù),輸入為一個(gè)字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個(gè),如“我ABC”4,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個(gè)”。
          答:代碼如下:
          package test;

          class SplitString
          {
          String SplitStr;
          int SplitByte;
          public SplitString(String str,int bytes)
          {
          SplitStr=str;
          SplitByte=bytes;
          System.out.println("The String is:′"+SplitStr+"′SplitBytes="+SplitByte);
          }
          public void SplitIt()
          {
          int loopCount;

          loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

          Byte+1);
          System.out.println("Will Split into "+loopCount);
          for (int i=1;i<=loopCount ;i++ )
          {
          if (i==loopCount){

          System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
          } else {

          System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
          }
          }
          }
          public static void main(String[] args)
          {
          SplitString ss = new SplitString("test中dd文dsaf中男大3443n中國(guó)43中國(guó)人

          0ewldfls=103",4);
          ss.SplitIt();
          }
          }

          16、JAVA多線程編程。 用JAVA寫一個(gè)多線程程序,如寫四個(gè)線程,二個(gè)加1,二個(gè)對(duì)一個(gè)變量減一,輸出。
          希望大家補(bǔ)上,謝謝

          17、STRING與STRINGBUFFER的區(qū)別。
          答:STRING的長(zhǎng)度是不可變的,STRINGBUFFER的長(zhǎng)度是可變的。如果你對(duì)字符串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

          Jsp方面

          1、jsp有哪些內(nèi)置對(duì)象?作用分別是什么?
          答:JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對(duì)應(yīng)):
           request 用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù)
          response 網(wǎng)頁(yè)傳回用戶端的回應(yīng)
          pageContext 網(wǎng)頁(yè)的屬性是在這里管理
          session 與請(qǐng)求有關(guān)的會(huì)話期
          application servlet 正在執(zhí)行的內(nèi)容
          out 用來(lái)傳送回應(yīng)的輸出
          config servlet的構(gòu)架部件
          page JSP網(wǎng)頁(yè)本身
          exception 針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外

          2、jsp有哪些動(dòng)作?作用分別是什么?
          答:JSP共有以下6種基本動(dòng)作
          jsp:include:在頁(yè)面被請(qǐng)求的時(shí)候引入一個(gè)文件。
          jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。
          jsp:setProperty:設(shè)置JavaBean的屬性。
          jsp:getProperty:輸出某個(gè)JavaBean的屬性。
          jsp:forward:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁(yè)面。
          jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記

          3、JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
          答:動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現(xiàn)
          <jsp:include page="included.jsp" flush="true" />它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數(shù)
          靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面
          <%@ include file="included.htm" %>

          4、兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別?
          答:有兩種,分別為:
          <jsp:include page="included.jsp" flush="true">
          <jsp:forward page= "nextpage.jsp"/>
          前者頁(yè)面不會(huì)轉(zhuǎn)向include所指的頁(yè)面,只是顯示該頁(yè)的結(jié)果,主頁(yè)面還是原來(lái)的頁(yè)面。執(zhí)行完后還會(huì)回來(lái),相當(dāng)于函數(shù)調(diào)用。并且可以帶參數(shù).后者完全轉(zhuǎn)向新頁(yè)面,不會(huì)再回來(lái)。相當(dāng)于go to 語(yǔ)句。

          Servlet方面

          1、說(shuō)一說(shuō)Servlet的生命周期?
          答:servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理請(qǐng)求以及服務(wù)結(jié)束。這個(gè)生存期由javax.servlet.Servlet接口的init,service和destroy方法表達(dá)。

          2、Servlet版本間(忘了問(wèn)的是哪兩個(gè)版本了)的不同?
          希望大家補(bǔ)上,謝謝

          3、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()方法。

          4、Servlet的基本架構(gòu)
          public class ServletName extends HttpServlet {
          public void doPost(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {
          }
          public void doGet(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {
          }
          }

          Jdbc、Jdo方面

          1、可能會(huì)讓你寫一段Jdbc連Oracle的程序,并實(shí)現(xiàn)數(shù)據(jù)查詢.
          答:程序如下:
          package hello.ant;
          import java.sql.*;
          public class jdbc
          {
          String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
          String theUser="admin"
          String thePw="manager"
          Connection c=null;
          Statement conn;
          ResultSet rs=null;
          public jdbc()
          {
          try{
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          c = DriverManager.getConnection(dbUrl,theUser,thePw);
          conn=c.createStatement();
          }catch(Exception e){
          e.printStackTrace();
          }
          }
          public boolean executeUpdate(String sql)
          {
          try
          {
          conn.executeUpdate(sql);
          return true;
          }
          catch (SQLException e)
          {
          e.printStackTrace();
          return false;
          }
          }
          public ResultSet executeQuery(String sql)
          {
          rs=null;
          try
          {
          rs=conn.executeQuery(sql);
          }
          catch (SQLException e)
          {
          e.printStackTrace();
          }
          return rs;
          }
          public void close()
          {
          try
          {
          conn.close();
          c.close();
          }
          catch (Exception e)
          {
          e.printStackTrace();
          }
          }
          public static void main(String[] args)
          {
          ResultSet rs;
          jdbc conn = new jdbc();
          rs=conn.executeQuery("select * from test");
          try{
          while (rs.next())
          {
          System.out.println(rs.getString("id"));
          System.out.println(rs.getString("name"));
          }
          }catch(Exception e)
          {
          e.printStackTrace();
          }
          }
          }

          2、Class.forName的作用?為什么要用?
          答:調(diào)用該訪問(wèn)返回一個(gè)以字符串指定類名的類的對(duì)象。

          3、Jdo是什么?
          答:JDO是Java對(duì)象持久化的新的規(guī)范,為java data object的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的對(duì)象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開(kāi)發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開(kāi)發(fā)人員解脫出來(lái),從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(kù)(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫(kù)、文件、XML以及對(duì)象數(shù)據(jù)庫(kù)(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。

          4、在ORACLE大數(shù)據(jù)量下的分頁(yè)解決方法。一般用截取ID方法,還有是三層嵌套方法。
          答:一種分頁(yè)方法
          <%
          int i=1;
          int numPages=14;
          String pages = request.getParameter("page") ;
          int currentPage = 1;
          currentPage=(pages==null)?(1):{Integer.parseInt(pages)}
          sql = "select count(*) from tables"
          ResultSet rs = DBLink.executeQuery(sql) ;
          while(rs.next()) i = rs.getInt(1) ;
          int intPageCount=1;
          intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);
          int nextPage ;
          int upPage;
          nextPage = currentPage+1;
          if (nextPage>=intPageCount) nextPage=intPageCount;
          upPage = currentPage-1;
          if (upPage<=1) upPage=1;
          rs.close();
          sql="select * from tables"
          rs=DBLink.executeQuery(sql);
          i=0;
          while((i<numPages*(currentPage-1))&&rs.next()){i++;}
          %>
          //輸出內(nèi)容
          //輸出翻頁(yè)連接
          合計(jì):<%=currentPage%>/<%=intPageCount%><a href="List.jsp?page=1">第一頁(yè)</a><a

          href="List.jsp?page=<%=upPage%>">上一頁(yè)</a>
          <%
          for(int j=1;j<=intPageCount;j++){
          if(currentPage!=j){
          %>
          <a href="list.jsp?page=<%=j%>">[<%=j%>]</a>
          <%
          }else{
          out.println(j);
          }
          }
          %>
          <a href="List.jsp?page=<%=nextPage%>">下一頁(yè)</a><a href="List.jsp?page=<%=intPageCount%>">最后頁(yè)

          </a>

          Xml方面

          1、xml有哪些解析技術(shù)?區(qū)別是什么?
          答:有DOM,SAX,STAX等
          DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問(wèn)題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問(wèn)SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開(kāi)頭,文檔結(jié)束,或者標(biāo)簽開(kāi)頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過(guò)在其回調(diào)事件中寫入處理代碼來(lái)處理XML文件,適合對(duì)XML的順序訪問(wèn)
          STAX:Streaming API for XML (StAX)

          2、你在項(xiàng)目中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的?
          答:用到了數(shù)據(jù)存貯,信息配置兩方面。在做數(shù)據(jù)交換平臺(tái)時(shí),將不能數(shù)據(jù)源的數(shù)據(jù)組裝成XML文件,然后將XML文件壓縮打包加密后通過(guò)網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再同XML文件中還原相關(guān)信息進(jìn)行處理。在做軟件配置時(shí),利用XML可以很方便的進(jìn)行,軟件的各種配置參數(shù)都存貯在XML文件中。

          3、用jdom解析xml文件時(shí)如何解決中文問(wèn)題?如何解析?
          答:看如下代碼,用編碼方式加以解決
          package test;
          import java.io.*;
          public class DOMTest
          {
          private String inFile = "c:\\people.xml"
          private String outFile = "c:\\people.xml"
          public static void main(String args[])
          {
          new DOMTest();
          }
          public DOMTest()
          {
          try
          {
          javax.xml.parsers.DocumentBuilder builder =

          javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
          org.w3c.dom.Document doc = builder.newDocument();
          org.w3c.dom.Element root = doc.createElement("老師");
          org.w3c.dom.Element wang = doc.createElement("王");
          org.w3c.dom.Element liu = doc.createElement("劉");
          wang.appendChild(doc.createTextNode("我是王老師"));
          root.appendChild(wang);
          doc.appendChild(root);
          javax.xml.transform.Transformer transformer =
          javax.xml.transform.TransformerFactory.newInstance().newTransformer();
          transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");
          transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");

          transformer.transform(new javax.xml.transform.dom.DOMSource(doc),
          new

          javax.xml.transform.stream.StreamResult(outFile));
          }
          catch (Exception e)
          {
          System.out.println (e.getMessage());
          }
          }
          }

          4、編程用JAVA解析XML的方式.
          答:用SAX方式解析XML,XML文件如下:
          <?xml version="1.0" encoding="gb2312"?>
          <person>
          <name>王小明</name>
          <college>信息學(xué)院</college>
          <telephone>6258113</telephone>
          <notes>男,1955年生,博士,95年調(diào)入海南大學(xué)</notes>
          </person>
          事件回調(diào)類SAXHandler.java
          import java.io.*;
          import java.util.Hashtable;
          import org.xml.sax.*;
          public class SAXHandler extends HandlerBase
          {
          private Hashtable table = new Hashtable();
          private String currentElement = null;
          private String currentValue = null;
          public void setTable(Hashtable table)
          {
          this.table = table;
          }
          public Hashtable getTable()
          {
          return table;
          }
          public void startElement(String tag, AttributeList attrs)
          throws SAXException
          {
          currentElement = tag;
          }
          public void characters(char[] ch, int start, int length)
          throws SAXException
          {
          currentValue = new String(ch, start, length);
          }
          public void endElement(String name) throws SAXException
          {
          if (currentElement.equals(name))
          table.put(currentElement, currentValue);
          }
          }
          JSP內(nèi)容顯示源碼,SaxXml.jsp:
          <HTML>
          <HEAD>
          <TITLE>剖析XML文件people.xml</TITLE>
          </HEAD>
          <BODY>
          <%@ page errorPage="ErrPage.jsp"
          contentType="text/html;charset=GB2312" %>
          <%@ page import="java.io.*" %>
          <%@ page import="java.util.Hashtable" %>
          <%@ page import="org.w3c.dom.*" %>
          <%@ page import="org.xml.sax.*" %>
          <%@ page import="javax.xml.parsers.SAXParserFactory" %>
          <%@ page import="javax.xml.parsers.SAXParser" %>
          <%@ page import="SAXHandler" %>
          <%
          File file = new File("c:\\people.xml");
          FileReader reader = new FileReader(file);
          Parser parser;
          SAXParserFactory spf = SAXParserFactory.newInstance();
          SAXParser sp = spf.newSAXParser();
          SAXHandler handler = new SAXHandler();
          sp.parse(new InputSource(reader), handler);
          Hashtable hashTable = handler.getTable();
          out.println("<TABLE BORDER=2><CAPTION>教師信息表</CAPTION>");
          out.println("<TR><TD>姓名</TD>" + "<TD>" +
          (String)hashTable.get(new String("name")) + "</TD></TR>");
          out.println("<TR><TD>學(xué)院</TD>" + "<TD>" +
          (String)hashTable.get(new String("college"))+"</TD></TR>");
          out.println("<TR><TD>電話</TD>" + "<TD>" +
          (String)hashTable.get(new String("telephone")) + "</TD></TR>");
          out.println("<TR><TD>備注</TD>" + "<TD>" +
          (String)hashTable.get(new String("notes")) + "</TD></TR>");
          out.println("</TABLE>");
          %>
          </BODY>
          </HTML>

          EJB方面

          1、EJB2.0有哪些內(nèi)容?分別用在什么場(chǎng)合? EJB2.0和EJB1.1的區(qū)別?
          答:規(guī)范內(nèi)容包括Bean提供者,應(yīng)用程序裝配者,EJB容器,EJB配置工具,EJB服務(wù)提供者,系統(tǒng)管理員。這里面,EJB容器是EJB之所以能夠運(yùn)行的核心。EJB容器管理著EJB的創(chuàng)建,撤消,激活,去活,與數(shù)據(jù)庫(kù)的連接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS.....

          2、EJB與JAVA BEAN的區(qū)別?
          答:Java Bean 是可復(fù)用的組件,對(duì)Java Bean并沒(méi)有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java類都可以是一個(gè)Bean。但通常情況下,由于Java Bean是被容器所創(chuàng)建(如Tomcat)的,所以Java Bean應(yīng)具有一個(gè)無(wú)參的構(gòu)造器,另外,通常Java Bean還要實(shí)現(xiàn)Serializable接口用于實(shí)現(xiàn)Bean的持久性。Java Bean實(shí)際上相當(dāng)于微軟COM模型中的本地進(jìn)程內(nèi)COM組件,它是不能被跨進(jìn)程訪問(wèn)的。Enterprise Java Bean 相當(dāng)于DCOM,即分布式組件。它是基于Java的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB可以被遠(yuǎn)程訪問(wèn)(跨進(jìn)程、跨計(jì)算機(jī))。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問(wèn)真正的EJB組件,而是通過(guò)其容器訪問(wèn)。EJB容器是EJB組件的代理,EJB組件由容器所創(chuàng)建和管理。客戶通過(guò)容器來(lái)訪問(wèn)真正的EJB組件。

          3、EJB的基本架構(gòu)
          答:一個(gè)EJB包括三個(gè)部分:
          Remote Interface 接口的代碼
          package Beans;
          import javax.ejb.EJBObject;
          import java.rmi.RemoteException;
          public interface Add extends EJBObject
          {
          //some method declare
          }
          Home Interface 接口的代碼
          package Beans;
          import java.rmi.RemoteException;
          import jaax.ejb.CreateException;
          import javax.ejb.EJBHome;
          public interface AddHome extends EJBHome
          {
          //some method declare
          }
          EJB類的代碼
          package Beans;
          import java.rmi.RemoteException;
          import javax.ejb.SessionBean;
          import javx.ejb.SessionContext;
          public class AddBean Implements SessionBean
          {
          //some method declare
          }

          J2EE,MVC方面

          1、MVC的各個(gè)部分都有那些技術(shù)來(lái)實(shí)現(xiàn)?如何實(shí)現(xiàn)?
          答:MVC是Model-View-Controller的簡(jiǎn)寫。"Model" 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過(guò)JavaBean,EJB組件實(shí)現(xiàn)), "View" 是應(yīng)用的表示面(由JSP頁(yè)面產(chǎn)生),"Controller" 是提供應(yīng)用的處理過(guò)程控制(一般是一個(gè)Servlet),通過(guò)這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。

          2、應(yīng)用服務(wù)器與WEB SERVER的區(qū)別?
          希望大家補(bǔ)上,謝謝

          3、J2EE是什么?
          答:Je22是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)層。

          4、WEB SERVICE名詞解釋。JSWDL開(kāi)發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
          答:Web Service描述語(yǔ)言WSDL
          SOAP即簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級(jí)協(xié)議。
          UDDI 的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時(shí)也包含一組使企業(yè)能將自身提供的Web Service注冊(cè),以使別的企業(yè)能夠發(fā)現(xiàn)的訪問(wèn)協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。

          5、BS與CS的聯(lián)系與區(qū)別。
          希望大家補(bǔ)上,謝謝

          6、STRUTS的應(yīng)用(如STRUTS架構(gòu))
          答:Struts是采用Java Servlet/JavaServer Pages技術(shù),開(kāi)發(fā)Web應(yīng)用程序的開(kāi)放源碼的framework。 采用Struts能開(kāi)發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。 Struts有如下的主要功能:
          一.包含一個(gè)controller servlet,能將用戶的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象。
          二.JSP自由tag庫(kù),并且在controller servlet中提供關(guān)聯(lián)支持,幫助開(kāi)發(fā)員創(chuàng)建交互式表單應(yīng)用。
          三.提供了一系列實(shí)用對(duì)象:XML處理、通過(guò)Java reflection APIs自動(dòng)處理JavaBeans屬性、國(guó)際化的提示和消息。

          設(shè)計(jì)模式方面

          1、開(kāi)發(fā)中都用到了那些設(shè)計(jì)模式?用在什么場(chǎng)合?
          答:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問(wèn)題,然后描述了該問(wèn)題的解決方案的核心。通過(guò)這種方式,你可以無(wú)數(shù)次地使用那些已有的解決方案,無(wú)需在重復(fù)相同的工作。主要用到了MVC的設(shè)計(jì)模式。用來(lái)開(kāi)發(fā)JSP/Servlet或者J2EE的相關(guān)應(yīng)用。簡(jiǎn)單工廠模式等。

          2、UML方面
          答:標(biāo)準(zhǔn)建模語(yǔ)言UML。用例圖,靜態(tài)圖(包括類圖、對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖,

          JavaScript方面

          1、如何校驗(yàn)數(shù)字型?
          var re=/^\d{1,8}$|\.\d{1,2}$/;
          var str=document.form1.all(i).value;
          var r=str.match(re);
          if (r==null)
          {
          sign=-4;
          break;
          }
          else{
          document.form1.all(i).value=parseFloat(str);
          }

          CORBA方面

          1、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)化。它的組成是接口定義語(yǔ)言(IDL), 語(yǔ)言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。 其目的為:
          用不同的程序設(shè)計(jì)語(yǔ)言書寫
          在不同的進(jìn)程中運(yùn)行
          為不同的操作系統(tǒng)開(kāi)發(fā)

          LINUX方面

          1、LINUX下線程,GDI類的解釋。
          答:LINUX實(shí)現(xiàn)的就是基于核心輕量級(jí)進(jìn)程的"一對(duì)一"線程模型,一個(gè)線程實(shí)體對(duì)應(yīng)一個(gè)核心輕量級(jí)進(jìn)程,而線程之間的管理在核外函數(shù)庫(kù)中實(shí)現(xiàn)。
          GDI類為圖像設(shè)備編程接口類庫(kù)。



          posted on 2007-07-15 19:28 BlueSky_itwangxinli 閱讀(1330) 評(píng)論(3)  編輯  收藏
          評(píng)論:

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


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © BlueSky_itwangxinli Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 信阳市| 江门市| 江北区| 林芝县| 尚志市| 越西县| 凤城市| 青岛市| 济阳县| 晋中市| 海伦市| 灵丘县| 当雄县| 安义县| 舒兰市| 冕宁县| 唐河县| 黑龙江省| 德令哈市| 横峰县| 固安县| 潢川县| 贵州省| 建湖县| 江孜县| 高雄县| 鄄城县| 桑日县| 牟定县| 绥滨县| 驻马店市| 水城县| 邵阳市| 清镇市| 忻城县| 阿坝县| 新蔡县| 安义县| 南京市| 嘉荫县| 玉田县|