面试复盘|顺丰科技视觉算法工程师面经(已OC)

回馈大家~顺利拿到Offer了
听说今年cv算法顺丰只有10个hc,太难了,cv方向算法太不容易了。
希望能给个三连~想要晋升红名呜呜

Timeline:

8.2投递
8.3测评:性格测评,就是性格的一些测试,没有什么所谓的材料分析 ,数字计算,逻辑推理(我一个码农居然还要做行测。太难了)等
……
然后期间就一直没有消息,但是顺丰科技的其他岗位诸如:pm都开始陆陆续续面试了,一度以为自己凉了🤣
直到8.30 发了笔试
9.6 笔试过了约一面
9.9 一面
9.11 告知一面通过,约二面
9.14 二面
9.17 告知二面通过,约HR面
9.22 HR面
9.30 赶着祖国的生日,发意向咯~


笔试

选择题,基础的语法,编程,机器学习和深度学习的基础
2题coding,好像1.08/2,第二题偏难,骗了点分就跑hhh

一面:35mins

一面是个小哥,面试体验很赞,问的也比较基础
怼项目~提问题
基础题:
(1)在原地即不使用任何额外的空间复杂度交换两个数(挺基础的,好像大学的C语言老师就有说过Hhh)
1.相加寄存:a=a+b b=a-b a=a-b 
2.位运算:b=a^b; a=a^b; b=a^b
(2) 机器学习题:模型的方差和偏差是什么,怎么减少bias和var:(蛮经典的一题,不过深度的可能没怎么接触)
要点参考:
Error=bias+var+noise
方差:不同训练集训练的模型对相同测试集上输出的差异。
偏差:模型输出和真实结果的差异
Baging减少方差,boosting减少偏差
二者权衡:高偏差,低方差的模型
(3)BN:太经典了。。。。考了好多次了。。。。
GN,IN,LN的关系:

GN介于LN,IN,GN是基于BN在小batch上效果不好应运而生。LN相当于GN中分组为G=1   ,IN相当于GN中分组G=C.可以具体展开介绍包括沿着哪个方向归一化,归一化后的维度(N,C,H,W)各是多少
敲黑板:伪代码要会写!

追问:Transforemr中用LN,为什么?改成IN会变成什么?

(4)解决梯度消失:、
要点参考:
1.grad_clip
2.Relu→Sigmoid
3.resnet
4.BN
追问:Relu→Sigmoid,为什么可以缓解梯度消失呢?Relu在0点可导性,
以及对于激活函数的要求是什么?
要点参考:
主要是因为它们gradient特性不同。sigmoid和的gradient在饱和区域非常平缓,接近于0,很容易造成梯度消失的问题,减缓学习的收敛速度。这个现象在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一(加分点:介绍Resnet的改进)。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。
在0点不可导,(回去复习高数Hhh)但是会人为地设置此点的导数为0,顺便解释了一下可导性和可微的区别
要求:非线性,处处可微,非饱和,单调,zero-centered,最好还计算简单hhh(加分点:介绍Mobilenet relu &relu 6的改进)。
同时举了个反例sin x,面试官点了点头,又说:不过这几年还真有人用了??
我:?????
然后结束了hhh,比较基础

二面:35mins


二面是个小姐姐,说话柔柔的,面试体验很赞,题型也是比较常规的,反问环节问了问sf的cv岗的一些职责~

基础题:
1.常用的回归损失函数Timeline:
要点参考:
A:L1系列:L1,L2 Loss,SmoothL1 loss(重点介绍:为什么小的梯度用L2,大梯度用L1)
B:IOU系列 IOU ;Generalized IOU; Distance IOU;Compete IOU ~重点介绍各自的缺点和后续采用什么思路去改进的

2.Yolo系列时间线(问的很深,问到了yoloX和对于当前Yolo系列的评价)
要点参考:
(1)Yolov1:FC预测坐标绝对值,7x7 grid预测(相当于最初的anchor free)
(2)Yolov2:用Conv预测坐标的偏移量,BN,先验框的设置
(3)Yolov3:Darknet-53(参考了resnet的残差结构),参考了FPN的多尺度预测,K-means
(4) Yolov4: 太多了。。。。CSPDarknet ,Mish激活函数,Mosaic增强等
**(5)Yolox :AB→AF,sim OTA,Decoupled-head 这个是今年(2021的旷视的)的一个热点,建议好好阅读这篇paper,很佩服这篇文章的作者,respect!

然后分享一下我的view:Yolo从一开始到现在,由v1的AF到AB再到AF,其中不论的anchor-match,data aug,backbone等都有了很大的变化 ,包括v3后的作者推出了cv界,更是没有了统一的界定了。严格说yolo。我个人认为:(1)yolo目前始终注重speed和accrucy的trade-off!这个应该可以作为它的一个中心思想(2)始终One-stage(废话)

3.量化做过吗?TensorRT的推理加速的原理是什么?

4.Focal loss
要点参考:
(1)前置:CE Loss介绍
one-stage vs two-stage:没有rpn直接做回归,太多noise
Loss收敛:大部分是简单负样本,困难负样本(是背景预测为前景,而且分数还挺高的anchor)的学习收到抑制。
(2)α控制正负样本 β控制难易样本,控制的过程,公式分析和介绍
(3)相似应用:OHEM  IoU-balanced sampling等

5.解释一下归并排序吧~
要点:分治思想,递归拆分,栈实现两个有序数组的排序(双指针问题),复杂度分析(排序n递归拆分logn)时间复杂度nlogn,空间复杂度1
写了个伪代码~

反问:顺丰的CV业务~

HR面:30mins

1.Base地的选择
2.手头offer
3.对cv的看法,今后的职业规划
4.实习的心得体会
5.家庭情况
6.对顺丰该岗位的认知
小姐姐很有耐心,一步步的引导~感觉对顺丰又了解了一些

告知一到两周发意向~效率很高

总结:(1)笔试 一般,没啥印象,应该难度适中,认真做进面试不难
(2)面试:广度比较大,不光是撕项目,还问了很多机器学习,cv发展时间线,排序算法,部署加速的问题,而且问的特别细节,追问的也很有水平,考察一个人是不是只吟唱八股文还是认真的有去分析原理看Paper的!不得不说区分度很高,不要看面试无手撕就是简单面一面,细节出成败。
(3)今年明显感觉到CV真的非常卷!不仅要求coding爆表,对于算法的原理,发展,联系,细节考察的非常的细了,想入CV的同学,一定要好好准备呀!

番外:顺丰科技的面试体验,流程效率都很赞!虽然开始看到只有10个hc真的傻了,觉得没戏了。最后还是很荣幸成为分子,意向书也很好看呜呜,面试时恰逢中秋节,顺便看到了推送的月饼也很好看(不是).



#秋招##算法工程师##顺丰科技##面经#
全部评论
恭喜恭喜,能找到自己想去的公司,太棒了!
1 回复 分享
发布于 2021-10-10 14:48
想问问平时都怎么学习呀。刚上研一,之前基础比较差,而且专硕就一年就要秋招了。感觉时间好紧
1 回复 分享
发布于 2021-10-08 07:22
🐂啊,一定好好学习。
2 回复 分享
发布于 2021-10-04 09:17
大佬,顺丰2023届校招开始了吗?
点赞 回复 分享
发布于 2022-07-30 16:08
lz最后去了哪里呀 🤩🤩
点赞 回复 分享
发布于 2021-12-08 12:26
请问老哥,深度学习(cv)方向的笔试题和开发岗一样主要是刷leetcode嘛?还是笔试题主要是深度学习方向的。或者不同公司有不同的情况,有的是考leetcode,有的是专门的深度学习题目? 求回复!!!
点赞 回复 分享
发布于 2021-10-27 18:54
请问楼主是已经有hr电话联系谈薪了吗?
点赞 回复 分享
发布于 2021-10-21 11:04
楼主,这个方便说开了多少吗~😂
点赞 回复 分享
发布于 2021-10-16 00:57
好厉害
点赞 回复 分享
发布于 2021-10-09 17:49
请问算法岗求职,需要准备计算机网络,操作系统这方面的知识吗
点赞 回复 分享
发布于 2021-10-08 14:18

相关推荐

