我做了差不多3個小時,簡直整人啊。不過還好這些題目我以前在網上都見過,有些沒作出來的我也補上答案了。由于面試通過了,極度興奮ING。
問題1、面向對象的特征有哪些方面?
封裝,多態,繼承
問題2、String是最基本的數據類型嗎?
不是。
問題3、int 和 Integer 有什么區別?
int是數據類型,存的是數值。
Integer是對象,通過一個引用只想這個對象。
問題4、運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
問題5、說出Servlet的生命周期,并說出Servlet和CGI的區別。
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,當服務器決定將實例銷毀的時候調用其destroy方法。
CGI: 每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。
問題6、說出ArrayList,Vector, LinkedList的存儲性能和特性。
ArrayList其實就是用數組來實現的,所以在查詢數據方面速度快。
Vector在功能上和ArrayList幾乎一樣,不過Vector類內的成員都是同步的,如果不考慮線程安全的話,還是使用ArrayList。因為同步在運行時要消耗掉大量的內存。
LinkedList是由鏈表來實現的,所以在添加刪除等操作方面速度快,同時也能有效的利用內存空間。
問題7、sleep() 和 wait() 有什么區別?
Sleep()是讓該線程睡眠一段時間,將控制權給別的線程。等時間到了就自動恢復。
Wait()方法需要通過notify()方法調用,線程才能進入運行狀態。
問題8、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫和重載是Java多態性的不同表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫。子類的對象使用這個方法時,將調用子類中的定義。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載。
Overload的方法是可以改變返回值的類型。
問題9、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
同步是當多個線程都要使用一個資源的時候就要使用。例如:有個公共廁所每次只能進一個,如果N個人同時有需要的話,就需要同步,讓一個人進去,等里面人出來后其他人才能進。
問題10、說出數據連接池的工作機制是什么?
服務器啟動后創建指定數量的連接。當客戶端訪問時,服務器分配一個空閑的連接。
如果先前分配連接用完,就新建一定數量的連接。
問題11、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
會被執行,在return前。
問題12、Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。也可以自己定義異常處理方式。
問題13、垃圾回收的優點和原理。并考慮2種回收機制。
優點就是程序員不需要考慮對內存的釋放。
問題14、請說出你所知道的線程同步的方法。
Wait(),sleep(), notify()
問題15、多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify
問題16、servlet的生命周期
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,當服務器決定將實例銷毀的時候調用其destroy方法。
問題17、J2EE是技術還是平臺還是框架?
我覺得都是。
J2EE是SUN公司提出的一個基于多層應用的,分布式開發的,以組件形式(具有框架)形成的一個標準平臺。
問題18、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
String str=”abcd”;
String tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
問題19、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?
1.XML文檔定義有2種形式,DTD和Schema,區別是schema本身是XML,能被解析器解析。
2.解析XML文檔有SAX和DOM,還有一些不過都是SAX和DOM基礎上發展的。
問題20、bean 實例的生命周期
對于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩沖池管理,在create之后實例并不從內存清除,而是采用緩沖池調度機制不斷重用實例,而對于存在Cache管理的Bean則通過激活和去激活機制保持Bean的狀態并限制內存中實例數量。
問題21、如何啟動時不需輸入用戶名與密碼?
沒看明白什么意思.什么啟動啊?
問題22、排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序。
排序的方法有:直接插入排序、希爾排序,冒泡排序、快速排序,直接選擇排序、堆排序,歸并排序,箱排序、基數排序等。
問題23、java中會存在內存泄漏嗎,請簡單描述。
內存泄漏應該是程序設計的問題,與語言無關把。
問題24、java中實現多態的機制是什么?
重寫和重載。
問題25、應用服務器與WEB SERVER的區別?
從功能上來講:應用服務器是處理業務邏輯的;而web服務器則主要是處理表示層的。
問題26、BS與CS的聯系與區別。
B/S:由服務器承擔大部分工作,瀏覽器只負責少量的前端處理(比方說用JS驗證控件)。
C/S:服務器客戶端共同分擔處理。
問題27、WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
Web ServiceWeb Service是基于網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得Web Service能與其他兼容的組件進行互操作。
JAXP(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當你需要改變具體的實現時候也不需要修改代碼。
JAXM(Java API for XML Messaging) 是為SOAP通信提供訪問方法和傳輸機制的API。
WSDL是一種 XML 格式,用于將網絡服務描述為一組端點,這些端點對包含面向文檔信息或面向過程信息的消息進行操作。這種格式首先對操作和消息進行抽象描述,然后將其綁定到具體的網絡協議和消息格式上以定義端點。相關的具體端點即組合成為抽象端點(服務)。
SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協議。
UDDI 的目的是為電子商務建立標準;UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標準。
二、JAVA代碼查錯
問題1、
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
這有何錯誤?
錯。abstract 方法必須以分號結尾。
問題2、
public class Something {
void doSomething () {
private String s = "";
int l = s.length();
}
}
有錯嗎?
錯。局部變量前面不是有訪問限制符。
問題3、
abstract class Something {
private abstract String doSomething ();
}
這好像沒什么錯吧?
錯。抽象方法的本意就是必須子類繼承,你加個private肯定錯了。
問題4、
public class Something {
public int addOne(final int x) {
return ++x;
}
}
這個比較明顯。
錯。Final訪問符一出,變量就不能被修改了。
問題5、
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
是關于final的問題,這有錯嗎?
對的。變得是成員變量,但是對象的引用沒有變。
問題6、
class Something {
int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
有什么錯呢? 看不出來啊。
對的。默認值=0。
問題7、
class Something {
final int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
和上面一題只有一個地方不同,就是多了一個final。這難道就錯了嗎?
對的。和上題一樣。
問題8、
public class Something {
public static void main(String[] args) {
Something s = new Something();
System.out.println("s.doSomething() returns " + doSomething());
}
public String doSomething() {
return "Do something ...";
}
}
看上去很完美。
錯。方法不是靜態的,所以一定要object.method();
問題9、
此處,Something類的文件名叫OtherThing.java
class Something {
private static void main(String[] something_to_do) {
System.out.println("Do something ...");
}
}
這個好像很明顯。
錯。類名的名字必須和文件名相同。
問題10、
interface A{
int x = 0;
}
class B{
int x =1;
}
class C extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
錯誤。必須要明確X的來源。
問題11、
interface Playable {
void play();
}
interface Bounceable {
void play();
}
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
private String name;
public String getName() {
return name;
}
public Ball(String name) {
this.name = name;
}
public void play() {
ball = new Ball("Football");
System.out.println(ball.getName());
}
}
這個錯誤不容易發現。
錯誤。接口內能實例話對象?