17年9月Java软件工程师面试第一站

来源:互联网 发布:网络投资赚钱 编辑:程序博客网 时间:2024/04/29 21:44

    最近想换工作,昨天就去面试了,是一家较大的外包公司做华为外包项目的,去之前百度了一下,很多人说外包公司这不好那不好,尤其是华为的外包。再加上台风要来不来,还下着雨,就有点想打退堂鼓了,最后还是去了。

    面试地点在龙岗,坐了两个小时的车,下了车后又走错路,兜兜转转了一个小时才到。招待的人说刚来了两人面试,面试官暂时走不开,让我等半个小时,既然来了,那就等呗。

    大概还没到半个小时,面试官就捧着电脑,拿着我的简历过来了。看着挺和蔼的人,首先问我是哪里人呀,拉家常似的聊了两句,我瞬间就不紧张了。然后让我介绍自己比较熟悉满意的项目,那我肯定就讲现在做的项目呗,我一边讲,他不时地问几句,我感觉聊的还可以。

    然后就到了技术问题环节了,先问我基础怎么样,我说还可以呀,然后就问了集合。

    问:Java中有哪些集合

    答:ArrayList、LinkedList、vector、HashSet、TreeSet、HashMap、TreeMap、Hashtable

    问:集合的特点

    答:ArrayList、LinkedList、vector都实现了List接口,他们是有序的集合,可以按位置索引号取出某个元素,并且其中的数据是允许重复的。

           ArrayList:底层数据结构是数组,查询快,增删操作涉及数组元素移动等内存操作,所以增删慢。

           LinkedList:底层数据结构是双向链表,查询时需要进行前向或后向遍历,所以查询慢,插入数据时只需要修改本项的前后项即可。

           vector:底层数据结构也是数组,但是与ArrayList相比,它是线程安全类,ArrayList不安全,所以Vector效率比ArrayList低。如果只有一个线程访问到集合,最好使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,可以使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

         HashSet、TreeSet都继承了set接口,无序集合,不允许重复,判断元素是否相同其实是调用equals方法,并且两元素的hashcode相同。

         HashSet:哈希表实现,不能保证元素的排列顺序,顺序有可能发生变化,不是同步的,可以放入null,但只能放入一个null。

         TreeSet:二叉树实现,可以确保集合元素处于排序状态,不允许放入null值。treeset支持两种排序方式,自然排序和定制排序,自然排序使用排序元素的compareTo方法,定制排序用Java提供的comparable接口实现类,可以自己实现。

         HashMap、TreeMap、Hashtable继承map接口,双列的集合,存储键值对,key不能重复。

         还答了一些hashMap的特点,这里不再赘述。

  问:HashMap的构造策略

  答:从HashMap的构造函数上略微答了点,也不知道对不对

  问:了解JVM吗?

  答:感觉摇头,我知道接下可定要问垃圾回收机制等问题了,我是真的不太理解。

  问:spring的特点

  答:IOC和AOP,略微分析了下

  问:如果有一段代码运行效率差,如何查找出导致效率低的代码块

  答:运用log,把代码分段,分别记录每段的运行时间,确定哪块效率低。

  又问:如果是大段代码呢,几百万行的

   然后我就不知道如何回答了。最后问我SQL熟不熟,我说熟,但人家没问下去,到这里差不到就结束了,人家问我有什么想问的,我就问了一下他们具体的项目,工作地点等等,从开始到结束也就半个多点的时间。这次面试就给自己打了50分吧,以后还是要多回答点。。。。


   

原创粉丝点击