##暑期实习#自我介绍3min简历从上问到下。涉及项目的八股文;1.常见的进程间通信的方式进程间通信(IPC) 是指两个或多个进程之间交换数据或消息的一种机制,目的是实现协同工作。📦 一、常见的 IPC 方式总览表通信方式是否共享内存是否跨主机特点管道(pipe)❌❌简单、方向单一、适合父子进程命名管道(FIFO)❌❌可用于无亲缘关系进程消息队列(message queue)❌❌消息格式通信,可靠性好共享内存(shared memory)✅❌速度最快,需同步机制信号量(semaphore)✅/❌❌控制同步/互斥,不用于数据传输套接字(socket)❌✅支持网络通信,本地也可用信号(signal)❌❌通知事件,数据能力弱内存映射文件(mmap)✅❌利用文件映射共享内存D-Bus / Binder(高层)❌❌高层封装,适合桌面/Android🔍 二、各方式详细解释与示例1️⃣ 管道(pipe)•特点:半双工(单向),仅限父子进程。•使用函数:pipe(fd)•示例:int fd[2];pipe(fd); // fd[0] 读,fd[1] 写2️⃣ 命名管道(FIFO)•特点:路径名形式存在,可用于无血缘关系进程。•使用函数:mkfifo()、open()、read()、write()3️⃣ 消息队列(msg queue)•特点:结构化数据传输,带消息类型,支持异步收发。•接口函数:msgget()、msgsnd()、msgrcv()4️⃣ 共享内存(shared memory)•特点:最快!但需要加锁机制(如信号量)来保证数据一致性。•接口函数:shmget()、shmat()、shmdt()5️⃣ 信号量(semaphore)•特点:用于控制访问共享资源的同步机制,不传数据。•分为 System V 和 POSIX 两种接口6️⃣ 套接字(socket)•特点:最强大!可用于网络通信、跨主机通信。•本地通信常用 UNIX 域套接字:AF_UNIX 或 AF_LOCALsocketpair(AF_UNIX, SOCK_STREAM, 0, fd); // 本地双向通信7️⃣ 信号(signal)•特点:用于异步事件通知,如 SIGINT、SIGTERM 等。•用于告知进程某个事件发生,不适合传输大量数据。8️⃣ 内存映射文件(mmap)•特点:将文件映射到内存地址空间,不需要读写系统调用。•多进程可通过映射同一个文件实现共享。9️⃣ 高层机制(D-Bus、Binder)•D-Bus:Linux 桌面系统中用于服务之间通信。•Binder:Android 专用 IPC 框架,高性能支持远程调用。✅ 总结对比表(按用途和性能)方式性能是否支持多进程通信方向特点管道中父子进程单向简单FIFO中任意单向命名管道消息队列中任意双向结构化、可阻塞共享内存高任意任意最快,但需同步信号量–任意控制同步适合同步控制socket低-中任意/跨主机双向网络、本地皆可signal低任意异步事件数据量极小mmap高任意双向文件映射共享D-Bus/Binder中高层服务通信双向高级封装🛠 应用建议:场景推荐方式进程共享大块内存共享内存 + 信号量父子进程简单通信pipe网络通信 or 跨主机socketAndroid 系统进程通信Binder实时系统内核态/用户态通信自定义 ring buffer / RPMSG微内核服务模块通信高性能 IPC + 端口调度机制2.共享内存的优缺点共享内存是一种允许多个进程访问同一块物理内存区域的机制。这意味着两个(或多个)进程可以“看见”同一块数据区域,不用通过内核反复读写,只要写进内存,另一个进程立马就能读到。📌 在 Linux 中,常见通过 shmget(System V)或 mmap(POSIX)创建共享内存。✅ 二、共享内存的优点优点说明🚀 性能极高不需要内核在中间传递数据,多个进程直接访问同一块内存,速度远快于管道、消息队列📦 支持大数据传输适合频繁、大块数据传输,比如音视频流、传感器数据等🔁 双向通信简便不区分谁读谁写,天然支持双向通信(不像 pipe 一定是单向)🧠 内存可持续使用可以多次 attach/detach,有效控制生命周期🤝 可跨进程共享结构体不只是字节数组,可以共享复杂数据结构(需注意同步)❌ 三、共享内存的缺点缺点说明🧵 缺乏同步机制多个进程同时访问时,必须借助信号量、互斥锁等机制来同步,避免数据冲突或脏读🧩 编程复杂度高相比消息队列、socket,开发者需要手动管理内存结构、同步机制,容易出错🧹 资源管理麻烦如果进程异常退出可能导致共享内存段未释放(需要手动 ipcrm 清理)🔐 权限安全问题进程间共享内存段可能被其他进程 attach,如果没有权限控制,容易泄露或被恶意访问🏷 难以调试调试时很难追踪多个进程对同一块内存的读写行为,容易出现并发 bug🛠 四、适用场景场景推荐使用共享内存实时系统数据共享(如传感器数据)✅视频/音频流处理(高吞吐)✅微内核/虚拟化中的 IPC✅(常与中断配合)简单命令传递/控制信息❌(pipe、socket 更简单)网络分布式通信(跨主机)❌(用 socket)📌 五、总结一句话共享内存优点是“快”,缺点是“难控制”。3.讲一下相关项目分工,项目中遇到的困难,以及困难是如何解决的。4.实习经历相关的问题,主要工作是做了什么5.常见的排序算法有哪些,讲讲他们的具体实现方式6.在学校里学的最难的一门课程,如何学习的,从中收获了什么?7.比赛相关问题#牛客AI配图神器#反问
查看8道真题和解析
点赞 评论 收藏
分享
评论
25
132
分享

创作者周榜

更多
牛客网
牛客企业服务