2016 面试总结 实习篇

来源:互联网 发布:锤子电梯破解软件 编辑:程序博客网 时间:2024/05/20 01:35

快一年没有写点东西总结下了,正好前些天校招结束,闲着没事总结一下这一年找工作遇到的一些面试题和经验。

下面是实习篇

先说说我的基本情况,我来自某普通985,研二,本科期间参加过ACM但是没什么拿得出手的奖项,无牛逼项目,无实习经验,只在硕士阶段跟着导师做了一个研究型的项目,所以工程能力各种拙计。不过好在本科时期读过不少技术书籍,专业课学得还不错,基础还算扎实,然后参加ACM竞赛让我的编程能力得到有效锻炼,认识了不少大牛。所以对我的求职之路还是有一些帮助的。(比如各大公司都有认识的人,内推不用愁啦~~)

我一共面了5个公司,阿里,百度,腾讯,微软,Google。接下来我将对我整个找实习的流程做一个总结,也希望能给大家涨点信心:我们这种普通院校的普通学生也是能找到好实习的!!

下面按照时间顺序说下我的面试经历。

腾讯:

一面: 2016.2.29

一上来先自我介绍
介绍完之后开始问一些技术基础,主要包括以下几个方面:

语言相关(C/C++):

1:C/C++如何引用外部全局变量。
2:C/C++中 static的作用(貌似是腾讯必考题,包括这次面过4次腾讯,无一例外。。。)
3:C++如何实现多态
没问太偏的,所以答得不错。

计算机网络:
4:udp和tcp区别以及tcp的拥塞控制,三次握手,4次挥手等等
5:http和https区别
幸好前一天花了一天复习网络。回答得八九不离十。

操作系统:
6:进程和线程的区别。
回答了之后接着问我在应用中什么时候使用进程,什么时候使用线程。
7:死锁的四个条件,如何预防死锁。
由于面试的时候操作系统还没开始复习,回答的不太好,面试官不是很满意。

编译与链接:
8:动态链接与静态链接的区别。
9:makefile的作用,直接说不会。(面完后马上补)

接下来直接在QQ上出了两道选择题:

  1. 已知二叉树后序遍历序列是bfegcda,中序遍历序列是badefcg,它的前序遍历序列是:
    A) abcdefg B) abdcefg C) adbcfeg D) abecdfg

2.下列for循环的循环体执行次数为:
for(int i(10), j(1); i=j=0; i++, j–)
A) 0; B) 1; C) 无限; D)以上都不对

然后面试就结束了。面试官对我的评价是说可以看出我编程功底(这怎么看出来的?)和C掌握得都很不错,但是一些专业知识掌握的不是很牢固,还有工程上的经验比较欠缺,要我以后多拓展一下知识面。

二面:2016.3.2
没有自我介绍,一上来直接问问题,还是几个方面:

语言相关:

1:C/C++ static关键字作用(你看看我说什么来着)
2:指针相关,要我写一个: 返回值为“指向int型数组的指针”的函数指针(有点拗口哈)
关于指针我研究得还是比较多的,所以还是一下就写出来了

int (*(*p)())[]

计算机网络:
3:TCP/UDP区别
4:一个网络相关的问题,忘了,因为我不会(汗~~)

操作系统
5:进程的几个状态和几个状态之间的转化关系
6:什么是虚拟内存,它的原理,作用等等。

算法与系统设计
7:问有一系列字符,包括英文字幕大小写,还有数字,标点符号等等,问要我排序用什么排序方法比较好。
因为只是字符且字符种类是一定的,所以可以用计数排序,也就是桶排序,记录每个字符的数量然后,时间复杂度O(n),空间复杂度O(1),认为字符种类数量是一个常数。

8:在线编程,实现函数atoi(),不过字符串是16进制的,要转换成10进制。
主要考察的是细节的处理,考虑了负数还有空指针,还有越界返回值的问题。和面试官讨论了空格是否影响的情况,面试官一直问我还有没有可以考虑的,一直没有反应过来。
后来面试官直接告诉我因为是16进制的,所以要考虑前缀为 0x的字符串的情况(哎呀,这都没想到。。)。

9:手机和QQ号绑定,如何设计存储系统,
首先和面试官交流了一下需求,得知是一对一绑定,且只要完成两种询问,即给一个QQ号,返回绑定的手机,和相反。
按照自己的想法说了一下,主要就是用哈希表,然后被追问如果内存不够用怎么办,考虑了将数据分块,讨论了一下细节就结束了。

