应聘总结之腾讯实习生(2)

标签: 腾讯 实习生 | 发表时间:2011-05-27 17:21 | 作者:白色之夜 revlekt
出处:http://www.cnblogs.com/

二面

一面过后一天,接到二面的通知。二面在腾讯公司所在的银科大厦。面试官一开始针对简历问了几个问题,然后开始问技术问题。

  1. 二分查找大家都很熟悉,但如果给出的数组a可能进行了循环移位,如[1 2 3 4]变成了[2 3 4 1](是否移位,移了多少位都不知道),能否写一个程序,快速找出数组中是否存在某元素n
  2. 我最初的想法是,遍历数组,找出移位的点,然后判断n属于哪个区间,进而在那个区间中对n进行二分查找。

    但是面试官提示我,原本二分查找的时间复杂度是O(lgn),而遍历数组的时间复杂度是O(n),时间复杂度增加太多,能不能找到一个不改变时间复杂度的算法。

    思考之后我发现,查找移位点其实可以用二分查找来实现,这样整体时间复杂度就不会增加了。移位点s的特征是:在它左边的元素比在它右边的元素大。可以用以下方法找到移位点:区间的头为b,尾为e,中间点为m;若a[b]<=a[e],那么该区间中不存在移位点。若a[b]>a[m],则移位点在该区间的左半段;若a[m]>a[e],则移位点在该区间的右半段。

    回家后我再思考这个问题,发现上面的方法可以更简化,那就是把判断移位点和查找元素n的过程结合在一起。

    对于一段区间be,中间点为m。若a[b]<a[e],说明不存在移位点,可以直接在这段区间上用二分查找查找n;若存在移位点,则m和s把整个区间分为三段,得小心判断n属于哪个区间,然后把范围缩小,直到该范围中不存在移位点。

     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9 
    10 
    11 
    12 
    13 
    14 
    15 
    16 
    17 
    18 
    19 
    20 
    21 
    22 
    23 
    24 
    25 
    26 
    27 
    28 
    29 
    30 
    31 
    32 
    33 
    34 
    35 
    36 
    37 
    38 
    39 
    40 
    41 
    42 
    43 
    44 
    45 
    46 
    47 
    48 
    49 
    50 
    51 
    52 
    53 
    54 
    55 
    
    int binSearch(int *a, int len, int n)
    {
        if ( len <= 0)
            return -1;
    
        int b = 0;
        int e = len - 1;
        if (a[b] == n)
            return b;
        else if (a[e] == n)
            return e;
    
        int m = (b + e) / 2;
        while (b < m)
        {
            if (a[b] >= a[e])  // be区间中存在移位点
            {
                if (a[m] >= a[b])        // 移位点在me区间中
                {
                    if (n > a[m] || n < a[b])
                        b = m;
                    else if (n == a[m])
                        return m;
                    else if (n == a[b])
                        return b;
                    else
                        e = m;
                }
                else if (a[m] <= a[e])   // 移位点在bm区间中
                {
                    if (n > a[e] || n < a[m])
                        e = m;
                    else if (n == a[m])
                        return m;
                    else if (n == a[e])
                        return e;
                    else
                        b = m;
                }
            }
            else                // be区间中不存在移位点,直接用二分查找
            {
                if (n < a[m])
                    e = m;
                else if (n == a[m])
                    return m;
                else
                    b = m;
            }
    
            m = (b + e) / 2;
        }
    
        return -1;
    }
    
    

    这道题包括和面试官讨论及写出代码,总共花了快一个小时,它给我的感触是,对于陌生的算法,最好的办法是先把思路用伪代码写出来,写的时候不考虑条件怎样成立、边界处理等细节,确定了整体思路后,再写出代码并考虑细节问题。在写代码的时候,需要注意考虑特殊情况:数组为空,数组中只有一个元素,数组中只有两个元素,数组中元素都一样,要增加、删除或查找的是首尾元素等。

  3. 已知一个单向键表,但不知道它的头指针,给出链表中一个节点的指针,并且已知该结点的后续节点不为空,要求删除该结点
  4. 这个题咋看之下无从入手,因为不知道头指针,就无法获得那个节点的前置节点。这时候就得打破常规的思维了,删除一个节点,其实就是让它的后续节点取代它。

    1 
    2 
    3 
    
    Node *temp = p->next;
    memcpy(p, temp, sizeof(Node));
    free(temp);
    
  5. 怎么确定内存中栈的生长方向
  6. 考察对程序内存分配的理解。内存中栈主要用来存放局部变量、函数参数、返回值等。

    我的回答是,定义两个变量a和b,打印出它们的地址,看看是增大还是减小。在这里我犯了一个错误,认为先定义的变量先分配内存,其实这是不能保证的。

    正确的做法是,定义两个函数a和b,a打印出它的参数的地址并调用b,b打印出它的参数的地址,根据地址的增大或是减少来判断。

HR终面

HR面试就是和你聊聊天,问一些你的基本情况,感觉主要在考察你实习的意愿。我的经验是要表现出强烈的想去的欲望,而且最好事先了解一下公司的背景,另外,问能够实习多久时往长了说,反正这并不是最终确定实习长度的时候,并且能够实习更久会给你有加分。
  1. 关于腾讯你了解什么
  2. 实习的目的
  3. 为什么想去腾讯,而不是别的公司
  4. 你的缺点
  5. 同学眼中的你是什么样子的
  6. 同学有过的关于你的最负面的评价

总结

总的来说,笔试面试过程拖得并不久,一次笔试加三次面试在一个星期内完成。但是之后的等待过程却是很漫长,一个多星期之后才收到offer(期间我甚至怀疑是不是没通过HR面试--。),而由于要全国统一进行,所以直到现在还在等待实习流程的继续。不过等待也没有什么不好,这次应聘给了我很多收获,也暴露出我的很多问题,这等待给了我时间去思考去总结,让我成长。

