2016年3月7日,接到第一個面試電話,現把題目整理如下:
【1】JAVA創建對象的方式:
答案參考http://blog.csdn.net/mhmyqn/article/details/7943411
public class Customer implements Cloneable{
public String name;
public int age;
public Customer(){
System.out.println("call first constructor");
}
public Customer(String name,int age){
this.name=name;
this.age=age;
System.out.println("call second constructor");
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
}
1.用new語句創建對象,這是最常用的創建對象的方式;
Customer c1 = new Customer("Tom",20);
System.out.println(c1.name+":"+c1.age);
2.運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法;
Class<?> c2 = null;
try {
c2 = Class.forName("Customer");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Customer cus = null;
try {
cus = (Customer)c2.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cus.age = 19;
cus.name= "Jack";
System.out.println(cus.name+":"+cus.age);
3.調用對象的clone()方法;
Customer c3 = null;
try {
c3 = (Customer)c1.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(c3.name+":"+c3.age);
4.運用反序列化手段,調用java.io.ObjectInputStream對象的readObject()方法。
程序略。
運行結果:
call second constructor
Tom:20
call first constructor
Jack:19
Tom:20
使用反射創建對象,只會調用Customer類的默認構造方法;使用clone()創建對象不會調用構造方法。【2】JAVA的反射機制
主要是指程序可以訪問,檢測和修改它本身狀態或行爲的一種能力,並能根據自身行爲的狀態和結果,調整或修改應用所描述行爲的狀態和相關的語義。
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲java語言的反射機制。
JAVA反射機制主要提供了以下功能: 在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法;生成動態代理。
JAVA反射機制的作用:1、反編譯,.class->.java;2、創建對象;3、訪問java對象的屬性和方法
【3】棧和隊列的區別,並各列一個應用
這裏說的棧和隊列是兩種線性數據結構,可以理解成集合框架裏的java.util.Stack和java.util.Queue。
隊列是先進先出,棧是先進後出。
棧的應用:數制轉換,比如10進制轉2進制,除以2以後依次壓入棧,然後彈出;
隊列的應用:模擬銀行業務、售票,研究開多少個業務窗口最合適,詳見http://www.cnblogs.com/shenliang123/archive/2013/02/16/2913552.html
【4】JVM
【5】對於大量數據,快速排序方法初始中間值的確定
選擇數組首末n[0]、n[length/2]、n[length]三個數,選取三個值的中位數作爲初始中間值。若有大量數據則先分塊,每塊按前面的處理,然後再求中位數。
【6】集合框架的實現
【7】多線程,進程和線程的區別
一個程序至少有一個進程,一個進程至少有一個線程;
進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉;
線程與同屬一個進程的其他的線程共享進程所擁有的全部資源;
線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
詳見http://blog.csdn.net/yaosiming2011/article/details/44280797
【8】算法題:
數字數組中含有數字組合315的個數。
例如:3115中有兩個315;31115中有兩個315;135中有0個315
HR給的提示是先找到1,然後用最快的方法找到3和5