投了阿里巴巴暑期实习的岗位,过了几天就收到了电话面试,第一次是周六的下午,难道阿里巴巴的员工周六都还要加班,太恐怖了...当时在外面逛街,就重新约了另外的时间。周一的晚上就收到的电话,想想这个时间应该正常。作为程序员平时还是要以公司的事情为重的,闲下来了之后才能做一些面试的工作,所以他把时间安排在了周六或者晚上,接下来简单写写面试到的问题吧,范围挺大的,很多都答不上来,不知道还能不能有后续。
数据结构的知识:
1.数组和链表的优缺点,随机访问,方便增删。
2.一个元素和在数组和链表中查找它的时间复杂度...我怎么觉得这个问题没什么意义,我怎么感觉都是O(n)呢。
3.改进为一个有序的数组,那就是二分了嘛,有序的链表?单链表是O(n),双链表呢,好像还是O(n)...
4.怎么在O(1)的时间内查找到某个元素在数组中的位置,我答的需要hash表的辅助,接着问题扩展到hash表上,hash表存在的问题,我只知道一个冲突,冲突的解决方法有哪些?二维数组解决,另外找最近可用的存放...其实也记得清很多解决方案了。
数据结构知识好像就只问了这么多,接下来问了数据库的知识,其实这方面的知识我只保留了会写sql语句了...
1.数据库的索引的数据结构,我大概知道是B+树或者B树,能不能描述下它的结构...这个就虚了。记得不是很清楚了,随便瞎说了一通。
2.数据库中某个字段创建索引,模糊查找的时候能够索引吗,完全不懂呀...
数据库真心忘得差不多了,幸亏你没继续问,第一范式,第二范式,第三范式的定义,我都不记得了。
然后问到了一个设计模式的问题,举例一个设计模式应用场景,
这个问题一时半会没想起来,随口说了一个看到的代码里用到的单例模式,然后就被继续问了单例模式下什么情况会失效。我仅仅只记得如果不加锁会在多线程的时候失效...显然这不是他想要的答案,后来他问我了解不了解分布式下对象共享有没有接触过,我没有接触过这方面的东西,所以给补了他想要的答案了...
网络方面,TCP的三次握手的具体过程,这个我没答上来,回来自己复习了一下。这个经常会被问到,建议熟记于心,TCP释放的四次握手过程也应该熟记于心。又问了一些socket的知识,虽然我了解了一点ACE的东西,但是我知道这方面我不熟,我就说我简单的用过socket。
C++方面,虚函数的具体使用场景,我只记得主要是配合多态使用,继承的时候析构函数声明为虚函数...,还有智能指针的问题,我只记得auto_ptr和boost的smart_ptr的策略不同,一个是保留的,一个是计数的策略。然后就是内存泄露的问题,new和delete不匹配,异常导致泄露,怎么预防内存泄露,RAII,都是简单了解,就随便说了一下,应该答的也不是太好。
然后问了简历上的一些项目的事情,问到linux下查看文本行数的命令,这个真心不记得,我说vim可以查看行数的...然后被鄙视了,说那是可视化的。另外问了一些软性问题,同学怎么评价你的,性格如何。
阿里的面试范围真是广,还以为会被问到算法呢,没有,可能电话面试不太方面描述吧。简单记录一下,还没接到电面的可以参考一下。有所准备,欢迎指正错误。
后来是收到了阿里的拒绝信息。原来在自己很弱的时候还不能发觉自己很弱,这样很可悲,我个人还会觉得我其实答的不是太坏,总应该给一个接下来面试的机会吧。我看到下面直接评论没戏的时候我会觉得其实我答的也不是特别的糟吧。我总不会懂那么知识吧。毕竟我没有为了这个实习把所有的方面都看了。他们应该也是考虑了很多的方面吧。自己还没有那么的完美,只能把这个当做是一次催人奋进的小插曲。加油。多看书,多码码。