2015.5.5 凤凰网

又一次面试失败了,从4.20开始已经面试了12家了,大部分都失败了。越面试发现自己越挫,基础非常不扎实。明天就正式成为新网互联的一员了,希望在新的环境里扎扎实实学习工作,不能继续挫下去了。努力!奋斗!!

下面是凤凰网笔试题,感觉当时做的能打20分。。面试问的都是Java基础和比较深一点的知识,感觉能打15分。。惨败。。


下面是面试完针对这些题的一些解答,整理完的暂时先贴上来,剩下的会慢慢整理的,有的题不知道答的对不对。。

第1题详见博客http://blog.csdn.net/sd0902/article/details/8395677

第3题网上可以查到很多资料。。http://blog.csdn.net/wcyoot/article/details/6426436

/** 
	4.请编写一个多线程程序,其中一个线程完成对某个对象的int成员变量的增加操作,
	即每次加1,另一个线程完成对该对象的成员变量的减操作,即每次减1,同时要保证
            该变量的值不会小于0,不会大于1,该变量的初始值为0.  
*/
public class TestThread {
	
	public static void main(String[] args) {
		
		/** 第一种方法  */
		TestThread t = new TestThread();
		AddRunnable add = t.new AddRunnable();
		SubRunnable sub = t.new SubRunnable();
		new Thread(add).start();
		new Thread(sub).start();
		
		
		/** 第二种方法  */
//		new TestThread().call();
	}
	
	
	/********     下面是第一种方法           ********/
	
	private int i=0;

	private synchronized void add(){
		if(i<=0){
			i++;
			System.out.println(i);
		}
	} 
	
	private synchronized void sub(){
		if(i>=1){
			i--;
			System.out.println(i);
		}
	}
	
	class AddRunnable implements Runnable{

		public void run() {
			while(true){
				add();
			}
		}
		
	} 
	
	class SubRunnable implements Runnable{

		public void run() {
			while(true){
				sub();
			}
		}
		
	}
	
	
	/********     下面是第二种方法           ********/
		
	class Test{
		
		private int j=0;
		
		public synchronized void add(){
			if(j<=0){
				j++;
				System.out.println(j);
			}
		}
		
		public synchronized void sub(){
			if(j>=1){
				j--;
				System.out.println(j);
			}
		} 
	}
	
	Test t = new Test();
	void call(){
		new Thread(new Runnable() {
			
			public void run() {
				while(true){
					t.add();
				}
			}
		}).start();
		
		new Thread(new Runnable() {
			
			public void run() {
				while(true){
					t.sub();
				}
			}
		}).start();
	}
}




你可能感兴趣的:(java,android,面试,笔试,凤凰网)