Cononico

2017年3月15日

学习笔记 求职经验>

实习面试笔试小记

现在已经是大三的下学期了,正准备着找实习,所以也就要经历一次又一次的面试(挫折,也好啊,挫败感才是进步真正的动力啊),这篇博文就用来记录接下来的面试笔试的心得体会和题目总结。



2017/3/14

面试公司:阿里巴巴

岗位:C++研发实习

面试过程

这次阿里的实习电话面试,也是我的第一次面试,总的来说表现的很糟糕。

一开始上午给我打了个电话约好晚上7点开始面试(主要会了解编程基础、算法、项目经历),然后白天我还准备了一下,因为投的是C++开发所以就着重看了一下C++的基础知识,对晚上的面试其实并没有太大的用处。

废话也不多说了,就讲一下面试的过程吧。

首先就是请我做一个自我介绍,这里我就有点乱了(好像上一次的自我介绍还是大一参加院学生会外联部的时候,再前一次就是大学刚开学了)。我就没什么条理的介绍了一通:我叫陆彬彬,在南京邮电大学读大三,软件工程专业吧啦吧啦(其实前面三句讲完了我就感觉没什么好说的了啊!)。

下面就是他问我了,他说他本来是面试Java的先问我懂不懂Java,我说不太懂,他就决定问我数据结构和算法的问题了,一共问了4个问题。

1.简单的解释一下HashTable的原理。

听到这个题就感觉当头一棒,脸都红了,我都没用过hashtable还让我怎么讲原理啊,只能说不知道了。

2. 有一个有序的数组,在不可以新建数组空间的情况下将重复的元素删除掉(算法的复杂度要求O(n))。

一开始没说时间复杂度的条件我就很自然的说了一下最普通的方法(从前向后遍历相邻的比较,有相同的则将后面的元素全部前移一位),他立马就否定了说这样效率很低,能不能找一个O(n)的方法,我一听又紧张了,但还是思考了一下:既然每次后面元素前移的时候比较费时那就把每趟的移动放到一起,第一趟遍历找出所有重复的元素打上标记,第二趟遍历将没有标记的一次性压缩到前面,可是问题来了第一趟做的标记存在那里呢。我就没再继续想了,直接说了暂时想不到下一题了。

后来看到了网上的一个算法和我思路有点像,他是在一次遍历的时候就找出不同的元素直接向前压缩到前一个不同元素的后一位,这样一次遍历就能完成而且不用额外存多个标记量。

代码:

int remove(int &A[],int n){
 if(n==0)return 0;
 int index=0;
 for(int i=1;i<n;i++)
 {
 if(A[index]!=A[i])
 A[++index]=A[i];
 }
 index++;
 return index;
 }

 

这个函数最后返回的是压缩之后的数组长度。

原博客:http://blog.csdn.net/u014520406/article/details/51740653

3.给你100万个无序的单词自己定义结构存好以供搜索,为了能够快速的搜索到如何排序。

这个我也没有想到什么好方法,就说了排序然后给每个字母开头建立索引。

结果他给的答案是直接存在26叉树上。

4.如何找到两个人能最少通过几个人的qq好友关系联系到一起并找出中间联系的所有人。

这个我把思路说对了,就是将每个人看作一个节点,给所有互相有好友关系的连上线,就成了相邻节点,接下来只要求两个节点之间的最短路径就可以了。接着他就让我阐述一个单源最短路径的算法思路,那还是上上个学期学算法的时候看的东西,当然我又没说上来。

问题也就问了这么多,后面就让我简单的介绍了一下做过的项目,反正我觉得他听了之后没什么兴趣,应该是觉得没什么亮点还评价说项目里获取和显示视频的方法效率太低了。

最后问我还有什么想说的吗,我就很诚恳地问了他对我评价怎么样,有没有什么建议。

他的回答是要扎实算法和数据结构。。。(其实我也感觉到了啊)

总结

  • 要准备一个很有条理的简单的自我介绍
  • 不要紧张遇到问题慢慢的思考
  • 对生活中的常用的应用多思考其背后的算法实现,比如百度搜索引擎的设计、朋友圈功能的实现之类的
  • 了解一些对大量数据处理的方法
  • 最后也是最重要的,基础一定要扎实,在面试官面前答不上来他只会觉得你什么都不懂

来一发吐槽