V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wind3110991
V2EX  ›  求职

今天去了广州腾讯研发中心(微信)实习生面试,分享下自己的面试经历吧~

  •  1
     
  •   wind3110991 · 2015-03-18 00:23:50 +08:00 · 11889 次点击
    这是一个创建于 3329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    到了TIT创意园,第一眼进去就觉得。。。我去那么高大上的。。。一栋栋砖厂房内部都改装成了高级办公室,以后如果能在这里工作。。死以足惜 = =
    好了废话不多说,找到了腾讯的4号微信楼,拿了牌子到了3号楼等面试官
    过了10分钟,下来了一位相貌平凡的男生,大概有个26岁左右。。叫我和他一起上楼,还笑着问我,今天没有上课啊~(我翘课来面试的 = = 哈哈)
    然后坐到一个咖啡桌上,我递了一份简历给他,他给了一份题给我做,笑着说:“45分钟后我回来哦~”
    我拿起题目一看= =我去,3道题都是考察编程的(我面试的方向是ios)
    应该都是用c++来考察的

    1、请你写出memcpy函数的实现方法:拷贝函数

    2、请您写出atoi函数的实现方法

    3、请写出双向链表的删除目标值nVal的方法,并输出删除数量

    拿到题后,第一和第三题稍微有些把握。。但是第2题确实有些虚= =毕竟把字符串转整型我把它考虑得太复杂了= =(我没有想过手机去百度查,没意思,虽然周围没人,但是面试一定要诚实!)

    三道题写完之后,1小时过去了。。他回来开始问我有关题目的东西(第一第三题有清晰思路,第一题答得稍微完整一些,第三题二了,居然参数里搞了一个尾指针= =我当时真的太紧张了,因为以为他要给我一些objc的问题。。。没想到全部都是c和c++的概念,第二题只是大概写了思路)
    他也没有直接说我答得不好,开始找我代码里的错,然后我顺着代码讲我的思路。。到了错的地方,他便开始提醒我哪里有问题,并且问我一些基础知识,比如什么是&符号,内存字节数,深复制和浅复制等等。。然后开始对照简历问我项目的事情,我就如实回答(真的如实没有一句假话)

    不过当时真的一个项目做太久了,有实现一个多通道上下文的滤镜算法,他问我怎么实现黑白算法的参数,我顿时懵了,参数我是对照参数表来填的,方法确实是我写的。。但是我忘了参数的具体数字。。他便问这个东西是不是你自己做的,我说是。。(不过能看出他有些失望吧)但是面试官真的挺好人,和我说,做过的东西一样要去牢牢掌握他,不然就失去项目的意义和学习的意义。我挺惭愧的,后来我还聊了一些关于python、服务器后台的东西。

    最后我们开始聊一些和技术没关的东西,我问师兄请问您是哪里的,为什么今天没有问objc的东西。。他说是华师的(虽然我是华工的,但是真的自愧不如),他说,其实挺多同伴以前都是后台开发,后来转型做ios,技术不在于你有多高深,而是你对基础的掌握程度!(赞!!!)

    最后他送走我,我一路上都在反思,不管结果如何,我今天都是收获颇多。
    你对自己所学到的东西有没有用心?
    你对自己的知识掌握如何?
    你值得一份offer吗?
    综合那么多,我也找到了以后学习的方向和动力,无论如何,感谢这位名叫jake的面试官!
    PS:面试结果我会在回复里说的~应该没什么希望了吧= =代码写的漏洞百出啊!

    (下面是重新审视这三题的答案:)
    1、

    2、

    include <ctype.h>

    include <stdio.h>

    int atoi (char s[]);
    int main(void )
    {
    char s[100];
    gets(s);
    printf("integer=%d\n",atoi(s));
    return 0;
    }
    int atoi (char s[])
    {
    int i,n,sign;
    for(i=0;isspace(s[i]);i++)//跳过空白符;
    sign=(s[i]=='-')?-1:1;
    if(s[i]=='+'||s[i]==' -')//跳过符号
    i++;
    for(n=0;isdigit(s[i]);i++)
    n=10*n+(s[i]-'0');//将数字字符转换成整形数字,关键步骤= =唉,我真是。。
    return sign *n;
    }

    2、
    void *Memcpy(void *dst, const void *src, size_t size)
    {
    char *psrc;
    char *pdst;

    if(NULL == dst || NULL == src)
    {
        return NULL;
    }
    
    if((src < dst) && (char *)src + size > (char *)dst) // 自后向前拷贝
    {
        psrc = (char *)src + size - 1;
        pdst = (char *)dst + size - 1;
        while(size--)
        {
            *pdst-- = *psrc--;
        }
    }
    else
    {
        psrc = (char *)src;
        pdst = (char *)dst;
        while(size--)
        {
            *pdst++ = *psrc++;
        }
    }
    
    return dst;
    

    }

    3、
    DLinkList DLinkListDelete(DLinkList L,int i)
    {
    int tempi = 1;
    DLinkList p; //p为查找结点。
    p = L->next;
    while((tempi++) != i && p != NULL)
    {
    p = p->next;
    }
    if(p == NULL) //检查是不是在双链表中的位置
    printf("位置不合法。\n");
    else if(p->next == NULL) //最后一个结点特殊处理,原因最后一个结点p->next没有prior

    {
    p->prior->next = NULL;
    free(p);
    }
    else //进行删除操作
    {
    p->prior->next = p->next;
    p->next->prior = p->prior;
    free(p);
    }
    }
    然后在调用DLinkListDelete的过程中给一个int i值,不断记录删除的次数就好!

    = = 欲哭无泪

    62 条回复    2016-03-04 13:18:13 +08:00
    illuz
        1
    illuz  
       2015-03-18 00:41:29 +08:00
    砖厂房... 还真是搬砖的,哈哈。
    atoi 的实现在 leetcode 上有一题: https://leetcode.com/problems/string-to-integer-atoi/ 要考虑空格、范围的,可以去看看。:)
    双向链表的删除应该是要你在一个函数中完成删除和统计的,还有用 free() 不能执行类里面的析构函数,用 delete 比较好。
    gracece
        2
    gracece  
       2015-03-18 00:45:34 +08:00
    4号楼差不多就要拆了,真是可惜。
    wind3110991
        3
    wind3110991  
    OP
       2015-03-18 01:29:01 +08:00 via Android
    @illuz 谢谢大神啊,我怕如果用c语言没有delete...
    wind3110991
        4
    wind3110991  
    OP
       2015-03-18 01:29:30 +08:00 via Android
    @gracece 请问你是在里面工作过吗
    Sunya
        5
    Sunya  
       2015-03-18 02:05:47 +08:00
    还是蛮喜欢创意园的环境的, 不过我喜欢在贝塔咖啡..
    ruchee
        6
    ruchee  
       2015-03-18 08:04:16 +08:00
    创意园那里环境不错,就在广州塔脚下,前阵去的的时候,微信的办公楼还在装修
    a15819620038
        7
    a15819620038  
       2015-03-18 08:26:54 +08:00 via Android
    谢谢分享~
    jandan
        8
    jandan  
       2015-03-18 08:32:03 +08:00
    死以足惜 = = 为何如此草率
    bcxx
        9
    bcxx  
       2015-03-18 08:41:58 +08:00
    还是这三道题啊…… atoi 得话状态机做的
    sina012345
        10
    sina012345  
       2015-03-18 08:58:40 +08:00 via Android
    真是时运不济,我面的时候是40分钟做7道题。。。坑死我了。。。
    Monad
        11
    Monad  
       2015-03-18 08:59:49 +08:00   ❤️ 1
    memcpy不需要考虑overlap的情况,这是调用者需要保证的。
    MexiQQ
        12
    MexiQQ  
       2015-03-18 09:15:19 +08:00
    看来我等没有希望了
    wilsoncao
        13
    wilsoncao  
       2015-03-18 09:36:01 +08:00
    @Monad 不要吗? 要吧 有一些面试官告诉我这个就是一个考察点。。
    Monad
        14
    Monad  
       2015-03-18 09:37:58 +08:00 via iPhone
    @wilsoncao 那个是memmove了
    如果真要指明了考察这个我觉得是我的话我会先问你这两个的区别 然后再让你实现一个memmove
    wilsoncao
        15
    wilsoncao  
       2015-03-18 09:44:32 +08:00
    @Monad soga,受教了,真大神也!
    crny520
        16
    crny520  
       2015-03-18 09:59:33 +08:00
    带华的都不是什么好货。
    overtrue
        17
    overtrue  
       2015-03-18 10:01:39 +08:00   ❤️ 2
    微信做API那帮人就是SB
    yywudi
        18
    yywudi  
       2015-03-18 10:32:30 +08:00   ❤️ 3
    @crny520
    @overtrue
    我觉得你们俩的回帖很莫名其妙,一个攻击带华的,是攻击华师和华工出来的都不是好货?
    一个扯到微信做API的怎么怎么,这楼纯粹一个实习生的经历分享贴顺便上面都在比较和谐的讨论技术的实现啊指导啊之类的,和微信API有半毛钱关系么?

    说完之后是不是得写上”已block"才是v2ex标准的流程?
    chairuosen
        19
    chairuosen  
       2015-03-18 10:34:01 +08:00
    @crny520 莫开地图炮
    forpledge
        20
    forpledge  
       2015-03-18 11:17:35 +08:00
    这种面试蛮舒服的
    overtrue
        21
    overtrue  
       2015-03-18 11:57:53 +08:00
    @overtrue 只是劝人莫入坑,团队很重要,看看微信API的各种命名,你就不应该去学坏。如此而已,不要多想,伤身体。
    overtrue
        22
    overtrue  
       2015-03-18 11:58:28 +08:00
    @yywudi 看我上条回复你的,@ 错了
    yywudi
        23
    yywudi  
       2015-03-18 12:59:44 +08:00
    @overtrue 了解。

    我觉得作为还在读的学生,不管是实习还是毕业找工作,可能考虑更多的是公司层面的评价,BAT啊,高大上啊,能进去就不错啦。何况从楼主描述来看,还是一次不错的技术交流过程。

    至于公司里面具体团队的好坏,那的确是需要老鸟的指点
    RagnarokStack
        24
    RagnarokStack  
       2015-03-18 13:15:04 +08:00
    4号楼和5号楼都要快搬了。。
    楼主的头像是真人嘛?
    onevcat
        25
    onevcat  
       2015-03-18 13:16:40 +08:00
    ...原来 iOS app 开发都是后台开发转的..难怪看不到专业性..
    overtrue
        26
    overtrue  
       2015-03-18 13:23:23 +08:00
    @yywudi yes.
    wind3110991
        27
    wind3110991  
    OP
       2015-03-18 13:29:12 +08:00
    @crny520 请您放尊重一些,你的意思就是日本人都是坏人,作为一个做技术的人,我承认技术是很重要,但是技术再牛,也只是软件的一部分而已。就像你不能说学文科的人都是智商低,没水平的人,就算你是清华北大的学子,我也只会承认你的技术,不会承认你这个人
    SeanChense
        28
    SeanChense  
       2015-03-18 13:46:06 +08:00
    那我这种半路出家写 iOS 的岂不是彻底没戏了。
    mornlight
        29
    mornlight  
       2015-03-18 14:20:12 +08:00
    考察C++ 的意图是什么
    ivenvd
        30
    ivenvd  
       2015-03-18 15:31:21 +08:00
    不能认同面试官的想法,这样招到的人去学 iOS,很难写出专业代码,做出专业事情的吧。

    感觉比起 C++/数据结构,更应该考察用户体验的理解、相关知识面、对 iOS 开发生态环境的了解、设计模式等等。
    Actrace
        31
    Actrace  
       2015-03-18 16:20:40 +08:00
    微信的api其实做得还可以。。。虽然wiki看起来挺让人头疼。。。我觉得wiki也应该找个产品经理来设计一下。。。要尊重用户体验嘛~
    duoglas
        32
    duoglas  
       2015-03-18 16:20:42 +08:00
    @ivenvd 可能主要碍于校园里直接教学的毕竟是c,c++, 从这里着眼出题更容易看出一个人的基础能力.
    如果直接出题objc的话, 学过和没学过差别太大, 无法了解其本身的能力了.

    当然, 这是指校招, 社招就不一样了.
    Twinkle
        33
    Twinkle  
       2015-03-18 16:32:58 +08:00
    @RagnarokStack 楼主头像是柏木由纪
    ivenvd
        34
    ivenvd  
       2015-03-18 16:40:13 +08:00   ❤️ 1
    @duoglas 不是考 objc,我的意思是如果对方学过 iOS 开发,那至少要考察他学习态度和了解的程度,很容易看出一个人是只学课本还是热爱实践。而考察 C/C++ 是看不出来的。

    个人觉得,对于做上层应用的人来说,学习能力、实践热情、对新技术的敏感度、对用户体验的追求等等远比基础知识重要。只会学课本的人永远写不好上层应用。
    ivenvd
        35
    ivenvd  
       2015-03-18 16:43:46 +08:00
    @duoglas 补充一下,我的意思是 C/C++ 也可以考察,但是只考察这个就很片面了。
    duoglas
        36
    duoglas  
       2015-03-18 17:04:30 +08:00
    @ivenvd 嗯 是的, C/C++应该只是笔试流程, 其他的那些素质的检查应该是包括在楼主答题完成后和面试官聊天的整个过程中的
    RagnarokStack
        37
    RagnarokStack  
       2015-03-18 17:09:18 +08:00
    @Twinkle 为什么跟我印象中的差那么远。。
    zjuster
        38
    zjuster  
       2015-03-18 17:16:13 +08:00
    iOS岗,只考C和C++是什么情况,提python和后台又是什么情况...
    aa45942
        39
    aa45942  
       2015-03-18 17:37:54 +08:00
    这题目。。。让我想起了 (林锐)高质量C++编程指南 ← ←
    开篇就有不用标准库实现strcpy的例子,不过后来有人指出此例子答案存在漏洞,当两个地址的差值小于size的时候会造成内存覆盖
    看给出的答案,似乎memcpy中没检查src + size是否溢出,甚至没检查size值是否非法。。另俩没时间看,下班= =
    Yuk
        40
    Yuk  
       2015-03-18 19:08:25 +08:00
    感觉校招还是看重基础。。
    shanks
        41
    shanks  
       2015-03-18 19:28:49 +08:00
    一个莫名其妙的人开了地图炮。。。从来没B过人,今天试试= =

    就凭华南工地大学,赌一毛钱LZ头像不是本人 XD

    另外表示我实在太菜了,三道题都不会的说
    falcon05
        42
    falcon05  
       2015-03-18 19:36:15 +08:00 via iPhone
    华农计算机可是很强的哦
    gracece
        43
    gracece  
       2015-03-18 20:37:12 +08:00
    @wind3110991 是的,实习。
    hljjhb
        44
    hljjhb  
       2015-03-18 22:07:09 +08:00
    @yywudi 我已经B 就不@他们两个了
    willerce
        45
    willerce  
       2015-03-18 22:10:13 +08:00
    哎哟,jake大神也上 v2ex 的哟
    wind3110991
        46
    wind3110991  
    OP
       2015-03-19 01:35:21 +08:00
    @willerce = = 唉,我当时紧张得双向链表都不会写了
    albert43
        47
    albert43  
       2015-03-19 19:12:34 +08:00
    诶诶诶诶。我比你早一天面了广研微信,也问了双向链表删除的同一道题,TTT的今天刚面完二面。话说我也是华工的啊,没感觉见过你。
    wind3110991
        48
    wind3110991  
    OP
       2015-03-19 23:33:54 +08:00
    @albert43 = =你有收到通知没有啊,你是面的什么方向
    albert43
        49
    albert43  
       2015-03-20 10:12:49 +08:00
    @wind3110991 当时那个面试官就跟我说,”你可以认为你这一面已经过了,你可以不去参加29号的笔试”。然后最后说二面应该在四月初,我面的是微信iOS底层的。
    tiancaiamao
        50
    tiancaiamao  
       2015-03-20 12:29:43 +08:00
    memcpy考虑效率的话,要先按机器字长做复制,到不足word时再单个拷贝。
    要玩奇技淫巧,参考duff's device
    真正的实现,一般是用汇编做的
    jianqiu
        51
    jianqiu  
       2015-03-20 15:26:35 +08:00 via iPhone
    醉了醉了。上次去面试也是这三个题
    coc
        52
    coc  
       2015-03-20 23:29:46 +08:00   ❤️ 1
    @albert43 iOS还分底层呐...
    wind3110991
        53
    wind3110991  
    OP
       2015-03-21 01:42:37 +08:00
    @jianqiu 你过没。。
    wind3110991
        54
    wind3110991  
    OP
       2015-03-21 01:43:15 +08:00
    @coc objc不是基于c吗。。有许多东西直接调用c库的吧
    albert43
        55
    albert43  
       2015-03-21 16:29:53 +08:00
    @coc 我面的部门主要是负责客户端架构、性能优化和内核开发这块,不是做产品的。
    goldensmithereen
        56
    goldensmithereen  
       2015-03-23 13:54:21 +08:00
    @onevcat 基础是重要,但是顶层开发者全是很少接触到底层的东西,而且一般来说也是自上而下地去学习,不分技术领域,上来就C++、算法什么的有点太古板。毕竟招聘一个高级工程师不会上来接给几道经典力学的题拿来做吧。
    jianqiu
        57
    jianqiu  
       2015-03-24 18:09:16 +08:00
    @wind3110991 没~不熟了
    coc
        58
    coc  
       2015-03-25 11:20:13 +08:00
    @albert43 总得先确定到性能瓶颈才去调优, 除非整个app都用c/c++去写,否则不管是架构还是调优还都会涉及oc东西吧。
    albert43
        59
    albert43  
       2015-03-25 11:41:30 +08:00
    @wind3110991 你一面过后有消息吗?我昨天下午去面了二面,感觉可能要跪了T.T。
    albert43
        60
    albert43  
       2015-03-25 11:57:21 +08:00
    @coc 你说的对,其实一般的开发者或者说一些小应用大部分都很少会去考虑性能问题,一般就遵从苹果的意见在OC层面注意一些基本的性能问题就好。可能大公司会比较深挖这些吧。问了一些Unix操作系统kqueue的还有socket的问题,OC的runtime,内存管理,还有自己项目在性能优化方面做过什么。完全没问什么UI界面动画那些。
    coc
        61
    coc  
       2015-03-25 12:43:04 +08:00
    @albert43 很多oc层面的不当编码或者api的使用都会造成很严重的性能问题。现在内存管理和runtime都被归到底层了吗。
    jusonalien
        62
    jusonalien  
       2016-03-04 13:18:13 +08:00
    过几天我也要去微信面试了 也是这个地点,不知道结果会怎样,只能祝福自己~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5699 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 01:45 · PVG 09:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.