zoukankan      html  css  js  c++  java
  • 2010暑期腾讯实习生一面全记录

    第一次自己动手写技术博客。。。

    我是2010年4月25号的面试,面试方向是腾讯的软件开发--客户端开发方向。

    下午下着小雨,由于前些天冰岛的火山爆发,大家一度认为那雨是酸雨。。。下午四点的面试,三点才和几位技术大牛一起

    踏上去珞珈山酒店的面试征程。几位大牛里有ACM比赛到处拿奖的算法高手,有创新杯全球第二的技术牛人,还有。。。。

    还有我这个无名小卒。。。我也没多想,反正我就是去体验下面试啦~

    到达后,先签到,然后就到741房间外面等着了。里边的同学出来后,我就开始进去面。面试官操一口广东口音,不知道为啥,

    我就觉得面试官人很好的样子,完全没有想象中的任何紧张,任何窘迫,甚至整个过程我都太过随意。。。

    先自我介绍一下。好,那就自我介绍,顺带介绍了一下做过的项目。他问了问做的项目大概是啥,然后让我选一个来说,我在

    里边遇到了什么重要的问题,然后找到什么solution解决了问题。似乎他面试前面的人拖延了一点时间,然后想在面我的时候

    快一点。然后我就blahblah把准备好的一个问题给说了。

    附:我介绍自己项目的时候,觉得说话很不利索,爆出一句:我好渴呀……然后面试官去给我找水……囧,我错了……

    然后就开始问所谓的技术问题,其实问了很多,但总感觉什么也没问。大概有一下几点吧:

    1. 排序算法。各种排序。快速排序,堆排序,归并,等等。问了很多,我把我知道的都全盘托出,应该还行吧回答的,毕竟

    数据结构考了90多,我还有小复习一下呀~总是问,如果有一亿个数排序用什么,一百万个又用什么,一百万个里边选出最大

    的10个又用什么。我本来听广东普通话就觉得很别扭, 和面试官的交流反正不那么顺畅,我又一点不紧张,那个气氛啊,只能

    用搞笑来形容。

    我的理解就是,如果是让按顺序排序,数量很大的话,当然是用快排,如果有其他要求,比如选出最大十个,还是用堆排序效率

    比较高,据大牛说建堆的复杂度只有O(n)。如果还有存储方面的要求,那还要另当别论。我虽然明白,但是和面试官交流不太好

    ,也不知他清楚没,好,作罢。

     2.查找。他一直问我查找的问题,弄的我很烦。我除了知道二分检索,二叉树查找,哈希表什么的,其他的搜索方面的东西我

    真的没有复习,印象也不深了。他有问一个问题,有十万册书,你会怎么安排他们的存储查找等等东西,使得他能按书名检索。

     我很纳闷,腾讯你就是仗着自己用户多,然后数据量奇大,然后就出这种很大的题目。。。我第一反映是:干嘛不用现成的数

    据库?建个索引来查找就得了嘛。他说看我能不能自己实现。然后我就想要怎么快速查找,于是乎我想到了用二叉树,分级来查。

    是他又说事先不知道分类,就只用书名来检索。然后我就懒得想了,说查找我懂的不多,为什么一直问我查找。他说他们部门是

    做XXXX,主要做的就是查找。好吧。。。。没仔细看看查找是我的一大损失。

    3.象征性的问了下C++。也就让我解释下多态。啊,太简单了。说了些多态包括重载和虚函数云云。虚函数是动态调用的。他又

    问我在编程时有没有体会到多态的好处。我说虚函数挺好用的,可以根据对象的实际类型来动态调用函数。顺带又说我们的项目里边

    全局变量太多,更偏向于使用C,没有用到这些很好的特性 。

     4.然后他又问全局变量在哪里。哎,太简单了。我又自信的像背书一样的说了,存储空间大概有三种,像static的静态变量就在

    静态存储空间里,像函数里的局部变量以及参数是在栈上,而其他的比如局部变量是在堆上,就是通常说的内存里。

    然后他又问了new和malloc的区别,这个呀,前两天早就弄清楚了,还和大牛讨论了的。。。

    我说了new是先调用malloc分配空间,再调构造函数。他又问那如果我new char[256]呢?广东普通话里char我真没听出来,他

    还很认真的在纸上写。那一瞬间我觉得仿佛是我在面他。。。然后我就说,先调malloc,因为char是基本类型,所以就不调构造

    函数啦。 然后他微笑了。看来我第一面的印象就没错,这是一个很和蔼的面试官,呵呵。

    似乎是笑里藏刀?他又问如果在一个函数里new一个东西,那它在什么存储空间上。局部变量,莫非在栈上?他不语,啊,莫非在

    堆上?啊,他还是没说啥,就是笑。好吧好吧,你笑吧,我觉得不是在栈上就是在堆里。我想让他告诉我答案他也不说,只是说好

    那我们问别的吧。

    ***后来查了下,具体如下:

    一个由c/C++编译的程序占用的内存分为以下几个部分 
    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 

    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分

    配方式倒是类似于链表,呵呵。 

    3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化

    的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放  

    4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放 

    5、程序代码区—存放函数体的二进制代码。 

     然后new和malloc申请的区域应该都在堆上。

    为了纪念,我决定下一篇日志好好把堆和栈写写。 

    5. 还问了蛮多的,不记得了。。。大概也就免了30分钟左右吧。最后让写一程序,字符串翻转,啊,很老的题目了。都不玩点新花样。

    我在写题的时候,他不忘记把我喝过的小瓶的水给我,也许担心时间又过了,就把后面面试的也叫进来面了。

    写完reverse,我就告别了这位人很好的面试官,找大牛去了。

    总结:

     第一次面试,本来以为我会很紧张的,加上打的来的路上,几位大牛又谈了下STL,我都没听说过的东西。进考场前小邱又给我说了几

    句我原先完全都没考虑过的技巧,害得我又以为我会紧张的,没想到,我的第一次面试竟然是如此的随和,都没有压抑的感觉,我是真的

    当在聊天,只不过面试官可不是那样想啊。。。如果他不喜欢这样的,那我就挂啦~~~

    我是默念着小邱教我的“要和面试官交流”,“要交流,要交流,要交流……”进去的。很感谢小邱,你让我很有安全感,嘿嘿。

    你的原话是这样说的,对我可能没用上,希望对其他的后来人有用: 如果面试官问你STL,你又不懂,你可以这样回答:我没有研究过STL,

    但是我知道它是Standard Template Library,可以使编程变的更方便快捷云云。STL我了解的不是很清楚,我做过的项目里边用到的MFC比较

    多,我可以给您讲讲MFC? 

    当时在面试官酒店住处外面听到这句标答的时候,我一时间觉得自己什么都没准备一样的(事实上就是啥也没准备。。。),连回答不上来

    问题该怎么办都没想过的。。。

    还要明天晚上才能知道结果,能过就过,不能过我就去别的实验室,嘿嘿~~~ 

    后来得知,腾讯一面挂了。。。

    我杯具了,看来这样太过放松是会出问题的。可不能把面试官当朋友,人家可是在考验你,决定着你的生杀大权呢。

    以后一定多努力,祝大家都顺利~! 

  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/avril/p/1721472.html
Copyright © 2011-2022 走看看