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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yw8355507/article/details/49421423

前言:

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

我的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。

 

展开阅读全文

360面试记

06-11

  在智联投了份开发岗的简历,当天360就打来电话,约好了面试时间。rn  本以为360还在四惠,结果地图上一查,也不知道什么时候搬到东北四环外去了。我家住在西四环,从西到东横穿北京,坐公交倒地铁,地铁再倒地铁,出了地铁再乘公交奔波十公里。心想还是放弃吧,就算被录用,以后上班也够麻烦的。打开 Gmail,在面试通知邮件的确认信中注明放弃面试。结果没多久电话又打过来了,“劝”了我一会儿,北京这么大谁上班都不近云云。好吧,我不喜欢争论,于是答应了如期面试。rnrn  大雨,于是开车前往。四环绕半圈再上机场高速,心情与雾霾一色,浊水共雨刷齐飞。路上有点堵,将近1个半小时才到。远远看到了电子城大楼的顶端醒目的360的招牌。rn  一楼填完单子,有人来接头。领上楼后,找个空会议室,一面开始了。rn  我真的不知道,77年生的大叔,在这接受层层拷问,算不算是一种失败。09年至今的创业历程虽然让我得到许多精神收获,但最终失败的结局却让我付出了不小的代价。这飞快而又漫长的四年,除了最终给自己颁发了第二枚创业失败“勋章”外,并没有让简历变得更有份量。这四年,业界发生了翻天覆地的变化,金融危机后摧枯拉朽式的科技革新,杀死了一批批跟不上浪潮的小公司(包括自己的创业公司),也正在杀死一批批跟不上时代步伐的大叔。公司关闭后的两个月里,我一直在问自己:当大家都在热火朝天地搞云服务、搞移动互联网时,你在搞什么飞机?rn  一面的面试官是用人部门的经理,很亲和。没问我什么技术问题,倒是挺关心我家离公司的距离,并和我谈起部门中正在进行的项目的技术细节,以及下一步的打算。他说他78年的,比我小一岁,家有小女,比我家的大三岁。我略略有些吃惊。他解释说他已经 Google 了我的个人信息并翻了我的博客。气氛逐渐轻松,我对他的敬意油然而生。一个多小时后,他说下一步和我谈的是人力。rnrn  和人力的谈话算是二面了。人力是个四肢冰凉的男的,很 nice。他介绍了公司的薪酬福利制度,并了解了我以往的薪水情况以及我对新工作的薪水期望。对于我的期望,他不置可否。最后他说,还有最后的复试,让我等一等。rnrn  等了很久,让我去了360搜索的茶水间,复试(三面)终于可以开始了。人力拉来了360最牛部门(搜索)的一个特别牛逼的人,看上去是个80后,标准潮男,留着络腮胡。我头疼到凌晨两点就是他给闹的。他问了我特别多的技术问题,每次以为要结束,他都拧着眉头想出一个新的问题,仿佛不把我的脑细胞不杀光不罢休。我没有把简历投给搜索部门,是因为我自知不够格,算法基础不扎实。可是这位帅哥却很“厚待”我,以搜索部门面试官的优越资态毫不留情地用算法题把我考倒了。他问了我很多细节,比如 EPoll 中的某些常量名,我记不住那么多。这些东西能记住当然好,但我更乐意于用的时候查手册。对于程序框架(Framework)的概念,以及网络程序框架的职责边界,他和我的观点有很多分歧,并且最终也没有达成一致。说实话,我有点累,不希望这样的气氛持续太久,但也没办法,只好忍耐。最后他让我写一段客户端发起TCP连接的代码,我只在纸上简单地写了两行调用,参数省略。他很惊讶地说你没写完啊,我说抱歉。其实我也很奇怪,搞了十来年的网络编程,却没有花心思去记住那些琐碎的API参数。我从内心抵触对这些实现细节的回忆。rn  潮男走了,我大喝了两口矿泉水,头隐隐地疼。看看手机,都6点了,这些人怎么一个也没下班的意思呢。茶水间在两个大办公区之间,不远处坐了几个人,正在讨论不同模块间的消息传递机制。墙上弄了一个大大的搜索框造型,搜索框中有人用白板笔写着“普京离婚啦!”。我不想笑。想想我自己,曾经在没钱买电脑的岁月,写完一个八宝粥罐的圆珠笔芯,用尽一纸箱的练习本,全程启用人肉调试模式写过人机对弈、写过DOS下模拟多任务的界面框架、写过16进制编辑器、写过汇编模拟器、写过解释型语言并用自创语言写过游戏。可是现在我却无法为了职业生计而补全纸面上的那两行函数调用的参数。想想很可笑。络腮胡很牛,但是说实话,这轮面试很不对胃口。rnrn  可能再多的反思也挽回不了今天失败的事实。等了很久,很 nice 的人力又过来了:“对不起让你久等了!你们谈得怎么样?”“还行,不过在他熟知的领域,我有很多不知道的。”我如实相告。人力又问:“你觉得他牛吗?”我由衷地说:“非常牛!”人力感叹:“搜索部就是有牛人啊!”rn  “您今天着急回家吗?不急的话,要不再找个人和您谈谈?”人力征求我的意见。我稍稍有点意外,这面试倒底有几关啊?脑细胞在上一轮都被杀得差不多了。但我还是毫不犹豫地答应了,原因是对方专业的态度和素养。我跟着他又是上楼又是下楼,到了另一层的休息区。人力走了,我静候下一位牛人的到来。rn  来了一个瘦高个,目测70后,看外表是个实用主义者。由于在上一轮耗尽了能量,我只好放低音调,语速平缓表情平淡。寥寥几句重点便自我介绍完毕。他以我的简历为参考,围绕项目的业务模式和实战经验和我展开讨论。对于我提到的某些关键问题的解决方案,他表示认同。对于网络编程领域中程序框架的必要性以及框架的实现思路,我们在看法上的共振频率很一致。我梳理了高性能服务开发中常见并发模型,以及不同场合下的选择策略,讨论了在跨平台环境中从 Reactor 模式到 Proactor 模式的演变方法。他很专业,在我叙述过程中见缝插针地提出关键性的问题,但并不事无巨细。和前一轮相比,我和这位面试官聊得更多、更畅快。如果说前一轮是一盘纠缠不休的意大利面条,那么这一轮更像是饭后的一小杯香茶。rnrn  晚上7点了。低血糖在隐隐发作。旁边的办公区,有不少人在加班。我等着很 nice 的人力、等着几轮面试下来已渐渐变得不重要的面试结果。rn  “对不起,让您受累了,今天面试真是个体力活!”人力匆匆地赶来。rn  “没关系!谢谢你!”rn  “我们面试就到这里,回头我们再联系你。”很标准的面试失败的结束语。rnrn  握手并礼貌性告别,下楼。rn  外面晚风还新,而心态不知从什么时候开始,早就旧了。rn 论坛

没有更多推荐了,返回首页