面試題整理【1】JAVA基礎知識

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


發佈了43 篇原創文章 · 獲贊 50 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章