10:给一个1对4的插排,一个插座,现在有28展灯,问需要多少个插座才能使所有的灯都接上插座。

一个插座能在原来的基础上多出3个插口,所以解 3x+1>=28不等式即可。

最后问了一下我以前搞ACM的时候遇到过什么困难,是怎么解决的。说到了第一次参加辽宁省赛的那一次(黑历史啊),解决方法说的是勤加练习,然后培养团队意识(感觉面试官喜欢听这个),
增强团队默契,发挥每个人的长处什么的。

HR面 2016.3.10

先是自我介绍,按照技术面的方式介绍了一下。接着就像聊天一样问了几个问题:
1:家乡哪的
2:学校方面的事,会不会读博或出国,为啥本科是5年
当然要回答不读博啦,毕业马上工作,提了本科是双学问,计算机+日语,还被要求说了句日语。。。
3:大学期间做得最正确的一件事。
4:大学期间做得最差的一件事
5:专业排名
研究生的排名并不清楚,就说了下本科的,本科是保研上来的,所以GPA还能看,这个要如实回答。
6:本科期间有身边特别佩服的人。
随便扯了一个,解释了下原因,基本上是自己想要成为什么样的人就怎么形容就好(感觉甚至都不需要真有这么个人。。。)。
7:兴趣爱好
8:对加班的看法(重要)
感觉前面问的都是虚的,这个才是要点,按照网上的攻略说了下,大概就是如果是自己的工作没做完会主动加班,但同时会提高工作效率,避免不必要的加班。(估计这种答案HR都听腻了)
9:手上有没有其他 offer
腾讯是我第一个面的公司,这个真没有 TAT,不过这也好,这时候就要表现出非腾讯不去的态度。
10:女朋友的工作找哪了
。。。。。。呵呵呵。。。。。。
11:你有什么问题问我
提了下腾讯校园相关,说注意到没有实习生相关的培训,他说实习生和校招生是一起的。然后重点说了了下腾讯很重视新员工的培训什么的balabala

最后就说有消息的话会在下周打电话或者短信通知我。

两周后发offer,SNG后台开发。

腾讯整体面试风格都是偏基础,运气比较好竟然过了,真实不可思议,然后腾讯的面试官都很nice哇,一开始会问几个简单的题让你消除紧张感,然后重要的技术问题绝不含糊,会一直叩细节问到你答不上来为止,在最后还会给你一些职业上的建议,感觉非常专业。给个赞!!

Google

由于已经签了,不能透露具体面试细节,就说一下招聘流程和如何准备面试吧。

关于招聘流程:
其实我也是第一次投G家,也不是太了解,大家可以去官网或者知乎上看看,就我了解的信息来看的话:能内推的话就不要自己投,因为每天投简历到Google的人是很多的,HR每天要看成成千上万(有些夸张)份简历,看到你的那份简历不知道要到什么时候了,而且在这么多简历里要做到脱颖而出是很难的,没有牛校,牛经历,牛项目的话想获得面试机会非常小。所以绝大部分投Google的人都跪在了简历筛选这一关。但是内推就不一样了, Google内部规定HR收到内推这的简历后必须在两周内给出回复,这效率比海投那不知道高到哪里去了,所以,内推能极大地提高你的招聘效率,至少能有个面试机会吧。(但是内推并不能提高你的录取机会)以后的事就靠自己了。
如果身边没有人内推的话,可以去linkedin里面搜索Google(或其他公司)的师兄师姐让他们帮你内推,一般都会答应你的,或者去我下面提到的 一亩三分地论坛,里面有专门的内推版。

实习只有两面,两轮都是技术面,而且风格和国内大不相同,50分钟两道算法题,这些题一般是网上找不到的,(推荐几个网站 一亩三分地,CareerCup,GlassDoor,GeeksforGeeks,以上都是著名漏题网站,可以在面试前去碰碰运气(笑))

当然刷传统的leetcode和lintcode也是有帮助的,但是千万不要去背题啊,一定要理解题目的原理,不然随便一个 follow up就 hold不住了。。。

另外,如果是校招,一定要练好英语口语和听力,从去年的消息来看,面试一共4轮,每轮都是英文面,还有可能碰到印度人,所以英语不好就等着懵逼吧。。。(所以最近狂练英语中)

百度:

