论坛首页 Java企业应用论坛

写一个比jdk还快的可变集合!

浏览 12508 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-11-25   最后修改:2011-11-25
面试被问到用最基本的数据类型写一个可变集合!我表示jdk的做法很好。面试官说你不感觉数组复制有性能问题吗?原来还真没在意,主要是太认可sun 的大牛们了。回来查了一下,实际调用的是本地方法。用数据测试了一下,没发现有性能问题。

另附上,小弟在刚学习java时,老师告诉我们说要多多学习jdk的源码。
可是面试时遇见的哥们儿,确说建议不要在看jdk源码了?难道你比jdk的工程师还牛? 特别是集合这块感觉很有水平啊!设计的也很牛叉。。可能是我太面了?五六年学的很枉然?

如果有见解的大牛们。可以各抒己见,好听的不好听的,只管说。我是比较能忍受的!哈哈
   发表时间:2011-11-25  
大家有什么样看法呢?我很想知道!~到底哪里出了问题!
0 请登录后投票
   发表时间:2011-11-25   最后修改:2011-11-25
个人意见:

问题出在“面试被问到用最基本的数据类型写一个可变集合!我表示jdk的做法很好。”

比较好的回答方式是:“jdk的做法已经很好了,我自己做未必能做得比它好。不过如果一定要自己做的话,我的做法是xxxxx”

能不能做得比jdk好是水平问题,水平不够可以还培养。叫你做的事情你有没有按要求去做是态度问题(题目已经说明了用最基本的数据类型),态度不端正的人基本上不可用。

面试官希望用这个问题来考察你的水平,你不但没有利用这个机会充分展现自己的水平,还有点倒过来质疑面试官水平的意思。这叫面试官怎么搞。

对于阅读jdk代码,见仁见智吧,我面试时一般都会问应聘者是否知道jdk源代码包在哪里,说不知道的基本上可以拜拜了。
0 请登录后投票
   发表时间:2011-11-25   最后修改:2011-11-25
kidneyball 写道
个人意见:

问题出在“面试被问到用最基本的数据类型写一个可变集合!我表示jdk的做法很好。”

比较好的回答方式是:“jdk的做法已经很好了,我自己做未必能做得比它好。不过如果一定要自己做的话,我的做法是xxxxx”

能不能做得比jdk好是水平问题,水平不够可以还培养。叫你做的事情你有没有按要求去做是态度问题(题目已经说明了用最基本的数据类型),态度不端正的人基本上不可用。

面试官希望用这个问题来考察你的水平,你不但没有利用这个机会充分展现自己的水平,还有点倒过来质疑面试官水平的意思。这叫面试官怎么搞。

对于阅读jdk代码,见仁见智吧,我面试时一般都会问应聘者是否知道jdk源代码包在哪里,说不知道的基本上可以拜拜了。

谢谢你的回答,其实我的态度还是很谦虚的。我和你答的差不多我说"jdk的做法已经很好了,我能想到的也是数组复制,如果不能用数组复制,我确实不知道!"
毕竟去面试吗?只是他很明确的表示jdk的有性能问题,如果很大量的数组复制是性能低下的,当时我感觉也许是这样的。难免jdk为了跨平台,做一些妥协,可是测试发现并没有问题。而我的想法也还留停在数组复制这个层次上。所以这里特别想请教高人,这个题的解是什么?
0 请登录后投票
   发表时间:2011-11-25  
说了半天,我还是没明白具体说的是哪个集合
0 请登录后投票
   发表时间:2011-11-25  
dennis_zane 写道
说了半天,我还是没明白具体说的是哪个集合

呵呵  List接口那个分支了,在具体点可以理解为ArrayList。
0 请登录后投票
   发表时间:2011-11-25  
ArrayList通过复制对象数组来达到可变完全没有问题。
因为arrayList追求的就不是快速插入。
这就是数据结构里线性表和链表的区别。我用线性表就是因为他们是连续的内存,可以直接索引定位某个值。
如果他们要追求快速的节点维护,建议他们用链表。

不过硬让我答这个问题的话,我会说自己的一个思路。。。
如果他们要均衡。。。。
那就再把arrayList包一层,再写一个内部类,这个内部类里存一个定长的数组,和一个next指针。
当定长的数组满了后。再new一个此内部类,然后把上一个的next指向新的实例。
这样就减少了拷贝这一步,但是要动态维护一些其他的必要参数。行标什么的。

当然这样检索的时候效率明显会降低。。。而且实现上肯定有些问题。。

掰想法而已,又没让你当场做。下次大胆的说。也许他们是考验你的思路和表达能力
0 请登录后投票
   发表时间:2011-11-25  
leonayx123 写道
ArrayList通过复制对象数组来达到可变完全没有问题。
因为arrayList追求的就不是快速插入。
这就是数据结构里线性表和链表的区别。我用线性表就是因为他们是连续的内存,可以直接索引定位某个值。
如果他们要追求快速的节点维护,建议他们用链表。

不过硬让我答这个问题的话,我会说自己的一个思路。。。
如果他们要均衡。。。。
那就再把arrayList包一层,再写一个内部类,这个内部类里存一个定长的数组,和一个next指针。
当定长的数组满了后。再new一个此内部类,然后把上一个的next指向新的实例。
这样就减少了拷贝这一步,但是要动态维护一些其他的必要参数。行标什么的。

当然这样检索的时候效率明显会降低。。。而且实现上肯定有些问题。。

掰想法而已,又没让你当场做。下次大胆的说。也许他们是考验你的思路和表达能力



十分感谢你的回答!~~
我也有面试过别人,现在又被面试,遇到了行行色色的面试官。不过这个工作机会还是比较大的。只是薪水上没有谈好。我现在12000,然后问我这个不能商量了吗?他们也能给我这些。还没公积金。。我现在也是按4000交的啊!~~什么公司啊。HR 还说。只要能力行。钱不是问题。遇到无数HR都说能力行,钱不是问题,。总能听到这样的回答,事实上,钱很是问题!总不至于面试的题目要百分之百对吧!~~做了几年下来,真不知道自己会什么了。和美工交流,和老板交流,和新来的程序员交流!~~就是不怎么和代码交流!  还是比较喜欢技术的。。记得刚刚工作时,就想如果能拿到1万块,那多么美好。。通胀让我提前实现了梦想,可是感觉不到美好了,发现自己人想得到的东西,其实并不是钱。在北京这个城市,我还有三年时间,在过三年,孩子就要上幼儿园了。我就有可能离开这个城市了,也不知道能不能遇到传说中的牛人!~~~~ 那时的我也三十开外了。。时间好快啊。我也是当爹,奔三的人了。
0 请登录后投票
   发表时间:2011-11-25  
jdk 的源码包在哪里....?
0 请登录后投票
   发表时间:2011-11-25  
linkedlist
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics