前言
先介绍一下,本科和研究生都不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了,投递的是游戏测试开发岗(非测试岗),字节是自己投的第一家公司,也是第一家笔试 面试的公司,面试官应该都是上海部门的,三轮面试都是视频面,面试时间是从下午5:30到9:30,一共是四个小时多一点吧(含每轮之间的等待时间,每一轮等的时间都不长,估计半小时左右吧,实际面试时间应该是有两个半小时),接下来是面经,因为准备时间不是很充分(周五晚上接到的通知,周六下午面试),回头想了下其实很多问题回答的还可以更好,这里放上自己的回答也供大家参考(目前hr已经打电话说面试通过,一周内给意向书,正式offer等正式批一起下发)。
笔试
笔试一共两个小时,15道不定项选择题(多选不得分,少选得一半分数,大部分和测试的一些概念有关),5道编程题,2道问答题。
回答情况:
选择题凭印象答,毕竟从来没学过测试相关的,就本着不确定的就选最少的原则去做。
编程题AC了三道半。
问答题时间不够,只做了一题(另外一题扫了一眼貌似也不会)。
面试
我只介绍了一下自己什么哪个学校在读,学历和所学专业,然后表示了一下参加面试很荣幸。最后一轮的时候介绍了一下自己是思科认证网路工程师和CSDN音视频开发领域的博客专家(前面怕说了被打脸)。
面试官描述:
一面面试官很年轻,感觉人很好,算法题没通过案例测试也没说什么,一直在说写写看,然后可以多调试几次。
二面面试官年纪稍大一点(其实都挺年轻的,看着相对年龄大一些),非常重视基础和算法效率的感觉。
三面面试官看着年纪也不大,开始比较严肃,后面聊开了感觉还不错,技术挺全面,我做的课题他竟然也懂一些。
手撕代码:
Q:二维动态规划dp(扑克牌策略),两个人拿扑克牌,先手怎么拿牌得分最高(一面)。
具体题目
Q先手最高得分:
有N张卡牌堆成一摞,每张卡牌上都会有一个整数标记其分数。
现有两个人要交替从牌堆顶拿牌,每次至少拿一张,至多拿M张,直到牌堆被拿完。
每个人拿至手中的牌的分数和即为其最终得分。假设两个人都会采取最佳策略拿牌来使自己的得分最大化,请问先手拿牌的人的得分为多少?
输入描述
输入第一行是样例个数;
对于每个样例,第一行是N,M,第二行有N个整数,代表牌堆顶到牌堆底N张牌的分数。
0 < N, M < 1,000,000, 每张牌的分数在-100和100之间
输出描述
每个样例,输出一个整数代表先手得分。
示例1
输入
2
4 2
1 1 1 1
5 2
3 -4 1 1 7
输出
2
6
说明
第一个样例,先手拿2张1,最高得分为2。第二个样例,先手拿3,-4,逼迫对方接下来只能拿1,1,最后自己再拿到7,所以先手最高得分为6。
A:写出来了,但是超时了,没通过测试案例,面试官说循环次数过多,也没好意思再问怎么改(写之前问了下有没有时间要求,面试官说没有,你先写着看看,不行可以多调试几次,然后我用dp就超时了,蜜汁尴尬)
Q:堆排序(二面)
A:让大概说了思路,没让具体实现,面试来的比较突然,这块也没看,忘得差不多了,就说堆排不太会,用的不多......然后就问了其他常见排序算法了。
Q:说一说一些常见的算法(二面)
A:堆排序,希尔排序,快拍,冒泡,插入,动态规划,二叉树的相关算法……
Q:挑几个刚刚你说的算法的时间复杂度(二面)
A:问了堆排序(nlogn),快速排序(nlogn),冒泡排序(n方),动态规划(n方)。
Q:编程题字符串输出最长数字子串:(二面)
A:写出来了,中间的时候面试官以为我理解错了(他以为我理解成必须是连续子串,其实是输出最长数字子串就可以了),打断了一次,让我先说下思路,我就说了是从前往后走,遇到数字计数加一,保存最大计数和起始位置,然后输出就行了,说完思路应该是发现我理解没问题,就让我继续实现了。
读入一个字符串str,输出字符串str中的连续最长的数字串例如:输入abcd12345ed125ss123456789aa123456 。输出123456789。
Q:你实现的这个算法遍历了多少次?(二面)
A:遍历一次数组就可以了。
Q:反复跟我确认是不是遍历一次,因为我判断是不是数字用的是while(digital)(二面)
A:开始犹豫了一下,后来想着这个while不是遍历啊,就告诉他,只遍历一次就可以了,判断数字的while用if也可以。
Q:有没有办法改进?怎么改进?(二面)
A:有,可以加一些判别条件,符合条件时不用遍历完整个数组,比如遍历到一半时候发现全部是数字,那后面的就不用遍历了。然后想了想,又说,刚刚说的那个可以扩充,就是遍历到某个位置发现后面未遍历的就算全是数字也不可能最长了就可以退出循环了。
工程题
Q:100000个玩家的战斗力,要排名前500名,而且需要实时更新,怎么处理?(二面)(问这道题因为自己多嘴,本来二面都要完事了,面试官问你觉得自己优缺点是什么?我就说我觉得相比科班出身的和没做过具体工程项目的,我的代码能力弱一点,但是工程能力比较强,然后面试官就说那出一道题考考你)。
A:第一、100000名实时遍历系统一定承受不了或者说这样做代价太大,那么可以首先遍历一遍,挑选出战斗力最高的1000名,然后后面只遍历这1000名就可以了,因为前500名大概率都是前一千名产生的,减少系统开销。
第二、为了防止某些玩家充钱了,大幅提升战斗力,那么可以设置一个阈值,如果某个玩家战斗力增加速度超过阈值,那么这个玩家也应该纳入实时排序过程中。
第三、最后100000名玩家的战斗力可以定期在服务器压力不大的时候,比如休服时期或者夜间,做整体排序,以便校验数据的准确性。
问答题
Q:tcp/udp区别是什么(一面、二面上来的第一个问题)?
A:简单说一句话:tcp面向链接,udp不是,然后我又补充了一下两者的不同:
tcp开销大,udp开销小;
tcp有拥塞控制,可以慢开始,拥塞避免,快重传和快恢复,udp没有,不管网络是否拥塞,udp客户端都可以一直发;
tcp数据完整,按时,按序到达,udp尽力满足;
tcp延时高,适用于数据传输准确度要求高的场合,udp适用于数据传输量大,实时性要求高的场合。
Q:什么时候考的ccna(思科认证网络工程师)和ccie(思科认证网络专家)?(问我的网络的比较少估计是看到了我简历上写的考了这两个认证吧)。(二面、三面)
A:大二、三考的na,大四暑假考的ie。
Q:本科网络工程?主要学的什么?(三面)
A:路由交换方向,一部分网络安全。
Q:为什么选择本科专业?(三面)
A:那时候觉得网络是未来,加上一直对计算机感兴趣就填了。
Q:那你觉得现在不是网络时代了么?移动互联网这么发达?(三面)
A:我理解现在网络更多是一种工具融入到我们的生活之中了。
Q:为什么选择研究生专业(电子与通信工程)?(三面)
A:一是现在网工就业不是那么好,因为更多的企业运用了云服务,我去买腾讯,阿里的云服务,他们给我接口和相关的配套就可以了。 同时也觉得和硬件相关的工作会比较有意思。
Q:对现在自己学的专业的看法?(三面)
A:如实回答,现在做的和通信专业没什么关系,但是根据自己对身边同学的了解,通信更多是编码解码技术和传输技术,比如2-3-4g其本质都是编解码技术的升级,再比如5g的大规模mimo。
Q:你这跨度还挺大的,那你选择专业是因为什么呢?是因为工资么?(三面)
A:更多是因为兴趣,这也是对自己的一种负责(面试官说对,这是一种好习惯)。
Q:数据库了解么?(二面)
A:平时没有涉及过,也不了解(然后就没问了)。
Q:如果最后没能进入我们部门,你觉得最大的原因是什么?(三面)
A:作为技术岗,我觉得可能更多的是自己技术不够精进,还有一个可能就是可能我不是最适合的,适合的才是最好的。
聊项目实习
Q:项目自己选的么?有人一起完成么?(三面)
A:自己选择的,没有别人一起做,实验室做的是光电检测,更多是军方项目。
Q:为什么自己不做实验室的方向?(三面)
A:兴趣爱好吧,实验室多军工,自己不太喜欢做这方面。
Q:怎么说服导师做和实验室不相关的课题?(三面)
A:导师开始说做自己感兴趣的,然后我说做这个他怕我毕不了业,我说给我点时间试试看,然后做了两个月我的算法效果很好,他也就没说什么了,然后我现在做的这个算法是一篇Ei录用,一篇Sci在投,他就更放心一些了。
Q:那你导师不懂你的方向,怎么给你指导呢?(三面)
A:这个问题我想说您不是做我现在做的课题,但是您问我的几个问题却一针见血,所以我觉得经验可能比技术本身更重要,我导师有时候从他的角度给我一些经验未尝是件坏事。
Q:聊聊你的课题(三面)
A:大概说了一下,此处略了。
Q:看你有写博客,你的这些算法有开源么?(三面)
A:一些不重要的部分我都放到网上开源了,算法核心还没有开源。
Q:双目测距和雷达测距的优缺点各自是什么,有比较过么?(三面)
A:雷达首先有硬件成本,双目成本很低。
双目实时性不好,毕竟要去获取图像然后算,雷达速度会快一些。
双目视角好一些,不受距离限制,雷达视角有限,比如汽车倒车雷达,往往车后面要安多个才能实现。
Q:怎么识别真人和照片?(三面)
A:首先是深度,苹果手机的面部识别可以达到支付级安全就是因为他有深度传感器,人脸是有深度信息的,而照片没有。第二种方法是Ai的活体检测,人总是会有细微的移动,而相片没有。
Q:你了解活体检测么?(三面)
A:只做过复现,具体原理不是特别了解。
问岗位
Q:为什么选择这个岗位?(二面、三面)
A:跟导师做项目,觉得实现一个工程,3分写代码,7分靠调试,所以觉得测试开发还是挺有挑战的,就想尝试一下。
Q:测试开发,测试,开发什么区别?(三面)
A:最开始回答是测试主要涉及测试用例,比如一个聊天软件,我们要测试它的各项功能需要一些测试用例;开发主要关注怎么实现;测试开发是要找开发的bug,然后也要有解决bug的能力
Q:那开发就不用找bug么?再详细说一下测试开发和开发的区别?(三面)
A:发现刚刚回答的面试官并不是很满意,然后又想了想,我说测试开发更注重测试的工具与步骤,比如我要测试游戏的并发性能,要1000个人同时在线,找1000个人来玩很显然不现实,这时候我们就要开发一个工具来测试。(好像这是他想要的答案,就说对,测试开发注重的是测试体系的建立)
Q:黑盒白盒了解么?(二面、三面)
A:不了解,然后面试官说测试就是黑盒,你不知道里面是什么,设计输入输出,测试开发就是白盒,你知道里面是什么,设计如何去测试
Q:玩游戏么?(三面)
A:不怎么玩。
Q:为什么不玩?是觉得浪费时间么?(三面)
A:因为玩不好……策略的游戏还比较有兴趣,比如炉石,竞技类的就不太喜欢了,因为玩不好。
Q:那你会觉得那些电竞选手能玩到那个程度是因为他们的天分比较高么?(三面)
A:这个问题我想用之前看过的一段采访回答您,就是采访省状元,说你考了第一名什么感觉,状元回答说能当状元是运气比较好加上天分好一些,但是能上清北是我的努力和实力,我觉得他们天分一方面,也一定离不开努力。
Q:那你觉得如果有个任务就必须要你玩竞技类游戏,你能玩到职业选手水平么?(三面)
A:我觉得我我能达到中上水平,毕竟让一个1米5的和姚明比扣篮不是单纯的努力就够了的,但是我相信只要努力,就能够达到比较高的水平。
Q:所以你觉得做事情努力很重要(三面)
A:努力很重要,当然也要重视方法,不能傻努力
Q:面试官说你很有字节跳动的这种精神,我们叫做“字节范”。
A:点头答应。
聊爱好
Q:你喜欢长跑,跑过全程马拉松么?多长时间?(三面)
A:喜欢,跑过,4小时40分钟,不追随速度的那种跑。
Q:那一公里配速多少呢?(三面)
A:舒服跑5-6分钟吧,最快的话5公里20分钟。
Q:每天跑量多少?(三面)
A:6-7公里吧。
Q:跑全马多久跑一次呢?(三面)
A:20公里比较多,全马不多跑,因为跑全马要在室外跑,哈尔滨气候一年能跑的就那几个月。
Q:那全马是在什么路上跑呢?(三面)
A:我在操场跑。
Q:那得跑多少圈?不会觉得无聊么?(三面)
A:100多圈吧,不会无聊,喜欢和自己较劲的感觉。
Q:膝盖会不舒服么?跑后怎么缓解?(三面)
A:最开始会的,但是发现不舒服的时侯我就注重跑步姿势,再一个鞋一定要好。
Q:鞋多好?一般什么价位?(三面)
A:一般耐克的飞马就可以了,500-600百块钱吧(面试官笑了,可能是我说鞋要好他的心里价位比较高,问完这块还交流了一些跑步的问题,具体记不清了,这块估计聊了有小十分钟,感觉得出来面试官也是跑友)。
Q:那你喜欢跑步可以理解为你是比较自律的人么?(三面)
A:个人感觉自己比较自律。
Q:可以理解为你抗压能力也不错么?(二面、三面)
A:个人感觉比较抗压。
Q:为什么选择跑步呢?(三面)
A:开始是我本科入学,一个老师说你们谁能风雨无阻每天绕操场跑2圈,毕业了你们要是没我混的好,我养你。开始只当是句玩笑话,后来发现确实很难,就坚持着跑,渐渐的发现自己喜欢上了这种成就感,就是很简单,谁都能去做,但是只有我能坚持做下来的感觉。
Q:我懂,我也有这种感觉。
Q:喜欢打羽毛球什么水平?(三面)
A:业务中的中上水平吧,纯爱好。
Q:问志愿活动和奖励,你的奖项里有一个省优秀共青团员,你觉得为什么你能拿到这个奖励(三面)
A:觉得自己在学校期间做的比较多。
Q:问奖学金(三面)
A:本科三等综合,研究生二等。
Q:问绩点(三面)
A:研究生均分76多,本科80多,具体均分记不太清。
Q:印象中的最大的挫折(一面、二面、三面)
A:自己比较乐天派,感觉什么事情都比较看的开,要非说挫折可能就是自己做的比较好也比较努力的时候没有得到别人认可的时候吧,但感觉这也不算挫折。
Q:那就是感觉自己没有遇到特别大的挫折呗?(三面)
A:我觉的是的。
Q:印象中最大的困难(一面、二面、三面)
A:困难的话我感觉就是之前自己比较胖,最开始减肥的过程比较困难(இдஇ; )
Q:自己的优点有什么?(三面)
A:觉得自己遇到问题的解决思路可能比正常人要稍微广一些,然后办事是比较靠谱的,最后因为自己在校期间做的项目比较多,可能工程能力也会相对强一些。
Q:缺点有什么?(三面)
A:有些事情会比较坚持自己的原则,然后不太喜欢应酬。
Q:为什么不太喜欢应酬(三面)
A:因为我觉得可能这种场合更多的时候对我来说是不喜欢,感觉对自己来说大部分时候是不是比较浪费时间的事情,但是如果是工作需要非要去这种场合,我也是可以的,只是内心不太喜欢。
Q:怎么平衡工作、写博客和学习的时间?(三面)
A:我觉得时间总是可以挤出来的,我也没什么其他的兴趣爱好,也不太喜欢看综艺什么的,所以对我来说感觉只要自己平时过紧凑一点,时间总是会有的。
反问环节
Q:地点在哪里?(一面反问、二面反问)
A:北京,上海,可以自己选。
Q:从面试题里感觉你们很注重算法效率(二面反问)
A:是的。
Q:字节跳动编程题一面就这么难的么?和我在网上看到的一些评价不太一样啊?(dp我写超时的那题)(一面反问)
A:看你简历比较优秀,出了道难的题给你做做。
Q:主要用什么语言?(二面反问)
A:语言不重要,语法也就是几个月熟悉,重要的是思路。
Q:加班厉害么?(一面反问)
A:和bat差不多,可能略好一点。
Q:主要做哪些游戏?(三面反问)
A:大概就是说字节刚做游戏,很多即将上线。
Q:你觉得我表现咋样?(一面、二面、三面反问)
A:一轮:可圈可点 二轮:和预期的差不多,可以告诉你的是你可以稍作休息,保持在线状态 三轮:还不错,应该能进,最终录用结果还要看HR。
BOSS面 hr面
三面结束后的第四天晚上9点这一轮加面,网上有人说是SP加面,有人说是小组组长面,有人说是上海游戏部的Head面,有人面这个聊了十几分钟的非技术问题,我是怼了40分钟的技术问题,从我的面试体验来说不太像SP面,可能还是会淘汰人......反正HR是一个问题没问.......
面试描述
约的9点,大概8:50开始的,显示HR小姐姐露了个脸,问了下听不听得见,就躲一边去了,然后一个很瘦,格子衬衫的面试官过来面试了,目测是技术leader的感觉。
Q:什么时候毕业?
A:明年三月份。
Q:了解tcp么?
A:了解一些,您可以问。
Q:tcp/udp的区别?
A:回答见上面
Q:给导师做的项目主要包括哪些内容?
A:主要涉及的是上位机编程和算法。
Q:做的项目的数据量如何?大不大?是几维数据?
A:数据量不大,但是速度比较快,每秒2M左右。应该算二维数据吧,就是仪器信息和时间信息。
Q:项目里上位机部分主要包括什么?
A:主要就是指令集下发,仪器状态监测之类的工作,还有就是数据处理。
Q:数据处理主要是什么样的工作呢?
A:每一个项目的数据分析都不太一样,比如之前做的中石油的核测井项目,形象点说就是给石油矿井做X光,通过井下传回的数据,处理后分析不同深度究竟是石油,天然气还是岩石。
Q:项目里的算法主要包括什么?具体说一下,时间复杂度多少?
A:我做的项目的算法和通常意义上数据结构的算法不太一样,主要是指根据甲方要求实现的算法,比如中石油的项目,软件方面要实现的算法就是根据数据量大小和类型自动切换通信协议,比如数据量大的时候要自动使用UDP协议,特殊的指令要通过串口通信等等。还有比如说之前做的双目测距的算法,就是根据空间立体几何关系来测量导弹是否被安置到了妥当的位置。
Q:有了解你投递的测试开发岗么?
A:大概说了下之前一二三轮面试官告诉我的。
Q:udp通信的不足如何解决?
A:我们之前的解决方案是同步帧,因为UDP存在不安全,阻塞后无序到达的问题,那我们可以在数据的头部加上校验帧头,我在收到UDP报文的时候进行帧同步校验,如果是有序的,完整的就可以去收,如果是乱序了就丢弃,其实也是一种握手的模拟,只不过没有TCP的机制那么复杂
Q:10个玩家通信用udp可能存在的问题,怎么解决,简单说就是UDP的多对多怎么避免无序,不安全的问题?
A:加上同步帧头和数据校验位,A给B发送的数据,在数据头部还要加上指向信息,接收端在接收到数据的时候,只有指向信息符合才接受否则丢弃。(感觉面试官不是很满意)
Q:指针和引用?
A:指针占用内存空间,四个字节,引用不占用内存空间,占用的空间也是引用对象本身占用空间,引用可以说是外号和别称。
指针可以是空指针,引用不可以,引用对象必须存在。
指针的自加是对地址的操作,引用的自加是对引用对象的操作。
Q:内存的操作?
A:new/delete,malloc/free
Q:就这些?
A:目前想到就这些(当时问完指针和引用就有点懵逼了,毕竟四面问这玩意,脑子就有点短路了......)
Q:new和malloc?
A:一个是函数,一个是关键字,一个是程序员自己使用,一个是系统自动调用。
Q:反转链表?(手撕)
A:瞬间懵逼,不是zoom面试么?怎么还手撕?面试官问了下HR,说手撕不了,然后让说思路,我就回答,链表的精髓就是指针,翻转链表其实就是翻转指针。
Q:在哪实习过?
A:寒XX实习过。
Q:做的项目的输入和输出?
A:输入就是摄像头采集的照片,输出就是深度信息。
Q:实习里面机器人避障部分讲一讲?
A:就是获取到深度信息之后给机器人相反的位置信息进行避障。
Q:除了深度信息获取,还包括指令信息是么?
A:是的。
Q:未来三年的职业规划?
A:第一年学习,第二年负责小部分,第三年独当一面,后来发现面试官问的不是这个,说我说的太笼统,是想问我想做什么方向....(蜜汁尴尬)
Q:玩过哪些游戏?
A:玩过LOL,但更喜欢炉石之类的纸牌策略类游戏。
Q:炉石你觉得用什么协议来通信?
A:UDP吧。
Q:简历里看你会OpenGL,你确定么?
A:我的毕业设计里有用到,就是三维重建的过程中找特征点,然后根据特征点进行三角切割,然后把这些点丢到OpenGL里面进行重建。
Q:OpenGL大概会到什么程度?
A:主要是用库函数吧,最简单说就是用OpenGL去贴图。
Q:看你简历里对三星和海康威视比较了解?
A:对,我有做三星和海康威视摄像头的二次开发,目前网上比较主流一点的C 的海康的二次开发的博客很大一部分都是我写的,我的博客主要也就是关注这块,目前一年大概有20万的访问量。
Q:海康威视做的还是不错的。
Q:简历上看你会C 和Python,哪个比较熟悉一些?
A:C 熟悉,Python属于项目里现学现用的那种。
Q:看你是做图像的,你觉得你的学习方法是什么?
A:项目是最好的学习方法,现学现用是最有力的驱动,效果比体系化的学习之后再去做项目学的快。然后数学功底也很重要,最近有在看吴军博士的《数学之美》,就是把数学的思想抽象出来应用的图像上,对于图像处理来说可能数学的抽象能力也非常重要。
反问环节
Q:今天是Leader面,所以我想问一下如果能进的话这个部门的未来可能性?
A:我可以告诉你是任何可能,比如我刚刚问你的三年规划其实是想看你想做哪个方面的东西,我们招的是测试开发,但是进来也会做AI,图像处理,游戏测试,服务端测试,单元测试可能涉及不到。
然后我又表达了下如果可以我希望能坐音视频处理相关的,这样能用上专业知识,我是非科班出身,我的优势在于工程能力和算法。
Q:您觉得我表现咋样?有什么不足?
A:整体上还不错。不足的话一是你的思考问题没有形成回路,比如你采用某种方法改进,和改进前的方法如果能进行对比就更好了,不过问题不大,因为你没有做过大型项目。第二个不足就是你对游戏测试开发了解不够,游戏测开和普通测开还是很大的不同,比如你去测试英雄联盟的游戏性能还是不一样的,你可以回去了解一下。(感觉他说完这个心里凉了大半截,言外之意可能是不了解别瞎投,感觉可以回去等感谢信了......)
最新进展:终面一周后接到hr电话,说面试通过,offer在走流程~
END
各位小伙伴都有哪些心仪的公司?或者还想知道什么哪家公司的面试经历,可以在评论区分享给其他小伙伴和小编,大家可以一起帮你参谋哦~