作者: 白色之夜 发表于 2011-05-27 17:21 原文链接

评论: 4 查看评论 发表评论


最新新闻:
· 花旗:HTC每部Android手机向微软支付5美元(2011-05-27 22:44)
· 花旗称微软进军平板电脑市场不晚(2011-05-27 22:35)
· Facebook称不能确定所有权诉讼中邮件真伪(2011-05-27 22:26)
· Skype故障导致部分用户无法登录(2011-05-27 21:21)
· 日本欲在月球上遍布太阳能板 或成发电基地(2011-05-27 21:05)

编辑推荐:推荐阅读:谈谈对于企业级系统架构的理解

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [腾讯 实习生] 推荐:

应聘总结之腾讯实习生(2)

- revlekt - 博客园-首页原创精华区
一面过后一天,接到二面的通知. 面试官一开始针对简历问了几个问题,然后开始问技术问题. 二分查找大家都很熟悉,但如果给出的数组a可能进行了循环移位,如[1 2 3 4]变成了[2 3 4 1](是否移位,移了多少位都不知道),能否写一个程序,快速找出数组中是否存在某元素n. 我最初的想法是,遍历数组,找出移位的点,然后判断n属于哪个区间,进而在那个区间中对n进行二分查找.

给实习生的建议——Make Positive Impact

- aoao - 卓有成效的求职者
什么样的实习生,是受公司和同事欢迎的. 从我观察到的案例,是那些可以做出积极影响的人. 直到今天,我还记得哲学系的一个老教授说的话:“知道什么是make a difference吗. 想象有两个世界,一个世界中有你,一个世界中没有你,让两者的difference最大,这就是你一生的意义. 人生是一个很大的话题,我们把它缩小,套用到实习(工作也一样).

实习生该和谁吃饭?

- nemo - FT中文网_英国《金融时报》(Financial Times)
中国名牌高校经济学大三的“受挫的90后女生”来信说:在学校,我参加社团,组织活动,拿奖学金. 今年暑假开始了我的第一份实习,在一家世界500强上海的全资分公司,做一份与自己的专业并非直接相关的工作. 实习初衷是希望可以了解企业的工作流程,行业的经济情况,更重要的是感受一下工作到底是怎么一回事. 但我面临的最大的挑战不是来自我的工作本身,而是与周围人的相处.

腾讯的内涵图

- keeno - 阿禅日记
2011年5月31日10:33,腾讯QQ 浏览器首页的截图如下:. 内涵关键词:释放、aiww、64. 1小时后,腾讯将图片替换掉了. 对这位如此有内涵的经理或编辑或设计师致敬. © Jason Ng for 阿禅日记, |. 不要用中国手机号来找回Gmail密码.

腾讯电商帝国

- 以外 - 互联网的那点事...
腾讯宏伟的电子商务战略开始逐渐浮出水面. 5月30日,腾讯正式对电子商务业务的内部组织架构进行重组,机构更加复杂全面的电子商务业务线取代了原来的电子商务部,同时进行近十位中、高层管理人员的职位变动及内部人员的调整. 同时,腾讯一直在电商领域全面出击,通过投资进行战略布局. 从今年年初至今,腾讯以超乎想象的速度战略入股了数家电子商务企业,包括已经对外公 布的好乐买、易讯、F团以及数宗尚未对外公布的收购案.

腾讯CMEM的PHP扩展

- duyue - 平凡的世界
最近公司在做相关的业务,由于Memcached协议缺少返回码,为了保证业务数据的安全性,不得已只好自己写个扩展来实现需求. 基于memcache扩展的2.2.6的稳定版开发而来. 代码已经开源,有需要的朋友请拿走,License是PHP License,请自觉遵守. 项目主页:http://code.google.com/p/cmem/.

腾讯:变局前夜

- - 互联网的那点事
8条业务线,20座城市,20000名员工. 做为中国最大的互联网公司之一,腾讯正面临着前所未有的管理挑战. 2012年4月12日,网易发布的一则公告引起了业界的强烈反响. 网易称,旗下重要产品——新闻客户端遭到腾讯抄袭. 腾讯当天上架地新闻iPhone客户端2.0版本在产品整体布局、跟帖页面、图片浏览页面的设计几乎与网易新闻客户端的相关功能和设计完全一致.

抄袭,腾讯 和 产品

- - 黄小肆依旧在理性与感性里挣扎
作者:陈皓 很早就想写这篇文章了,只是想法比较零碎,所以一直没有成文,这两天觉得思考得比较成熟了一些,所以把我的这些想法整理下来,欢迎大家一起和我讨论. 首先,先表达我的立场,我对抄袭的立场持BS和痛恨的态度,尤其是 那些C2C的网站,痛恨这些国外有什么就山寨什么的做法,尤其是那些连界面都不改,像素级的抄袭,连CSS和img都是一样的,更甚者,连图片都链接到抄袭源的网站去了,连源代码都抄的行为,比如: 腾讯抄新浪的代码, 新浪抄twitter的源码.

腾讯的产业长征

- - 今日话题 - 雪球
腾讯的2B问题,最近引发了无数讨论. 把这些讨论总结一下,无外乎就是三个问题:B端市场的产业升级+技术革命,腾讯到底还要不要参与. 刚刚,腾讯时隔六年进行了重大战略升级与公司架构调整,调整后的腾讯,保留了原有的企业发展事业群(CDG)、互动娱乐事业群(IEG)、技术工程事业群(TEG)、微信事业群(WXG);新成立了云与智慧产业事业群(CSIG)和平台与内容事业群(PCG).