bilibili视频云技术部面经(社招)
数个月以前有幸经介绍面试b站,当然自己也是特别期待,那至于公司规模什么的相信大家多少有数,套路少, 直接现场面试。此次一共3轮技术面,本人在第三轮不幸被淘汰,如果只想看通过面试的小伙伴可以不用继续看了(:з」∠)
这次没有具体面试的岗位,视频云技术部服务端主要业务是视频流处理,主要使用c语言,本人这方面只是对ffmpeg略知一二,因此面试官没有过多提出这方面问题。另外需要说明的是,此次面试是社招面试,套路可能有些许不同。不用过分纠结某些细节。
我先前实习的公司,主要做PHP相关的项目,有一部分通过golang实现,基本上golang这一块我是自学,另外掌握一些java,就是当时我的水平。上来先让我描述一下自己的项目。说了一通。我认为公司的技术选型有问题,日志系统硬上mongodb,这些我在简历里面体现了,典型给自己挖坑。后面我会说一下我本人给自己挖的坑,希望小伙伴不要和我犯同样的错误。我向面试官描述了我的业务场景,面试官问我为什么不用hbase,我不会hbase,后来查阅资料,其实我的需求这两个都不需要用,略过。然后还问了一些常用的开源软件,zk等,用过会,没用过自然不会。这里多说一句,如果你曾经用过某个开源软件,但是太久忘了,那么面试前最好的方式是,了解它怎么配置,一来比较能体现你用过,再来如果请你分析开源软件是否适合某个业务场景,你通过配置文件往往能快速了解该软件的特性,以便做出判断。当然,最好的方式还是勤做笔记,国内互联网就是这样,大部分工作靠勤,而不是智商。
然后开始问算法,快排,基数,堆排,计数,时间复杂度空间复杂度,非常熟练。单链表反转,深度优先遍历。熟练。
又问了一些php的问题,写闭包的时候怎么使用闭包外的变量?use关键字。说几个魔术方法,都是干什么用的?说include和require的区别?array_*()函数系列,几个常用的,都干嘛的?8大内置数组?PHP各个版本之间区别,PHP7特性,PHP的内存泄漏问题(鸟哥博客有说)我接触过swoole,也问了一些使用swoole过程中踩的坑,对swoole的看法等等,这部分比较发散。
接下来是二面,top命令,每一列都是啥意思,netstat,iostat,cpuinfo。问了redis, 这方面问很多,集群化配置,我用过tweproxy。SET命令执行流程,基本数据结构(string,list,hash,sorted set,set),redis INFO命令,说一下一致性hash算法(集群化常用到这个,建议掌握)。redis主从策略,不同场景下策略的选择。
nginx部分,先问了个小技巧,怎么让nginx崩溃,实在不会,不知道小伙伴有没有想法。然后说说nginx启动流程,事先准备过。然后问配置问题,怎么根据cpu数量做配置,譬如默认多少个worker进程,work process 怎么设置,nginx和php通信问题?fast-cgi。有什么坑?
网络方面,长短连接区别,socket通信原理。
三面是部门技术总监面试,上来给出场景,怎么统计当前某个直播房间的观看人数,并在网页上显示给这个房间的观众和主播,要求尽可能高的实时性。我的想法是直播间都有附带一个基于websocket的聊天室,我们只需要去数当前server端的fd数量就可。我认为可行,但是总监不太满意,毕竟有一个前提条件是,你得有一个聊天室。后来我问了了解直播技术的同学,他说rtmp服务器推流的时候,可以统计当前接收这个流的客户端数量,这个实在不会。
还有一个问题是敏感词过滤,也是b站重点需要做的一项业务。我当时对kmp掌握不熟,坑了,循序渐进,继续问怎么对next数组优化,不会。然后,总监说了一个喷泉算法,我从来没听过,网上没找到过详细说明的博客,有小伙伴会吗。这里说一下,当天总监在开会,二面三面之间过了很久,有点疲劳,三面还没有发挥好,不过主要还是不够扎实。
关于简历,其实老实说,我简历上说的实习项目有部分夸大实际,这夸大的部分其实是我自学的,有这些固然好,但是应届生最终看重的还是基础,当然如果深入了解某些热门的开源软件,肯定是没有坏处。即可以从中学习巧妙的设计,又扩展知识。关于坑自己,本人觉得倒可以假装自己是面试官,我看到你的简历写着你会redis,我想问什么?如果我也在用,可能问的比较多的,特性,配置,性能优化,业务场景,这些属于与代码不沾边的,完全可以网上搜搜博客就对答如流,至于源码,不要过多纠结,特别不要在简历上装x,也许你会碰到特别熟悉源码的大神,那你看的那点源码的皮毛,你的理解能力,就给面试官一种很菜的感觉了。