第一次阿里电面总结

     临近毕业,向阿里投了简历,电面来的很快,现将面试的问题以及自己的心得总结一下

    首先,面试官哥哥人很nice,会指引我怎么去回答问题。感觉面试的内容比较广,也比较偏,也可能是我自己能力不强的原因吧。从java,到数据库,到数据结构,到算法,再到项目管理。

java方面:

 1、String类和StringBuffer类的区别:

 我首先回答Stirng类时不可变得,然后就是说有两种方法初始化String,进而说明为什么是不可变的。然后说StringBuffer可以通过方法append()方法改变其值。回答后又追问String真的是不可变的么。我会想自己看过的博客,以及实践了一下,知道可以通过放射改变String的值,但是没有回答为什么。

2、HashMap和TreeMap的实现机制、HashMap的哈希函数的时间复杂度以及HashMap的同步实现。

 这个回答不是很好,就回答了HashMap的实现算法是散列,接着又问装载因子。这个其实知道,一下子紧张了,看源码后知道0.75。时间复杂度这些就完全记不得了。

3、volatile关键字

   说实话,没有听清楚这个是什么关键字,后来百度才知道是在线程中的东西。http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html可以看这个博客里面的内容。

4、序列化

      知道什么是序列化么,平时用过么。我回答知道要实现序列化就要实现Serializable,可是具体的怎么用就忘记了,后来想了一下才知道对象流中的一个ObjectInputStream就是用来实现序列化的。 

5、什么是线程、什么是进程

我是先从操作系统中回答什么是线程什么是进程的,然后再回答java中实现线程的两种方法,以及谈了一下用接口方法更好的原因。面试后才想起,如果谈谈生产者消费者例子,说一下线程的原子性问题或许会更好。http://xiaohuishu.net/2015/07/16/怎样理解线程/       可以参考这篇博文。

数据结构方面

1、如何实现二叉树的优化

这个真不知道了

2、什么是平衡二叉树,其底层是怎么实现的

     这个我就知道平衡二叉树的概念了,就回答左子树和右子树的深度差的绝对值不超过1。具体怎么实现的还要继续复习。。。。。

3、给你一大组数据,让你实现排序,请问你觉得用快速排序和归并排序哪个更好,为什么。

这道题明显是考察对两种排序时间复杂度的了解。我当时回答的是归并排序,简单的说了一下两者的时间复杂度,但是结束后才知道两个排序最好情况都是 O(nlog n),最坏情况下快速排序是O(n^2)。所以用归并排序了。

数据库的索引实现机制以及为什么使用B树和B+树实现

数据库方面:

1、如何用sql语句实现去从操作

   一开始没有听清楚,后来想了一下就知道是distinct了。
2、虚拟一个场景,不如现在有很多人喜欢看电影,每个人可以买多张电影票在各个时间段看电影,现在让你实现查找出一个人在一段时间内所看的电影。并设计索引。

         我回答的是先抽象出一张表,表的字段有用户id,电影名字,看电影的时间。则我说索引建立在用户id上,再说出了sql语句,然后面试官又问确定一个索引就够了么,我又补充设置复合索引,在用户id和看电影时间列上设置索引。。。。。。

3、数据库索引底层是怎么实现的

            又回到了数据结构。我说底层是通过树实现的,但是对树不了解。

算法:

给你一个长度为N的数组,找出是n的2倍的N的子集

       这个问题想到的解决方案不好,时间复杂度太大了,还得好好想想。。。。。。

总结:通过这次电面,也是第一次面试,感觉自己基础比较薄弱。Java方面集合、线程这方面要更加深入的去了解。数据结构要巩固各种排序算法以及树。数据库要多写写sql语句,巩固一些基础知识。算法对我来说有点困难,至少要知道常见的算法。

 

 



 

你可能感兴趣的:(第一次阿里电面总结)