面試筆試題目

第一題 :棧內存與堆內存的特色與區別,java中是怎樣分配的?java

                  棧內存中用來存放基本數據類型(8種基本類型)和對象的引用變量,存取速度比堆快,棧中的數據能夠被共享使用,堆內存中用來存放new建立的對象和數組對象。程序員

第二題:對象序列化,做用,那些不能序列化?面試

               對象序列化是爲了可以讓對象像其餘變量數據同樣可以長久的保存下來,其實質是把對象在內存中的數據按照必定的規則,變成一系列的字節數據,而後寫入到流中。沒有實現java.io.Seralizabled接口的類不能實例化。關於序列化更加詳細的介紹:http://blog.csdn.net/xcbeyond/article/details/7993588編程

第三題 線程的p、v操做數組

              線程對於程序員而言,是比較重要的一塊知識,不會線程編程,就算不上一個合格的程序員。所以,線程也是各個公司筆試面試必考的內容之一。PV操做本是操做系統中相關的內容,簡單來講,P操做是申請資源,V操做是釋放資源。本題最好能夠用生產者/消費者來實現PV操做最爲合適,同時也考慮到了多線程同步的問題。舉例說明:多線程

package common;

import org.junit.Test;

/**
 * PV操做示例
 * @author xcbeyond
 *
 * 2012-10-2下午08:05:09
 */
public class PVOperator {
	public static void main(String [] args){
		Store s = new Store(5);
		Produce pro1 = new Produce(s);
		Produce pro2 = new Produce(s);
		Consumer con1 = new Consumer(s);
		Consumer con2 = new Consumer(s);
		pro1.start();
		con1.start();
		pro2.start();
		con2.start();
	}
}
/**
 * 倉庫類:臨界資源
 *
 */
class Store{
	private  final int maxSize;	//最大容量
	private int count;	
	
	public Store(int size){
		maxSize = size;
		count = 0;
	}
	/**
	 * 添加資源
	 */
	public synchronized void add(){
		while(count >=maxSize){
			System.out.println("----倉庫滿了!----");
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		count++;
		System.out.println(Thread.currentThread().toString()+ "put" +count);
		notifyAll();
	}
	
	public synchronized void remove() {
		while(count <= 0) {
			System.out.println("----倉庫空了!----");
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println(Thread.currentThread().toString()+ "get"+count);
		count--;
		notify();
	}
}
/**
 * 生產者:P操做
 */
class Produce extends Thread {
	private Store s;
	
	public Produce(Store s) {
		this.s = s;
	}
	@Override
	public void run() {
		while(true){
			s.add();
			try {
				Thread.sleep(1000);//只是爲了利於查看線程間的同步,因此延遲1s
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
/**
 * 消費者:V操做
 */
class Consumer extends Thread {
	private Store s;
	
	public Consumer(Store s) {
		this.s = s;
	}
	
	@Override
	public void run() {
		while(true) {
			s.remove();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
相關文章
相關標籤/搜索