百度本来是不准备投的,但是当时0 offer心有点慌,就找同学的师兄帮忙内推了一下,面完之后才知道我面的是百度运维部,对这个部门并不熟悉,也不太想去,就随便水了水,就当是练习了。

百度一面 2016.3.25

晚上8点打电话给我,要我10分钟后面试。。。然后慌慌张张找了地方。。。没纸没笔就开始面试了。

一开始2分钟自我介绍。
然后开始扯到项目。20min
然后开始问各种技术,问得太多有些忘了:

语言细节(C/C++):
1: delete和free的区别
2:指针和引用的区别,什么时候使用常引用
3:bool,int,float,指针分别和0作比较。

操作系统:
1:进程段的分布,主要讲了堆栈静态数据段的区别,然后问了全局变量初始化和未初始化的变量分别存在哪个段。(这里答错了)。 未初始化全局,静态变量存在BSS段,初始化的存在数据段。
2:linux各种操作。
3:进程线程区别。

数据结构算法:
1:有n个人,每个人有一个身高,然后m个关系,每个关系(a,b)表示a比b高。 让你将这伙人从按身高小到大排列。
有两问:
(1):会不会出现无解得情况。
(2):如果存在解,要求给出一个字典序最小的解(按照人编号)。

2: 有40亿个无符号整形数,然后给你一个数x问是否那40亿个数中是否存在x,内存2G

首先想了个数据分块的想法,然后面试官问是否还有其他方法。。想了想用位图存40亿个数只需要 0.5G,可以直接装入内存。

3: 有50个红球,50个篮球,两个袋子可以装任意数量的球。装完后从两个袋子中各取出一个球,问要怎么放球才能使得取出的两个球都是红球的概率最大。

4:最长严格上升子序列。 dp + 二分 nlogn方法。经典题目。

5:13个球,一个球和其他球重量不一样(轻或重),用天平秤三次找出那个坏的球。 经典题,然而我并没有答出来。(面完回来补了一下,二面马上就问到了!!)

网络:
1:TCP 的三次握手,四次挥手,最后还问了四次挥手时的各个状态的名称。。。。表示忘了。
2:write()函数返回值的一个问题。。。然而我不会具体问了啥忘了。
3:http和https区别。 https建立连接的具体过程。

最后问了个不知道属于什么领域的问题。

假设你是一个消防员,刚刚完成了一次救援行动。回来要写总结报告。问我应该在哪几个方面进行总结。
主要讲了3个方面:消耗状况(人员伤亡,损失什么的),任务完成时间,事故原因什么的。然后面试官补充了一点。
最后问问题阶段,感觉没啥好问的,就没问。

二面:2016.3.27

没有自我介绍,一上来问我对上一次面试有哪些问题没有答好,(幸好当时面完看了一下)我说那个天平秤球问题,让我描述,我就把网上的解法说了一遍。
然后问我还有没有,记不太清了就说了下bss段和数据段那个。

接下来的所有时间都是在问项目,其他一个都没有问。同一面一样,讲了下HMM的原理。balabala
然后主要就是些项目中的细节,遇到问题怎么解决啦,对项目未来工作的一些期望啦。balabala
最后问了下对linux的使用。。表示是硬伤,需要恶补。然后就没问什么问题了。

问他的问题:
1:实习面试有几轮?提到最后一面是经理面,类似于HR。。能过再说吧。
2:百度对员工最看重的能力。这个问题屡试不爽,他balabala说了一大堆。

过了两周说要安排三面,但是当时已经拿到Google的offer了,想想也不会去,就拒了。

百度面试体验没有上两家那么好,主要是感觉面试官就是对着一份题库找题问。没有啥重点。。然后如果回答的不是他们的“标准答案”就会一直问下去,直到提示得到他们所谓的“标准答案”。感觉不是很专业。

阿里巴巴:

今年报阿里内推的人太多了,我3月1号就开始找熟人内推,结果等了20多天才面上,阿里算是国内公司的代表了吧,对项目和专业基础知识很看重,而且觉得有些太偏向java了,至于为什么后面再讲。。。没有报太大希望,因为我知道阿里对我这个工程经验薄弱的渣硕来说确实有点难。

阿里实习一面:2016.3.23

一面面试官特别nice,因为我说我工程经验比较少,只有一个项目,所以这次面试除了项目外主要就是考察我的算法能力。
1:项目相关:项目所用数据格式,所用模型以及为什么采用这种模型,具体怎么做的。效果如何等等。

