日期:2014-05-20  浏览次数:20663 次

java 年薪20W 必须会的几道题
Java 今天看某位仁兄发的面试题,说这是他面试年薪20W的java职位。

int/long 的二进制位数,jvm 是否在不同平台 int/long 的二进制位数是否相同
对于 StringBuilder,每次追加一个字符,当其长度长到 n 时,时间复杂度是多少
能否把一个 String 对象,添加到一个 List<Integer> 中
Comparable 和 Comparator 有何区别,如何把非 Comparable 的对象作为 TreeMap 的 Key
GC 的基本原理(大部分人的回答是调节 gc 参数)
目前还没碰到一个人能回答第 4 个问题!呜呼!

大家可以给出详细答案。各抒己见
Java?基础题

------解决方案--------------------
20W是日元啊?

第一个int4byte long8byte, 不考虑内存对齐和数据压缩的话,所有JVM一样。
第二题是扯淡,一个字符可能是2byte可能是4byte,每次加长的字节数都不一样,没法精确计算复杂度。
此外复杂度计算的前提也没说,没定义复杂度为1的基本操作,怎么计算复杂度?
第三题,可以,强转。java5前没泛型。
第四题,一个是接口,一个是抽象类,TreeMap构造器可以指定Comparator。
第五题,GC依赖JVM实现,标记法,计数法,搜索可达性法都是办法。

我是不是该找老板谈谈,给我涨到200W?
------解决方案--------------------
第三个不可以将String对象强转为Integer就可以了吗?令我觉得jvm在所有平台的兼容性来说,第一题的位数应该是一样的。小白路过。。。
------解决方案--------------------
说实在的,这些其实都只是打着20W的鳌头而已,去面试一般不会被问到这个的。。
20W对我来说确实很高,不过阿里的客服都20W了。。
第一题不同吧,具体机制我看过,但是没仔细看,int好像在不同位数的机器上位数不同。
第二题真不会,很少看源码,懒得缘故。
第三题把String转化为ASCCI码来存就行了。
第四个一个类是借口在类内部重写方法,一个单独类进行排序。
第五题百度的答案肯定比我回答的强多了,我的理解就是人家写好的东西,在确定你的对象不需要时去主动回收其内存。

------解决方案--------------------
引用:
20W是日元啊?

第一个int4byte long8byte, 不考虑内存对齐和数据压缩的话,所有JVM一样。
第二题是扯淡,一个字符可能是2byte可能是4byte,每次加长的字节数都不一样,没法精确计算复杂度。
此外复杂度计算的前提也没说,没定义复杂度为1的基本操作,怎么计算复杂度?
第三题,可以,强转。java5前没泛型。
第四题,一个是接口,一个是抽象类,TreeMap构造器可以指定Comparator。
第五题,GC依赖JVM实现,标记法,计数法,搜索可达性法都是办法。

我是不是该找老板谈谈,给我涨到200W?

第二题 java字符类型的长度是固定的,你说长度不一样的是字符串类型
第三题如果在java5及以上声明了List<Integer>你放进去给我看看,能放进去的叫List
第四题,两个都是接口,类要实现compareble接口才可以作为TreeMap的key
你应该找老板给你涨到2000W的

------解决方案--------------------
引用:
Quote: 引用:

20W是日元啊?

第一个int4byte long8byte, 不考虑内存对齐和数据压缩的话,所有JVM一样。
第二题是扯淡,一个字符可能是2byte可能是4byte,每次加长的字节数都不一样,没法精确计算复杂度。
此外复杂度计算的前提也没说,没定义复杂度为1的基本操作,怎么计算复杂度?
第三题,可以,强转。java5前没泛型。
第四题,一个是接口,一个是抽象类,TreeMap构造器可以指定Comparator。
第五题,GC依赖JVM实现,标记法,计数法,搜索可达性法都是办法。

我是不是该找老板谈谈,给我涨到200W?

第二题 java字符类型的长度是固定的,你说长度不一样的是字符串类型
第三题如果在java5及以上声明了List<Integer>你放进去给我看看,能放进去的叫List
第四题,两个都是接口,类要实现compareble接口才可以作为TreeMap的key
你应该找老板给你涨到2000W的


第二题,char是char 字符是字符两个概念, 你加个基本平面外的中文字符或者波兰文字符试试。
说明你脑子里根本没有UTF-16的概念。也分不清UTF-8,UTF-16,GBK,ISO8895-1,ISO8895-12.

第三题,说明你不懂泛型,更不懂什么叫编译期类型检查和泛型擦除。

List<String> list = new ArrayList<>();
((List)list).add(new Integer(100));


第四题,好吧,我记错了,两个都是接口,Comparator 多个equals()方法。
但是TreeMap构造器可以指定Comparator。
public TreeMap(Comparator<? super K> comparator)

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

20W是日元啊?

第一个int4byte long8byte, 不考虑内存对齐和数据压缩的话,所有JVM一样。
第二题是扯淡,一个字符可能是2byte可能是4byte,每次加长的字节数都不一样,没法精确计算复杂度。
此外复杂度计算的前提也没说,没定义复杂度为1的基本操作,怎么计算复杂度?
第三题,可以,强转。java5前没泛型。
第四题,一个是接口,一个是抽象类,TreeMap构造器可以指定Comparator。
第五题,GC依赖JVM实现,标记法,计数法,搜索可达性法都是办法。

我是不是该找老板谈谈,给我涨到200W?

第二题 java字符类型的长度是固定的,你说长度不一样的是字符串类型
第三题如果在java5及以上声明了List<Integer>你放进去给我看看,能放进去的叫List
第四题,两个都是接口,类要实现compareble接口才可以作为TreeMap的key
你应该找老板给你涨到2000W的


第二题,char是char 字符是字符两个概念, 你加个基本平面外的中文字符或者波兰文字符试试。
说明你脑子里根本没有UTF-16的概念。也分不清UTF-8,UTF-16,GBK,ISO8895-1,ISO8895-12.

第三题,说明你不懂泛型,更不懂什么叫编译期类型检查和泛型擦除。

List<String> list = new ArrayList<>();
((List)list).add(new Integer(100));


第四题,好吧,我记错了,两个都是接口,Comparator 多个equals()方法。
但是TreeMap构造器可以指定Comparator。
public TreeMap(Comparator<? super K> comparator)

new List<Integer>()
new List()
的概念能一样么?List原生类型加上自动装箱放什么不行?List<Integer>是Integer的列表的意思,不是你new List().add(new Integer())[/code]它就叫List<Integer>,放个String叫它List<String>也行啊。
------解决方案--------------------
引用:
Quote: 引用:

20W是日元啊?

第一个int4byte long8byte, 不考虑内存对齐和数据压缩的话,所有JVM一样。