赞
踩
节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。
今天我整理一位博士算法岗方向面试题,分享给大家,希望对后续找工作的有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以文末加入我们交流群。
先说一下个人背景,国内985本硕博,科研方向是底层计算机视觉,主要方向是超分辨率技术。
字节跳动我投递的是智能创作部门的计算机视觉研究员岗位,面试总共有四轮,前三轮是技术面试,第四轮是HR面试。对于技术问题,我将列出面试官问的问题,以及我当时的回答,还有一些可供参考的相关链接(不一定全面),对于非技术问题,我将挑选一部分常规问题,分享给大家。
首先是比较常规的介绍一下自己博士期间的科研工作和科研成果,期间面试官问了一些跟研究成果有关的问题,然后就是技术问题了。
计算机视觉和机器学习问题
答题表现:这个问题一上来就把我干蒙圈了,bicubic 插值虽然特别常用,但是插值公式我只记得是个分三段的分段函数,具体的数学表达式我是真的不记得了,后来面试官退而求其次,让我写 bilinear,这个就比较好写了。
答案参考:双线性和双三次插值。
答题表现:我列了一下拉普拉斯算子、CANNY算子、索贝尔算子等,然后 CANNY 算子的具体流程我记得不是特
别清楚了,只回答了计算梯度-二值化-非极大值抑制这三步。
答案参考:Canny 边缘检测方法。
答题表现:我按照模型层面、优化层面、数据集层面三个角度列举了一些解决方法。模型层面主要是减少参数量、加入BN和Dropout等网络层,优化层面就是加入正则项,如针对问题设计的正则化算子、常见的L1正则等,数据集层面则是加大数据量、数据增广等。
答案参考:这个可以直接去搜索一下相关问题,overfitting的解决方法很多,这里就不贴参考链接了。
答题表现:这个还是比较简单的,虽然超分辨率问题中几乎没用过BN,但是没吃过猪肉还是见过猪跑的。面试官在我写BN代码的时候还问了一下BN的训练和测试的区别,这个也属于原理性的东西了,BN训练的时候,均值和方差的统计量都是在batch维度上统计得到的,但是测试的时候batch size一般是1,没办法得到统计量,因此一般会保存最后一个训练批次得到的统计量,或者对最后几个批次的统计量进行moving average,用于最后的测试。以上是我的回答。
答案参考:Batch normalization相关资料。
答题表现:这个我当时回答的时候有点忘了,主要还是不常用啊QAQ,当时回答的是按照概率选择一些weight不计算,其实这个回答很含糊。
答案参考:正确答案是按照概率将输出的feature置零,就可以同时解决前传和反传了。
答题表现:这个实在没用过,我当时一脸懵逼,完全不晓得咋回答。
答案参考:其实主要是Dropout会使得BN要用的统计量产生误差,因此Dropout直接在BN前面用会有问题,具体的可以参考链接BN和Dropout一起用的问题。
编程题与数学题
答题表现:当时我还没有复习到排序算法,这道题答得非常以及极其的拉跨,随后面试官看我不太会,就问我知道多少种排序算法,哪些是O(n)的复杂度,哪些是O(logn)的复杂度,这里我还是答得非常差劲,主要是没复习啊啊啊。
答案参考:其实用冒泡排序就行了,冒k次就可以找到第k大的数字,给一个经典排序算法的链接:十大经典排序算法。
答题表现:这个问题一开始我还有点小蒙圈,面试官稍微提示了一下我就知道了,应该用两个rand(7),构成一个二维的平面,然后将其中的一些点均分成10份,每一份代表1-10中的一个数字,就实现rand(10)了。
答案参考:这是leetcode里面的一道中等难度题目,Leetcode-470。
计算机中一般常见的是均匀分布的(伪)随机数,如果要用正态分布,就需要用均匀分布去生成,那么如何用
答题表现:这个我真的是完全没有了解过,直接GG。
答案参考:其实上一问给出了一点提示的,可以通过类似的拒绝采样的方式来求解,不过在计算机编程语言中比较常用的还是Box-Muller方法,参考链接:均匀分布构造其他分布的方法。
小结
到这里字节跳动的一面就结束了,除了介绍自己科研成果时的问题我可以引经据典、对答如流,后面的一些问题有相当大一部分是回答得不太好的,主要原因还是当时正在实习,没有太多时间复习,很多基础的东西(如排序算法、BN、Dropout等)没有复习,就印象不深刻,很难回答得很流利,还是要多复习呀!不过可能是因为博士招聘科研成果相关内容占比比较高,一面我还是通过了。
二面是由部门中做图像生成技术的面试官来进行的,首先还是常规的介绍自己科研经历的过程,然后就是问题环节,问的问题主要都是计算机视觉的问题和编程题。
计算机视觉问题
答题表现:由于是智能创作部门,对GAN的研究比较多,所以面试官问了很多GAN的问题,我就都如实回答了。
你对网络结构的设计有什么心得?
答题表现:我当时的回答具体什么样记不太清了,大概的回答就是,要么就借鉴最新的、来自其他领域的、被证明了有效的框架和模块,如ResBlock、Channel Attention之类的,要么就根据当前任务的数据结构、图像模式、图像特征进行专门化的模块设计。
答题表现:我当时的回答是有三种方法,一种是设计轻量化的模块和结构,一种是对模型进行剪枝或者量化,一种是利用知识蒸馏技术用大模型教育小模型。随后他问了一下我了解过的轻量化模块,我提了一下超分辨率里面用过的IMDB,他就让我介绍了一下IMDB的设计思路。
答题表现:我当时的回答是,我认为attention机制是对卷积局部性、位移不变性这两种特性的补充,通过全局的attention计算来实现较大的感受野。
attention机制的优势是能够以较大的感受野来实现任务性能的提升,可以解决卷积的一些暂时不好解决的问题,但是它的劣势也比较明显,一来是计算量的问题,二来是不一定所有任务都需要attention,它也不是万能的东西。
答题表现:图像超分主要利用的是单张图像内部的局部、非局部特性作为约束和信息补充的渠道,而视频超分则在此基础上还要用到来自其他帧的信息,具体方法上二者的区别也体现在此,视频超分往往致力于怎么去更好地利用各帧之间的关系。
编程题
答题表现:当时我是用python,通过建立字典来做的,最后是新建了一个字典来去重,面试官觉得我建立新字典太耗费空间,我说可以通过merge字典的方式来避免新建,他提议可以双重遍历。
小结
二面由于大部分都是计算机视觉的内容,就没啥太大问题,然后可能面试官也知道我编程刷题刷得不多,所以编程题也问了一道不那么难的。
三面是一个部门的技术主管对我进行面试,首先还是介绍了一下自己的科研经历,然后主管问了我一些问题。
答题表现:当时我的回答一个是根据视频内容,利用视频总结的方法(video summarization)提取出关键帧作为封面,第二个是根据大众的喜好,从视频中选取最容易引起高点击率的帧作为封面。
答题表现:这个我思考了一下,从整数的因数角度回答了出来。
答案参考:这个其实是leetcode的一道中等难度的编程题,Leetcode-319。
随后就是一些工作岗位相关问题的互相提问和解答,这里就不再赘述了。
HR面试主要问的都是一些常规问题,当然由于不是技术面,就没有介绍自己科研经历的环节了,这里简单记录一下HR小姐姐问的问题。
方向问题:去字节想做什么方向?有什么职业规划?对字节的期待是什么?
每次面试之后会做复盘吗?怎么做的?
实习期间遇到了什么问题和困难,怎么解决的?
科研和工作时碰到技术瓶颈怎么解决?
对于不太懂技术的人,比如她自己,请简单地阐述超分辨率和HDR重建这两个方向的区别。
字节跳动是个非常重视技术和员工基础能力的公司,从问的问题就可以看出来,技术面的时候问了很多有意思的基础问题。当然技术面的时候,关于我的个人研究方向,他们也都提出了一些比较深入的问题,可以看出对学术前沿的了解还是很深入的。而且字节跳动的面试官人都非常奈斯,当我有些问题记不起来或者答不出来时,他们都会耐心地提示、给出意见,整体来说面试体验还是非常棒的。
另外,面试过程也给了我启示,那就是要多复习基础知识,包括机器学习、数学、算法题等等。
前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
我们建了算法岗面试与技术交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。
方式①、微信搜索公众号:机器学习社区,后台回复:技术交流
方式②、添加微信号:mlc2060,备注:技术交流+CSDN
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。