2:讨论一道算法:有1千万个文件。从中取出1000个文件设为集合A,剩下的叫做集合B,每个文件中有一系列单词。要找出A中最少的单词使得满足:
(1):这些单词不能再B中出现
(2):这些单词可以覆盖A。(也就是不存在一个A中的文件,使得选出的单词都不在这个文件中)

讨论了一下,首先第一个条件容易满足,可以将B中的单词用一个哈希表(或者字典树)储存,可以快速判断B中是否存在某个单词,然后将A中同时属于B中的单词去掉即可。
对于第二个条件,主要是要找到最少的单词数量。。想到了贪心,然后化作重复覆盖问题,总之没有想到多项式解法。
问了下面试官想提示。面试官说他这是开放性问题,没有标准答案。

接下来将问题拓展了一下。增加了两个新操作。从B往A中加入100个文件,或从A往B中取出100个文件。要求动态维护那些单词(能覆盖A)。

想了一会,对于插入文件操作和取出文件操作分别想了一个方法,面试官应该是挺满意的。算法问题到此为止。

3:最后时间不多了,稍微问了下编译链接相关的问题。提到了mekefile的应用。上次面腾讯问到了。看了一下,把自己了解的说了。

最后问问题环节:问了下阿里对员工最看重的能力。
一面结束

实习二面:2016.3.31

等了一周左右,二面开始,二面面试官是感觉应该是江浙一带还是哪的,口音很重,说话听不清楚,所以这次面试交流成了最大的问题。

首先还是问项目,由于听不清楚他说的话(手机信号也不太好),所以在描述项目的时候我就自顾自的说了一大堆,其中说了不少细节,最后基本就变成我一个人在那说,也不知道他听了没有。后来他打断我说:你是不是对着纸念得,怎么说得这么细。 TAT,我也不知道怎么回答才好。。
接下来开始问一些技术问题,奇怪的是我报的明明是C++研发工程师,但是他只问了一道和C++相关的问题:
1:STL中array和list的区别(其实应该算数据结构吧)
其他都是java相关的,C++和JAVA的区别啊,用JAVA写过什么项目没有啊。。。。还有些题我记不得了,因为我不用java呀。。。。。。
了解到我对java不是很熟练之后可以明显感觉到他对我失去了兴趣。。。然后随便扯了些问题,什么我的本科专业为什么是5年啊。。。平常爱好啊。。。感觉像HR面。
然后就草草地结束了二面。

第二天帮我内推的哥们告诉我,不出意外地跪了,说给我的反馈是 容易陷入细节。。。应该是说我讲项目的时候说得太细的缘故吧。。。。然后说我java基础不好。。。虽然说的是事实,但是我投的是C++开发工程师额~~

阿里的面试感觉比较看人品,碰到好的面试官还是能聊得比较愉快的。其实问的问题和百度,腾讯差不多的。。并没有我想象的那么难。

微软中国

由于当时已经拿到Google的offer了,所以接下来的很多公司都只参加了笔试后来面试都放弃了,比如蘑菇街,360等等。只参加了微软的,微软我没走内推,走的是正式流程,所以也需要笔试,微软的笔试我觉得还是挺有区分度的,比完写了一个题解:2016微软预科生笔试题解, 希望可以给大家一个参考。

我报的是微软北京ASG部门的SDE职位,笔试过了一周左右得到面试通知,微软的面试都集中在一天进行,先来两轮技术面,如果过了的话,(两轮中只要有一面过了就行),就能进入到第三面终面,面试连续进行,一般间隔不会超过半个小时。面试统一使用skype进行,形式也是标准的外企风格,算法和数据结构,几乎都是1小时两算法题。然后每道题写完后会问你有没有改进的部分,最后会让你出case,考察你出的case是否全面。

一面: 2016.4.21
自我介绍之后直接上题:

1:将一个句子中的单词进行翻转,如 “How are you?” 转换成 “you? are How”。

2:给一个数组A[n]和一个位置 po, 要求数组前po个数的中位数,为了简化保证po是个奇数。

为了保证代码正确写了一个朴素的算法。
用两个堆,一个大顶堆 maxp,一个小顶堆 minp,然后将数组前po个数依次插入到堆中,在插入的过程中保证以下两个原则:

(1)小顶堆中的数不会小于大顶堆中的数
(2)大顶堆中的元素数量要么和小顶堆相等,要么多一。

