`
wang吖
  • 浏览: 240001 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

某公司的Java研发工程师面试题

 
阅读更多

 

        今儿面试某公司的Java研发工程师面试题,把相关面试题回忆了一下,大家可以看看

 

1、写出下列程序的输出结果

 

public class TestFor {

	public static boolean foo(char c) {
		System.out.print(c);
		return true;
	}

	public static void main(String[] args) {
		int i = 0;
		for (foo('A'); i < 2 && foo('B'); foo('C')) {
			i++;
			foo('D');
		}
	}
}

 

 分析:该题目主要考察了 for 循环语句的执行,平时开发的时候并没有注意过这个问题,其实想想还是比较基础的问题,对于for(A; B; C) {  D; }  执行顺序是 A、B、D、C  再次循环的时候 B、D、C ,同时该题目还考察了短路与的用法,到此你是否明白了输出结果?  如果上题修改为下面的形式,其打印结果又不一样了。

 

public class TestFor {

	public static boolean foo(char c) {
		System.out.print(c);
		return true;
	}

	public static void main(String[] args) {
		int i = 0;
		for (foo('A'); foo('B') && i < 2; foo('C')) {
			i++;
			foo('D');
		}
	}
}

 

2、finally的用法,写出程序输出结果,记住一条finally无论如何都是必须且一定要执行的,所以打印结果就了然了,我在做这个题的时候第二输出结果搞错了。

 

public class TestException {

	public static int testExp(int n) {
		try {
			if (n > 0) {
				return n;
			} else {
				throw new Exception();
			}
		} catch (Exception e) {
			return 0;
		} finally {
			return -1;
		}
	}

	public static void main(String[] args) {
		System.out.println(testExp(1));
		System.out.println(testExp(-1));
	}

}

 

 

3、写出打印结果,该题考的是static关键字,到现在我也还没想明白,有高手路过可以留言指点一下!!!

 

public class B {

	public static int y = A.x + 1;

	public B() {
	}

	public static void main(String[] args) {
		String str = String.format("x={%d}, y={%d}", A.x, B.y);
		System.out.println(str);
	}
}

class A {
	public static int x;
	static {
		x = B.y + 1;
	}
}

 

4、设计题

      略过

 

5、编程题

      5.1、实现一个线程安全的懒汉式单例类,尽可能高效

      

public class Singleton {

	private static Singleton instance;

	private Singleton() {
	}

	public static Singleton getInstance() {
		if (instance == null) {
			// 同步块,可以高效处理多线程
			synchronized (Singleton.class) {
				// 防止一根线程正好释放了synchronized时 第二根线程获取了对象锁又重新new了一个对象
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

 

     5.2、写一个写文件的函数,实现多线程同时写入同一个文件成功,不能使用synchronized、Lock同步锁:

      集思广益,面试官说实现不唯一,能把你想到的方法留下么?

 

    5.3、请实现一个函数能够判断一个数组是否有序(升序降序都有可能,可能含有相同的元素),有序则返回true,无序则返回false

     

/**
 * 可以改成判断首尾两个元素,这样就可以了 如果相等,在有序情况下,所有元素都应相等
 */
public class ArrayIsSort {

	public static void main(String[] args) {
		// int[] arr = { 2, 2, 5, 6, 7, 8, 20 };
		int[] arr = { 100, 100, 80, 70, 60, 50, 40, 30 };
		boolean fg = isSort(arr);
		System.out.println(fg);
	}

	private static boolean isSort(int[] arr) {
		boolean flag = true;// 有序
		int len = arr.length;

		if (len > 1) {
			for (int i = 0; i < len; i++) {
				if (arr[0] >= arr[len - 1]) {
					// 如果排序了则应该为升序
					if (i != len - 1 && arr[i] < arr[i + 1]) {
						flag = false;
					}
				} else {
					// 如果排序了则应该为降序
					if (i != len - 1 && arr[i] > arr[i + 1]) {
						flag = false;
					}
				}
			}
		}
		return flag;
	}
}

 

    5.4、输入一个表达式,没有括号,数字小于 0-99之间,输出计算结果,所有的中间结果化为整数字符串,如果输入是非法表达式  返回 ""  

      例如: 输入   3+8*2/9-2

      输出:2

 

6、被问到的算法问题:

 一个小猴子边上有100根香蕉,它要走过50米才能到家, 每次它最多搬50根香蕉,(多了就被压死了),它每走 1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。 


提示:他可以把香蕉放下往返的走,但是必须保证它每走 一米都能有香蕉吃。也可以走到n米时,放下一些香蕉, 
拿着n根香蕉走回去重新搬50根。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics