Java程式員面試題收集(5)

來源:互聯網
上載者:User

標籤:

Java基礎方面: 
1、範圍public,private,protected,以及不寫時的區別 
答:區別如下: 
範圍 當前類 同一package 子孫類 其他package 
public √ √ √ √ 
protected √ √ √ × 
friendly √ √ × × 
private √ × × × 
不寫時預設為friendly

2、ArrayList和Vector的區別,HashMap和Hashtable的區別 
答:就ArrayList與Vector主要從二方面來說. 
一.同步性:Vector是安全執行緒的,也就是說是同步的,而ArrayList是線程式不安全的,不是同步的 
二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半 
就HashMap與HashTable主要從三方面來說。 
一.曆史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現 
二.同步性:Hashtable是安全執行緒的,也就是說是同步的,而HashMap是線程式不安全的,不是同步的 
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

3、char型變數中能不能存貯一個中文漢字?為什麼? 
答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一個中文是沒問題的

4、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable介面 
同步的實現方面有兩種,分別是synchronized,wait與notify

5、繼承時候類的執行順序問題,一般都是選擇題,問你將會列印出什麼? 
答:父類: 
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(); 


輸出結果: 
C:>java test.ChildClass 
FatherClass Create 
FatherClass Create 
ChildClass Create

6、內部類的實現方式? 
答:範例程式碼如下: 
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(); 


輸出結果: 
C:>java test/OuterClass 
InterClass Create 
OuterClass Create 
再一個例題: 
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(); 

說明如下: 
一.靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。 故 A、B 錯 
二.靜態內部類的非靜態成員可以訪問外部類的靜態變數,而不可訪問外部類的非靜態變數;return d1 出錯。

故 D 錯 
三.非靜態內部類的非靜態成員可以訪問外部類的非靜態變數。 故 C 正確 
四.答案為C、E

7、記憶體回收機制,如何最佳化程式? 
希望大家補上,謝謝

8、float型float f=3.4是否正確? 
答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4

9、介紹JAVA中的Collection FrameWork(包括如何寫自己的資料結構)? 
答:Collection FrameWork如下: 
Collection 
├List 
│├LinkedList 
│├ArrayList 
│└Vector 
│ └Stack 
└Set 
Map 
├Hashtable 
├HashMap 
└WeakHashMap 
Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements) 
Map提供key到value的映射

10、Java中異常處理機制,事件機制?

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

12、抽象類別與介面? 
答:抽象類別與介面都用於抽象,但是抽象類別(JAVA中)可以有自己的部分實現,而介面則完全是一個標識(同時有多重繼承的功能)。

13、Java 的通訊編程,編程題(或問答),用JAVA SOCKET編程,讀伺服器幾個字元,再寫入本地顯示? 
答: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實現一種排序,JAVA類實現序列化的方法(二種)? 如在COLLECTION架構中,實現比較要實現什麼樣的介面? 
答:用插入法進行排序代碼如下 
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類實現序例化的方法是實現java.io.Serializable介面 
Collection架構中實現比較要實現Comparable 介面和 Comparator 介面

15、編程:編寫一個截取字串的函數,輸入為一個字串和位元組數,輸出為按位元組截取的字串。 但是要保證漢字不被截半個,如"我ABC"4,應該截為"我AB",輸入"我ABC漢DEF",6,應該輸出為"我ABC"而不是"我ABC+漢的半個"。 
答:代碼如下: 
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中國43中國人

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

}

16、JAVA多線程編程。 用JAVA寫一個多線程程式,如寫四個線程,二個加1,二個對一個變數減一,輸出。 
希望大家補上,謝謝

17、STRING與STRINGBUFFER的區別。 
答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法

Jsp方面

1、jsp有哪些內建對象?作用分別是什麼? 
答:JSP共有以下9種基本內建群組件(可與ASP的6種內部組件相對應): 
 request 使用者端請求,此請求會包含來自GET/POST請求的參數 
response 網頁傳回使用者端的回應 
pageContext 網頁的屬性是在這裡管理 
session 與請求有關的會話期 
application servlet 正在執行的內容 
out 用來傳送回應的輸出 
config servlet的構架組件 
page JSP網頁本身 
exception 針對錯誤網頁,未捕捉的例外

2、jsp有哪些動作?作用分別是什麼? 
答:JSP共有以下6種基本動作 
jsp:include:在頁面被請求的時候引入一個檔案。 
jsp:useBean:尋找或者執行個體化一個JavaBean。 
jsp:setProperty:設定JavaBean的屬性。 
jsp:getProperty:輸出某個JavaBean的屬性。 
jsp:forward:把請求轉到一個新的頁面。 
jsp:plugin:根據瀏覽器類型為Java外掛程式產生OBJECT或EMBED標記

3、JSP中動態INCLUDE與靜態INCLUDE的區別? 
答:動態INCLUDE用jsp:include動作實現 
<jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,適合用於包含動態網頁面,並且可以帶參數 
靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面 
<%@ include file="included.htm" %>

4、兩種跳轉方式分別是什麼?有什麼區別? 
答:有兩種,分別為: 
<jsp:include page="included.jsp" flush="true"> 
<jsp:forward page= "nextpage.jsp"/> 
前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,首頁面還是原來的頁面。執行完後還會回來,相當於函數調用。並且可以帶參數.後者完全轉向新頁面,不會再回來。相當於go to 語句。

Servlet方面

1、說一說Servlet的生命週期? 
答:servlet有良好的生存期的定義,包括載入和執行個體化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet介面的init,service和destroy方法表達。

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

3、JAVA SERVLET API中forward() 與redirect()的區別? 
答:前者僅是容器中控制權的轉向,在用戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求連結。這樣,從瀏覽器的地址欄中可以看到跳轉後的連結地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。

Java程式員面試題收集(5)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.