58赶集总部面试java开发工程师,一道令人费解的面试题

一位同学内推,帮我争取到了58赶集面试的机会。没有笔试,直接进入技术面。遇到一位工作五年的工程师翟,一脸严肃的把我带到A区四层的一个小方桌前。对于只有一年工作经验的我,小有压力。

上来自我介绍,谈谈做过的项目,只要你思路清楚,表达准确就没什么问题。一般你做的项目和面试的项目也不会有太大相关,就是看看你的思路。下面讨论一个令我费解的问题:

(1)谈谈Java容器的线程安全与非线程安全?

第一,可以谈谈哪些是线程安全的容器,哪些非线程安全的容器。ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。

第二,线程安全有什么好处,有什么坏处。线程安全即在多线程操作同一个Vector或HashTable对象时不会有任何问题。但是线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。Java后续版本出才出现了众多非线程安全的容器。

第三,安全与性能如何取舍。如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

第四,补充说明,非线程安全!=不安全。有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。

多个线程操作同一个对象的测试代码:

(2)谈谈Java容器类的数据结构?

第一、谈谈Java容器类的框架图,如果你能够画出来的话,对方肯定会暗自佩服你的逻辑。

如图所示:

①集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。

②抽象类:5个抽象类(长虚线表示),对集合接口的部分实现,可扩展为自定义集合类。

③实现类:8个实现类(实线表示),对接口的具体实现。

接口详解:

· Collection 接口是一组允许重复的对象。

· Set 接口继承 Collection,但不允许重复。使用自己内部的一个排列机制。

· List 接口继承 Collection,允许重复,以元素插人的次序来放置元素。不会重新排列。

· Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的

key。拥有自己的内部排列机制。

第二,谈谈具体的实现机制,

1. Set子接口:无序,不允许重复。List子接口:有序,可以有重复元素。具体区别是:

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。<对应类有 HashSet,TreeSet>

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。<相应类有 ArrayList,LinkedList,Vector>

2. 实例比较

HashSet:以哈希表的形式存放元素,插入删除速度很快。TreeSet:以二叉树的形式存放元素。

ArrayList:动态数组,LinkedList:链表、队列、堆栈。

Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

关注一下吧,让我们一起在coding的路上果奔吧!!!

学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,394评论 11 349
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,147评论 0 62
  • 2016年5月19日,在剩下的62天里,我都做了些什么? 今天,FFC对象是我,大家说了几个新鲜的词语:低调、淡定...
    浅浅离夜阅读 313评论 1 1