实习面试总结(只写了昨天腾讯的面试和拿到offer的一个小公司, 有空再把前面的补上吧)

一个月来面了大大小小的公司有近10个,还是总结一下吧,希望对大家有点用处。

我想说的是,大学四年,如果不会继续读研深造,那么你需要做的不仅仅是疯狂的做项目,或者单独的学算法。

最好的方式就是都了解一点,但是要有自己擅长的东西,面试的问题无非就是那几个方面,比如C/C++(当然如果

你的主要语言和我一样是C/C++的话), 操作系统,计算机网络,有一个项目(只要不是档次那么低就可以),

然后就是基本的算法和数据结构(这个,我觉得是大多数学生所欠缺的)。

一.  腾讯

昨天到上海参加现场面试,到现场之前感觉不是那么紧张,到了才觉得有点慌了。

别的不说,霸气的大楼看了就让我不敢抬头说话了。到了11楼会议室,加上我只有5个人在等面试。

没要几分钟,工作人员就让我到某间会议室去面试,进去之后,第一眼我就发现那位面试官穿的拖鞋,

不过也没有太多惊讶,毕竟人家的主场。

好啦,进入正题。

首先,他看了看简历,就开始问了我项目的问题,其实这是我最不愿意被问的东西,然后就硬着头皮给他babalabala。

之后说到多线程,他问我项目中用的是阻塞还是非阻塞。。我压根就没了解过这个词啊!!于是就说不知道了。

问: 我项目中有哪些亮点?

我又是一顿babalabala。。

问: 你擅长哪些东西呢?

答:C/C++比较熟悉,对Linux也挺熟的,还有一些基础的算法和数据结构。

于是,

问: 虚函数是干嘛的?

答: 我想这特么简单啊,虚函数用在继承中,希望子类重写父类中的虚函数,用来实现多态啊。

问: 那虚析构函数呢?

答: 这个也是虚函数啊, 当用父类指针指向子类实例的时候,析构该指针所指向对象时会先调用子类的析构函数,然后再调用父类的析构函数。

问: 数组名和指针有什么异同呢?

答: 数组名指向的就是数组的首地址。后来想想,这个问题我回答的超级烂,数组名在编译器看来就是个常量,在编译阶段就可以知道的值。

       这种问题,我就是一时想不到那么多,还是不太熟悉呀,细节最重要。

问: 写一个宏,求两个数的最大值。

(我心里想,居然问我这种小儿科问题,我最擅长的啊!当然,我知道会有很多人会写不好这个简单的问题)

答: 我在纸上迅速写了下来

#define MAX(a, b) ((a) > (b) ? (a) : (b))

问:定义一个函数指针,该函数返回类型为int,有一个int型的参数。

(我想,好简单。问这种问题好爽)

答: 在纸上写了。面试的时候都是在纸上写代码。还好我练过!

int (*func)(int);

问:你读过那些有名的书吗?

答:<<C++ Primer>>, <<C指针>>, <<C陷阱和缺陷>>, <<C专家编程>>, 还有鸟哥的Linux书籍,一些算法和数据结构的书。

问:写一个函数,输入为一个字符串,字符串可能包含一些空格, 输出是这些以空格作为分隔符的字符串数组。

显然这个问题不是那么简单,会有许多需要注意的地方,我想了一下,在纸上写了起来。

 1 vector<string> split(string inputString) {
 2     vector<string> answer;
 3     unsigned int length = inputString.size(), i = 0;
 4     while ( i < length && inputString[i] == ' ' ) i++;
 5 
 6     string str = "";
 7     for ( ; i < length; i++) {
 8         if ( inputString[i] == ' ' ) {
 9             answer.push_back( str );
10             str = "";
11             while ( i < length && inputString[i] == ' ' ) i++;
12             i--;
13         } else {
14             str += inputString[i];
15         }
16     }
17     if ( str.size() ) answer.push_back( str );  
18 
19     return answer;
20 }

这是最后一个题目,写完我就觉得简直完美。。但是回来的路上一直很忐忑,生怕哪里写错掉。

回来之后我把代码写了一遍测试,发现居然少了一句话。。。。尼马,简直了!

其实上面代码里的 倒数第二句我当时忘掉了。。。也就是没有这句。

 if ( str.size() ) answer.push_back( str );  

算是对自己的一个教训吧。这个题并不是什么难题,但是写代码的时候我觉得一定要注意以下几点:

1. 变量的命名规则

2. 代码风格,有的人离开编辑器或者IDE就不会写代码了。

3. 一定要细心,不要急着写好就给面试官看,仔细检查,就可以避免我当时的低级错误。确实有点紧张。

4. 考虑要周到,如果字符串头部或者尾部有空格怎么把,或者中间有多个连续的空格怎么处理,这些都是细节,要小心。

面试最后,他让我问他几个问题,我也就随便问问说实习生来到这里会被安排做哪些工作呢?每天开几次会?babalabala。。。

滚粗咯...........

二. 妙技旅行(北京, 创业公司)

对这个公司的实习的职位超级有feel,因为职位描述的和我要找的工作真的很贴近。

这是在周二下午即将要上三四节课的时候打来的电话。

当然,他是看过我的简历了,然后就开始问啦。

首先,问了项目的东西,但是他问的是我写的LRU Cache。

问: 你是怎样实现这个机制的呢?

答: 双向链表+map,其实这里还balabala了好多。不太记得了。

问:LRU有什么缺点呢?就是在什么情况下会表现的很差?

答: 不知道。(我当时是真的想不起来了,现在我知道有一种情况是weak locality)

问:Python的可变类型和不可变类型是什么?

答:比如tuple是不可改变,(他还举了个例子让我来回答)

问:将BST变为一个双向链表。

答: 时间有点紧,想不出来. (其实只需要dfs一下就ok了。

问: 你知道STL 的map是用什么实现的么? 他的插入删除效率是多少?哪个更块一点呢,为什么?

答: map用RB-Tree实现的,插入和删除的效率均摊情况下都是对数级别的。至于插入和删除哪个更快一点,我不太清楚( 后来知道和旋转的次数有关

问: 二分查找的效率是多少? 你可以解释一下二分查找么?

答: 效率是对数级别。我给他举了一个"猜数字“的例子。

问: 你可以解释一下C++的多态吗?

答: 当使用基类指针或引用指向派生类的实例时,会根据其实际类型进行动态绑定。(略了一些, 忘记了。。

问: 你知道sed和awk的区别么?

答: (这个问题我并没有回答到点子上,他后来和我说sed是面向行的,而awk是面向列的。。我才明白

问: 我想查看文件的前几行或者后几行怎么办?

答: 使用head和tail。

问: 你有什么问题想问我的吗?

答: balabalabala

posted on 2015-03-27 13:19  Stomach_ache  阅读(950)  评论(3编辑  收藏  举报

导航