Writing an interview test for java expert
我目前正在编写一个Java专家配置文件的面试问题。这里是:
考虑到本规范:
清单1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.example; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Searching { public static void main(String[] args) { int input = Integer.valueOf(args[0]); String[] strings = {"1","2","4","8","16","32","64","128"}; List<Integer> integers = new ArrayList<Integer>(); for (String s : strings) { integers.add(Integer.valueOf(s)); } System.out.println("index of"+input+" is:"+Collections.binarySearch(integers, input, cmp)); } static Comparator<Integer> cmp = new Comparator<Integer>() { public int compare(Integer i, Integer j) { return i < j ? -1 : (i == j ? 0 : 1); } }; } |
然后用此命令行编译此代码
清单2
1 | javac com/example/Searching.java |
用这个命令行运行
清单3
1 | java com/example/Searching 128 |
问题A:
执行清单3产生:
1 | index of 128 is:-8 |
你能解释一下这个输出吗?
问题B:
考虑到这一点
1 | java com/example/Searching 32 |
输出是
1 | index of 32 is:5 |
你能解释一下这个输出吗?
问题C:
假设您有一个JRE1.6、一个shell和一个文本编辑器。您将如何更改为清单1和/或清单2和/或清单3以生成此输出:
1 | index of 128 is:7 |
备注:变化越少越好。
我的问题是:
- 你对这些问题的答案是什么?
- 如何改进?
回答C:
1 2 3 4 5 6 7 |
因为专家不会把这段代码留下那么糟糕的样子。
如何改进面试问题?
面试时不要做拼图。
或者看看这个页面。
作为一个面试问题,我会把问题简单化。我发现,在采访中,没有提示就很难解决这类问题。在回答了一些他们无法回答的问题后,被采访者可以放弃,但这并不总是有效的。
Can you explain this output ?
使用
如果您尝试使用-xx:+aggressiveOpts`或其他选项来增加整数缓存大小,则在每种情况下都会匹配。
What would you change to listing 1
将
当然,使用integer.compare()会有一些问题;)
how to improve it
根据程序的目的,我将使用
1 2 3 4 |
为了解释我对这个问题的期望:
问题A:
- 演示Java语言的基本知识(EDCOX1×3)与EDCOX1(4)的区别
- 能够理解他人编写的难看(未注释)代码
问题B:
- 展示更多关于JVM和整数缓存的"深入"知识(在我看来,不是最重要的)
- 表现出自信:即使这种奇怪的行为似乎表明答案A不正确。
问题C:
- 展示仔细理解和吸收约束的能力。在这种情况下,没有可用的JDK,因此修改listing1或listing2不是一个选项。
此外,它还提供了回答问题B的线索。
(也就是说,在命令行中添加一个系统属性,我希望作为这个问题的答案: