记拿到360云引擎部门实习offer

前言:

     最近有十多天没有写新的博客了,原因是这段时间特别的忙,学习到的东西与之前埋头苦学完全不同,感觉得到的收获更加的多,眼界变得更加的宽广了。每一天发生的事情都变得特别有意义,相信我的人生道路将会越走越宽广。

我的github

我实现的代码全部贴在我的github中,欢迎大家去参观。

https://github.com/YinWenAtBIT

360笔试题目的github

https://github.com/YinWenForInterview

拿到360offer

投简历:

学习了这么久,感觉以前学习的知识也快忘得差不多了,也不知道自己到底水平如何了。想了一想,决定还是去找一个实习试一试吧,不然都不知道自己学习了这么久到底有一个什么样的成果。

现在不是过年之后大量招聘实习生的时候,于是我就上各大论坛上寻找消息,然后在北邮人论坛上找到了一则360云引擎部门招聘LinuxC/C++实习生的帖子:http://bbs.byr.cn/#!article/ParttimeJob/456430。看了一下感觉和我学习的思路差不多,于是就投了简历。在此之外,我还投了IntelC++实习生,以及给一家招聘算法实习生的创业公司投了简历。

笔试:

最先给我回复的是创业公司,邀请我周一去公司面试。然后面试我的负责人对我挺满意的,然后让我第二天就去上班,当时想着先去试一试吧,然后第二天就直接过去了,在这边也写了一部分代码,感觉收获比在实验室中要大吧,不过确实有点小累。

实习的第二天,也就是9/2日,当天中午在酒店吃饭,然后接到了360打来的电话,告诉我已经把笔试的题目发到了我的邮箱里,让我尽快做完题目,然后给发回去。9/3就是正式的放假了,阅兵三天,于是说利用阅兵的三天把题目给做掉。

阅兵的三天,创业公司也放假,第一天上午看了看阅兵,下午才开始做题,当时觉得时间好紧,毕竟有人打电话当天就有可能开始做题了。于是有点着急,第一题挺简单的还做的不好,最后改了三次才差不多改到了比较完美。

后面三题也没有太大的问题,主要还是调试的时候花了一点时间,大概正好三天的时间把题目做完了,然后打包发回了360hr

笔试的题目:

第一题:爬山问题,有一个爬山模型,需要根据模型想出一个合适的解法,题目实际上很简单(做第一题的时候有点着急,反而思考不周全,做了三次才算做的比较完美)。

第二题:从url中提取keyvalue,实际上是一道字符串解析的题目。核心的要点是先读懂360已经写好的一个类的实现,然后用给定的类的成员方法来完成这一题。问题也不是太难,读明白给定的类,然后根据提供的测试,检查出错的原因,然后一步步修改,很快也做了出来。

第三题:自行编写一个string类,类的成员方法已经给出来,没有给出实现。需要实现的成员方法比c++提供的成员方法要少的多。这一道题也大概2个小时不到就做完了,然后主要是想一些测试用例比较麻烦。

第四题:自行编写一个parse函数,需要做的事情就是给定一个字符串,给定段分隔符合元素分隔符,从字符串中提取出keyvalue对。Jason数据格式里就有这么一个函数(这是后来再创业公司写代码时候熟悉到的),这一段同样需要写大量测试用例,写出测试用例之后发现有了新的错误,多次修改之后完成了函数。

 面试:

把笔试题目打包发回360之后,我就没再想这件事了(毕竟觉得题目不难,其他软条件可能不够好(编程风格,专业对口等),难以脱颖而出)。没想到才过了两天,周一下午就接到了360hr的电话,想要约我面试,然后时间约在了周三的上午。有了这个消息,非常的高兴,然后和女朋友一起去南京大排档吃了晚饭,看完了周杰伦组的小组考核。结果意外发生了,面试官打电话来要求改时间,时间改成了周二下午,也就是明天的下午。

这一下惨了,面试一点准备都没有,送回去女朋友之后,用3个小时吧《UNIX网络编程》这本书过了一遍,复习了一下各个名词,回顾了一下各个函数的API。此时已经到了晚上1点了。早上起来,又复习了一下以前自己写的博客,然后就出发去360大厦了。

 

第一轮:

到了360,见到了面试官,面试官拿出来了一套题目,一个半小时做完。好吧,没想到已经来面试之前已经做过了题目,来了还得再做一遍,不过题目中确实有许多不清楚的地方,我大概记录一下题目的内容:

1. C++变量的作用域与生命周期,已经各种变量的内存分布。(这一题答得不好,以前课本上所学的内容与答错了不少)

后面有一道题,字符串常量在子程序中初始化, 在主程序中打印,我也答错了(常量储存区的生命周期为进程结束之前)。实际上是可以打印出来的。

2.翻转链表,翻转字符串,翻转单词等等几道比较基础的数据结构题目。

3.程序复杂度分析,这种题目很简单,只要以前有做过类似的题目肯定可以做出来。

4. 正则表达式,这个不太熟悉,题目说也可以使用字符串的方法做,这道题不是问题,主要是正则表达式知识点缺失。

其后还有几道题目,时间不够了,因为最初是先打草稿,然后再誊一遍。直接打电话叫来了面试官,面试官说没做完没什么关系,后面的题目就直接问思路就行。

面试官检查题目答案,然后再一张评分表上画勾画叉,评分表上是各个知识点名字的列表,大约有40项左右。

然后面试官问了问数据结构中的问题:

1.搜索二叉树,平衡二叉树,平衡二叉树的旋转(这里当时没答上来zig-zag的旋转方式,当时有点忘记了,不过好在面试官没有细究这一块。)伸展树SplayTree,这个树是比较麻烦的,我只记得树的特性,最核心的Splay操作给忘了,好在没问我Splay操作的细节。(这个回去后一定要再看看)。

2.哈希表,这里有开放定址法和分离链接法。问了我具体两种方法的实现,已经如果哈希表元素过多的处理方法。开放定址法可以使用rehash,分离链接法的rehash方式当时没想起来,可以进行一次二次哈希。

3.图论,这里问了我拓扑排序,图论就问了这一个问题。

然后是网络编程:

1.epoll的实现细节,边缘触发与水平触发的区别,epoll相select的优点。这些内容在自学epoll的时候都学习过,好在当时学完epoll然后写了一段epoll的回射服务器的程序,所以记得比较清楚。

2.滑动窗口协议与拥塞控制,这点是大学计算机网络课程就学习过的知识,好在昨天复习的时候特意再看了看。面试官看我答上来了,也没有问特别细节的问题。

到这里,面试官告诉我面试过了,我问是不是要给我发offer,结果告诉我这才是第一轮。让我等会儿,第二轮的面试官很快就过来。

第二轮:

第二轮的面试官来了之后,先让我自我介绍了一遍,然后对我在华科的学习经历表示了怀疑,主要原因是我写的学院不是电信系,而是电子信息与通信学院,这是因为学院改了名字,解释了一番之后,面试官告诉我他也是华科电信系的硕士。。好吧,难怪会发现这点不正常。

第二轮的面试官听完我的自我介绍之后,没有太多的问题要问我,看来对我第一轮的笔试加面试结果挺满意的。第二轮面试官说,要考察我的学习能力,这一关过了就给我发offer。我特别高兴,没想到就为了检验一下自己现在的本事如何,就这么顺利要拿到offer了。然后面试官问我,有没有听说过go语言,我回答说只在知乎上了解到过,没有学习过。然后面试官给了我一本go语言入门书,加上3道题目,排序,字符串搜索,还一个别的题目。让我用这本书的内容,一个小时做出来。

