天天看點

java面試題1

一、基礎問答

  1.下面哪些類可以被繼承?

   java.lang.Thread (T)

java.lang.Number (T)

java.lang.Double (F)

java.lang.Math (F)

java.lang.Void (F)

java.lang.Class (F)

java.lang.ClassLoader (T)

  2.抽象類和接口的差別

  (1)接口可以被多重implements,抽象類隻能被單一extends

(2)接口隻有定義,抽象類可以有定義和實作

(3)接口的字段定義預設為:public static final, 抽象類字段預設是"friendly"(本包可見)

  3.Hashtable的原理,并說出HashMap與Hashtable的差別

  HashTable的原理:通過節點的關鍵碼确定節點的存儲位置,即給定節點的關鍵碼k,通過一定的函數關系H(散列函數),得到函數值H(k),将此值解釋為該節點的存儲位址.

HashMap 與Hashtable很相似,但HashMap 是非同步(unsynchronizded)和可以以null為關鍵碼的.

  4.forward和redirect的差別

  forward: an internal transfer in servlet

redirect: 重定向,有2次request,第2次request将丢失第一次的attributs/parameters等

  5.什麼是Web容器?

  實作J2EE規範中web協定的應用.該協定定義了web程式的運作時環境,包括:并發性,安全性,生命周期管理等等.

  6.解釋下面關于J2EE的名詞

  (1)JNDI:Java Naming & Directory Interface,JAVA命名目錄服務.主要提供的功能是:提供一個目錄系統,讓其它各地的應用程式在其上面留下自己的索引,進而滿足快速查找和定位分布式應用程式的功能.

(2)JMS:Java Message Service,JAVA消息服務.主要實作各個應用程式之間的通訊.包括點對點和廣播.

(3)JTA:Java Transaction API,JAVA事務服務.提供各種分布式事務服務.應用程式隻需調用其提供的接口即可.

(4)JAF: Java Action FrameWork,JAVA安全認證架構.提供一些安全控制方面的架構.讓開發者通過各種部署和自定義實作自己的個性安全控制政策.

(5)RMI:Remote Method Interface,遠端方法調用

  7.EJB是基于哪些技術實作的?并說 出SessionBean和EntityBean的差別,StatefulBean和StatelessBean的差別.

  EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術實作.

  SessionBean在J2EE應用程式中被用來完成一些伺服器端的業務操作,例如通路資料庫、調用其他EJB元件.EntityBean被用來代表應用系統中用到的資料.對于客戶機,SessionBean是一種非持久性對象,它實作某些在伺服器上運作的業務邏輯;EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程式實作的實體.

  Session Bean 還可以再細分為 Stateful Session Bean 與 Stateless Session Bean .這兩種的 Session Bean都可以将系統邏輯放在 method之中執行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀态,是以通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體.Stateless Session Bean 雖然也是邏輯元件,但是他卻不負責記錄使用者狀态,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實體來執行這個 method.換言之,很可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行.從記憶體方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的記憶體,然而 Stateful Session Bean 的優勢卻在于他可以維持使用者的狀态.

  8.XML的解析方法

  Sax,DOM,JDOM

  9.什麼是Web Service?

  Web Service就是為了使原來各孤立的站點之間的資訊能夠互相通信、共享而提出的一種接口。

Web Service所使用的是Internet上統一、開放的标準,如HTTP、XML、SOAP(簡單對象通路協定)、WSDL等,是以Web Service可以在任何支援這些标準的環境(Windows,Linux)中使用。

  注:SOAP協定(Simple Object Access Protocal,簡單對象通路協定),它是一個用于分散和分布式環境下網絡資訊交換的基于XML的通訊協定。在此協定下,軟體元件或應用程式能夠通過标準的HTTP協定進行通訊。它的設計目标就是簡單性和擴充性,這有助于大量異構程式和平台之間的互操作性,進而使存在的應用程式能夠被廣泛的使用者通路。

  優勢:

  (1).跨平台。

(2).SOAP協定是基于XML和HTTP這些業界的标準的,得到了所有的重要公司的支援。

(3).由于使用了SOAP,資料是以ASCII文本的方式而非二進制傳輸,調試很友善;并且由于這樣,它的資料容易通過防火牆,不需要防火牆為了程式而單獨開一個“漏洞”。

(4).此外,WebService實作的技術難度要比CORBA和DCOM小得多。

(5).要實作B2B內建,EDI比較完善與比較複雜;而用WebService則可以低成本的實作,小公司也可以用上。

(6).在C/S的程式中,WebService可以實作網頁無整體重新整理的與伺服器打交道并取數。

  缺點:

  (1).WebService使用了XML對資料封裝,會造成大量的資料要在網絡中傳輸。

(2).WebService規範沒有規定任何與實作相關的細節,包括對象模型、程式設計語言,這一點,它不如CORBA。

  10.多線程有幾種實作方法,都是什麼?同步有幾種實作方法,都是什麼?

  答:多線程有兩種實作方法,分别是繼承Thread類與實作Runnable接口

同步的實作方面有兩種,分别是synchronized,wait與notify

  11.JSP中動态INCLUDE與靜态INCLUDE的差別?

  動态INCLUDE用jsp:include動作實作

<jsp:include page="included.jsp" flush="true"/>

  它總是會檢查所含檔案中的變化,适合用于包含動态頁面,并且可以帶參數

  靜态INCLUDE用include僞碼實作,定不會檢查所含檔案的變化,适用于包含靜态頁面

  <%@ include file="included.htm" %>

二、Java程式設計與程式運作結果

  1.Java程式設計,列印昨天的目前時刻

public class YesterdayCurrent{

public void main(String[] args){

Calendar cal = Calendar.getInstance();

cal.add(Calendar.DATE, -1);

System.out.println(cal.getTime());

}

  2.檔案讀寫,實作一個計數器

public int getNum(){

int i = -1;

try{

String stri="";

BufferedReader in = new BufferedReader(new FileReader(f));

while((stri=in.readLine())!=null){

i = Integer.parseInt(stri.trim());

in.close();

}catch(Exception e){

e.printStackTrace();

return i;

public void setNum(){

int i = getNum();

i++; 

PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false))); 

out.write(String.valueOf(i)); //可能是編碼的原因,如果直接寫入int的話,将出現java編碼和windows編碼的混亂,是以此處寫入的是String

out.close() ;

  3. 指出下面程式的運作結果:

class A{

static{

System.out.print("1");

public A(){

System.out.print("2");

class B extends A{

System.out.print("a");

public B(){

System.out.print("b");

public class Hello{

public static void main(String[] ars){

A ab = new B(); //執行到此處,結果: 1a2b

ab = new B(); //執行到此處,結果: 1a2bab

  注:類的static 代碼段,可以看作是類首次加載(被虛拟機加載)執行的代碼,而對于類的加載,首先要執行其基類的構造,再執行其本身的構造

  4.寫一個Singleton模式的例子

public class Singleton{

private static Singleton single = new Singleton();

private Singleton(){}

public Singleton getInstance(){

return single;

三、資料庫

  1.删除表的重複記錄

  如果記錄完全相同才算重複記錄,那麼: (sql server2000下測試通過)

select distinct * into #tmpp from tid

delete from tid 

insert into tid select * from #tmpp

drop table #tmpp

  如果有id主鍵(數字,自增1的那種),那麼:(sql server2000下測試通過)

delete from tableA where id not in

(select id = min(id) from tableA group by name)

  2.delete from tablea & truncate table tablea的差別

  truncate 語句執行速度快,占資源少,并且隻記錄頁删除的日志;

delete 對每條記錄的删除均需要記錄日志

本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1080845