今儿面试某公司的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根。
相关推荐
2018最新最全java高级工程师面试题,2018最新最全java高级工程师面试题2018最新最全java高级工程师面试题,2018最新最全java高级工程师面试题 十几个文档
java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助
知名企业java高级工程师面试题附答案
java软件工程师面试试题集合 java软件工程师面试试题集合
百度2020校招Java研发工程师面试题笔试题(第三批).docx
Java软件工程师面试题,介绍了一些Java软件工程师面试中需注意的事项以及Java软件工程师需掌握的专业基础知识
这是我找java软件工程师时候,收集的java面试题,汇集了主要的试题,实际我在笔试中有80%的内容和这里面的是重复的.希望能帮助找java工作的您. EJB方面.doc java.doc Java中文问题详解(高手必读).txt Java中文问题...
Java软件工程师面试题,基础的面试题型
java面试试题 吐血奉献 Java工程师面试试题
java高级工程师面试题 java高级工程师面试题
java 高级工程师面试题,收录一些面试java 高级工程师面试的题目,提高大家能或的offer的能力。
1000道 互联网Java工程师面试题
java高级工程师-面试题及答案.docx
java软件工程师面试试题集-弄懂面试基本不成问题, 面试题集共分为以下十部分: 一、Core Java: 1 — 95 题1 — 24 页 基础及语法: 1 — 61 题1 — 13 页 异常: 62 — 69 题13 — 15 页 集合: 70 — 80 题15 — ...
JAVA软件工程师面试题(含答案).doc
2022最新最全java高级工程师面试题
java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题...
2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里...
最新深圳企业java软件工程师面试题,最新深圳企业java软件工程师面试题
2022年java初级工程师面试题.docx