压力山大,拿着书就开始看,发现直接去阅读语法规则,很有可能来不及,于是只能先翻翻看,有没有类似的例子,只要有例子,把算法改成排序,字符串搜索就可以了。然后大约20多分钟,做出了第一道排序题。第二题的算法也很简单,主要是语言规则不明白,开始写了一个版本,后来回去看书,发现go语言中的字符串都是常量,只能初始化的时候赋值,这样就没法做+=操作了,后面用字符串数组的方式,把所有需要的字符放在了一个数组里,还没想到办法提取出来。时间就到了。

到了这个时候,我以为我的面试已经挂了,打电话给面试官,把做完的题目交给了他,他让我等等,要去讨论一下。

第三轮:

5分钟之后,又来了一个面试官。然后再一次自我介绍,面试官说他也是华科电信系的,好吧,还是华科电信系搞互联网的厉害呀。要不是当时为了来北京,肯定也留在电信系读研了。

第二个面试官直接发难,问我,如果要实现一个启动程序,这个程序从文件中读入输入,通过重定向输出到另一个文件,处理的方式是把要处理的内容传输给10个不同的程序或者脚本,这10个程序都是从标准输入读入,输出标准输出。请问,这个启动程序要怎么设计。

这个问题一下就把我击晕了。我都不知道这个问题要从何答起,好在面试官很耐心,一步步的引导我,先问我,如何实现读取的数据与做处理的10个字进程通信,我想了想,回答说可以使用UNIX域的socket进行通信,或者直接使用socketpair来进行子进程与父进程的通信,使用epoll监听套接字的即可。面试官提醒我说,这个处理程序是从标准输入里读取数据,你这样读取到的数据怎么用呢。

好在我还记得重定向的内容,我回答说可以关闭标准输入的filefd,然后使用dup函数,把socketpair对应的文件描述符filefd复制到标准输入中去。这样就可以实现,然后epoll读取回处理结果。再写到标准输出即可。

全部打完之后,面试官告诉我,这就是mapreduce的实现原理。不过,实际上中间父进程与子进程之间的通信时使用管道来完成的(管道这里都快忘得差不多,一定要复习!!)。然后问我有没有什么问题要提,我立刻告诉他,我这样闭门自学,缺点在哪里,以后想来互联网公司工作,需要再加强哪一些方面。

面试官告诉我:我的水平实际上已经比不少的应届硕士要厉害了,对于我之后的学习,他告诉我来这里实习之后,无论在哪个部门,都可以学到很多的东西。然后自己可以先把APUE这本书看完。然后有余力,可以再去读读nigix的源码。大概就是这样。

然后和我聊了聊部门要做的内容,问我对哪个方向比较感兴趣。然后最后一面,hr面

第四轮:

hr面试,同样是先自我介绍,然后问了一些比较私人的问题。我当时也问了hr为什么需要知道这个,好像和工作关系不大。hr回答我说,主要是要了解留在北京的意愿,所以家是哪儿的,是否独生子女也很重要。我告诉hr说,我女友在北京读博,所以一定会留在北京的。然后后面hr就随意问了几个问题,再问我对公司有什么需要了解的问题没有。大概交流了一下,告诉我回去之后确定了入职的时间,就可以给我发入职的邮件了。

面试完毕,出门一看时间,居然已经是晚上8点了,面试从下午2点开始,一共经过了6个小时,真是累死了。不过结果也意外的让我开心。以前总是以为自己太弱了,没想到还是有一点点水平的。

总结:

360给的实习offer需要实习半年,工作日每周4天,实习工资200一天,包饭(或者选择35一天的餐补)。机会真的挺好的,我投简历的时候也没有预料到一切会进行的这么的顺利,不过在雷科,是绝对不会放人的。和导师沟通之后,过年的时候,暑假找工作之前也是不能去实习的。而且半年的实习时间是更加的不可能了。所以只能无奈的放弃了这个机会。

不过至少,我对自己之后要加强的部分有了一个明确的认识。对自己的水平也有了一个大概的估计。时间还有一年,我要好好的努力,明年的校招我要再一次拿到offer。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值