作者:ljh_shuai
引言
本文主要是记录一下面试字节跳动的经历。
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。
七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试。
后来面试也就是问了C++的一些东西和图像滤波的一些东西,最后让我用数组实现一下队列的数据结构。回答的不是很好,所以就挂了。具体的面试问题我也没记录。
接下来就是正式批面试音视频编解码岗位了。
一面
面试是视频面试,上来就有三个面试官进入房间,还好都没开摄像头。面试过程中主要是一个面试官在问。
首先是自我介绍。。。
然后讨论了一下项目的细节。。。
问:说一下SPS和PPS的区别,
答:sps是序列的参数集,pps是图像的参数集,每一帧都有自己的pps。(感觉跟没说差不多)
问:sizeof(只有虚函数的类) 是多少
答:是4,因为要有虚函数表指针,本来sizeof一个什么都没有的类是1嘛(自己挖坑)
问:为什么sizeof空类是1
答:(难道我要说面试之前刚看过?)额,总得有个标志啥的吧(面试官表示嗯嗯,也差不多,又给我详细解释了一下)
问:说一下C++的虚函数
答:(背了一下面经里面的答案)
问:说一下四种cast
答:(按照面经背了一下,但是回答的很混乱,因为自己也不是很理解)
问:我看你简历里面有写会C++和Python,那说一下Python里的垃圾回收机制
答:我就知道一种垃圾回收机制,就是引用计数(然后说了一下引用计数,扯到了循环引用的问题上)
问:那循环引用怎么解决呢
答:(想了一会,自己瞎说了一下)假如一个对象引用另一个对象,我就去检测一下另一个对象是否引用了这个对象(然后在面试官的提示下说出了智能指针)
问:Tcp三次握手
答:就这一方发送个数据包请求通信,另一方同意通信返回一个数据包,这一方再返回一个ack(后来想想这个回答跟没说差不多,主要是我复习的时候觉得这个岗位应该不会问网络方面的东西,面经里面有我还特意没看)
问:tcp的滑动窗口有了解吗
答:(说了两句就说不下去了,就只好说不清楚)
问:tcp和udp的区别
答:(为什么还问网络啊,好后悔看面经的时候没背)tcp是有连接的,udp是无连接的,tcp是可靠的,udp是不可靠的(就答出来这两点)
问:dts pts的区别
答:什么dts pts?(主要因为说的是英文简称,要是说中文显示时间戳和解码时间戳我还能扯一点)
问:从C++源文件到可执行程序有几步
答:首先是预处理,然后编译,(少答了一步汇编),然后链接。
问:最后来做个题吧:最长递增子序列,用自己的ide编写代码
答:之前没做过这个,做了有二十分钟吧没做出来,也就说了一种思路,然后面试官举了个反例,然后我就很失落。面试官还跟我说,没事的同学(面试官人真好)。
整个面试大概面了五十分钟吧。结束面试,我靠在椅子上陷入了深深的思考,满脑子就是凉凉。过了会电话就响了,说准备等会二面,真是太惊喜了,等了会又打电话说二面面试官太忙了明天再面。就这样结束了一面。
后面想了一下,能通过一面,主要还是项目经历还可以,展现了自己的视频编码专业能力,而且C++的基础问题还行。最后的算法题虽然没做出了但是也说出了自己的思路(虽然是错的)本来算法题没思路都准备放弃了,还好自己没放弃,所以大家在面试的时候一定要坚持住,不要觉得自己没希望了就放弃。当然主要还是运气好,面试官很nice。
二面
第二天二面,面试大概持续了半个多小时,面试官全程微笑,很亲切。
上来还是自我介绍
然后问了一下Hevc相比H264的改进,这个问题我回答的还可以,主要就说了一下块划分已经帧内预测的区别,毕竟帧间和滤波的话也不是很了解。
如果给你offer,现在能来实习吗?这个我需要跟导师商量一下。
然后让我看了两段代码,找出代码中的错误,第一段是一个函数,在函数内部改变了参数的值,但是实参值不会改变,与函数的目标不符。第二段也是在函数内部取变量的地址,然后返回指针,这样离开函数后变量就被销毁了,指针就是空悬指针了。但是第二段代码我当时是没看出来有什么错误,面试官直接说了答案。
写一个线程安全的单例模式,(这个题面经上也有,但是我没有看)写了半天写的也不对。
写一个内存移动函数。我在面经上看过内存copy函数,就问了一下跟内存拷贝有什么不一样吗,让我思考了一会告诉我要考虑重叠的情况,然后就顺利地写出来了(毕竟看过)。
虚基类的作用?菱形继承的时候巴拉巴拉。。。(不得不说运气不错,面试前才看过)
构造函数、析构函数能是虚函数吗?不能,巴拉巴拉。。。
有什么想问的吗?问了一下主要业务,然后又问了一下公司的地址。
三面
二面结束两天后三面,刚开始以为是hr面,问了一下还是技术面。总共面了大概二十分钟吧,还比较轻松。
依旧是自我介绍。。。
问:前两面感觉如何,回答好的地方,不好的地方
答:编码方面答的比较好,网络方面答的不太好。
问:职业规划
答:先学习公司文化,跟同事处好关系,然后提升自己的技术,努力承担更多的业务。。。(反正大概就是这意思)
问:项目中遇到的难点,一直无法解决的问题
答:。。。
问:写道代码题吧:判断链表是否有环。你要定义链表的数据结构,并写一个函数返回bool类型表示链表是否有环。
答:(这真的是很简单的题了,之前看过,很轻松写出来了)
问:有什么想问我的
答:您的职位?主要业务?我进去主要做什么?
三面的面试官也很亲切,全程微笑,面试体验很好。三面结束是星期四,过了周末,周二就发了意向书,字节跳动的面试效率是真的高。
总结
这个岗位的话主要有三个能力要求吧:视频编码,c++以及网络。能通过面试感觉还是运气比较好,毕竟刚开始面试很多知识还都没复习完。希望大家也都能有个好运气,面试加油!