具体怎么维护就不细说了,最后大顶堆中的堆顶元素就是所求的中位数。但这样每次询问都是时间复杂度都是(O(nlogn))的,肯定还有更好的方法,但是时间不够了,只写到这里。

面试官评价说如果我能把大顶堆和小顶堆实现出来就有加分。。。。(不是说时间不够了,只写主要思路就好了么。。)

二面:

10分钟后二面开始,上来不废话直接写题:

1:将字符串转换成数字

经典问题,就不多说了,主要是考察细心程度,基本上要在面试时写出一个完美的程序是不可能的,这时候要和面试官多沟通,对一些功能进行删减。总之多沟通然后及时找出自己程序的不足之处
就好。然后写case的时候要全面。

2:给一个大小为n的数组A,问是否存在一个数,它在数组中出现的次数大于 n/2

经典题:如果存在的话,将数组中两个不同的数去掉之后,这个数在剩下的数组中依然出现数大于数组的一半。那么用一个虚拟栈记录即可。注意的是试问是否存在,也就是说可能不存在,那么最后
还需要遍历一遍数组,检查最后找到的数是否出现数大于n/2。时间复杂度O(n),空间复杂度O(1)

follow up: 如果数组有序怎么做。一开始想到直接遍历一遍,然后被问到有没有更快的方法,想了一会发现,如果存在这样的数,那么这个数一定出现在这个数组的中间,不然的话他就不可能出现次数
大于n/2了。那么我们要做的就是求出这个数组A[mid]的出现次数了,因为数组是有序的,可以用二分方法确定A[mid]的左右端点,最后判断一下即可。

三面:

等了大约30分钟吧,三面开始,一开始自我介绍了一下,然后问了我项目的一些问题,和本科时ACM竞赛的一些经历。然后提了一下一面的时候没实现的小顶堆,让我讲一下原理,这个东西还是很熟悉的,balabala讲了一下。然后又开始讨论算法题:

给一篇文章,求其中出现次数最多的10个单词是什么。

对于这种问题,切记不要一开始就陷入实现的细节中去,要和面试官沟通一下要求,比如输入格式,是一个字符串还是单词的集合,被告知分词工作可以忽略,可以认为输入是一个单词集合。

讨论了一些比较明显的解法后,考虑用Trie实现。

用Trie树的话,将每个单词插入到树中,不用进行比较就能区分每个单词,同时还容易求得出现次数。然后算了下复杂度。面试官貌似比较满意了,就开始写代码。为了简单,只需要实现求出现最多的那个单词
即可。

写得还是比较顺畅的,需要注意的点就是,最后需要返回单词,那么在Trie节点中除了记录出现数量外,还需要记录该节点的父节点,以及这个节点所代表的字母,
这样才可以还原原来的字符串。

写完后又讨论了一下代码的不足和可以优化的部分。主要是动态内存分配问题,还有如果出现最多的单词有多个的解决方案。

虽然个人觉得面得还不错,但是今年似乎竞争比较激烈,所以最后还是没拿到offer,还是蛮可惜的。微软的面试体验总体还是不错的,面试官也比较专业。

总结

其实面试找工作,除了自身实力之外,准备工作也是很重要的,有很多同学都是等投完简历之后才开始准备,这时除了那种大牛,其他大多数的同学很容易被拒,其实并不一定是能力的问题,而可能是准备不足罢了。

关于面试具体准备方法,我觉的可以参考神贴一个应届计算机毕业生的2012求职之路的方法,准备内容大致就分为4部分:
(1) 算法与数据结构
(2) 语言细节(如C/C++,JAVA,Python等)
(3) 操作系统
(4)计算机网络
其他的包括数据库,编译,linux相关其实都是可选项,不同公司有不同公司的侧重点,但是
由于我对外企比较感兴趣,所以把准备重心基本放在了Google,微软上面,从面试风格来说,外企的面试主要考察算法与数据结构,以及一些思维方面的问题,至于一些工程方面的问题并不是很看重,这点上和国内公司有很大不同。
所以对外企感兴趣的同学赶紧去刷刷题,顺便练练英语口语。。否则面试交流不畅是最捉急的。

国内公司的话,像BAT这样的大公司还是比较偏基础和项目的,所以目标是BAT的同学可以多花时间复习复习专业课,顺便堆堆项目经验,然后多在牛客网刷刷题哈哈。

0 0